Merge branch 'master' of https://github.com/wrmswindmill/incubator-weex-playground
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/ATSDK b/ios/Pods/ATSDK-Weex/ATSDK.framework/ATSDK
deleted file mode 100644
index bfc8c92..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/ATSDK
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATManager.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATManager.h
deleted file mode 100644
index d9351f7..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATManager.h
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-//  ATManager.h
-//  AT
-//
-//  Created by ZhuBicheng on 15/7/14.
-//  Copyright © 2015年 alibaba. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-#import <objc/runtime.h>
-
-#import "ATStatusBarView.h"
-@interface ATManager : NSObject
-
-@property (nonatomic,assign) BOOL wantFullTouchable;
-
-@property (nonatomic,strong) NSString *watermark;
-
-@property (nonatomic, strong, readonly) NSMutableArray *customizePluginArray;
-
-@property (nonatomic, strong, readonly) NSMutableDictionary *customizeSubPluginDic;
-
-@property (nonatomic, strong, readonly) NSArray *removedPluginIdArray;
-
-+ (ATManager *)shareInstance;
-
-- (void)show;
-
-- (void)dismiss;
-
-- (id<ATStatusBarViewProtocol>)statusBar;
-
-/**
- *  添加一级自定义插件
- *
- *  @param pluginId                插件id
- *  @param pluginName              插件name
- *  @param pluginIconName          插件图标
- *  @param pluginEntry             插件入口类
- *  @param pluginArgs              插件参数
- */
-- (void)addPluginWithId:(NSString *)pluginId
-                andName:(NSString *)pluginName
-            andIconName:(NSString *)pluginIconName
-               andEntry:(NSString *)pluginEntry
-                andArgs:(NSArray *)pluginArgs;
-
-/**
- *  添加二级自定义插件
- *
- *  @param parentPluginId          一级插件id
- *  @param subPluginId             二级插件id
- *  @param pluginName              二级插件name
- *  @param pluginIconName          二级插件图标
- *  @param pluginEntry             二级插件入口类
- *  @param pluginArgs              二级插件参数
- */
-- (void)addSubPluginWithParentId:(NSString *)parentPluginId
-                        andSubId:(NSString *)subPluginId
-                         andName:(NSString *)pluginName
-                     andIconName:(NSString *)pluginIconName
-                        andEntry:(NSString *)pluginEntry
-                         andArgs:(NSArray *)pluginArgs;
-
-/**
- *  移除预置的插件
- *
- *  @param pluginIdArray 待移除的插件id
- */
-- (void)removePluginsByPluginIdArray:(NSArray *)pluginIdArray;
-
-/**
- *  根据plist配置文件,添加自定义插件
- *
- *  @param plistName plist名称
- */
-- (void)addPluginByConfigPlistName:(NSString *)plistName;
-
-@end
-
-
-
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATPluginPrivateProtocol.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATPluginPrivateProtocol.h
deleted file mode 100644
index 0582154..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATPluginPrivateProtocol.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-//  ATPluginPrivateProtocol.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/2/23.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#ifndef ATPluginPrivateProtocol_h
-#define ATPluginPrivateProtocol_h
-
-#import <UIKit/UIKit.h>
-#import <Foundation/Foundation.h>
-
-@protocol ATPluginPrivateProtocol <NSObject>
-
-@optional
-
-- (BOOL)pluginShouldClosed;
-
-- (void)containerTapInView:(UIView *)view;
-
-
-@end
-
-
-@protocol ATPluginDelegate
-
-- (void)pluginDidLoadInContainerViewController:(UIViewController *)containerViewController withArgs:(NSArray *)args;
-
-- (CGRect)wantReactArea;
-
-
-@optional
-
-/**
- *  Default YES if not implement.
- *
- *  @return
- */
-- (BOOL)pluginShouldClosed;
-
-- (void)pluginDidUnloadInContainViewController:(UIViewController *)containerViewController;
-
-- (void)containerViewControllerTapInView:(UIView *)view;
-
-- (CGRect)wantIgnoreArea;
-
-@end
-
-#endif /* ATPluginPrivateProtocol_h */
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATPluginProtocol.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATPluginProtocol.h
deleted file mode 100644
index 87f8fa3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATPluginProtocol.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-//  ATPluginProtocol.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/2/23.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#ifndef ATPluginProtocol_h
-#define ATPluginProtocol_h
-
-#import <UIKit/UIKit.h>
-#import <Foundation/Foundation.h>
-
-@protocol ATPluginProtocol <NSObject>
-
-//=================
-//=   生命周期     =
-//=================
-
-- (void)pluginDidLoadWithArgs:(NSArray *)args;
-
-- (void)pluginWillOpenInContainer:(UIViewController *)container withArg:(NSArray *)args;
-
-- (void)pluginWillClose;
-
-- (void)pluginDidUnload;
-
-//=================
-//=    环境设置    =
-//=================
-
-
-- (CGRect)wantReactArea;
-
-
-@optional
-
-//=================
-//=    扩展设置    =
-//=================
-
-+ (NSString *)pluginVersion;
-
-- (void)tapStatusBarItemIndex:(NSInteger)index;
-
-- (CGRect)wantIgnoreArea;
-
-@end
-
-#endif /* ATPluginProtocol_h */
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATStatusBarView.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATStatusBarView.h
deleted file mode 100644
index f36a68e..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Headers/ATStatusBarView.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-//  ATStatusBarView.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/4/7.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-@class ATStatusBarView;
-
-
-@protocol ATStatusBarViewProtocol <NSObject>
-
-- (void)setTexts:(NSArray *)texts;
-
-@end
-
-@interface ATStatusBarView : UIView<ATStatusBarViewProtocol>
-
-- (void)clear;
-
-@end
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/LICENSE b/ios/Pods/ATSDK-Weex/ATSDK.framework/LICENSE
deleted file mode 100644
index fad3577..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-
-FMDB
-Copyright (c) 2008-2014 Flying Meat Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
\ No newline at end of file
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/ATPluginList.plist b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/ATPluginList.plist
deleted file mode 100644
index a2bb01b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/ATPluginList.plist
+++ /dev/null
@@ -1,267 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<array>
-	<dict>
-		<key>id</key>
-		<string>databoard</string>
-		<key>name</key>
-		<string>数据板</string>
-		<key>icon</key>
-		<string>data_board_icon_show.png</string>
-		<key>highlightIcon</key>
-		<string>data_board_icon_show_h</string>
-		<key>entry</key>
-		<string>ATDataBoardPlugin</string>
-		<key>version</key>
-		<string>1</string>
-		<key>args</key>
-		<array>
-			<string>watermark</string>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>vision</string>
-		<key>name</key>
-		<string>视觉</string>
-		<key>icon</key>
-		<string>vision.png</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>input</string>
-				<key>name</key>
-				<string>导入</string>
-				<key>icon</key>
-				<string>input.png</string>
-				<key>entry</key>
-				<string>ATInputImagePlugin</string>
-				<key>args</key>
-				<array>
-					<string>alive</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>move</string>
-				<key>name</key>
-				<string>移动</string>
-				<key>icon</key>
-				<string>move.png</string>
-				<key>entry</key>
-				<string>ATMovePlugin</string>
-				<key>args</key>
-				<array>
-					<string>view</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>border</string>
-				<key>name</key>
-				<string>边框</string>
-				<key>icon</key>
-				<string>border.png</string>
-				<key>entry</key>
-				<string>ATBorderPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>straw</string>
-				<key>name</key>
-				<string>吸管</string>
-				<key>icon</key>
-				<string>straw.png</string>
-				<key>entry</key>
-				<string>ATStrawPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>grid</string>
-				<key>name</key>
-				<string>网格</string>
-				<key>icon</key>
-				<string>grid.png</string>
-				<key>entry</key>
-				<string>ATGridPlugin</string>
-				<key>args</key>
-				<array>
-					<string>statusbar</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>font</string>
-				<key>name</key>
-				<string>字体</string>
-				<key>icon</key>
-				<string>at_plugin_font</string>
-				<key>entry</key>
-				<string>ATFontPlugin</string>
-				<key>args</key>
-				<array>
-					<string>view</string>
-				</array>
-			</dict>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>performance</string>
-		<key>name</key>
-		<string>性能</string>
-		<key>icon</key>
-		<string>performance.png</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>cpu</string>
-				<key>name</key>
-				<string>CPU</string>
-				<key>icon</key>
-				<string>CPU.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>CPU</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>frame</string>
-				<key>name</key>
-				<string>帧率</string>
-				<key>icon</key>
-				<string>frame.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Frame</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>memory</string>
-				<key>name</key>
-				<string>内存</string>
-				<key>icon</key>
-				<string>memory.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Memory</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>battery</string>
-				<key>name</key>
-				<string>电量</string>
-				<key>icon</key>
-				<string>at_plugin_battery</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Battery</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>traffic</string>
-				<key>name</key>
-				<string>流量</string>
-				<key>icon</key>
-				<string>at_plugin_traffic</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Traffic</string>
-				</array>
-			</dict>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>tools</string>
-		<key>name</key>
-		<string>工具</string>
-		<key>icon</key>
-		<string>at-p-tools</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>Mmuvp</string>
-				<key>name</key>
-				<string>埋点验证</string>
-				<key>icon</key>
-				<string>at_plugin_mmuvp</string>
-				<key>entry</key>
-				<string>MmuvpInitalize</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>log</string>
-				<key>name</key>
-				<string>日志</string>
-				<key>icon</key>
-				<string>log.png</string>
-				<key>entry</key>
-				<string>ATAlogPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>userdeflaut</string>
-				<key>name</key>
-				<string>UD查询</string>
-				<key>icon</key>
-				<string>at_plugin_userdeflaut</string>
-				<key>entry</key>
-				<string>ATUserDefaultPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>memoryWarning</string>
-				<key>name</key>
-				<string>内存警告</string>
-				<key>icon</key>
-				<string>at_plugin_memorywarning</string>
-				<key>entry</key>
-				<string>ATMemoryWarningPlugin</string>
-				<key>args</key>
-				<array>
-					<string>alive</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>fileBrowser</string>
-				<key>name</key>
-				<string>沙盒查看</string>
-				<key>icon</key>
-				<string>at_plugin_file</string>
-				<key>entry</key>
-				<string>ATFileBrowserPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>cookie</string>
-				<key>name</key>
-				<string>cookie</string>
-				<key>icon</key>
-				<string>at_plugin_cookie</string>
-				<key>entry</key>
-				<string>ATCookiePlugin</string>
-			</dict>
-		</array>
-	</dict>
-</array>
-</plist>
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/CPU.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/CPU.png
deleted file mode 100755
index 2816507..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/CPU.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/CPU@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/CPU@2x.png
deleted file mode 100755
index 413cd37..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/CPU@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at-p-tools@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at-p-tools@2x.png
deleted file mode 100644
index db44af9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at-p-tools@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at-p-tools@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at-p-tools@3x.png
deleted file mode 100644
index 06c92d6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at-p-tools@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_alert_cancel@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_alert_cancel@2x.png
deleted file mode 100644
index 8807af5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_alert_cancel@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_alert_confirm@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_alert_confirm@2x.png
deleted file mode 100644
index 208c988..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_alert_confirm@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_close@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_close@2x.png
deleted file mode 100644
index ffdf4c5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_close@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_close@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_close@3x.png
deleted file mode 100644
index 2f603bb..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_close@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_ok@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_ok@2x.png
deleted file mode 100644
index fd9f256..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_ok@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_ok@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_ok@3x.png
deleted file mode 100644
index 3e13e45..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_ok@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_refresh@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_refresh@2x.png
deleted file mode 100644
index 823d3a9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_refresh@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_refresh@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_refresh@3x.png
deleted file mode 100644
index 338c586..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_refresh@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_seleted@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_seleted@2x.png
deleted file mode 100644
index 301b066..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_seleted@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_seleted@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_seleted@3x.png
deleted file mode 100644
index 60adb51..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_seleted@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_unseleted@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_unseleted@2x.png
deleted file mode 100644
index c366aed..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_unseleted@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_unseleted@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_unseleted@3x.png
deleted file mode 100644
index 10b95ab..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_arr_unseleted@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_info@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_info@2x.png
deleted file mode 100644
index ccdde95..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_info@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_info@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_info@3x.png
deleted file mode 100644
index 699a904..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_info@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_setting@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_setting@2x.png
deleted file mode 100644
index b51f980..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_setting@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_setting@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_setting@3x.png
deleted file mode 100644
index 45f9804..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_bp_setting@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_battery@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_battery@2x.png
deleted file mode 100644
index b4c30a3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_battery@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_battery@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_battery@3x.png
deleted file mode 100644
index e1ddbc4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_battery@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_cookie@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_cookie@2x.png
deleted file mode 100644
index 4019e73..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_cookie@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_cookie@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_cookie@3x.png
deleted file mode 100644
index b203268..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_cookie@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_file@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_file@2x.png
deleted file mode 100644
index 7d582ef..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_file@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_file@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_file@3x.png
deleted file mode 100644
index 8831134..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_file@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_font@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_font@2x.png
deleted file mode 100644
index da840d6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_font@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_font@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_font@3x.png
deleted file mode 100644
index 30fc381..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_font@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png
deleted file mode 100644
index 8820b71..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png
deleted file mode 100644
index 60665a3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png
deleted file mode 100644
index ab1c030..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png
deleted file mode 100644
index 3a123ed..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_traffic@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_traffic@2x.png
deleted file mode 100644
index a1c985d..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_traffic@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_traffic@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_traffic@3x.png
deleted file mode 100644
index 4564733..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_traffic@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png
deleted file mode 100644
index e9bddbc..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png
deleted file mode 100644
index b0247f5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/audio.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/audio.png
deleted file mode 100644
index 882bd39..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/audio.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/audio@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/audio@2x.png
deleted file mode 100644
index d2cfa82..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/audio@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/back.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/back.png
deleted file mode 100644
index 6b99f5e..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/back.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/back@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/back@2x.png
deleted file mode 100644
index 071a6ac..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/back@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/binary.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/binary.png
deleted file mode 100644
index 45555ee..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/binary.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/binary@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/binary@2x.png
deleted file mode 100644
index e3fcce5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/binary@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/border.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/border.png
deleted file mode 100755
index 156eff5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/border.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/border@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/border@2x.png
deleted file mode 100755
index fe2a931..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/border@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show@2x.png
deleted file mode 100644
index ee0a04c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show@3x.png
deleted file mode 100644
index 5a66e8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png
deleted file mode 100644
index 685e9a4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png
deleted file mode 100644
index c985716..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/frame.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/frame.png
deleted file mode 100755
index 5f1ce82..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/frame.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/frame@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/frame@2x.png
deleted file mode 100755
index cd79a84..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/frame@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/grid.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/grid.png
deleted file mode 100755
index ce59ac6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/grid.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/grid@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/grid@2x.png
deleted file mode 100755
index cd14db8..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/grid@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/heap.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/heap.png
deleted file mode 100755
index 379dc4f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/heap.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/heap@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/heap@2x.png
deleted file mode 100755
index d8ea943..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/heap@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/html.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/html.png
deleted file mode 100644
index f2204aa..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/html.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/html@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/html@2x.png
deleted file mode 100644
index 55e019b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/html@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon.png
deleted file mode 100644
index f9b15f4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon0.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon0.png
deleted file mode 100644
index e5593ad..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon0.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon0@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon0@2x.png
deleted file mode 100644
index bd8725f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon0@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon1.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon1.png
deleted file mode 100644
index 4ab8987..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon1.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon1@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon1@2x.png
deleted file mode 100644
index 2cfb3be..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon1@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon2.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon2.png
deleted file mode 100644
index 9f01b8b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon2.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon2@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon2@2x.png
deleted file mode 100644
index 10f1166..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon2@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon@2x.png
deleted file mode 100644
index 16e8b53..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/icon@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/image.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/image.png
deleted file mode 100644
index 4b6ab36..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/image.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/image@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/image@2x.png
deleted file mode 100644
index 91c1a28..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/image@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/input.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/input.png
deleted file mode 100755
index 5613939..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/input.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/input@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/input@2x.png
deleted file mode 100755
index 0e8478c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/input@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/js.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/js.png
deleted file mode 100644
index 7e195ff..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/js.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/js@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/js@2x.png
deleted file mode 100644
index 3daed1f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/js@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/json.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/json.png
deleted file mode 100644
index d2155ee..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/json.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/json@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/json@2x.png
deleted file mode 100644
index b36037f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/json@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/log.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/log.png
deleted file mode 100755
index 09af0ef..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/log.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/log@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/log@2x.png
deleted file mode 100755
index d98e1fd..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/log@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/memory.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/memory.png
deleted file mode 100755
index 0848c44..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/memory.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/memory@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/memory@2x.png
deleted file mode 100755
index ece658c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/memory@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/move.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/move.png
deleted file mode 100755
index 1d5e1cd..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/move.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/move@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/move@2x.png
deleted file mode 100755
index ccbbc17..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/move@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/movePad.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/movePad.png
deleted file mode 100644
index d5bb066..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/movePad.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/movePad@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/movePad@2x.png
deleted file mode 100644
index 72ee57f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/movePad@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/network.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/network.png
deleted file mode 100755
index ce59ac6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/network.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/network@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/network@2x.png
deleted file mode 100755
index d833f67..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/network@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/others.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/others.png
deleted file mode 100644
index 95db99b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/others.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/others@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/others@2x.png
deleted file mode 100644
index 3f07941..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/others@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/performance.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/performance.png
deleted file mode 100755
index eca2fd5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/performance.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/performance@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/performance@2x.png
deleted file mode 100755
index f4251e4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/performance@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/plist.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/plist.png
deleted file mode 100644
index 2b96410..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/plist.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/plist@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/plist@2x.png
deleted file mode 100644
index 8de6ec1..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/plist@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/refresh.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/refresh.png
deleted file mode 100644
index 430ab8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/refresh.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/refresh@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/refresh@2x.png
deleted file mode 100644
index f1a2cb5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/refresh@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/straw.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/straw.png
deleted file mode 100755
index 062e817..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/straw.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/straw@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/straw@2x.png
deleted file mode 100755
index 54f3a30..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/straw@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/text.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/text.png
deleted file mode 100644
index 85e75d3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/text.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/text@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/text@2x.png
deleted file mode 100644
index 81ca6c0..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/text@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/thread.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/thread.png
deleted file mode 100644
index 625a3ff..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/thread.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/thread@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/thread@2x.png
deleted file mode 100644
index 2fb27e3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/thread@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/user.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/user.png
deleted file mode 100644
index b70234f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/user.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/user@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/user@2x.png
deleted file mode 100644
index 16fc9e2..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/user@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/video.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/video.png
deleted file mode 100644
index 5a31d81..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/video.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/video@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/video@2x.png
deleted file mode 100644
index 4db3f28..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/video@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/vision.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/vision.png
deleted file mode 100755
index 977ad24..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/vision.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/vision@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/vision@2x.png
deleted file mode 100755
index d71f77a..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/vision@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/xml.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/xml.png
deleted file mode 100644
index 9a8f1d9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/xml.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/xml@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/xml@2x.png
deleted file mode 100644
index 136e505..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/ATSDK.bundle/xml@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/en.lproj/Performance.strings b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/en.lproj/Performance.strings
deleted file mode 100644
index 4184e8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/en.lproj/Performance.strings
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/zh-Hans.lproj/Performance.strings b/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/zh-Hans.lproj/Performance.strings
deleted file mode 100644
index 41ff39a..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Resources/zh-Hans.lproj/Performance.strings
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/ATSDK b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/ATSDK
deleted file mode 100644
index bfc8c92..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/ATSDK
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATManager.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATManager.h
deleted file mode 100644
index d9351f7..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATManager.h
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-//  ATManager.h
-//  AT
-//
-//  Created by ZhuBicheng on 15/7/14.
-//  Copyright © 2015年 alibaba. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-#import <objc/runtime.h>
-
-#import "ATStatusBarView.h"
-@interface ATManager : NSObject
-
-@property (nonatomic,assign) BOOL wantFullTouchable;
-
-@property (nonatomic,strong) NSString *watermark;
-
-@property (nonatomic, strong, readonly) NSMutableArray *customizePluginArray;
-
-@property (nonatomic, strong, readonly) NSMutableDictionary *customizeSubPluginDic;
-
-@property (nonatomic, strong, readonly) NSArray *removedPluginIdArray;
-
-+ (ATManager *)shareInstance;
-
-- (void)show;
-
-- (void)dismiss;
-
-- (id<ATStatusBarViewProtocol>)statusBar;
-
-/**
- *  添加一级自定义插件
- *
- *  @param pluginId                插件id
- *  @param pluginName              插件name
- *  @param pluginIconName          插件图标
- *  @param pluginEntry             插件入口类
- *  @param pluginArgs              插件参数
- */
-- (void)addPluginWithId:(NSString *)pluginId
-                andName:(NSString *)pluginName
-            andIconName:(NSString *)pluginIconName
-               andEntry:(NSString *)pluginEntry
-                andArgs:(NSArray *)pluginArgs;
-
-/**
- *  添加二级自定义插件
- *
- *  @param parentPluginId          一级插件id
- *  @param subPluginId             二级插件id
- *  @param pluginName              二级插件name
- *  @param pluginIconName          二级插件图标
- *  @param pluginEntry             二级插件入口类
- *  @param pluginArgs              二级插件参数
- */
-- (void)addSubPluginWithParentId:(NSString *)parentPluginId
-                        andSubId:(NSString *)subPluginId
-                         andName:(NSString *)pluginName
-                     andIconName:(NSString *)pluginIconName
-                        andEntry:(NSString *)pluginEntry
-                         andArgs:(NSArray *)pluginArgs;
-
-/**
- *  移除预置的插件
- *
- *  @param pluginIdArray 待移除的插件id
- */
-- (void)removePluginsByPluginIdArray:(NSArray *)pluginIdArray;
-
-/**
- *  根据plist配置文件,添加自定义插件
- *
- *  @param plistName plist名称
- */
-- (void)addPluginByConfigPlistName:(NSString *)plistName;
-
-@end
-
-
-
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATPluginPrivateProtocol.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATPluginPrivateProtocol.h
deleted file mode 100644
index 0582154..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATPluginPrivateProtocol.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-//  ATPluginPrivateProtocol.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/2/23.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#ifndef ATPluginPrivateProtocol_h
-#define ATPluginPrivateProtocol_h
-
-#import <UIKit/UIKit.h>
-#import <Foundation/Foundation.h>
-
-@protocol ATPluginPrivateProtocol <NSObject>
-
-@optional
-
-- (BOOL)pluginShouldClosed;
-
-- (void)containerTapInView:(UIView *)view;
-
-
-@end
-
-
-@protocol ATPluginDelegate
-
-- (void)pluginDidLoadInContainerViewController:(UIViewController *)containerViewController withArgs:(NSArray *)args;
-
-- (CGRect)wantReactArea;
-
-
-@optional
-
-/**
- *  Default YES if not implement.
- *
- *  @return
- */
-- (BOOL)pluginShouldClosed;
-
-- (void)pluginDidUnloadInContainViewController:(UIViewController *)containerViewController;
-
-- (void)containerViewControllerTapInView:(UIView *)view;
-
-- (CGRect)wantIgnoreArea;
-
-@end
-
-#endif /* ATPluginPrivateProtocol_h */
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATPluginProtocol.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATPluginProtocol.h
deleted file mode 100644
index 87f8fa3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATPluginProtocol.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-//  ATPluginProtocol.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/2/23.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#ifndef ATPluginProtocol_h
-#define ATPluginProtocol_h
-
-#import <UIKit/UIKit.h>
-#import <Foundation/Foundation.h>
-
-@protocol ATPluginProtocol <NSObject>
-
-//=================
-//=   生命周期     =
-//=================
-
-- (void)pluginDidLoadWithArgs:(NSArray *)args;
-
-- (void)pluginWillOpenInContainer:(UIViewController *)container withArg:(NSArray *)args;
-
-- (void)pluginWillClose;
-
-- (void)pluginDidUnload;
-
-//=================
-//=    环境设置    =
-//=================
-
-
-- (CGRect)wantReactArea;
-
-
-@optional
-
-//=================
-//=    扩展设置    =
-//=================
-
-+ (NSString *)pluginVersion;
-
-- (void)tapStatusBarItemIndex:(NSInteger)index;
-
-- (CGRect)wantIgnoreArea;
-
-@end
-
-#endif /* ATPluginProtocol_h */
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATStatusBarView.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATStatusBarView.h
deleted file mode 100644
index f36a68e..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Headers/ATStatusBarView.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-//  ATStatusBarView.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/4/7.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-@class ATStatusBarView;
-
-
-@protocol ATStatusBarViewProtocol <NSObject>
-
-- (void)setTexts:(NSArray *)texts;
-
-@end
-
-@interface ATStatusBarView : UIView<ATStatusBarViewProtocol>
-
-- (void)clear;
-
-@end
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/ATPluginList.plist b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/ATPluginList.plist
deleted file mode 100644
index a2bb01b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/ATPluginList.plist
+++ /dev/null
@@ -1,267 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<array>
-	<dict>
-		<key>id</key>
-		<string>databoard</string>
-		<key>name</key>
-		<string>数据板</string>
-		<key>icon</key>
-		<string>data_board_icon_show.png</string>
-		<key>highlightIcon</key>
-		<string>data_board_icon_show_h</string>
-		<key>entry</key>
-		<string>ATDataBoardPlugin</string>
-		<key>version</key>
-		<string>1</string>
-		<key>args</key>
-		<array>
-			<string>watermark</string>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>vision</string>
-		<key>name</key>
-		<string>视觉</string>
-		<key>icon</key>
-		<string>vision.png</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>input</string>
-				<key>name</key>
-				<string>导入</string>
-				<key>icon</key>
-				<string>input.png</string>
-				<key>entry</key>
-				<string>ATInputImagePlugin</string>
-				<key>args</key>
-				<array>
-					<string>alive</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>move</string>
-				<key>name</key>
-				<string>移动</string>
-				<key>icon</key>
-				<string>move.png</string>
-				<key>entry</key>
-				<string>ATMovePlugin</string>
-				<key>args</key>
-				<array>
-					<string>view</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>border</string>
-				<key>name</key>
-				<string>边框</string>
-				<key>icon</key>
-				<string>border.png</string>
-				<key>entry</key>
-				<string>ATBorderPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>straw</string>
-				<key>name</key>
-				<string>吸管</string>
-				<key>icon</key>
-				<string>straw.png</string>
-				<key>entry</key>
-				<string>ATStrawPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>grid</string>
-				<key>name</key>
-				<string>网格</string>
-				<key>icon</key>
-				<string>grid.png</string>
-				<key>entry</key>
-				<string>ATGridPlugin</string>
-				<key>args</key>
-				<array>
-					<string>statusbar</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>font</string>
-				<key>name</key>
-				<string>字体</string>
-				<key>icon</key>
-				<string>at_plugin_font</string>
-				<key>entry</key>
-				<string>ATFontPlugin</string>
-				<key>args</key>
-				<array>
-					<string>view</string>
-				</array>
-			</dict>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>performance</string>
-		<key>name</key>
-		<string>性能</string>
-		<key>icon</key>
-		<string>performance.png</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>cpu</string>
-				<key>name</key>
-				<string>CPU</string>
-				<key>icon</key>
-				<string>CPU.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>CPU</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>frame</string>
-				<key>name</key>
-				<string>帧率</string>
-				<key>icon</key>
-				<string>frame.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Frame</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>memory</string>
-				<key>name</key>
-				<string>内存</string>
-				<key>icon</key>
-				<string>memory.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Memory</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>battery</string>
-				<key>name</key>
-				<string>电量</string>
-				<key>icon</key>
-				<string>at_plugin_battery</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Battery</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>traffic</string>
-				<key>name</key>
-				<string>流量</string>
-				<key>icon</key>
-				<string>at_plugin_traffic</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Traffic</string>
-				</array>
-			</dict>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>tools</string>
-		<key>name</key>
-		<string>工具</string>
-		<key>icon</key>
-		<string>at-p-tools</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>Mmuvp</string>
-				<key>name</key>
-				<string>埋点验证</string>
-				<key>icon</key>
-				<string>at_plugin_mmuvp</string>
-				<key>entry</key>
-				<string>MmuvpInitalize</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>log</string>
-				<key>name</key>
-				<string>日志</string>
-				<key>icon</key>
-				<string>log.png</string>
-				<key>entry</key>
-				<string>ATAlogPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>userdeflaut</string>
-				<key>name</key>
-				<string>UD查询</string>
-				<key>icon</key>
-				<string>at_plugin_userdeflaut</string>
-				<key>entry</key>
-				<string>ATUserDefaultPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>memoryWarning</string>
-				<key>name</key>
-				<string>内存警告</string>
-				<key>icon</key>
-				<string>at_plugin_memorywarning</string>
-				<key>entry</key>
-				<string>ATMemoryWarningPlugin</string>
-				<key>args</key>
-				<array>
-					<string>alive</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>fileBrowser</string>
-				<key>name</key>
-				<string>沙盒查看</string>
-				<key>icon</key>
-				<string>at_plugin_file</string>
-				<key>entry</key>
-				<string>ATFileBrowserPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>cookie</string>
-				<key>name</key>
-				<string>cookie</string>
-				<key>icon</key>
-				<string>at_plugin_cookie</string>
-				<key>entry</key>
-				<string>ATCookiePlugin</string>
-			</dict>
-		</array>
-	</dict>
-</array>
-</plist>
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/CPU.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/CPU.png
deleted file mode 100755
index 2816507..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/CPU.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/CPU@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/CPU@2x.png
deleted file mode 100755
index 413cd37..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/CPU@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at-p-tools@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at-p-tools@2x.png
deleted file mode 100644
index db44af9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at-p-tools@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at-p-tools@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at-p-tools@3x.png
deleted file mode 100644
index 06c92d6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at-p-tools@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_alert_cancel@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_alert_cancel@2x.png
deleted file mode 100644
index 8807af5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_alert_cancel@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_alert_confirm@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_alert_confirm@2x.png
deleted file mode 100644
index 208c988..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_alert_confirm@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_close@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_close@2x.png
deleted file mode 100644
index ffdf4c5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_close@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_close@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_close@3x.png
deleted file mode 100644
index 2f603bb..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_close@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_ok@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_ok@2x.png
deleted file mode 100644
index fd9f256..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_ok@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_ok@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_ok@3x.png
deleted file mode 100644
index 3e13e45..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_ok@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_refresh@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_refresh@2x.png
deleted file mode 100644
index 823d3a9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_refresh@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_refresh@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_refresh@3x.png
deleted file mode 100644
index 338c586..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_refresh@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_seleted@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_seleted@2x.png
deleted file mode 100644
index 301b066..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_seleted@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_seleted@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_seleted@3x.png
deleted file mode 100644
index 60adb51..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_seleted@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_unseleted@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_unseleted@2x.png
deleted file mode 100644
index c366aed..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_unseleted@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_unseleted@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_unseleted@3x.png
deleted file mode 100644
index 10b95ab..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_arr_unseleted@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_info@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_info@2x.png
deleted file mode 100644
index ccdde95..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_info@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_info@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_info@3x.png
deleted file mode 100644
index 699a904..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_info@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_setting@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_setting@2x.png
deleted file mode 100644
index b51f980..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_setting@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_setting@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_setting@3x.png
deleted file mode 100644
index 45f9804..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_bp_setting@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_battery@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_battery@2x.png
deleted file mode 100644
index b4c30a3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_battery@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_battery@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_battery@3x.png
deleted file mode 100644
index e1ddbc4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_battery@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_cookie@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_cookie@2x.png
deleted file mode 100644
index 4019e73..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_cookie@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_cookie@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_cookie@3x.png
deleted file mode 100644
index b203268..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_cookie@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_file@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_file@2x.png
deleted file mode 100644
index 7d582ef..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_file@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_file@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_file@3x.png
deleted file mode 100644
index 8831134..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_file@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_font@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_font@2x.png
deleted file mode 100644
index da840d6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_font@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_font@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_font@3x.png
deleted file mode 100644
index 30fc381..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_font@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png
deleted file mode 100644
index 8820b71..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png
deleted file mode 100644
index 60665a3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png
deleted file mode 100644
index ab1c030..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png
deleted file mode 100644
index 3a123ed..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_traffic@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_traffic@2x.png
deleted file mode 100644
index a1c985d..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_traffic@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_traffic@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_traffic@3x.png
deleted file mode 100644
index 4564733..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_traffic@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png
deleted file mode 100644
index e9bddbc..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png
deleted file mode 100644
index b0247f5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/audio.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/audio.png
deleted file mode 100644
index 882bd39..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/audio.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/audio@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/audio@2x.png
deleted file mode 100644
index d2cfa82..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/audio@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/back.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/back.png
deleted file mode 100644
index 6b99f5e..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/back.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/back@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/back@2x.png
deleted file mode 100644
index 071a6ac..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/back@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/binary.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/binary.png
deleted file mode 100644
index 45555ee..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/binary.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/binary@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/binary@2x.png
deleted file mode 100644
index e3fcce5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/binary@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/border.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/border.png
deleted file mode 100755
index 156eff5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/border.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/border@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/border@2x.png
deleted file mode 100755
index fe2a931..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/border@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show@2x.png
deleted file mode 100644
index ee0a04c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show@3x.png
deleted file mode 100644
index 5a66e8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png
deleted file mode 100644
index 685e9a4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png
deleted file mode 100644
index c985716..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/frame.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/frame.png
deleted file mode 100755
index 5f1ce82..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/frame.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/frame@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/frame@2x.png
deleted file mode 100755
index cd79a84..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/frame@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/grid.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/grid.png
deleted file mode 100755
index ce59ac6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/grid.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/grid@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/grid@2x.png
deleted file mode 100755
index cd14db8..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/grid@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/heap.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/heap.png
deleted file mode 100755
index 379dc4f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/heap.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/heap@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/heap@2x.png
deleted file mode 100755
index d8ea943..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/heap@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/html.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/html.png
deleted file mode 100644
index f2204aa..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/html.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/html@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/html@2x.png
deleted file mode 100644
index 55e019b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/html@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon.png
deleted file mode 100644
index f9b15f4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon0.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon0.png
deleted file mode 100644
index e5593ad..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon0.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon0@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon0@2x.png
deleted file mode 100644
index bd8725f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon0@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon1.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon1.png
deleted file mode 100644
index 4ab8987..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon1.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon1@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon1@2x.png
deleted file mode 100644
index 2cfb3be..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon1@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon2.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon2.png
deleted file mode 100644
index 9f01b8b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon2.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon2@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon2@2x.png
deleted file mode 100644
index 10f1166..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon2@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon@2x.png
deleted file mode 100644
index 16e8b53..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/icon@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/image.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/image.png
deleted file mode 100644
index 4b6ab36..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/image.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/image@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/image@2x.png
deleted file mode 100644
index 91c1a28..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/image@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/input.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/input.png
deleted file mode 100755
index 5613939..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/input.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/input@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/input@2x.png
deleted file mode 100755
index 0e8478c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/input@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/js.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/js.png
deleted file mode 100644
index 7e195ff..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/js.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/js@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/js@2x.png
deleted file mode 100644
index 3daed1f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/js@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/json.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/json.png
deleted file mode 100644
index d2155ee..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/json.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/json@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/json@2x.png
deleted file mode 100644
index b36037f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/json@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/log.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/log.png
deleted file mode 100755
index 09af0ef..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/log.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/log@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/log@2x.png
deleted file mode 100755
index d98e1fd..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/log@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/memory.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/memory.png
deleted file mode 100755
index 0848c44..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/memory.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/memory@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/memory@2x.png
deleted file mode 100755
index ece658c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/memory@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/move.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/move.png
deleted file mode 100755
index 1d5e1cd..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/move.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/move@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/move@2x.png
deleted file mode 100755
index ccbbc17..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/move@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/movePad.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/movePad.png
deleted file mode 100644
index d5bb066..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/movePad.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/movePad@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/movePad@2x.png
deleted file mode 100644
index 72ee57f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/movePad@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/network.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/network.png
deleted file mode 100755
index ce59ac6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/network.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/network@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/network@2x.png
deleted file mode 100755
index d833f67..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/network@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/others.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/others.png
deleted file mode 100644
index 95db99b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/others.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/others@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/others@2x.png
deleted file mode 100644
index 3f07941..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/others@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/performance.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/performance.png
deleted file mode 100755
index eca2fd5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/performance.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/performance@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/performance@2x.png
deleted file mode 100755
index f4251e4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/performance@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/plist.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/plist.png
deleted file mode 100644
index 2b96410..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/plist.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/plist@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/plist@2x.png
deleted file mode 100644
index 8de6ec1..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/plist@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/refresh.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/refresh.png
deleted file mode 100644
index 430ab8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/refresh.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/refresh@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/refresh@2x.png
deleted file mode 100644
index f1a2cb5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/refresh@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/straw.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/straw.png
deleted file mode 100755
index 062e817..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/straw.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/straw@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/straw@2x.png
deleted file mode 100755
index 54f3a30..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/straw@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/text.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/text.png
deleted file mode 100644
index 85e75d3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/text.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/text@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/text@2x.png
deleted file mode 100644
index 81ca6c0..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/text@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/thread.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/thread.png
deleted file mode 100644
index 625a3ff..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/thread.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/thread@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/thread@2x.png
deleted file mode 100644
index 2fb27e3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/thread@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/user.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/user.png
deleted file mode 100644
index b70234f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/user.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/user@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/user@2x.png
deleted file mode 100644
index 16fc9e2..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/user@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/video.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/video.png
deleted file mode 100644
index 5a31d81..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/video.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/video@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/video@2x.png
deleted file mode 100644
index 4db3f28..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/video@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/vision.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/vision.png
deleted file mode 100755
index 977ad24..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/vision.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/vision@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/vision@2x.png
deleted file mode 100755
index d71f77a..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/vision@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/xml.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/xml.png
deleted file mode 100644
index 9a8f1d9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/xml.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/xml@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/xml@2x.png
deleted file mode 100644
index 136e505..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle/xml@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj/Performance.strings b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj/Performance.strings
deleted file mode 100644
index 4184e8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj/Performance.strings
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj/Performance.strings b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj/Performance.strings
deleted file mode 100644
index 41ff39a..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj/Performance.strings
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/ATSDK b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/ATSDK
deleted file mode 100644
index bfc8c92..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/ATSDK
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATManager.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATManager.h
deleted file mode 100644
index d9351f7..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATManager.h
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-//  ATManager.h
-//  AT
-//
-//  Created by ZhuBicheng on 15/7/14.
-//  Copyright © 2015年 alibaba. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-#import <objc/runtime.h>
-
-#import "ATStatusBarView.h"
-@interface ATManager : NSObject
-
-@property (nonatomic,assign) BOOL wantFullTouchable;
-
-@property (nonatomic,strong) NSString *watermark;
-
-@property (nonatomic, strong, readonly) NSMutableArray *customizePluginArray;
-
-@property (nonatomic, strong, readonly) NSMutableDictionary *customizeSubPluginDic;
-
-@property (nonatomic, strong, readonly) NSArray *removedPluginIdArray;
-
-+ (ATManager *)shareInstance;
-
-- (void)show;
-
-- (void)dismiss;
-
-- (id<ATStatusBarViewProtocol>)statusBar;
-
-/**
- *  添加一级自定义插件
- *
- *  @param pluginId                插件id
- *  @param pluginName              插件name
- *  @param pluginIconName          插件图标
- *  @param pluginEntry             插件入口类
- *  @param pluginArgs              插件参数
- */
-- (void)addPluginWithId:(NSString *)pluginId
-                andName:(NSString *)pluginName
-            andIconName:(NSString *)pluginIconName
-               andEntry:(NSString *)pluginEntry
-                andArgs:(NSArray *)pluginArgs;
-
-/**
- *  添加二级自定义插件
- *
- *  @param parentPluginId          一级插件id
- *  @param subPluginId             二级插件id
- *  @param pluginName              二级插件name
- *  @param pluginIconName          二级插件图标
- *  @param pluginEntry             二级插件入口类
- *  @param pluginArgs              二级插件参数
- */
-- (void)addSubPluginWithParentId:(NSString *)parentPluginId
-                        andSubId:(NSString *)subPluginId
-                         andName:(NSString *)pluginName
-                     andIconName:(NSString *)pluginIconName
-                        andEntry:(NSString *)pluginEntry
-                         andArgs:(NSArray *)pluginArgs;
-
-/**
- *  移除预置的插件
- *
- *  @param pluginIdArray 待移除的插件id
- */
-- (void)removePluginsByPluginIdArray:(NSArray *)pluginIdArray;
-
-/**
- *  根据plist配置文件,添加自定义插件
- *
- *  @param plistName plist名称
- */
-- (void)addPluginByConfigPlistName:(NSString *)plistName;
-
-@end
-
-
-
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATPluginPrivateProtocol.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATPluginPrivateProtocol.h
deleted file mode 100644
index 0582154..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATPluginPrivateProtocol.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-//  ATPluginPrivateProtocol.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/2/23.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#ifndef ATPluginPrivateProtocol_h
-#define ATPluginPrivateProtocol_h
-
-#import <UIKit/UIKit.h>
-#import <Foundation/Foundation.h>
-
-@protocol ATPluginPrivateProtocol <NSObject>
-
-@optional
-
-- (BOOL)pluginShouldClosed;
-
-- (void)containerTapInView:(UIView *)view;
-
-
-@end
-
-
-@protocol ATPluginDelegate
-
-- (void)pluginDidLoadInContainerViewController:(UIViewController *)containerViewController withArgs:(NSArray *)args;
-
-- (CGRect)wantReactArea;
-
-
-@optional
-
-/**
- *  Default YES if not implement.
- *
- *  @return
- */
-- (BOOL)pluginShouldClosed;
-
-- (void)pluginDidUnloadInContainViewController:(UIViewController *)containerViewController;
-
-- (void)containerViewControllerTapInView:(UIView *)view;
-
-- (CGRect)wantIgnoreArea;
-
-@end
-
-#endif /* ATPluginPrivateProtocol_h */
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATPluginProtocol.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATPluginProtocol.h
deleted file mode 100644
index 87f8fa3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATPluginProtocol.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-//  ATPluginProtocol.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/2/23.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#ifndef ATPluginProtocol_h
-#define ATPluginProtocol_h
-
-#import <UIKit/UIKit.h>
-#import <Foundation/Foundation.h>
-
-@protocol ATPluginProtocol <NSObject>
-
-//=================
-//=   生命周期     =
-//=================
-
-- (void)pluginDidLoadWithArgs:(NSArray *)args;
-
-- (void)pluginWillOpenInContainer:(UIViewController *)container withArg:(NSArray *)args;
-
-- (void)pluginWillClose;
-
-- (void)pluginDidUnload;
-
-//=================
-//=    环境设置    =
-//=================
-
-
-- (CGRect)wantReactArea;
-
-
-@optional
-
-//=================
-//=    扩展设置    =
-//=================
-
-+ (NSString *)pluginVersion;
-
-- (void)tapStatusBarItemIndex:(NSInteger)index;
-
-- (CGRect)wantIgnoreArea;
-
-@end
-
-#endif /* ATPluginProtocol_h */
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATStatusBarView.h b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATStatusBarView.h
deleted file mode 100644
index f36a68e..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Headers/ATStatusBarView.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-//  ATStatusBarView.h
-//  AT
-//
-//  Created by ZhuBicheng on 16/4/7.
-//  Copyright © 2016年 当扈. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-@class ATStatusBarView;
-
-
-@protocol ATStatusBarViewProtocol <NSObject>
-
-- (void)setTexts:(NSArray *)texts;
-
-@end
-
-@interface ATStatusBarView : UIView<ATStatusBarViewProtocol>
-
-- (void)clear;
-
-@end
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/ATPluginList.plist b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/ATPluginList.plist
deleted file mode 100644
index a2bb01b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/ATPluginList.plist
+++ /dev/null
@@ -1,267 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<array>
-	<dict>
-		<key>id</key>
-		<string>databoard</string>
-		<key>name</key>
-		<string>数据板</string>
-		<key>icon</key>
-		<string>data_board_icon_show.png</string>
-		<key>highlightIcon</key>
-		<string>data_board_icon_show_h</string>
-		<key>entry</key>
-		<string>ATDataBoardPlugin</string>
-		<key>version</key>
-		<string>1</string>
-		<key>args</key>
-		<array>
-			<string>watermark</string>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>vision</string>
-		<key>name</key>
-		<string>视觉</string>
-		<key>icon</key>
-		<string>vision.png</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>input</string>
-				<key>name</key>
-				<string>导入</string>
-				<key>icon</key>
-				<string>input.png</string>
-				<key>entry</key>
-				<string>ATInputImagePlugin</string>
-				<key>args</key>
-				<array>
-					<string>alive</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>move</string>
-				<key>name</key>
-				<string>移动</string>
-				<key>icon</key>
-				<string>move.png</string>
-				<key>entry</key>
-				<string>ATMovePlugin</string>
-				<key>args</key>
-				<array>
-					<string>view</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>border</string>
-				<key>name</key>
-				<string>边框</string>
-				<key>icon</key>
-				<string>border.png</string>
-				<key>entry</key>
-				<string>ATBorderPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>straw</string>
-				<key>name</key>
-				<string>吸管</string>
-				<key>icon</key>
-				<string>straw.png</string>
-				<key>entry</key>
-				<string>ATStrawPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>grid</string>
-				<key>name</key>
-				<string>网格</string>
-				<key>icon</key>
-				<string>grid.png</string>
-				<key>entry</key>
-				<string>ATGridPlugin</string>
-				<key>args</key>
-				<array>
-					<string>statusbar</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>font</string>
-				<key>name</key>
-				<string>字体</string>
-				<key>icon</key>
-				<string>at_plugin_font</string>
-				<key>entry</key>
-				<string>ATFontPlugin</string>
-				<key>args</key>
-				<array>
-					<string>view</string>
-				</array>
-			</dict>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>performance</string>
-		<key>name</key>
-		<string>性能</string>
-		<key>icon</key>
-		<string>performance.png</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>cpu</string>
-				<key>name</key>
-				<string>CPU</string>
-				<key>icon</key>
-				<string>CPU.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>CPU</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>frame</string>
-				<key>name</key>
-				<string>帧率</string>
-				<key>icon</key>
-				<string>frame.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Frame</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>memory</string>
-				<key>name</key>
-				<string>内存</string>
-				<key>icon</key>
-				<string>memory.png</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Memory</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>battery</string>
-				<key>name</key>
-				<string>电量</string>
-				<key>icon</key>
-				<string>at_plugin_battery</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Battery</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>traffic</string>
-				<key>name</key>
-				<string>流量</string>
-				<key>icon</key>
-				<string>at_plugin_traffic</string>
-				<key>entry</key>
-				<string>ATPerformancePlugin</string>
-				<key>args</key>
-				<array>
-					<string>Traffic</string>
-				</array>
-			</dict>
-		</array>
-	</dict>
-	<dict>
-		<key>id</key>
-		<string>tools</string>
-		<key>name</key>
-		<string>工具</string>
-		<key>icon</key>
-		<string>at-p-tools</string>
-		<key>sub</key>
-		<array>
-			<dict>
-				<key>id</key>
-				<string>Mmuvp</string>
-				<key>name</key>
-				<string>埋点验证</string>
-				<key>icon</key>
-				<string>at_plugin_mmuvp</string>
-				<key>entry</key>
-				<string>MmuvpInitalize</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>log</string>
-				<key>name</key>
-				<string>日志</string>
-				<key>icon</key>
-				<string>log.png</string>
-				<key>entry</key>
-				<string>ATAlogPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>userdeflaut</string>
-				<key>name</key>
-				<string>UD查询</string>
-				<key>icon</key>
-				<string>at_plugin_userdeflaut</string>
-				<key>entry</key>
-				<string>ATUserDefaultPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>memoryWarning</string>
-				<key>name</key>
-				<string>内存警告</string>
-				<key>icon</key>
-				<string>at_plugin_memorywarning</string>
-				<key>entry</key>
-				<string>ATMemoryWarningPlugin</string>
-				<key>args</key>
-				<array>
-					<string>alive</string>
-				</array>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>fileBrowser</string>
-				<key>name</key>
-				<string>沙盒查看</string>
-				<key>icon</key>
-				<string>at_plugin_file</string>
-				<key>entry</key>
-				<string>ATFileBrowserPlugin</string>
-			</dict>
-			<dict>
-				<key>id</key>
-				<string>cookie</string>
-				<key>name</key>
-				<string>cookie</string>
-				<key>icon</key>
-				<string>at_plugin_cookie</string>
-				<key>entry</key>
-				<string>ATCookiePlugin</string>
-			</dict>
-		</array>
-	</dict>
-</array>
-</plist>
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/CPU.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/CPU.png
deleted file mode 100755
index 2816507..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/CPU.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/CPU@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/CPU@2x.png
deleted file mode 100755
index 413cd37..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/CPU@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at-p-tools@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at-p-tools@2x.png
deleted file mode 100644
index db44af9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at-p-tools@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at-p-tools@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at-p-tools@3x.png
deleted file mode 100644
index 06c92d6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at-p-tools@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_alert_cancel@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_alert_cancel@2x.png
deleted file mode 100644
index 8807af5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_alert_cancel@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_alert_confirm@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_alert_confirm@2x.png
deleted file mode 100644
index 208c988..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_alert_confirm@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_close@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_close@2x.png
deleted file mode 100644
index ffdf4c5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_close@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_close@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_close@3x.png
deleted file mode 100644
index 2f603bb..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_close@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_ok@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_ok@2x.png
deleted file mode 100644
index fd9f256..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_ok@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_ok@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_ok@3x.png
deleted file mode 100644
index 3e13e45..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_ok@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_refresh@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_refresh@2x.png
deleted file mode 100644
index 823d3a9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_refresh@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_refresh@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_refresh@3x.png
deleted file mode 100644
index 338c586..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_refresh@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_seleted@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_seleted@2x.png
deleted file mode 100644
index 301b066..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_seleted@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_seleted@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_seleted@3x.png
deleted file mode 100644
index 60adb51..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_seleted@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_unseleted@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_unseleted@2x.png
deleted file mode 100644
index c366aed..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_unseleted@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_unseleted@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_unseleted@3x.png
deleted file mode 100644
index 10b95ab..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_arr_unseleted@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_info@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_info@2x.png
deleted file mode 100644
index ccdde95..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_info@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_info@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_info@3x.png
deleted file mode 100644
index 699a904..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_info@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_setting@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_setting@2x.png
deleted file mode 100644
index b51f980..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_setting@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_setting@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_setting@3x.png
deleted file mode 100644
index 45f9804..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_bp_setting@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_battery@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_battery@2x.png
deleted file mode 100644
index b4c30a3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_battery@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_battery@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_battery@3x.png
deleted file mode 100644
index e1ddbc4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_battery@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_cookie@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_cookie@2x.png
deleted file mode 100644
index 4019e73..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_cookie@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_cookie@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_cookie@3x.png
deleted file mode 100644
index b203268..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_cookie@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_file@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_file@2x.png
deleted file mode 100644
index 7d582ef..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_file@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_file@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_file@3x.png
deleted file mode 100644
index 8831134..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_file@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_font@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_font@2x.png
deleted file mode 100644
index da840d6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_font@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_font@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_font@3x.png
deleted file mode 100644
index 30fc381..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_font@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png
deleted file mode 100644
index 8820b71..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_memorywarning@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png
deleted file mode 100644
index 60665a3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_memorywarning@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png
deleted file mode 100644
index ab1c030..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_mmuvp@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png
deleted file mode 100644
index 3a123ed..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_mmuvp@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_traffic@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_traffic@2x.png
deleted file mode 100644
index a1c985d..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_traffic@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_traffic@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_traffic@3x.png
deleted file mode 100644
index 4564733..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_traffic@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png
deleted file mode 100644
index e9bddbc..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_userdeflaut@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png
deleted file mode 100644
index b0247f5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/at_plugin_userdeflaut@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/audio.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/audio.png
deleted file mode 100644
index 882bd39..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/audio.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/audio@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/audio@2x.png
deleted file mode 100644
index d2cfa82..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/audio@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/back.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/back.png
deleted file mode 100644
index 6b99f5e..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/back.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/back@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/back@2x.png
deleted file mode 100644
index 071a6ac..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/back@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/binary.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/binary.png
deleted file mode 100644
index 45555ee..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/binary.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/binary@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/binary@2x.png
deleted file mode 100644
index e3fcce5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/binary@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/border.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/border.png
deleted file mode 100755
index 156eff5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/border.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/border@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/border@2x.png
deleted file mode 100755
index fe2a931..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/border@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show@2x.png
deleted file mode 100644
index ee0a04c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show@3x.png
deleted file mode 100644
index 5a66e8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png
deleted file mode 100644
index 685e9a4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show_h@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png
deleted file mode 100644
index c985716..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/data_board_icon_show_h@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/frame.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/frame.png
deleted file mode 100755
index 5f1ce82..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/frame.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/frame@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/frame@2x.png
deleted file mode 100755
index cd79a84..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/frame@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/grid.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/grid.png
deleted file mode 100755
index ce59ac6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/grid.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/grid@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/grid@2x.png
deleted file mode 100755
index cd14db8..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/grid@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/heap.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/heap.png
deleted file mode 100755
index 379dc4f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/heap.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/heap@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/heap@2x.png
deleted file mode 100755
index d8ea943..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/heap@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/html.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/html.png
deleted file mode 100644
index f2204aa..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/html.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/html@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/html@2x.png
deleted file mode 100644
index 55e019b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/html@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon.png
deleted file mode 100644
index f9b15f4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon0.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon0.png
deleted file mode 100644
index e5593ad..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon0.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon0@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon0@2x.png
deleted file mode 100644
index bd8725f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon0@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon1.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon1.png
deleted file mode 100644
index 4ab8987..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon1.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon1@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon1@2x.png
deleted file mode 100644
index 2cfb3be..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon1@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon2.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon2.png
deleted file mode 100644
index 9f01b8b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon2.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon2@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon2@2x.png
deleted file mode 100644
index 10f1166..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon2@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon@2x.png
deleted file mode 100644
index 16e8b53..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/icon@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/image.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/image.png
deleted file mode 100644
index 4b6ab36..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/image.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/image@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/image@2x.png
deleted file mode 100644
index 91c1a28..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/image@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/input.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/input.png
deleted file mode 100755
index 5613939..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/input.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/input@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/input@2x.png
deleted file mode 100755
index 0e8478c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/input@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/js.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/js.png
deleted file mode 100644
index 7e195ff..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/js.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/js@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/js@2x.png
deleted file mode 100644
index 3daed1f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/js@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/json.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/json.png
deleted file mode 100644
index d2155ee..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/json.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/json@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/json@2x.png
deleted file mode 100644
index b36037f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/json@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/log.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/log.png
deleted file mode 100755
index 09af0ef..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/log.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/log@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/log@2x.png
deleted file mode 100755
index d98e1fd..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/log@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/memory.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/memory.png
deleted file mode 100755
index 0848c44..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/memory.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/memory@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/memory@2x.png
deleted file mode 100755
index ece658c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/memory@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/move.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/move.png
deleted file mode 100755
index 1d5e1cd..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/move.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/move@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/move@2x.png
deleted file mode 100755
index ccbbc17..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/move@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/movePad.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/movePad.png
deleted file mode 100644
index d5bb066..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/movePad.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/movePad@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/movePad@2x.png
deleted file mode 100644
index 72ee57f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/movePad@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/network.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/network.png
deleted file mode 100755
index ce59ac6..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/network.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/network@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/network@2x.png
deleted file mode 100755
index d833f67..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/network@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/others.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/others.png
deleted file mode 100644
index 95db99b..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/others.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/others@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/others@2x.png
deleted file mode 100644
index 3f07941..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/others@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/performance.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/performance.png
deleted file mode 100755
index eca2fd5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/performance.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/performance@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/performance@2x.png
deleted file mode 100755
index f4251e4..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/performance@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/plist.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/plist.png
deleted file mode 100644
index 2b96410..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/plist.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/plist@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/plist@2x.png
deleted file mode 100644
index 8de6ec1..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/plist@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/refresh.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/refresh.png
deleted file mode 100644
index 430ab8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/refresh.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/refresh@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/refresh@2x.png
deleted file mode 100644
index f1a2cb5..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/refresh@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/straw.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/straw.png
deleted file mode 100755
index 062e817..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/straw.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/straw@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/straw@2x.png
deleted file mode 100755
index 54f3a30..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/straw@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/text.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/text.png
deleted file mode 100644
index 85e75d3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/text.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/text@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/text@2x.png
deleted file mode 100644
index 81ca6c0..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/text@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/thread.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/thread.png
deleted file mode 100644
index 625a3ff..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/thread.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/thread@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/thread@2x.png
deleted file mode 100644
index 2fb27e3..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/thread@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/user.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/user.png
deleted file mode 100644
index b70234f..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/user.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/user@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/user@2x.png
deleted file mode 100644
index 16fc9e2..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/user@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/video.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/video.png
deleted file mode 100644
index 5a31d81..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/video.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/video@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/video@2x.png
deleted file mode 100644
index 4db3f28..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/video@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/vision.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/vision.png
deleted file mode 100755
index 977ad24..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/vision.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/vision@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/vision@2x.png
deleted file mode 100755
index d71f77a..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/vision@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/xml.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/xml.png
deleted file mode 100644
index 9a8f1d9..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/xml.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/xml@2x.png b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/xml@2x.png
deleted file mode 100644
index 136e505..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/ATSDK.bundle/xml@2x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/en.lproj/Performance.strings b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/en.lproj/Performance.strings
deleted file mode 100644
index 4184e8c..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/en.lproj/Performance.strings
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/zh-Hans.lproj/Performance.strings b/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/zh-Hans.lproj/Performance.strings
deleted file mode 100644
index 41ff39a..0000000
--- a/ios/Pods/ATSDK-Weex/ATSDK.framework/Versions/Current/Resources/zh-Hans.lproj/Performance.strings
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/BindingX/LICENSE.md b/ios/Pods/BindingX/LICENSE.md
deleted file mode 100644
index 4cca458..0000000
--- a/ios/Pods/BindingX/LICENSE.md
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2018 Alibaba Group
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/ios/Pods/BindingX/README.md b/ios/Pods/BindingX/README.md
deleted file mode 100644
index 75a2817..0000000
--- a/ios/Pods/BindingX/README.md
+++ /dev/null
@@ -1,169 +0,0 @@
-
-![BindingX_250.png](https://img.alicdn.com/tfs/TB1ZG58bb1YBuNjSszeXXablFXa-400-400.png_250x250.jpg "")
-
-# BindingX
-
-[![Join the chat at https://gitter.im/alibaba/bindingx](https://badges.gitter.im/alibaba/bindingx.svg)](https://gitter.im/alibaba/bindingx?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
-![image | left](https://img.shields.io/badge/PRs-welcome-brightgreen.svg "")
-![image | left](https://img.shields.io/badge/license-Apache--2.0-brightgreen.svg "")
-[![CircleCI](https://circleci.com/gh/alibaba/bindingx/tree/master.svg?style=svg)](https://circleci.com/gh/alibaba/bindingx/tree/master)
-
-* [Read Documentation](https://alibaba.github.io/bindingx/guide/introduce)
-* [中文](https://github.com/alibaba/bindingx/blob/master/README_cn.md)
-
-A new interaction way based on `weex` & `react native` & `html5` .
-
-It provides a way called `expression binding` for handling complex user interaction with views at 60 FPS in React Native and weex :tada: :tada: :tada: .
-
-# Description
-
-The async nature of the js-native bridge in react native and weex incurs an inherent performance penalty. This traditionally prevents JavaScript code from running at high framerates.
-
-We exploreed and implemented a completely new approach to solve the problem. It's main idea is translate the user interaction into expression, and transfer those expressions into native environment. When events occurs (events such as user gesture), all computing task is running on the native side, NO redundant js-bridge calls any more. [Read More](https://alibaba.github.io/bindingx/guide/introduce)
-
-# Glance
-
-Below are some examples which is using bindingx. You can get more examples by running our playground app. Or you can write your own example use our [online playground](https://alibaba.github.io/bindingx/playground), have fun:)
-
-<div align="center">
-    <img style="margin-right:10px" src="https://gw.alicdn.com/tfs/TB1fES5bhGYBuNjy0FnXXX5lpXa-320-563.gif" width = "200" height = "350"/>
-    <img style="margin-right:10px" src="https://gw.alicdn.com/tfs/TB1hOaKbbGYBuNjy0FoXXciBFXa-320-563.gif" width = "200" height = "350"/>
-    <img style="margin-right:10px" src="https://gw.alicdn.com/tfs/TB1LCmUbkyWBuNjy0FpXXassXXa-320-563.gif" width = "200" height = "350"/>
-    <img src="https://gw.alicdn.com/tfs/TB1FRGZbeuSBuNjy1XcXXcYjFXa-320-563.gif" width = "200" height = "350"/>
-</div>
-
-# Demo examples
-  1. pan gesture: [rax](https://jsplayground.taobao.org/raxplayground/34ceb3e5-8927-4e0c-a282-2dd37c9d7b74)  [vue](https://jsplayground.taobao.org/vueplayground/1518d8ac-4403-414f-ba83-616eb8b77dc6)  [rn](https://github.com/alibaba/bindingx/blob/master/react-native/example/src/AnimatedBall.js)
-  2. timing: [rax](https://jsplayground.taobao.org/raxplayground/31211efb-d643-4cd0-8e9e-46b0c29ddd50)  [vue](https://jsplayground.taobao.org/vueplayground/6a016074-225c-461e-bfa7-b73b8336ea3d)  [rn](https://github.com/alibaba/bindingx/blob/master/react-native/example/src/TimingDemo.js)
-  3. scroll: [rax](https://jsplayground.taobao.org/raxplayground/8e3b0234-f218-41e2-b146-db76a00e4096)  [vue](https://jsplayground.taobao.org/vueplayground/0fe39539-f08c-4be0-a589-499be32f6351)  [rn](https://github.com/alibaba/bindingx/blob/master/react-native/example/src/ScrollViewDemo.js)
-  4. orientation: [rax](https://jsplayground.taobao.org/raxplayground/1d3ed4e1-506b-4308-bffa-ecf241a0cc70)  [vue](https://jsplayground.taobao.org/vueplayground/18a9115c-c85b-4a12-a1b2-2b0c401a6eb6)  [rn](https://github.com/alibaba/bindingx/blob/master/react-native/example/src/OrientationDemo.js)
-
-# RealLife examples
-
-  1. Draggable ball: [rax](https://jsplayground.taobao.org/raxplayground/3ec5c8ef-42ff-47fb-9791-4bd7c257b4a7)  [vue](https://jsplayground.taobao.org/vueplayground/de9c7e84-2dc0-4873-8bb0-ce899e64f6ab)
-  2. Swipeable card: [rax](https://jsplayground.taobao.org/raxplayground/7ac0f12b-72e7-4aa5-b398-693ba7b34cd6)  [vue](https://jsplayground.taobao.org/vueplayground/9e4899f6-0fe1-4ffa-86ec-b9c28d22bae9)
-  3. Expandable menu: [rax](https://jsplayground.taobao.org/raxplayground/3f93ffd1-3028-4a9e-9e94-0188973bc44b)  [vue](https://jsplayground.taobao.org/vueplayground/3a388c50-18f8-45d3-b1cf-3f5f0c226c19)
-  4. Slide layout: [rax](https://jsplayground.taobao.org/raxplayground/34e0eae9-ca2d-481f-94b5-239732651eeb)  [vue](https://jsplayground.taobao.org/vueplayground/925802dc-c7c9-4309-b1e1-f83458bb39c4)
-  5. Circle menu: [rax](https://jsplayground.taobao.org/raxplayground/0b2fa94c-b107-422f-8c2c-60481af89d31)  [vue](https://jsplayground.taobao.org/vueplayground/42ffd6b2-9ff6-4161-8224-34779b3af7e6)
-  6. Navigation with Tab: [rax](https://jsplayground.taobao.org/raxplayground/b8583160-f63f-4ab6-9f98-af7a3da283f8)  [vue](https://jsplayground.taobao.org/vueplayground/2f9e0733-b853-4d97-b350-2630c1a50c83)
-  7. Ripple effect: [rax](https://jsplayground.taobao.org/raxplayground/c4a295f5-bec2-485e-8e05-de80c7274191)  [vue](https://jsplayground.taobao.org/vueplayground/2741ac64-3956-4dc9-ad61-d59b5768d97f)
-
-Note: Weex has two DSL (rax & vue). The link is jumping to JS-Playground. But now our JS-Playground not support React-Native code, so it is jumping to plain source code.
-
-> You can also contribute your examples to us by open an `pull request`. And we will display your example here if it's cool enough.
-
-# Feature
-
-* Complex but fluid user interaction
-* Powerful expression parsing engine
-* Plenty of easing functions
-
-
-# Installation
-
-### Weex
-
-*Prerequisites*: integrate [weex sdk](https://github.com/apache/incubator-weex) to your application.
-
-##### Android
-
-We provide two ways to integrate bindingx plugin.
-
- 1. manual integration
-
-    * add dependencies in your application's build.gradle
-
-        ```
-        implementation 'com.alibaba.android:bindingx-core:1.0.1'
-        implementation 'com.alibaba.android:bindingx_weex_plugin:1.0.1'
-        ```
-
-    * register bindingx plugin in code. (`Application#onCreate`, for example)
-
-        ```
-        BindingX.register()
-        ```
-
- 2. use weex plugin loader
-
-    * add dependencies in your application's build.gradle
-
-      ```
-      implementation 'com.alibaba.android:bindingx-core:1.0.1'
-      implementation 'com.alibaba.android:bindingx_weex_plugin:1.0.1'
-      implementation 'org.weex.plugin:plugin-loader:1.0.0'
-      ```
-
-    * register bindingx plugin use plugin loader.
-
-      ```
-      WeexPluginContainer.loadAll(getApplicationContext());
-      ```
-
-#### iOS
-
-add dependencies in your application's `Podfile`
-
-```
-  pod 'BindingX', '~> 1.0.2'
-```
-
-module will be registed automatically.
-
-### React Native
-
-*Prerequisites*: integrate [react native](https://facebook.github.io/react-native/) to your application.
-
-1. install dependencies: `npm install react-native-bindingx --save`;
-2. link library: `react-native link react-native-bindingx`;
-
-#### Android 
-
-add `bindingx-core` library to `build.gradle` manually:
-
-  ```
-  implementation 'com.alibaba.android:bindingx-core:{latest_version}'
-  ```  
-
-1. migrate to [android gradle plugin 3.0](https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration);
-2. use `implementation` instead of `compile` in your build.gradle;
-3. add google repository to your root build.gradle:
-
-  ```
-  repositories {
-    google()
-    ...
-  }
-  ```
-
-# Who is using
-
-| taobao | tmall | youku | fliggy |
-| :--- | :--- | :--- | :--- |
-| ![Taobao](https://img.alicdn.com/tfs/TB1N.thdzuhSKJjSspjXXci8VXa-256-256.png_60x60.jpg "") | ![tmall](https://img.alicdn.com/tps/TB15a7wOFXXXXcgXVXXXXXXXXXX-256-256.png_60x60.jpg "") | ![youku](https://img.alicdn.com/tfs/TB1jjyxhwoQMeJjy1XaXXcSsFXa-256-256.png_60x60.jpg "") | ![fliggy](https://img.alicdn.com/tfs/TB11rPqRXXXXXc_apXXXXXXXXXX-256-256.png_60x60.jpg "") |
-
-
-## Contributing
-* Any PR is welcome
-* Dingding chat group.
-
-
-![Snip20180115_20.png | left | 229x229](https://gw.alipayobjects.com/zos/skylark/fcc2b92e-06c2-4d8f-88ff-5cfb983735bf/2018/png/dfae0a43-4ecb-4f62-a5fb-d3f092cad66a.png "")
-
-## License
-```
-Copyright 2018 Alibaba Group
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-```
diff --git a/ios/Pods/BindingX/core/ios/BindingX/BindingX.h b/ios/Pods/BindingX/core/ios/BindingX/BindingX.h
deleted file mode 100644
index 3645277..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/BindingX.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-
-FOUNDATION_EXPORT double BindingXVersionNumber;
-
-FOUNDATION_EXPORT const unsigned char BindingXVersionString[];
-
-#import <BindingX/EBHandlerFactory.h>
-#import <BindingX/EBNativeFunction.h>
-#import <BindingX/EBExpressionHandler.h>
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBBindData.h b/ios/Pods/BindingX/core/ios/BindingX/EBBindData.h
deleted file mode 100644
index 3d904cd..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBBindData.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import "EBExpressionHandler.h"
-
-#define EBsupportFeatures  @[@"pan",@"scroll",@"orientation",@"timing"]
-
-@interface EBBindData : NSObject
-
-- (EBExpressionHandler *)handlerForToken:(NSString *)token eventType:(NSString *)eventType;
-
-- (void)putHandler:(EBExpressionHandler *)handler forToken:(NSString *)token eventType:(NSString *)eventType;
-
-- (void)removeHandler:(EBExpressionHandler *)handler forToken:(NSString *)token eventType:(NSString *)eventType;
-
-- (void)unbindAll;
-
-+ (id)parseExpression:(NSObject *)expression;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBBindData.m b/ios/Pods/BindingX/core/ios/BindingX/EBBindData.m
deleted file mode 100644
index c09647a..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBBindData.m
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBBindData.h"
-
-@interface EBBindData ()
-
-@property (nonatomic, strong) NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, EBExpressionHandler *> *> *sourceMap;
-
-@end
-
-@implementation EBBindData
-
-- (NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, EBExpressionHandler *> *> *)sourceMap {
-    if (!_sourceMap) {
-        _sourceMap = [NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, EBExpressionHandler *> *> dictionary];
-    }
-    return _sourceMap;
-}
-
-- (NSMutableDictionary<NSString *, EBExpressionHandler *> *)handlerMapForToken:(NSString *)token {
-    return [self.sourceMap objectForKey:token];
-}
-
-- (EBExpressionHandler *)handlerForToken:(NSString *)token
-                               eventType:(NSString *)eventType {
-    return [[self handlerMapForToken:token] objectForKey:eventType];
-}
-
-- (void)putHandler:(EBExpressionHandler *)handler
-          forToken:(NSString *)token
-         eventType:(NSString *)eventType {
-    NSMutableDictionary<NSString *, EBExpressionHandler *> *handlerMap = [self handlerMapForToken:token];
-    if (!handlerMap) {
-        handlerMap = [NSMutableDictionary<NSString *, EBExpressionHandler *> dictionary];
-        self.sourceMap[token] = handlerMap;
-    }
-    handlerMap[eventType] = handler;
-}
-
-- (void)removeHandler:(EBExpressionHandler *)handler
-             forToken:(NSString *)token
-            eventType:(NSString *)eventType {
-    NSMutableDictionary<NSString *, EBExpressionHandler *> *handlerMap = [self handlerMapForToken:token];
-    if (handlerMap) {
-        [handlerMap removeObjectForKey:eventType];
-    }
-}
-
-- (void)unbindAll {
-    for (NSString *sourceRef in self.sourceMap) {
-        NSMutableDictionary *handlerMap = self.sourceMap[sourceRef];
-        for (NSNumber *expressionType in handlerMap) {
-            EBExpressionHandler *handler = handlerMap[expressionType];
-            [handler removeExpressionBinding];
-        }
-        [handlerMap removeAllObjects];
-    }
-    [self.sourceMap removeAllObjects];
-}
-
-+ (id)parseExpression:(NSObject *)expression
-{
-    if ([expression isKindOfClass:NSDictionary.class]) {
-        NSDictionary* expressiondict = (NSDictionary *)expression;
-        NSString* transformedExpressionStr = expressiondict[@"transformed"];
-        if (transformedExpressionStr && [transformedExpressionStr isKindOfClass:NSString.class]) {
-            return [NSJSONSerialization JSONObjectWithData:[transformedExpressionStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
-        }
-        else {
-            return expressiondict[@"origin"];
-        }
-    } else if ([expression isKindOfClass:NSString.class]) {
-        NSString* expressionStr = (NSString *)expression;
-        return [NSJSONSerialization JSONObjectWithData:[expressionStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
-    }
-    return nil;
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpression.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpression.h
deleted file mode 100644
index 5c1d74e..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpression.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-@interface EBExpression: NSObject
-
-@property(nonatomic, strong) NSDictionary *root;
-
-- (id)initWithRoot:(NSDictionary*) root;
-- (NSObject*)executeInScope:(NSDictionary *)scope;
-
-@end
-
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpression.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpression.m
deleted file mode 100644
index c24e9d3..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpression.m
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-#import <math.h>
-#import "EBExpression.h"
-#import "EBNativeFunction.h"
-
-@implementation EBExpression
--(id)initWithRoot:(NSDictionary*)root {
-    if(self=[super init])
-    {
-        _root = root;
-    }
-    return self;  
-}
-
-- (NSObject*)executeInScope:(NSDictionary *)scope {
-    return [self executeNodeInScope:scope node:_root];
-}
-
-- (double)toNumber:(NSObject*)value {
-    if([value isKindOfClass:[NSNumber class]]) {
-        return [(NSNumber*)value doubleValue];
-    }
-    if([value isKindOfClass:[NSString class]]) {
-        return [(NSString *)value doubleValue];
-    }
-    return NAN;
-}
-
-- (BOOL)toBool:(NSObject*)value {
-    if([value isKindOfClass:[NSNumber class]]) {
-        return [(NSNumber*)value boolValue] > 0;
-    }
-    if([value isKindOfClass:[NSString class]]) {
-        return [(NSString *)value boolValue] > 0;
-    }
-    return false;
-}
-
-- (NSNumber*)toBoolean:(NSObject*)value {
-    if([value isKindOfClass:[NSNumber class]]) {
-        return @([(NSNumber*)value boolValue]);
-    }
-    if([value isKindOfClass:[NSString class]]) {
-        return @([(NSString *)value boolValue]);
-    }
-    return nil;
-}
-
-- (NSObject*)executeNodeInScope:(NSDictionary *)scope node:(NSDictionary*)node {
-    NSString* type = [node objectForKey:@"type"];
-    NSArray* children = [node objectForKey:@"children"];
-    if([type isEqualToString:@"Identifier"]) {
-        return [scope objectForKey:[node objectForKey:@"value"]];
-    } else if([type isEqualToString:@"StringLiteral"]) {
-        return [node objectForKey:@"value"];
-    } else if([type isEqualToString:@"NumericLiteral"]) {
-        return [node objectForKey:@"value"];
-    } else if([type isEqualToString:@"BooleanLiteral"]) {
-        return [node objectForKey:@"value"];
-    } else if([type isEqualToString:@"CallExpression"]) {
-        NSArray* argumentNodes = [children[1] objectForKey:@"children"];
-        NSMutableArray* arguments = [[NSMutableArray alloc] init];
-        for(int i = 0; i < [argumentNodes count]; i++)
-            arguments[i] = [self executeNodeInScope:scope node:argumentNodes[i]];//TODO:Identifier nil check
-        return [(EBNativeFunction *)[self executeNodeInScope:scope node:children[0]] call:arguments];
-    } else if([type isEqualToString:@"?"]) {
-        if([self toBool:[self executeNodeInScope:scope node:children[0]]]){
-            return [self executeNodeInScope:scope node:children[1]];
-        }
-        else{
-            return [self executeNodeInScope:scope node:children[2]];
-        }
-    }  else if([type isEqualToString:@"+"]) {
-        return [[NSNumber alloc] initWithDouble: ([self toNumber:[self executeNodeInScope:scope node:children[0]]] + [self toNumber:[self executeNodeInScope:scope node:children[1]]])];
-    } else if([type isEqualToString:@"-"]) {
-        return [[NSNumber alloc] initWithDouble: ([self toNumber:[self executeNodeInScope:scope node:children[0]]] - [self toNumber:[self executeNodeInScope:scope node:children[1]]])];
-    } else if([type isEqualToString:@"*"]) {
-        return [[NSNumber alloc] initWithDouble: ([self toNumber:[self executeNodeInScope:scope node:children[0]]] * [self toNumber:[self executeNodeInScope:scope node:children[1]]])];
-    } else if([type isEqualToString:@"/"]) {
-        return [[NSNumber alloc] initWithDouble: ([self toNumber:[self executeNodeInScope:scope node:children[0]]] / [self toNumber:[self executeNodeInScope:scope node:children[1]]])];
-    } else if([type isEqualToString:@"%"]) {
-        return [[NSNumber alloc] initWithDouble: fmod([self toNumber:[self executeNodeInScope:scope node:children[0]]], [self toNumber:[self executeNodeInScope:scope node:children[1]]])];
-    }  else if([type isEqualToString:@"**"]) {
-        return [[NSNumber alloc] initWithDouble: pow([self toNumber:[self executeNodeInScope:scope node:children[0]]], [self toNumber:[self executeNodeInScope:scope node:children[1]]])];
-    } else if ([type isEqualToString:@">"]) {
-        CGFloat num1 = [self toNumber:[self executeNodeInScope:scope node:children[0]]];
-        CGFloat num2 = [self toNumber:[self executeNodeInScope:scope node:children[1]]];
-        return @(num1 > num2);
-    } else if ([type isEqualToString:@">="]) {
-        CGFloat num1 = [self toNumber:[self executeNodeInScope:scope node:children[0]]];
-        CGFloat num2 = [self toNumber:[self executeNodeInScope:scope node:children[1]]];
-        return @(num1 >= num2);
-    } else if ([type isEqualToString:@"<"]) {
-        CGFloat num1 = [self toNumber:[self executeNodeInScope:scope node:children[0]]];
-        CGFloat num2 = [self toNumber:[self executeNodeInScope:scope node:children[1]]];
-        return @(num1 < num2);
-    } else if ([type isEqualToString:@"<="]) {
-        CGFloat num1 = [self toNumber:[self executeNodeInScope:scope node:children[0]]];
-        CGFloat num2 = [self toNumber:[self executeNodeInScope:scope node:children[1]]];
-        return @(num1 <= num2);
-    } else if ([type isEqualToString:@"=="]) {
-        CGFloat num1 = [self toNumber:[self executeNodeInScope:scope node:children[0]]];
-        CGFloat num2 = [self toNumber:[self executeNodeInScope:scope node:children[1]]];
-        return @(num1 == num2);
-    } else if ([type isEqualToString:@"!="]) {
-        CGFloat num1 = [self toNumber:[self executeNodeInScope:scope node:children[0]]];
-        CGFloat num2 = [self toNumber:[self executeNodeInScope:scope node:children[1]]];
-        return @(num1 != num2);
-    } else if ([type isEqualToString:@"||"]) {
-        BOOL num1 = [self toBool:[self executeNodeInScope:scope node:children[0]]];
-        BOOL num2 = [self toBool:[self executeNodeInScope:scope node:children[1]]];
-        return @(num1 || num2);
-    } else if ([type isEqualToString:@"&&"]) {
-        BOOL num1 = [self toBool:[self executeNodeInScope:scope node:children[0]]];
-        BOOL num2 = [self toBool:[self executeNodeInScope:scope node:children[1]]];
-        return @(num1 && num2);
-    }
-    
-    return nil;
-}
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionExecutor.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionExecutor.h
deleted file mode 100644
index 65f55f1..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionExecutor.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import "EBExpressionProperty.h"
-
-@interface EBExpressionExecutor : NSObject
-
-+ (BOOL)executeExpression:(NSMapTable *)expressionMap
-           exitExpression:(NSDictionary *)exitExpression
-                    scope:(NSDictionary *)scope;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionExecutor.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionExecutor.m
deleted file mode 100644
index 74a73a3..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionExecutor.m
+++ /dev/null
@@ -1,334 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionExecutor.h"
-#import "EBTaffyTuple.h"
-#import "NSObject+EBTuplePacker.h"
-#import <objc/message.h>
-#import "EBUtility.h"
-#import "EBExpression.h"
-#import <JavaScriptCore/JavaScriptCore.h>
-#import "EBHandlerFactory.h"
-
-typedef NS_ENUM(NSInteger, WXEPViewProperty) {
-    WXEPViewPropertyUndefined = 0,
-    WXEPViewPropertyTranslate,
-    WXEPViewPropertyTranslateX,
-    WXEPViewPropertyTranslateY,
-    WXEPViewPropertyRotate,
-    WXEPViewPropertyScale,
-    WXEPViewPropertyScaleX,
-    WXEPViewPropertyScaleY,
-    WXEPViewPropertyTransform,
-    WXEPViewPropertyAlpha,
-    WXEPViewPropertyBackgroundColor,
-    WXEPViewPropertyColor,
-    WXEPViewPropertyFrame,
-    WXEPViewPropertyLeft,
-    WXEPViewPropertyTop,
-    WXEPViewPropertyWidth,
-    WXEPViewPropertyHeight,
-    WXEPViewPropertyContentOffset,
-    WXEPViewPropertyContentOffsetX,
-    WXEPViewPropertyContentOffsetY,
-    WXEPViewPropertyPerspective,
-    WXEPViewPropertyRotateX,
-    WXEPViewPropertyRotateY,
-    WXEPViewPropertyBorderRadius,
-    WXEPViewPropertyBorderTopLeftRadius,
-    WXEPViewPropertyBorderTopRightRadius,
-    WXEPViewPropertyBorderBottomRightRadius,
-    WXEPViewPropertyBorderBottomLeftRadius,
-    WXEPViewPropertyMarginTop,
-    WXEPViewPropertyMarginRight,
-    WXEPViewPropertyMarginBottom,
-    WXEPViewPropertyMarginLeft,
-    WXEPViewPropertyPaddingTop,
-    WXEPViewPropertyPaddingRight,
-    WXEPViewPropertyPaddingBottom,
-    WXEPViewPropertyPaddingLeft,
-};
-
-@implementation EBExpressionExecutor
-
-+ (BOOL)executeExpression:(NSMapTable *)expressionMap
-           exitExpression:(NSDictionary *)exitExpression
-                    scope:(NSDictionary *)scope {
-    
-    for (id target in expressionMap) {
-        NSDictionary *expressionDictionary = [expressionMap objectForKey:target];
-        EBExpressionProperty *model = [[EBExpressionProperty alloc] init];
-        NSMutableDictionary *properties = [NSMutableDictionary new];
-        
-        // gather property
-        for (NSString *property in expressionDictionary) {
-            NSDictionary *expressionDic = expressionDictionary[property];
-            id expression = expressionDic[@"expression"];
-            NSDictionary *config = expressionDic[@"config"];
-            
-            NSObject *result = nil;
-            if ([expression isKindOfClass:NSDictionary.class]) {
-                result = [[[EBExpression alloc] initWithRoot:expression] executeInScope:scope];
-            } else if ([expression isKindOfClass:NSString.class]) {
-                JSContext* context = [JSContext new];
-                for (NSString *key in scope) {
-                    [context setObject:scope[key] forKeyedSubscript:key];
-                }
-                result = [[context evaluateScript:expression] toObject];
-            }
-            if (result) {
-                [properties setObject:result forKey:property];
-                [properties addEntriesFromDictionary:config];
-                
-                [EBExpressionExecutor change:&model property:property config:config to:result];
-            }
-        }
-        
-        // customer handler
-        for (id<EBHandlerProtocol> handler in EBHandlerFactory.handlers) {
-            [handler execute:properties to:target];
-        }
-        
-        // execute
-        [EBUtility execute:model to:target];
-        
-    }
-    
-    // exit expression
-    if ([self shouldExit:scope exitExpression:exitExpression]) {
-        return NO;
-    }
-    return YES;
-}
-
-+ (BOOL)shouldExit:(NSDictionary *)scope exitExpression:(NSDictionary *)exitExpression {
-    
-    if (!exitExpression || exitExpression.count == 0) {
-        return NO;
-    }
-    
-    NSObject *result = [[[EBExpression alloc] initWithRoot:exitExpression] executeInScope:scope];
-    if (!result) {
-        return NO;
-    }
-    
-    if ([result isKindOfClass:[NSNumber class]]) {
-        return [(NSNumber *)result boolValue];
-    } else if ([result isKindOfClass:[NSString class]]) {
-        return [(NSString *)result boolValue];
-    }
-    
-    return NO;
-}
-
-
-+ (void)change:(EBExpressionProperty **)model property:(NSString *)propertyName config:(NSDictionary*)config to:(NSObject *)result {
-    WXEPViewProperty property = [[EBExpressionExecutor viewPropertyMap][propertyName] integerValue];
-    CGFloat factor = [EBUtility factor];
-    switch (property) {
-        case WXEPViewPropertyTranslate:
-            [EBExpressionExecutor makeTranslate:result model:model];
-            break;
-        case WXEPViewPropertyTranslateX:
-            [*model setTx:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyTranslateY:
-            [*model setTy:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyRotate:
-            [*model setAngle:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyScale:
-            if (![result isKindOfClass:[NSArray class]]) {
-                result = @[result, result];
-            }
-            [EBExpressionExecutor makeScale:result model:model];
-            break;
-        case WXEPViewPropertyScaleX:
-            [*model setSx:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyScaleY:
-            [*model setSy:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyAlpha:
-            [*model setAlpha:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyBackgroundColor:
-            [*model setBackgroundColor:result];
-            break;
-        case WXEPViewPropertyColor:
-            [*model setColor:result];
-            break;
-        case WXEPViewPropertyLeft:
-            [*model setLeft:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyTop:
-            [*model setTop:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyWidth:
-            [*model setWidth:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyHeight:
-            [*model setHeight:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyContentOffset:
-            [EBExpressionExecutor makeContentOffset:result model:model];
-            break;
-        case WXEPViewPropertyContentOffsetX:
-            [*model setContentOffsetX:[EBExpressionExecutor unpackSingleRet:result]*factor];
-            break;
-        case WXEPViewPropertyContentOffsetY:
-            [*model setContentOffsetY:[EBExpressionExecutor unpackSingleRet:result]*factor];
-            break;
-        case WXEPViewPropertyRotateX:
-            [*model setRotateX:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyRotateY:
-            [*model setRotateY:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyBorderRadius:
-            [*model setBr:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyBorderTopLeftRadius:
-            [*model setBrTL:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyBorderTopRightRadius:
-            [*model setBrTR:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyBorderBottomRightRadius:
-            [*model setBrBR:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyBorderBottomLeftRadius:
-            [*model setBrBL:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyMarginTop:
-            [*model setMarginTop:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyMarginRight:
-            [*model setMarginRight:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyMarginBottom:
-            [*model setMarginBottom:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyMarginLeft:
-            [*model setMarginLeft:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyPaddingTop:
-            [*model setPaddingTop:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyPaddingRight:
-            [*model setPaddingRight:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyPaddingBottom:
-            [*model setPaddingBottom:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        case WXEPViewPropertyPaddingLeft:
-            [*model setPaddingLeft:[EBExpressionExecutor unpackSingleRet:result]];
-            break;
-        default:
-            break;
-    }
-    
-    if(config)
-    {
-        if (config[@"perspective"]) {
-            [*model setPerspective:[config[@"perspective"] doubleValue]];
-        }
-        
-        if(config[@"transformOrigin"])
-        {
-            [*model setTransformOrigin:config[@"transformOrigin"]];
-        }
-    }
-}
-
-+ (NSDictionary *)viewPropertyMap {
-    static NSDictionary *map = nil;
-    static dispatch_once_t onceToken;
-    
-    dispatch_once(&onceToken, ^{
-        map = @{@"transform.translate":@(WXEPViewPropertyTranslate),
-                @"transform.translateX":@(WXEPViewPropertyTranslateX),
-                @"transform.translateY":@(WXEPViewPropertyTranslateY),
-                @"transform.rotate":@(WXEPViewPropertyRotate),
-                @"transform.scale":@(WXEPViewPropertyScale),
-                @"transform.scaleX":@(WXEPViewPropertyScaleX),
-                @"transform.scaleY":@(WXEPViewPropertyScaleY),
-                @"transform.matrix":@(WXEPViewPropertyTransform),
-                @"transform.rotateX":@(WXEPViewPropertyRotateX),
-                @"transform.rotateY":@(WXEPViewPropertyRotateY),
-                @"transform.rotateZ":@(WXEPViewPropertyRotate),
-                @"opacity":@(WXEPViewPropertyAlpha),
-                @"background-color":@(WXEPViewPropertyBackgroundColor),
-                @"color":@(WXEPViewPropertyColor),
-                @"frame":@(WXEPViewPropertyFrame),
-                @"left":@(WXEPViewPropertyLeft),
-                @"top":@(WXEPViewPropertyTop),
-                @"width":@(WXEPViewPropertyWidth),
-                @"height":@(WXEPViewPropertyHeight),
-                @"scroll.contentOffset":@(WXEPViewPropertyContentOffset),
-                @"scroll.contentOffsetX":@(WXEPViewPropertyContentOffsetX),
-                @"scroll.contentOffsetY":@(WXEPViewPropertyContentOffsetY),
-                @"border-radius":@(WXEPViewPropertyBorderRadius),
-                @"border-top-left-radius":@(WXEPViewPropertyBorderTopLeftRadius),
-                @"border-top-right-radius":@(WXEPViewPropertyBorderTopRightRadius),
-                @"border-bottom-right-radius":@(WXEPViewPropertyBorderBottomRightRadius),
-                @"border-bottom-left-radius":@(WXEPViewPropertyBorderBottomLeftRadius),
-                @"margin-top":@(WXEPViewPropertyMarginTop),
-                @"margin-right":@(WXEPViewPropertyMarginRight),
-                @"margin-bottom":@(WXEPViewPropertyMarginBottom),
-                @"margin-left":@(WXEPViewPropertyMarginLeft),
-                @"padding-top":@(WXEPViewPropertyPaddingTop),
-                @"padding-right":@(WXEPViewPropertyPaddingRight),
-                @"padding-bottom":@(WXEPViewPropertyPaddingBottom),
-                @"padding-left":@(WXEPViewPropertyPaddingLeft),
-                };
-    });
-    return map;
-}
-
-+ (void)makeTranslate:(NSObject *)result model:(EBExpressionProperty **)model {
-    id x, y;
-    [_(x, y) unpackFrom:result];
-    
-    (*model).tx = [x doubleValue];
-    (*model).ty = [y doubleValue];
-}
-
-+ (void)makeScale:(NSObject *)result model:(EBExpressionProperty **)model {
-    id x, y;
-    [_(x, y) unpackFrom:result];
-    (*model).sx = [x doubleValue];
-    (*model).sy = [y doubleValue];
-}
-
-+ (void)makeContentOffset:(NSObject *)result model:(EBExpressionProperty **)model {
-    id x, y;
-    [_(x, y) unpackFrom:result];
-    
-    CGFloat factor = [EBUtility factor];
-    
-    (*model).contentOffsetX = [x doubleValue] * factor;
-    (*model).contentOffsetY = [y doubleValue] * factor;
-}
-
-+ (CGFloat)unpackSingleRet:(NSObject *)result {
-    id a;
-    [_(a) unpackFrom:result];
-    return [a doubleValue];
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionGesture.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionGesture.h
deleted file mode 100644
index f075662..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionGesture.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <UIKit/UIKit.h>
-#import "EBExpressionHandler.h"
-
-@interface EBExpressionGesture : EBExpressionHandler
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionGesture.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionGesture.m
deleted file mode 100644
index f678c78..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionGesture.m
+++ /dev/null
@@ -1,306 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionGesture.h"
-#import "EBExpressionScope.h"
-#import "EBExpression.h"
-#import "EBExpressionExecutor.h"
-#import "EBUtility.h"
-
-@interface EBExpressionGesture () <UIGestureRecognizerDelegate>
-
-@property (nonatomic, weak) UIGestureRecognizer *gesture;
-@property (nonatomic, weak) id<UIGestureRecognizerDelegate> tmpDelegate;
-@property (nonatomic, assign) BOOL isHorizontal;
-@property (nonatomic, assign) BOOL isVertical;
-
-@end
-
-@implementation EBExpressionGesture {
-    BOOL _isMutex;
-}
-
-- (void)dealloc {
-    [_gesture removeTarget:self action:nil];
-    _gesture.delegate = _tmpDelegate;
-}
-
-- (void)updateTargetExpression:(NSMapTable<id, NSDictionary *> *)expressionMap
-                       options:(NSDictionary *)options
-                exitExpression:(NSDictionary *)exitExpression
-                      callback:(EBKeepAliveCallback)callback {
-    [super updateTargetExpression:expressionMap
-                          options:options
-                   exitExpression:exitExpression
-                         callback:callback];
-    
-    [self initGesture];
-}
-
-#pragma mark - public methods
-- (void)removeExpressionBinding {
-    [super removeExpressionBinding];
-    
-    [EBUtility performBlockOnMainThread:^{
-        if (self.tmpDelegate) {
-            self.gesture.delegate = self.tmpDelegate;
-            [self.gesture removeTarget:self action:nil];
-            self.tmpDelegate = nil;
-        }
-        self.gesture = nil;
-    }];
-}
-
-#pragma mark - private methods
-- (void)initGesture {
-    if (!self.gesture) {
-        __weak typeof(self) welf = self;
-        [EBUtility performBlockOnMainThread:^{
-            [welf addGuestureOnMainThread];
-        }];
-    }
-}
-
--(void)addGuestureOnMainThread {
-    self.gesture = [EBUtility getPanGestureForSource:self.source callback:^(BOOL isHorizontal, BOOL isVertical) {
-        _isHorizontal = isHorizontal;
-        _isVertical = isVertical;
-
-        if (_isHorizontal || _isVertical) {
-            _isMutex = YES;
-        } else {
-            _isMutex = NO;
-        }
-    }];
-    
-    if (!self.gesture) {
-        UIGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
-        self.gesture = panGesture;
-        self.gesture.delegate = self;
-        
-        UIView* view = [EBUtility getViewByRef:self.source];
-        [view addGestureRecognizer:self.gesture];
-    }
-    
-    if (self.gesture.delegate && self.gesture.delegate != self) {
-        _tmpDelegate = self.gesture.delegate;
-    }
-    
-    [self.gesture removeTarget:self action:nil];
-    [self.gesture addTarget:self action:@selector(handleGesture:)];
-    self.gesture.delegate = self;
-}
-
-- (void)fireStateChangedEvent:(UIGestureRecognizer *)sender {
-    BOOL keepAlive = ![self isGestureEnded:sender.state];
-    NSMutableDictionary *result = [[self gestureMap:sender] mutableCopy];
-    result[@"state"] =  [self stateToString:sender.state];
-    
-    if (self.callback) {
-        self.callback(self.source, result, keepAlive);
-    }
-    
-    if (!keepAlive) {
-        // free resouces
-        self.expressionMap = nil;
-        self.callback = nil;
-    }
-}
-
-- (void)fireExitEvent:(UIGestureRecognizer *)sender {
-    NSMutableDictionary *result = [[self gestureMap:sender] mutableCopy];
-    result[@"state"] =  @"exit";
-    
-    if (self.callback) {
-        self.callback(self.source, result, YES);
-    }
-}
-
-- (NSDictionary *)gestureMap:(UIGestureRecognizer *)sender {
-    if ([sender isKindOfClass:[UIPanGestureRecognizer class]]) {
-        UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)sender;
-        CGPoint offset = [pan translationInView:pan.view];
-
-        CGFloat factor = [EBUtility factor];
-        return @{@"deltaX":@(offset.x/factor),@"deltaY":@(offset.y/factor)};
-    }
-    return [NSDictionary dictionary];
-}
-
-#pragma mark - Gesture
-- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
-    if (gestureRecognizer == self.gesture) {
-        if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
-            if (!_isHorizontal && !_isVertical) {
-                return YES;
-            }
-            
-            UIView* view = [EBUtility getViewByRef:self.source];
-            CGPoint translation = [(UIPanGestureRecognizer*)_gesture translationInView:view];
-            if (_isHorizontal && fabs(translation.y) > fabs(translation.x)) {
-                return NO;
-            } else if (_isVertical && fabs(translation.x) > fabs(translation.y)) {
-                return NO;
-            }
-        }
-    }
-    return YES;
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
-    if (gestureRecognizer == self.gesture) {
-        
-        if (otherGestureRecognizer.view && [otherGestureRecognizer.view isKindOfClass:[UIScrollView class]]) {
-            UIScrollView *scroller = (UIScrollView *)otherGestureRecognizer.view;
-            
-            // direction
-            if (_isHorizontal && scroller.contentSize.width + scroller.contentInset.left +scroller.contentInset.right > scroller.frame.size.width
-                && scroller.contentSize.height + scroller.contentInset.top + scroller.contentInset.bottom <= scroller.frame.size.height) {
-                return YES;
-            }
-            
-            if (_isVertical && scroller.contentSize.height > scroller.frame.size.height
-                && scroller.contentSize.width <= scroller.frame.size.height) {
-                return YES;
-            }
-        } else if (otherGestureRecognizer.delegate && [otherGestureRecognizer.delegate isKindOfClass:[EBExpressionGesture class]]) {
-            if ([self isInnerPan:(UIPanGestureRecognizer *)otherGestureRecognizer otherPan:(UIPanGestureRecognizer *)gestureRecognizer]) {
-                EBExpressionGesture *exprGesture = (EBExpressionGesture *)(otherGestureRecognizer.delegate);
-                
-                // direction
-                if (_isHorizontal && exprGesture.isHorizontal) {
-                    return YES;
-                }
-                
-                if (_isVertical && exprGesture.isVertical) {
-                    return YES;
-                }
-            }
-        } else if([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]){
-            if ([self isInnerPan:(UIPanGestureRecognizer *)otherGestureRecognizer otherPan:(UIPanGestureRecognizer *)gestureRecognizer]) {
-                return YES;
-            }
-        }
-    }
-    return NO;
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
-    if (gestureRecognizer == self.gesture) {
-        if ([otherGestureRecognizer isKindOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")]) {
-            if (_isMutex) {
-                return YES;
-            }
-        } else if (otherGestureRecognizer.delegate && [otherGestureRecognizer.delegate isKindOfClass:[EBExpressionGesture class]]) {
-            if ([self isInnerPan:(UIPanGestureRecognizer *)gestureRecognizer otherPan:(UIPanGestureRecognizer *)otherGestureRecognizer]) {
-                if (_isMutex) {
-                    return YES;
-                }
-            }
-        }
-    }
-    return NO;
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
-    return YES;
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
-    if (gestureRecognizer == self.gesture) {
-        if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]
-            && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
-            if (!_isMutex) {
-                return YES;
-            }
-            return NO;
-        }
-    }
-    
-    return YES;
-}
-
-- (BOOL)isInnerPan:(UIPanGestureRecognizer *)pan otherPan:(UIPanGestureRecognizer *)otherPan {
-    UIView *otherView = otherPan.view;
-    UIView *parentView = pan.view.superview;
-    
-    while (parentView) {
-        if (parentView == otherView) {
-            return YES;
-        }
-        parentView = parentView.superview;
-    }
-    return NO;
-}
-
-- (void)handleGesture:(UIGestureRecognizer *)sender {
-    if (sender.state == UIGestureRecognizerStateBegan || sender.state == UIGestureRecognizerStateEnded
-        || sender.state == UIGestureRecognizerStateCancelled || sender.state == UIGestureRecognizerStateFailed) {
-        [self fireStateChangedEvent:sender];
-    } else if (sender.state == UIGestureRecognizerStateChanged) {
-        @try {
-            NSDictionary *scope = [self setUpScopeForGesture:sender];
-            BOOL exit = ![self executeExpression:scope];
-            if (exit) {
-                [self fireExitEvent:sender];
-                [self removeExpressionBinding];
-            }
-        } @catch (NSException *exception) {
-            NSLog(@"%@",exception);
-        }
-    }
-}
-
-- (NSDictionary *)setUpScopeForGesture:(UIGestureRecognizer *)sender {
-    NSMutableDictionary *scope = [self generalScope];
-    
-    if ([sender isKindOfClass:[UIPanGestureRecognizer class]]) {
-        UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)sender;
-        CGPoint offset = [pan translationInView:pan.view];
-        
-        CGFloat factor = [EBUtility factor];
-        
-        [scope setValue:@(offset.x / factor) forKey:@"x"];
-        [scope setValue:@(offset.y / factor) forKey:@"y"];
-    }
-    
-    return [scope copy];
-}
-        
-- (NSString *)stateToString:(UIGestureRecognizerState)state {
-    switch (state) {
-        case UIGestureRecognizerStateBegan:
-            return @"start";
-        case UIGestureRecognizerStateChanged:
-            return @"move";
-        case UIGestureRecognizerStateEnded:
-            return @"end";
-        case UIGestureRecognizerStateCancelled:
-            return @"cancel";
-        case UIGestureRecognizerStateFailed:
-            return @"fail";
-        default:
-            return @"unknown";
-    }
-}
-
-- (BOOL)isGestureEnded:(UIGestureRecognizerState)state {
-    return state == UIGestureRecognizerStateEnded
-        || state == UIGestureRecognizerStateCancelled
-        || state == UIGestureRecognizerStateFailed;
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionHandler.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionHandler.h
deleted file mode 100644
index b3a3a06..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionHandler.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-typedef void (^EBKeepAliveCallback)(id source , id result, BOOL keepAlive);
-
-@class EBExpressionHandler;
-
-@interface EBEventHandlerFactory : NSObject
-
-+ (BOOL)containsEvent:(NSString *)event;
-
-+ (BOOL)eventRequireSource:(NSString *)event;
-
-+ (NSArray<NSString *> *)supportEvents;
-
-+ (void)registerEvent:(NSString *)event withClass:(Class)clazz;
-
-+ (EBExpressionHandler *)createHandlerWithEvent:(NSString *)event source:(id)source;
-
-@end
-
-@interface EBExpressionHandler : NSObject
-
-@property (nonatomic, weak) id source;
-
-@property (nonatomic, copy, nullable) NSDictionary *exitExpression;
-@property (nonatomic, copy, nullable) EBKeepAliveCallback callback;
-@property (nonatomic, strong, nullable) NSMapTable<id, NSDictionary *> *expressionMap;
-@property (nonatomic, strong, nullable) NSDictionary *options;
-
-- (void)updateTargetExpression:(NSMapTable<id, NSDictionary *> *)expressionMap
-                       options:(NSDictionary * _Nullable)options
-                exitExpression:(NSDictionary *)exitExpression
-                      callback:(EBKeepAliveCallback)callback;
-
-+ (BOOL)requireSource;
-
-- (void)removeExpressionBinding;
-
-- (BOOL)executeExpression:(NSDictionary *)scope;
-
-- (NSMutableDictionary *)generalScope;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionHandler.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionHandler.m
deleted file mode 100644
index b1e5110..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionHandler.m
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionHandler.h"
-#import "EBExpressionGesture.h"
-#import "EBExpressionScroller.h"
-#import "EBExpression.h"
-#import "EBExpressionExecutor.h"
-#import "EBExpressionScope.h"
-#import "EBExpressionTiming.h"
-#import "EBExpressionOrientation.h"
-#import "EBUtility.h"
-#import "EBHandlerFactory.h"
-
-@interface EBEventHandlerFactory ()
-
-@property(nonatomic, strong) NSMutableDictionary<NSString *, Class> *eventHandlers;
-@property (nonatomic, strong)  NSLock   *lock;
-
-@end
-
-@implementation EBEventHandlerFactory
-
-+ (instancetype)sharedInstance {
-    static EBEventHandlerFactory* _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [self new];
-    });
-    return _sharedInstance;
-}
-
-- (instancetype)init {
-    if (self = [super init]) {
-        _eventHandlers = [NSMutableDictionary dictionaryWithObjects:@[
-                                                     EBExpressionGesture.class,
-                                                     EBExpressionScroller.class,
-                                                     EBExpressionTiming.class,
-                                                     EBExpressionOrientation.class,
-                                                     ]
-                                           forKeys:@[
-                                                     @"pan",
-                                                     @"scroll",
-                                                     @"timing",
-                                                     @"orientation",
-                                                     ]];
-        _lock = [NSLock new];
-    }
-    return self;
-}
-
-- (Class)classWithEvent:(NSString *)event {
-    [_lock lock];
-    Class clazz = [_eventHandlers objectForKey:event];
-    [_lock unlock];
-    return clazz;
-}
-
-- (NSArray<NSString *> *)supportEvents {
-    [_lock lock];
-    NSArray<NSString *> *supportEvents = _eventHandlers.allKeys;
-    [_lock unlock];
-    return supportEvents;
-}
-
-- (void)registerEvent:(NSString *)event withClass:(Class)clazz {
-    [_lock lock];
-    [_eventHandlers setObject:clazz forKey:event];
-    [_lock unlock];
-}
-
-+ (BOOL)containsEvent:(NSString *)event {
-    return [[self supportEvents] containsObject:event];
-}
-
-+ (BOOL)eventRequireSource:(NSString *)event {
-    Class clazz = [[EBEventHandlerFactory sharedInstance] classWithEvent:event];
-    if ([clazz respondsToSelector:@selector(requireSource)]) {
-        return [clazz requireSource];
-    }
-    return YES;
-}
-
-+ (NSArray<NSString *> *)supportEvents {
-    return [EBEventHandlerFactory sharedInstance].supportEvents;
-}
-
-+ (void)registerEvent:(NSString *)event withClass:(Class)clazz {
-    [[EBEventHandlerFactory sharedInstance] registerEvent:event withClass:clazz];
-}
-
-+ (EBExpressionHandler *)createHandlerWithEvent:(NSString *)event source:(id)source {
-    Class clazz = [[EBEventHandlerFactory sharedInstance] classWithEvent:event];
-    EBExpressionHandler *handler = [clazz new];
-    if ([handler respondsToSelector:@selector(setSource:)]) {
-        [handler setSource:source];
-    }
-    return handler;
-}
-
-@end
-
-@implementation EBExpressionHandler
-
-- (void)updateTargetExpression:(NSMapTable<id, NSDictionary *> *)expressionMap
-                       options:(NSDictionary *)options
-                exitExpression:(NSDictionary *)exitExpression
-                      callback:(EBKeepAliveCallback)callback {
-    [EBUtility performBlockOnMainThread:^{
-        self.expressionMap = expressionMap;
-        self.exitExpression = exitExpression;
-    }];
-    self.callback = callback;
-    self.options = options;
-}
-
-+ (BOOL)requireSource {
-    return YES;
-}
-
-- (void)removeExpressionBinding {
-    [EBUtility performBlockOnMainThread:^{
-        self.expressionMap = nil;
-    }];
-}
-
-- (BOOL)executeExpression:(NSDictionary *)scope {
-    if (![NSThread isMainThread]) {
-        NSLog(@"not main thread!");
-    }
-    return [EBExpressionExecutor executeExpression:_expressionMap
-                                    exitExpression:_exitExpression
-                                             scope:scope];
-}
-
-- (NSMutableDictionary *)generalScope {
-    NSMutableDictionary *generalScope= [EBExpressionScope generalScope];
-    for (id<EBHandlerProtocol> handler in EBHandlerFactory.handlers) {
-        if ([handler respondsToSelector:NSSelectorFromString(@"customScope")]) {
-            [generalScope addEntriesFromDictionary:[handler customScope]];
-        }
-    }
-    return generalScope;
-}
-
-@end
-
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionOrientation.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionOrientation.h
deleted file mode 100644
index 4fc8756..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionOrientation.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionHandler.h"
-
-@interface EBExpressionOrientation : EBExpressionHandler
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionOrientation.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionOrientation.m
deleted file mode 100644
index aa60e6e..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionOrientation.m
+++ /dev/null
@@ -1,213 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionOrientation.h"
-#import "EBGyroOrientationEvaluator.h"
-#import "EBGyroManager.h"
-
-#define SUPPORT_SCENE_TYPES (@[@"2d",@"3d"])
-#define SCENE_TYPE_2D @"2d"
-
-@interface EBExpressionOrientation () <EBGyroWatcherProtocol>
-
-@end
-
-@implementation EBExpressionOrientation
-{
-    bool _isStarted;
-    double _startAlpha;
-    double _startBeta;
-    double _startGamma;
-    double _lastAlpha;
-    double _lastBeta;
-    double _lastGamma;
-    
-    NSString *_sceneType;
-    
-    EBGyroOrientationEvaluator *_evaluatorX;
-    EBGyroOrientationEvaluator *_evaluatorY;
-    EBGyroOrientationEvaluator *_evaluator3D;
-    NSMutableArray<NSNumber *> *_alphaRecords;
-    
-}
-
-- (instancetype)init {
-    if (self = [super init]) {
-        _isStarted = false;
-        _startAlpha = 0;
-        _startBeta = 0;
-        _startGamma = 0;
-        _lastAlpha = 0;
-        _lastBeta = 0;
-        _lastGamma = 0;
-        _alphaRecords = [NSMutableArray new];
-    }
-    return self;
-}
-
-+ (BOOL)requireSource {
-    return NO;
-}
-
-- (void)updateTargetExpression:(NSMapTable<id, NSDictionary *> *)targetExpression
-         options:(NSDictionary *)options
-       exitExpression:(NSDictionary *)exitExpression
-             callback:(EBKeepAliveCallback)callback {
-    [super updateTargetExpression:targetExpression
-            options:options
-          exitExpression:exitExpression
-                callback:callback];
-    
-    if (options != nil) {
-        _sceneType = [options[@"sceneType"] lowercaseString];
-        _sceneType = [SUPPORT_SCENE_TYPES containsObject:_sceneType] ? _sceneType : SCENE_TYPE_2D;
-    } else {
-        _sceneType = SCENE_TYPE_2D;
-    }
-    if ([_sceneType isEqualToString:SCENE_TYPE_2D]) {
-        _evaluatorX = [[EBGyroOrientationEvaluator alloc] initWithConstraintAlpha:nil constraintBeta:@(90.0) constraintGamma:nil];
-        _evaluatorY = [[EBGyroOrientationEvaluator alloc] initWithConstraintAlpha:@(0.0) constraintBeta:nil constraintGamma:@(90.0)];
-    } else {
-        _evaluator3D = [[EBGyroOrientationEvaluator alloc] initWithConstraintAlpha:nil constraintBeta:nil constraintGamma:nil];
-    }
-    
-    [EBGyroManager watchOrientation:self];
-    
-    [self fireStateChangedEvent:@"start" alpha:0 beta:0 gamma:0];
-}
-
-- (void)removeExpressionBinding {
-    [super removeExpressionBinding];
-    [self stopWatchOrientation];
-    
-    if ([NSThread isMainThread]) {
-        [self fireStateChangedEvent:@"end" alpha:_lastAlpha beta:_lastBeta gamma:_lastGamma];
-    }
-}
-    
-- (void)stopWatchOrientation {
-    [EBGyroManager removeOrientation:self];
-}
-
-- (BOOL)orientaionChanged:(double)alpha beta:(double)beta gamma:(double)gamma {
-    
-    if(!_isStarted){
-        _isStarted = true;
-        _startAlpha = alpha;
-        _startBeta = beta;
-        _startGamma = gamma;
-    }
-    _lastAlpha = alpha;
-    _lastBeta = beta;
-    _lastGamma = gamma;
-    
-    @try {
-        
-        double x=0,y=0,z=0;
-        
-        double formatAlpha = [self formatAlpha:alpha startAlpha:_startAlpha];
-        
-        if ([_sceneType isEqualToString:SCENE_TYPE_2D]) {
-            EBGyroQuaternion *quaternionX = [_evaluatorX calculateWithDeviceAlpha:formatAlpha deviceBeta:beta deviceGamma:gamma];
-            EBGyroQuaternion *quaternionY = [_evaluatorY calculateWithDeviceAlpha:formatAlpha deviceBeta:beta deviceGamma:gamma];
-            EBGyroVector3 *vecX = [EBGyroVector3 vectorWithX:0 y:0 z:1];
-            [vecX applyQuaternionW:quaternionX.w x:quaternionX.x y:quaternionX.y z:quaternionX.z];
-            
-            EBGyroVector3 *vecY = [EBGyroVector3 vectorWithX:0 y:1 z:1];
-            [vecY applyQuaternionW:quaternionY.w x:quaternionY.x y:quaternionY.y z:quaternionY.z];
-            
-            x = 90 - acos(vecX.x) * 180 / M_PI;
-            y = 90 - acos(vecY.y) * 180 / M_PI;
-        } else {
-            EBGyroQuaternion *quaternion = [_evaluator3D calculateWithDeviceAlpha:formatAlpha deviceBeta:beta deviceGamma:gamma];
-            x = quaternion.x;
-            y = quaternion.y;
-            z = quaternion.z;
-        }
-        
-        NSDictionary *scope = [self setUpScope:alpha beta:beta gamma:gamma x:x y:y z:z];
-        
-        BOOL exit = ![self executeExpression:scope];
-        if (exit) {
-            [self stopWatchOrientation];
-            [self fireStateChangedEvent:@"exit" alpha:alpha beta:beta gamma:gamma];
-            return NO;
-        }
-        return YES;
-    } @catch (NSException *exception) {
-        NSLog(@"%@",exception);
-        return NO;
-    }
-}
-
-- (double)formatAlpha:(double)currentAlpha startAlpha:(double)startAlpha{
-    double threshold = 360.0;
-    [_alphaRecords addObject:@(currentAlpha)];
-    long l = _alphaRecords.count;
-    if (l > 1) {
-        if (l>5) {
-            [_alphaRecords removeObjectAtIndex:0];
-            l = l-1;
-        }
-        double times = 0;
-        for (int i = 1; i < l; i++) {
-            double last = [_alphaRecords[i-1] doubleValue];
-            double current = [_alphaRecords[i] doubleValue];
-            if(last && current) {
-                if(current-last < -threshold/2) {
-                    times = floor(last / threshold) + 1;
-                    current = current + times * threshold;
-                    _alphaRecords[i] = @(current);
-                }
-                if (current-last > threshold/2) {
-                    _alphaRecords[i] = @(current - threshold);
-                }
-            }
-        }
-    }
-    return fmod([_alphaRecords.lastObject doubleValue] - startAlpha, threshold);
-}
-
-- (NSDictionary *)setUpScope:(double)alpha beta:(double)beta gamma:(double)gamma x:(double)x y:(double)y z:(double)z {
-    NSMutableDictionary *scope = [self generalScope];
-    
-    [scope setValue:@(alpha) forKey:@"alpha"];
-    [scope setValue:@(beta) forKey:@"beta"];
-    [scope setValue:@(gamma) forKey:@"gamma"];
-    
-    [scope setValue:@(alpha - _startAlpha) forKey:@"dalpha"];
-    [scope setValue:@(beta - _startBeta) forKey:@"dbeta"];
-    [scope setValue:@(gamma - _startGamma) forKey:@"dgamma"];
-    
-    [scope setValue:@(x) forKey:@"x"];
-    [scope setValue:@(y) forKey:@"y"];
-    [scope setValue:@(z) forKey:@"z"];
-    
-    return [scope copy];
-}
-
-- (void)fireStateChangedEvent:(NSString *)state alpha:(double)alpha beta:(double)beta gamma:(double)gamma {
-    NSDictionary *result = @{@"alpha": @(alpha),
-                             @"beta": @(beta),
-                             @"gamma": @(gamma),
-                             @"state": state};
-    
-    if (self.callback) {
-        self.callback(self.source, result, YES);
-    }
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionProperty.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionProperty.h
deleted file mode 100644
index e98336c..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionProperty.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-@interface EBExpressionProperty : NSObject
-
-@property (nonatomic, assign) BOOL isTransformChanged;
-@property (nonatomic, assign) BOOL isTranslateChanged;
-@property (nonatomic, assign) BOOL isRotateChanged;
-@property (nonatomic, assign) BOOL isScaleChagned;
-
-@property (nonatomic, assign) CGFloat tx;
-@property (nonatomic, assign) CGFloat ty;
-@property (nonatomic, assign) CGFloat sx;
-@property (nonatomic, assign) CGFloat sy;
-@property (nonatomic, assign) CGFloat angle;
-
-@property (nonatomic, assign) BOOL isLeftChanged;
-@property (nonatomic, assign) BOOL isTopChanged;
-@property (nonatomic, assign) BOOL isWidthChanged;
-@property (nonatomic, assign) BOOL isHeightChanged;
-
-@property (nonatomic, assign) CGFloat left;
-@property (nonatomic, assign) CGFloat top;
-@property (nonatomic, assign) CGFloat width;
-@property (nonatomic, assign) CGFloat height;
-
-@property (nonatomic, assign) BOOL isBackgroundColorChanged;
-@property (nonatomic, strong) NSObject *backgroundColor;
-
-// color only for text
-@property (nonatomic, assign) BOOL isColorChanged;
-@property (nonatomic, strong) NSObject *color;
-
-@property (nonatomic, assign) BOOL isAlphaChanged;
-@property (nonatomic, assign) CGFloat alpha;
-
-@property (nonatomic, assign) BOOL isContentOffsetXChanged;
-@property (nonatomic, assign) BOOL isContentOffsetYChanged;
-@property (nonatomic, assign) CGFloat contentOffsetX;
-@property (nonatomic, assign) CGFloat contentOffsetY;
-
-@property (nonatomic, assign) BOOL isRotateXChanged;
-@property (nonatomic, assign) BOOL isRotateYChanged;
-@property (nonatomic, assign) BOOL isPerspectiveChanged;
-@property (nonatomic, assign) BOOL isTransformOriginChanged;
-@property (nonatomic, assign) CGFloat rotateX;
-@property (nonatomic, assign) CGFloat rotateY;
-@property (nonatomic, assign) CGFloat perspective;
-@property (nonatomic, strong) NSString *transformOrigin;
-
-// border radius
-@property (nonatomic, assign) CGFloat brTL;
-@property (nonatomic, assign) BOOL isBRTLChanged;
-@property (nonatomic, assign) CGFloat brTR;
-@property (nonatomic, assign) BOOL isBRTRChanged;
-@property (nonatomic, assign) CGFloat brBR;
-@property (nonatomic, assign) BOOL isBRBRChanged;
-@property (nonatomic, assign) CGFloat brBL;
-@property (nonatomic, assign) BOOL isBRBLChanged;
-@property (nonatomic, assign) CGFloat br;
-@property (nonatomic, assign) BOOL isBRChanged;
-
-@property (nonatomic, assign) CGFloat marginTop;
-@property (nonatomic, assign) BOOL isMarginTopChanged;
-@property (nonatomic, assign) CGFloat marginRight;
-@property (nonatomic, assign) BOOL isMarginRightChanged;
-@property (nonatomic, assign) CGFloat marginBottom;
-@property (nonatomic, assign) BOOL isMarginBottomChanged;
-@property (nonatomic, assign) CGFloat marginLeft;
-@property (nonatomic, assign) BOOL isMarginLeftChanged;
-
-@property (nonatomic, assign) CGFloat paddingTop;
-@property (nonatomic, assign) BOOL isPaddingTopChanged;
-@property (nonatomic, assign) CGFloat paddingRight;
-@property (nonatomic, assign) BOOL isPaddingRightChanged;
-@property (nonatomic, assign) CGFloat paddingBottom;
-@property (nonatomic, assign) BOOL isPaddingBottomChanged;
-@property (nonatomic, assign) CGFloat paddingLeft;
-@property (nonatomic, assign) BOOL isPaddingLeftChanged;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionProperty.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionProperty.m
deleted file mode 100644
index ee1c389..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionProperty.m
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionProperty.h"
-
-@implementation EBExpressionProperty
-
-- (instancetype)init {
-    if (self = [super init]) {
-        _sx = 1;
-        _sy = 1;
-    }
-    return self;
-}
-
-#pragma mark - Setters
-- (void)setTx:(CGFloat)tx {
-    _tx = tx;
-    _isTranslateChanged = YES;
-    _isTransformChanged = YES;
-}
-
-- (void)setTy:(CGFloat)ty {
-    _ty = ty;
-    _isTranslateChanged = YES;
-    _isTransformChanged = YES;
-}
-
-- (void)setSx:(CGFloat)sx {
-    _sx = sx;
-    _isScaleChagned = YES;
-    _isTransformChanged = YES;
-}
-
-- (void)setSy:(CGFloat)sy {
-    _sy = sy;
-    _isScaleChagned = YES;
-    _isTransformChanged = YES;
-}
-
-- (void)setAngle:(CGFloat)angle {
-    _angle = angle;
-    _isRotateChanged = YES;
-    _isTransformChanged = YES;
-}
-
-- (void)setLeft:(CGFloat)left {
-    _left = left;
-    _isLeftChanged = YES;
-}
-
-- (void)setTop:(CGFloat)top {
-    _top = top;
-    _isTopChanged = YES;
-}
-
-- (void)setWidth:(CGFloat)width {
-    _width = width;
-    _isWidthChanged = YES;
-}
-
-- (void)setHeight:(CGFloat)height {
-    _height = height;
-    _isHeightChanged = YES;
-}
-
-- (void)setBackgroundColor:(NSString *)backgroundColor {
-    _backgroundColor = backgroundColor;
-    _isBackgroundColorChanged = YES;
-}
-
-- (void)setColor:(NSString *)color {
-    _color = color;
-    _isColorChanged = YES;
-}
-
-- (void)setAlpha:(CGFloat)alpha {
-    _alpha = alpha > 0 ? alpha : 0;
-    _isAlphaChanged = YES;
-}
-
-- (void)setContentOffsetX:(CGFloat)contentOffsetX {
-    _contentOffsetX = contentOffsetX;
-    _isContentOffsetXChanged = YES;
-}
-
-- (void)setContentOffsetY:(CGFloat)contentOffsetY {
-    _contentOffsetY = contentOffsetY;
-    _isContentOffsetYChanged = YES;
-}
-
-- (void)setPerspective:(CGFloat)perspective{
-    _perspective = perspective;
-    _isPerspectiveChanged = YES;
-    _isTransformChanged = YES;
-}
-
-- (void)setRotateX:(CGFloat)rotateX{
-    _rotateX = rotateX;
-    _isRotateXChanged = YES;
-    _isTransformChanged = YES;
-}
-
-- (void)setRotateY:(CGFloat)rotateY{
-    _rotateY = rotateY;
-    _isRotateYChanged = YES;
-    _isTransformChanged = YES;
-}
-
-- (void)setTransformOrigin:(NSString *)transformOrigin{
-    _transformOrigin = transformOrigin;
-    _isTransformOriginChanged = YES;
-}
-
-- (void)setBrTL:(CGFloat)brTL {
-    _brTL = brTL;
-    _isBRTLChanged = YES;
-}
-
-- (void)setBrTR:(CGFloat)brTR {
-    _brTR = brTR;
-    _isBRTRChanged = YES;
-}
-
-- (void)setBrBR:(CGFloat)brBR {
-    _brBR = brBR;
-    _isBRBRChanged = YES;
-}
-
-- (void)setBrBL:(CGFloat)brBL {
-    _brBL = brBL;
-    _isBRBLChanged = YES;
-}
-
-- (void)setBr:(CGFloat)br {
-    _br = br;
-    _isBRChanged = YES;
-}
-
-- (void)setMarginTop:(CGFloat)marginTop {
-    _marginTop = marginTop;
-    _isMarginTopChanged = YES;
-}
-
-- (void)setMarginRight:(CGFloat)marginRight {
-    _marginRight = marginRight;
-    _isMarginRightChanged = YES;
-}
-
-- (void)setMarginBottom:(CGFloat)marginBottom {
-    _marginBottom = marginBottom;
-    _isMarginBottomChanged = YES;
-}
-
-- (void)setMarginLeft:(CGFloat)marginLeft {
-    _marginLeft = marginLeft;
-    _isMarginLeftChanged = YES;
-}
-
-- (void)setPaddingTop:(CGFloat)paddingTop {
-    _paddingTop = paddingTop;
-    _isPaddingTopChanged = YES;
-}
-
-- (void)setPaddingRight:(CGFloat)paddingRight {
-    _paddingRight = paddingRight;
-    _isPaddingRightChanged = YES;
-}
-
-- (void)setPaddingBottom:(CGFloat)paddingBottom {
-    _paddingBottom = paddingBottom;
-    _isPaddingBottomChanged = YES;
-}
-
-- (void)setPaddingLeft:(CGFloat)paddingLeft {
-    _paddingLeft = paddingLeft;
-    _isPaddingLeftChanged = YES;
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScope.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScope.h
deleted file mode 100644
index a225a6a..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScope.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface EBExpressionScope : NSObject
-
-+ (NSMutableDictionary *)generalScope;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScope.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScope.m
deleted file mode 100644
index e7c3842..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScope.m
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionScope.h"
-#import "EBJSMath.h"
-#import "EBJSTransform.h"
-#import "EBJSEase.h"
-#import "EBJSEvaluate.h"
-#import <math.h>
-
-@implementation EBExpressionScope
-
-+ (NSMutableDictionary *)sharedScope {
-    static NSMutableDictionary *sharedScope = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        sharedScope = [[NSMutableDictionary alloc] init];
-        
-        [sharedScope setValue:@(M_PI) forKey:@"PI"];
-        [sharedScope setValue:@(M_E) forKey:@"E"];
-        
-        [sharedScope setValue:EBJSMath.sin forKey:@"sin"];
-        [sharedScope setValue:EBJSMath.cos forKey:@"cos"];
-        [sharedScope setValue:EBJSMath.tan forKey:@"tan"];
-        [sharedScope setValue:EBJSMath.asin forKey:@"asin"];
-        [sharedScope setValue:EBJSMath.acos forKey:@"acos"];
-        [sharedScope setValue:EBJSMath.atan forKey:@"atan"];
-        [sharedScope setValue:EBJSMath.atan2 forKey:@"atan2"];
-        
-        [sharedScope setValue:EBJSMath.max forKey:@"max"];
-        [sharedScope setValue:EBJSMath.min forKey:@"min"];
-        [sharedScope setValue:EBJSMath.abs forKey:@"abs"];
-        [sharedScope setValue:EBJSMath.sign forKey:@"sign"];
-        
-        [sharedScope setValue:EBJSMath.floor forKey:@"floor"];
-        [sharedScope setValue:EBJSMath.ceil forKey:@"ceil"];
-        [sharedScope setValue:EBJSMath.round forKey:@"round"];
-        
-        [sharedScope setValue:EBJSMath.pow forKey:@"pow"];
-        [sharedScope setValue:EBJSMath.exp forKey:@"exp"];
-        [sharedScope setValue:EBJSMath.log forKey:@"log"];
-        [sharedScope setValue:EBJSMath.sqrt forKey:@"sqrt"];
-        [sharedScope setValue:EBJSMath.cbrt forKey:@"cbrt"];
-
-        [sharedScope setValue:EBJSTransform.asArray forKey:@"asArray"];
-        [sharedScope setValue:EBJSTransform.asArray forKey:@"rgb"];
-        [sharedScope setValue:EBJSTransform.asArray forKey:@"rgba"];
-        [sharedScope setValue:EBJSTransform.translate forKey:@"translate"];
-        [sharedScope setValue:EBJSTransform.scale forKey:@"scale"];
-        [sharedScope setValue:EBJSTransform.matrix forKey:@"matrix"];
-        
-        [sharedScope setValue:EBJSEvaluate.evaluateColor forKey:@"evaluateColor"];
-        
-        [sharedScope setValue:EBJSEase.easeInQuad forKey:@"easeInQuad"];
-        [sharedScope setValue:EBJSEase.easeOutQuad forKey:@"easeOutQuad"];
-        [sharedScope setValue:EBJSEase.easeInOutQuad forKey:@"easeInOutQuad"];
-        [sharedScope setValue:EBJSEase.easeInCubic forKey:@"easeInCubic"];
-        [sharedScope setValue:EBJSEase.easeOutCubic forKey:@"easeOutCubic"];
-        [sharedScope setValue:EBJSEase.easeInOutCubic forKey:@"easeInOutCubic"];
-        [sharedScope setValue:EBJSEase.easeInQuart forKey:@"easeInQuart"];
-        [sharedScope setValue:EBJSEase.easeOutQuart forKey:@"easeOutQuart"];
-        [sharedScope setValue:EBJSEase.easeInOutQuart forKey:@"easeInOutQuart"];
-        [sharedScope setValue:EBJSEase.easeInQuint forKey:@"easeInQuint"];
-        [sharedScope setValue:EBJSEase.easeOutQuint forKey:@"easeOutQuint"];
-        [sharedScope setValue:EBJSEase.easeInOutQuint forKey:@"easeInOutQuint"];
-        [sharedScope setValue:EBJSEase.easeInSine forKey:@"easeInSine"];
-        [sharedScope setValue:EBJSEase.easeOutSine forKey:@"easeOutSine"];
-        [sharedScope setValue:EBJSEase.easeInOutSine forKey:@"easeInOutSine"];
-        [sharedScope setValue:EBJSEase.easeInExpo forKey:@"easeInExpo"];
-        [sharedScope setValue:EBJSEase.easeOutExpo forKey:@"easeOutExpo"];
-        [sharedScope setValue:EBJSEase.easeInOutExpo forKey:@"easeInOutExpo"];
-        [sharedScope setValue:EBJSEase.easeInCirc forKey:@"easeInCirc"];
-        [sharedScope setValue:EBJSEase.easeOutCirc forKey:@"easeOutCirc"];
-        [sharedScope setValue:EBJSEase.easeInOutCirc forKey:@"easeInOutCirc"];
-        [sharedScope setValue:EBJSEase.easeInElastic forKey:@"easeInElastic"];
-        [sharedScope setValue:EBJSEase.easeOutElastic forKey:@"easeOutElastic"];
-        [sharedScope setValue:EBJSEase.easeInOutElastic forKey:@"easeInOutElastic"];
-        [sharedScope setValue:EBJSEase.easeInBack forKey:@"easeInBack"];
-        [sharedScope setValue:EBJSEase.easeOutBack forKey:@"easeOutBack"];
-        [sharedScope setValue:EBJSEase.easeInOutBack forKey:@"easeInOutBack"];
-        [sharedScope setValue:EBJSEase.easeInBounce forKey:@"easeInBounce"];
-        [sharedScope setValue:EBJSEase.easeOutBounce forKey:@"easeOutBounce"];
-        [sharedScope setValue:EBJSEase.easeInOutBounce forKey:@"easeInOutBounce"];
-        [sharedScope setValue:EBJSEase.linear forKey:@"linear"];
-        [sharedScope setValue:EBJSEase.cubicBezier forKey:@"cubicBezier"];
-    });
-    
-    return sharedScope;
-}
-
-+ (NSMutableDictionary *)generalScope {
-    return [[EBExpressionScope sharedScope] mutableCopy];
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScroller.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScroller.h
deleted file mode 100644
index 69e750b..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScroller.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionHandler.h"
-
-@interface EBExpressionScroller : EBExpressionHandler
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScroller.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScroller.m
deleted file mode 100644
index 2ccce58..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionScroller.m
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionScroller.h"
-#import "EBExpressionScope.h"
-#import "EBExpression.h"
-#import "EBExpressionExecutor.h"
-#import "EBUtility.h"
-
-@interface EBExpressionScroller () <UIScrollViewDelegate>
-
-@property (nonatomic, assign) CGPoint lastOffset;
-@property (nonatomic, assign) CGPoint lastDOffset;
-@property (nonatomic, assign) CGPoint turnOffset;
-@property (nonatomic, assign) BOOL turnChange;
-
-@end
-
-@implementation EBExpressionScroller
-
-- (void)updateTargetExpression:(NSMapTable<id,NSDictionary *> *)expressionMap
-                       options:(NSDictionary *)options
-                exitExpression:(NSDictionary *)exitExpression
-                      callback:(EBKeepAliveCallback)callback {
-    [super updateTargetExpression:expressionMap
-                          options:options
-                   exitExpression:exitExpression
-                         callback:callback];
-    
-    [self initScroller];
-}
-
-- (void)initScroller {
-    [EBUtility addScrollDelegate:self source:self.source];
-}
-
-- (void)removeExpressionBinding {
-    [super removeExpressionBinding];
-    
-    [EBUtility removeScrollDelegate:self source:self.source];
-    
-    if ([NSThread isMainThread]) {
-        [self fireStateChangedEvent:@"end"];
-    }
-}
-
-#pragma mark - UIScrollViewDelegate
-- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
-    @try {
-        _turnChange = false;
-        NSDictionary *scope = [self setUpScope:scrollView];
-        
-        if (self.turnChange) {
-            [self fireTurnEvent:scope];
-        }
-        BOOL exit = ![self executeExpression:scope];
-        if (exit) {
-            [self fireStateChangedEvent:@"exit"];
-            return;
-        }
-    } @catch (NSException *exception) {
-        NSLog(@"%@",exception);
-    }
-}
-
-- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
-    [self fireStateChangedEvent:@"start"];
-}
-
-- (NSDictionary *)setUpScope:(UIScrollView *)sender {
-    NSMutableDictionary *scope = [self generalScope];
-    CGFloat factor = [EBUtility factor];
-    
-    CGPoint offset = sender.contentOffset;
-    CGPoint dOffset = CGPointMake(offset.x - _lastOffset.x, offset.y - _lastOffset.y);
-    
-    if ( (dOffset.x>0 && _lastDOffset.x<0) || (dOffset.x<0 && _lastDOffset.x>0) ) {
-        _turnOffset.x = _lastOffset.x;
-        _turnChange = true;
-    }
-    if ( (dOffset.y>0 && _lastDOffset.y<0) || (dOffset.y<0 && _lastDOffset.y>0) ) {
-        _turnOffset.y = _lastOffset.y;
-        _turnChange = true;
-    }
-    
-    [scope setValue:@(offset.x / factor) forKey:@"x"];
-    [scope setValue:@(offset.y / factor) forKey:@"y"];
-    [scope setValue:@(dOffset.x / factor) forKey:@"dx"];
-    [scope setValue:@(dOffset.y / factor) forKey:@"dy"];
-    [scope setValue:@((offset.x - _turnOffset.x) / factor) forKey:@"tdx"];
-    [scope setValue:@((offset.y - _turnOffset.y) / factor) forKey:@"tdy"];
-    _lastOffset = offset;
-    _lastDOffset = dOffset;
-    
-    return [scope copy];
-}
-
-- (void)fireStateChangedEvent:(NSString *)state {
-    CGFloat factor = [EBUtility factor];
-    NSDictionary *result = @{@"x": @(_lastOffset.x / factor),
-                             @"y": @(_lastOffset.y / factor),
-                             @"state": state};
-    
-    if (self.callback) {
-        self.callback(self.source, result, YES);
-    }
-}
-
-- (void)fireTurnEvent:(NSDictionary* )scope {
-    NSDictionary *result = @{
-                             @"x": scope[@"x"],
-                             @"y": scope[@"y"],
-                             @"dx": scope[@"dx"],
-                             @"dy": scope[@"dy"],
-                             @"tdx": scope[@"tdx"],
-                             @"tdy": scope[@"tdy"],
-                             @"state": @"turn"
-                             };
-    if (self.callback) {
-        self.callback(self.source, result, YES);
-    }
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionTiming.h b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionTiming.h
deleted file mode 100644
index d0d4569..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionTiming.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionHandler.h"
-
-@interface EBExpressionTiming : EBExpressionHandler
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionTiming.m b/ios/Pods/BindingX/core/ios/BindingX/EBExpressionTiming.m
deleted file mode 100644
index 7e8fa98..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBExpressionTiming.m
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBExpressionTiming.h"
-#import <UIKit/UIKit.h>
-
-@interface EBExpressionTiming ()
-
-@property (nonatomic, strong) CADisplayLink *displayLink;
-@property (nonatomic, assign) CFTimeInterval duration;
-
-@end
-
-@implementation EBExpressionTiming
-
-- (instancetype)init {
-    if (self = [super init]) {
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:)
-                                                     name:UIApplicationWillResignActiveNotification object:nil];
-        
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:)
-                                                     name:UIApplicationDidBecomeActiveNotification object:nil];
-    }
-    return self;
-}
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-+ (BOOL)requireSource {
-    return NO;
-}
-
-- (void)updateTargetExpression:(NSMapTable<id,NSDictionary *> *)targetExpression
-         options:(NSDictionary *)options
-       exitExpression:(NSDictionary *)exitExpression
-             callback:(EBKeepAliveCallback)callback {
-    [super updateTargetExpression:targetExpression
-            options:options
-          exitExpression:exitExpression
-                callback:callback];
-    
-    [self initDisplayLink];
-}
-
-- (void)applicationWillResignActive:(NSNotification *)notification
-{
-    [self.displayLink setPaused:YES];
-}
-
-- (void)applicationDidBecomeActive:(NSNotification *)notification
-{
-    [self.displayLink setPaused:NO];
-}
-
-- (void)removeExpressionBinding {
-    [super removeExpressionBinding];
-    
-    if (self.displayLink) {
-        [self.displayLink invalidate];
-        self.displayLink = nil;
-    }
-}
-
-#pragma mark - Private methods
-- (void)initDisplayLink {
-    self.duration = 0;
-    
-    self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleDisplay)];
-    [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
-    [self.displayLink setPaused:NO];
-    
-    [self fireStateChangedEvent:@"start"];
-}
-
-- (void)handleDisplay {
-    @try {
-        NSDictionary *scope = [self setUpScope];
-        BOOL exit = ![self executeExpression:scope];
-        if (exit) {
-            [self.displayLink invalidate];
-            self.displayLink = nil;
-            [self fireStateChangedEvent:@"exit"];
-        }
-    } @catch (NSException *exception) {
-        NSLog(@"%@",exception);
-    }
-}
-
-- (NSDictionary *)setUpScope {
-    NSMutableDictionary *scope = [self generalScope];
-    
-    self.duration += (self.displayLink.duration * 1000);
-    [scope setValue:@(self.duration) forKey:@"t"];
-    
-    return [scope copy];
-}
-
-- (void)fireStateChangedEvent:(NSString *)state {
-    NSDictionary *result = @{@"t": @(_duration),
-                             @"state": state};
-    
-    if (self.callback) {
-        self.callback(self.source, result, YES);
-    }
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroEuler.h b/ios/Pods/BindingX/core/ios/BindingX/EBGyroEuler.h
deleted file mode 100644
index 5a01e51..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroEuler.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <UIKit/UIKit.h>
-
-@interface EBGyroEuler: NSObject
-
-@property(nonatomic,assign) double x;
-@property(nonatomic,assign) double y;
-@property(nonatomic,assign) double z;
-@property(nonatomic,copy) NSString *order;
-
-+ (instancetype)eulerWithX:(double)x y:(double)y z:(double)z order:(NSString *)order;
-
-- (void)setValueWithX:(double)x y:(double)y z:(double)z order:(NSString *)order;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroEuler.m b/ios/Pods/BindingX/core/ios/BindingX/EBGyroEuler.m
deleted file mode 100644
index 3f2844a..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroEuler.m
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBGyroEuler.h"
-
-#define ROTATION_ORDERS (@[@"XYZ",@"YZX",@"ZXY",@"XZY",@"YXZ",@"ZYX"])
-#define DEFAULT_ORDER @"XYZ"
-
-@implementation EBGyroEuler
-
-+ (instancetype)eulerWithX:(double)x y:(double)y z:(double)z order:(NSString *)order {
-    EBGyroEuler *euler = [[EBGyroEuler alloc] initWithX:x y:y z:z order:order];
-    return euler;
-}
-
-- (instancetype)initWithX:(double)x y:(double)y z:(double)z order:(NSString *)order{
-    if (self = [self init]) {
-        [self setValueWithX:x y:y z:z order:order];
-    }
-    return self;
-}
-
-- (void)setValueWithX:(double)x y:(double)y z:(double)z order:(NSString *)order {
-    self.x = x;
-    self.y = y;
-    self.z = z;
-    self.order = [ROTATION_ORDERS containsObject:order] ? order : DEFAULT_ORDER;
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroManager.h b/ios/Pods/BindingX/core/ios/BindingX/EBGyroManager.h
deleted file mode 100644
index 4ba2dd4..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroManager.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol EBGyroWatcherProtocol
-
-- (BOOL)orientaionChanged:(double)alpha beta:(double)beta gamma:(double)gamma;
-
-@end
-
-@interface EBGyroManager : NSObject
-
-+ (void)watchOrientation:(id<EBGyroWatcherProtocol>)watcher ;
-
-+ (void)removeOrientation:(id<EBGyroWatcherProtocol>)watcher;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroManager.m b/ios/Pods/BindingX/core/ios/BindingX/EBGyroManager.m
deleted file mode 100644
index e4ee2ec..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroManager.m
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-
-#import "EBGyroManager.h"
-#import <CoreMotion/CoreMotion.h>
-#import "EBUtility.h"
-
-#define GYRO_UPDATE_INTERVAL 1/60
-#define rad2deg(rad) ((rad) * 180 / M_PI)
-
-@interface EBGyroManager ()
-
-@property(nonatomic, strong) CMMotionManager *motionManager;
-@property(nonatomic, strong) NSMutableArray<id<EBGyroWatcherProtocol>> *watchers;
-
-@end
-
-@implementation EBGyroManager
-
-+ (void)watchOrientation:(id<EBGyroWatcherProtocol>)watcher {
-    [[EBGyroManager sharedInstance] watchOrientation:watcher];
-}
-
-+ (void)removeOrientation:(id<EBGyroWatcherProtocol>)watcher {
-    [[EBGyroManager sharedInstance] removeOrientation:watcher];
-}
-
-+ (instancetype)sharedInstance {
-    static EBGyroManager *instance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        instance = [EBGyroManager new];
-    });
-    return instance;
-}
-
-- (instancetype)init {
-    if (self = [super init]) {
-        _watchers = [NSMutableArray new];
-    }
-    return self;
-}
-
-- (void)startMotionManager {
-    if (!_motionManager) {
-        _motionManager = [CMMotionManager new];
-        _motionManager.gyroUpdateInterval = GYRO_UPDATE_INTERVAL;
-        [_motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue new]
-                                            withHandler:
-         ^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error) {
-             if (error) {
-                 return;
-             }
-             
-             // Acceleration is user + gravity
-             CMAcceleration userAccel = motion.userAcceleration;
-             CMAcceleration gravity = motion.gravity;
-             CMAcceleration totalAccel;
-             totalAccel.x = userAccel.x + gravity.x;
-             totalAccel.y = userAccel.y + gravity.y;
-             totalAccel.z = userAccel.z + gravity.z;
-             
-             
-             CMAttitude* attitude = motion.attitude;
-             
-             // Compose the raw motion data to an intermediate ZXY-based 3x3 rotation
-             // matrix (R) where [z=attitude.yaw, x=attitude.pitch, y=attitude.roll]
-             // in the form:
-             //
-             //   /  R[0]   R[1]   R[2]  \
-             //   |  R[3]   R[4]   R[5]  |
-             //   \  R[6]   R[7]   R[8]  /
-             
-             double cX = cos(attitude.pitch);
-             double cY = cos(attitude.roll);
-             double cZ = cos(attitude.yaw);
-             double sX = sin(attitude.pitch);
-             double sY = sin(attitude.roll);
-             double sZ = sin(attitude.yaw);
-             
-             double R[] = {
-                 cZ * cY - sZ * sX * sY,
-                 - cX * sZ,
-                 cY * sZ * sX + cZ * sY,
-                 cY * sZ + cZ * sX * sY,
-                 cZ * cX,
-                 sZ * sY - cZ * cY * sX,
-                 - cX * sY,
-                 sX,
-                 cX * cY
-             };
-             
-             // Compute correct, normalized values for DeviceOrientation from
-             // rotation matrix (R) according to the angle conventions defined in the
-             // W3C DeviceOrientation specification.
-             
-             double zRot;
-             double xRot;
-             double yRot;
-             
-             if (R[8] > 0) {
-                 zRot = atan2(-R[1], R[4]);
-                 xRot = asin(R[7]);
-                 yRot = atan2(-R[6], R[8]);
-             } else if (R[8] < 0) {
-                 zRot = atan2(R[1], -R[4]);
-                 xRot = -asin(R[7]);
-                 xRot += (xRot >= 0) ? -M_PI : M_PI;
-                 yRot = atan2(R[6], -R[8]);
-             } else {
-                 if (R[6] > 0) {
-                     zRot = atan2(-R[1], R[4]);
-                     xRot = asin(R[7]);
-                     yRot = -M_PI_2;
-                 } else if (R[6] < 0) {
-                     zRot = atan2(R[1], -R[4]);
-                     xRot = -asin(R[7]);
-                     xRot += (xRot >= 0) ? -M_PI : M_PI;
-                     yRot = -M_PI_2;
-                 } else {
-                     zRot = atan2(R[3], R[0]);
-                     xRot = (R[7] > 0) ? M_PI_2 : -M_PI_2;
-                     yRot = 0;
-                 }
-             }
-             
-             // Rotation around the Z axis (pointing up. normalized to [0, 360] deg).
-             double alpha = rad2deg(zRot > 0 ? zRot : (M_PI * 2 + zRot));
-             // Rotation around the X axis (top to bottom).
-             double beta  = rad2deg(xRot);
-             // Rotation around the Y axis (side to side).
-             double gamma = rad2deg(yRot);
-             
-             __weak typeof(self) welf = self;
-             [EBUtility performBlockOnMainThread:^{
-                 NSArray *watchers = [welf.watchers copy];
-                 for (id<EBGyroWatcherProtocol> watcher in watchers) {
-                     [watcher orientaionChanged:alpha beta:beta gamma:gamma];
-                 }
-             }];
-         }];
-    }
-}
-
-- (void)watchOrientation:(id<EBGyroWatcherProtocol>)watcher {
-    [EBUtility performBlockOnMainThread:^{
-        [_watchers addObject:watcher];
-        [self startMotionManager];
-    }];
-}
-
-- (void)removeOrientation:(id<EBGyroWatcherProtocol>)watcher {
-    [EBUtility performBlockOnMainThread:^{
-        [_watchers removeObject:watcher];
-        if (_watchers.count == 0) {
-            [_motionManager stopDeviceMotionUpdates];
-            _motionManager = nil;
-        }
-    }];
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroOrientationEvaluator.h b/ios/Pods/BindingX/core/ios/BindingX/EBGyroOrientationEvaluator.h
deleted file mode 100644
index d048c31..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroOrientationEvaluator.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBGyroQuaternion.h"
-
-@interface EBGyroOrientationEvaluator: NSObject
-
-- (instancetype)initWithConstraintAlpha:(NSNumber *)constraintAlpha constraintBeta:(NSNumber *)constraintBeta constraintGamma:(NSNumber *)constraintGamma;
-
-
-- (EBGyroQuaternion *)calculateWithDeviceAlpha:(double)deviceAlpha deviceBeta:(double)deviceBeta  deviceGamma:(double)deviceGamma;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroOrientationEvaluator.m b/ios/Pods/BindingX/core/ios/BindingX/EBGyroOrientationEvaluator.m
deleted file mode 100644
index 12b0006..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroOrientationEvaluator.m
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBGyroOrientationEvaluator.h"
-#import "EBGyroVector3.h"
-#import "EBGyroEuler.h"
-
-@interface EBGyroOrientationEvaluator()
-
-@property (nonatomic, assign) BOOL enabled;
-@property (nonatomic, assign) int screenOrientation;
-
-@property (nonatomic, strong) NSNumber * constraintAlpha;
-@property (nonatomic, strong) NSNumber * constraintBeta;
-@property (nonatomic, strong) NSNumber * constraintGamma;
-
-@property (nonatomic, assign) double constraintAlphaOffset;
-@property (nonatomic, assign) double constraintBetaOffset;
-@property (nonatomic, assign) double constraintGammaOffset;
-
-@property (nonatomic, strong) EBGyroQuaternion *quaternion;
-@property (nonatomic, strong) EBGyroQuaternion *q0;
-@property (nonatomic, strong) EBGyroQuaternion *q1;
-@property (nonatomic, strong) EBGyroVector3 *zee;
-@property (nonatomic, strong) EBGyroEuler *euler;
-
-@end
-
-
-@implementation EBGyroOrientationEvaluator
-
-- (instancetype)initWithConstraintAlpha:(NSNumber *)constraintAlpha constraintBeta:(NSNumber *)constraintBeta constraintGamma:(NSNumber *)constraintGamma {
-    if (self = [self init]) {
-        self.constraintAlpha = constraintAlpha;
-        self.constraintBeta = constraintBeta;
-        self.constraintGamma = constraintGamma;
-        self.quaternion = [EBGyroQuaternion quaternionWithX:0 y:0 z:0 w:1];
-        self.zee = [EBGyroVector3 vectorWithX:0 y:0 z:1];
-        self.q0 = [EBGyroQuaternion quaternionWithX:0 y:0 z:0 w:0];
-        self.q1 = [EBGyroQuaternion quaternionWithX:sqrt(0.5) y:0 z:0 w:sqrt(0.5)];
-        self.euler = [EBGyroEuler new];
-    }
-    return self;
-}
-
-- (EBGyroQuaternion *)calculateWithDeviceAlpha:(double)deviceAlpha deviceBeta:(double)deviceBeta  deviceGamma:(double)deviceGamma {
-    double alpha = _constraintAlpha != nil ? [_constraintAlpha doubleValue] : (deviceAlpha + _constraintAlphaOffset);// Z
-    double beta = _constraintBeta != nil ? [_constraintBeta doubleValue] : (deviceBeta + _constraintBetaOffset);// X
-    double gamma = _constraintGamma != nil ? [_constraintGamma doubleValue] : (deviceGamma + _constraintGammaOffset);// Y
-    
-    // TODO 设备方向写死为0 纵向
-    [self.euler setValueWithX:beta/180.0*M_PI y:alpha/180.0*M_PI z:-gamma/180.0*M_PI order:@"YXZ"];
-    [_quaternion setFromEuler:self.euler];
-    [_quaternion multiply:_q1 p:nil];
-    [_quaternion multiply:[_q0 setFromAxisAngle:_zee angle:0] p:nil];
-    
-    return _quaternion;
-}
-
-@end
-
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroQuaternion.h b/ios/Pods/BindingX/core/ios/BindingX/EBGyroQuaternion.h
deleted file mode 100644
index bb61ffb..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroQuaternion.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <CoreMotion/CoreMotion.h>
-#import "EBGyroVector3.h"
-#import "EBGyroEuler.h"
-
-@interface EBGyroQuaternion: NSObject
-
-@property(nonatomic,assign) double x;
-@property(nonatomic,assign) double y;
-@property(nonatomic,assign) double z;
-@property(nonatomic,assign) double w;
-
-+ (instancetype)quaternionWithX:(double)x y:(double)y z:(double)z w:(double)w;
-
-- (instancetype)setFromAxisAngle:(EBGyroVector3 *)axis angle:(double)angle;
-- (instancetype)setFromEuler:(EBGyroEuler *)euler;
-- (instancetype)multiply:(EBGyroQuaternion *)q p:(EBGyroQuaternion *)p;
-- (instancetype)multiplyQuaternions:(EBGyroQuaternion *)a b:(EBGyroQuaternion *)b;
-
-@end
-
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroQuaternion.m b/ios/Pods/BindingX/core/ios/BindingX/EBGyroQuaternion.m
deleted file mode 100644
index bdafee0..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroQuaternion.m
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBGyroQuaternion.h"
-#import "EBGyroVector3.h"
-
-@implementation EBGyroQuaternion
-
-+ (instancetype)quaternionWithX:(double)x y:(double)y z:(double)z w:(double)w {
-    EBGyroQuaternion *quaternion = [[EBGyroQuaternion alloc] initWithWithX:x y:y z:z w:w];
-    return quaternion;
-}
-
-- (instancetype)initWithWithX:(double)x y:(double)y z:(double)z w:(double)w {
-    if (self = [self init]) {
-        self.x = x;
-        self.y = y;
-        self.z = z;
-        self.w = w;
-    }
-    return self;
-}
-
-- (instancetype)setFromEuler:(EBGyroEuler *)euler {
-    if(euler == nil) {
-        return nil;
-    }
-    
-    double c1 = cos(euler.x / 2);
-    double c2 = cos(euler.y / 2);
-    double c3 = cos(euler.z / 2);
-    double s1 = sin(euler.x / 2);
-    double s2 = sin(euler.y / 2);
-    double s3 = sin(euler.z / 2);
-    
-    NSString* order = euler.order;
-    
-    if ([order isEqualToString:@"XYZ"]) {
-        
-        self.x = s1 * c2 * c3 + c1 * s2 * s3;
-        self.y = c1 * s2 * c3 - s1 * c2 * s3;
-        self.z = c1 * c2 * s3 + s1 * s2 * c3;
-        self.w = c1 * c2 * c3 - s1 * s2 * s3;
-        
-    } else if ([order isEqualToString:@"YXZ"]) {
-        
-        self.x = s1 * c2 * c3 + c1 * s2 * s3;
-        self.y = c1 * s2 * c3 - s1 * c2 * s3;
-        self.z = c1 * c2 * s3 - s1 * s2 * c3;
-        self.w = c1 * c2 * c3 + s1 * s2 * s3;
-        
-    } else if ([order isEqualToString:@"ZXY"]) {
-        
-        self.x = s1 * c2 * c3 - c1 * s2 * s3;
-        self.y = c1 * s2 * c3 + s1 * c2 * s3;
-        self.z = c1 * c2 * s3 + s1 * s2 * c3;
-        self.w = c1 * c2 * c3 - s1 * s2 * s3;
-        
-    } else if ([order isEqualToString:@"ZYX"]) {
-        
-        self.x = s1 * c2 * c3 - c1 * s2 * s3;
-        self.y = c1 * s2 * c3 + s1 * c2 * s3;
-        self.z = c1 * c2 * s3 - s1 * s2 * c3;
-        self.w = c1 * c2 * c3 + s1 * s2 * s3;
-        
-    } else if ([order isEqualToString:@"YZX"]) {
-        
-        self.x = s1 * c2 * c3 + c1 * s2 * s3;
-        self.y = c1 * s2 * c3 + s1 * c2 * s3;
-        self.z = c1 * c2 * s3 - s1 * s2 * c3;
-        self.w = c1 * c2 * c3 - s1 * s2 * s3;
-        
-    } else if ([order isEqualToString:@"XZY"]) {
-        
-        self.x = s1 * c2 * c3 - c1 * s2 * s3;
-        self.y = c1 * s2 * c3 - s1 * c2 * s3;
-        self.z = c1 * c2 * s3 + s1 * s2 * c3;
-        self.w = c1 * c2 * c3 + s1 * s2 * s3;
-        
-    }
-    
-    return self;
-}
-
-- (instancetype)setFromAxisAngle:(EBGyroVector3 *)axis angle:(double)angle {
-    double halfAngle = angle / 2;
-    double s = sin(halfAngle);
-    
-    self.x = axis.x * s;
-    self.y = axis.y * s;
-    self.z = axis.z * s;
-    self.w = cos(halfAngle);
-    return self;
-}
-
-- (instancetype)multiply:(EBGyroQuaternion *)q p:(EBGyroQuaternion *)p {
-    if(p != nil) {
-        return [self multiplyQuaternions:q b:p];
-    }
-    return [self multiplyQuaternions:self b:q];
-}
-
-- (instancetype)multiplyQuaternions:(EBGyroQuaternion *)a b:(EBGyroQuaternion *)b {
-    
-    double qax = a.x, qay = a.y, qaz = a.z, qaw = a.w;
-    double qbx = b.x, qby = b.y, qbz = b.z, qbw = b.w;
-    
-    self.x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;
-    self.y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;
-    self.z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;
-    self.w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;
-    return self;
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroVector3.h b/ios/Pods/BindingX/core/ios/BindingX/EBGyroVector3.h
deleted file mode 100644
index 68c4656..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroVector3.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-#import <UIKit/UIKit.h>
-
-@interface EBGyroVector3: NSObject
-
-@property(nonatomic,assign) double x;
-@property(nonatomic,assign) double y;
-@property(nonatomic,assign) double z;
-
-+ (instancetype)vectorWithX:(double)x y:(double)y z:(double)z;
-
-- (instancetype)applyQuaternionW:(double)qw x:(double)qx y:(double)qy z:(double)qz;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBGyroVector3.m b/ios/Pods/BindingX/core/ios/BindingX/EBGyroVector3.m
deleted file mode 100644
index e10928c..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBGyroVector3.m
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBGyroVector3.h"
-
-@implementation EBGyroVector3
-
-+ (instancetype)vectorWithX:(double)x y:(double)y z:(double)z {
-    EBGyroVector3 *vector3 = [[EBGyroVector3 alloc] initWithX:x y:y z:z];
-    return vector3;
-}
-
-- (instancetype)initWithX:(double)x y:(double)y z:(double)z {
-    if (self = [self init]) {
-        self.x = x;
-        self.y = y;
-        self.z = z;
-    }
-    return self;
-}
-
-- (instancetype)applyQuaternionW:(double)qw x:(double)qx y:(double)qy z:(double)qz {
-    double x = self.x, y = self.y, z = self.z;
-    
-    // calculate quat * vector
-    
-    double ix = qw * x + qy * z - qz * y;
-    double iy = qw * y + qz * x - qx * z;
-    double iz = qw * z + qx * y - qy * x;
-    double iw = -qx * x - qy * y - qz * z;
-    
-    // calculate result * inverse quat
-    
-    self.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;
-    self.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;
-    self.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;
-    
-    return  self;
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBHandlerFactory.h b/ios/Pods/BindingX/core/ios/BindingX/EBHandlerFactory.h
deleted file mode 100644
index b76076a..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBHandlerFactory.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol EBHandlerProtocol <NSObject>
-
-- (void)execute:(NSDictionary *)properties to:(id)target;
-
-@optional
-- (NSDictionary *)customScope;
-
-@end
-
-@interface EBHandlerFactory : NSObject
-
-+ (NSArray<id<EBHandlerProtocol>>*)handlers;
-
-+ (void)addHandler:(id<EBHandlerProtocol>)handler;
-
-+ (void)removeHandler:(id<EBHandlerProtocol>)handler;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBHandlerFactory.m b/ios/Pods/BindingX/core/ios/BindingX/EBHandlerFactory.m
deleted file mode 100644
index a7a12ef..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBHandlerFactory.m
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBHandlerFactory.h"
-
-@interface EBHandlerFactory ()
-
-@property(nonatomic, strong) NSMutableArray<id<EBHandlerProtocol>>* handlers;
-
-@end
-
-@implementation EBHandlerFactory
-
-+ (instancetype)sharedInstance {
-    static EBHandlerFactory* _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-        _sharedInstance.handlers = [[NSMutableArray alloc] init];
-    });
-    return _sharedInstance;
-}
-
-+ (NSArray<id<EBHandlerProtocol>> *)handlers {
-    return [[EBHandlerFactory sharedInstance].handlers copy];
-}
-
-+ (void)addHandler:(id<EBHandlerProtocol>)handler {
-    [[EBHandlerFactory sharedInstance].handlers addObject:handler];
-}
-
-+ (void)removeHandler:(id<EBHandlerProtocol>)handler {
-    [[EBHandlerFactory sharedInstance].handlers removeObject:handler];
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBJSEase.h b/ios/Pods/BindingX/core/ios/BindingX/EBJSEase.h
deleted file mode 100644
index 101836c..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBJSEase.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBNativeFunction.h"
-
-@interface EBJSEase: NSObject
-
-+ (EBNativeFunction *)easeInQuad;
-+ (EBNativeFunction *)easeOutQuad;
-+ (EBNativeFunction *)easeInOutQuad;
-+ (EBNativeFunction *)easeInCubic;
-+ (EBNativeFunction *)easeOutCubic;
-+ (EBNativeFunction *)easeInOutCubic;
-+ (EBNativeFunction *)easeInQuart;
-+ (EBNativeFunction *)easeOutQuart;
-+ (EBNativeFunction *)easeInOutQuart;
-+ (EBNativeFunction *)easeInQuint;
-+ (EBNativeFunction *)easeOutQuint;
-+ (EBNativeFunction *)easeInOutQuint;
-+ (EBNativeFunction *)easeInSine;
-+ (EBNativeFunction *)easeOutSine;
-+ (EBNativeFunction *)easeInOutSine;
-+ (EBNativeFunction *)easeInExpo;
-+ (EBNativeFunction *)easeOutExpo;
-+ (EBNativeFunction *)easeInOutExpo;
-+ (EBNativeFunction *)easeInCirc;
-+ (EBNativeFunction *)easeOutCirc;
-+ (EBNativeFunction *)easeInOutCirc;
-+ (EBNativeFunction *)easeInElastic;
-+ (EBNativeFunction *)easeOutElastic;
-+ (EBNativeFunction *)easeInOutElastic;
-+ (EBNativeFunction *)easeInBack;
-+ (EBNativeFunction *)easeOutBack;
-+ (EBNativeFunction *)easeInOutBack;
-+ (EBNativeFunction *)easeInBounce;
-+ (EBNativeFunction *)easeOutBounce;
-+ (EBNativeFunction *)easeInOutBounce;
-+ (EBNativeFunction *)linear;
-+ (EBNativeFunction *)cubicBezier;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBJSEase.m b/ios/Pods/BindingX/core/ios/BindingX/EBJSEase.m
deleted file mode 100644
index 2536ddd..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBJSEase.m
+++ /dev/null
@@ -1,292 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBJSEase.h"
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunsequenced"
-
-double easeInQuad(double t,double b,double c,double d) {
-    return c*(t/=d)*t + b;
-}
-
-double easeOutQuad(double t,double b,double c,double d) {
-    return -c *(t/=d)*(t-2) + b;
-}
-
-double easeInOutQuad(double t,double b,double c,double d) {
-    if ((t/=d/2) < 1) return c/2*t*t + b;
-    return -c/2 * ((--t)*(t-2) - 1) + b;
-}
-
-double easeInCubic(double t,double b,double c,double d) {
-    return c*(t/=d)*t*t + b;
-}
-
-double easeOutCubic(double t,double b,double c,double d) {
-    return c*((t=t/d-1)*t*t + 1) + b;
-}
-
-double easeInOutCubic(double t,double b,double c,double d) {
-    if ((t/=d/2) < 1) return c/2*t*t*t + b;
-    return c/2*((t-=2)*t*t + 2) + b;
-}
-
-double easeInQuart(double t,double b,double c,double d) {
-    return c*(t/=d)*t*t*t + b;
-}
-
-double easeOutQuart(double t,double b,double c,double d) {
-    return -c * ((t=t/d-1)*t*t*t - 1) + b;
-}
-
-double easeInOutQuart(double t,double b,double c,double d) {
-    if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
-    return -c/2 * ((t-=2)*t*t*t - 2) + b;
-}
-
-double easeInQuint(double t,double b,double c,double d) {
-    return c*(t/=d)*t*t*t*t + b;
-}
-
-double easeOutQuint(double t,double b,double c,double d) {
-    return c*((t=t/d-1)*t*t*t*t + 1) + b;
-}
-
-double easeInOutQuint(double t,double b,double c,double d) {
-    if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
-    return c/2*((t-=2)*t*t*t*t + 2) + b;
-}
-
-double easeInSine(double t,double b,double c,double d) {
-    return -c * cos(t/d * (M_PI/2)) + c + b;
-}
-
-double easeOutSine(double t,double b,double c,double d) {
-    return c * sin(t/d * (M_PI/2)) + b;
-}
-
-double easeInOutSine(double t,double b,double c,double d) {
-    return -c/2 * (cos(M_PI*t/d) - 1) + b;
-}
-
-double easeInExpo(double t,double b,double c,double d) {
-    return (t==0) ? b : c * pow(2, 10 * (t/d - 1)) + b;
-}
-
-double easeOutExpo(double t,double b,double c,double d) {
-    return (t==d) ? b+c : c * (-pow(2, -10 * t/d) + 1) + b;
-}
-
-double easeInOutExpo(double t,double b,double c,double d) {
-    if (t==0) return b;
-    if (t==d) return b+c;
-    if ((t/=d/2) < 1) return c/2 * pow(2, 10 * (t - 1)) + b;
-    return c/2 * (-pow(2, -10 * --t) + 2) + b;
-}
-
-double easeInCirc(double t,double b,double c,double d) {
-    return -c * (sqrt(1 - (t/=d)*t) - 1) + b;
-}
-
-double easeOutCirc(double t,double b,double c,double d) {
-    return c * sqrt(1 - (t=t/d-1)*t) + b;
-}
-
-double easeInOutCirc(double t,double b,double c,double d) {
-    if ((t/=d/2) < 1) return -c/2 * (sqrt(1 - t*t) - 1) + b;
-    return c/2 * (sqrt(1 - (t-=2)*t) + 1) + b;
-}
-
-double easeInElastic(double t,double b,double c,double d) {
-    double s=1.70158;double p=0;double a=c;
-    if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
-    if (a < fabs(c)) { a=c; s=p/4; }
-    else s = p/(2*M_PI) * asin (c/a);
-    return -(a*pow(2,10*(t-=1)) * sin( (t*d-s)*(2*M_PI)/p )) + b;
-}
-
-double easeOutElastic(double t,double b,double c,double d) {
-    double s=1.70158;double p=0;double a=c;
-    if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
-    if (a < fabs(c)) { a=c; s=p/4; }
-    else s = p/(2*M_PI) * asin (c/a);
-    return a*pow(2,-10*t) * sin( (t*d-s)*(2*M_PI)/p ) + c + b;
-}
-
-double easeInOutElastic(double t,double b,double c,double d) {
-    double s=1.70158;double p=0;double a=c;
-    if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
-    if (a < fabs(c)) { a=c; s=p/4; }
-    else s = p/(2*M_PI) * asin (c/a);
-    if (t < 1) return -.5*(a*pow(2,10*(t-=1)) * sin( (t*d-s)*(2*M_PI)/p )) + b;
-    return a*pow(2,-10*(t-=1)) * sin( (t*d-s)*(2*M_PI)/p )*.5 + c + b;
-}
-
-double easeInBack(double t,double b,double c,double d) {
-    double s = 1.70158;
-    return c*(t/=d)*t*((s+1)*t - s) + b;
-}
-
-double easeOutBack(double t,double b,double c,double d) {
-    double s = 1.70158;
-    return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
-}
-
-double easeInOutBack(double t,double b,double c,double d) {
-    double s = 1.70158;
-    if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
-    return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
-}
-
-double easeOutBounce(double t,double b,double c,double d) {
-    if ((t/=d) < (1/2.75)) {
-        return c*(7.5625*t*t) + b;
-    } else if (t < (2/2.75)) {
-        return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
-    } else if (t < (2.5/2.75)) {
-        return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
-    } else {
-        return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
-    }
-}
-
-double easeInBounce(double t,double b,double c,double d) {
-    return c - easeOutBounce(d-t, 0, c, d) + b;
-}
-
-double easeInOutBounce(double t,double b,double c,double d) {
-    if (t < d/2) return easeInBounce(t*2, 0, c, d) * .5 + b;
-    return easeOutBounce(t*2-d, 0, c, d) * .5 + c*.5 + b;
-}
-
-double linear(double t,double b,double c,double d) {
-    return c*t/d + b;
-}
-
-double curveX(double t,double x1,double x2){
-    double v = 1 - t;
-    return 3 * v * v * t * x1 + 3 * v * t * t * x2 + t * t * t;
-}
-
-double curveY(double t,double y1,double y2){
-    double v = 1 - t;
-    return 3 * v * v * t * y1 + 3 * v * t * t * y2 + t * t * t;
-}
-
-double derivativeCurveX (double t, double x1, double x2) {
-    double v = 1 - t;
-    return 3 * (2 * (t - 1) * t + v * v) * x1 + 3 * (-t * t * t + 2 * v * t) * x2;
-};
-
-double bezier(double x1,double y1,double x2,double y2,double epsilon,double t){
-    double x = t,t0, t1, t2, xx, d2, i;
-    
-    // First try a few iterations of Newton's method -- normally very fast.
-    for (t2 = x, i = 0; i < 8; i++) {
-        xx = curveX(t2,x1,x2) - x;
-        if (fabs(xx) < epsilon) return curveY(t2,y1,y2);
-        d2 = derivativeCurveX(t2,x1,x2);
-        if (fabs(d2) < 1e-6) break;
-        t2 = t2 - xx / d2;
-    }
-    t0 = 0;
-    t1 = 1;
-    t2 = x;
-    if (t2 < t0) return curveY(t0,y1,y2);
-    if (t2 > t1) return curveY(t1,y1,y2);
-    
-    // Fallback to the bisection method for reliability.
-    while (t0 < t1) {
-        xx = curveX(t2,x1,x2);
-        if (fabs(xx - x) < epsilon) return curveY(t2,y1,y2);
-        if (x > xx) t0 = t2;
-        else t1 = t2;
-        t2 = (t1 - t0) * .5 + t0;
-    }
-    // Failure
-    return curveY(t2,y1,y2);
-}
-
-
-#pragma clang diagnostic pop
-
-#define WX_EASE(expression) \
-return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){\
-double t = [arguments[0] doubleValue];\
-double b = [arguments[1] doubleValue];\
-double c = [arguments[2] doubleValue];\
-double d = [arguments[3] doubleValue];\
-t = MIN(t, d);\
-return [[NSNumber alloc] initWithDouble:expression(t,b,c,d)];\
-}];
-
-#define WX_EASE_NATIVEFUNCTION(expression) +(EBNativeFunction *)expression{WX_EASE(expression)}
-
-@implementation EBJSEase
-
-+(EBNativeFunction *)easeInQuad{WX_EASE(easeInQuad)}
-+(EBNativeFunction *)easeOutQuad{WX_EASE(easeOutQuad)}
-+(EBNativeFunction *)easeInOutQuad{WX_EASE(easeInOutQuad)}
-+(EBNativeFunction *)easeInCubic{WX_EASE(easeInCubic)}
-+(EBNativeFunction *)easeOutCubic{WX_EASE(easeOutCubic)}
-+(EBNativeFunction *)easeInOutCubic{WX_EASE(easeInOutCubic)}
-+(EBNativeFunction *)easeInQuart{WX_EASE(easeInQuart)}
-+(EBNativeFunction *)easeOutQuart{WX_EASE(easeOutQuart)}
-+(EBNativeFunction *)easeInOutQuart{WX_EASE(easeInOutQuart)}
-+(EBNativeFunction *)easeInQuint{WX_EASE(easeInQuint)}
-+(EBNativeFunction *)easeOutQuint{WX_EASE(easeOutQuint)}
-+(EBNativeFunction *)easeInOutQuint{WX_EASE(easeInOutQuint)}
-+(EBNativeFunction *)easeInSine{WX_EASE(easeInSine)}
-+(EBNativeFunction *)easeOutSine{WX_EASE(easeOutSine)}
-+(EBNativeFunction *)easeInOutSine{WX_EASE(easeInOutSine)}
-+(EBNativeFunction *)easeInExpo{WX_EASE(easeInExpo)}
-+(EBNativeFunction *)easeOutExpo{WX_EASE(easeOutExpo)}
-+(EBNativeFunction *)easeInOutExpo{WX_EASE(easeInOutExpo)}
-+(EBNativeFunction *)easeInCirc{WX_EASE(easeInCirc)}
-+(EBNativeFunction *)easeOutCirc{WX_EASE(easeOutCirc)}
-+(EBNativeFunction *)easeInOutCirc{WX_EASE(easeInOutCirc)}
-+(EBNativeFunction *)easeInElastic{WX_EASE(easeInElastic)}
-+(EBNativeFunction *)easeOutElastic{WX_EASE(easeOutElastic)}
-+(EBNativeFunction *)easeInOutElastic{WX_EASE(easeInOutElastic)}
-+(EBNativeFunction *)easeInBack{WX_EASE(easeInBack)}
-+(EBNativeFunction *)easeOutBack{WX_EASE(easeOutBack)}
-+(EBNativeFunction *)easeInOutBack{WX_EASE(easeInOutBack)}
-+(EBNativeFunction *)easeInBounce{WX_EASE(easeInBounce)}
-+(EBNativeFunction *)easeOutBounce{WX_EASE(easeOutBounce)}
-+(EBNativeFunction *)easeInOutBounce{WX_EASE(easeInOutBounce)}
-+(EBNativeFunction *)linear{WX_EASE(linear)}
-+(EBNativeFunction *)cubicBezier
-{
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        double t = [arguments[0] doubleValue];
-        double b = [arguments[1] doubleValue];
-        double c = [arguments[2] doubleValue];
-        double d = [arguments[3] doubleValue];
-        double p0 = [arguments[4] doubleValue];
-        double p1 = [arguments[5] doubleValue];
-        double p2 = [arguments[6] doubleValue];
-        double p3 = [arguments[7] doubleValue];
-        t = MIN(t, d);
-        t = t/d;
-        double epsilon = (1000 / 60 / d) / 4;
-        double result = b + bezier(p0, p1, p2, p3, epsilon, t)*c;
-        return [[NSNumber alloc] initWithDouble:result];
-    }];
-}
-
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBJSEvaluate.h b/ios/Pods/BindingX/core/ios/BindingX/EBJSEvaluate.h
deleted file mode 100644
index 3180cc1..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBJSEvaluate.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBNativeFunction.h"
-
-@interface EBJSEvaluate: NSObject
-
-+ (EBNativeFunction *)evaluateColor;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBJSEvaluate.m b/ios/Pods/BindingX/core/ios/BindingX/EBJSEvaluate.m
deleted file mode 100644
index 1bd6aed..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBJSEvaluate.m
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBJSEvaluate.h"
-
-@implementation EBJSEvaluate
-
-+ (EBNativeFunction *)evaluateColor
-{
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        
-        if (!arguments || arguments.count < 3) {
-            return @[];
-        }
-        
-        NSString* startColor = [arguments[0] substringWithRange:NSMakeRange(2, 6)];
-        NSString* endColor = [arguments[1] substringWithRange:NSMakeRange(2, 6)];
-        double fraction = [arguments[2] doubleValue];
-        if (fraction < 0) {
-            fraction = 0;
-        } else if(fraction > 1) {
-            fraction = 1;
-        }
-        
-        unsigned rgbValue = 0;
-        [[NSScanner scannerWithString:[@"0x" stringByAppendingString:startColor]] scanHexInt:&rgbValue];
-        int sr = (rgbValue & 0xFF0000) >> 16;
-        int sg = (rgbValue & 0xFF00) >> 8;
-        int sb = rgbValue & 0xFF;
-        
-        
-        [[NSScanner scannerWithString:[@"0x" stringByAppendingString:endColor]] scanHexInt:&rgbValue];
-        int er = (rgbValue & 0xFF0000) >> 16;
-        int eg = (rgbValue & 0xFF00) >> 8;
-        int eb = rgbValue & 0xFF;
-        
-        NSNumber* mr = [NSNumber numberWithInt:((er - sr)*fraction + sr)];
-        NSNumber* mg = [NSNumber numberWithInt:((eg - sg)*fraction + sg)];
-        NSNumber* mb = [NSNumber numberWithInt:((eb - sb)*fraction + sb)];
-        
-        return @[mr,mg,mb];
-        
-    }];
-}
-
-
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBJSMath.h b/ios/Pods/BindingX/core/ios/BindingX/EBJSMath.h
deleted file mode 100644
index bef0feb..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBJSMath.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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 <math.h>
-#import "EBNativeFunction.h"
-
-@interface EBJSMath: NSObject
-
-+ (EBNativeFunction *)sin;
-+ (EBNativeFunction *)cos;
-+ (EBNativeFunction *)tan;
-+ (EBNativeFunction *)asin;
-+ (EBNativeFunction *)acos;
-+ (EBNativeFunction *)atan;
-+ (EBNativeFunction *)atan2;
-
-+ (EBNativeFunction *)pow;
-+ (EBNativeFunction *)exp;
-+ (EBNativeFunction *)log;
-+ (EBNativeFunction *)sqrt;
-+ (EBNativeFunction *)cbrt;
-
-+ (EBNativeFunction *)floor;
-+ (EBNativeFunction *)ceil;
-+ (EBNativeFunction *)round;
-
-+ (EBNativeFunction *)max;
-+ (EBNativeFunction *)min;
-+ (EBNativeFunction *)abs;
-+ (EBNativeFunction *)sign;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBJSMath.m b/ios/Pods/BindingX/core/ios/BindingX/EBJSMath.m
deleted file mode 100644
index 6254446..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBJSMath.m
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import "EBJSMath.h"
-
-
-@implementation EBJSMath : NSObject
-
-+ (EBNativeFunction *)sin {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:sin([arguments[0] doubleValue])];
-    }];
-}
-
-+ (EBNativeFunction *)cos {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        
-        return [[NSNumber alloc] initWithDouble:cos([arguments[0] doubleValue])];
-    }];
-}
-
-+ (EBNativeFunction *)tan {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:tan([arguments[0] doubleValue])];
-    }];
-}
-
-+ (EBNativeFunction *)asin {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:asin([arguments[0] doubleValue])];
-    }];
-}
-
-+ (EBNativeFunction *)acos {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        
-        return [[NSNumber alloc] initWithDouble:acos([arguments[0] doubleValue])];
-    }];
-}
-
-+ (EBNativeFunction *)atan {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:atan([arguments[0] doubleValue])];
-    }];
-}
-
-+ (EBNativeFunction *)atan2 {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:atan2([arguments[0] doubleValue], [arguments[1] doubleValue])];
-    }];
-}
-+ (EBNativeFunction *)pow {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:pow([arguments[0] doubleValue], [arguments[1] doubleValue])];
-    }];
-}
-+ (EBNativeFunction *)exp {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:exp([arguments[0] doubleValue])];
-    }];
-}
-+ (EBNativeFunction *)sqrt {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:sqrt([arguments[0] doubleValue])];
-    }];
-}
-+ (EBNativeFunction *)cbrt {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:cbrt([arguments[0] doubleValue])];
-    }];
-}
-+ (EBNativeFunction *)log {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:log([arguments[0] doubleValue])];
-    }];
-}
-/*
-+ (EBNativeFunction *)abs {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:abs([arguments[0] doubleValue])];
-    }];
-}
-*/
-+ (EBNativeFunction *)sign {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        double n = [arguments[0] doubleValue];
-        return [[NSNumber alloc] initWithDouble:(n < 0) ? -1 : (n > 0) ? +1 : 0];
-    }];
-}
-+ (EBNativeFunction *)ceil {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:ceil([arguments[0] doubleValue])];
-    }];
-}
-+ (EBNativeFunction *)floor {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:floor([arguments[0] doubleValue])];
-    }];
-}
-+ (EBNativeFunction *)round {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return [[NSNumber alloc] initWithDouble:round([arguments[0] doubleValue])];
-    }];
-}
-
-+ (EBNativeFunction *)max {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        if (arguments.count < 1) {
-            return @(0);
-        } else if (arguments.count < 2) {
-            return (NSNumber *)arguments[0];
-        } else {
-            return @(MAX([arguments[0] doubleValue], [arguments[1] doubleValue]));
-        }
-    }];
-}
-+ (EBNativeFunction *)min {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        if (arguments.count < 1) {
-            return @(0);
-        } else if (arguments.count < 2) {
-            return (NSNumber *)arguments[0];
-        } else {
-            return @(MIN([arguments[0] doubleValue], [arguments[1] doubleValue]));
-        }
-    }];
-}
-
-+ (EBNativeFunction *)abs {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        if (arguments.count < 1) {
-            return @(0);
-        } else {
-            return @(ABS([arguments[0] doubleValue]));
-        }
-    }];
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBJSTransform.h b/ios/Pods/BindingX/core/ios/BindingX/EBJSTransform.h
deleted file mode 100644
index e63da7a..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBJSTransform.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import "EBNativeFunction.h"
-
-@interface EBJSTransform : NSObject
-
-+ (EBNativeFunction *)translate;
-+ (EBNativeFunction *)scale;
-+ (EBNativeFunction *)matrix;
-+ (EBNativeFunction *)asArray;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBJSTransform.m b/ios/Pods/BindingX/core/ios/BindingX/EBJSTransform.m
deleted file mode 100644
index 0199814..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBJSTransform.m
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBJSTransform.h"
-
-@implementation EBJSTransform
-
-+ (EBNativeFunction *)translate {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return arguments;
-    }];
-}
-
-+ (EBNativeFunction *)scale {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return arguments;
-    }];
-}
-
-+ (EBNativeFunction *)matrix {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return arguments;
-    }];
-}
-
-+ (EBNativeFunction *)asArray {
-    return [[EBNativeFunction alloc] initWithBody:^(NSArray *arguments){
-        return arguments;
-    }];
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBNativeFunction.h b/ios/Pods/BindingX/core/ios/BindingX/EBNativeFunction.h
deleted file mode 100644
index c040fff..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBNativeFunction.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface EBNativeFunction: NSObject
-
-@property(nonatomic, strong) NSObject* (^body)(NSArray* arguments);
-
-- (id)initWithBody:(NSObject* (^)(NSArray*))body;
-
-- (NSObject*)call:(NSArray *)arguments;
-
-@end
-
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBNativeFunction.m b/ios/Pods/BindingX/core/ios/BindingX/EBNativeFunction.m
deleted file mode 100644
index e8c6654..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBNativeFunction.m
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import "EBNativeFunction.h"
-
-@implementation EBNativeFunction
-
--(id)initWithBody: (NSObject* (^)(NSArray*))body{
-    if(self=[super init])
-    {
-        _body = body;
-    }
-    return self;
-}
-
-- (NSObject*)call:(NSArray *)arguments {
-    return _body(arguments);
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBTaffyTuple.h b/ios/Pods/BindingX/core/ios/BindingX/EBTaffyTuple.h
deleted file mode 100644
index 917098f..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBTaffyTuple.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-
-#define PT_1(a) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, nil]
-#define PT_2(a,b) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, nil]
-#define PT_3(a,b,c) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, (__strong id*)&c, nil]
-#define PT_4(a,b,c,d) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, (__strong id*)&c, (__strong id*)&d, nil]
-#define PT_5(a,b,c,d,e) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, (__strong id*)&c, (__strong id*)&d, (__strong id*)&e, nil]
-#define PT_6(a,b,c,d,e,f) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, (__strong id*)&c, (__strong id*)&d, (__strong id*)&e, (__strong id*)&f, nil]
-#define PT_7(a,b,c,d,e,f,g) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, (__strong id*)&c, (__strong id*)&d, (__strong id*)&e, (__strong id*)&f, (__strong id*)&g, nil]
-#define PT_8(a,b,c,d,e,f,g,h) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, (__strong id*)&c, (__strong id*)&d, (__strong id*)&e, (__strong id*)&f, (__strong id*)&g, (__strong id*)&h, nil]
-#define PT_9(a,b,c,d,e,f,g,h,i) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, (__strong id*)&c, (__strong id*)&d, (__strong id*)&e, (__strong id*)&f, (__strong id*)&g, (__strong id*)&h, (__strong id*)&i, nil]
-#define PT_10(a,b,c,d,e,f,g,h,i,j) [[EBTaffyTuple alloc] initWithValues:(__strong id*)&a, (__strong id*)&b, (__strong id*)&c, (__strong id*)&d, (__strong id*)&e, (__strong id*)&f, (__strong id*)&g, (__strong id*)&h, (__strong id*)&i, (__strong id*)&j, nil]
-
-#define GET_PT_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, NAME, ...) NAME
-#define _(...) GET_PT_MACRO(__VA_ARGS__, PT_10, PT_9, PT_8, PT_7, PT_6, PT_5, PT_4, PT_3, PT_2, PT_1)(__VA_ARGS__)
-
-@protocol EBTaffyUnpacker <NSObject>
-
-- (void)wxtf_unpack:(NSEnumerator *)enumerator;
-
-@end
-
-@protocol EBTaffyPacker <NSObject>
-
-- (NSEnumerator *)wxtf_pack;
-
-@end
-
-@interface EBTaffyTuple : NSObject
-
-- (instancetype)initWithValues:(__strong id*)arg, ...;
-
-- (void)unpackFrom:(id <EBTaffyPacker>)packer;
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBTaffyTuple.m b/ios/Pods/BindingX/core/ios/BindingX/EBTaffyTuple.m
deleted file mode 100644
index 0782d7c..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBTaffyTuple.m
+++ /dev/null
@@ -1,150 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBTaffyTuple.h"
-
-@implementation EBTaffyTuple {
-    __strong id *_a;
-    __strong id *_b;
-    __strong id *_c;
-    __strong id *_d;
-    __strong id *_e;
-    __strong id *_f;
-    __strong id *_g;
-    __strong id *_h;
-    __strong id *_i;
-    __strong id *_j;
-}
-
-- (instancetype)initWithValues:(__strong id*)arg, ... {
-    if (self = [super init]) {
-        va_list paramList;
-        va_start(paramList, arg);
-        
-        int index = 0;
-        while (arg) {
-            switch (index) {
-                case 0:
-                    _a = arg;
-                    break;
-                case 1:
-                    _b = arg;
-                    break;
-                case 2:
-                    _c = arg;
-                    break;
-                case 3:
-                    _d = arg;
-                    break;
-                case 4:
-                    _e = arg;
-                    break;
-                case 5:
-                    _f = arg;
-                    break;
-                case 6:
-                    _g = arg;
-                    break;
-                case 7:
-                    _h = arg;
-                    break;
-                case 8:
-                    _i = arg;
-                    break;
-                case 9:
-                    _j = arg;
-                    break;
-                default:
-                    break;
-            }
-            
-            arg = va_arg(paramList, __strong id *);
-            index++;
-        }
-        va_end(paramList);
-    }
-    return self;
-}
-
-#pragma mark - WXTaffyUnpacker
-- (void)wxtf_unpack:(NSEnumerator *)enumerator {
-    NSObject *next = nil;
-    int i = 0;
-    while ((next = enumerator.nextObject) != nil) {
-        switch (i) {
-            case 0:
-                if (_a) {
-                    *_a = next;
-                }
-                break;
-            case 1:
-                if (_b) {
-                    *_b = next;
-                }
-                break;
-            case 2:
-                if (_c) {
-                    *_c = next;
-                }
-                break;
-            case 3:
-                if (_d) {
-                    *_d = next;
-                }
-                break;
-            case 4:
-                if (_e) {
-                    *_e = next;
-                }
-                break;
-            case 5:
-                if (_f) {
-                    *_f = next;
-                }
-                break;
-            case 6:
-                if (_g) {
-                    *_g = next;
-                }
-                break;
-            case 7:
-                if (_h) {
-                    *_h = next;
-                }
-                break;
-            case 8:
-                if (_i) {
-                    *_i = next;
-                }
-                break;
-            case 9:
-                if (_j) {
-                    *_j = next;
-                }
-                break;
-            default:
-                break;
-        }
-        i++;
-    }
-}
-
-#pragma mark - public methods
-- (void)unpackFrom:(id<EBTaffyPacker>)packer {
-    [self wxtf_unpack:[packer wxtf_pack]];
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBUtility.h b/ios/Pods/BindingX/core/ios/BindingX/EBUtility.h
deleted file mode 100644
index 8011baa..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBUtility.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import "EBExpressionProperty.h"
-
-typedef void (^EBGetPanGestureCallback)(BOOL isHorizontal, BOOL isVertical);
-
-typedef void (^EBPerformBlock)(void);
-
-@interface EBUtility: NSObject
-
-+ (void)performBlockOnBridgeThread:(EBPerformBlock _Nullable )block;
-
-+ (void)performBlockOnMainThread:(EBPerformBlock _Nonnull )block;
-
-+ (BOOL)isBlankString:(NSString *_Nullable)string;
-
-+ (CGFloat)factor;
-
-+ (void)execute:(EBExpressionProperty *_Nullable)model to:(id _Nullable )target;
-
-+ (UIPanGestureRecognizer *_Nullable)getPanGestureForSource:(id _Nullable )source callback:(EBGetPanGestureCallback _Nonnull )callback;
-
-+ (void)addScrollDelegate:(id<UIScrollViewDelegate> _Nullable )delegate source:(id _Nullable )source;
-
-+ (void)removeScrollDelegate:(id<UIScrollViewDelegate> _Nullable )delegate source:(id _Nullable )source;
-
-+ (UIView *_Nullable)getViewByRef:(id _Nullable )ref;
-
-@end
-
-
diff --git a/ios/Pods/BindingX/core/ios/BindingX/EBUtility.m b/ios/Pods/BindingX/core/ios/BindingX/EBUtility.m
deleted file mode 100644
index 23017fd..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/EBUtility.m
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBUtility.h"
-
-@implementation EBUtility
-
-+ (void)performBlockOnBridgeThread:(EBPerformBlock)block {
-    block();
-}
-
-+ (void)performBlockOnMainThread:(EBPerformBlock)block {
-    block();
-}
-
-+ (BOOL)isBlankString:(NSString *)string {
-    
-    if (string == nil || string == NULL || [string isKindOfClass:[NSNull class]]) {
-        return true;
-    }
-    if (![string isKindOfClass:[NSString class]]) {
-        NSLog(@"%@ is not a string", string);
-        return true;
-    }
-    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
-        return true;
-    }
-    
-    return false;
-}
-
-+ (CGFloat)factor
-{
-    return 1;
-}
-
-+ (void)execute:(EBExpressionProperty *)model to:(id)target
-{
-    
-}
-
-+ (UIPanGestureRecognizer *_Nullable)getPanGestureForSource:(id _Nullable )source callback:(EBGetPanGestureCallback _Nonnull )callback
-{
-    return nil;
-}
-
-+ (void)addScrollDelegate:(id<UIScrollViewDelegate> _Nullable )delegate source:(id _Nullable )source
-{
-    
-}
-
-+ (void)removeScrollDelegate:(id<UIScrollViewDelegate> _Nullable )delegate source:(id _Nullable )source
-{
-    
-}
-
-+ (UIView *_Nullable)getViewByRef:(id _Nullable )ref
-{
-    return nil;
-}
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/NSObject+EBTuplePacker.h b/ios/Pods/BindingX/core/ios/BindingX/NSObject+EBTuplePacker.h
deleted file mode 100644
index d6246f0..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/NSObject+EBTuplePacker.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import "EBTaffyTuple.h"
-
-@interface NSObject (EBTuplePacker) <EBTaffyPacker>
-
-@end
diff --git a/ios/Pods/BindingX/core/ios/BindingX/NSObject+EBTuplePacker.m b/ios/Pods/BindingX/core/ios/BindingX/NSObject+EBTuplePacker.m
deleted file mode 100644
index 65197e5..0000000
--- a/ios/Pods/BindingX/core/ios/BindingX/NSObject+EBTuplePacker.m
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "NSObject+EBTuplePacker.h"
-#import <UIKit/UIKit.h>
-
-@implementation NSObject (EBTuplePacker)
-
-#pragma mark - WXTaffyPacker
-- (NSEnumerator *)wxtf_pack {
-    if ([self isKindOfClass:[NSNumber class]] || [self isKindOfClass:[NSString class]]) {
-        return [@[self] objectEnumerator];
-    } else if ([self isKindOfClass:[NSArray class]]) {
-        return [(NSArray *)self objectEnumerator];
-    }
-    return nil;
-}
-
-@end
diff --git a/ios/Pods/BindingX/weex/ios/Sources/EBUtility+WX.h b/ios/Pods/BindingX/weex/ios/Sources/EBUtility+WX.h
deleted file mode 100644
index 388bb03..0000000
--- a/ios/Pods/BindingX/weex/ios/Sources/EBUtility+WX.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import "EBUtility.h"
-
-@interface EBUtility(WX)
-
-+ (NSNumber *)transformFactor:(NSString *)key layer:(CALayer* )layer;
-+ (NSString *)colorAsString:(CGColorRef)cgColor;
-+ (NSNumber *)radian2Angle:(NSNumber *)radian;
-
-@end
diff --git a/ios/Pods/BindingX/weex/ios/Sources/EBUtility+WX.m b/ios/Pods/BindingX/weex/ios/Sources/EBUtility+WX.m
deleted file mode 100644
index 0cfafea..0000000
--- a/ios/Pods/BindingX/weex/ios/Sources/EBUtility+WX.m
+++ /dev/null
@@ -1,277 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBUtility+WX.h"
-#import <WeexSDK/WeexSDK.h>
-
-@implementation EBUtility (WX)
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-
-+ (void)performBlockOnBridgeThread:(EBPerformBlock)block
-{
-    WXPerformBlockOnBridgeThread(^{
-        block();
-    });
-}
-
-+ (void)performBlockOnMainThread:(EBPerformBlock)block
-{
-    WXPerformBlockOnMainThread(^{
-        block();
-    });
-}
-
-+ (void)execute:(EBExpressionProperty *)model to:(id)target
-{
-    WXComponent *component = (WXComponent *)target;
-    NSMutableDictionary *styles = [NSMutableDictionary dictionary];
-    
-    if (model.isTransformChanged) {
-        NSString *transform = @"";
-        if (model.isTranslateChanged) {
-            transform = [NSString stringWithFormat:@"translate(%f,%f) ", model.tx, model.ty];
-        }
-        if (model.isRotateChanged) {
-            transform = [transform stringByAppendingFormat:@"rotate(%fdeg) ", model.angle];
-        }
-        if (model.isScaleChagned) {
-            transform = [transform stringByAppendingFormat:@"scale(%f, %f) ", model.sx, model.sy];
-        }
-        if (model.isRotateXChanged) {
-            transform = [transform stringByAppendingFormat:@"rotatex(%fdeg) ", model.rotateX];
-        }
-        if (model.isRotateYChanged) {
-            transform = [transform stringByAppendingFormat:@"rotatey(%fdeg) ", model.rotateY];
-        }
-        if (model.isPerspectiveChanged) {
-            transform = [transform stringByAppendingFormat:@"perspective(%f) ", model.perspective];
-        }
-        styles[@"transform"] = transform;
-    }
-    if (model.isTransformOriginChanged) {
-        styles[@"transformOrigin"] = model.transformOrigin;
-    }
-    if (model.isLeftChanged) {
-        styles[@"left"] = @(model.left);
-    }
-    if (model.isTopChanged) {
-        styles[@"top"] = @(model.top);
-    }
-    if (model.isWidthChanged) {
-        styles[@"width"] = @(model.width);
-    }
-    if (model.isHeightChanged) {
-        styles[@"height"] = @(model.height);
-    }
-    if (model.isBackgroundColorChanged) {
-        styles[@"backgroundColor"] = [self makeColor:model.backgroundColor];
-    }
-    if (model.isColorChanged) {
-        styles[@"color"] = [self makeColor:model.color];
-    }
-    if (model.isAlphaChanged) {
-        styles[@"opacity"] = @(model.alpha);
-    }
-    if (model.isBRChanged) {
-        styles[@"borderTopLeftRadius"] = @(model.br);
-        styles[@"borderTopRightRadius"] = @(model.br);
-        styles[@"borderBottomRightRadius"] = @(model.br);
-        styles[@"borderBottomLeftRadius"] = @(model.br);
-    }
-    if (model.isBRTLChanged) {
-        styles[@"borderTopLeftRadius"] = @(model.brTL);
-    }
-    if (model.isBRTRChanged) {
-        styles[@"borderTopRightRadius"] = @(model.brTR);
-    }
-    if (model.isBRBRChanged) {
-        styles[@"borderBottomRightRadius"] = @(model.brBR);
-    }
-    if (model.isBRBLChanged) {
-        styles[@"borderBottomLeftRadius"] = @(model.brBL);
-    }
-    if (model.isMarginTopChanged) {
-        styles[@"marginTop"] = @(model.marginTop);
-    }
-    if (model.isMarginRightChanged) {
-        styles[@"marginRight"] = @(model.marginRight);
-    }
-    if (model.isMarginBottomChanged) {
-        styles[@"marginBottom"] = @(model.marginBottom);
-    }
-    if (model.isMarginLeftChanged) {
-        styles[@"marginLeft"] = @(model.marginLeft);
-    }
-    if (model.isPaddingTopChanged) {
-        styles[@"paddingTop"] = @(model.paddingTop);
-    }
-    if (model.isPaddingRightChanged) {
-        styles[@"paddingRight"] = @(model.paddingRight);
-    }
-    if (model.isPaddingBottomChanged) {
-        styles[@"paddingBottom"] = @(model.paddingBottom);
-    }
-    if (model.isPaddingLeftChanged) {
-        styles[@"paddingLeft"] = @(model.paddingLeft);
-    }
-    
-    if (styles.count > 0) {
-        WXComponent* component = nil;
-        if ([target isKindOfClass:WXComponent.class]) {
-            component = (WXComponent *)target;
-        } else {
-            return;
-        }
-        
-        WXSDKInstance *weexInstance = component.weexInstance;
-        if (!weexInstance) {
-            return;
-        }
-        SEL componentSel = NSSelectorFromString(@"componentManager");
-        typedef WXComponentManager *(*send_type)(id, SEL);
-        send_type methodInstance = (send_type)[WXSDKInstance instanceMethodForSelector:componentSel];
-        if (methodInstance) {
-            WXComponentManager *componentManager = methodInstance(weexInstance, componentSel);
-            if (componentManager) {
-                if (styles.count > 0){
-                    WXPerformBlockOnMainThread(^{
-                        [componentManager handleStyleOnMainThread:[styles copy] forComponent:target isUpdateStyles:YES];
-                        if ([component isKindOfClass:NSClassFromString(@"WXTextComponent")] && model.color) {
-                            [component setNeedsDisplay];
-                        }
-                    });
-                }
-            }
-        }
-    }
-    
-    if ((model.isContentOffsetXChanged || model.isContentOffsetYChanged) && [component conformsToProtocol:@protocol(WXScrollerProtocol)]) {
-        WXPerformBlockOnMainThread(^{
-            id<WXScrollerProtocol> scroller = (id<WXScrollerProtocol>)target;
-            CGFloat offsetX = (model.isContentOffsetXChanged ? model.contentOffsetX : scroller.contentOffset.x);
-            CGFloat offsetY = (model.isContentOffsetYChanged ? model.contentOffsetY : scroller.contentOffset.y);
-            offsetX = MIN(offsetX, scroller.contentSize.width-component.view.frame.size.width);
-            offsetX = MAX(0, offsetX);
-            offsetY = MIN(offsetY, scroller.contentSize.height-component.view.frame.size.height);
-            offsetY = MAX(0, offsetY);
-            [scroller setContentOffset:CGPointMake(offsetX, offsetY) animated:NO];
-        });
-    }
-}
-
-+ (CGFloat)factor
-{
-    return [WXUtility defaultPixelScaleFactor];
-}
-
-+ (UIPanGestureRecognizer *_Nullable)getPanGestureForSource:(id _Nullable )source callback:(EBGetPanGestureCallback)callback
-{
-    WXComponent *component = (WXComponent *)source;
-    Ivar ivarPan = class_getInstanceVariable([component class], "_panGesture");
-    id panObj = object_getIvar(component, ivarPan);
-    
-    if (!panObj || ![panObj isKindOfClass:[UIPanGestureRecognizer class]]) {
-        SEL selector = NSSelectorFromString(@"addPanGesture");
-        if ([component respondsToSelector:selector]) {
-            [component performSelector:selector onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES];
-        }
-        
-        ivarPan = class_getInstanceVariable([component class], "_panGesture");
-        panObj = object_getIvar(component, ivarPan);
-    }
-    
-    if (panObj && [panObj isKindOfClass:[UIPanGestureRecognizer class]]) {
-        callback(
-                 [component.events containsObject:@"horizontalpan"],
-                 [component.events containsObject:@"verticalpan"]
-                 );
-        return (UIPanGestureRecognizer *)panObj;
-    }
-    return nil;
-}
-
-+ (void)addScrollDelegate:(id<UIScrollViewDelegate>)delegate source:(id)source
-{
-    if (source) {
-        if ([source respondsToSelector:@selector(addScrollDelegate:)]) {
-            [source addScrollDelegate:delegate];
-        } else {
-            WXLogError(@"bind `scroll` type on a component could't scroll");
-        }
-    }
-}
-
-+ (void)removeScrollDelegate:(id<UIScrollViewDelegate>)delegate source:(id)source
-{
-    if (source) {
-        if ([source respondsToSelector:@selector(removeScrollDelegate:)]) {
-            [source removeScrollDelegate:delegate];
-        } else {
-            WXLogError(@"bind `scroll` type on a component could't scroll");
-        }
-    }
-}
-
-+ (NSString *)makeColor:(NSObject *)result {
-    NSNumber *r, *g, *b, *a = @(1);
-    NSArray *colorArray = (NSArray *)result;
-    if ([colorArray isKindOfClass:NSArray.class] && colorArray.count >= 3) {
-        r = colorArray[0];
-        g = colorArray[1];
-        b = colorArray[2];
-        if (colorArray.count > 3) {
-            a = colorArray[3];
-        }
-    }
-    return [NSString stringWithFormat:@"rgba(%d,%d,%d,%lf)", [r intValue],[g intValue],[b intValue],[a doubleValue]];
-}
-
-+ (NSNumber *)transformFactor:(NSString *)key layer:(CALayer* )layer {
-    CGFloat factor = [WXUtility defaultPixelScaleFactor];
-    id value = [layer valueForKeyPath:key];
-    if(value){
-        return [NSNumber numberWithDouble:([value doubleValue] / factor)];
-    }
-    return nil;
-}
-
-+ (NSString *)colorAsString:(CGColorRef)cgColor {
-    const CGFloat *components = CGColorGetComponents(cgColor);
-    if (components) {
-        return [NSString stringWithFormat:@"rgba(%d,%d,%d,%f)", (int)(components[0]*255), (int)(components[1]*255), (int)(components[2]*255), components[3]];
-    }
-    return nil;
-}
-
-+ (NSNumber *)radian2Angle:(NSNumber *)radian {
-    if ([radian isKindOfClass:NSNumber.class]) {
-        return @([radian doubleValue]*180/M_PI);
-    }
-    return @(0);
-}
-
-+ (UIView *)getViewByRef:(id)ref {
-    if ([ref isKindOfClass:WXComponent.class]) {
-        WXComponent* component = (WXComponent *)ref;
-        return component.view;
-    }
-    return nil;
-}
-
-#pragma clang diagnostic pop
-@end
diff --git a/ios/Pods/BindingX/weex/ios/Sources/EBWXModule.h b/ios/Pods/BindingX/weex/ios/Sources/EBWXModule.h
deleted file mode 100644
index 14f1b0a..0000000
--- a/ios/Pods/BindingX/weex/ios/Sources/EBWXModule.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WXModuleProtocol.h>
-
-@interface EBWXModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/BindingX/weex/ios/Sources/EBWXModule.m b/ios/Pods/BindingX/weex/ios/Sources/EBWXModule.m
deleted file mode 100644
index 5a366d0..0000000
--- a/ios/Pods/BindingX/weex/ios/Sources/EBWXModule.m
+++ /dev/null
@@ -1,381 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBWXModule.h"
-#import <WeexSDK/WeexSDK.h>
-#import "EBExpressionHandler.h"
-#import <pthread/pthread.h>
-#import <WeexPluginLoader/WeexPluginLoader.h>
-#import "EBBindData.h"
-#import "EBUtility+WX.h"
-#import "EBWXUtils.h"
-
-WX_PlUGIN_EXPORT_MODULE(bindingx, EBWXModule)
-
-@interface EBWXModule ()
-
-@property (nonatomic, strong) EBBindData *bindData;
-
-@end
-
-@implementation EBWXModule {
-    pthread_mutex_t mutex;
-    pthread_mutexattr_t mutexAttr;
-}
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD_SYNC(@selector(prepare:))
-WX_EXPORT_METHOD_SYNC(@selector(bind:callback:tokenCallback:))
-WX_EXPORT_METHOD_SYNC(@selector(bindAsync:callback:tokenCallback:))
-WX_EXPORT_METHOD_SYNC(@selector(unbind:))
-WX_EXPORT_METHOD_SYNC(@selector(unbindAll))
-WX_EXPORT_METHOD_SYNC(@selector(supportFeatures))
-WX_EXPORT_METHOD_SYNC(@selector(getComputedStyle:callback:))
-WX_EXPORT_METHOD_SYNC(@selector(getComputedStyleAsync:callback:))
-
-- (instancetype)init {
-    if (self = [super init]) {
-        pthread_mutexattr_init(&mutexAttr);
-        pthread_mutexattr_settype(&mutexAttr, PTHREAD_MUTEX_RECURSIVE);
-        pthread_mutex_init(&mutex, &mutexAttr);
-        _bindData = [EBBindData new];
-    }
-    return self;
-}
-
-- (void)dealloc {
-    [self unbindAll];
-    pthread_mutex_destroy(&mutex);
-    pthread_mutexattr_destroy(&mutexAttr);
-}
-
-- (void)prepare:(NSDictionary *)dictionary {
-    if (!dictionary) {
-        WX_LOG(WXLogFlagWarning, @"prepare params error, need json input");
-        return;
-    }
-    
-    NSString *anchor = dictionary[@"anchor"];
-    NSString *eventType = dictionary[@"eventType"];
-    
-    if ([WXUtility isBlankString:anchor] || [WXUtility isBlankString:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"prepare binding params error");
-        return;
-    }
-    
-    if (![EBEventHandlerFactory containsEvent:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"prepare binding eventType error");
-        return;
-    }
-    
-    __weak typeof(self) welf = self;
-    WXPerformBlockOnComponentThread(^{
-        // find sourceRef & targetRef
-        WXComponent *sourceComponent = [weexInstance componentForRef:anchor];
-        if (!sourceComponent && [EBEventHandlerFactory eventRequireSource:eventType]) {
-            WX_LOG(WXLogFlagWarning, @"prepare binding can't find component");
-            return;
-        }
-        
-        pthread_mutex_lock(&mutex);
-        
-        EBExpressionHandler *handler = [welf.bindData handlerForToken:anchor eventType:eventType];
-        if (!handler) {
-            // create handler for key
-            handler = [EBEventHandlerFactory createHandlerWithEvent:eventType source:sourceComponent];
-            [welf.bindData putHandler:handler forToken:anchor eventType:eventType];
-        }
-        
-        pthread_mutex_unlock(&mutex);
-    });
-    
-}
-
-- (NSDictionary *)bind:(NSDictionary *)dictionary
-              callback:(WXKeepAliveCallback)callback
-         tokenCallback:(WXKeepAliveCallback)tokenCallback {
-    
-    if (!dictionary) {
-        WX_LOG(WXLogFlagWarning, @"bind params error, need json input");
-        return nil;
-    }
-    
-    NSString *eventType =  dictionary[@"eventType"];
-    NSArray *props = dictionary[@"props"];
-    NSString *token = dictionary[@"anchor"];
-    NSDictionary *exitExpression = dictionary[@"exitExpression"];
-    NSDictionary *options = dictionary[@"options"];
-    
-    if ([WXUtility isBlankString:eventType] || !props || props.count == 0) {
-        WX_LOG(WXLogFlagWarning, @"bind params error");
-        callback(@{@"state":@"error",@"msg":@"bind params error"}, NO);
-        return nil;
-    }
-    
-    if (![EBEventHandlerFactory containsEvent:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"bind params handler error");
-        callback(@{@"state":@"error",@"msg":@"bind params handler error"}, NO);
-        return nil;
-    }
-    
-    if ([WXUtility isBlankString:token]){
-        if ([EBEventHandlerFactory eventRequireSource:eventType]) {
-            WX_LOG(WXLogFlagWarning, @"bind params handler error");
-            callback(@{@"state":@"error",@"msg":@"anchor cannot be blank when type is pan or scroll"}, NO);
-            return nil;
-        } else {
-            token = [[NSUUID UUID] UUIDString];
-        }
-    }
-    
-    __weak typeof(self) welf = self;
-    WXPerformBlockOnComponentThread(^{
-        
-        // find sourceRef & targetRef
-        WXComponent *sourceComponent = nil;
-        NSString *instanceId = dictionary[@"instanceId"];
-        if (instanceId) {
-            WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-            sourceComponent = [instance componentForRef:token];
-        } else {
-            sourceComponent = [weexInstance componentForRef:token];
-        }
-        if (!sourceComponent && [EBEventHandlerFactory eventRequireSource:eventType]) {
-            WX_LOG(WXLogFlagWarning, @"bind can't find source component");
-            callback(@{@"state":@"error",@"msg":@"bind can't find source component"}, NO);
-            return;
-        }
-        
-        NSMapTable<id, NSDictionary *> *targetExpression = [NSMapTable weakToStrongObjectsMapTable];
-        for (NSDictionary *targetDic in props) {
-            NSString *targetRef = targetDic[@"element"];
-            NSString *property = targetDic[@"property"];
-            NSDictionary *expression = targetDic[@"expression"];
-            NSString *instanceId = targetDic[@"instanceId"];
-            
-            WXComponent *targetComponent = nil;
-            if (instanceId) {
-                WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-                targetComponent = [instance componentForRef:targetRef];
-            } else {
-                targetComponent = [weexInstance componentForRef:targetRef];
-            }
-            if (targetComponent) {
-                
-                if ([targetComponent isViewLoaded]) {
-                    WXPerformBlockOnMainThread(^{
-                        [targetComponent.view.layer removeAllAnimations];
-                    });
-                }
-                
-                NSMutableDictionary *propertyDic = [[targetExpression objectForKey:targetComponent] mutableCopy];
-                if (!propertyDic) {
-                    propertyDic = [NSMutableDictionary dictionary];
-                }
-                NSMutableDictionary *expDict = [NSMutableDictionary dictionary];
-                expDict[@"expression"] = [EBBindData parseExpression:expression];
-                
-                if( targetDic[@"config"] )
-                {
-                    expDict[@"config"] = targetDic[@"config"];
-                }
-                propertyDic[property] = expDict;
-                [targetExpression setObject:propertyDic forKey:targetComponent];
-            }
-        }
-        
-        // find handler for key
-        pthread_mutex_lock(&mutex);
-        
-        EBExpressionHandler *handler = [welf.bindData handlerForToken:token eventType:eventType];
-        if (!handler) {
-            // create handler for key
-            handler = [EBEventHandlerFactory createHandlerWithEvent:eventType source:sourceComponent];
-            [welf.bindData putHandler:handler forToken:token eventType:eventType];
-        }
-        
-        [handler updateTargetExpression:targetExpression
-                                options:options
-                         exitExpression:[EBBindData parseExpression:exitExpression]
-                               callback:^(id  _Nonnull source, id  _Nonnull result, BOOL keepAlive) {
-                                   callback(result,keepAlive);
-                               }];
-        
-        pthread_mutex_unlock(&mutex);
-    });
-    
-    NSDictionary *ret = @{@"token":token};
-    if (tokenCallback) {
-        tokenCallback(ret, NO);
-    }
-    return ret;
-}
-
-- (void)bindAsync:(NSDictionary *)dictionary
-         callback:(WXKeepAliveCallback)callback
-    tokenCallback:(WXKeepAliveCallback)tokenCallback {
-    [self bind:dictionary
-             callback:callback
-        tokenCallback:tokenCallback];
-}
-
-- (void)unbind:(NSDictionary *)dictionary {
-    
-    if (!dictionary) {
-        WX_LOG(WXLogFlagWarning, @"unbind params error, need json input");
-        return;
-    }
-    NSString* token = dictionary[@"token"];
-    NSString* eventType = dictionary[@"eventType"];
-    
-    if ([WXUtility isBlankString:token] || [WXUtility isBlankString:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"unbind params error");
-        return;
-    }
-    
-    if (![EBEventHandlerFactory containsEvent:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"unbind params handler error");
-        return;
-    }
-    
-    pthread_mutex_lock(&mutex);
-    
-    EBExpressionHandler *handler = [self.bindData handlerForToken:token eventType:eventType];
-    if (!handler) {
-        WX_LOG(WXLogFlagWarning, @"unbind can't find handler handler");
-        pthread_mutex_unlock(&mutex);
-        return;
-    }
-    
-    [handler removeExpressionBinding];
-    [self.bindData removeHandler:handler forToken:token eventType:eventType];
-    
-    pthread_mutex_unlock(&mutex);
-}
-
-- (void)unbindAll {
-    pthread_mutex_lock(&mutex);
-    
-    [self.bindData unbindAll];
-    
-    pthread_mutex_unlock(&mutex);
-}
-
-- (NSArray *)supportFeatures {
-    return EBsupportFeatures;
-}
-
-- (NSDictionary *)getComputedStyle:(NSString *)sourceRef
-                          callback:(WXKeepAliveCallback)callback {
-    
-    if (callback) {
-        // call async method when callback is not nil
-        [self getComputedStyleAsync:sourceRef callback:callback];
-        return nil;
-    }
-    
-    __block NSDictionary *styles = nil;
-    
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    [self fetchComputedStyle:sourceRef callback:^(NSDictionary *callbackStyles) {
-        styles = callbackStyles;
-        dispatch_semaphore_signal(semaphore);
-    }];
-    dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)));
-    
-    return styles;
-}
-
-- (void)getComputedStyleAsync:(NSString *)sourceRef
-                callback:(WXKeepAliveCallback)callback {
-    [self fetchComputedStyle:sourceRef callback:^(NSDictionary *styles) {
-        if (callback) {
-            callback(styles, NO);
-        }
-    }];
-}
-
-- (void)fetchComputedStyle:(NSString *)sourceRef
-                callback:(void (^ _Nullable)(NSDictionary *))callback {
-    if (![sourceRef isKindOfClass:NSString.class] || [WXUtility isBlankString:sourceRef]) {
-        WX_LOG(WXLogFlagWarning, @"getComputedStyle params error");
-        callback(nil);
-    }
-    
-    __block NSMutableDictionary *styles = [NSMutableDictionary new];
-    
-    WXPerformBlockOnComponentThread(^{
-        // find sourceRef & targetRef
-        WXComponent *sourceComponent = [weexInstance componentForRef:sourceRef];
-        if (!sourceComponent) {
-            WX_LOG(WXLogFlagWarning, @"getComputedStyle can't find source component");
-            callback(nil);
-        }
-        NSDictionary* mapping = [EBWXUtils cssPropertyMapping];
-        for (NSString* key in mapping) {
-            id value = sourceComponent.styles[key];
-            if (value) {
-                if ([value isKindOfClass:NSString.class]) {
-                    NSString *string = (NSString *)value;
-                    if ([string hasSuffix:@"px"]) {
-                        NSString *number = [string substringToIndex:(string.length-2)];
-                        [styles setValue:@([number floatValue]) forKey:mapping[key]];
-                    } else {
-                        [styles setValue:string forKey:mapping[key]];
-                    }
-                } else if([value isKindOfClass:NSNumber.class]) {
-                    [styles setValue:value forKey:mapping[key]];
-                }
-            }
-        }
-        if (sourceComponent.styles[@"borderRadius"]) {
-            [styles setValue:sourceComponent.styles[@"borderRadius"] forKey:@"border-top-left-radius"];
-            [styles setValue:sourceComponent.styles[@"borderRadius"] forKey:@"border-top-right-radius"];
-            [styles setValue:sourceComponent.styles[@"borderRadius"] forKey:@"border-bottom-left-radius"];
-            [styles setValue:sourceComponent.styles[@"borderRadius"] forKey:@"border-bottom-right-radius"];
-        }
-        WXPerformBlockOnMainThread(^{
-            CALayer *layer = sourceComponent.view.layer;
-            layer = layer.presentationLayer ?: layer.modelLayer;
-            if (layer) {
-                styles[@"translateX"] = [EBUtility transformFactor:@"transform.translation.x" layer:layer];
-                styles[@"translateY"] = [EBUtility transformFactor:@"transform.translation.y" layer:layer];
-                styles[@"scaleX"] = [layer valueForKeyPath:@"transform.scale.x"];
-                styles[@"scaleY"] = [layer valueForKeyPath:@"transform.scale.y"];
-                styles[@"rotateX"] = [EBUtility radian2Angle:[layer valueForKeyPath:@"transform.rotation.x"]];
-                styles[@"rotateY"] = [EBUtility radian2Angle:[layer valueForKeyPath:@"transform.rotation.y"]];
-                styles[@"rotateZ"] = [EBUtility radian2Angle:[layer valueForKeyPath:@"transform.rotation.z"]];
-                styles[@"isRotateAngle"] = @"true";
-                styles[@"opacity"] = [layer valueForKeyPath:@"opacity"];
-            }
-            
-            callback(styles);
-        });
-    });
-}
-
-@end
-
-WX_PlUGIN_EXPORT_MODULE(binding, EBWXBindingModule)
-
-@interface EBWXBindingModule : EBWXModule
-
-@end
-
-@implementation EBWXBindingModule
-
-@end
diff --git a/ios/Pods/BindingX/weex/ios/Sources/EBWXOldModule.h b/ios/Pods/BindingX/weex/ios/Sources/EBWXOldModule.h
deleted file mode 100644
index c971022..0000000
--- a/ios/Pods/BindingX/weex/ios/Sources/EBWXOldModule.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WXModuleProtocol.h>
-
-__attribute__ ((deprecated("EBWXOldModule is deprecated, EBWXModule instead it.")))
-@interface EBWXOldModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/BindingX/weex/ios/Sources/EBWXOldModule.m b/ios/Pods/BindingX/weex/ios/Sources/EBWXOldModule.m
deleted file mode 100644
index f6f89b5..0000000
--- a/ios/Pods/BindingX/weex/ios/Sources/EBWXOldModule.m
+++ /dev/null
@@ -1,274 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBWXOldModule.h"
-#import <WeexSDK/WeexSDK.h>
-#import "EBExpressionHandler.h"
-#import <pthread/pthread.h>
-#import <WeexPluginLoader/WeexPluginLoader.h>
-#import "EBBindData.h"
-#import "EBUtility+WX.h"
-#import "EBWXUtils.h"
-
-WX_PlUGIN_EXPORT_MODULE(expressionBinding, EBWXOldModule)
-
-@interface EBWXOldModule ()
-
-@property (nonatomic, strong) EBBindData *bindData;
-
-@end
-
-@implementation EBWXOldModule {
-    pthread_mutex_t mutex;
-    pthread_mutexattr_t mutexAttr;
-}
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD_SYNC(@selector(enableBinding:eventType:))
-WX_EXPORT_METHOD_SYNC(@selector(createBinding:eventType:exitExpression:targetExpression:callback:))
-WX_EXPORT_METHOD_SYNC(@selector(disableBinding:eventType:))
-WX_EXPORT_METHOD_SYNC(@selector(disableAll))
-WX_EXPORT_METHOD_SYNC(@selector(supportFeatures))
-WX_EXPORT_METHOD_SYNC(@selector(getComputedStyle:))
-
-- (instancetype)init {
-    if (self = [super init]) {
-        pthread_mutexattr_init(&mutexAttr);
-        pthread_mutexattr_settype(&mutexAttr, PTHREAD_MUTEX_RECURSIVE);
-        pthread_mutex_init(&mutex, &mutexAttr);
-        _bindData = [EBBindData new];
-    }
-    return self;
-}
-
-- (void)dealloc {
-    [self disableAll];
-    pthread_mutex_destroy(&mutex);
-    pthread_mutexattr_destroy(&mutexAttr);
-}
-
-- (void)enableBinding:(NSString *)sourceRef
-            eventType:(NSString *)eventType {
-    if ([WXUtility isBlankString:sourceRef] || [WXUtility isBlankString:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"enableBinding params error");
-        return;
-    }
-    
-    if (![EBEventHandlerFactory containsEvent:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"enableBinding params error");
-        return;
-    }
-    
-    __weak typeof(self) welf = self;
-    WXPerformBlockOnComponentThread(^{
-        // find sourceRef & targetRef
-        WXComponent *sourceComponent = [weexInstance componentForRef:sourceRef];
-        if (!sourceComponent) {
-            WX_LOG(WXLogFlagWarning, @"enableBinding can't find component");
-            return;
-        }
-        
-        pthread_mutex_lock(&mutex);
-        
-        EBExpressionHandler *handler = [welf.bindData handlerForToken:sourceRef eventType:eventType];
-        if (!handler) {
-            // create handler for key
-            handler = [EBEventHandlerFactory createHandlerWithEvent:eventType source:sourceComponent];
-            [welf.bindData putHandler:handler forToken:sourceRef eventType:eventType];
-        }
-        
-        pthread_mutex_unlock(&mutex);
-    });
-}
-
-- (void)createBinding:(NSString *)sourceRef
-            eventType:(NSString *)eventType
-       exitExpression:(NSString *)exitExpression
-     targetExpression:(NSArray *)targetExpression
-             callback:(WXKeepAliveCallback)callback {
-    if ([WXUtility isBlankString:sourceRef] || [WXUtility isBlankString:eventType] || !targetExpression || targetExpression.count == 0) {
-        WX_LOG(WXLogFlagWarning, @"createBinding params error");
-        callback(@{@"state":@"error",@"msg":@"createBinding params error"}, NO);
-        return;
-    }
-    
-    if (![EBEventHandlerFactory containsEvent:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"createBinding params handler error");
-        callback(@{@"state":@"error",@"msg":@"createBinding params handler error"}, NO);
-        return;
-    }
-    
-    __weak typeof(self) welf = self;
-    WXPerformBlockOnComponentThread(^{
-        // find sourceRef & targetRef
-        WXComponent *sourceComponent = [weexInstance componentForRef:sourceRef];
-        if (!sourceComponent) {
-            WX_LOG(WXLogFlagWarning, @"createBinding can't find source component");
-            callback(@{@"state":@"error",@"msg":@"createBinding can't find source component"}, NO);
-            return;
-        }
-
-        NSMapTable<id, NSDictionary *> *targetExpressionMap = [NSMapTable weakToStrongObjectsMapTable];
-        for (NSDictionary *targetDic in targetExpression) {
-            NSString *targetRef = targetDic[@"element"];
-            NSString *property = targetDic[@"property"];
-            NSString *expression = targetDic[@"expression"];
-            
-            WXComponent *targetComponent = [weexInstance componentForRef:targetRef];
-            if (targetComponent) {
-                
-                if ([targetComponent isViewLoaded]) {
-                    WXPerformBlockOnMainThread(^{
-                        [targetComponent.view.layer removeAllAnimations];
-                    });
-                }
-
-                NSMutableDictionary *propertyDic = [[targetExpressionMap objectForKey:targetComponent] mutableCopy];
-                if (!propertyDic) {
-                    propertyDic = [NSMutableDictionary dictionary];
-                }
-                NSMutableDictionary *expDict = [NSMutableDictionary dictionary];
-                expDict[@"expression"] = [EBBindData parseExpression:expression];
-                
-                if( targetDic[@"config"] )
-                {
-                    expDict[@"config"] = targetDic[@"config"];
-                }
-                propertyDic[property] = expDict;
-                [targetExpressionMap setObject:propertyDic forKey:targetComponent];
-            }
-        }
-        
-        // find handler for key
-        pthread_mutex_lock(&mutex);
-        
-        EBExpressionHandler *handler = [welf.bindData handlerForToken:sourceRef eventType:eventType];
-        if (!handler) {
-            // create handler for key
-            handler = [EBEventHandlerFactory createHandlerWithEvent:eventType source:sourceComponent];
-            [welf.bindData putHandler:handler forToken:sourceRef eventType:eventType];
-        }
-
-        [handler updateTargetExpression:targetExpressionMap
-                                options:nil
-                         exitExpression:[EBBindData parseExpression:exitExpression]
-                               callback:^(id  _Nonnull source, id  _Nonnull result, BOOL keepAlive) {
-                                   callback(result,keepAlive);
-                               }];
-
-        pthread_mutex_unlock(&mutex);
-    });
-}
-
-- (void)disableBinding:(NSString *)sourceRef
-             eventType:(NSString *)eventType {
-    if ([WXUtility isBlankString:sourceRef] || [WXUtility isBlankString:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"disableBinding params error");
-        return;
-    }
-    
-    if (![EBEventHandlerFactory containsEvent:eventType]) {
-        WX_LOG(WXLogFlagWarning, @"disableBinding params handler error");
-        return;
-    }
-    
-    pthread_mutex_lock(&mutex);
-    
-    EBExpressionHandler *handler = [self.bindData handlerForToken:sourceRef eventType:eventType];
-    if (!handler) {
-        WX_LOG(WXLogFlagWarning, @"disableBinding can't find handler handler");
-        pthread_mutex_unlock(&mutex);
-        return;
-    }
-    
-    [handler removeExpressionBinding];
-    [self.bindData removeHandler:handler forToken:sourceRef eventType:eventType];
-    
-    pthread_mutex_unlock(&mutex);
-}
-
-- (void)disableAll {
-    pthread_mutex_lock(&mutex);
-    
-    [self.bindData unbindAll];
-    
-    pthread_mutex_unlock(&mutex);
-}
-
-- (NSArray *)supportFeatures {
-    return EBsupportFeatures;
-}
-
-- (NSDictionary *)getComputedStyle:(NSString *)sourceRef {
-    if (![sourceRef isKindOfClass:NSString.class] || [WXUtility isBlankString:sourceRef]) {
-        WX_LOG(WXLogFlagWarning, @"getComputedStyle params error");
-        return nil;
-    }
-    
-    __block NSMutableDictionary *styles = [NSMutableDictionary new];
-    
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-    WXPerformBlockOnComponentThread(^{
-        // find sourceRef & targetRef
-        WXComponent *sourceComponent = [weexInstance componentForRef:sourceRef];
-        if (!sourceComponent) {
-            WX_LOG(WXLogFlagWarning, @"getComputedStyle can't find source component");
-            return;
-        }
-        NSDictionary* mapping = [EBWXUtils cssPropertyMapping];
-        for (NSString* key in mapping) {
-            id value = sourceComponent.styles[key];
-            if (value) {
-                if ([value isKindOfClass:NSString.class]) {
-                    NSString *string = (NSString *)value;
-                    if ([string hasSuffix:@"px"]) {
-                        NSString *number = [string substringToIndex:(string.length-2)];
-                        [styles setValue:@([number floatValue]) forKey:mapping[key]];
-                    } else {
-                        [styles setValue:string forKey:mapping[key]];
-                    }
-                } else if([value isKindOfClass:NSNumber.class]) {
-                    [styles setValue:value forKey:mapping[key]];
-                }
-            }
-        }
-        if (sourceComponent.styles[@"borderRadius"]) {
-            [styles setValue:sourceComponent.styles[@"borderRadius"] forKey:@"border-top-left-radius"];
-            [styles setValue:sourceComponent.styles[@"borderRadius"] forKey:@"border-top-right-radius"];
-            [styles setValue:sourceComponent.styles[@"borderRadius"] forKey:@"border-bottom-left-radius"];
-            [styles setValue:sourceComponent.styles[@"borderRadius"] forKey:@"border-bottom-right-radius"];
-        }
-        WXPerformBlockOnMainThread(^{
-            CALayer *layer = sourceComponent.view.layer;
-            styles[@"translateX"] = [EBUtility transformFactor:@"transform.translation.x" layer:layer];
-            styles[@"translateY"] = [EBUtility transformFactor:@"transform.translation.y" layer:layer];
-            styles[@"scaleX"] = [layer valueForKeyPath:@"transform.scale.x"];
-            styles[@"scaleY"] = [layer valueForKeyPath:@"transform.scale.y"];
-            styles[@"rotateX"] = [layer valueForKeyPath:@"transform.rotation.x"];
-            styles[@"rotateY"] = [layer valueForKeyPath:@"transform.rotation.y"];
-            styles[@"rotateZ"] = [layer valueForKeyPath:@"transform.rotation.z"];
-            styles[@"opacity"] = [layer valueForKeyPath:@"opacity"];
-            
-            dispatch_semaphore_signal(semaphore);
-        });
-    });
-    
-    dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)));
-    return styles;
-}
-
-@end
diff --git a/ios/Pods/BindingX/weex/ios/Sources/EBWXUtils.h b/ios/Pods/BindingX/weex/ios/Sources/EBWXUtils.h
deleted file mode 100644
index 68a2c82..0000000
--- a/ios/Pods/BindingX/weex/ios/Sources/EBWXUtils.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface EBWXUtils : NSObject
-
-+ (NSDictionary<NSString *, NSString *> *)cssPropertyMapping;
-
-@end
diff --git a/ios/Pods/BindingX/weex/ios/Sources/EBWXUtils.m b/ios/Pods/BindingX/weex/ios/Sources/EBWXUtils.m
deleted file mode 100644
index ebe7807..0000000
--- a/ios/Pods/BindingX/weex/ios/Sources/EBWXUtils.m
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Copyright 2018 Alibaba Group
- *
- * 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.
- */
-
-#import "EBWXUtils.h"
-
-@implementation EBWXUtils
-
-+ (NSDictionary<NSString *,NSString *> *)cssPropertyMapping {
-    static NSDictionary *map = nil;
-    static dispatch_once_t onceToken;
-    
-    dispatch_once(&onceToken, ^{
-        map = @{@"width":@"width",
-                @"height":@"height",
-                @"color":@"color",
-                @"opacity":@"opacity",
-                @"backgroundColor":@"background-color",
-                @"marginTop":@"margin-top",
-                @"marginRight":@"margin-right",
-                @"marginBottom":@"margin-bottom",
-                @"marginLeft":@"margin-left",
-                @"paddingTop":@"padding-top",
-                @"paddingRight":@"padding-right",
-                @"paddingBottom":@"padding-bottom",
-                @"paddingLeft":@"padding-left",
-                @"borderTopLeftRadius":@"border-top-left-radius",
-                @"borderTopRightRadius":@"border-top-right-radius",
-                @"borderBottomRightRadius":@"border-bottom-left-radius",
-                @"borderBottomLeftRadius":@"border-bottom-right-radius",
-                };
-    });
-    return map;
-}
-
-@end
diff --git a/ios/Pods/Headers/Private/BindingX/BindingX.h b/ios/Pods/Headers/Private/BindingX/BindingX.h
deleted file mode 120000
index 0eaaace..0000000
--- a/ios/Pods/Headers/Private/BindingX/BindingX.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/BindingX.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBBindData.h b/ios/Pods/Headers/Private/BindingX/EBBindData.h
deleted file mode 120000
index 5c0826d..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBBindData.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBBindData.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpression.h b/ios/Pods/Headers/Private/BindingX/EBExpression.h
deleted file mode 120000
index d3cbfe6..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpression.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpression.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpressionExecutor.h b/ios/Pods/Headers/Private/BindingX/EBExpressionExecutor.h
deleted file mode 120000
index 16c3e3a..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpressionExecutor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionExecutor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpressionGesture.h b/ios/Pods/Headers/Private/BindingX/EBExpressionGesture.h
deleted file mode 120000
index b6cbc90..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpressionGesture.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionGesture.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpressionHandler.h b/ios/Pods/Headers/Private/BindingX/EBExpressionHandler.h
deleted file mode 120000
index d753c13..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpressionHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpressionOrientation.h b/ios/Pods/Headers/Private/BindingX/EBExpressionOrientation.h
deleted file mode 120000
index c7b3641..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpressionOrientation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionOrientation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpressionProperty.h b/ios/Pods/Headers/Private/BindingX/EBExpressionProperty.h
deleted file mode 120000
index df45cdc..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpressionProperty.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionProperty.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpressionScope.h b/ios/Pods/Headers/Private/BindingX/EBExpressionScope.h
deleted file mode 120000
index 9444eeb..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpressionScope.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionScope.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpressionScroller.h b/ios/Pods/Headers/Private/BindingX/EBExpressionScroller.h
deleted file mode 120000
index cad5ddf..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpressionScroller.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionScroller.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBExpressionTiming.h b/ios/Pods/Headers/Private/BindingX/EBExpressionTiming.h
deleted file mode 120000
index 9c3ca6d..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBExpressionTiming.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionTiming.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBGyroEuler.h b/ios/Pods/Headers/Private/BindingX/EBGyroEuler.h
deleted file mode 120000
index bc6bbb2..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBGyroEuler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroEuler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBGyroManager.h b/ios/Pods/Headers/Private/BindingX/EBGyroManager.h
deleted file mode 120000
index befc3b8..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBGyroManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBGyroOrientationEvaluator.h b/ios/Pods/Headers/Private/BindingX/EBGyroOrientationEvaluator.h
deleted file mode 120000
index 1fe09a0..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBGyroOrientationEvaluator.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroOrientationEvaluator.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBGyroQuaternion.h b/ios/Pods/Headers/Private/BindingX/EBGyroQuaternion.h
deleted file mode 120000
index f6d6991..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBGyroQuaternion.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroQuaternion.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBGyroVector3.h b/ios/Pods/Headers/Private/BindingX/EBGyroVector3.h
deleted file mode 120000
index 0a18e94..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBGyroVector3.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroVector3.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBHandlerFactory.h b/ios/Pods/Headers/Private/BindingX/EBHandlerFactory.h
deleted file mode 120000
index 2f7f057..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBHandlerFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBHandlerFactory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBJSEase.h b/ios/Pods/Headers/Private/BindingX/EBJSEase.h
deleted file mode 120000
index c3ec980..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBJSEase.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBJSEase.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBJSEvaluate.h b/ios/Pods/Headers/Private/BindingX/EBJSEvaluate.h
deleted file mode 120000
index 4363bbe..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBJSEvaluate.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBJSEvaluate.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBJSMath.h b/ios/Pods/Headers/Private/BindingX/EBJSMath.h
deleted file mode 120000
index 639f004..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBJSMath.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBJSMath.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBJSTransform.h b/ios/Pods/Headers/Private/BindingX/EBJSTransform.h
deleted file mode 120000
index ed54fc3..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBJSTransform.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBJSTransform.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBNativeFunction.h b/ios/Pods/Headers/Private/BindingX/EBNativeFunction.h
deleted file mode 120000
index 457b512..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBNativeFunction.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBNativeFunction.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBTaffyTuple.h b/ios/Pods/Headers/Private/BindingX/EBTaffyTuple.h
deleted file mode 120000
index 79d877a..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBTaffyTuple.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBTaffyTuple.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBUtility+WX.h b/ios/Pods/Headers/Private/BindingX/EBUtility+WX.h
deleted file mode 120000
index 8fc5a99..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBUtility+WX.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/weex/ios/Sources/EBUtility+WX.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBUtility.h b/ios/Pods/Headers/Private/BindingX/EBUtility.h
deleted file mode 120000
index 2ae9243..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBWXModule.h b/ios/Pods/Headers/Private/BindingX/EBWXModule.h
deleted file mode 120000
index d74a331..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBWXModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/weex/ios/Sources/EBWXModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBWXOldModule.h b/ios/Pods/Headers/Private/BindingX/EBWXOldModule.h
deleted file mode 120000
index be40511..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBWXOldModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/weex/ios/Sources/EBWXOldModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/EBWXUtils.h b/ios/Pods/Headers/Private/BindingX/EBWXUtils.h
deleted file mode 120000
index e81fd46..0000000
--- a/ios/Pods/Headers/Private/BindingX/EBWXUtils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/weex/ios/Sources/EBWXUtils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/BindingX/NSObject+EBTuplePacker.h b/ios/Pods/Headers/Private/BindingX/NSObject+EBTuplePacker.h
deleted file mode 120000
index 3d12eb2..0000000
--- a/ios/Pods/Headers/Private/BindingX/NSObject+EBTuplePacker.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/NSObject+EBTuplePacker.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h b/ios/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h
deleted file mode 120000
index 8457498..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/NSData+ImageContentType.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/SDImageCache.h b/ios/Pods/Headers/Private/SDWebImage/SDImageCache.h
deleted file mode 120000
index 0040b06..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/SDImageCache.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDImageCache.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h b/ios/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h
deleted file mode 120000
index 6ca2478..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageCompat.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h b/ios/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h
deleted file mode 120000
index a2f3a68..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageDecoder.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h b/ios/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h
deleted file mode 120000
index 303b03b..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageDownloader.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h b/ios/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h
deleted file mode 120000
index 99441c4..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/SDWebImageManager.h b/ios/Pods/Headers/Private/SDWebImage/SDWebImageManager.h
deleted file mode 120000
index 1b81848..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/SDWebImageManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h b/ios/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h
deleted file mode 120000
index 20e5b89..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageOperation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h b/ios/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h
deleted file mode 120000
index 50585c6..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h b/ios/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h
deleted file mode 120000
index 19d2d8e..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIButton+WebCache.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/UIImage+GIF.h b/ios/Pods/Headers/Private/SDWebImage/UIImage+GIF.h
deleted file mode 120000
index 14d5aad..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/UIImage+GIF.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImage+GIF.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h b/ios/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h
deleted file mode 120000
index 1fb9650..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/UIImage+WebP.h b/ios/Pods/Headers/Private/SDWebImage/UIImage+WebP.h
deleted file mode 120000
index 55ccb39..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/UIImage+WebP.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImage+WebP.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h b/ios/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h
deleted file mode 120000
index fd4dea4..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h b/ios/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h
deleted file mode 120000
index 0c53a47..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImageView+WebCache.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h b/ios/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h
deleted file mode 120000
index f9890c4..0000000
--- a/ios/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/SocketRocket/SRWebSocket.h b/ios/Pods/Headers/Private/SocketRocket/SRWebSocket.h
deleted file mode 120000
index b41c867..0000000
--- a/ios/Pods/Headers/Private/SocketRocket/SRWebSocket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SocketRocket/SocketRocket/SRWebSocket.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSArray+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Private/WXDevtool/NSArray+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index c311a6a..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSArray+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSArray+WX_JSONObject.h b/ios/Pods/Headers/Private/WXDevtool/NSArray+WX_JSONObject.h
deleted file mode 120000
index ddba64b..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSArray+WX_JSONObject.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSData+WXDebugger.h b/ios/Pods/Headers/Private/WXDevtool/NSData+WXDebugger.h
deleted file mode 120000
index c7bf3c9..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSData+WXDebugger.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSDate+WXDebugger.h b/ios/Pods/Headers/Private/WXDevtool/NSDate+WXDebugger.h
deleted file mode 120000
index c52e040..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSDate+WXDebugger.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSDate+WX_JSONObject.h b/ios/Pods/Headers/Private/WXDevtool/NSDate+WX_JSONObject.h
deleted file mode 120000
index 6be4298..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSDate+WX_JSONObject.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSDictionary+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Private/WXDevtool/NSDictionary+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index 9e273d7..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSDictionary+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSError+WX_JSONObject.h b/ios/Pods/Headers/Private/WXDevtool/NSError+WX_JSONObject.h
deleted file mode 120000
index ad0f673..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSError+WX_JSONObject.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSManagedObject+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Private/WXDevtool/NSManagedObject+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index 89ac62f..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSManagedObject+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSObject+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Private/WXDevtool/NSObject+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index f095f37..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSObject+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSOrderedSet+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Private/WXDevtool/NSOrderedSet+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index 0218bd9..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSOrderedSet+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/NSSet+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Private/WXDevtool/NSSet+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index c06ea1c..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/NSSet+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXApplicationCacheDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXApplicationCacheDomain.h
deleted file mode 120000
index fadbc0f..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXApplicationCacheDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXApplicationCacheTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXApplicationCacheTypes.h
deleted file mode 120000
index 3997faa..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXApplicationCacheTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXCSSDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXCSSDomain.h
deleted file mode 120000
index a15f858..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXCSSDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXCSSDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXCSSDomainController.h
deleted file mode 120000
index 7f8d12d..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXCSSDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXCSSTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXCSSTypes.h
deleted file mode 120000
index 1fc46fe..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXCSSTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXConsoleDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXConsoleDomain.h
deleted file mode 120000
index d194860..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXConsoleDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXConsoleDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXConsoleDomainController.h
deleted file mode 120000
index 24cb3a1..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXConsoleDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXConsoleTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXConsoleTypes.h
deleted file mode 120000
index 35edd5f..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXConsoleTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXContainerIndex.h b/ios/Pods/Headers/Private/WXDevtool/WXContainerIndex.h
deleted file mode 120000
index 047dd33..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXContainerIndex.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDOMDebuggerDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXDOMDebuggerDomain.h
deleted file mode 120000
index 7e98ec5..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDOMDebuggerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDOMDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXDOMDomain.h
deleted file mode 120000
index 93dbe0b..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDOMDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDOMDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXDOMDomainController.h
deleted file mode 120000
index 5f597df..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDOMDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDOMStorageDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXDOMStorageDomain.h
deleted file mode 120000
index d39bca8..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDOMStorageDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDOMStorageTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXDOMStorageTypes.h
deleted file mode 120000
index 1b2b307..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDOMStorageTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDOMTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXDOMTypes.h
deleted file mode 120000
index 47e73dd..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDOMTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDatabaseDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXDatabaseDomain.h
deleted file mode 120000
index 590b865..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDatabaseDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDatabaseTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXDatabaseTypes.h
deleted file mode 120000
index dad534e..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDatabaseTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDebugDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXDebugDomain.h
deleted file mode 120000
index a984624..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDebugDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDebugDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXDebugDomainController.h
deleted file mode 120000
index d60b1f7..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDebugDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDebugger.h b/ios/Pods/Headers/Private/WXDevtool/WXDebugger.h
deleted file mode 120000
index 63c3c47..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDebugger.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugger.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDebuggerDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXDebuggerDomain.h
deleted file mode 120000
index fd79924..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDebuggerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDebuggerTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXDebuggerTypes.h
deleted file mode 120000
index 898f99b..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDebuggerTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDebuggerUtility.h b/ios/Pods/Headers/Private/WXDevtool/WXDebuggerUtility.h
deleted file mode 120000
index 4fcdd38..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDebuggerUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDefinitions.h b/ios/Pods/Headers/Private/WXDevtool/WXDefinitions.h
deleted file mode 120000
index e025ce8..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDefinitions.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDevTool.h b/ios/Pods/Headers/Private/WXDevtool/WXDevTool.h
deleted file mode 120000
index 2ee9fd6..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDevTool.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXHeader/WXDevTool.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDevToolType.h b/ios/Pods/Headers/Private/WXDevtool/WXDevToolType.h
deleted file mode 120000
index 0d62e1a..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDevToolType.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDeviceInfo.h b/ios/Pods/Headers/Private/WXDevtool/WXDeviceInfo.h
deleted file mode 120000
index 38624ee..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDeviceInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXDomainController.h
deleted file mode 120000
index ee8f3eb..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXDynamicDebuggerDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXDynamicDebuggerDomain.h
deleted file mode 120000
index e5799fc..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXDynamicDebuggerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXFileSystemDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXFileSystemDomain.h
deleted file mode 120000
index 363a653..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXFileSystemDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXFileSystemTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXFileSystemTypes.h
deleted file mode 120000
index 355c4dc..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXFileSystemTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBDomain.h
deleted file mode 120000
index 90d42b6..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBDomainController.h
deleted file mode 120000
index dcf0cfe..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBTypes.h
deleted file mode 120000
index 4b3a3c0..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXIndexedDBTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXInspectorDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXInspectorDomain.h
deleted file mode 120000
index 2813e4e..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXInspectorDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXInspectorDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXInspectorDomainController.h
deleted file mode 120000
index 831c54e..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXInspectorDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXMemoryDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXMemoryDomain.h
deleted file mode 120000
index 0d9b9c6..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXMemoryDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXMemoryTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXMemoryTypes.h
deleted file mode 120000
index f909a62..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXMemoryTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXMonitorHandler.h b/ios/Pods/Headers/Private/WXDevtool/WXMonitorHandler.h
deleted file mode 120000
index ef29ff6..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXMonitorHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXNetworkDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXNetworkDomain.h
deleted file mode 120000
index 9bfd9ea..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXNetworkDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXNetworkDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXNetworkDomainController.h
deleted file mode 120000
index 0da5c6e..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXNetworkDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXNetworkRecorder.h b/ios/Pods/Headers/Private/WXDevtool/WXNetworkRecorder.h
deleted file mode 120000
index 10bd8ac..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXNetworkRecorder.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXNetworkTransaction.h b/ios/Pods/Headers/Private/WXDevtool/WXNetworkTransaction.h
deleted file mode 120000
index 1d8ecf0..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXNetworkTransaction.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXNetworkTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXNetworkTypes.h
deleted file mode 120000
index 66e5478..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXNetworkTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXObject.h b/ios/Pods/Headers/Private/WXDevtool/WXObject.h
deleted file mode 120000
index 6684475..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXObject.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXObject.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXPageDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXPageDomain.h
deleted file mode 120000
index abcf585..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXPageDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXPageDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXPageDomainController.h
deleted file mode 120000
index 3638e78..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXPageDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXPageDomainUtility.h b/ios/Pods/Headers/Private/WXDevtool/WXPageDomainUtility.h
deleted file mode 120000
index 3cf07de..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXPageDomainUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXPageTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXPageTypes.h
deleted file mode 120000
index ea0a316..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXPageTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXPonyDebugger.h b/ios/Pods/Headers/Private/WXDevtool/WXPonyDebugger.h
deleted file mode 120000
index de8e106..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXPonyDebugger.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPonyDebugger.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXPrettyStringPrinter.h b/ios/Pods/Headers/Private/WXDevtool/WXPrettyStringPrinter.h
deleted file mode 120000
index 4d09d32..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXPrettyStringPrinter.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXProfilerDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXProfilerDomain.h
deleted file mode 120000
index 635a5bc..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXProfilerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXProfilerDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXProfilerDomainController.h
deleted file mode 120000
index 41ed9f7..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXProfilerDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXProfilerTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXProfilerTypes.h
deleted file mode 120000
index bbc5235..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXProfilerTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXResources.h b/ios/Pods/Headers/Private/WXDevtool/WXResources.h
deleted file mode 120000
index 0e2aae5..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXResources.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXRuntimeDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXRuntimeDomain.h
deleted file mode 120000
index a41ced8..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXRuntimeDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXRuntimeDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXRuntimeDomainController.h
deleted file mode 120000
index b51dcb2..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXRuntimeDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXRuntimeTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXRuntimeTypes.h
deleted file mode 120000
index 1a867ea..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXRuntimeTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXSourceDebuggerDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXSourceDebuggerDomainController.h
deleted file mode 120000
index 8de2cf9..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXSourceDebuggerDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXTimelineDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXTimelineDomain.h
deleted file mode 120000
index 13e2dbc..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXTimelineDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXTimelineDomainController.h b/ios/Pods/Headers/Private/WXDevtool/WXTimelineDomainController.h
deleted file mode 120000
index a87a972..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXTimelineDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXTimelineTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXTimelineTypes.h
deleted file mode 120000
index 77830af..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXTimelineTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXTracingUtility.h b/ios/Pods/Headers/Private/WXDevtool/WXTracingUtility.h
deleted file mode 120000
index a0afd13..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXTracingUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXWebGLDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXWebGLDomain.h
deleted file mode 120000
index 1bdabb7..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXWebGLDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXWebGLTypes.h b/ios/Pods/Headers/Private/WXDevtool/WXWebGLTypes.h
deleted file mode 120000
index f11c023..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXWebGLTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WXDevtool/WXWorkerDomain.h b/ios/Pods/Headers/Private/WXDevtool/WXWorkerDomain.h
deleted file mode 120000
index 41f55e6..0000000
--- a/ios/Pods/Headers/Private/WXDevtool/WXWorkerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/JSContext+Weex.h b/ios/Pods/Headers/Private/WeexSDK/JSContext+Weex.h
deleted file mode 120000
index bd0dfa7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/JSContext+Weex.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/JSValue+Weex.h b/ios/Pods/Headers/Private/WeexSDK/JSValue+Weex.h
deleted file mode 120000
index 72db375..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/JSValue+Weex.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/JsonPage.h b/ios/Pods/Headers/Private/WeexSDK/JsonPage.h
deleted file mode 120000
index b2c8761..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/JsonPage.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/json/JsonPage.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/JsonRenderManager.h b/ios/Pods/Headers/Private/WeexSDK/JsonRenderManager.h
deleted file mode 120000
index dde5c7c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/JsonRenderManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/json/JsonRenderManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/NSArray+Weex.h b/ios/Pods/Headers/Private/WeexSDK/NSArray+Weex.h
deleted file mode 120000
index 8f774ad..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/NSArray+Weex.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/NSObject+WXSwizzle.h b/ios/Pods/Headers/Private/WeexSDK/NSObject+WXSwizzle.h
deleted file mode 120000
index fab5082..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/NSObject+WXSwizzle.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/NSTimer+Weex.h b/ios/Pods/Headers/Private/WeexSDK/NSTimer+Weex.h
deleted file mode 120000
index bb7c6b9..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/NSTimer+Weex.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/UIBezierPath+Weex.h b/ios/Pods/Headers/Private/WeexSDK/UIBezierPath+Weex.h
deleted file mode 120000
index 0218a8c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/UIBezierPath+Weex.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXAComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXAComponent.h
deleted file mode 120000
index 0133b34..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXAComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerCenter+Transfer.h b/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerCenter+Transfer.h
deleted file mode 120000
index d010e6c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerCenter+Transfer.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter+Transfer.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerCenter.h b/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerCenter.h
deleted file mode 120000
index d05c20c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerCenter.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerProtocol.h
deleted file mode 120000
index e815bc3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXAnalyzerProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAnalyzerProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXAnimationModule.h b/ios/Pods/Headers/Private/WeexSDK/WXAnimationModule.h
deleted file mode 120000
index f1b4314..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXAnimationModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXApmForInstance.h b/ios/Pods/Headers/Private/WeexSDK/WXApmForInstance.h
deleted file mode 120000
index 7e83e8e..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXApmForInstance.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXApmProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXApmProtocol.h
deleted file mode 120000
index f979286..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXApmProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXApmProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXAppConfiguration.h b/ios/Pods/Headers/Private/WeexSDK/WXAppConfiguration.h
deleted file mode 120000
index 85a4d59..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXAppConfiguration.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXAppMonitorProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXAppMonitorProtocol.h
deleted file mode 120000
index 6083c8c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXAppMonitorProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXAssert.h b/ios/Pods/Headers/Private/WeexSDK/WXAssert.h
deleted file mode 120000
index a5199d7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXAssert.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAssert.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXBaseViewController.h b/ios/Pods/Headers/Private/WeexSDK/WXBaseViewController.h
deleted file mode 120000
index 09ce4e0..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXBaseViewController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXBoxShadow.h b/ios/Pods/Headers/Private/WeexSDK/WXBoxShadow.h
deleted file mode 120000
index f81df43..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXBoxShadow.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXBridgeContext.h b/ios/Pods/Headers/Private/WeexSDK/WXBridgeContext.h
deleted file mode 120000
index a1ac833..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXBridgeContext.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXBridgeManager.h b/ios/Pods/Headers/Private/WeexSDK/WXBridgeManager.h
deleted file mode 120000
index eaf4a25..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXBridgeManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXBridgeMethod.h b/ios/Pods/Headers/Private/WeexSDK/WXBridgeMethod.h
deleted file mode 120000
index 002da42..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXBridgeMethod.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXBridgeProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXBridgeProtocol.h
deleted file mode 120000
index db7fcbb..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXBridgeProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXCallJSMethod.h b/ios/Pods/Headers/Private/WeexSDK/WXCallJSMethod.h
deleted file mode 120000
index 74c26e7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXCallJSMethod.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXCanvasComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXCanvasComponent.h
deleted file mode 120000
index 3c35c6a..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXCanvasComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXCanvasModule.h b/ios/Pods/Headers/Private/WeexSDK/WXCanvasModule.h
deleted file mode 120000
index 62e7701..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXCanvasModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXCellComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXCellComponent.h
deleted file mode 120000
index 0beb0f3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXCellComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXCellSlotComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXCellSlotComponent.h
deleted file mode 120000
index aab31ba..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXCellSlotComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXClipboardModule.h b/ios/Pods/Headers/Private/WeexSDK/WXClipboardModule.h
deleted file mode 120000
index caac4d5..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXClipboardModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent+BoxShadow.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent+BoxShadow.h
deleted file mode 120000
index f80b744..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent+BoxShadow.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent+DataBinding.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent+DataBinding.h
deleted file mode 120000
index 3524a70..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent+DataBinding.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent+Display.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent+Display.h
deleted file mode 120000
index 6ee42f8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent+Display.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent+Events.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent+Events.h
deleted file mode 120000
index a01e28c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent+Events.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent+Layout.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent+Layout.h
deleted file mode 120000
index 2c8a0cb..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent+Layout.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent+Navigation.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent+Navigation.h
deleted file mode 120000
index 4481640..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent+Navigation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent+PseudoClassManagement.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent+PseudoClassManagement.h
deleted file mode 120000
index 2db5d5d..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent+PseudoClassManagement.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent+ViewManagement.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent+ViewManagement.h
deleted file mode 120000
index 378764f..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent+ViewManagement.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent.h
deleted file mode 120000
index 53510af..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponentFactory.h b/ios/Pods/Headers/Private/WeexSDK/WXComponentFactory.h
deleted file mode 120000
index 782a32b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponentFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponentManager.h b/ios/Pods/Headers/Private/WeexSDK/WXComponentManager.h
deleted file mode 120000
index 2116775..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponentManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponentMethod.h b/ios/Pods/Headers/Private/WeexSDK/WXComponentMethod.h
deleted file mode 120000
index ce225d8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponentMethod.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent_internal.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent_internal.h
deleted file mode 120000
index aac1799..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent_internal.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXComponent_performance.h b/ios/Pods/Headers/Private/WeexSDK/WXComponent_performance.h
deleted file mode 120000
index 103f460..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXComponent_performance.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent_performance.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXConfigCenterProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXConfigCenterProtocol.h
deleted file mode 120000
index 810128f..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXConfigCenterProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXConfigCenterProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXConsoleLogModule.h b/ios/Pods/Headers/Private/WeexSDK/WXConsoleLogModule.h
deleted file mode 120000
index eb30647..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXConsoleLogModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXConvert.h b/ios/Pods/Headers/Private/WeexSDK/WXConvert.h
deleted file mode 120000
index bb34b6e..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXConvert.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXConvertUtility.h b/ios/Pods/Headers/Private/WeexSDK/WXConvertUtility.h
deleted file mode 120000
index 62fdcbd..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXConvertUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXCoreBridge.h b/ios/Pods/Headers/Private/WeexSDK/WXCoreBridge.h
deleted file mode 120000
index 41f6744..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXCoreBridge.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXCycleSliderComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXCycleSliderComponent.h
deleted file mode 120000
index 2e66a7b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXCycleSliderComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDataRenderHandler.h b/ios/Pods/Headers/Private/WeexSDK/WXDataRenderHandler.h
deleted file mode 120000
index 027c1af..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDataRenderHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Eagle/WXDataRenderHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDatePickerManager.h b/ios/Pods/Headers/Private/WeexSDK/WXDatePickerManager.h
deleted file mode 120000
index 8b410aa..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDatePickerManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDebugTool.h b/ios/Pods/Headers/Private/WeexSDK/WXDebugTool.h
deleted file mode 120000
index 74a43de..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDebugTool.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDefine.h b/ios/Pods/Headers/Private/WeexSDK/WXDefine.h
deleted file mode 120000
index 6216086..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDefine.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDestroyProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXDestroyProtocol.h
deleted file mode 120000
index ad88047..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDestroyProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDiffUtil.h b/ios/Pods/Headers/Private/WeexSDK/WXDiffUtil.h
deleted file mode 120000
index e48c84b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDiffUtil.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDisplayLinkManager.h b/ios/Pods/Headers/Private/WeexSDK/WXDisplayLinkManager.h
deleted file mode 120000
index 07307d6..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDisplayLinkManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDisplayQueue.h b/ios/Pods/Headers/Private/WeexSDK/WXDisplayQueue.h
deleted file mode 120000
index e9210ee..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDisplayQueue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDivComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXDivComponent.h
deleted file mode 120000
index 23750e1..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDivComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXDomModule.h b/ios/Pods/Headers/Private/WeexSDK/WXDomModule.h
deleted file mode 120000
index d152a81..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXDomModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXDomModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXEditComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXEditComponent.h
deleted file mode 120000
index cdbafda..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXEditComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXEmbedComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXEmbedComponent.h
deleted file mode 120000
index 47ba3ed..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXEmbedComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXErrorView.h b/ios/Pods/Headers/Private/WeexSDK/WXErrorView.h
deleted file mode 120000
index 5627b9a..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXErrorView.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/View/WXErrorView.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXEventModuleProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXEventModuleProtocol.h
deleted file mode 120000
index b3b7299..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXEventModuleProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXExceptionUtils.h b/ios/Pods/Headers/Private/WeexSDK/WXExceptionUtils.h
deleted file mode 120000
index 424f0a3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXExceptionUtils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXExtendCallNativeManager.h b/ios/Pods/Headers/Private/WeexSDK/WXExtendCallNativeManager.h
deleted file mode 120000
index 376f243..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXExtendCallNativeManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXExtendCallNativeProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXExtendCallNativeProtocol.h
deleted file mode 120000
index 115e1a2..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXExtendCallNativeProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXFooterComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXFooterComponent.h
deleted file mode 120000
index aefb1c9..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXFooterComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXGlobalEventModule.h b/ios/Pods/Headers/Private/WeexSDK/WXGlobalEventModule.h
deleted file mode 120000
index 3310a42..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXGlobalEventModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXHandlerFactory.h b/ios/Pods/Headers/Private/WeexSDK/WXHandlerFactory.h
deleted file mode 120000
index 9e35025..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXHandlerFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXHeaderComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXHeaderComponent.h
deleted file mode 120000
index 8dd155a..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXHeaderComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXImageComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXImageComponent.h
deleted file mode 120000
index 9b895e8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXImageComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXImgLoaderProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXImgLoaderProtocol.h
deleted file mode 120000
index 7aa4f31..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXImgLoaderProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXIndicatorComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXIndicatorComponent.h
deleted file mode 120000
index 5279745..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXIndicatorComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXInnerLayer.h b/ios/Pods/Headers/Private/WeexSDK/WXInnerLayer.h
deleted file mode 120000
index ae9a01b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXInnerLayer.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXInstanceWrap.h b/ios/Pods/Headers/Private/WeexSDK/WXInstanceWrap.h
deleted file mode 120000
index 4111e46..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXInstanceWrap.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXInvocationConfig.h b/ios/Pods/Headers/Private/WeexSDK/WXInvocationConfig.h
deleted file mode 120000
index 32ad241..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXInvocationConfig.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXJSASTParser.h b/ios/Pods/Headers/Private/WeexSDK/WXJSASTParser.h
deleted file mode 120000
index 7bf8974..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXJSASTParser.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXJSCoreBridge.h b/ios/Pods/Headers/Private/WeexSDK/WXJSCoreBridge.h
deleted file mode 120000
index 1911435..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXJSCoreBridge.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXJSExceptionInfo.h b/ios/Pods/Headers/Private/WeexSDK/WXJSExceptionInfo.h
deleted file mode 120000
index afd5338..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXJSExceptionInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXJSExceptionProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXJSExceptionProtocol.h
deleted file mode 120000
index 392c659..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXJSExceptionProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXJSFrameworkLoadDefaultImpl.h b/ios/Pods/Headers/Private/WeexSDK/WXJSFrameworkLoadDefaultImpl.h
deleted file mode 120000
index c845a06..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXJSFrameworkLoadDefaultImpl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXJSFrameworkLoadProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXJSFrameworkLoadProtocol.h
deleted file mode 120000
index bc7bb66..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXJSFrameworkLoadProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSFrameworkLoadProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXLayer.h b/ios/Pods/Headers/Private/WeexSDK/WXLayer.h
deleted file mode 120000
index 14b75b1..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXLayer.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXLayer.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXLength.h b/ios/Pods/Headers/Private/WeexSDK/WXLength.h
deleted file mode 120000
index d4759e3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXLength.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLength.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXListComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXListComponent.h
deleted file mode 120000
index 47e4d78..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXListComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXLoadingComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXLoadingComponent.h
deleted file mode 120000
index fb0eb16..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXLoadingComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXLoadingIndicator.h b/ios/Pods/Headers/Private/WeexSDK/WXLoadingIndicator.h
deleted file mode 120000
index 4c3870a..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXLoadingIndicator.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXLocaleModule.h b/ios/Pods/Headers/Private/WeexSDK/WXLocaleModule.h
deleted file mode 120000
index a579d70..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXLocaleModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXLog.h b/ios/Pods/Headers/Private/WeexSDK/WXLog.h
deleted file mode 120000
index f7db7b3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXLog.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLog.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXMetaModule.h b/ios/Pods/Headers/Private/WeexSDK/WXMetaModule.h
deleted file mode 120000
index a03761c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXMetaModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXModalUIModule.h b/ios/Pods/Headers/Private/WeexSDK/WXModalUIModule.h
deleted file mode 120000
index 0941062..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXModalUIModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXModuleFactory.h b/ios/Pods/Headers/Private/WeexSDK/WXModuleFactory.h
deleted file mode 120000
index 6b41ab8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXModuleFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXModuleMethod.h b/ios/Pods/Headers/Private/WeexSDK/WXModuleMethod.h
deleted file mode 120000
index c2d152b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXModuleMethod.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXModuleProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXModuleProtocol.h
deleted file mode 120000
index f68a70a..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXModuleProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXMonitor.h b/ios/Pods/Headers/Private/WeexSDK/WXMonitor.h
deleted file mode 120000
index 6396f0e..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXMonitor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXMultiColumnLayout.h b/ios/Pods/Headers/Private/WeexSDK/WXMultiColumnLayout.h
deleted file mode 120000
index d4f59b8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXMultiColumnLayout.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXNavigationDefaultImpl.h b/ios/Pods/Headers/Private/WeexSDK/WXNavigationDefaultImpl.h
deleted file mode 120000
index e8cd610..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXNavigationDefaultImpl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXNavigationProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXNavigationProtocol.h
deleted file mode 120000
index dc1a209..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXNavigationProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXNavigatorModule.h b/ios/Pods/Headers/Private/WeexSDK/WXNavigatorModule.h
deleted file mode 120000
index 045b585..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXNavigatorModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXNetworkProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXNetworkProtocol.h
deleted file mode 120000
index 8729ed3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXNetworkProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXPageEventNotifyEvent.h b/ios/Pods/Headers/Private/WeexSDK/WXPageEventNotifyEvent.h
deleted file mode 120000
index 5856591..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXPageEventNotifyEvent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXPageEventNotifyEvent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXPickerModule.h b/ios/Pods/Headers/Private/WeexSDK/WXPickerModule.h
deleted file mode 120000
index bc955f9..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXPickerModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXPolyfillSet.h b/ios/Pods/Headers/Private/WeexSDK/WXPolyfillSet.h
deleted file mode 120000
index a4d0dba..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXPolyfillSet.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXPrerenderManager.h b/ios/Pods/Headers/Private/WeexSDK/WXPrerenderManager.h
deleted file mode 120000
index 10a401d..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXPrerenderManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXRecycleListComponent.h
deleted file mode 120000
index e03517d..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListDataManager.h b/ios/Pods/Headers/Private/WeexSDK/WXRecycleListDataManager.h
deleted file mode 120000
index dda877c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListDataManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListLayout.h b/ios/Pods/Headers/Private/WeexSDK/WXRecycleListLayout.h
deleted file mode 120000
index 3f724ff..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListLayout.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListTemplateManager.h b/ios/Pods/Headers/Private/WeexSDK/WXRecycleListTemplateManager.h
deleted file mode 120000
index 9b8471c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListTemplateManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListUpdateManager.h b/ios/Pods/Headers/Private/WeexSDK/WXRecycleListUpdateManager.h
deleted file mode 120000
index 512321b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecycleListUpdateManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecyclerComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXRecyclerComponent.h
deleted file mode 120000
index 4ce8301..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecyclerComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecyclerDataController.h b/ios/Pods/Headers/Private/WeexSDK/WXRecyclerDataController.h
deleted file mode 120000
index 88dff3b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecyclerDataController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecyclerDragController.h b/ios/Pods/Headers/Private/WeexSDK/WXRecyclerDragController.h
deleted file mode 120000
index 97cf654..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecyclerDragController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRecyclerUpdateController.h b/ios/Pods/Headers/Private/WeexSDK/WXRecyclerUpdateController.h
deleted file mode 120000
index 7d37cbd..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRecyclerUpdateController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRefreshComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXRefreshComponent.h
deleted file mode 120000
index 103ec17..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRefreshComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXResourceLoader.h b/ios/Pods/Headers/Private/WeexSDK/WXResourceLoader.h
deleted file mode 120000
index 8f5c05b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXResourceLoader.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXResourceRequest.h b/ios/Pods/Headers/Private/WeexSDK/WXResourceRequest.h
deleted file mode 120000
index 9299603..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXResourceRequest.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXResourceRequestHandler.h b/ios/Pods/Headers/Private/WeexSDK/WXResourceRequestHandler.h
deleted file mode 120000
index 30ae072..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXResourceRequestHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXResourceRequestHandlerDefaultImpl.h b/ios/Pods/Headers/Private/WeexSDK/WXResourceRequestHandlerDefaultImpl.h
deleted file mode 120000
index 6a83d1b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXResourceRequestHandlerDefaultImpl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXResourceResponse.h b/ios/Pods/Headers/Private/WeexSDK/WXResourceResponse.h
deleted file mode 120000
index e8cbecf..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXResourceResponse.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRichText.h b/ios/Pods/Headers/Private/WeexSDK/WXRichText.h
deleted file mode 120000
index 716b9b7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRichText.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRichText.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRootView.h b/ios/Pods/Headers/Private/WeexSDK/WXRootView.h
deleted file mode 120000
index a2220c6..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRootView.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/View/WXRootView.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRootViewController.h b/ios/Pods/Headers/Private/WeexSDK/WXRootViewController.h
deleted file mode 120000
index d365cc3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRootViewController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRoundedRect.h b/ios/Pods/Headers/Private/WeexSDK/WXRoundedRect.h
deleted file mode 120000
index 71dc6f2..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRoundedRect.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXRuleManager.h b/ios/Pods/Headers/Private/WeexSDK/WXRuleManager.h
deleted file mode 120000
index c148a00..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXRuleManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSDKEngine.h b/ios/Pods/Headers/Private/WeexSDK/WXSDKEngine.h
deleted file mode 120000
index f6ca9b7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSDKEngine.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSDKError.h b/ios/Pods/Headers/Private/WeexSDK/WXSDKError.h
deleted file mode 120000
index f7afaf2..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSDKError.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance.h b/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance.h
deleted file mode 120000
index 7e56b31..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance_performance.h b/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance_performance.h
deleted file mode 120000
index 1532759..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance_performance.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance_private.h b/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance_private.h
deleted file mode 120000
index 4182eb5..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSDKInstance_private.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSDKManager.h b/ios/Pods/Headers/Private/WeexSDK/WXSDKManager.h
deleted file mode 120000
index cfeb9ef..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSDKManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXScrollerComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXScrollerComponent.h
deleted file mode 120000
index 5dcdb15..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXScrollerComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXScrollerProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXScrollerProtocol.h
deleted file mode 120000
index 38a1e56..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXScrollerProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSectionDataController.h b/ios/Pods/Headers/Private/WeexSDK/WXSectionDataController.h
deleted file mode 120000
index 404e9a7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSectionDataController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXServiceFactory.h b/ios/Pods/Headers/Private/WeexSDK/WXServiceFactory.h
deleted file mode 120000
index 95a83e7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXServiceFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSimulatorShortcutManager.h b/ios/Pods/Headers/Private/WeexSDK/WXSimulatorShortcutManager.h
deleted file mode 120000
index 9f0e5b3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSimulatorShortcutManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSliderNeighborComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXSliderNeighborComponent.h
deleted file mode 120000
index 867f85f..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSliderNeighborComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXStorageModule.h b/ios/Pods/Headers/Private/WeexSDK/WXStorageModule.h
deleted file mode 120000
index 0c2207d..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXStorageModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXStreamModule.h b/ios/Pods/Headers/Private/WeexSDK/WXStreamModule.h
deleted file mode 120000
index 7e69225..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXStreamModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXSwitchComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXSwitchComponent.h
deleted file mode 120000
index 28af3c8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXSwitchComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXTextAreaComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXTextAreaComponent.h
deleted file mode 120000
index 15ae623..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXTextAreaComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXTextComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXTextComponent.h
deleted file mode 120000
index 95adeae..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXTextComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXTextComponentProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXTextComponentProtocol.h
deleted file mode 120000
index 9a22f14..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXTextComponentProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXTextInputComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXTextInputComponent.h
deleted file mode 120000
index 31293e3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXTextInputComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeCounter.h b/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeCounter.h
deleted file mode 120000
index 770710c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeCounter.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeMutableArray.h b/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeMutableArray.h
deleted file mode 120000
index 5cea38b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeMutableArray.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeMutableDictionary.h b/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeMutableDictionary.h
deleted file mode 120000
index 9e7c443..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXThreadSafeMutableDictionary.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXTimerModule.h b/ios/Pods/Headers/Private/WeexSDK/WXTimerModule.h
deleted file mode 120000
index c3adb11..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXTimerModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXTransform.h b/ios/Pods/Headers/Private/WeexSDK/WXTransform.h
deleted file mode 120000
index f2be71b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXTransform.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXTransition.h b/ios/Pods/Headers/Private/WeexSDK/WXTransition.h
deleted file mode 120000
index 54e45e8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXTransition.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTransition.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXType.h b/ios/Pods/Headers/Private/WeexSDK/WXType.h
deleted file mode 120000
index c64d6a9..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXType.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXType.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXURLRewriteDefaultImpl.h b/ios/Pods/Headers/Private/WeexSDK/WXURLRewriteDefaultImpl.h
deleted file mode 120000
index 04fff10..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXURLRewriteDefaultImpl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXURLRewriteProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXURLRewriteProtocol.h
deleted file mode 120000
index fc842bb..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXURLRewriteProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXUtility.h b/ios/Pods/Headers/Private/WeexSDK/WXUtility.h
deleted file mode 120000
index 76e4bed..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXValidateProtocol.h b/ios/Pods/Headers/Private/WeexSDK/WXValidateProtocol.h
deleted file mode 120000
index 6cf8d1b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXValidateProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXVersion.h b/ios/Pods/Headers/Private/WeexSDK/WXVersion.h
deleted file mode 120000
index e938d0d..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXVersion.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXVersion.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXVideoComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXVideoComponent.h
deleted file mode 120000
index b470278..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXVideoComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXView.h b/ios/Pods/Headers/Private/WeexSDK/WXView.h
deleted file mode 120000
index 39ec82b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXView.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/View/WXView.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXVoiceOverModule.h b/ios/Pods/Headers/Private/WeexSDK/WXVoiceOverModule.h
deleted file mode 120000
index 5b916a6..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXVoiceOverModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXWeakObjectWrapper.h b/ios/Pods/Headers/Private/WeexSDK/WXWeakObjectWrapper.h
deleted file mode 120000
index 5d3f70c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXWeakObjectWrapper.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXWebComponent.h b/ios/Pods/Headers/Private/WeexSDK/WXWebComponent.h
deleted file mode 120000
index 7ca1d29..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXWebComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXWebSocketHandler.h b/ios/Pods/Headers/Private/WeexSDK/WXWebSocketHandler.h
deleted file mode 120000
index f7c15e4..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXWebSocketHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXWebSocketLoader.h b/ios/Pods/Headers/Private/WeexSDK/WXWebSocketLoader.h
deleted file mode 120000
index f6aae6b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXWebSocketLoader.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXWebSocketModule.h b/ios/Pods/Headers/Private/WeexSDK/WXWebSocketModule.h
deleted file mode 120000
index 1d71c4a..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXWebSocketModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WXWebViewModule.h b/ios/Pods/Headers/Private/WeexSDK/WXWebViewModule.h
deleted file mode 120000
index b7e6783..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WXWebViewModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WeexApiHeader.h b/ios/Pods/Headers/Private/WeexSDK/WeexApiHeader.h
deleted file mode 120000
index 7158cd7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WeexApiHeader.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/include/WeexApiHeader.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WeexApiValue.h b/ios/Pods/Headers/Private/WeexSDK/WeexApiValue.h
deleted file mode 120000
index 78347bc..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WeexApiValue.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/include/WeexApiValue.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/WeexSDK.h b/ios/Pods/Headers/Private/WeexSDK/WeexSDK.h
deleted file mode 120000
index 89cb69c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/WeexSDK.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/WeexSDK.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/closure.h b/ios/Pods/Headers/Private/WeexSDK/closure.h
deleted file mode 120000
index 98da831..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/closure.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/closure.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/common.h b/ios/Pods/Headers/Private/WeexSDK/common.h
deleted file mode 120000
index ab6d441..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/common.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/common.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/constants_name.h b/ios/Pods/Headers/Private/WeexSDK/constants_name.h
deleted file mode 120000
index ce65451..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/constants_name.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/css/constants_name.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/constants_value.h b/ios/Pods/Headers/Private/WeexSDK/constants_value.h
deleted file mode 120000
index e7596c4..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/constants_value.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/css/constants_value.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/core_constants.h b/ios/Pods/Headers/Private/WeexSDK/core_constants.h
deleted file mode 120000
index f656185..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/core_constants.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/core_constants.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/core_environment.h b/ios/Pods/Headers/Private/WeexSDK/core_environment.h
deleted file mode 120000
index 82c89f0..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/core_environment.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/config/core_environment.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/core_side_in_platform.h b/ios/Pods/Headers/Private/WeexSDK/core_side_in_platform.h
deleted file mode 120000
index 348bb36..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/core_side_in_platform.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/bridge/platform/core_side_in_platform.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/core_side_in_script.h b/ios/Pods/Headers/Private/WeexSDK/core_side_in_script.h
deleted file mode 120000
index 354107e..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/core_side_in_script.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/bridge/script/core_side_in_script.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/css_value_getter.h b/ios/Pods/Headers/Private/WeexSDK/css_value_getter.h
deleted file mode 120000
index 3b14368..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/css_value_getter.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/css/css_value_getter.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/default_request_handler.h b/ios/Pods/Headers/Private/WeexSDK/default_request_handler.h
deleted file mode 120000
index 6eac6aa..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/default_request_handler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/network/ios/default_request_handler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/dom_wson.h b/ios/Pods/Headers/Private/WeexSDK/dom_wson.h
deleted file mode 120000
index 2f10963..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/dom_wson.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/parser/dom_wson.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/eagle_bridge.h b/ios/Pods/Headers/Private/WeexSDK/eagle_bridge.h
deleted file mode 120000
index c7979c1..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/eagle_bridge.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/bridge/eagle_bridge.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/flex_enum.h b/ios/Pods/Headers/Private/WeexSDK/flex_enum.h
deleted file mode 120000
index ccc7745..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/flex_enum.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/layout/flex_enum.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/http_module.h b/ios/Pods/Headers/Private/WeexSDK/http_module.h
deleted file mode 120000
index 59855a1..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/http_module.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/network/http_module.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/icu_utf.h b/ios/Pods/Headers/Private/WeexSDK/icu_utf.h
deleted file mode 120000
index e09bf26..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/icu_utf.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/third_party/icu/icu_utf.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/json11.hpp b/ios/Pods/Headers/Private/WeexSDK/json11.hpp
deleted file mode 120000
index fdba8a6..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/json11.hpp
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/third_party/json11/json11.hpp
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/layout.h b/ios/Pods/Headers/Private/WeexSDK/layout.h
deleted file mode 120000
index cf49da8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/layout.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/layout/layout.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/log_bridge.h b/ios/Pods/Headers/Private/WeexSDK/log_bridge.h
deleted file mode 120000
index d0f62b7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/log_bridge.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/bridge/log_bridge.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/log_defines.h b/ios/Pods/Headers/Private/WeexSDK/log_defines.h
deleted file mode 120000
index 66f3015..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/log_defines.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/log_defines.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/make_copyable.h b/ios/Pods/Headers/Private/WeexSDK/make_copyable.h
deleted file mode 120000
index ac795c3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/make_copyable.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/make_copyable.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/measure_func_adapter.h b/ios/Pods/Headers/Private/WeexSDK/measure_func_adapter.h
deleted file mode 120000
index 956beb7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/measure_func_adapter.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/layout/measure_func_adapter.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/message_loop.h b/ios/Pods/Headers/Private/WeexSDK/message_loop.h
deleted file mode 120000
index 87ea48f..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/message_loop.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/message_loop/message_loop.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/message_pump.h b/ios/Pods/Headers/Private/WeexSDK/message_pump.h
deleted file mode 120000
index 05a13af..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/message_pump.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/message_loop/message_pump.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/message_pump_darwin.h b/ios/Pods/Headers/Private/WeexSDK/message_pump_darwin.h
deleted file mode 120000
index 5c7ae78..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/message_pump_darwin.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/message_loop/message_pump_darwin.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/message_pump_posix.h b/ios/Pods/Headers/Private/WeexSDK/message_pump_posix.h
deleted file mode 120000
index f3e13ea..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/message_pump_posix.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/message_loop/message_pump_posix.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/platform_bridge.h b/ios/Pods/Headers/Private/WeexSDK/platform_bridge.h
deleted file mode 120000
index 899748f..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/platform_bridge.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/bridge/platform_bridge.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_add_element.h b/ios/Pods/Headers/Private/WeexSDK/render_action_add_element.h
deleted file mode 120000
index 662f79e..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_add_element.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_add_element.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_add_event.h b/ios/Pods/Headers/Private/WeexSDK/render_action_add_event.h
deleted file mode 120000
index bb4bb61..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_add_event.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_add_event.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_appendtree_createfinish.h b/ios/Pods/Headers/Private/WeexSDK/render_action_appendtree_createfinish.h
deleted file mode 120000
index 0c5c371..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_appendtree_createfinish.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_appendtree_createfinish.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_createbody.h b/ios/Pods/Headers/Private/WeexSDK/render_action_createbody.h
deleted file mode 120000
index a822942..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_createbody.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_createbody.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_createfinish.h b/ios/Pods/Headers/Private/WeexSDK/render_action_createfinish.h
deleted file mode 120000
index 17295ca..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_createfinish.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_createfinish.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_interface.h b/ios/Pods/Headers/Private/WeexSDK/render_action_interface.h
deleted file mode 120000
index 6c244a3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_interface.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_interface.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_layout.h b/ios/Pods/Headers/Private/WeexSDK/render_action_layout.h
deleted file mode 120000
index 1cd1658..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_layout.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_layout.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_move_element.h b/ios/Pods/Headers/Private/WeexSDK/render_action_move_element.h
deleted file mode 120000
index 98dd392..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_move_element.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_move_element.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_remove_element.h b/ios/Pods/Headers/Private/WeexSDK/render_action_remove_element.h
deleted file mode 120000
index aa581db..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_remove_element.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_remove_element.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_remove_event.h b/ios/Pods/Headers/Private/WeexSDK/render_action_remove_event.h
deleted file mode 120000
index 172f215..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_remove_event.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_remove_event.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_render_success.h b/ios/Pods/Headers/Private/WeexSDK/render_action_render_success.h
deleted file mode 120000
index 0240cbf..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_render_success.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_render_success.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_trigger_vsync.h b/ios/Pods/Headers/Private/WeexSDK/render_action_trigger_vsync.h
deleted file mode 120000
index bb349e7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_trigger_vsync.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_trigger_vsync.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_update_attr.h b/ios/Pods/Headers/Private/WeexSDK/render_action_update_attr.h
deleted file mode 120000
index aac7dc9..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_update_attr.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_update_attr.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_action_update_style.h b/ios/Pods/Headers/Private/WeexSDK/render_action_update_style.h
deleted file mode 120000
index e62b632..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_action_update_style.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/action/render_action_update_style.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_appbar.h b/ios/Pods/Headers/Private/WeexSDK/render_appbar.h
deleted file mode 120000
index 2c4fe93..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_appbar.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/render_appbar.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_appbar_factory.h b/ios/Pods/Headers/Private/WeexSDK/render_appbar_factory.h
deleted file mode 120000
index 1dd6c2b..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_appbar_factory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_appbar_factory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_cell.h b/ios/Pods/Headers/Private/WeexSDK/render_cell.h
deleted file mode 120000
index 6852ae0..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_cell.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/render_cell.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_cell_factory.h b/ios/Pods/Headers/Private/WeexSDK/render_cell_factory.h
deleted file mode 120000
index 65809a7..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_cell_factory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_cell_factory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_creator.h b/ios/Pods/Headers/Private/WeexSDK/render_creator.h
deleted file mode 120000
index 345633e..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_creator.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_creator.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_factory_interface.h b/ios/Pods/Headers/Private/WeexSDK/render_factory_interface.h
deleted file mode 120000
index 6689621..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_factory_interface.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_factory_interface.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_list.h b/ios/Pods/Headers/Private/WeexSDK/render_list.h
deleted file mode 120000
index 7a8a2f6..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_list.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/render_list.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_list_factory.h b/ios/Pods/Headers/Private/WeexSDK/render_list_factory.h
deleted file mode 120000
index 24cfa34..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_list_factory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_list_factory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_manager.h b/ios/Pods/Headers/Private/WeexSDK/render_manager.h
deleted file mode 120000
index 7e760af..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_manager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/manager/render_manager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_mask.h b/ios/Pods/Headers/Private/WeexSDK/render_mask.h
deleted file mode 120000
index a569c62..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_mask.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/render_mask.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_mask_factory.h b/ios/Pods/Headers/Private/WeexSDK/render_mask_factory.h
deleted file mode 120000
index 7c35308..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_mask_factory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_mask_factory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_object.h b/ios/Pods/Headers/Private/WeexSDK/render_object.h
deleted file mode 120000
index df24af8..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_object.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/render_object.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_object_interface.h b/ios/Pods/Headers/Private/WeexSDK/render_object_interface.h
deleted file mode 120000
index 0f66821..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_object_interface.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_object_interface.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_page.h b/ios/Pods/Headers/Private/WeexSDK/render_page.h
deleted file mode 120000
index 86a6c35..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_page.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/page/render_page.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_page_base.h b/ios/Pods/Headers/Private/WeexSDK/render_page_base.h
deleted file mode 120000
index cdac602..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_page_base.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/page/render_page_base.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_page_custom.h b/ios/Pods/Headers/Private/WeexSDK/render_page_custom.h
deleted file mode 120000
index 2f2746e..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_page_custom.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/page/render_page_custom.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_performance.h b/ios/Pods/Headers/Private/WeexSDK/render_performance.h
deleted file mode 120000
index ec35d15..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_performance.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/moniter/render_performance.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_scroller.h b/ios/Pods/Headers/Private/WeexSDK/render_scroller.h
deleted file mode 120000
index 7aeb2d1..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_scroller.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/render_scroller.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_scroller_factory.h b/ios/Pods/Headers/Private/WeexSDK/render_scroller_factory.h
deleted file mode 120000
index dd4fe41..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_scroller_factory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_scroller_factory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_target.h b/ios/Pods/Headers/Private/WeexSDK/render_target.h
deleted file mode 120000
index 5a4b20d..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_target.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/target/render_target.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_text.h b/ios/Pods/Headers/Private/WeexSDK/render_text.h
deleted file mode 120000
index 467c0c2..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_text.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/render_text.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_text_factory.h b/ios/Pods/Headers/Private/WeexSDK/render_text_factory.h
deleted file mode 120000
index 2dcf32c..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_text_factory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_text_factory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/render_type.h b/ios/Pods/Headers/Private/WeexSDK/render_type.h
deleted file mode 120000
index 8adf0b0..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/render_type.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/render_type.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/request_handler.h b/ios/Pods/Headers/Private/WeexSDK/request_handler.h
deleted file mode 120000
index dcee5bb..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/request_handler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/network/request_handler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/script_bridge.h b/ios/Pods/Headers/Private/WeexSDK/script_bridge.h
deleted file mode 120000
index 1b939f3..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/script_bridge.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/bridge/script_bridge.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/simple_render_factory.h b/ios/Pods/Headers/Private/WeexSDK/simple_render_factory.h
deleted file mode 120000
index 6fb5c12..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/simple_render_factory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/render/node/factory/simple_render_factory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/string_util.h b/ios/Pods/Headers/Private/WeexSDK/string_util.h
deleted file mode 120000
index 7cc4ac6..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/string_util.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/string_util.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/style.h b/ios/Pods/Headers/Private/WeexSDK/style.h
deleted file mode 120000
index 2ec4ccb..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/style.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/layout/style.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/thread.h b/ios/Pods/Headers/Private/WeexSDK/thread.h
deleted file mode 120000
index cabf4dd..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/thread.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/thread/thread.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/thread_impl.h b/ios/Pods/Headers/Private/WeexSDK/thread_impl.h
deleted file mode 120000
index c7f2989..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/thread_impl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/thread/thread_impl.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/thread_impl_darwin.h b/ios/Pods/Headers/Private/WeexSDK/thread_impl_darwin.h
deleted file mode 120000
index 5c71bad..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/thread_impl_darwin.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/thread/thread_impl_darwin.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/thread_impl_posix.h b/ios/Pods/Headers/Private/WeexSDK/thread_impl_posix.h
deleted file mode 120000
index ee8112d..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/thread_impl_posix.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/thread/thread_impl_posix.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/thread_local.h b/ios/Pods/Headers/Private/WeexSDK/thread_local.h
deleted file mode 120000
index da96fff..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/thread_local.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/thread/thread_local.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/time_calculator.h b/ios/Pods/Headers/Private/WeexSDK/time_calculator.h
deleted file mode 120000
index 7275488..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/time_calculator.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/time_calculator.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/time_point.h b/ios/Pods/Headers/Private/WeexSDK/time_point.h
deleted file mode 120000
index 8e41a00..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/time_point.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/time_point.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/time_unit.h b/ios/Pods/Headers/Private/WeexSDK/time_unit.h
deleted file mode 120000
index d7281bb..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/time_unit.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/time_unit.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/time_utils.h b/ios/Pods/Headers/Private/WeexSDK/time_utils.h
deleted file mode 120000
index f7a681e..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/time_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/time_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/view_utils.h b/ios/Pods/Headers/Private/WeexSDK/view_utils.h
deleted file mode 120000
index 2d5a1e4..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/view_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/common/view_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/waitable_event.h b/ios/Pods/Headers/Private/WeexSDK/waitable_event.h
deleted file mode 120000
index 4efaa50..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/waitable_event.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/base/thread/waitable_event.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/weex_core_manager.h b/ios/Pods/Headers/Private/WeexSDK/weex_core_manager.h
deleted file mode 120000
index e98d979..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/weex_core_manager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/manager/weex_core_manager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/wson.h b/ios/Pods/Headers/Private/WeexSDK/wson.h
deleted file mode 120000
index 30d0b37..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/wson.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/wson/wson.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/wson_parser.h b/ios/Pods/Headers/Private/WeexSDK/wson_parser.h
deleted file mode 120000
index 9bdd3b2..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/wson_parser.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/wson/wson_parser.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/wson_util.h b/ios/Pods/Headers/Private/WeexSDK/wson_util.h
deleted file mode 120000
index 237a7dd..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/wson_util.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/wson/wson_util.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/wx_api.h b/ios/Pods/Headers/Private/WeexSDK/wx_api.h
deleted file mode 120000
index 88fade1..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/wx_api.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/api/wx_api.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/WeexSDK/wx_type_define.h b/ios/Pods/Headers/Private/WeexSDK/wx_type_define.h
deleted file mode 120000
index c9f7321..0000000
--- a/ios/Pods/Headers/Private/WeexSDK/wx_type_define.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/bridge/wx_type_define.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/alphai_dec.h b/ios/Pods/Headers/Private/libwebp/alphai_dec.h
deleted file mode 120000
index 56033f9..0000000
--- a/ios/Pods/Headers/Private/libwebp/alphai_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/alphai_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/animi.h b/ios/Pods/Headers/Private/libwebp/animi.h
deleted file mode 120000
index 03a1a39..0000000
--- a/ios/Pods/Headers/Private/libwebp/animi.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/mux/animi.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/backward_references_enc.h b/ios/Pods/Headers/Private/libwebp/backward_references_enc.h
deleted file mode 120000
index 63bd649..0000000
--- a/ios/Pods/Headers/Private/libwebp/backward_references_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/backward_references_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/bit_reader_inl_utils.h b/ios/Pods/Headers/Private/libwebp/bit_reader_inl_utils.h
deleted file mode 120000
index f633e01..0000000
--- a/ios/Pods/Headers/Private/libwebp/bit_reader_inl_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/bit_reader_inl_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/bit_reader_utils.h b/ios/Pods/Headers/Private/libwebp/bit_reader_utils.h
deleted file mode 120000
index 4599a53..0000000
--- a/ios/Pods/Headers/Private/libwebp/bit_reader_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/bit_reader_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/bit_writer_utils.h b/ios/Pods/Headers/Private/libwebp/bit_writer_utils.h
deleted file mode 120000
index dc9eb1b..0000000
--- a/ios/Pods/Headers/Private/libwebp/bit_writer_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/bit_writer_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/color_cache_utils.h b/ios/Pods/Headers/Private/libwebp/color_cache_utils.h
deleted file mode 120000
index f224335..0000000
--- a/ios/Pods/Headers/Private/libwebp/color_cache_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/color_cache_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/common_dec.h b/ios/Pods/Headers/Private/libwebp/common_dec.h
deleted file mode 120000
index 27df772..0000000
--- a/ios/Pods/Headers/Private/libwebp/common_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/common_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/common_sse2.h b/ios/Pods/Headers/Private/libwebp/common_sse2.h
deleted file mode 120000
index 07f8eef..0000000
--- a/ios/Pods/Headers/Private/libwebp/common_sse2.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/common_sse2.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/common_sse41.h b/ios/Pods/Headers/Private/libwebp/common_sse41.h
deleted file mode 120000
index fa2f46e..0000000
--- a/ios/Pods/Headers/Private/libwebp/common_sse41.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/common_sse41.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/cost_enc.h b/ios/Pods/Headers/Private/libwebp/cost_enc.h
deleted file mode 120000
index 7005dad..0000000
--- a/ios/Pods/Headers/Private/libwebp/cost_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/cost_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/dsp.h b/ios/Pods/Headers/Private/libwebp/dsp.h
deleted file mode 120000
index 1bace90..0000000
--- a/ios/Pods/Headers/Private/libwebp/dsp.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/dsp.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/endian_inl_utils.h b/ios/Pods/Headers/Private/libwebp/endian_inl_utils.h
deleted file mode 120000
index 9567247..0000000
--- a/ios/Pods/Headers/Private/libwebp/endian_inl_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/endian_inl_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/filters_utils.h b/ios/Pods/Headers/Private/libwebp/filters_utils.h
deleted file mode 120000
index 9e8efbc..0000000
--- a/ios/Pods/Headers/Private/libwebp/filters_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/filters_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/histogram_enc.h b/ios/Pods/Headers/Private/libwebp/histogram_enc.h
deleted file mode 120000
index 7aad9f4..0000000
--- a/ios/Pods/Headers/Private/libwebp/histogram_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/histogram_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/huffman_encode_utils.h b/ios/Pods/Headers/Private/libwebp/huffman_encode_utils.h
deleted file mode 120000
index 10f66b3..0000000
--- a/ios/Pods/Headers/Private/libwebp/huffman_encode_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/huffman_encode_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/huffman_utils.h b/ios/Pods/Headers/Private/libwebp/huffman_utils.h
deleted file mode 120000
index d167f81..0000000
--- a/ios/Pods/Headers/Private/libwebp/huffman_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/huffman_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/lossless.h b/ios/Pods/Headers/Private/libwebp/lossless.h
deleted file mode 120000
index a3b07cf..0000000
--- a/ios/Pods/Headers/Private/libwebp/lossless.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/lossless.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/lossless_common.h b/ios/Pods/Headers/Private/libwebp/lossless_common.h
deleted file mode 120000
index 96b0bbe..0000000
--- a/ios/Pods/Headers/Private/libwebp/lossless_common.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/lossless_common.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/mips_macro.h b/ios/Pods/Headers/Private/libwebp/mips_macro.h
deleted file mode 120000
index da76de0..0000000
--- a/ios/Pods/Headers/Private/libwebp/mips_macro.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/mips_macro.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/msa_macro.h b/ios/Pods/Headers/Private/libwebp/msa_macro.h
deleted file mode 120000
index 71689df..0000000
--- a/ios/Pods/Headers/Private/libwebp/msa_macro.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/msa_macro.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/muxi.h b/ios/Pods/Headers/Private/libwebp/muxi.h
deleted file mode 120000
index d96d598..0000000
--- a/ios/Pods/Headers/Private/libwebp/muxi.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/mux/muxi.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/neon.h b/ios/Pods/Headers/Private/libwebp/neon.h
deleted file mode 120000
index 8213e48..0000000
--- a/ios/Pods/Headers/Private/libwebp/neon.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/neon.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/quant.h b/ios/Pods/Headers/Private/libwebp/quant.h
deleted file mode 120000
index 9b7c88e..0000000
--- a/ios/Pods/Headers/Private/libwebp/quant.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/quant.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/quant_levels_dec_utils.h b/ios/Pods/Headers/Private/libwebp/quant_levels_dec_utils.h
deleted file mode 120000
index a87d53e..0000000
--- a/ios/Pods/Headers/Private/libwebp/quant_levels_dec_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/quant_levels_dec_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/quant_levels_utils.h b/ios/Pods/Headers/Private/libwebp/quant_levels_utils.h
deleted file mode 120000
index 662e202..0000000
--- a/ios/Pods/Headers/Private/libwebp/quant_levels_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/quant_levels_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/random_utils.h b/ios/Pods/Headers/Private/libwebp/random_utils.h
deleted file mode 120000
index f83752e..0000000
--- a/ios/Pods/Headers/Private/libwebp/random_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/random_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/rescaler_utils.h b/ios/Pods/Headers/Private/libwebp/rescaler_utils.h
deleted file mode 120000
index d120ed0..0000000
--- a/ios/Pods/Headers/Private/libwebp/rescaler_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/rescaler_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/thread_utils.h b/ios/Pods/Headers/Private/libwebp/thread_utils.h
deleted file mode 120000
index 0e380e6..0000000
--- a/ios/Pods/Headers/Private/libwebp/thread_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/thread_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/utils.h b/ios/Pods/Headers/Private/libwebp/utils.h
deleted file mode 120000
index ba04668..0000000
--- a/ios/Pods/Headers/Private/libwebp/utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/vp8_dec.h b/ios/Pods/Headers/Private/libwebp/vp8_dec.h
deleted file mode 120000
index bb2863f..0000000
--- a/ios/Pods/Headers/Private/libwebp/vp8_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/vp8_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/vp8i_dec.h b/ios/Pods/Headers/Private/libwebp/vp8i_dec.h
deleted file mode 120000
index 38bda7e..0000000
--- a/ios/Pods/Headers/Private/libwebp/vp8i_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/vp8i_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/vp8i_enc.h b/ios/Pods/Headers/Private/libwebp/vp8i_enc.h
deleted file mode 120000
index d47bf01..0000000
--- a/ios/Pods/Headers/Private/libwebp/vp8i_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/vp8i_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/vp8li_dec.h b/ios/Pods/Headers/Private/libwebp/vp8li_dec.h
deleted file mode 120000
index 92ada24..0000000
--- a/ios/Pods/Headers/Private/libwebp/vp8li_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/vp8li_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/vp8li_enc.h b/ios/Pods/Headers/Private/libwebp/vp8li_enc.h
deleted file mode 120000
index d6487ea..0000000
--- a/ios/Pods/Headers/Private/libwebp/vp8li_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/vp8li_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/webp/decode.h b/ios/Pods/Headers/Private/libwebp/webp/decode.h
deleted file mode 120000
index cb9e6a2..0000000
--- a/ios/Pods/Headers/Private/libwebp/webp/decode.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/decode.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/webp/demux.h b/ios/Pods/Headers/Private/libwebp/webp/demux.h
deleted file mode 120000
index 4b1b108..0000000
--- a/ios/Pods/Headers/Private/libwebp/webp/demux.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/demux.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/webp/encode.h b/ios/Pods/Headers/Private/libwebp/webp/encode.h
deleted file mode 120000
index 336598a..0000000
--- a/ios/Pods/Headers/Private/libwebp/webp/encode.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/encode.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/webp/format_constants.h b/ios/Pods/Headers/Private/libwebp/webp/format_constants.h
deleted file mode 120000
index 2b3e467..0000000
--- a/ios/Pods/Headers/Private/libwebp/webp/format_constants.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/format_constants.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/webp/mux.h b/ios/Pods/Headers/Private/libwebp/webp/mux.h
deleted file mode 120000
index 03e4964..0000000
--- a/ios/Pods/Headers/Private/libwebp/webp/mux.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/mux.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/webp/mux_types.h b/ios/Pods/Headers/Private/libwebp/webp/mux_types.h
deleted file mode 120000
index 2076102..0000000
--- a/ios/Pods/Headers/Private/libwebp/webp/mux_types.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/mux_types.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/webp/types.h b/ios/Pods/Headers/Private/libwebp/webp/types.h
deleted file mode 120000
index e00cbb0..0000000
--- a/ios/Pods/Headers/Private/libwebp/webp/types.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/types.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/webpi_dec.h b/ios/Pods/Headers/Private/libwebp/webpi_dec.h
deleted file mode 120000
index a1ee1f1..0000000
--- a/ios/Pods/Headers/Private/libwebp/webpi_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/webpi_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Private/libwebp/yuv.h b/ios/Pods/Headers/Private/libwebp/yuv.h
deleted file mode 120000
index eaa7fa9..0000000
--- a/ios/Pods/Headers/Private/libwebp/yuv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/yuv.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/BindingX.h b/ios/Pods/Headers/Public/BindingX/BindingX.h
deleted file mode 120000
index 0eaaace..0000000
--- a/ios/Pods/Headers/Public/BindingX/BindingX.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/BindingX.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBBindData.h b/ios/Pods/Headers/Public/BindingX/EBBindData.h
deleted file mode 120000
index 5c0826d..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBBindData.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBBindData.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpression.h b/ios/Pods/Headers/Public/BindingX/EBExpression.h
deleted file mode 120000
index d3cbfe6..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpression.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpression.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpressionExecutor.h b/ios/Pods/Headers/Public/BindingX/EBExpressionExecutor.h
deleted file mode 120000
index 16c3e3a..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpressionExecutor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionExecutor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpressionGesture.h b/ios/Pods/Headers/Public/BindingX/EBExpressionGesture.h
deleted file mode 120000
index b6cbc90..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpressionGesture.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionGesture.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpressionHandler.h b/ios/Pods/Headers/Public/BindingX/EBExpressionHandler.h
deleted file mode 120000
index d753c13..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpressionHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpressionOrientation.h b/ios/Pods/Headers/Public/BindingX/EBExpressionOrientation.h
deleted file mode 120000
index c7b3641..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpressionOrientation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionOrientation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpressionProperty.h b/ios/Pods/Headers/Public/BindingX/EBExpressionProperty.h
deleted file mode 120000
index df45cdc..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpressionProperty.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionProperty.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpressionScope.h b/ios/Pods/Headers/Public/BindingX/EBExpressionScope.h
deleted file mode 120000
index 9444eeb..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpressionScope.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionScope.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpressionScroller.h b/ios/Pods/Headers/Public/BindingX/EBExpressionScroller.h
deleted file mode 120000
index cad5ddf..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpressionScroller.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionScroller.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBExpressionTiming.h b/ios/Pods/Headers/Public/BindingX/EBExpressionTiming.h
deleted file mode 120000
index 9c3ca6d..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBExpressionTiming.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBExpressionTiming.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBGyroEuler.h b/ios/Pods/Headers/Public/BindingX/EBGyroEuler.h
deleted file mode 120000
index bc6bbb2..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBGyroEuler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroEuler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBGyroManager.h b/ios/Pods/Headers/Public/BindingX/EBGyroManager.h
deleted file mode 120000
index befc3b8..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBGyroManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBGyroOrientationEvaluator.h b/ios/Pods/Headers/Public/BindingX/EBGyroOrientationEvaluator.h
deleted file mode 120000
index 1fe09a0..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBGyroOrientationEvaluator.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroOrientationEvaluator.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBGyroQuaternion.h b/ios/Pods/Headers/Public/BindingX/EBGyroQuaternion.h
deleted file mode 120000
index f6d6991..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBGyroQuaternion.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroQuaternion.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBGyroVector3.h b/ios/Pods/Headers/Public/BindingX/EBGyroVector3.h
deleted file mode 120000
index 0a18e94..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBGyroVector3.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBGyroVector3.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBHandlerFactory.h b/ios/Pods/Headers/Public/BindingX/EBHandlerFactory.h
deleted file mode 120000
index 2f7f057..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBHandlerFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBHandlerFactory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBJSEase.h b/ios/Pods/Headers/Public/BindingX/EBJSEase.h
deleted file mode 120000
index c3ec980..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBJSEase.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBJSEase.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBJSEvaluate.h b/ios/Pods/Headers/Public/BindingX/EBJSEvaluate.h
deleted file mode 120000
index 4363bbe..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBJSEvaluate.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBJSEvaluate.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBJSMath.h b/ios/Pods/Headers/Public/BindingX/EBJSMath.h
deleted file mode 120000
index 639f004..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBJSMath.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBJSMath.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBJSTransform.h b/ios/Pods/Headers/Public/BindingX/EBJSTransform.h
deleted file mode 120000
index ed54fc3..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBJSTransform.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBJSTransform.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBNativeFunction.h b/ios/Pods/Headers/Public/BindingX/EBNativeFunction.h
deleted file mode 120000
index 457b512..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBNativeFunction.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBNativeFunction.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBTaffyTuple.h b/ios/Pods/Headers/Public/BindingX/EBTaffyTuple.h
deleted file mode 120000
index 79d877a..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBTaffyTuple.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBTaffyTuple.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBUtility+WX.h b/ios/Pods/Headers/Public/BindingX/EBUtility+WX.h
deleted file mode 120000
index 8fc5a99..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBUtility+WX.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/weex/ios/Sources/EBUtility+WX.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBUtility.h b/ios/Pods/Headers/Public/BindingX/EBUtility.h
deleted file mode 120000
index 2ae9243..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/EBUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBWXModule.h b/ios/Pods/Headers/Public/BindingX/EBWXModule.h
deleted file mode 120000
index d74a331..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBWXModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/weex/ios/Sources/EBWXModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBWXOldModule.h b/ios/Pods/Headers/Public/BindingX/EBWXOldModule.h
deleted file mode 120000
index be40511..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBWXOldModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/weex/ios/Sources/EBWXOldModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/EBWXUtils.h b/ios/Pods/Headers/Public/BindingX/EBWXUtils.h
deleted file mode 120000
index e81fd46..0000000
--- a/ios/Pods/Headers/Public/BindingX/EBWXUtils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/weex/ios/Sources/EBWXUtils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/BindingX/NSObject+EBTuplePacker.h b/ios/Pods/Headers/Public/BindingX/NSObject+EBTuplePacker.h
deleted file mode 120000
index 3d12eb2..0000000
--- a/ios/Pods/Headers/Public/BindingX/NSObject+EBTuplePacker.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../BindingX/core/ios/BindingX/NSObject+EBTuplePacker.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h b/ios/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h
deleted file mode 120000
index 8457498..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/NSData+ImageContentType.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/SDImageCache.h b/ios/Pods/Headers/Public/SDWebImage/SDImageCache.h
deleted file mode 120000
index 0040b06..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/SDImageCache.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDImageCache.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h b/ios/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h
deleted file mode 120000
index 6ca2478..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageCompat.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h b/ios/Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h
deleted file mode 120000
index a2f3a68..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageDecoder.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h b/ios/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h
deleted file mode 120000
index 303b03b..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageDownloader.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h b/ios/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h
deleted file mode 120000
index 99441c4..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/SDWebImageManager.h b/ios/Pods/Headers/Public/SDWebImage/SDWebImageManager.h
deleted file mode 120000
index 1b81848..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/SDWebImageManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h b/ios/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h
deleted file mode 120000
index 20e5b89..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImageOperation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h b/ios/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h
deleted file mode 120000
index 50585c6..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h b/ios/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h
deleted file mode 120000
index 19d2d8e..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIButton+WebCache.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/UIImage+GIF.h b/ios/Pods/Headers/Public/SDWebImage/UIImage+GIF.h
deleted file mode 120000
index 14d5aad..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/UIImage+GIF.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImage+GIF.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h b/ios/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h
deleted file mode 120000
index 1fb9650..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/UIImage+WebP.h b/ios/Pods/Headers/Public/SDWebImage/UIImage+WebP.h
deleted file mode 120000
index 55ccb39..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/UIImage+WebP.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImage+WebP.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h b/ios/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h
deleted file mode 120000
index fd4dea4..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h b/ios/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h
deleted file mode 120000
index 0c53a47..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIImageView+WebCache.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h b/ios/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h
deleted file mode 120000
index f9890c4..0000000
--- a/ios/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/SocketRocket/SRWebSocket.h b/ios/Pods/Headers/Public/SocketRocket/SRWebSocket.h
deleted file mode 120000
index b41c867..0000000
--- a/ios/Pods/Headers/Public/SocketRocket/SRWebSocket.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../SocketRocket/SocketRocket/SRWebSocket.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSArray+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Public/WXDevtool/NSArray+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index c311a6a..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSArray+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSArray+WX_JSONObject.h b/ios/Pods/Headers/Public/WXDevtool/NSArray+WX_JSONObject.h
deleted file mode 120000
index ddba64b..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSArray+WX_JSONObject.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSData+WXDebugger.h b/ios/Pods/Headers/Public/WXDevtool/NSData+WXDebugger.h
deleted file mode 120000
index c7bf3c9..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSData+WXDebugger.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSDate+WXDebugger.h b/ios/Pods/Headers/Public/WXDevtool/NSDate+WXDebugger.h
deleted file mode 120000
index c52e040..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSDate+WXDebugger.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSDate+WX_JSONObject.h b/ios/Pods/Headers/Public/WXDevtool/NSDate+WX_JSONObject.h
deleted file mode 120000
index 6be4298..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSDate+WX_JSONObject.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSDictionary+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Public/WXDevtool/NSDictionary+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index 9e273d7..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSDictionary+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSError+WX_JSONObject.h b/ios/Pods/Headers/Public/WXDevtool/NSError+WX_JSONObject.h
deleted file mode 120000
index ad0f673..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSError+WX_JSONObject.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSManagedObject+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Public/WXDevtool/NSManagedObject+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index 89ac62f..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSManagedObject+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSObject+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Public/WXDevtool/NSObject+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index f095f37..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSObject+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSOrderedSet+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Public/WXDevtool/NSOrderedSet+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index 0218bd9..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSOrderedSet+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/NSSet+WXRuntimePropertyDescriptor.h b/ios/Pods/Headers/Public/WXDevtool/NSSet+WXRuntimePropertyDescriptor.h
deleted file mode 120000
index c06ea1c..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/NSSet+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXApplicationCacheDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXApplicationCacheDomain.h
deleted file mode 120000
index fadbc0f..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXApplicationCacheDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXApplicationCacheTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXApplicationCacheTypes.h
deleted file mode 120000
index 3997faa..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXApplicationCacheTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXCSSDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXCSSDomain.h
deleted file mode 120000
index a15f858..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXCSSDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXCSSDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXCSSDomainController.h
deleted file mode 120000
index 7f8d12d..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXCSSDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXCSSTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXCSSTypes.h
deleted file mode 120000
index 1fc46fe..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXCSSTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXConsoleDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXConsoleDomain.h
deleted file mode 120000
index d194860..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXConsoleDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXConsoleDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXConsoleDomainController.h
deleted file mode 120000
index 24cb3a1..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXConsoleDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXConsoleTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXConsoleTypes.h
deleted file mode 120000
index 35edd5f..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXConsoleTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXContainerIndex.h b/ios/Pods/Headers/Public/WXDevtool/WXContainerIndex.h
deleted file mode 120000
index 047dd33..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXContainerIndex.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDOMDebuggerDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXDOMDebuggerDomain.h
deleted file mode 120000
index 7e98ec5..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDOMDebuggerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDOMDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXDOMDomain.h
deleted file mode 120000
index 93dbe0b..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDOMDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDOMDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXDOMDomainController.h
deleted file mode 120000
index 5f597df..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDOMDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDOMStorageDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXDOMStorageDomain.h
deleted file mode 120000
index d39bca8..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDOMStorageDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDOMStorageTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXDOMStorageTypes.h
deleted file mode 120000
index 1b2b307..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDOMStorageTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDOMTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXDOMTypes.h
deleted file mode 120000
index 47e73dd..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDOMTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDatabaseDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXDatabaseDomain.h
deleted file mode 120000
index 590b865..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDatabaseDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDatabaseTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXDatabaseTypes.h
deleted file mode 120000
index dad534e..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDatabaseTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDebugDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXDebugDomain.h
deleted file mode 120000
index a984624..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDebugDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDebugDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXDebugDomainController.h
deleted file mode 120000
index d60b1f7..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDebugDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDebugger.h b/ios/Pods/Headers/Public/WXDevtool/WXDebugger.h
deleted file mode 120000
index 63c3c47..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDebugger.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugger.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDebuggerDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXDebuggerDomain.h
deleted file mode 120000
index fd79924..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDebuggerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDebuggerTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXDebuggerTypes.h
deleted file mode 120000
index 898f99b..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDebuggerTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDebuggerUtility.h b/ios/Pods/Headers/Public/WXDevtool/WXDebuggerUtility.h
deleted file mode 120000
index 4fcdd38..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDebuggerUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDefinitions.h b/ios/Pods/Headers/Public/WXDevtool/WXDefinitions.h
deleted file mode 120000
index e025ce8..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDefinitions.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDevTool.h b/ios/Pods/Headers/Public/WXDevtool/WXDevTool.h
deleted file mode 120000
index 2ee9fd6..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDevTool.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXHeader/WXDevTool.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDevToolType.h b/ios/Pods/Headers/Public/WXDevtool/WXDevToolType.h
deleted file mode 120000
index 0d62e1a..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDevToolType.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDeviceInfo.h b/ios/Pods/Headers/Public/WXDevtool/WXDeviceInfo.h
deleted file mode 120000
index 38624ee..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDeviceInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXDomainController.h
deleted file mode 120000
index ee8f3eb..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXDynamicDebuggerDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXDynamicDebuggerDomain.h
deleted file mode 120000
index e5799fc..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXDynamicDebuggerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXFileSystemDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXFileSystemDomain.h
deleted file mode 120000
index 363a653..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXFileSystemDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXFileSystemTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXFileSystemTypes.h
deleted file mode 120000
index 355c4dc..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXFileSystemTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBDomain.h
deleted file mode 120000
index 90d42b6..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBDomainController.h
deleted file mode 120000
index dcf0cfe..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBTypes.h
deleted file mode 120000
index 4b3a3c0..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXIndexedDBTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXInspectorDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXInspectorDomain.h
deleted file mode 120000
index 2813e4e..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXInspectorDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXInspectorDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXInspectorDomainController.h
deleted file mode 120000
index 831c54e..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXInspectorDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXMemoryDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXMemoryDomain.h
deleted file mode 120000
index 0d9b9c6..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXMemoryDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXMemoryTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXMemoryTypes.h
deleted file mode 120000
index f909a62..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXMemoryTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXMonitorHandler.h b/ios/Pods/Headers/Public/WXDevtool/WXMonitorHandler.h
deleted file mode 120000
index ef29ff6..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXMonitorHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXNetworkDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXNetworkDomain.h
deleted file mode 120000
index 9bfd9ea..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXNetworkDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXNetworkDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXNetworkDomainController.h
deleted file mode 120000
index 0da5c6e..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXNetworkDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXNetworkRecorder.h b/ios/Pods/Headers/Public/WXDevtool/WXNetworkRecorder.h
deleted file mode 120000
index 10bd8ac..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXNetworkRecorder.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXNetworkTransaction.h b/ios/Pods/Headers/Public/WXDevtool/WXNetworkTransaction.h
deleted file mode 120000
index 1d8ecf0..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXNetworkTransaction.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXNetworkTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXNetworkTypes.h
deleted file mode 120000
index 66e5478..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXNetworkTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXObject.h b/ios/Pods/Headers/Public/WXDevtool/WXObject.h
deleted file mode 120000
index 6684475..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXObject.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXObject.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXPageDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXPageDomain.h
deleted file mode 120000
index abcf585..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXPageDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXPageDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXPageDomainController.h
deleted file mode 120000
index 3638e78..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXPageDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXPageDomainUtility.h b/ios/Pods/Headers/Public/WXDevtool/WXPageDomainUtility.h
deleted file mode 120000
index 3cf07de..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXPageDomainUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXPageTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXPageTypes.h
deleted file mode 120000
index ea0a316..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXPageTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXPonyDebugger.h b/ios/Pods/Headers/Public/WXDevtool/WXPonyDebugger.h
deleted file mode 120000
index de8e106..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXPonyDebugger.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPonyDebugger.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXPrettyStringPrinter.h b/ios/Pods/Headers/Public/WXDevtool/WXPrettyStringPrinter.h
deleted file mode 120000
index 4d09d32..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXPrettyStringPrinter.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXProfilerDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXProfilerDomain.h
deleted file mode 120000
index 635a5bc..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXProfilerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXProfilerDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXProfilerDomainController.h
deleted file mode 120000
index 41ed9f7..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXProfilerDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXProfilerTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXProfilerTypes.h
deleted file mode 120000
index bbc5235..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXProfilerTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXResources.h b/ios/Pods/Headers/Public/WXDevtool/WXResources.h
deleted file mode 120000
index 0e2aae5..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXResources.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXRuntimeDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXRuntimeDomain.h
deleted file mode 120000
index a41ced8..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXRuntimeDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXRuntimeDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXRuntimeDomainController.h
deleted file mode 120000
index b51dcb2..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXRuntimeDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXRuntimeTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXRuntimeTypes.h
deleted file mode 120000
index 1a867ea..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXRuntimeTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXSourceDebuggerDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXSourceDebuggerDomainController.h
deleted file mode 120000
index 8de2cf9..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXSourceDebuggerDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXTimelineDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXTimelineDomain.h
deleted file mode 120000
index 13e2dbc..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXTimelineDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXTimelineDomainController.h b/ios/Pods/Headers/Public/WXDevtool/WXTimelineDomainController.h
deleted file mode 120000
index a87a972..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXTimelineDomainController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXTimelineTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXTimelineTypes.h
deleted file mode 120000
index 77830af..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXTimelineTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXTracingUtility.h b/ios/Pods/Headers/Public/WXDevtool/WXTracingUtility.h
deleted file mode 120000
index a0afd13..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXTracingUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXWebGLDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXWebGLDomain.h
deleted file mode 120000
index 1bdabb7..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXWebGLDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXWebGLTypes.h b/ios/Pods/Headers/Public/WXDevtool/WXWebGLTypes.h
deleted file mode 120000
index f11c023..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXWebGLTypes.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WXDevtool/WXWorkerDomain.h b/ios/Pods/Headers/Public/WXDevtool/WXWorkerDomain.h
deleted file mode 120000
index 41f55e6..0000000
--- a/ios/Pods/Headers/Public/WXDevtool/WXWorkerDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/JSContext+Weex.h b/ios/Pods/Headers/Public/WeexSDK/JSContext+Weex.h
deleted file mode 120000
index bd0dfa7..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/JSContext+Weex.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/NSObject+WXSwizzle.h b/ios/Pods/Headers/Public/WeexSDK/NSObject+WXSwizzle.h
deleted file mode 120000
index fab5082..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/NSObject+WXSwizzle.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXAComponent.h b/ios/Pods/Headers/Public/WeexSDK/WXAComponent.h
deleted file mode 120000
index 0133b34..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXAComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXAnalyzerCenter.h b/ios/Pods/Headers/Public/WeexSDK/WXAnalyzerCenter.h
deleted file mode 120000
index d05c20c..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXAnalyzerCenter.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXAnalyzerProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXAnalyzerProtocol.h
deleted file mode 120000
index e815bc3..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXAnalyzerProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAnalyzerProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXApmForInstance.h b/ios/Pods/Headers/Public/WeexSDK/WXApmForInstance.h
deleted file mode 120000
index 7e83e8e..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXApmForInstance.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXApmProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXApmProtocol.h
deleted file mode 120000
index f979286..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXApmProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXApmProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXAppConfiguration.h b/ios/Pods/Headers/Public/WeexSDK/WXAppConfiguration.h
deleted file mode 120000
index 85a4d59..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXAppConfiguration.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXAppMonitorProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXAppMonitorProtocol.h
deleted file mode 120000
index 6083c8c..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXAppMonitorProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXBaseViewController.h b/ios/Pods/Headers/Public/WeexSDK/WXBaseViewController.h
deleted file mode 120000
index 09ce4e0..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXBaseViewController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXBridgeManager.h b/ios/Pods/Headers/Public/WeexSDK/WXBridgeManager.h
deleted file mode 120000
index eaf4a25..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXBridgeManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXBridgeMethod.h b/ios/Pods/Headers/Public/WeexSDK/WXBridgeMethod.h
deleted file mode 120000
index 002da42..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXBridgeMethod.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXBridgeProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXBridgeProtocol.h
deleted file mode 120000
index db7fcbb..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXBridgeProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXComponent+Layout.h b/ios/Pods/Headers/Public/WeexSDK/WXComponent+Layout.h
deleted file mode 120000
index 2c8a0cb..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXComponent+Layout.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXComponent.h b/ios/Pods/Headers/Public/WeexSDK/WXComponent.h
deleted file mode 120000
index 53510af..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXComponentFactory.h b/ios/Pods/Headers/Public/WeexSDK/WXComponentFactory.h
deleted file mode 120000
index 782a32b..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXComponentFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXComponentManager.h b/ios/Pods/Headers/Public/WeexSDK/WXComponentManager.h
deleted file mode 120000
index 2116775..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXComponentManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXConfigCenterProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXConfigCenterProtocol.h
deleted file mode 120000
index 810128f..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXConfigCenterProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXConfigCenterProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXConvert.h b/ios/Pods/Headers/Public/WeexSDK/WXConvert.h
deleted file mode 120000
index bb34b6e..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXConvert.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXConvertUtility.h b/ios/Pods/Headers/Public/WeexSDK/WXConvertUtility.h
deleted file mode 120000
index 62fdcbd..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXConvertUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXDataRenderHandler.h b/ios/Pods/Headers/Public/WeexSDK/WXDataRenderHandler.h
deleted file mode 120000
index 027c1af..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXDataRenderHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Eagle/WXDataRenderHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXDebugTool.h b/ios/Pods/Headers/Public/WeexSDK/WXDebugTool.h
deleted file mode 120000
index 74a43de..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXDebugTool.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXDefine.h b/ios/Pods/Headers/Public/WeexSDK/WXDefine.h
deleted file mode 120000
index 6216086..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXDefine.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXDestroyProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXDestroyProtocol.h
deleted file mode 120000
index ad88047..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXDestroyProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXErrorView.h b/ios/Pods/Headers/Public/WeexSDK/WXErrorView.h
deleted file mode 120000
index 5627b9a..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXErrorView.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/View/WXErrorView.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXEventModuleProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXEventModuleProtocol.h
deleted file mode 120000
index b3b7299..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXEventModuleProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXExceptionUtils.h b/ios/Pods/Headers/Public/WeexSDK/WXExceptionUtils.h
deleted file mode 120000
index 424f0a3..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXExceptionUtils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXExtendCallNativeProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXExtendCallNativeProtocol.h
deleted file mode 120000
index 115e1a2..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXExtendCallNativeProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXHandlerFactory.h b/ios/Pods/Headers/Public/WeexSDK/WXHandlerFactory.h
deleted file mode 120000
index 9e35025..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXHandlerFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXImgLoaderProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXImgLoaderProtocol.h
deleted file mode 120000
index 7aa4f31..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXImgLoaderProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXIndicatorComponent.h b/ios/Pods/Headers/Public/WeexSDK/WXIndicatorComponent.h
deleted file mode 120000
index 5279745..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXIndicatorComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXInvocationConfig.h b/ios/Pods/Headers/Public/WeexSDK/WXInvocationConfig.h
deleted file mode 120000
index 32ad241..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXInvocationConfig.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXJSExceptionInfo.h b/ios/Pods/Headers/Public/WeexSDK/WXJSExceptionInfo.h
deleted file mode 120000
index afd5338..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXJSExceptionInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXJSExceptionProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXJSExceptionProtocol.h
deleted file mode 120000
index 392c659..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXJSExceptionProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXJSFrameworkLoadProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXJSFrameworkLoadProtocol.h
deleted file mode 120000
index bc7bb66..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXJSFrameworkLoadProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSFrameworkLoadProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXListComponent.h b/ios/Pods/Headers/Public/WeexSDK/WXListComponent.h
deleted file mode 120000
index 47e4d78..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXListComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXLog.h b/ios/Pods/Headers/Public/WeexSDK/WXLog.h
deleted file mode 120000
index f7db7b3..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXLog.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLog.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXModalUIModule.h b/ios/Pods/Headers/Public/WeexSDK/WXModalUIModule.h
deleted file mode 120000
index 0941062..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXModalUIModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXModuleProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXModuleProtocol.h
deleted file mode 120000
index f68a70a..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXModuleProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXMonitor.h b/ios/Pods/Headers/Public/WeexSDK/WXMonitor.h
deleted file mode 120000
index 6396f0e..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXMonitor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXNavigationDefaultImpl.h b/ios/Pods/Headers/Public/WeexSDK/WXNavigationDefaultImpl.h
deleted file mode 120000
index e8cd610..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXNavigationDefaultImpl.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXNavigationProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXNavigationProtocol.h
deleted file mode 120000
index dc1a209..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXNavigationProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXNetworkProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXNetworkProtocol.h
deleted file mode 120000
index 8729ed3..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXNetworkProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXPageEventNotifyEvent.h b/ios/Pods/Headers/Public/WeexSDK/WXPageEventNotifyEvent.h
deleted file mode 120000
index 5856591..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXPageEventNotifyEvent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXPageEventNotifyEvent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXPrerenderManager.h b/ios/Pods/Headers/Public/WeexSDK/WXPrerenderManager.h
deleted file mode 120000
index 10a401d..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXPrerenderManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXRecyclerComponent.h b/ios/Pods/Headers/Public/WeexSDK/WXRecyclerComponent.h
deleted file mode 120000
index 4ce8301..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXRecyclerComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXRefreshComponent.h b/ios/Pods/Headers/Public/WeexSDK/WXRefreshComponent.h
deleted file mode 120000
index 103ec17..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXRefreshComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXResourceLoader.h b/ios/Pods/Headers/Public/WeexSDK/WXResourceLoader.h
deleted file mode 120000
index 8f5c05b..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXResourceLoader.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXResourceRequest.h b/ios/Pods/Headers/Public/WeexSDK/WXResourceRequest.h
deleted file mode 120000
index 9299603..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXResourceRequest.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXResourceRequestHandler.h b/ios/Pods/Headers/Public/WeexSDK/WXResourceRequestHandler.h
deleted file mode 120000
index 30ae072..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXResourceRequestHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXResourceResponse.h b/ios/Pods/Headers/Public/WeexSDK/WXResourceResponse.h
deleted file mode 120000
index e8cbecf..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXResourceResponse.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXRichText.h b/ios/Pods/Headers/Public/WeexSDK/WXRichText.h
deleted file mode 120000
index 716b9b7..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXRichText.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRichText.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXRootViewController.h b/ios/Pods/Headers/Public/WeexSDK/WXRootViewController.h
deleted file mode 120000
index d365cc3..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXRootViewController.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXSDKEngine.h b/ios/Pods/Headers/Public/WeexSDK/WXSDKEngine.h
deleted file mode 120000
index f6ca9b7..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXSDKEngine.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXSDKError.h b/ios/Pods/Headers/Public/WeexSDK/WXSDKError.h
deleted file mode 120000
index f7afaf2..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXSDKError.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXSDKInstance.h b/ios/Pods/Headers/Public/WeexSDK/WXSDKInstance.h
deleted file mode 120000
index 7e56b31..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXSDKInstance.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXSDKManager.h b/ios/Pods/Headers/Public/WeexSDK/WXSDKManager.h
deleted file mode 120000
index cfeb9ef..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXSDKManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXScrollerComponent.h b/ios/Pods/Headers/Public/WeexSDK/WXScrollerComponent.h
deleted file mode 120000
index 5dcdb15..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXScrollerComponent.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXScrollerProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXScrollerProtocol.h
deleted file mode 120000
index 38a1e56..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXScrollerProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXStreamModule.h b/ios/Pods/Headers/Public/WeexSDK/WXStreamModule.h
deleted file mode 120000
index 7e69225..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXStreamModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXTextComponentProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXTextComponentProtocol.h
deleted file mode 120000
index 9a22f14..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXTextComponentProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXType.h b/ios/Pods/Headers/Public/WeexSDK/WXType.h
deleted file mode 120000
index c64d6a9..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXType.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXType.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXURLRewriteProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXURLRewriteProtocol.h
deleted file mode 120000
index fc842bb..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXURLRewriteProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXUtility.h b/ios/Pods/Headers/Public/WeexSDK/WXUtility.h
deleted file mode 120000
index 76e4bed..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXUtility.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXValidateProtocol.h b/ios/Pods/Headers/Public/WeexSDK/WXValidateProtocol.h
deleted file mode 120000
index 6cf8d1b..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXValidateProtocol.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXView.h b/ios/Pods/Headers/Public/WeexSDK/WXView.h
deleted file mode 120000
index 39ec82b..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXView.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/View/WXView.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXVoiceOverModule.h b/ios/Pods/Headers/Public/WeexSDK/WXVoiceOverModule.h
deleted file mode 120000
index 5b916a6..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXVoiceOverModule.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WXWebSocketHandler.h b/ios/Pods/Headers/Public/WeexSDK/WXWebSocketHandler.h
deleted file mode 120000
index f7c15e4..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WXWebSocketHandler.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/WeexSDK.h b/ios/Pods/Headers/Public/WeexSDK/WeexSDK.h
deleted file mode 120000
index 89cb69c..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/WeexSDK.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/ios/sdk/WeexSDK/Sources/WeexSDK.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/eagle_bridge.h b/ios/Pods/Headers/Public/WeexSDK/eagle_bridge.h
deleted file mode 120000
index c7979c1..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/eagle_bridge.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/bridge/eagle_bridge.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/flex_enum.h b/ios/Pods/Headers/Public/WeexSDK/flex_enum.h
deleted file mode 120000
index ccc7745..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/flex_enum.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/layout/flex_enum.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/layout.h b/ios/Pods/Headers/Public/WeexSDK/layout.h
deleted file mode 120000
index cf49da8..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/layout.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/layout/layout.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/WeexSDK/style.h b/ios/Pods/Headers/Public/WeexSDK/style.h
deleted file mode 120000
index 2ec4ccb..0000000
--- a/ios/Pods/Headers/Public/WeexSDK/style.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../WeexSDK/weex_core/Source/core/layout/style.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/alphai_dec.h b/ios/Pods/Headers/Public/libwebp/alphai_dec.h
deleted file mode 120000
index 56033f9..0000000
--- a/ios/Pods/Headers/Public/libwebp/alphai_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/alphai_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/animi.h b/ios/Pods/Headers/Public/libwebp/animi.h
deleted file mode 120000
index 03a1a39..0000000
--- a/ios/Pods/Headers/Public/libwebp/animi.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/mux/animi.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/backward_references_enc.h b/ios/Pods/Headers/Public/libwebp/backward_references_enc.h
deleted file mode 120000
index 63bd649..0000000
--- a/ios/Pods/Headers/Public/libwebp/backward_references_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/backward_references_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/bit_reader_inl_utils.h b/ios/Pods/Headers/Public/libwebp/bit_reader_inl_utils.h
deleted file mode 120000
index f633e01..0000000
--- a/ios/Pods/Headers/Public/libwebp/bit_reader_inl_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/bit_reader_inl_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/bit_reader_utils.h b/ios/Pods/Headers/Public/libwebp/bit_reader_utils.h
deleted file mode 120000
index 4599a53..0000000
--- a/ios/Pods/Headers/Public/libwebp/bit_reader_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/bit_reader_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/bit_writer_utils.h b/ios/Pods/Headers/Public/libwebp/bit_writer_utils.h
deleted file mode 120000
index dc9eb1b..0000000
--- a/ios/Pods/Headers/Public/libwebp/bit_writer_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/bit_writer_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/color_cache_utils.h b/ios/Pods/Headers/Public/libwebp/color_cache_utils.h
deleted file mode 120000
index f224335..0000000
--- a/ios/Pods/Headers/Public/libwebp/color_cache_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/color_cache_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/common_dec.h b/ios/Pods/Headers/Public/libwebp/common_dec.h
deleted file mode 120000
index 27df772..0000000
--- a/ios/Pods/Headers/Public/libwebp/common_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/common_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/common_sse2.h b/ios/Pods/Headers/Public/libwebp/common_sse2.h
deleted file mode 120000
index 07f8eef..0000000
--- a/ios/Pods/Headers/Public/libwebp/common_sse2.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/common_sse2.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/common_sse41.h b/ios/Pods/Headers/Public/libwebp/common_sse41.h
deleted file mode 120000
index fa2f46e..0000000
--- a/ios/Pods/Headers/Public/libwebp/common_sse41.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/common_sse41.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/cost_enc.h b/ios/Pods/Headers/Public/libwebp/cost_enc.h
deleted file mode 120000
index 7005dad..0000000
--- a/ios/Pods/Headers/Public/libwebp/cost_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/cost_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/dsp.h b/ios/Pods/Headers/Public/libwebp/dsp.h
deleted file mode 120000
index 1bace90..0000000
--- a/ios/Pods/Headers/Public/libwebp/dsp.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/dsp.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/endian_inl_utils.h b/ios/Pods/Headers/Public/libwebp/endian_inl_utils.h
deleted file mode 120000
index 9567247..0000000
--- a/ios/Pods/Headers/Public/libwebp/endian_inl_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/endian_inl_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/filters_utils.h b/ios/Pods/Headers/Public/libwebp/filters_utils.h
deleted file mode 120000
index 9e8efbc..0000000
--- a/ios/Pods/Headers/Public/libwebp/filters_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/filters_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/histogram_enc.h b/ios/Pods/Headers/Public/libwebp/histogram_enc.h
deleted file mode 120000
index 7aad9f4..0000000
--- a/ios/Pods/Headers/Public/libwebp/histogram_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/histogram_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/huffman_encode_utils.h b/ios/Pods/Headers/Public/libwebp/huffman_encode_utils.h
deleted file mode 120000
index 10f66b3..0000000
--- a/ios/Pods/Headers/Public/libwebp/huffman_encode_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/huffman_encode_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/huffman_utils.h b/ios/Pods/Headers/Public/libwebp/huffman_utils.h
deleted file mode 120000
index d167f81..0000000
--- a/ios/Pods/Headers/Public/libwebp/huffman_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/huffman_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/lossless.h b/ios/Pods/Headers/Public/libwebp/lossless.h
deleted file mode 120000
index a3b07cf..0000000
--- a/ios/Pods/Headers/Public/libwebp/lossless.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/lossless.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/lossless_common.h b/ios/Pods/Headers/Public/libwebp/lossless_common.h
deleted file mode 120000
index 96b0bbe..0000000
--- a/ios/Pods/Headers/Public/libwebp/lossless_common.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/lossless_common.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/mips_macro.h b/ios/Pods/Headers/Public/libwebp/mips_macro.h
deleted file mode 120000
index da76de0..0000000
--- a/ios/Pods/Headers/Public/libwebp/mips_macro.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/mips_macro.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/msa_macro.h b/ios/Pods/Headers/Public/libwebp/msa_macro.h
deleted file mode 120000
index 71689df..0000000
--- a/ios/Pods/Headers/Public/libwebp/msa_macro.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/msa_macro.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/muxi.h b/ios/Pods/Headers/Public/libwebp/muxi.h
deleted file mode 120000
index d96d598..0000000
--- a/ios/Pods/Headers/Public/libwebp/muxi.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/mux/muxi.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/neon.h b/ios/Pods/Headers/Public/libwebp/neon.h
deleted file mode 120000
index 8213e48..0000000
--- a/ios/Pods/Headers/Public/libwebp/neon.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/neon.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/quant.h b/ios/Pods/Headers/Public/libwebp/quant.h
deleted file mode 120000
index 9b7c88e..0000000
--- a/ios/Pods/Headers/Public/libwebp/quant.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/quant.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/quant_levels_dec_utils.h b/ios/Pods/Headers/Public/libwebp/quant_levels_dec_utils.h
deleted file mode 120000
index a87d53e..0000000
--- a/ios/Pods/Headers/Public/libwebp/quant_levels_dec_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/quant_levels_dec_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/quant_levels_utils.h b/ios/Pods/Headers/Public/libwebp/quant_levels_utils.h
deleted file mode 120000
index 662e202..0000000
--- a/ios/Pods/Headers/Public/libwebp/quant_levels_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/quant_levels_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/random_utils.h b/ios/Pods/Headers/Public/libwebp/random_utils.h
deleted file mode 120000
index f83752e..0000000
--- a/ios/Pods/Headers/Public/libwebp/random_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/random_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/rescaler_utils.h b/ios/Pods/Headers/Public/libwebp/rescaler_utils.h
deleted file mode 120000
index d120ed0..0000000
--- a/ios/Pods/Headers/Public/libwebp/rescaler_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/rescaler_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/thread_utils.h b/ios/Pods/Headers/Public/libwebp/thread_utils.h
deleted file mode 120000
index 0e380e6..0000000
--- a/ios/Pods/Headers/Public/libwebp/thread_utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/thread_utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/utils.h b/ios/Pods/Headers/Public/libwebp/utils.h
deleted file mode 120000
index ba04668..0000000
--- a/ios/Pods/Headers/Public/libwebp/utils.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/utils/utils.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/vp8_dec.h b/ios/Pods/Headers/Public/libwebp/vp8_dec.h
deleted file mode 120000
index bb2863f..0000000
--- a/ios/Pods/Headers/Public/libwebp/vp8_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/vp8_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/vp8i_dec.h b/ios/Pods/Headers/Public/libwebp/vp8i_dec.h
deleted file mode 120000
index 38bda7e..0000000
--- a/ios/Pods/Headers/Public/libwebp/vp8i_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/vp8i_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/vp8i_enc.h b/ios/Pods/Headers/Public/libwebp/vp8i_enc.h
deleted file mode 120000
index d47bf01..0000000
--- a/ios/Pods/Headers/Public/libwebp/vp8i_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/vp8i_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/vp8li_dec.h b/ios/Pods/Headers/Public/libwebp/vp8li_dec.h
deleted file mode 120000
index 92ada24..0000000
--- a/ios/Pods/Headers/Public/libwebp/vp8li_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/vp8li_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/vp8li_enc.h b/ios/Pods/Headers/Public/libwebp/vp8li_enc.h
deleted file mode 120000
index d6487ea..0000000
--- a/ios/Pods/Headers/Public/libwebp/vp8li_enc.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/enc/vp8li_enc.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/webp/decode.h b/ios/Pods/Headers/Public/libwebp/webp/decode.h
deleted file mode 120000
index cb9e6a2..0000000
--- a/ios/Pods/Headers/Public/libwebp/webp/decode.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/decode.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/webp/demux.h b/ios/Pods/Headers/Public/libwebp/webp/demux.h
deleted file mode 120000
index 4b1b108..0000000
--- a/ios/Pods/Headers/Public/libwebp/webp/demux.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/demux.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/webp/encode.h b/ios/Pods/Headers/Public/libwebp/webp/encode.h
deleted file mode 120000
index 336598a..0000000
--- a/ios/Pods/Headers/Public/libwebp/webp/encode.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/encode.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/webp/format_constants.h b/ios/Pods/Headers/Public/libwebp/webp/format_constants.h
deleted file mode 120000
index 2b3e467..0000000
--- a/ios/Pods/Headers/Public/libwebp/webp/format_constants.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/format_constants.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/webp/mux.h b/ios/Pods/Headers/Public/libwebp/webp/mux.h
deleted file mode 120000
index 03e4964..0000000
--- a/ios/Pods/Headers/Public/libwebp/webp/mux.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/mux.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/webp/mux_types.h b/ios/Pods/Headers/Public/libwebp/webp/mux_types.h
deleted file mode 120000
index 2076102..0000000
--- a/ios/Pods/Headers/Public/libwebp/webp/mux_types.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/mux_types.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/webp/types.h b/ios/Pods/Headers/Public/libwebp/webp/types.h
deleted file mode 120000
index e00cbb0..0000000
--- a/ios/Pods/Headers/Public/libwebp/webp/types.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../../libwebp/src/webp/types.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/webpi_dec.h b/ios/Pods/Headers/Public/libwebp/webpi_dec.h
deleted file mode 120000
index a1ee1f1..0000000
--- a/ios/Pods/Headers/Public/libwebp/webpi_dec.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dec/webpi_dec.h
\ No newline at end of file
diff --git a/ios/Pods/Headers/Public/libwebp/yuv.h b/ios/Pods/Headers/Public/libwebp/yuv.h
deleted file mode 120000
index eaa7fa9..0000000
--- a/ios/Pods/Headers/Public/libwebp/yuv.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../libwebp/src/dsp/yuv.h
\ No newline at end of file
diff --git a/ios/Pods/Local Podspecs/WeexSDK.podspec.json b/ios/Pods/Local Podspecs/WeexSDK.podspec.json
deleted file mode 100644
index 0616038..0000000
--- a/ios/Pods/Local Podspecs/WeexSDK.podspec.json
+++ /dev/null
@@ -1,133 +0,0 @@
-{
-  "name": "WeexSDK",
-  "version": "0.24.0",
-  "summary": "WeexSDK Source.",
-  "description": "A framework for building Mobile cross-platform UI",
-  "homepage": "https://github.com/alibaba/weex",
-  "license": {
-    "type": "Copyright",
-    "text": "           Alibaba-INC copyright\n"
-  },
-  "authors": {
-    "cxfeng1": "cxfeng1@gmail.com",
-    "boboning": "ningli928@163.com",
-    "yangshengtao": "yangshengtao1314@163.com",
-    "kfeagle": "sunjjbobo@163.com",
-    "acton393": "zhangxing610321@gmail.com",
-    "wqyfavor": "wqyfavor88@gmail.com",
-    "doumafang ": "doumafang@gmail.com"
-  },
-  "platforms": {
-    "ios": "9.0"
-  },
-  "source": {
-    "path": "."
-  },
-  "source_files": [
-    "ios/sdk/WeexSDK/Sources/**/*.{h,m,mm,c,cpp,cc}",
-    "weex_core/Source/base/**/*.{h,hpp,m,mm,c,cpp,cc}",
-    "weex_core/Source/core/**/*.{h,hpp,m,mm,c,cpp,cc}",
-    "weex_core/Source/wson/**/*.{h,hpp,m,mm,c,cpp,cc}",
-    "weex_core/Source/third_party/**/*.{h,hpp,m,mm,c,cpp,cc}",
-    "weex_core/Source/include/**/*.{h,hpp,m,mm,c,cpp,cc}"
-  ],
-  "exclude_files": [
-    "weex_core/Source/**/*android.{h,hpp,m,mm,c,cpp,cc}",
-    "weex_core/Source/base/android",
-    "weex_core/Source/base/base64",
-    "weex_core/Source/base/crash",
-    "weex_core/Source/base/utils",
-    "weex_core/Source/third_party/IPC",
-    "weex_core/Source/core/network/android/",
-    "weex_core/Source/include/JavaScriptCore/",
-    "weex_core/Source/include/wtf"
-  ],
-  "private_header_files": "ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.h",
-  "public_header_files": [
-    "ios/sdk/WeexSDK/Sources/WeexSDK.h",
-    "ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h",
-    "ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h",
-    "ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h",
-    "ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h",
-    "ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.h",
-    "ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h",
-    "ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h",
-    "ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h",
-    "ios/sdk/WeexSDK/Sources/Component/WXListComponent.h",
-    "ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h",
-    "ios/sdk/WeexSDK/Sources/Component/WXRichText.h",
-    "ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h",
-    "ios/sdk/WeexSDK/Sources/Component/WXAComponent.h",
-    "ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h",
-    "ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h",
-    "ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h",
-    "ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h",
-    "ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h",
-    "ios/sdk/WeexSDK/Sources/View/WXView.h",
-    "ios/sdk/WeexSDK/Sources/View/WXErrorView.h",
-    "ios/sdk/WeexSDK/Sources/Protocol/*.h",
-    "ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h",
-    "ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h",
-    "ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h",
-    "ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h",
-    "ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h",
-    "ios/sdk/WeexSDK/Sources/Model/WXComponent.h",
-    "ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h",
-    "ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h",
-    "ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.h",
-    "ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h",
-    "ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h",
-    "ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h",
-    "ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h",
-    "ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h",
-    "ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h",
-    "ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h",
-    "ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h",
-    "ios/sdk/WeexSDK/Sources/Eagle/WXDataRenderHandler.h",
-    "ios/sdk/WeexSDK/Sources/Utility/WXConvert.h",
-    "ios/sdk/WeexSDK/Sources/Utility/WXUtility.h",
-    "ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.h",
-    "ios/sdk/WeexSDK/Sources/Utility/WXLog.h",
-    "ios/sdk/WeexSDK/Sources/Utility/WXDefine.h",
-    "ios/sdk/WeexSDK/Sources/Utility/WXType.h",
-    "ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h",
-    "ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h",
-    "ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.h",
-    "ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.h",
-    "ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h",
-    "weex_core/Source/core/layout/flex_enum.h",
-    "weex_core/Source/core/layout/layout.h",
-    "weex_core/Source/core/layout/style.h",
-    "weex_core/Source/core/bridge/eagle_bridge.h"
-  ],
-  "module_map": "WeexSDK.modulemap",
-  "resources": [
-    "pre-build/*.js",
-    "ios/sdk/WeexSDK/Resources/wx_load_error@3x.png"
-  ],
-  "user_target_xcconfig": {
-    "FRAMEWORK_SEARCH_PATHS": "'$(PODS_ROOT)/WeexSDK'"
-  },
-  "requires_arc": true,
-  "prefix_header_file": "ios/sdk/WeexSDK/Sources/Supporting Files/WeexSDK-Prefix.pch",
-  "xcconfig": {
-    "OTHER_LINK_FLAG": "$(inherited) -ObjC"
-  },
-  "pod_target_xcconfig": {
-    "USER_HEADER_SEARCH_PATHS": "${PODS_TARGET_SRCROOT}/weex_core/Source/ ${PROJECT_DIR}/../../../weex_core/Source",
-    "GCC_PREPROCESSOR_DEFINITIONS": "OS_IOS=1"
-  },
-  "frameworks": [
-    "CoreMedia",
-    "MediaPlayer",
-    "AVFoundation",
-    "AVKit",
-    "JavaScriptCore",
-    "GLKit",
-    "OpenGLES",
-    "CoreText",
-    "QuartzCore",
-    "CoreGraphics"
-  ],
-  "libraries": "c++"
-}
diff --git a/ios/Pods/Manifest.lock b/ios/Pods/Manifest.lock
deleted file mode 100644
index 5c61918..0000000
--- a/ios/Pods/Manifest.lock
+++ /dev/null
@@ -1,84 +0,0 @@
-PODS:
-  - ATSDK-Weex (0.0.1)
-  - BindingX (1.0.3):
-    - WeexPluginLoader
-    - WeexSDK
-  - libwebp (1.0.2):
-    - libwebp/core (= 1.0.2)
-    - libwebp/dec (= 1.0.2)
-    - libwebp/demux (= 1.0.2)
-    - libwebp/dsp (= 1.0.2)
-    - libwebp/enc (= 1.0.2)
-    - libwebp/mux (= 1.0.2)
-    - libwebp/utils (= 1.0.2)
-    - libwebp/webp (= 1.0.2)
-  - libwebp/core (1.0.2):
-    - libwebp/webp
-  - libwebp/dec (1.0.2):
-    - libwebp/core
-  - libwebp/demux (1.0.2):
-    - libwebp/core
-  - libwebp/dsp (1.0.2):
-    - libwebp/core
-  - libwebp/enc (1.0.2):
-    - libwebp/core
-  - libwebp/mux (1.0.2):
-    - libwebp/core
-  - libwebp/utils (1.0.2):
-    - libwebp/core
-  - libwebp/webp (1.0.2)
-  - SDWebImage (3.7.5):
-    - SDWebImage/Core (= 3.7.5)
-  - SDWebImage/Core (3.7.5)
-  - SDWebImage/WebP (3.7.5):
-    - libwebp
-    - SDWebImage/Core
-  - SocketRocket (0.4.2)
-  - WeexPluginLoader (0.0.1.9.1):
-    - WeexSDK
-  - WeexSDK (0.24.0)
-  - WXDevtool (0.20.0):
-    - SocketRocket
-    - WeexSDK
-
-DEPENDENCIES:
-  - ATSDK-Weex (= 0.0.1)
-  - BindingX (= 1.0.3)
-  - SDWebImage (= 3.7.5)
-  - SDWebImage/WebP
-  - SocketRocket (= 0.4.2)
-  - WeexSDK (from `https://github.com/apache/incubator-weex.git`)
-  - WXDevtool (= 0.20.0)
-
-SPEC REPOS:
-  https://github.com/cocoapods/specs.git:
-    - ATSDK-Weex
-    - BindingX
-    - libwebp
-    - SDWebImage
-    - SocketRocket
-    - WeexPluginLoader
-    - WXDevtool
-
-EXTERNAL SOURCES:
-  WeexSDK:
-    :git: https://github.com/apache/incubator-weex.git
-
-CHECKOUT OPTIONS:
-  WeexSDK:
-    :commit: 159ccdc2f80baea89c559d547b857dacf2203000
-    :git: https://github.com/apache/incubator-weex.git
-
-SPEC CHECKSUMS:
-  ATSDK-Weex: 1b27558f4336d77fb97704d34fc6ad1fd468592c
-  BindingX: b3c6c1c5dcd8e50277cfc5daad09d7010c227524
-  libwebp: b068a3bd7c45f7460f6715be7bed1a18fd5d6b48
-  SDWebImage: 69c6303e3348fba97e03f65d65d4fbc26740f461
-  SocketRocket: ffe08119b00ef982f6c37052a4705a057c8494ad
-  WeexPluginLoader: 85c1304f8ba29864e58531614a0acfeceef1b85c
-  WeexSDK: b04beeb0cf562a1467a943a2002f3e4e018ba55b
-  WXDevtool: 833dd3e835df1f5f278fc8865c865d48196bfdab
-
-PODFILE CHECKSUM: b30fb7b0bff70242f50cb3c7f45ac09caf08f211
-
-COCOAPODS: 1.7.3
diff --git a/ios/Pods/Pods.xcodeproj/project.pbxproj b/ios/Pods/Pods.xcodeproj/project.pbxproj
deleted file mode 100644
index c7a4aa0..0000000
--- a/ios/Pods/Pods.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,5110 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXAggregateTarget section */
-		344C7B8851D73171FD3FE521AF9DA956 /* ATSDK-Weex */ = {
-			isa = PBXAggregateTarget;
-			buildConfigurationList = 5994863F560DF3BA097B2F62CFA682D1 /* Build configuration list for PBXAggregateTarget "ATSDK-Weex" */;
-			buildPhases = (
-			);
-			dependencies = (
-			);
-			name = "ATSDK-Weex";
-		};
-		BFA2840E37C9C6EAC3C1E65FF46EA916 /* WeexPluginLoader */ = {
-			isa = PBXAggregateTarget;
-			buildConfigurationList = FEF8CC11DB4D1E326EDA3246E353BF4E /* Build configuration list for PBXAggregateTarget "WeexPluginLoader" */;
-			buildPhases = (
-			);
-			dependencies = (
-				896BABA4742326E93ECD70A7923CA44E /* PBXTargetDependency */,
-			);
-			name = WeexPluginLoader;
-		};
-/* End PBXAggregateTarget section */
-
-/* Begin PBXBuildFile section */
-		0008F0E5695535F8363C7D32C3D896BA /* WXRecyclerUpdateController.h in Headers */ = {isa = PBXBuildFile; fileRef = E19A89559B2D5707F54BB69B9D5FA71F /* WXRecyclerUpdateController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		002F5EBE418B277FDE20161216791F91 /* EBExpressionProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 00878E679094B955A62AECCDDCDBE803 /* EBExpressionProperty.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		00317C338156CFC816E198AAA966E5AB /* WXNetworkDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9351E3B76D347E620F13B4A2B75A68BC /* WXNetworkDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		005885D8B131E57FAB5AD2A1757DA8A9 /* WXLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 112B0898E015D8CA4C8B6AD8EF6CF72E /* WXLog.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0095553A0C2D2D75F050D425283F0455 /* css_value_getter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1695D7B0C8755C788D5C01287F687ECA /* css_value_getter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		00C26CE475F36DDF4DB39724DC708EA0 /* yuv_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 2803631DDCDEC6529BB2501F8F0782AE /* yuv_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		01213BF4E6990408907BFF3FBC6BB2AE /* WXInspectorDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0774ECFA41B0E1666EBFDEC773948E46 /* WXInspectorDomainController.m */; };
-		0298CE80F3BFEBF11B5EB21AEFB34158 /* WXWebSocketLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 99036C848CC8109F98D00CC8D377C3E4 /* WXWebSocketLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		037D3FF7A81C10C4992E3E2995B0D05E /* iterator_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = F7C85AF26667B580F9FB7DC3B6FCF322 /* iterator_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		0394A1267D204A2130A9F2E4499E929A /* common_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C7B92AF6207A8B7D132B6D7CF718CE1 /* common_sse2.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		04121156D9B04092FD726F284F7207D0 /* render_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6F8740E75EC067CF8F875A5BF4D7B376 /* render_manager.cpp */; };
-		0466ADCDE155F1D2BCB6385898F270BE /* time_point.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5EF01953F6FAE48E9B1CA4B0D20DB9 /* time_point.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		052F834FCF2ED9AD905BF89D81E132BB /* core_environment.h in Headers */ = {isa = PBXBuildFile; fileRef = 9920F1218ECD79A8F43D70238B728E22 /* core_environment.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		054277E287E1108D708766365E7D3E56 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 17544456786A253641CD996B499216B4 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		05D73EE0C659F9C088BDE8C5D2E013FB /* WXTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 34E4E1A88E6A521A4829463E8D736DEC /* WXTransform.m */; };
-		0623CA91E4A137AB8D6B88FE366DEEC4 /* rescaler_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = E50E2DE5F6E4A7A22B6192EEAC35F56E /* rescaler_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		07BCF23F159A3195A674657B5F50F424 /* WXTextInputComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = AA094D3EE31E09919B09949BAB42A9E2 /* WXTextInputComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		07C09A3BE04646187D8EABC6436A5B47 /* WXServiceFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 283C35FEB00311EC8051F2205D274CFF /* WXServiceFactory.m */; };
-		07FFF35D4F3C3543B9A6E982AC61374E /* WXCallJSMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = 38523DD31638B5271A648BE80D645448 /* WXCallJSMethod.m */; };
-		080339A79C86A9385DC2E20EC50B9DC8 /* cost_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = C9926682814FF1E15A9B7D65B7B4D92B /* cost_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		0854D80624BF98CA539C988A16B93226 /* WXWebSocketHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 94EE8131B38FA653CCC9ED66AA9BA821 /* WXWebSocketHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0925C42930D59180C885F3B7951B5D17 /* layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 880D8F8B64B196B3B05E9737E770F9A5 /* layout.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		096EB2817E47336C34A6E4FE567CA00C /* measure_func_adapter.h in Headers */ = {isa = PBXBuildFile; fileRef = A2EB5D25AEDE6112177C16CCAD28319C /* measure_func_adapter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		09CFA18C0C61FC94C04E5C29C09697DD /* io_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 0FBACBFBA3244C297DB8F84D1EFB79F2 /* io_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		09EDAEA0E0C531FCC52CBF6749D54339 /* EBExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 94FCC868F465392DB1DFDF3FEAEDE609 /* EBExpression.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0AE98463BA4DDA001C828B4199FBEB77 /* WXDOMStorageTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 01473A83E00902E4CDB5C8EFDB7A1A02 /* WXDOMStorageTypes.m */; };
-		0B4E2AA290D608B9E9D8F9DDA44EE4DB /* WXAnalyzerCenter+Transfer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D6F3BDDE29E6A8AB58A14B63EC2EF28 /* WXAnalyzerCenter+Transfer.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0B70A8FB1A72706978E244F530ABD724 /* WXValidateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CF911943BB9F31A51DC8B5E9E897443 /* WXValidateProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0B8747496A4C301612C8E701A498AD5A /* WXSectionDataController.h in Headers */ = {isa = PBXBuildFile; fileRef = D5C58434E29780929AF6A0CAA8A7B7FB /* WXSectionDataController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0B99AB9303A9AEEB8F1A9F74381CF09B /* WXEmbedComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B75D38A8213F489A5CBBF026B34AC7 /* WXEmbedComponent.m */; };
-		0C11578C900368CAB3399A2325F67ECC /* EBWXModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 783D9EE973E22466FF9A4F3927A1E325 /* EBWXModule.m */; };
-		0C6E4F278A20ED952E28C8001A619CFB /* BindingX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BC03199F58649AE8FB6790512422A05 /* BindingX-dummy.m */; };
-		0CD6C7CBF8F3F1028822CB7784B3CDF8 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C6B8F91F4BBD13F43F43B52A1BC1BF0 /* SDWebImage-dummy.m */; };
-		0CD87FD98ED2DBE52FDF51BED7FE884E /* BindingX.h in Headers */ = {isa = PBXBuildFile; fileRef = 9652677CE59D391A09DDE5BDC59B5054 /* BindingX.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0D59E06448F0C2C7032B8314792E0DA3 /* WXJSASTParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 223210E99319E2C7B9B54D6D1EA8B5A0 /* WXJSASTParser.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0D5F3C552F0BB9830363FD9BF43269A4 /* picture_rescale_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 205E2CD48D8D429737C1247D533EBC99 /* picture_rescale_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		0DC17ABB92DCAC1C41306EBD5B2295F7 /* WXWeakObjectWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = FFB44BFA97525E91FBC24C805B615734 /* WXWeakObjectWrapper.m */; };
-		0DE2DE9B3172D688A8E1AD215914E03E /* WXResourceRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 133256AD05EEF685CA2CE43C1BD10702 /* WXResourceRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0E3DC4BF0FAA14A3634569E2EF3C3E47 /* WXServiceFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC4E1B1F1E2F1C17C2836AA9B7EF223 /* WXServiceFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0E4723934BEEA0E4E90FE52954B5585A /* WXDebuggerDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = C326AA3AA08F6A1905CA19549554B949 /* WXDebuggerDomain.m */; };
-		0E63280B0FDA03D4C17AEC0F9DFD93CD /* WXLog.m in Sources */ = {isa = PBXBuildFile; fileRef = ACDB284BD4EB7CF6272A62885F5D1141 /* WXLog.m */; };
-		0E88FFF4DCE1CBC0E31403F69A059B24 /* WXWorkerDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = A5FB0140015558AADD947FBF3CB774A6 /* WXWorkerDomain.m */; };
-		0E9598E7A0B41433A321C9D0CB813C5D /* enc_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = C2C514C61C1E2D317F737D4B8A2FB6DA /* enc_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		0EE11B37D09BC2ADCEB04EBFAD988A46 /* anim_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9328748E5529451B715F5D65D7D25711 /* anim_decode.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		0F0FD736A0559EF261383A6D2392596D /* WXSDKManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D47CDADFF153F5E0BF4855B2E85CFB17 /* WXSDKManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0F1EE613D07B17A1051F2BF8A24759B5 /* EBJSEvaluate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E6D3071DBD29D08C23E4CE4834630B2 /* EBJSEvaluate.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0FA6DD8851BFA29EEE881911036CA47C /* icu_utf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95E91DB3C84499130864E821FDED23A1 /* icu_utf.cpp */; };
-		0FDE625C6378A908BA17C526C2833F59 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCB3E286F4634541246076D8CF97182 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0FE07021FE3BB2E363C0CBA95CF60842 /* WXNetworkTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = FF67D676E033EEE7BC0C49EAE7E25489 /* WXNetworkTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		0FF6A72C4F8640E264F0F605B40E1F99 /* WXFileSystemTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E8CE70749746A500AF380D31C1711F3 /* WXFileSystemTypes.m */; };
-		103F07ED6284EE282B4C581A17747C7A /* WXDOMDebuggerDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = D95D5A5EB844080A48D53A7D7C208A04 /* WXDOMDebuggerDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1052E2156B8A57CE963E62A79930DEE4 /* WXCSSDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7793767183C6CAFC41D1193AA754C4AD /* WXCSSDomainController.m */; };
-		10822536ABA2568B99D5EA2A8E53DB86 /* WXRecyclerUpdateController.m in Sources */ = {isa = PBXBuildFile; fileRef = 24AEE115677A3A720AAAA1D1BEF39667 /* WXRecyclerUpdateController.m */; };
-		10A302CE5A419A1D411DE52040FF00E0 /* muxi.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D11BB1F09322EDF174FE9EAF01945AA /* muxi.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		10C719DA9D7B8A674D8213C2F3F78F35 /* WXSDKManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4393261C083761D7ED36FC63755F68C3 /* WXSDKManager.m */; };
-		114B9A4B71C06E8DEC99D1B8AEA6CBFF /* WXRecyclerDragController.h in Headers */ = {isa = PBXBuildFile; fileRef = 18B14A37160FC72EA917C2FA3BC4ED32 /* WXRecyclerDragController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		11BE3D8D97A48A0D8C6A2ED75E322D45 /* WXNetworkRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = D0656D856A2A8E59AF4CD4859516B22D /* WXNetworkRecorder.m */; };
-		11C7B1309440A17273378AC3EF66D4F3 /* yuv.h in Headers */ = {isa = PBXBuildFile; fileRef = E2D2FE19F4BD4D8A8A4A29D3270A400E /* yuv.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		11FD7D458A6E5F111EB35474617BDBCE /* NSDate+WXDebugger.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF7F548A8F8601D656DAEDBEBC4BA16 /* NSDate+WXDebugger.m */; };
-		122F470A2BAE9A7E558C04913D8BBC55 /* WXComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = F686F775C183F4034BEC20CAE58F9087 /* WXComponent.mm */; };
-		12315C5A5A49BF92D53228E184EE6AF7 /* WXIndexedDBTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = EA14347A2AE94D3278EC5B269298BEF1 /* WXIndexedDBTypes.m */; };
-		123A591E375744AFEB32C4C6BAB136D8 /* render_cell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FF59FF3FEA83471A133EF1637B8FD40 /* render_cell.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		13725B0FB567CFD891E68E5E6E74273F /* WXWebGLTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 958CD59E242BBBF19CA80730DE7637E0 /* WXWebGLTypes.m */; };
-		138DE7DEEC6D5D7FDE217CE8BC341621 /* WXSimulatorShortcutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A6ACAC5EF5101105062510C89F7689EE /* WXSimulatorShortcutManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1397E2988253366588CC87B4B2215291 /* time_calculator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0115713EE67211947B2CE13DBC965236 /* time_calculator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		13AECE027D0D1AE56F43F7151986AAC1 /* WXRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = C276466BBB783E7F49667DE5E38840AD /* WXRootView.m */; };
-		13E700D3BBCCDC7BD16658D4341C7DC9 /* WXThreadSafeMutableDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 75DAEBE3413648C49531D6466C165FBE /* WXThreadSafeMutableDictionary.m */; };
-		142A69EF0CFD73C4A9D57E6C9649D87B /* WXPickerModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 93B810B9CA6B20B7D3E49102C3566067 /* WXPickerModule.m */; };
-		14A963421DCB4D4E75073D0593C83AB5 /* WXThreadSafeCounter.m in Sources */ = {isa = PBXBuildFile; fileRef = ACE5D93BA3D18BE1DECFAE0CB38FC57B /* WXThreadSafeCounter.m */; };
-		14AAD6191E253A21C7DF13DD5494AA18 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C720C9030D814C35BA0CEB180D23EA9A /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		14B600E341C84EBAF2E61965E97DCB73 /* WXDOMDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 60D92BDEF0C89DD60BEA3D9951902D06 /* WXDOMDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		14C2FB4989567A006971DE8438F40647 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 325C6EE3E98249D6808EF6A2F2677B21 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		14D0A0BF938F85E9CD64A337CB32DD18 /* WXTimerModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D73441412DDA375DACFB56F21E2BDEA /* WXTimerModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		14DC363EFCBE6AF29927069E13D10DCC /* WeexApiValue.h in Headers */ = {isa = PBXBuildFile; fileRef = A28723D57D339F9D3A947FEFFCE023DB /* WeexApiValue.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		14E9DB12D6B6990E8626236361656085 /* NSSet+WXRuntimePropertyDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 24842AC0FA5CF1BA4D9BCF36B26D820B /* NSSet+WXRuntimePropertyDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		151006CEDE032F021E439ABA12DA4955 /* WXJSExceptionProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 72D51839EB3A1D215E70FF149BDE5AB3 /* WXJSExceptionProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		154E8328049700D34F99F993B7F65020 /* alphai_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B88E8CF7E1A0DC58DB6CA7DDC604765 /* alphai_dec.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1643ACF2166E4582AE18923447533841 /* WXRefreshComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = F58E4C1B2D7680BCB8BA41C30E6E4A12 /* WXRefreshComponent.mm */; };
-		1645611576401314D8A4205F9405AEE3 /* WXInspectorDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = B44B3F4193FEB7E6F67EB8680C946F64 /* WXInspectorDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		16B8AD5ECAA35F3D773927C9C403F13B /* WXAppConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 30FDA4038741EA0369B5D8EC15EA4A4E /* WXAppConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		16E01D648511ED37C37BE06747CE7CCA /* WXPageEventNotifyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3611AA526FB19FB9338F8D3D89F79E81 /* WXPageEventNotifyEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		176231D509C9BCA3D1CA51AAD37AE3EC /* WXJSCoreBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB880092824C56A49D57901CD65E01AA /* WXJSCoreBridge.mm */; };
-		17EBBEC6F6F0E7E727EA6D1ACF44DF2E /* EBExpressionExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE0D4457E656DA4E480129B57A93AE1 /* EBExpressionExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		182681232123BC0D366715D4DB04169D /* WXJSExceptionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2048C284E39B46DC6875AB751338DF32 /* WXJSExceptionInfo.m */; };
-		186837C87CD9E9911511BD3C5903C2DB /* muxinternal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D48C9BAA449E4C89E9E20D2D99E32D6 /* muxinternal.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		18B7DCB32904488BFD4039DCCB1D0713 /* neon.h in Headers */ = {isa = PBXBuildFile; fileRef = 255DEA1674DB29A8E5D97B0F7C9619FE /* neon.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1917146A98100591D1183DA428EF6E1B /* WXDebugDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = E522D6ED23CECF32E263D482D9A89038 /* WXDebugDomainController.m */; };
-		192BFC5535E0C7568387CBAF23868605 /* render_list_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 7452F0CF401F8FABA2D2F0C843AC234D /* render_list_factory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		194752A928EE8E32EF7554BC1C0C416E /* WXURLRewriteDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 26644596A39563E5EB150B978840D629 /* WXURLRewriteDefaultImpl.m */; };
-		19665A3B391CA7CB377F9E3B076D4DD8 /* WXFooterComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E966FF29AC3185448F9D07E528DBF8C /* WXFooterComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1971270DCF06F26D06CFC1D59F74AFAB /* WXResourceRequestHandlerDefaultImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 47BD868D13D85D4B214A47B72089C5AF /* WXResourceRequestHandlerDefaultImpl.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		19CE02A57F241BC56C3AED22D4649A1B /* WXClipboardModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C2AF92DE2F7E88DAB04C235A7ECF064 /* WXClipboardModule.m */; };
-		1A26769C3A02208B3A2B774B1EB4E757 /* render_text_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FA74873954436F80E3ACE6F2E2169F1 /* render_text_factory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1B007C74948B540E3250F42D2679207C /* WXMonitorHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = F6F15F039EC8038701ED14CB6D3E0285 /* WXMonitorHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1B260C8218ABF1AB5C81F3A1D38B063F /* dec_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = DDD5A6ABEF7ADAFD9FDC205F4B9C55BE /* dec_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		1C380154615BDE3949D2D4B0CE8A64E6 /* NSArray+WX_JSONObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 7491005464123A9B84498A6E80E82A8D /* NSArray+WX_JSONObject.m */; };
-		1C54ED615472F84F23402D71D57AD4F1 /* lossless_enc_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DF84FEA3D66BD30E8484E90EF59AA53 /* lossless_enc_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		1C5A2F3372E29C1B5C13FFB2B841D3F3 /* WXApplicationCacheDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = C59AE1F6C3CF3BEA4A662DEB7DAB6CEB /* WXApplicationCacheDomain.m */; };
-		1D09C921685230982CA4E3A46FF39E12 /* WXURLRewriteProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D4D07F2CE4CC3DE205DDAFE6E91E1B /* WXURLRewriteProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1D4748A1FA8CFC36CED753C8C230D57D /* lossless.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BCEA8218760EAF4E34BD4C18BE11200 /* lossless.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1E1B5CA681564E78555490B2E414BDD8 /* EBGyroOrientationEvaluator.m in Sources */ = {isa = PBXBuildFile; fileRef = CD95057CCD39CC7E5DEC23AF77F19D52 /* EBGyroOrientationEvaluator.m */; };
-		1E34C209BAD0E7EB34EDD47CF8DF9AD5 /* WeexSDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F487DCA098BE74D5BD7D677F4B7B143A /* WeexSDK-dummy.m */; };
-		1E3C37FB769BFDC28D1C27435C3C55FF /* WXContainerIndex.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FF6427D2C822AA9644AA17BC61EEC0C /* WXContainerIndex.m */; };
-		1E61180E1FF586A793E8E499D5AA6F66 /* quant_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 0BB2137DAF4202F81F2E0B5169DDF877 /* quant_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		1E6C053172258EC31C12A53547DA0ECE /* WXNavigationDefaultImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CEA95C1F4AC46AC581889D047CA896 /* WXNavigationDefaultImpl.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1F87E56D24399E0DB9FBC867910C155B /* bit_reader_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0DB19EEB288E21C6EF9D7418D9BE6A /* bit_reader_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		1F91301906430C4C28C81599443F7A98 /* style.h in Headers */ = {isa = PBXBuildFile; fileRef = 77D34AE7AB9D03DCDCA357F35A110BEB /* style.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		1FB3B9CB3908A8ACCF60A72688795C2B /* WXCallJSMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E8CC83B908885EB00252703EC36034 /* WXCallJSMethod.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2034619D0C9ABAD7D590D6652FDF8E31 /* lossless_enc_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CA9F96A4926437C444BA77F69A6AA28 /* lossless_enc_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		20D6F266925E953B1829B38A8ADBABBE /* WXDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = 119470AC05E46A949FE6381CE92CAC19 /* WXDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		211D2E5200681680825E25B2DFEF37A9 /* render_text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D5A29E575740EFCD7E1F27029E58ECFA /* render_text.cpp */; };
-		216914275B74C853D08FFB6BBD4AFD12 /* render_action_remove_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 95D9CBD14543F4160C3C88FFA2B75EA1 /* render_action_remove_event.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		216A64F19F922E17EF4F2CC3B8D83648 /* WXComponent+BoxShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A663BC59F85D47ED810F0A9A408479 /* WXComponent+BoxShadow.m */; };
-		2180FD9B893890A000052C17F4A8EE9C /* UIBezierPath+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EA9CD94A0A125D52E9F8B9B2D31687A /* UIBezierPath+Weex.m */; };
-		218C9FD6F9A260A6333EC7EB1A0346DD /* lossless_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 49380016F114CC21FE1B7FA7A993882E /* lossless_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		2193E59D6C552A4627100BB19E535C7A /* WXRootView.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E4FACA9BD658B80459CA3AA234999B /* WXRootView.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		21F6A1BB0B2C60F16820450468546947 /* WXLocaleModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F7933A8703F3047330FAE9A708DA24B /* WXLocaleModule.m */; };
-		224FCC4367429E754DF4E2838D37D0A0 /* WXCSSTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = CC3194BA7EEB2B576E0C0ED609DEFC10 /* WXCSSTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		225018A923470E2BAC650E2908DE5F70 /* cost.c in Sources */ = {isa = PBXBuildFile; fileRef = 5046489C1B14B97F68DAD1DCE2668A3B /* cost.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		227FCBE4A93E170A1096034A69D1A4E4 /* EBBindData.h in Headers */ = {isa = PBXBuildFile; fileRef = 000A3148D8532218CD1BE8F3664E4FD4 /* EBBindData.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		22A46549C34C348356F33601A9F7488F /* WXNavigationDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DD81240B46499A3B27D5E9A7D2F0FB0 /* WXNavigationDefaultImpl.m */; };
-		22D0583CEC7DF9387D12B49A5495D4DB /* WXRichText.h in Headers */ = {isa = PBXBuildFile; fileRef = F9AF61BE593C7394F8C82ACF2099F638 /* WXRichText.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		23532A70FBFC6F3D7E3F04664FFC732C /* vp8li_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 8213A283F898071C6B3AB713DA5D59F7 /* vp8li_dec.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		235C86BF9797141DC315894C231C44EF /* WXPrettyStringPrinter.m in Sources */ = {isa = PBXBuildFile; fileRef = B79513821BB1C921F6085D5A98232454 /* WXPrettyStringPrinter.m */; };
-		23E6EEE0FA58D792C2821772968D1B6E /* WXComponentMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = 200D91352B3E01C1E5761DE502BAD5F2 /* WXComponentMethod.m */; };
-		240DA06626744751E58BCEB2B4DD767C /* NSObject+WXSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = AA48BD65765AB3262CF8F1F041978AAA /* NSObject+WXSwizzle.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		24548FB0E9D176AB1AA95A39BD5742FD /* WXStorageModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 435FE9BD8BD01F59754D0800669258E4 /* WXStorageModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2478CC4059A6FF3072B29D51D72B5480 /* libwebp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 569187B97800B10B542FCB0DD8F64EF4 /* libwebp-dummy.m */; };
-		2539C88528AA3249236187BFEF75FFFA /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 074C52F43589F0109AD27874922423A6 /* common.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2580046CAEB52DF88A9EA427ABAF3AE6 /* EBExpressionExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = BEC5318C90EF6DA5AC6A751E5CD24BF0 /* EBExpressionExecutor.m */; };
-		2582957D9EF3878307ABE6612B14ED97 /* NSArray+WXRuntimePropertyDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = A1948733429E2AF04316657331FDCF0C /* NSArray+WXRuntimePropertyDescriptor.m */; };
-		25881B7098EF727852E6AF8C74C7C8C4 /* EBGyroManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D6B9F39211E0C0B8867D6BD4963432F /* EBGyroManager.m */; };
-		25B0A57FCCBF3AC53C582C6E0E2301D9 /* NSManagedObject+WXRuntimePropertyDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = F835839CAB9962E6CAB933584BC83BD2 /* NSManagedObject+WXRuntimePropertyDescriptor.m */; };
-		2620928DFB5E011D323831002C036287 /* WXGlobalEventModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BCCF2C061E7D036DDFC414F0DD6B03F /* WXGlobalEventModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		262E4ABA069B5C174B73EBA27107EA5A /* WXType.h in Headers */ = {isa = PBXBuildFile; fileRef = 03DFEEE2A49E3645C3B5ABFC2F7A1C0D /* WXType.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		269EECFCEE1C29567E1F11F3ECF02090 /* render_performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F5533891517C84476A79130AAD4310F /* render_performance.cpp */; };
-		26CE32FBE483FC250E343946BAA7A1A7 /* WXSliderNeighborComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3EC41A8F407F6967BB6C28CA7035AEDD /* WXSliderNeighborComponent.mm */; };
-		26DE9334D97E4819826B81A364421246 /* WXWebSocketModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 148C0A519B1C89E4850E3E00D9448EBD /* WXWebSocketModule.m */; };
-		270E69570A588B5D3C64B9B05C585322 /* default_request_handler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5269C696D4E80E4CFDB297C5457FA96C /* default_request_handler.mm */; };
-		272C7EFC2B47CE3D15AE89594A82BB86 /* icu_utf.h in Headers */ = {isa = PBXBuildFile; fileRef = F26199ACB6F13D484151EBB8F27E667C /* icu_utf.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		274BE3CE00D1175F5DD5E5E36ABF20F5 /* ssim_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = D39550D554AC475F13E3C088022FA054 /* ssim_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		27A56E15BD61D85F4C966D757C42FFA1 /* string_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 802DD605FE5C62B581E3D3215A7BECE5 /* string_util.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		282B128FB22FA7AB25DCC901B14276BA /* NSObject+WXSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 40102A5D2B52D87C553D2D82285C0815 /* NSObject+WXSwizzle.m */; };
-		289923F072DD0F5BF251C860077BB8DA /* render_action_remove_event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A41CB486AE3549B29B34B304FC32FA80 /* render_action_remove_event.cpp */; };
-		28C24912C9A618CB49E388BB446EC2B0 /* WXIndexedDBDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = A76B1446ADA0C25DA2DAF1E5C05C4156 /* WXIndexedDBDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		291565FEFEAD069F39819C412771166C /* WXMemoryDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 72752A114E306EE1502FD7483D5BC2AF /* WXMemoryDomain.m */; };
-		29182C02D75127362853CEF2D5A2A6FA /* alpha_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 111EED8313B5EE2B91EEB84391D0972B /* alpha_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		291FB26563C7AD7636FB2D52BE01BE18 /* render_action_remove_element.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00F9033A36AB18306A2D59326C9FF83E /* render_action_remove_element.cpp */; };
-		2944D936B2A38004E0DB67562331B82C /* quant_levels_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = D2F658EA57C0897126F3E2CB67E13CA4 /* quant_levels_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		2A0DEA6DAAAB302D522F47AD05041716 /* bit_reader_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 6144DFE729541CC05D668AB56A0C8C2D /* bit_reader_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2A1901BFC18961B57BCE7187887AF0A2 /* WXPageDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 886F31BB06714550409E5AB9A4C697A6 /* WXPageDomainController.m */; };
-		2AD78044A48F9D5852D37F9AD1DFEC3D /* WXCycleSliderComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C17AD96F7B553FA52A1307ACB959303 /* WXCycleSliderComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2AE7D6DA80F76CA1119052F6651EFD27 /* WXDebuggerTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 85EF953A9D60907EF2306D4E4750BA29 /* WXDebuggerTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2AE985FB5D8644D06EF881733E23F7BF /* WXDevtool-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DE840DC09B9AA076A563FE7E62CA818B /* WXDevtool-dummy.m */; };
-		2B1366C144E5F5829AE2322E0482C0D7 /* color_cache_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 24298F19A1B7C09B4A075624E1F22907 /* color_cache_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		2B2E32255B59EFDD71370AC6F900DF9D /* muxedit.c in Sources */ = {isa = PBXBuildFile; fileRef = F6034742F532C427028C51F0DC998D90 /* muxedit.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		2BFCB2D33094DA821815CEB4DBEFF7CC /* render_mask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 949E2A17F0D596B7851B635C58E2BBD9 /* render_mask.cpp */; };
-		2BFD05D901D7F4FAD067C6CA11B40736 /* WXSwitchComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = B35E93F4D19FD5C8479530DD853CDD95 /* WXSwitchComponent.mm */; };
-		2C0703069D6ACFC8EA1F0E4E8958F612 /* WXThreadSafeCounter.h in Headers */ = {isa = PBXBuildFile; fileRef = F796B56AA30C17832F04647ED659C69B /* WXThreadSafeCounter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2C09990247803FFA0EEF127C40097FE8 /* message_pump_darwin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 525F0C44D141D5FB7FE4884D80746370 /* message_pump_darwin.cc */; };
-		2C121CF474A194BBD953C10397EF08A5 /* WXMemoryTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCD4C86AB8FA7F0A52B1155E801B63F /* WXMemoryTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2C5F077FF419D6FCB1D30FC570208BC0 /* enc_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = F9F2377788C89DAAB0665DE5379FE597 /* enc_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		2CBF91B9DBD7E64DC64AE0010DEE3C73 /* bit_writer_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 7931DA95A0854204EBE7CB40C654BC90 /* bit_writer_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		2CF2BD092B8ACB11833354CBFC63EA77 /* WXApmForInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 339C631E844134E52729A6AB132C278C /* WXApmForInstance.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2D85E95E6DF934467B75E6ED555B71A9 /* render_appbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22714A39E946520FE050E79B1A52431B /* render_appbar.cpp */; };
-		2E49088F724CECC8AAE730768529DE6D /* WXTextComponentProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 16E4D62210063F373B3A7DFD712D17B4 /* WXTextComponentProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2E97CF99DD945B639895069D9CA10C42 /* WXDOMStorageDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A7B60A1F25A1BFC53492A51FA84BE5 /* WXDOMStorageDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2F52A2D64F8D10B4A41B080AAD772047 /* NSObject+WXRuntimePropertyDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3525B041CA2BE20A8CB871787B0A8D5C /* NSObject+WXRuntimePropertyDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2F8E359FD93937E02E4FE4CAEA1C988C /* thread_impl_posix.h in Headers */ = {isa = PBXBuildFile; fileRef = A19D364451C8BD861FDA8D934BE970F7 /* thread_impl_posix.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2FA0212A6BF5A5D22A59F7B6AD9EF7A1 /* WXListComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = D7BEE88703122BADFCDE876F91B19DD0 /* WXListComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		2FD57BB44E2A23B956D75FC63B83174B /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B824E049218590472D5D433496C8527 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		300B15FCB3127490133E29A6B21A179D /* WXTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = D13D1E60A8F808FA4029AE256ECD43D0 /* WXTransition.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		303F8E584A657665F00D7B5BFC6D14AC /* WXRecyclerDataController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B08C974C02C1596DA9A2CC14EFD1F07 /* WXRecyclerDataController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		30760198DD28AAC7AAA3DF00628B281F /* WXNavigatorModule.h in Headers */ = {isa = PBXBuildFile; fileRef = A9DDD124DF7FF41543F425D91516C84C /* WXNavigatorModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3091866C29573E2DBA3A1D66047C4421 /* eagle_bridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D50F6F42FDF6993A7BF16570B037B7A /* eagle_bridge.cpp */; };
-		30B83FDA4DD482F45DA74E9E9AD12BF2 /* demux.h in Headers */ = {isa = PBXBuildFile; fileRef = 753031B9509837B78EA2E9CF5D9A7A06 /* demux.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3104507B6FF6891F188A273FA016AEC6 /* WXDevTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 02D6EDBCC7C21DE7C7C9475831975B3D /* WXDevTool.m */; };
-		310C657AD6D6AB7986820125A2898AAE /* WXCycleSliderComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = C72258F037CCB7145673CF6935D32136 /* WXCycleSliderComponent.mm */; };
-		315450C60AE3651E485F76AC8515D3FA /* enc_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5AD7FF77DCD3E2B67AD9365AA4FDB748 /* enc_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		31C5547F89BFD41C69582C4BB779C267 /* render_action_add_element.h in Headers */ = {isa = PBXBuildFile; fileRef = 914A40C062CF53086591A28C517CC15D /* render_action_add_element.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		320DFB81FF25B4B4ACC81AA81777A401 /* WXTimelineDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 544085C15C81373F7716C05D8E0B3C5F /* WXTimelineDomain.m */; };
-		323035301473FB38ACDFF4AAC13D54BA /* picture_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 32ECB3B719AB358C8980CE68B77A86D9 /* picture_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		323151941107A303939B0F6078C8367C /* WXComponent+Layout.mm in Sources */ = {isa = PBXBuildFile; fileRef = 88268CA081F4DFE5B57B99645C04DA41 /* WXComponent+Layout.mm */; };
-		330B7CFCC2705309236BBADCB0C94A71 /* core_environment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 96D92129845E0F1D7E57912B1FB525BE /* core_environment.cpp */; };
-		335BE2B558E7CD4364EEDC5698612E6F /* yuv_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 300BF6D3725538D9455F102E779321FA /* yuv_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		33CCD80DA3222F78E38EFB0BD1FEE923 /* WXAComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F7A6CC8BEAA7EF6CD431364C5F23C7F /* WXAComponent.m */; };
-		341A7B0346DF2E835AF8E0A076416E10 /* WXNavigatorModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AA2DBE9145021C0FB3CAB52E047896F /* WXNavigatorModule.m */; };
-		3428811F3957C10EBAA63D32EFD7C06F /* dec_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BAC633A3EB18A51CED030CBB4211826 /* dec_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		344034DA8409666A775BA162E58173A2 /* WXComponent+Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = B74CE6DCD03AA3AF30EB1EC801345020 /* WXComponent+Layout.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		347293F8A96E04FC13E180265C6C57C6 /* EBExpressionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = D69EBCD5357D23E1A92F315255C0438D /* EBExpressionHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		348C139C358A5F1F47DF7123D6C4E038 /* WXBridgeProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 024FE4856F5960412BD81B74F2510A3E /* WXBridgeProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		35157A63CDAF1173C0BBAD976ED30920 /* render_action_add_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 958A726D00B974F20937DC74E3E5EB15 /* render_action_add_event.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		352F731EA230AF3F7D813A92B062E328 /* NSObject+EBTuplePacker.m in Sources */ = {isa = PBXBuildFile; fileRef = 20A587592F200521B14E01A246ED763B /* NSObject+EBTuplePacker.m */; };
-		358CFB68F4A364F01C9207B2D61EFE5F /* bit_writer_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7CD9878939528179D5E8F9F17D9FD0 /* bit_writer_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		35933844C4E7B4C2227D148AE08A2187 /* quant_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = CDAD20EE1E53587BC603DD93C1099E07 /* quant_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		35F996548FC01A1F914BED875AA65645 /* WXBridgeContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F78B974586351904E960D034432A672 /* WXBridgeContext.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		372370ED90621F6D7FBB33001518D34C /* rescaler_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = FA81C53394CF5BE4D692E30C7A4EBDE8 /* rescaler_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		37347DE0AF7126290ABA9ECA97CAF7D8 /* WXResourceRequestHandlerDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C7739A69CC077AE0B6B901957DD62CC /* WXResourceRequestHandlerDefaultImpl.m */; };
-		376DF8E5D4E861EF09FA06C9E7C4CE6D /* WXComponent+ViewManagement.h in Headers */ = {isa = PBXBuildFile; fileRef = 487963401D867BAC55AAF9F1846903F9 /* WXComponent+ViewManagement.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		377E257153B5014668F609359F2AA8DB /* WXConvertUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B18709883CCB3E4CD0A1C5AF32BCB4 /* WXConvertUtility.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		37AAABF2A87A1C86ECBC342647F4B7F6 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = ED74AC691457447841A648E8FF4125F2 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		37ABFBE27CC14D417CC81F0C08F726B6 /* WXPonyDebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E9ECE08F8A25E25C29C421943677E2E /* WXPonyDebugger.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		37B07797A215022450447EC19A625D28 /* WXPageTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A2A60BD35796611A22E43B08AC75AA0A /* WXPageTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		37CEA5C190AF61B44FF0B633003C3879 /* WXComponent+ViewManagement.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55C70945B2910AAAC1B4314D2ABADA63 /* WXComponent+ViewManagement.mm */; };
-		385A13B87922D80D1CC95A585E6ACA8E /* backward_references_cost_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 69C4EFE7744EFFA2901C2AB394D53F1F /* backward_references_cost_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		386EEC228723CF221319CEEAF64D2086 /* dec_clip_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C8D08F25D322FDE225350FC7A4B422F /* dec_clip_tables.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		38E8DD360EA9D3034FFB9FBE9D05A4F9 /* dec_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5DCFBD346AA48339E5D5BD6E0990B06C /* dec_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		391220B603537DE608E106772C118C3B /* WXApplicationCacheTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B1E445201E254BFBCE6B8B4E7EF32EA /* WXApplicationCacheTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3986BBE134D80BD08BB123B2A19F2288 /* WXRecyclerDragController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D68D9913F8D80250ABFE3F431482D28 /* WXRecyclerDragController.m */; };
-		39E02EBE6AA4B7E6A8EF9C3136779CB1 /* WXPrettyStringPrinter.h in Headers */ = {isa = PBXBuildFile; fileRef = 022DC4330EAEC4FF483D2630EFE90B0C /* WXPrettyStringPrinter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		39EADCB319D169D77760B263B1DC5E8E /* WXProfilerTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 759B891C482A044F9477EC6B3F5E8F59 /* WXProfilerTypes.m */; };
-		3AC5BAAC89954E65FD9056C158F60BB7 /* WXComponentManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 610B55D2F796875DB1A15E69EE3984F9 /* WXComponentManager.mm */; };
-		3AD6F924CDC1E7BBF924DB9D4C66A528 /* WXRuleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E19BC05EEC6921A366B70E29674210 /* WXRuleManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3B00B4B5A8974AFB97A349618A0652D3 /* WXConsoleDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = 947E260212405D8C7BCDEF8D809FBF01 /* WXConsoleDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3B1257A92D1706288C0CA6A6181EAC29 /* WXImgLoaderProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = BD093F56BE964A8F387425D47F9C4A32 /* WXImgLoaderProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3B3578CF1EE9CCF4E5F6E9F2C2037932 /* NSObject+WXRuntimePropertyDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = A5D61D9560F4F2856520727041FE865D /* NSObject+WXRuntimePropertyDescriptor.m */; };
-		3B4FFE6EFC1F5C59C42E6E91B746C260 /* random_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DD2D2EF91B75353ABA9B99419AD5F0E /* random_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3B92CA723D742BAC665AB0AAD9F82AAC /* render_action_render_success.h in Headers */ = {isa = PBXBuildFile; fileRef = 96815DF3D74FDD1A73EDF90EA2346397 /* render_action_render_success.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3B9607B19F30C9CA7A9A3B64FAAB551F /* WXInspectorDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F27F751234744F1D55CA39C37C118B6 /* WXInspectorDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3BB557216B93FBB6F0DA4A23E12BEB5A /* WXInvocationConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 185623ADDCAEF1B78D00D450F656AF66 /* WXInvocationConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3BB894F23BC0CB5559EA58A59AEDEDFA /* WXComponent_performance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B22A18E5F341AE936A1D3CC1FEF1970 /* WXComponent_performance.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3C5A639FA4E926353AEA4A54955B3F6E /* platform_bridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B7EE3F4C6D936F9C7BCEE307BEB75CE3 /* platform_bridge.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3CE97A6F2B5700BB0EE1C88C6F4E6B59 /* WXWebSocketLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = F10CBD91125D2B179E6A757D7F49D27D /* WXWebSocketLoader.m */; };
-		3D50C764326C64DF4C4D3DFEA3598F10 /* EBExpressionScroller.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F8DA25A9F79BE3039467408957F4C25 /* EBExpressionScroller.m */; };
-		3D85F2D5937DB22093332B06986728F6 /* dom_wson.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FAD43DAA99D38FA69179D955107F1EC /* dom_wson.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3E0646027A42F00B951F475A11AC699B /* WXRecycleListTemplateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 12E1081DA5826CF51ABE16450F257DD3 /* WXRecycleListTemplateManager.m */; };
-		3E48221E5E425473FF854D3B5374AF83 /* WXTextAreaComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = DED0157F2880BD8D81D53E0CFF9AE445 /* WXTextAreaComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3EBED9441E342CF77313586C0F3F9526 /* rescaler_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = AB0E14C7CCC671578E6F4B2177E05413 /* rescaler_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		3EF4289E7A4FE594596D6CA3FBCB9B4A /* EBExpressionGesture.h in Headers */ = {isa = PBXBuildFile; fileRef = 12EDCF160AE9E7FA1DA250D1B260C7A6 /* EBExpressionGesture.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3F06961FA642E1D009627417C84849F6 /* backward_references_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 05C66D056B8508B428222B139C089DB8 /* backward_references_enc.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3F1F565F4BA02DC8D36F014DE72E831C /* render_scroller.h in Headers */ = {isa = PBXBuildFile; fileRef = 74FF5C68BC1BB4E500D8196E4D3EE423 /* render_scroller.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3F45232F1E2C2ECD11195674572216BE /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 274CD92DCA5F55E382341134D0006851 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		3FADCBF79CE365F21F7EA184C25742F5 /* render_target.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 246C9493B70FA5706109B51EC364DC61 /* render_target.cpp */; };
-		3FBE6BA2A2E41BF8CBA10195EC474BF4 /* WXIndicatorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC2B58D2ED1E9C4E26C6E4BF6256620 /* WXIndicatorComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4006FAD97D1F9B5614F34087630EB868 /* backward_references_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 88E443FE62F0AAC79442F122AE65717E /* backward_references_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		407518D21EDA8CD0E23B6013A96064F2 /* WXCanvasModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 4254F6BE0BB06241BA6CC3EF9E3744EC /* WXCanvasModule.m */; };
-		40CE0F305A36BCEEB1D734EC685A287D /* WXTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B12E16DDB67DC5679BC73F3419ABAEA /* WXTransform.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		40DD4526C6EBAC0F6CEE40CE07AD2E1E /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = AF5155B83910440F59E0CB6066E295BA /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		41163502EB3D0F476E1C6A1687E029BD /* enc_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 25CE64303E475BA1EEF4BA43CA848C71 /* enc_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		42DE6FCED18BADC7C6317F99A28F008D /* NSArray+Weex.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B3182AB3965AFEBC5671EFFB755C5A7 /* NSArray+Weex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		42F6FC8B0AC319ED90D2E0ECBB17BFDB /* EBUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 58321BC3499A706BDCDFEF204B68D890 /* EBUtility.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4309DC925E2246BB81BB75E4F5F0AE63 /* WXComponent_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 65E647FBD6592D9646B975FBC14E5D5A /* WXComponent_internal.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		43E4977DF492F65C4C4BB83AECB5172B /* huffman_encode_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 240D2ABE7E928662FDF42D1ACAB22922 /* huffman_encode_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4446B2C5263C762803B45503B1847956 /* WXResourceRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D1F6F14EA65C02A6EC32D0D25B897B /* WXResourceRequest.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		449E1593C869140FFA5709FCA31C8F0B /* lossless_enc_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 06BADFC9EF95065C1056A48952B064E8 /* lossless_enc_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		4540AD9610409D96874CFF206F55F6A4 /* NSSet+WXRuntimePropertyDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F9A6D32AB68DBE91A3BFF5A87A5B240 /* NSSet+WXRuntimePropertyDescriptor.m */; };
-		462F42594CFDC05FE883B596497A31F9 /* WXUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D612333D9AEF8011462885EF49CB5E6 /* WXUtility.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		463BEED7C2B3C6C9507BCFE4D75E1FF3 /* EBJSTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A5B2EA6097BA9FAF97664B9F83AE742 /* EBJSTransform.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4670906E2E142E04942D9E421711C045 /* WXComponentMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E2F4036A9CDA75EC6288ED53ED093D3 /* WXComponentMethod.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		46A60FFB4B41DF4AF8BD2D7EBC09D532 /* WXScrollerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 789A0D66FC2F3DDC0B730D43F95A06E2 /* WXScrollerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4749C93CE9F9FF091FA44B8348AB251C /* time_point.cc in Sources */ = {isa = PBXBuildFile; fileRef = 87E25C2E46D80B1C2B60B139F075B0C8 /* time_point.cc */; };
-		479348A75A0DF855471EBD567D0AF4E7 /* WXLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = A56DEC368C1E3186C5C8C40A8F162AF9 /* WXLayer.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4801960C4A94715FB799EDD76937B86F /* WXDevTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 62239767813F4946C6F565B234287654 /* WXDevTool.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		48351C03EABD8D94E69148C7E1D4598B /* render_action_update_style.h in Headers */ = {isa = PBXBuildFile; fileRef = 6808D7F8FC3CA82AEC02FE4F83810DC5 /* render_action_update_style.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		483607371B0B95D116390AE71C918BA0 /* NSOrderedSet+WXRuntimePropertyDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = F0AAB080C8E159E3C3049D71463B8599 /* NSOrderedSet+WXRuntimePropertyDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4869317DD90E8F4C8865E48FB954F4E9 /* huffman_encode_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C2CAAE0879694A751B9750731B80009 /* huffman_encode_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		48ADCD77A3798A824518B6F22D633DB8 /* WXTracingUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = A47C816B3A51B5F8CB135DA314195BE3 /* WXTracingUtility.m */; };
-		48C6B37D1D2E18D4C46FFEC24962731F /* WXUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 02970D9181BC28BD61EFE8787E8A0EDD /* WXUtility.m */; };
-		48F746ECEECD926994D22209B50C3338 /* vp8_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 092773D962247C18999DEB541664EEAD /* vp8_dec.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		493F41A3B5C4E5EF910BAC83131D101E /* upsampling_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 73DC57F20AEAA5E4DF63AEDC15713259 /* upsampling_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		49522244EE0D71AEA171DCB9418C6BEE /* WXPrerenderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E86587966ACF3EA9FBE3D7DFC0F66A42 /* WXPrerenderManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		49733C48C444E1072ADCD4EACF72E3CC /* WXPageDomainUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = E8694E24F8F5B3D0AC35493D40EB95C8 /* WXPageDomainUtility.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		49BE99E4F5EE52FFDD768ED611D300A9 /* WXDynamicDebuggerDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = F688D0A7148003149F0A4F5857533093 /* WXDynamicDebuggerDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		49F587199B00B7407E63C5C46BE11828 /* encode.h in Headers */ = {isa = PBXBuildFile; fileRef = A61733B726794B753DAACFBF03835C0C /* encode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4B2C011899DD842116CC2113D2642D99 /* WXWebGLTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C94DD8B1A344DBC2A829D9ACFDEC9C5 /* WXWebGLTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4BD33D1BE0E98829B5E499E3CBD7ACF5 /* WXDebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D7728EB2DC323F8FB375819B6C80518 /* WXDebugger.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4C4457EA759107DF765D756F59FC1689 /* thread_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 3A0845F34055E056A472B52866CBF46A /* thread_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		4C814949A56EBA6026FB0065456FDACA /* WXResourceResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = DEDB705BCE8A5C13C75CD7CAD99552FB /* WXResourceResponse.m */; };
-		4C8C25BEC1D6D20DE5BF37B25E80343B /* token_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = A12ADDF77A1A1073EC96A49AF21B0E69 /* token_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		4E7065CF1A211CD5117142D274D6AA98 /* dec_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 6D823BC6FBF42D547E7A6B51552B61E8 /* dec_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		4E7C1AF288440BE36799B9DDF93EE18C /* WXApplicationCacheDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 6118E94A5253FC7B2D918C278DF426DC /* WXApplicationCacheDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4EB0D5F65E7B2DEA90EE905BD5FC7207 /* WXDebugDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 357E2BFE46D94C57D19BB81721B42DDE /* WXDebugDomain.m */; };
-		4EC19B0D26A202E2ACA481133EB261B3 /* WXPageDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = B56671D897B7FA4F803F39A15C3A588E /* WXPageDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4EEF68EF883DDE60DAE3DA8B91432049 /* mux.h in Headers */ = {isa = PBXBuildFile; fileRef = 306F7BBE14439945F5BE43E3F4669D3C /* mux.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4F1EA27378C73D8BEDFD13BF40EC5E51 /* alpha_processing_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = BF4E60480393C1216AB259C86C5CAA24 /* alpha_processing_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		4F8CFECB09C7EFB07033982372C03A8C /* WXDomModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 3090519F9C123B2C4B6396E7E5DE4ADA /* WXDomModule.m */; };
-		4FE54EEE689609F9EE99B0A70CD6E182 /* render_page_base.h in Headers */ = {isa = PBXBuildFile; fileRef = 81AF64896A2DC4374353CCB01726FAE9 /* render_page_base.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		4FEE05F62E41ECEE22D75A19F855F6B8 /* WXMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FCC4ABBEC608DEABCE4D51762F49CB7 /* WXMonitor.m */; };
-		5006B85168DE3874C5CBD97E26314163 /* WXSDKInstance_private.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CCA8129AEBD699E327188C15DD5088 /* WXSDKInstance_private.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		501AD89BD705E6004AFA85AF129F39E9 /* WXDataRenderHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B3DE931B94804536D30BC4363F131CF /* WXDataRenderHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5020F83FFDED3FDEF75BE18905867B9D /* render_action_createbody.h in Headers */ = {isa = PBXBuildFile; fileRef = 17DC31727FB1F407B8D55999463B60E7 /* render_action_createbody.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5029F78851269CB0F3250F4D1787CE94 /* EBUtility+WX.h in Headers */ = {isa = PBXBuildFile; fileRef = 956511B7F9635E0B6DE23683C80C4D40 /* EBUtility+WX.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		503F4922024FD4141D8B901200D5118F /* render_action_appendtree_createfinish.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CBD05805196749E2544F9B23E59926 /* render_action_appendtree_createfinish.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		505EDB296D468B6FE6178979188EF225 /* lossless_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C7B1FE34508E9A6F0EE043325527E7C /* lossless_common.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		506D5D2C1AC76FCB193EFA405F511A67 /* WXComponent+Events.m in Sources */ = {isa = PBXBuildFile; fileRef = 248FC68CE4516D247CFAD6CBB5C3874D /* WXComponent+Events.m */; };
-		509077D620EC967FDB534008267D2D01 /* WXComponent+BoxShadow.h in Headers */ = {isa = PBXBuildFile; fileRef = A352453B043304509C876BC299C8ABA7 /* WXComponent+BoxShadow.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		51452B6580FFD6589AAD054DD29F965A /* lossless_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 571B93F54A2BCBE03083DA34E92AE15B /* lossless_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		51C33A8B8C8B140D401B0FED38D86879 /* upsampling.c in Sources */ = {isa = PBXBuildFile; fileRef = A9F3BD312016B2B282FAE79B6731E3A9 /* upsampling.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		52E2860EAB392A2BAC2AB141E6B29960 /* EBWXModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C9A1F3EDFAF0689340501C383770EF3 /* EBWXModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		538A337C2A45781D73D4B1F3FB7B6DDE /* WXTimelineTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 42F9E408A2CE46E3B76C1EA326283740 /* WXTimelineTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		53B1406E5A92E0256487F9CD1C39D82E /* WXNetworkTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = A17D97A8EF680933BEB20A55EBCDB545 /* WXNetworkTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		541A354FDC3A9D51FF86A71623A0A13A /* EBWXOldModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 88FB711AB2764E5E7086C5524C422787 /* EBWXOldModule.m */; };
-		54230D4A056B740D0F74CDCCDD55CB09 /* NSData+WXDebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = F702CD4B9262E496775038D6027248C8 /* NSData+WXDebugger.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5483EAB4FC0BE8A17C894E8E5A20D552 /* WXWebComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = AEE5B062F503E710A7B0FF9D574B5C6E /* WXWebComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5568E5DF3D3E6F22163ACF7A1364340E /* enc_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 01A93ED18D0860659F8AFF856EAEBCE6 /* enc_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		55816FAE56E97C1A2497A7CC2FABE405 /* time_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A273340E8055EDA85267A141DF2590A8 /* time_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		55D317C2D088035B4B6A591EAC6029A0 /* huffman_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DC7C7ED35B837AFE897CAF2A34B639D /* huffman_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		565B9C4AAB8F06C897435F92C50B578E /* WXCellComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = E57FCABE882A305192E25CF3C8722B18 /* WXCellComponent.mm */; };
-		56C215C6E8E214B4F65A9306406B9832 /* mux_types.h in Headers */ = {isa = PBXBuildFile; fileRef = A30702DA138A9877C000FE60574467FB /* mux_types.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		57003296A61A98C51DE764C37305B7CF /* WXSwitchComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = A439808F7F3C93FFD507E60E1F6E7220 /* WXSwitchComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		573C8C01C2D51C972AE62659E7F49DF0 /* EBJSEase.h in Headers */ = {isa = PBXBuildFile; fileRef = D3C1D47E23D40EC5F0276FAFAEA23C30 /* EBJSEase.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		57402DD943F3E4FAFBE210263A9F220E /* dec_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = F12794CA188B8756E72C808DB5B15FF6 /* dec_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		574A886BE752384526879E8F1B6A22D1 /* WXWeakObjectWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ADE381C9780F5CE89F4943B6AC048F0 /* WXWeakObjectWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		57845BA9303BD010CF1A967FBB5EC0E7 /* WXDisplayQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A72B404DBE085F468042537622F7FCD0 /* WXDisplayQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		57986B2E9DD36CD20557C635BD3B1EA4 /* webp_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = B049E5DA3F941676044E86BC77B5AC31 /* webp_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		57E747513EB2743516D21D2625613D5D /* WXRuleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D76B25A6E743F9EF66321AB299AD429B /* WXRuleManager.m */; };
-		57F7BEFC987396610A814A16C2B58DDE /* WXApplicationCacheTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D60A5830F1E22863EB1D22339D0220 /* WXApplicationCacheTypes.m */; };
-		5867D0B48EF58DFF2E75DF3291359323 /* WXConvert.m in Sources */ = {isa = PBXBuildFile; fileRef = FB31B198269F8FBB6A915914E18555CF /* WXConvert.m */; };
-		58B4EC980CC7DF54C4F7A39719B65E34 /* WXWebComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 27539D9B2A2F8389AB26D4D878ED6077 /* WXWebComponent.m */; };
-		596193A2CA366774F7CF0175B03364C1 /* WXModuleMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C86C1A4DB1BEFD3FBEFFA5D175592 /* WXModuleMethod.m */; };
-		5A39C9B59B239899B750EF5C159720FD /* WXExceptionUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = EE27BB1F53421E393E05A405F3437F1D /* WXExceptionUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5A41CA1DD0906DFAFAA9C4DF83575ABE /* WXComponent+Display.h in Headers */ = {isa = PBXBuildFile; fileRef = 26529B5631AAD15C0E15227409B63BF6 /* WXComponent+Display.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5A5B1824CD1E518CD9347CDD56B043D1 /* filter_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = E140E026D95007B0B7214C0A5C2D4993 /* filter_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		5A8E0837885FE21ECEA0309B6A787297 /* WXConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 16075E1C01487783A46F19C5406DF2AA /* WXConvert.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5AB76F35C7B856385D4D44EC43A75744 /* cost_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = C3A23AEBEA52A6A1803672BE58162E75 /* cost_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		5AD5C158347019955565E37F813111DB /* WXComponentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 42FCCE7C105CBE4356971F79FA152DB9 /* WXComponentManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5B48C83CE3334A8E0BFC41BE92B094DE /* WXModalUIModule.h in Headers */ = {isa = PBXBuildFile; fileRef = A4925003CBAC621EBC5B06C8E2457060 /* WXModalUIModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5BA552F297A3D10D67BD0B881E9FD7C7 /* render_action_update_attr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 227F4242FAB401781A67CD958055ABF3 /* render_action_update_attr.cpp */; };
-		5C10BB2536D2F62EC4DCD5F8B5C1FC8F /* EBJSEase.m in Sources */ = {isa = PBXBuildFile; fileRef = DE43062A63113606A7D0C0B260010D18 /* EBJSEase.m */; };
-		5C363E0D90AF8EBCB3F37BAE8EE0EB5D /* render_action_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C89CE98C40CFE3A96A0D0B68CE303B1 /* render_action_interface.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5C9E16BCA74D303212B529A4249383FC /* UIBezierPath+Weex.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0F4A43931945E82C5DA9D1EC5AE6D3 /* UIBezierPath+Weex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5CE7009A3BFFE4A7901C43A0EED0D5A3 /* core_constants.h in Headers */ = {isa = PBXBuildFile; fileRef = B7ECFD2AC9010595D8CC478DA02AEE04 /* core_constants.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5D5179A369BAF0FAD10E2D91FC8A93AF /* dec_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 4E20432D426F22ABEB931F2C2C78F075 /* dec_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		5DAD82557768EDECE2F6A695F8D924C7 /* filters_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 6310788601150105C9D7AFF54D45AC39 /* filters_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5E26BAE4AFCC3E3C519D80B90F07F3B3 /* WXCSSDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 971DBE7D3D997A1E2DECC20C8C1BD99B /* WXCSSDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5E558D980DEE34C0114EB60687B15E54 /* WXInstanceWrap.h in Headers */ = {isa = PBXBuildFile; fileRef = FE5BF5B835CEF63B9BD060767DFEEE55 /* WXInstanceWrap.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5F25953DDB33713C5DCC77CDD1943F5C /* WeexApiHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 417E14C1A89F4D61DE283601C205396C /* WeexApiHeader.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		5FA5FF1082F53F226D93AC40E4C67884 /* random_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 2649E55A8151BC9CDD96FE2DCAFA59C2 /* random_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		602BE6814A91035B1663B7DB67B22D8D /* WXLoadingIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = DD1A2C56D6802C0F770DE2760E972FD0 /* WXLoadingIndicator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		603D6675649D9C28D871801480E5026C /* WXIndicatorComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9C83629BB33C9B41F69D35A75741B0F /* WXIndicatorComponent.m */; };
-		60458B1F3BF4476F3EB055017DE32BB7 /* json11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 80E76783A17376596888A4D50E9D0DB8 /* json11.hpp */; settings = {ATTRIBUTES = (Project, ); }; };
-		61093A3919E468B4ED3E2D5D19B9E5F7 /* render_action_createfinish.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6C56F7E8E30A11CFF44841BD257BEC19 /* render_action_createfinish.cpp */; };
-		6180050B8C3B6FE5C01000BF65CF5B17 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B3F8C4C2A5D953C48863959D51463FC /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		61D2B0275F21555DCFF030E57C4108A5 /* picture_csp_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C99E728A9A533C7A9A3BADA3C7028E0 /* picture_csp_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		61D4DD050E65AD515BDE2F3DD025F37A /* WXVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AC8572623E585F7117B671D088D40DC /* WXVersion.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		625EC24CD8516E1520701F31D51CE318 /* WXNetworkProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 564D8C0EF73E7378C9E89E77EA8AAF33 /* WXNetworkProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		629C8B0CB170BEFCB1D4B92686B4E8EB /* core_side_in_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = CC67579B661BBC035F57C4593171B2DD /* core_side_in_platform.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		62CB5551B99683289733CA97117330C7 /* view_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = BD79F4C6BEAD090B284A3783C0DF729B /* view_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		62F7E11684D1835C86847E5007A27DFD /* WXInnerLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1432ACA44F3B6D33334C40C247745885 /* WXInnerLayer.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		641609B353B4E2F3747EFF6F8EF7A64A /* WXDatabaseDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 57D88746C9A66B0748EE7F9AAF27A3E9 /* WXDatabaseDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		642FCE6CD452F24698FB717555E6ED65 /* upsampling_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 6A51A02B569935B1CFFB3A2BBB877CC3 /* upsampling_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		64B7564296B42FA0F0DC07F58F19E320 /* WXAComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = BBFBCD5918E867F40E2055561B1BF4CA /* WXAComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		650B3EE017E5ACFBC40110582B7DE3A3 /* WXNavigationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 447B917EA5C822A38458C9D537DD9223 /* WXNavigationProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		65200BF318FE306ACA989946346A5F16 /* WXDOMDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 283260E92B995709DD085C833062905B /* WXDOMDomain.m */; };
-		658DFD069844E2FE953C6BEF46ADD6D2 /* render_action_update_style.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE893D9B08F8A9E199262EC936028DC4 /* render_action_update_style.cpp */; };
-		65E84018B63EBA002ECA0DB9F6FAC78A /* WXRuntimeTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 785BEA1628F2E8279FEF117373A139E6 /* WXRuntimeTypes.m */; };
-		65F42903004252F151F6C643EE0119BD /* lossless_enc_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = D512893F36484D5F1D5044B5AF4D6F75 /* lossless_enc_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		6671E5217F68B3F824887D86CD2EC1C7 /* WXJSExceptionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CD06E9D60922F55E106442C930FA14CD /* WXJSExceptionInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		66947290D58F4EE2820B17D4EABA17C4 /* EBGyroEuler.m in Sources */ = {isa = PBXBuildFile; fileRef = 14CBCCE4F99D5F69E15F12EBAE9738FA /* EBGyroEuler.m */; };
-		66F4B24CAFE96670668B03C0063B2769 /* WXExtendCallNativeManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F8B69F7B70D30D373C51B72B11EC7282 /* WXExtendCallNativeManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		66FDF5EB9F195CDD2ED1605BEC5E910F /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 6DF23A16B80C0C56AC8B427B33F53423 /* utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		6765A5FDD656A07D6DAF4A4FBCF0A530 /* WXModalUIModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 617AAA9CFC80584480E9CC7404654BC8 /* WXModalUIModule.m */; };
-		67C2398EF2C12086AEDB1150F3A8A1F9 /* WXDisplayQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 92F658198A67759DF71A31AE1D2CAD5B /* WXDisplayQueue.m */; };
-		6816B339BCD3475DE24A6792B92498DC /* WXEventModuleProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 20092120087E0FEAF7B08C84EE41B1CD /* WXEventModuleProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6825EFD9F75414F0A2A21B8CA041C5E9 /* WXIndexedDBDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = D9C2316D06512708906F7AD219359C77 /* WXIndexedDBDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6858F461EADDD334F84593A1AFC095B0 /* WXDivComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 750DFD10E8A495F61B73935AD19CEA94 /* WXDivComponent.m */; };
-		68E7777E61D1331537A0EB98FEA08FDC /* EBExpressionGesture.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D787F2AF2771CBA4D62A3D55DAB1B22 /* EBExpressionGesture.m */; };
-		6948777E73B3D24C23A7F1A69F088E31 /* render_action_update_attr.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A5D9BA0E025AF65EC016531A0AF5110 /* render_action_update_attr.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		69FE68738563C27F9F4DCE97A70AB0DE /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FB38E0AB8A212E3F530506289CCCD099 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		6A1FDABD5021BE9EBCE0BAFD224D981B /* render_appbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0AF454C349198FCE5D4BF657983CEE /* render_appbar.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6A5621D99FF07EE45C3DA9D00815A8D7 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C702BE05EB93EE2C6E98210A896EEC10 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		6A67F662D32057D26F433991FE0742A3 /* EBHandlerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 707198A712ABE0EBC96B4E731C4F9A5E /* EBHandlerFactory.m */; };
-		6A72B357B6FA7C153C42455703F434E2 /* WXJSCoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = F2D0428444543AFAA5A2A2CE0D95AE58 /* WXJSCoreBridge.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6ABEF9A1C273A7212274BE904A6BCD02 /* message_pump_posix.h in Headers */ = {isa = PBXBuildFile; fileRef = 574046D5BB120076504E00F10E5E9CF3 /* message_pump_posix.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6BEC80D670894EA2BDC2F24E1F60A906 /* waitable_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 09BC24040A3FB891C746FB141E118E30 /* waitable_event.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6C7305ADA965B0A9DB32754687A41384 /* WXURLRewriteDefaultImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A3D029F5B28B2655DC0129087CEB447 /* WXURLRewriteDefaultImpl.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6CFE32C8DFF453F7E882F14CC4B3ABD8 /* default_request_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 852FC84A567B16BE4E766E27CEA115B8 /* default_request_handler.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6D28D2BD1FEC272B28D9435B8B28337D /* tree_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 21CA0C12626CD233BE9928CCEC516F8C /* tree_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		6D86903E739B4318BCC32AC7C445A33F /* WXBridgeMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = E32BF149530BB17C5E16D1980F3119F0 /* WXBridgeMethod.m */; };
-		6D8F391646C677E6D9B6D42181C3D3DB /* WXConsoleLogModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB7D019B3AD5CA7BE5187C9C683E604 /* WXConsoleLogModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6E53CE52C85FD2DD26EDC950828C0BD3 /* WXDOMTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 92B741E0CEA8769DC71CBA7370970206 /* WXDOMTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6F1D598840E3C27D8DB60513F10C7225 /* WXDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9126BB30A75A24D6C4DAAD56E2A8686B /* WXDeviceInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6F68D0D3D55831671E8FBAC045BAA8A4 /* WXListComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 67C20FBCE28AEC3E471098E04E4C640C /* WXListComponent.mm */; };
-		6F85D74B05B6462188646EF79EAC92E7 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E70FF581CD4D1EEA2B70A725379CF31A /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		6F9E496D324685D00E43F90B91E98612 /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C3D1BE6B14E09268D56C547DBB84DA8 /* SRWebSocket.m */; };
-		6FBD9C3DD375D708B0E877D65F6E4368 /* upsampling_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 27613CFAEF1255C7D18B59E63C5E42CD /* upsampling_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		6FC1A866D5FD912EAB6DA6E0C529841B /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A0105F2665EF9E45047B14AF32A325D /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		7001E9C56B8ED4DC9B75242A0A2AD1FE /* WXEditComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0257FDA68ACC029AEF2F7012CE2AFD5C /* WXEditComponent.mm */; };
-		709A74F90CCC5C5637D68725F0ADB777 /* WXVideoComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B1E2D0CEEC0548ADFBC6179F3039328 /* WXVideoComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		70DCEF2E8E9377662BA8C25EEDBF5E24 /* endian_inl_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 34C17278239E13469D8E4A555FEC9366 /* endian_inl_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		70E5F9900D98BCC48AC638E9D0FF7DB7 /* WXProfilerDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = AE3F773AC8E98ED609737F7CA3D860B7 /* WXProfilerDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		711E275542D5DBABBD13BE564903B283 /* config_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 653D2CE6B6588AD5E23381392157E330 /* config_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		713D913E728B60118338ECB0ECDD2A08 /* EBTaffyTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FAA1A97520D7CB9B5EB68FA01B035B1 /* EBTaffyTuple.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		71CB9AF5D3FC020351882977A6058B82 /* WXTimelineDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F76270672742083C30E0147E662634 /* WXTimelineDomainController.m */; };
-		71EF932D45672CF55A35A86FA899C4BF /* render_page_custom.h in Headers */ = {isa = PBXBuildFile; fileRef = 76608084D23396212F14045A160845B6 /* render_page_custom.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7249C560538DF0BBB21F202DD98900D4 /* WXClipboardModule.h in Headers */ = {isa = PBXBuildFile; fileRef = DA6F718B120A7B108A29930B217273D5 /* WXClipboardModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		725806C1BDD39E428C8CB80A9C3482DA /* alpha_processing_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = A46438F5804B24DCA8AF2A73F9913DFD /* alpha_processing_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		729E4FAA0D82F9BC20321580175A7AE9 /* render_mask.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4A22C2552E5B865E9C27390C678E89 /* render_mask.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		72CBE300070BE7D02E27470ECD74A9F7 /* WXAnalyzerCenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A6621B5A06160C20268D1FF942A39E2 /* WXAnalyzerCenter.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		72CC5DE5FC0B6292A21B618A03DFF3BB /* rescaler_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 8A163D5274787AA62C72E274E9605BFC /* rescaler_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		733F47088B04CF802B8D97B0A9880C52 /* WXPickerModule.h in Headers */ = {isa = PBXBuildFile; fileRef = C53B2CFE28EB177DB2AA4E4BEF3C1FC0 /* WXPickerModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		73627C8A49274965170D20A32FA81DE6 /* EBExpressionTiming.m in Sources */ = {isa = PBXBuildFile; fileRef = 79936D43243E99532FE4C61FCF7F8592 /* EBExpressionTiming.m */; };
-		74AF25D9DFCF4D292C2F06BD2A6616AE /* WXStreamModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 4425A7F96C7883DA025E19363BC36E01 /* WXStreamModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		74D9FBC6116BDD4ADED514EA6F3E19E8 /* WXDebugDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F133C79F5A985EF9267C876D0F8879 /* WXDebugDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		74F9BE45A88D518360319C4F0432F9B5 /* WXSourceDebuggerDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = C076496B0EE3F809DF270B3061DED99B /* WXSourceDebuggerDomainController.m */; };
-		751303870229ACE7441C4475A4D42428 /* WXContainerIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = EE928482D530C875CEEDF17C5CA816FC /* WXContainerIndex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		75421980DF9FB012F20DF973BF5C2127 /* picture_psnr_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 23005D6323BAB33DD315DD229B58459E /* picture_psnr_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		75A90D8AB048A5B6620DE537FB726C06 /* WXBridgeContext.m in Sources */ = {isa = PBXBuildFile; fileRef = DA22E8B354307DE67607B627B11C61C6 /* WXBridgeContext.m */; };
-		75BEE96DE1FE72527D9C136513F0543C /* WXDebugDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 588B1DF22DC12663D1C56C5FB056004F /* WXDebugDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		75D912D8D3509F6A7E21A96922D45B10 /* WXFooterComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2186A672DBF1C0DB12D9707C76CB93B9 /* WXFooterComponent.m */; };
-		75F978D6EE8D2B1E7644150F4D83833B /* WXDebugTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D2898C6193F603C6AACEA4442FE4395 /* WXDebugTool.m */; };
-		7662DF1573E8E836AE6F14EBBCCC2EE7 /* wson_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 126A040BEDEE96AAC187B3E8F5A18A0F /* wson_util.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		76BE3A74C2D0456947975F112C5AC98F /* WXRecycleListTemplateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FA8BD63B5CAFB500E9C5E831D9A30630 /* WXRecycleListTemplateManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		76D5CDE969A7E432A3C908D87C3C4C39 /* WXImageComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = BEAB0E045C95BC3D42ED5D3630643183 /* WXImageComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		77021D23CB82516015AC370EDE0A69E5 /* WXComponent+DataBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B3B0E00E5EB0BAE2760F01C384465C /* WXComponent+DataBinding.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		779F55E530552A2CF20A94B52A1FCCBE /* WXCanvasComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = DF2C9E0CAD5DB2E23BD745FDD0C27131 /* WXCanvasComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		783D855FE091416D85FEDFF5CAD49896 /* WXInspectorDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 688B9E4010E6B795C2865A4BE0DB56BD /* WXInspectorDomain.m */; };
-		78E37D50691E50F6A1C166C1DEF5E30F /* JsonRenderManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 857DC134CF138674AB3DD04BECD4BA7E /* JsonRenderManager.cpp */; };
-		796346C9FC08B9345E7A4902DB31CC21 /* WXRecycleListLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = F1DC9D2ECA8E4CDB66C0ED152D0BB92E /* WXRecycleListLayout.m */; };
-		79A640C073AE17B507B24BB07AF8EADF /* message_loop.cc in Sources */ = {isa = PBXBuildFile; fileRef = 08F858DFFD07EAB648B1A09CADC0234E /* message_loop.cc */; };
-		79BA229DB6A788B8BB01868D8D024215 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BA4E8B4BA0C71EE59F8274794E616391 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7AA5247DB316118793DDD11CCA425E91 /* WXDOMStorageTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 316EB9CF282755336D6EFABA1174B121 /* WXDOMStorageTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7AF4FDD5323F8CC856A83859C975AE17 /* EBGyroManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E70154B03FA2D7700ABFBF738E1B3F /* EBGyroManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7AFA9F4DEE1FC5C9B5C7212D33107C6F /* closure.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CC4175C573792B306F4CBC69B7E6A5 /* closure.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7B0EE3F0918B2366A2C7E190AAC58F25 /* EBExpressionScope.m in Sources */ = {isa = PBXBuildFile; fileRef = 099719036D28AF9F622D86C346D4F516 /* EBExpressionScope.m */; };
-		7B501F25E510175E37BA1BF7CFB6D973 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4942D5CB93B0A26765B6417510DAB51A /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		7B6BFC5B29FB8662B04224C930A11B5C /* message_loop.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F23BD4A985246D8B7536FD2BAAF4266 /* message_loop.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7B94F31AFF8402665C02818B29758C7F /* render_action_trigger_vsync.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF98273FC1C3FA77A28D2A4A79CB83D /* render_action_trigger_vsync.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7BAE62899E7EDAC5FBE7DD1DBC37E2BB /* webpi_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 26395C471A391381C8934522320DD20A /* webpi_dec.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7BFF46D1F7948CAF7925CD81E6FE0A03 /* analysis_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 7711034F765E54E1C7952B3AAAB8298F /* analysis_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		7C1F3B7F9BAE63FD86112D3A32A666DF /* WXHandlerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 7239E6CF32AD3B30C0FFEDDCC9B1C3EC /* WXHandlerFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7CE376F61914264AFAE1E17111BE48AC /* WXObject.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A91119F00550C57297F84B49E8229B /* WXObject.m */; };
-		7DDC352AD993CA97BC442470526E88A7 /* alpha_processing_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 715557CDE4F7E62560B934E99C1CDD54 /* alpha_processing_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		7E5A7F482E783F5C2B27025AEB4C6288 /* bit_reader_inl_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A87E61E44AE36A75F0FD9199501B446 /* bit_reader_inl_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7EA1E9BFC0898EA1A9262E46747BBF0A /* WXWebViewModule.h in Headers */ = {isa = PBXBuildFile; fileRef = E648C0012226B29A77BD9C7E4875A287 /* WXWebViewModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7F22E04F1D10017F0C24B4E24CDA6B07 /* thread_impl_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = BD0479CA7C6330BEF1A6300A9D01C0A2 /* thread_impl_posix.cc */; };
-		7F53C5700C995CFF9163D978F64B7C7D /* EBExpressionScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B81E94A295CD27E3DBC06078FAA95D4 /* EBExpressionScope.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7F6295FA824F40CDBEA2CE1076FE2C1E /* EBNativeFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 00143244253DB637A29A922D6B448A57 /* EBNativeFunction.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		7F6D64BDA870B1EC098828FA506DD6BC /* WXDevToolType.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC035A8F8B5B4FF3CF0DE7433F9F706 /* WXDevToolType.m */; };
-		8033D2B991CDAA5C1B87B62FC9C77BE0 /* css_value_getter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BDC1F81EE7912C2EC6E58CC88443905 /* css_value_getter.cpp */; };
-		8084E5D2386602F722CD9C031092389B /* WXWebViewModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 199EDF992C8E9D6CE0578A0D9A0A6474 /* WXWebViewModule.m */; };
-		814C7E5E9ED678F4C70D49697DBB1886 /* WXConsoleDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DBD739CA64C715A3BE652FBECE2BF5B /* WXConsoleDomain.m */; };
-		81A0AE9B81E3016B366A2839EE22032E /* render_action_add_event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A517E435BFFAD4F09C0E9D78584D6A60 /* render_action_add_event.cpp */; };
-		81F2352389DB1F8C8B6D05CF7712C82B /* render_action_render_success.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AED2463A704B22A8963535845DFBEB5A /* render_action_render_success.cpp */; };
-		82A6CAC61CADB0A34627A416BFED17C2 /* frame_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 75527C9E9277054C993EF51EA84C7B5E /* frame_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		83246FC5140DC214603DDF5991E43984 /* EBUtility+WX.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B29E36763AAFA7A53DC0F146EED41AD /* EBUtility+WX.m */; };
-		832C034921CE698FA27B09EE37E52C1E /* common_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = B207F58F49115B0D64EE51B7472C0083 /* common_dec.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		83FB18E94E546308E4799BF944F913F4 /* WXConsoleDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C5179E04421725162CC126E2BB89539 /* WXConsoleDomainController.m */; };
-		8404BE816EDA0AB29594EDB60E044755 /* wson.h in Headers */ = {isa = PBXBuildFile; fileRef = 57A1DE6298E167358B79D4DB2E69D224 /* wson.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8415FBEFAEE0F66430B88E51F81D150A /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B02007BB620EF4CCBCD239F3801EE41 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		842CEFCBCCE3C23931F462B15D57E3CF /* dom_wson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 749AFAB8332464D86023B905B1A70E87 /* dom_wson.cpp */; };
-		8453D2A5A55E3DDCB3B45A9E14EED72C /* WXMultiColumnLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 04D40336C13388583610E573031BEA52 /* WXMultiColumnLayout.m */; };
-		8476217B171B1DF59E32787303F7D3CC /* NSOrderedSet+WXRuntimePropertyDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CFAC8DFCA639A59B25A3C53009BFF51 /* NSOrderedSet+WXRuntimePropertyDescriptor.m */; };
-		849FACE8A8BD4E53423EAC292E8B0FB1 /* style.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 379BE2D025CA515F149A79108EE8EA1F /* style.cpp */; };
-		84BAECFC84069463EA609C94BEBF5C42 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 3741CE1152E8797AADF005063C770CC9 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		8523C5A0992F545992F7B6ECC7027CAA /* near_lossless_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 6905518B2D61D6DC628C6DE2B6A5C333 /* near_lossless_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		853384D3581FD931B1B45628911A867E /* NSData+WXDebugger.m in Sources */ = {isa = PBXBuildFile; fileRef = DACC4A78059A5CB50C255D5DACA56753 /* NSData+WXDebugger.m */; };
-		8651C897B11A5E95C8A68664E20ACAFD /* WXWebGLDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DC5280C30E9F194EC773F3B8F965730 /* WXWebGLDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		878566CF5C240BB41F114A9FFDD6B994 /* WXIndexedDBTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 429CCA750ED1C9DA834B1F69C537C19B /* WXIndexedDBTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		878584F8C913784F1E07DB0E3532374F /* WXInstanceWrap.m in Sources */ = {isa = PBXBuildFile; fileRef = 143A455A4287C8156DCF9EBB94B1479B /* WXInstanceWrap.m */; };
-		87FF1FF04AD7E1E0B2F7BEA41489F16D /* render_object_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = EF504FACB0FAC2BC212BEC4149B74228 /* render_object_interface.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		88199B0426CC5E77C1D7D9AC55FD4BE6 /* huffman_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 291C154913498E709C6E54849EAD622C /* huffman_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		8859360E8080B1FEA729FBFE6C2CCC6F /* WXProfilerDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = B5C863D501296F7912451AC3C2709AEC /* WXProfilerDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		886161ACFC8591263E22511331DD821A /* WXErrorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9184E6D24ADD5D568A33B6BD00105E0B /* WXErrorView.m */; };
-		891EE209C59270F9D36FF7C504459A5F /* http_module.h in Headers */ = {isa = PBXBuildFile; fileRef = 3866AAF4D20C20B4D008673E504793B5 /* http_module.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		89387F5E9DB94703806F061A3719005F /* core_side_in_script.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7DD569D7C5FDEDEAB92DAD6047B0821E /* core_side_in_script.cpp */; };
-		8959BA181C2BD048D5ADDCC9884F827E /* EBExpressionOrientation.m in Sources */ = {isa = PBXBuildFile; fileRef = 69E13804D88E5C6DA33A1A4598922618 /* EBExpressionOrientation.m */; };
-		897BD088FCB389B1D0D5EC028DBC00F6 /* WXDebuggerUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B5331187B7774795F6903C51C4D972A /* WXDebuggerUtility.m */; };
-		8988AEE9F394E3E1BE147420FB86D07A /* NSTimer+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = D9C92B59DD89DF38CF395EA558E089E9 /* NSTimer+Weex.m */; };
-		89D17B80800AA8496A4664F63F722D25 /* WXModuleFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = B689BD8AE3708DCCD131727DA071B716 /* WXModuleFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8A49EBDA0A8452D7A925F3EAA9818F44 /* render_action_add_element.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A81A0420E21740E4BE95EA1D36B09BC6 /* render_action_add_element.cpp */; };
-		8A51663624B064CFB057A81DC8F47E22 /* WXCanvasModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF88126AA6887CAE42D6CC2D314230D /* WXCanvasModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8A80EC10ED85AFD30C8D0A7361629B1A /* WXView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8690814B9B027077FEB7418909C49C45 /* WXView.m */; };
-		8AC2CCDC2B0BBDA476989EA548577AA4 /* rescaler_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 0DC85480C6A87E116090A7A9A75E62C6 /* rescaler_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		8B0A25576E15A797332087851D5E7541 /* NSArray+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = 589FAFECEA3AE16046843C3792FBE957 /* NSArray+Weex.m */; };
-		8B5BFADD736D66E2877D545B6DBA945B /* WXModuleProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6C75125D36ECFD73F8C827D0A31326 /* WXModuleProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8BE25E4717622D4F2ADC4A52944659AE /* WXPageDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA4AE6ED35CA252F4EE80D491DFC631 /* WXPageDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8C398072BFA98CD4AF7DF7478C04C263 /* render_action_remove_element.h in Headers */ = {isa = PBXBuildFile; fileRef = 30EE4B2FBF7A51FDE60B0591D7E377CF /* render_action_remove_element.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8C8039026008BC403E9132D5F283C2B7 /* WXCellComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = AF077A2262A5757FF623B0061E863CB8 /* WXCellComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8CBC16C0DACB9349F4A5513A0F13E82B /* WXHeaderComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F3834F47723D84EED3CC378C8AAAA8 /* WXHeaderComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8D07D02B0B19AD177CB1700FBE3B4953 /* WXAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = 39F271D37CDBFA4AE3732023C33A784B /* WXAssert.m */; };
-		8D4580E6ACD37B696F0CDAB3B8A54275 /* WXGlobalEventModule.m in Sources */ = {isa = PBXBuildFile; fileRef = FBAFD931AB3578887D76A714F51A8F0B /* WXGlobalEventModule.m */; };
-		8D8DA9FEE6F997B912C29262B7E095E0 /* WXRootViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A4EB4BC36A315A4E63A4D9946E41895D /* WXRootViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8DF6B13DCCB721C331343B53727DECDE /* WXRecycleListLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 90D4BE139634554B4E0531CBB6240B27 /* WXRecycleListLayout.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		8EB85A3151968A1B50750DE95F6C418E /* cost_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 272D7861187D1239F9A0129CF84C3EB1 /* cost_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		8ECA402ACDB928628FFC26E5BD9CDC9E /* render_page.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AC2EC0A0D7CC94318840A6328D6AEF3 /* render_page.cpp */; };
-		8F9632ED87074B3285F63B2B8102EDDC /* WXRuntimeDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 26FD58C518EF81EE3E9854C87EFC25D4 /* WXRuntimeDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		902078221362EA150B8CC91468471EAB /* render_scroller_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = C783A799EBA4357E0C8DB8283223378C /* render_scroller_factory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		907AA11754CC4020AED30278CE45F148 /* WXSectionDataController.m in Sources */ = {isa = PBXBuildFile; fileRef = D768533A6E5519163DD8531E35723F8D /* WXSectionDataController.m */; };
-		907C279D52E344C80D545AF2A4E731AA /* WXPolyfillSet.m in Sources */ = {isa = PBXBuildFile; fileRef = A89404987BBCCC789E77910517E1D66F /* WXPolyfillSet.m */; };
-		90D2ADA35ECBEEDD4BD7279B8EFD4348 /* log_defines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0255D439B3B4EF00ED06096E04C6FA4A /* log_defines.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		91073BC6DC4B8500A00C03B7B7E5945A /* constants_value.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D92C84F2F60B8D18C10DD39EF6EC8F3 /* constants_value.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		912DE293217148031788CBD195995992 /* WXDOMStorageDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = F5A10D2E37C73FAE87DEE38897820B74 /* WXDOMStorageDomain.m */; };
-		91C46862CD787F7EE7D0BF63AF98AB14 /* WXResourceResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 6353561875456A3926A0A5DF5E22A25F /* WXResourceResponse.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		925A1AD842962A7F837DF0398CEB3168 /* WXSDKInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E53E4CF0CA9D655D3A22DE7DDF36414 /* WXSDKInstance.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		92B31FE8DC9A09F2AA060501AB63DFB8 /* render_object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 228E4B12485F6EFDCEC568C59AF69746 /* render_object.cpp */; };
-		9303DE59DB1F78ADBC83BB893F3FA095 /* core_side_in_platform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01D9FA7A4F82C9C98BB22660271DFD6A /* core_side_in_platform.cpp */; };
-		932F4FD112340126B88662B34A815EF9 /* EBGyroVector3.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB0737769CA949732BF4B4E3CF64FD6 /* EBGyroVector3.m */; };
-		939A0E8B33A1C4AA9A435505FF447026 /* JSContext+Weex.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC905A73127DD779E320EB1AF2EDCC7 /* JSContext+Weex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		93CA508122C92203B50B41A1ECD7C246 /* thread_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B1E54676AB150EA35945A33C83ABE40 /* thread_impl.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9455FD4A05F73D8AAA68A3307FEAB139 /* render_object.h in Headers */ = {isa = PBXBuildFile; fileRef = 376710A2ECFF4EC9956C45CCF7A4213B /* render_object.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		94F86F635CDA3F8609E2560DF955FE03 /* JsonPage.h in Headers */ = {isa = PBXBuildFile; fileRef = B0635850016E4E9C3932F2B0B0AEBDD6 /* JsonPage.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		94FC9886E0FE69ED2DDA9E13F1657A03 /* EBGyroQuaternion.h in Headers */ = {isa = PBXBuildFile; fileRef = AC27B5C7B2E50B9BD88D30451DF8CCFD /* EBGyroQuaternion.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		95032780AC4C0BDD94C3AA26207CF84A /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 62865E06BD5FE82A269EB806539EBF3D /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		95DEDBA82B5D953A91CF96EDF8E08EB3 /* message_pump_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1A11C2E1AE7EA81E805CCE5EF38E8D72 /* message_pump_posix.cc */; };
-		96A64DF2D3BD15BEEE5D569B35EF2C96 /* EBExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 56532DCE6BAD2315E1C61960678AF7D9 /* EBExpression.m */; };
-		96CF2ED1787DF4011C1DD5C129D42773 /* EBExpressionProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = D1CE3579CE43DD6EFA87DAA975A2B423 /* EBExpressionProperty.m */; };
-		971576ECC64431E5F450C54C0233CE59 /* render_performance.h in Headers */ = {isa = PBXBuildFile; fileRef = E5C63F277A54A171CBD3F13892ED6282 /* render_performance.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9737913494A48C492AC88C4090711622 /* WXConvertUtility.mm in Sources */ = {isa = PBXBuildFile; fileRef = D25C4F77CA22D450FEFB386350C31235 /* WXConvertUtility.mm */; };
-		9743CEDF0B66176E649012EF8A1FF897 /* WXComponentFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DA93269709E08749ADA71A4BEE50E12 /* WXComponentFactory.m */; };
-		9837418A5AA467F935AA5284B9530ED6 /* render_factory_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = E88E719DF07BE85FFDBDF9C2390C317C /* render_factory_interface.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		98A055EFA9A53FB6BF540897E136EF59 /* WXJSFrameworkLoadProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E4784D50E23AC2E6D613DCDAC424BFF /* WXJSFrameworkLoadProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		98BFC01F3A617E0738F3EE4E9D281853 /* wson_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = B4FB2F3507912F2188496E2475A11872 /* wson_parser.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		98D10FEAEBCA5FEF4FD9F399BC991B75 /* WXAppConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBE305F902AA096943928998332943D /* WXAppConfiguration.m */; };
-		99049B90130D929D863E52841D6AA22E /* script_bridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 755B2D2A9891D9247D25651476283530 /* script_bridge.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		99AE746056BBEE403D958825D80E8C63 /* cost_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 6E1F7632079A06CBBCDDC0AEB2425BCD /* cost_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		99F2B7D6D4652602EA0B7BC1DBFD5CCF /* alpha_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 06A688D159048C1B3B0414BBF8B33B03 /* alpha_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		99F73CAC5D9FE65892F2BE0686CFC6E4 /* WXSDKEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = E72931779D644121C2B1D00495012790 /* WXSDKEngine.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		99FD1CFE8543EB978B5E042E76518936 /* render_page_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A839923E143BE3DAFA2215D8D27E6DCA /* render_page_base.cpp */; };
-		9A126F35E390ACF843C0FF4EF9183E20 /* WXModuleFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 0836949500BF9C257365910B2EFED23D /* WXModuleFactory.m */; };
-		9A30DC27A05C533E3E9F94C8E345617F /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 03AE9F14E5E306AF858A165FEF8C3C90 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9A45B6BA90F8EBC1999020AFE18CC9E6 /* vp8li_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = DC193672FBD0D56FFB1E4E6C50F535BB /* vp8li_enc.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9A68937F19EC91EAC6CB7CF572AFE555 /* render_type.h in Headers */ = {isa = PBXBuildFile; fileRef = F6BDC98C832CB1E3DA88B27B2E4B65D8 /* render_type.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9A6A575C72C08BDF6A58E6722218F910 /* Pods-WeexUITestDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BD85BF5B9247B85DC1C8E7E7A5309D0 /* Pods-WeexUITestDemo-dummy.m */; };
-		9AF873DDB20E3FFC00FB7725F84E9BAE /* WXProfilerTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B2583C0B8A4F9CF6AA3E55B6B620FB /* WXProfilerTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9B2241FA02747C742B9D4EA9F184C56B /* WXFileSystemDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 9719A64BBA6034679641C3E1A3B2662F /* WXFileSystemDomain.m */; };
-		9B941FFD2419BB90C19CDCD92EB269DA /* WXMetaModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A15268E8755E42EB4B47B48545FC948E /* WXMetaModule.m */; };
-		9BB2CE5FA9D086AE2783427D159D4623 /* enc.c in Sources */ = {isa = PBXBuildFile; fileRef = F7F1797A5D3D2AB6E5916FEC099A70DC /* enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		9C52FCFFE9F54B6000554E9AE54D8EA0 /* WXBoxShadow.h in Headers */ = {isa = PBXBuildFile; fileRef = F270C55300BFAAF7582526134C556F72 /* WXBoxShadow.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9C80FECD534156CEC2D5C0878CB7BE25 /* vp8l_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 0C7F3E7A56D25FEDC5C6CBCC6064370A /* vp8l_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		9C935534F2E5C8886E7B93D9A349E074 /* WXJSFrameworkLoadDefaultImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D447623A67C2C47B857F6161207499 /* WXJSFrameworkLoadDefaultImpl.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9CA0A8A9B3CE5CE0F57091E063EB652E /* render_action_move_element.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8474D4CFFB6FBEA167000911A4C27363 /* render_action_move_element.cpp */; };
-		9D2540416C6BA8530505928BE6187325 /* http_module.cc in Sources */ = {isa = PBXBuildFile; fileRef = 27710DA71383416300535ACD6D01788B /* http_module.cc */; };
-		9D68E82B34C37BB00A54920CA7742A20 /* WXDynamicDebuggerDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CF8AC7110C2C269AD25BBD82B9FB4E7 /* WXDynamicDebuggerDomain.m */; };
-		9D8D9243EF7B1B445C1A915132194FC8 /* WXJSASTParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = A358FA10C32008617BF04A32A1AA002C /* WXJSASTParser.mm */; };
-		9DCF7BE1F2FA099346D5577DB96364AA /* WXBridgeMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = DB6CDC9C331DE89FFF3C8B95D3B8909D /* WXBridgeMethod.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9E25AA08079C1EF581BDDDA98D7CDBFA /* WXTransition.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35E1D9B3C206789807B4B7A962D51CA6 /* WXTransition.mm */; };
-		9E3A26737CA72773EDD70BCEBDA0FE9E /* alpha_processing.c in Sources */ = {isa = PBXBuildFile; fileRef = BA453A56E81CD445DBBB1B384BDD205D /* alpha_processing.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		9E72F962BD3DD12EE6DDA2A5BAFB1A3C /* WXTimelineDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EEE887F1C8AC77A04E10C127096DEB1 /* WXTimelineDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9EC4CB5E4752F3DF2C0FFEBD382DB3E9 /* WXComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 12DD2480D399120FFA8F881C83C6E44E /* WXComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9F49AE1346A0052F565E881FB68B4B76 /* WXIndexedDBDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AE9B4EE933264ABE520CB3B92932BAF /* WXIndexedDBDomain.m */; };
-		9F6C8F91918923D92E1A0051A9883B50 /* WXErrorView.h in Headers */ = {isa = PBXBuildFile; fileRef = D219BEC5F1566DF319D1947A5D472330 /* WXErrorView.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9FAD865DD5F2E657B6565F5174255DA8 /* WXRecycleListComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AFFCFBE9C4C4A79AFC4D22626C9AEFC /* WXRecycleListComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		9FCA0D054B5D038EA7F87D862B63D1EE /* WXWebGLDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 90C5DBB0813A4F204BFB94A0CBCF2282 /* WXWebGLDomain.m */; };
-		A0B64E3F59BF9D33DEFEFCFBB392219F /* rescaler.c in Sources */ = {isa = PBXBuildFile; fileRef = C6DA6B9B49ED77F945DAD1352B790172 /* rescaler.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		A168702FF0079906C5DEF8A43024236D /* WXView.h in Headers */ = {isa = PBXBuildFile; fileRef = 24EB0712F76D4151717F5EFBCC5A22C2 /* WXView.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A19885FE4816D90654B448E1D476196A /* WXFileSystemDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CA11531934B9BD06D11DE5EAF6A121D /* WXFileSystemDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A21D10EAB8670352C223A370EE343666 /* WXLength.h in Headers */ = {isa = PBXBuildFile; fileRef = 0567567E523BE2BE8694FAEE66DB956B /* WXLength.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A26FCC4812EA05D4E6BF81EBE5C748FC /* yuv_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 5E3FB7D2C61813EC676AEC786050D6C9 /* yuv_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		A2870F96B469D31CCF30674E9C166C70 /* histogram_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 22DA81F07007CC8FF313B87A70F21E59 /* histogram_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		A3072210A2F3EDC3F142A338B6B83F19 /* WXIndexedDBDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = C9328B287F546FF4D3FB0CF5A6CEA647 /* WXIndexedDBDomainController.m */; };
-		A342698A00B89CF0C750FF9988E93CDC /* rescaler_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = E31DD62C0A393DADB3975791FF6AA229 /* rescaler_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		A356369AD45D8C2FE0EAAF4D20145891 /* vp8l_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 6DB93DB6CDDD37CAF9727C8EA585AF4F /* vp8l_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		A3EB8B6C685405C1DA49EEF3ECEDBC3D /* WXStreamModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BEF1DF714F80E9161909B07E1574EB6 /* WXStreamModule.m */; };
-		A436D73E66DBBA3DAE4F2E678A30C856 /* WXDefinitions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8881F541E86C486720ED44C61CE9C0C1 /* WXDefinitions.m */; };
-		A48C0F2384346B40F3723CAE5468F25D /* WXRecycleListUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B4A8C434F488BCC61C1AFD9B9FC42EC1 /* WXRecycleListUpdateManager.m */; };
-		A4A67B79EEDCC0E1BF8257E323FFBF97 /* WXTimelineDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = FF780B8B99107B422737CDEB140E1A68 /* WXTimelineDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A4B97BE6223E5A31A9A74393B9D93862 /* render_action_layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 9220F44F45F24C3820021DDD296603DC /* render_action_layout.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A4FB97DE28E5E37A82712A2154EE1A4E /* WXExtendCallNativeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DC3DA9AC7A31B49D443C2ED3DD38F37 /* WXExtendCallNativeManager.m */; };
-		A53B225FE9F2B8AAD8E5588994A2A31A /* WXRecyclerComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = A2159AFF7924B506CDCE0853E5AB19DC /* WXRecyclerComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A5BCD10513E3CE82E41AE73A3250515C /* WXResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = FF95A539C2D23962ABC23476B61F1103 /* WXResourceLoader.m */; };
-		A62B23068252FBF8D4034B7C9A55A41A /* render_action_createfinish.h in Headers */ = {isa = PBXBuildFile; fileRef = FFE1D21B636F3E6897EAE41ACC5E01C1 /* render_action_createfinish.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A630DECBAC2EFF08DE3CED0B03E94795 /* WXMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 299B091BE1D45D0A8336B3AD19D636A6 /* WXMonitor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A67E726A0BB237B42E783F055F3AEBFE /* color_cache_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB60ED994C33D0DEA94615572C8F132 /* color_cache_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A68C6AC7AE3B3F41E4B527CB5A8263D3 /* quant_levels_dec_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 910241109EF06A11871B0507F5C9294F /* quant_levels_dec_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		A6CD7128FC641E0985D4462CD54DF5FB /* demux.c in Sources */ = {isa = PBXBuildFile; fileRef = 8C0130C14A50D4692C4E274EF08841D6 /* demux.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		A756161A94D252AD959AFCDF257FED99 /* WXDebuggerTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = CBCEB17304D416691ED412FBCEC49975 /* WXDebuggerTypes.m */; };
-		A768317D7A116127448EBC34F47BB971 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = B954548ACCEB1BD207CEFDCDF5C7FFBD /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A7BD5D6B7E9B00C04947D94F740A35F0 /* thread_impl_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = B949D2AE94ED94A64F54C3D7A0A455C6 /* thread_impl_darwin.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A7D6217809EE229AD323C4537514EA84 /* WXPageDomainUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 25E4F248658E57C3D33FE06E88B894BE /* WXPageDomainUtility.m */; };
-		A7DF1DEB2E1E2BD32ED301F3B5EAF134 /* NSDate+WX_JSONObject.m in Sources */ = {isa = PBXBuildFile; fileRef = B85CC15E1C2E75081EBCF38BBEACC5BA /* NSDate+WX_JSONObject.m */; };
-		A7FC902F674E778C30F017ACD97C29A0 /* WXSimulatorShortcutManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F1BBC79353A69E390B73F166C87761A5 /* WXSimulatorShortcutManager.m */; };
-		A807C5CCB59B1B9859E4B317ED2D692E /* EBUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 835103DFFDC11E2D8D0890952D546563 /* EBUtility.m */; };
-		A86C11775CDF8C24EC139939B7C479E5 /* WXComponent+Events.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F76688311A99F446EB1955FEB61E314 /* WXComponent+Events.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A893FF168F5944B67F25149725B4BC98 /* WXComponent+PseudoClassManagement.h in Headers */ = {isa = PBXBuildFile; fileRef = 82AA7438CED848E75D3FD1C1C3BB5F49 /* WXComponent+PseudoClassManagement.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		A8A24E8CD9FE9C5BC987F854613C2997 /* WXImageComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 21BDFAD9337F234ABECCD8DE701F73E9 /* WXImageComponent.m */; };
-		A9DC89E8562675260B5216513C79DE8E /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 54B83AE7398DA8AB4FED9B3DA57D8DF5 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		AA19A4C29A218D1711E7723352AC6BE1 /* WXPageTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = EA9680EFD4BB62ADE3544DC15365654B /* WXPageTypes.m */; };
-		AACF6262DBE399AFE2C89769F1C57D2F /* lossless_enc_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 890DD6A1D89D152ECBD1C8B4A51C4F4F /* lossless_enc_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		AB4AE40ACB5E63F2ADD133ACFF1A110F /* EBNativeFunction.m in Sources */ = {isa = PBXBuildFile; fileRef = C99222E5BC9EE32C377E1A4B83EB1D09 /* EBNativeFunction.m */; };
-		AB62F1F08DD787966117B11829E14F05 /* NSDictionary+WXRuntimePropertyDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 60F4B24CE94D2F72BC30FD57CC493F1A /* NSDictionary+WXRuntimePropertyDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		AB893C5CA47F5CCBF3C4D4419C572780 /* eagle_bridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 20A3EB852C3418AC7550D963CC70CAC7 /* eagle_bridge.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		AB93A9E6CC49F434508AFD3DB767A61C /* WXDebugTool.h in Headers */ = {isa = PBXBuildFile; fileRef = E1D96880A5828F17A209085D4AD1BAC4 /* WXDebugTool.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		AC20A4C9E45E2513C8B1273040247E1C /* WXComponentFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F29A64CFE29E3E7B8D20109A625E54C /* WXComponentFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		ACA4E9453A8A6806370C9C4037A50300 /* filters_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = FE7655849DF77D42A4153FD758A4E79B /* filters_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		AD3226A64CA17654AFC3804BA87DDD70 /* WXCanvasComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 80F3C571DF359DB4A11352DBA10E2D7F /* WXCanvasComponent.m */; };
-		AD82FC2F604111A2371E51E48C920F73 /* vp8_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = DCEEB6025C9DEE93EFFD35C04EC3BC45 /* vp8_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		AD965565CFBEC790E32D27E85D81065E /* WXWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 96146728562E7111791D8137B2675569 /* WXWebSocketModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		ADA81FB09CEF484928E00FDB705161EC /* WXRuntimeDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = CB9FA4227005707427A3C9605385814A /* WXRuntimeDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		ADFA85B5C6F8238ADCC9986AB53D9FFF /* EBJSEvaluate.m in Sources */ = {isa = PBXBuildFile; fileRef = 52613ABD5111A2F14AB0F64FD524B4E8 /* EBJSEvaluate.m */; };
-		AE0BE9A2ED9C638215F9EA8DAC609424 /* render_action_createbody.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C20F26304A6A127CA15A4C1265C2554 /* render_action_createbody.cpp */; };
-		AE599572C685CE4D22A74A462A401B53 /* WXRichText.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5A329D0C585706FF2B4DFBFD1A620ADA /* WXRichText.mm */; };
-		AF4A1C8195CA917E2DCBFC23866C5771 /* render_appbar_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5011BDBC7EAF5EC6770B94763C0F0184 /* render_appbar_factory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B03A7A36E9FBC6466754C10A2DC14FE7 /* WXInvocationConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C5DAD2B178975D5A26898D63156E143 /* WXInvocationConfig.m */; };
-		B0C7E004DA4FFCEF75FE0B57F786C35A /* mips_macro.h in Headers */ = {isa = PBXBuildFile; fileRef = 03734C65E2779B2D91D8FDD54981FAFF /* mips_macro.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B23A96AB5847AE509944ABC71E14F02A /* WXTracingUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C5BDA2B0C456F712B2018CD7BF2606A /* WXTracingUtility.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B2A3C9327704DF5968EDE2F44F3A8AB4 /* render_mask_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 36A618D4D2AD812E897D70F57E46B3F6 /* render_mask_factory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B2E4AA86B2E78AEEC4DCD2425DF94877 /* histogram_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 518CA001FC5D00215F85C3AF269D9471 /* histogram_enc.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B30AC6AA2209DEB18D6F74FF9FC2BE7E /* WXRecycleListUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CD57D3CAD159090439CA5B63B3664A7 /* WXRecycleListUpdateManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B327B3FE6A78D33AE41372319B0D74AB /* rescaler_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 6B2088C1DBA7F86C9EF057C0A3405C1F /* rescaler_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		B35A261FC87A770864C3AE535B07E15B /* WXLength.m in Sources */ = {isa = PBXBuildFile; fileRef = DB66EDB88715CD1EFE2C0012452C37E8 /* WXLength.m */; };
-		B35DC09E6F0F54BE932918110BF19D3A /* WXConfigCenterProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = E365D88674D21919E5C129FF9E6DB349 /* WXConfigCenterProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B38FC09D16CEB54364AC4736975198DF /* picture_tools_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 08ADAC195BD0D98F724FF6FA2CFB0177 /* picture_tools_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		B3CA2C7312458116DBD28BD9FF9C7FB8 /* WXInnerLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A67E094DD5612AC44175A43B54E20F4 /* WXInnerLayer.m */; };
-		B3EF1B042956DFF3338D8DDAB1806D57 /* WXTextAreaComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 21890F185979BBE342F9F81F6809DA57 /* WXTextAreaComponent.mm */; };
-		B402F5DC3D7B9CE32B3C563B402A3809 /* message_pump.h in Headers */ = {isa = PBXBuildFile; fileRef = C4AF39426CF128D7BED382941B1DFC72 /* message_pump.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B440D1105CD4191D1E622928C87E6EAC /* wson_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7EC1B99B1B0076AF5ECC0BB970362AD3 /* wson_parser.cpp */; };
-		B4708D69418FBAD52E5EACB0B7CA0473 /* WXApmForInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 5963DE8F5AD74DBA443C17DF746D5DAE /* WXApmForInstance.m */; };
-		B4D9AF81FC96FA4961085EC41145EEFC /* WXDOMDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D79C4BA4538A43EB1E6A559C598A59B /* WXDOMDomainController.m */; };
-		B534AD803F1A9152FB089040078DAAAF /* WXDatabaseDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C45E4CC8FA3D7922179E3E950A4F047 /* WXDatabaseDomain.m */; };
-		B5460847CD7E3B827BB31A780F42C899 /* WXConsoleDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = B1C9B1188852DEF5FD73FB3C2D97FF91 /* WXConsoleDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B5613AB1A5F76D3A46115BFDC8596331 /* WXBridgeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DF8284E51BBAFB0B94EF8B6077A763D4 /* WXBridgeManager.m */; };
-		B5837340D27BE001D05CD639F8703EAD /* idec_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = FDFF6B805300FA364E6C98E3DE3657A9 /* idec_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		B5D49E05AFE70CD7E84564ACF7D24185 /* WXFileSystemTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 89DF62AA9A3F430B40EA844AA359F91F /* WXFileSystemTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B71DF8094EB2DE85BFFF66FB3A4A21AA /* WXMemoryDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0483310224B3C72C8A35173E13AC3B /* WXMemoryDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B72B925494DB3C2986C1E6D6F2B25A6E /* render_scroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCC3C04588F2A2865190B2B7A1A4FD06 /* render_scroller.cpp */; };
-		B76DB0032B062A50C1152EA8A6F5BCA2 /* WXRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49D075A3BE65E5E1B82F6E7D5AE96275 /* WXRefreshComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B771D36C5CE5576DC26602BE2B784196 /* enc_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 7846D8E21864529759418DF69A0D5F68 /* enc_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		B7810782D3E814D8112C64E2F566430A /* wx_api.h in Headers */ = {isa = PBXBuildFile; fileRef = 0810EC959E26AE71394D5FDE4D3F6EC3 /* wx_api.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B7D4CF25ECB8CF9420F117810A727A90 /* WXEmbedComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 05740E523A72F980E1906F2171A5032E /* WXEmbedComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B8455D6A3A9561164B99592E442FB853 /* WXScrollerComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3F26A817A3EA5F11E6AEEF477E3E1750 /* WXScrollerComponent.mm */; };
-		B85A746B4510A5AE9D85193E171C0DEF /* WXPolyfillSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E57AD3249A1625EDA6F9853920ECF2 /* WXPolyfillSet.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B86FB306370C50EE0B8BF943281EA402 /* NSObject+EBTuplePacker.h in Headers */ = {isa = PBXBuildFile; fileRef = 98014BA78AD357BF63EA957B30266405 /* NSObject+EBTuplePacker.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B919D35E36C63753BCC5CA897C0A8A7B /* EBWXUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2294D500A3076758A84D6376836F99A2 /* EBWXUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B91CED527D0C4465A6FE39FB573CFE56 /* WXStorageModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 52ED316BD2DA7013DC92A959AC245B4F /* WXStorageModule.m */; };
-		B92CF5345A2A81794B77730F4AD7DC2B /* decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C369F5080DDE7FDB8DB370D02852FF1 /* decode.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B99408B288CC66CAA4B4AA155AB3F3C4 /* WXAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = E1588BD2BD00D730FA92B51B9C55F5C8 /* WXAssert.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		B9C1A1CCECE87B1227B2656F5836520B /* WXRuntimeDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 220B636814A4BE99D5ABBF9283D5CDBC /* WXRuntimeDomain.m */; };
-		BADC0923378EE838F947CEF3708F19AA /* WXCellSlotComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = F07FD118D7F91DAE2BFF671E1FD696F0 /* WXCellSlotComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BB0C6F21E6E4B72709640B7DE6BB0B58 /* EBExpressionOrientation.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF10CCFD7DC524B871484F99082016E /* EBExpressionOrientation.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BB5F545BC8A2EC12E4A22FCA864508C2 /* WXDebuggerUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 37805030199FE45AFF17052FB858587A /* WXDebuggerUtility.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BB82AA0C84F8824BFBCF6E2B7C8470E8 /* log_bridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA6B7198E908F90672D8F9052EA0EC1 /* log_bridge.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BC11C55134297932FE7A470E4C807AF2 /* WXAnimationModule.h in Headers */ = {isa = PBXBuildFile; fileRef = CFB666791566E44EF3D842F562575807 /* WXAnimationModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BC882A3D41CFC73A47B7F9B107969F12 /* layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 913087348EE1FDC7047EBE34EA75CAFC /* layout.cpp */; };
-		BCAD4986320A78BC51A4C7626338EAD2 /* WXLocaleModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 136A04B23056E506174EB70F4E7E1B41 /* WXLocaleModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BD0902FA9DA058B4D905A5E44C813325 /* make_copyable.h in Headers */ = {isa = PBXBuildFile; fileRef = 200782B8FADB56E511F01A85AF98A4DC /* make_copyable.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BDEF353F38D69B99417886484453627F /* WXCSSDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = A632E8E0F72D6FD93DA49734D3BA64AE /* WXCSSDomain.m */; };
-		BE293496D7E0ED7DCDC95C2D5376908D /* EBGyroVector3.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2F4B5FD546A8005197C342FE6BA17F /* EBGyroVector3.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BEA5103212F2B3A8629CB5AF9F724C63 /* render_action_trigger_vsync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA320FFC9D173CE46C59D11405D27738 /* render_action_trigger_vsync.cpp */; };
-		BEE9734F18411710F7D6C18CF054092D /* NSDate+WX_JSONObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E6A5CC47E20CB055B8A835F901DE00EE /* NSDate+WX_JSONObject.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BF83A4E3283A636F35D2F447AA2A0B6F /* render_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 51778F83FDBA40339C0082663BCE545E /* render_list.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		BF88F65C7B6A72D1704922504A265D2D /* log_defines.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4EAC33AD73DB9E2C46B9BD90FA0A5C95 /* log_defines.cpp */; };
-		BFD4DB43491D42DBB8D6104B0D7CB11B /* WXTextInputComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0033441CEBBA9F8CE564361515728CAB /* WXTextInputComponent.m */; };
-		C03CB6CBF0937FB67734616A41E7B90E /* lossless_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 226CF447C08734967AA6C899A5EA24B5 /* lossless_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		C04578AEADCED1F4FCE83892E2683077 /* WXDisplayLinkManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CB5F42FB40D084DDCA4EC8473056628A /* WXDisplayLinkManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C11CC57BE173E92C8B9BC90ED6523187 /* WXRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C8745742934548267445C335A0FDA6F /* WXRootViewController.m */; };
-		C15A8D1D2671D7B40D048F46E1E43426 /* WXAnimationModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C817C91B676EF472497E63FEF907BAB /* WXAnimationModule.m */; };
-		C20EF5F81C67811054FE406F108F2E6E /* WXDatabaseTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 477F1538ECB1049ED7E3A078E122140A /* WXDatabaseTypes.m */; };
-		C21658FE203949C819559C5F2CD62AD7 /* constants_name.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D815E4C7BA869860AB5356DEC9DB0C6 /* constants_name.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C23138F72E895CBC9314FCC55FB8B393 /* filters_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = BC3D1BA97F230F382845F4539973E4E4 /* filters_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		C27639533F81280750356E0ACDB4047D /* NSError+WX_JSONObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B178EDF8D33BBDC2C373BFE6D87C0A0 /* NSError+WX_JSONObject.m */; };
-		C28CACF54EE520B36948BAEE8EBFCDC7 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 93648363D06CFE1E7BC2B021D1A758B3 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		C2AD43F7BE351C65DF27161E1D7DB610 /* vp8i_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = F946E76C49CD4C7C497653610E480FA7 /* vp8i_enc.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C2FED3268895EE62E7C82A2F82E8D2EE /* tree_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = ED0811492D08EAE304004EADA34BAF1C /* tree_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		C3161C4D9E7479AA4F0ADBABA63B8215 /* WXTextComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = DB2E1B35A59CFE89F72AFEE3FBA4A652 /* WXTextComponent.mm */; };
-		C38E17CAE0CFB85651C83160FE9C9507 /* WXDevToolType.h in Headers */ = {isa = PBXBuildFile; fileRef = 873AEE46C5C7387E0F7198D4E92FE694 /* WXDevToolType.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C3A8B10C06E47B74FE1050FADC797F0C /* WXComponent+DataBinding.mm in Sources */ = {isa = PBXBuildFile; fileRef = FF9DE7A2E1770DCCAC943871AAB70D89 /* WXComponent+DataBinding.mm */; };
-		C3E85972F6B8D371E53F1B9C878E7E7C /* WXDomModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 11B31C576905D32B582E586FF255A41F /* WXDomModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C45BB6496AED067CD99379F4AD00DB97 /* WXRecycleListDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AA920997C56ED998FB1AD39A0AAAE2AB /* WXRecycleListDataManager.m */; };
-		C49D2FCA31B5C905ADC1E41980FFE1D0 /* WXResources.m in Sources */ = {isa = PBXBuildFile; fileRef = D08D3EA5D6154DF1CE9F24E97900709D /* WXResources.m */; };
-		C4EA645B76454DF19E94DA94035DC782 /* WXNetworkDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = C4E644868A49CA9A1BE59C8A24E8D23A /* WXNetworkDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C5659ED7E310860850AB7F50A4531D8E /* quant_levels_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = B00F53DFC9DA3291512DFE28AE03ECEB /* quant_levels_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C57F63D3D73CBAA95856496B115EC587 /* WXThreadSafeMutableArray.h in Headers */ = {isa = PBXBuildFile; fileRef = B850A513DFCEFBB0441052B1C32D25E8 /* WXThreadSafeMutableArray.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C59121BC592C70AEFC1627C36C2AFBC9 /* EBWXOldModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 554829D5B19AFAECF09B35BFE575EA3A /* EBWXOldModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C6230A0FFE2066FDA1F4DD69C764B22D /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 660D561D446C4B928575C40DC822C970 /* types.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C65EF991675592C4FCA6D04A1E1702CE /* simple_render_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = C581AE14D2EC657A0AB9C2489A6D8C72 /* simple_render_factory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C6A130A5FAB160507E826DAE8E7FC0B6 /* time_unit.h in Headers */ = {isa = PBXBuildFile; fileRef = BEB8DE8AA1603764C252C52EFEE1CD42 /* time_unit.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C6CA44CFD001CCFE871904776F74C10B /* lossless_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 22FC4738B8CBEA8C678773DECCBAC239 /* lossless_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		C6F428D06AB6A4CBD4122B7A5CB057ED /* WXMemoryTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 10BB2944AFB5AC38A28EF89F9E687CE4 /* WXMemoryTypes.m */; };
-		C701B7167CF9FC865D0B34CEDE63D355 /* frame_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 0C8211BC38B16DDC3D089439810A4EBB /* frame_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		C780A7CC4DB7B1437BD2068962F31304 /* ssim.c in Sources */ = {isa = PBXBuildFile; fileRef = DA2E916E84F581BD243A4496CEE25C8B /* ssim.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		C7E0C7C42492270800567E32C6C339C0 /* WXRuntimeDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FEE6857CC00C14C12102F8B911E4450 /* WXRuntimeDomainController.m */; };
-		C882711624091B5499025CB261BAC5ED /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CB96A68E717337BDF1B92082C17F10D3 /* SocketRocket-dummy.m */; };
-		C89F6EFF875C1B78F2E9435A4883345E /* render_page.h in Headers */ = {isa = PBXBuildFile; fileRef = 5802092E4F1DB06997B299A27BB6C689 /* render_page.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C9329756432188145234D96A58C9F921 /* UIImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C1DAB5173BE4D9AFD90E1774F55B88A /* UIImage+WebP.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		C93DA7E503A0F5A5ACEFBACEA3CF4A8C /* WXBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 05CAFC367FBE9AA142F5DE1F652260B9 /* WXBaseViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C97D131ABE94A9D3BA479927B7912FCE /* JSValue+Weex.h in Headers */ = {isa = PBXBuildFile; fileRef = FD1351BF06D589BDC8255577ADB86843 /* JSValue+Weex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C98D4A7D6980701D13232AB1E7D0D0ED /* WXEditComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 666B4A6035789E80E60C32EE60633040 /* WXEditComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		C9FC0C77E29E00AB773225BB9C12407E /* NSArray+WX_JSONObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 87A767DF00D03EEA3C7C7DD5A5EE4F23 /* NSArray+WX_JSONObject.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CA577A2D57297BB6850E7A10252A60E5 /* WXSDKInstance_performance.m in Sources */ = {isa = PBXBuildFile; fileRef = D1A2BCA1F77501B181876E43A67EE18E /* WXSDKInstance_performance.m */; };
-		CA61357C9DBB8D037D38032A9696E68A /* WXResources.h in Headers */ = {isa = PBXBuildFile; fileRef = FAD68FCD74BC7985D496456BED386D10 /* WXResources.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CA676E6FA080338F94447C662955D21E /* NSArray+WXRuntimePropertyDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 766C61EAE2ED0A41B1BD895D097C8856 /* NSArray+WXRuntimePropertyDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CA697C21710588F2B0AFB02738F71B7A /* WXComponent+Navigation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0644E3B51ACAD71D3B5C37E398E3550A /* WXComponent+Navigation.m */; };
-		CA8B55B43AF540FF252BDDE1AB355137 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 71DE23F3857F4770A7BED70F231ADF8E /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		CAC05999EA4EE2B69E7C72F7CEF4D59D /* cost_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 550587F7B36776EA091BAFD1DFBD248B /* cost_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		CADEAB2BECDA2DBC62581FD469DA0C89 /* WXCoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = ECC8BF6B094A7C9FFA5470E9BB27F09C /* WXCoreBridge.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CAF3B8706341F246B0BC73A5FD0CE46F /* WXComponent+PseudoClassManagement.m in Sources */ = {isa = PBXBuildFile; fileRef = 3517F36E15E27895FC4A1E77EC343A6E /* WXComponent+PseudoClassManagement.m */; };
-		CB2B87B8A8C2CC5F349573DCDD34942D /* WXAnalyzerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 176E4573995A9D958752F00F6DD76F2D /* WXAnalyzerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CB60AD0D1A8B93D0D18E1443B093A46B /* filters_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4FA2A987EDEF13E0979D6412C0087D68 /* filters_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		CBC22BEDBCC69157EC03417710D2DA91 /* weex_core_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD96AD89D58184127327076CD9BF4E6 /* weex_core_manager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CBDCC0361D35AF383ACC081BD26645F9 /* WXRecycleListComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = DB0CD6E027D0E420AA7262D09024E7D6 /* WXRecycleListComponent.mm */; };
-		CC230002393F9284E1C193E387D914BA /* WXDatabaseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 75455111C321489DE29B265BB4026BDA /* WXDatabaseTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CD0A31AF1D5566C43A9EF991AD8825D8 /* Pods-WeexDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C880AADFB008B01BA28F9EF8486D76D /* Pods-WeexDemo-dummy.m */; };
-		CD0DCC672D7C7ED2724BD29454AF6245 /* render_creator.h in Headers */ = {isa = PBXBuildFile; fileRef = 752E58CF55BCF349990686330A52C599 /* render_creator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CD48A9EF1A7E1AD573ABBDCD13E300CC /* yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A51C7D884DDD1846281DB33F5D8141A8 /* yuv.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		CD5DBAE7B3B072F4744E4B70D3AB89CB /* WXDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F763DB20BC04926C65A88D5A97E9C4 /* WXDeviceInfo.m */; };
-		CDA858E9820419D58C343B958A45BC7F /* NSDictionary+WXRuntimePropertyDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = CECDE40D43D3099CECE5C8C556FB9C94 /* NSDictionary+WXRuntimePropertyDescriptor.m */; };
-		CE12A7386C9AABB2C9108894A066414B /* WXMetaModule.h in Headers */ = {isa = PBXBuildFile; fileRef = D6B64F41C0C1043EB45370CC555B7405 /* WXMetaModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CE5EDD1DC832AB3AFE9BC8EB914B61F1 /* render_page_custom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A68D8B268583C401B50CC8D34D20627 /* render_page_custom.cpp */; };
-		CE9DAB1F76F35CC628EC9A2C26E6E568 /* WXComponent+Navigation.h in Headers */ = {isa = PBXBuildFile; fileRef = FD249E89EDB93D998F4109436F3E3FF0 /* WXComponent+Navigation.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CEC479CC798224ABDDE1FF6B121E0845 /* WXConsoleLogModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B4820DF6004D336565FE516721F5145 /* WXConsoleLogModule.m */; };
-		CEF2AFD4846549CF4140C08F59FEA428 /* WXResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DDFEF42700DB9411482A18311825259 /* WXResourceLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		CF7DBBE79C13D070F4D275187472B8BD /* WXSourceDebuggerDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = E1396A1386418E412485AE90D8F50A59 /* WXSourceDebuggerDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D02822422B7B2822C68F4DFF3F9E8666 /* render_action_move_element.h in Headers */ = {isa = PBXBuildFile; fileRef = E450405103313E93765BE41F83B0C7EB /* render_action_move_element.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D14CEBB08DD519B8D3E8A2097063DA51 /* WXDestroyProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 984D30B9661EFB03814689674C0F1DF0 /* WXDestroyProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D1BCE90E581C3D2B9A33A1CDDB6293DB /* message_pump_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EB6D980F03B04C188CE7AC7AF01EE18 /* message_pump_darwin.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D1D1B6244BD9E63613320AD5F1B1A8B9 /* render_text.h in Headers */ = {isa = PBXBuildFile; fileRef = 991C92DB3BB454A126FC061BE4928202 /* render_text.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D1F9E18ACD245ACF7C4AEECA3FC4F412 /* quant.h in Headers */ = {isa = PBXBuildFile; fileRef = 791475048C62E04BFFA13DDFD585AB2F /* quant.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D299B7600D028443BBFC0B52B647003B /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 33794D962825042991B57A53B903DA15 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D33F4B937CCE359D39C850E875B38E60 /* webp_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 398DC184413965A9E6BDDC6D916A3108 /* webp_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		D3E9C486BCDAAE52AE37F8A15CD4C17B /* cost_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = B4759F17AA60ABAB93B88CA8C6BAE732 /* cost_enc.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D4338609ADC139674396F26B9FDE7785 /* NSDate+WXDebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F51557A69D218A74E366BD8CD068060 /* NSDate+WXDebugger.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D4C7AE1536AA3783040D0C0A5F050489 /* WXDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46E22E9BEEC6CF3435BAE66D38F9890D /* WXDomainController.m */; };
-		D5BAFF5ADCF4D3F52EF27EF13E9029C1 /* WXLoadingIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 627F5382D6E503C3207827F7F3143B2C /* WXLoadingIndicator.m */; };
-		D5F5C717342E92806A9FB356C71B5825 /* WXBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB853D150177896F688FBD07C1D69A87 /* WXBaseViewController.m */; };
-		D5F7FEDDA0070D7804129C4D63BF1D07 /* core_side_in_script.h in Headers */ = {isa = PBXBuildFile; fileRef = D2D81C7A85862C23E40FA6DDB82E336E /* core_side_in_script.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D63A9DE2794A917EEB41D51CA2D9C7AE /* NSManagedObject+WXRuntimePropertyDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B424AB9E79A3417FDF7FA260D93275B /* NSManagedObject+WXRuntimePropertyDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D682D5084611778FCB605AAB98D6421E /* WXSliderNeighborComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F94B75D0D30B2147571042E32D9FC9A /* WXSliderNeighborComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D6AF6351A53AECE41426843994D2DF11 /* WXVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = AD3EC3FA3CC0FA804AA453A747BA913A /* WXVersion.m */; };
-		D6CFD4955EDB97A1FCD8DCD374A65346 /* lossless.c in Sources */ = {isa = PBXBuildFile; fileRef = C09BDEBB68F0003C566749B5F51B685C /* lossless.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		D7033C6C3032645EC92937D3FEFD6DCB /* thread_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A25B42D92E289641AEDB2C67D8CB9D2D /* thread_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		D81D7407F4B4BECFE7C3F8C89AFD5114 /* WXHeaderComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 14FDDCD854CD4525B09BBDD3FEE7D067 /* WXHeaderComponent.mm */; };
-		D81D8F3ECA19DA0061ED39E21BCD3C36 /* lossless_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = AB1E97BD0F962C7169D9394B629AB0EB /* lossless_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		D8AB891208EA8E04427E40E563A98BCC /* filters_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 83BDB24013BD3FA58F81DD8BCB45CAC6 /* filters_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		D8DB0E6BE55433CD7CE0428F271B6805 /* WXSDKInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DA9A06FE67407BC9C0786A48CC20007 /* WXSDKInstance.m */; };
-		D9D344EFFBC3161E04DE622629926935 /* WXRecycleListDataManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 94EAEF4D8E102460F9B2B21C9819DC99 /* WXRecycleListDataManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DA32300C594EE9701E15D6AC55C8EA80 /* WXProfilerDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 35FBF4831A3149CAD67DCC34B6FD1503 /* WXProfilerDomain.m */; };
-		DABF4986F9AFA8C20F4B062C39A48A02 /* WXComponent+Display.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EBCCA75309150481CB6C41E621C4F03 /* WXComponent+Display.m */; };
-		DAD773511AAE4920E0368A28D45F1DCE /* WXHandlerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFA95C824F2DD4AF736A025CF479A87 /* WXHandlerFactory.m */; };
-		DAF10E7C354C9E69D28230A3BE32F394 /* WXCoreBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = AA53005D89D769FC1FAC5550ED45A338 /* WXCoreBridge.mm */; };
-		DAFC2AC402FBED1428CBCD3DBA6AD68E /* common_sse41.h in Headers */ = {isa = PBXBuildFile; fileRef = A6A1D4447B4A075E04F3E22EF4D928A9 /* common_sse41.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DB311B7222FA4352EF59FEA00E08466D /* WXAnalyzerCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = EC07D99E932DB9B3C38FC8CAB0C859A8 /* WXAnalyzerCenter.m */; };
-		DB361926437DC2E9E4437B6FACD6BAF4 /* WXNetworkTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = D595196ECD8B1C51AD0563AE6DFD2E6B /* WXNetworkTransaction.m */; };
-		DB68697318E4077E748DFFEC0752AE62 /* EBExpressionTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 851D7AE2CC6068A02A6289B6A4BBF402 /* EBExpressionTiming.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DB7FA8029499377D2A406A0175FD62A2 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = D3E806FFC70E778A996A8A337CA93916 /* utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DB8ED6B9994EB09327034367F4E48150 /* WXSDKEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = D0A39EE2393BA3436B4D984D97563A05 /* WXSDKEngine.m */; };
-		DB915A1F1F4196A02CB39ADEE01D7B50 /* WXTimerModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 6424B32A5552DE209A7B9A15CECF440F /* WXTimerModule.m */; };
-		DBD4AE95E2F1337F7872C51A893F3EBA /* WXPrerenderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CB090A36501501F36AD1686434685345 /* WXPrerenderManager.m */; };
-		DBE7605534E19070F4ACB11DF2521564 /* UIImage+WebP.h in Headers */ = {isa = PBXBuildFile; fileRef = B3DCB9DA8798A677CA18FE8D5C6D4DDE /* UIImage+WebP.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DCCEDBDE2EF24F15961C636BECD3362C /* WXRuntimeTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD1DF8182EFE56D218EBD5EA4E0EF97 /* WXRuntimeTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DD489D280149EA9ECABED6938FA7FD38 /* animi.h in Headers */ = {isa = PBXBuildFile; fileRef = FAD123CEC16F07E763151FDEAEBCC39E /* animi.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DD9A36F84A2F74DABE16B2530813677E /* buffer_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 646D85D77890218A5B550A382A44D137 /* buffer_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		DDA0F7C176C4EC3C526102625D017BC8 /* WXExceptionUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BF6CC9E4D9F28D280404A5F355407E6 /* WXExceptionUtils.m */; };
-		DDDADBA774576FACE93E92C38123AE89 /* render_action_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1282ABA21874CFBC0FAF9974E2850E1A /* render_action_layout.cpp */; };
-		DDEC0D8AD4BA19A6B759ED83D65611A9 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D25A2BB65D7A2FA732B9352AC72D542 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DE9FB35560633B995DE146D314FA66AF /* WXNetworkDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 17CE1C3E86DEC5D8B8FE13CE6B95BE69 /* WXNetworkDomain.m */; };
-		DF0036C5D5D9B4E331A4B8974E34BD0B /* WXLoadingComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = F66E6B5AF6892F01BABE972FEE7060E5 /* WXLoadingComponent.mm */; };
-		DF77970004F5CB3B6A2FFCEAF985909D /* thread_local.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A3B98FF4E33ADF85E34108216C1CB0 /* thread_local.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DFA8B424E33CC26ED4A8CD3DB2932ED3 /* JsonRenderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E5697E5203985BC2D1A9EAE2A4309E3A /* JsonRenderManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		DFBB35B73816810591C24A832228B7ED /* muxread.c in Sources */ = {isa = PBXBuildFile; fileRef = DFF336E9135B6D736DE5B404F0A58B17 /* muxread.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		E00BEAFA0AFA54243FB416D1BF8F3142 /* EBBindData.m in Sources */ = {isa = PBXBuildFile; fileRef = E76D6895E6BDB4D969177BF71EF59ED4 /* EBBindData.m */; };
-		E010139C3769C278159F28B62D3698D0 /* EBExpressionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F64149CEF088BC7BEA756DB9C14E80E /* EBExpressionHandler.m */; };
-		E02D1DD1D752D9BD3BD2081B6397D787 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = B55F1BFF85B6FE690D9EBDB59F96C0A7 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		E14F412BD5E29E9CFACC8F4C646CC73F /* WXCSSDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = B9A23E64562C87CEB29C2E80F5DD6D5B /* WXCSSDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E235D852FE6781C72937C388F721CD31 /* WXVideoComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = C5F331A2A2C78473C1AEF149A95C95E1 /* WXVideoComponent.m */; };
-		E2982126877378A33B4400D33B83962F /* WXResourceRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F93FC17408203481FC4D176CC5C5F1 /* WXResourceRequest.m */; };
-		E2B960544591E9CFA094C591985C4E43 /* yuv_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 2C618ABBD3C1BA833345B48FBA24210A /* yuv_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		E2FC1D935B196656817D4F2302FFBE87 /* syntax_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = DFF448856886FE98D228409E81BA1F90 /* syntax_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		E34103E5E67BB38D5CC5B727CB4A5FD1 /* EBExpressionScroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A031087EDC670D102A82210905E80B93 /* EBExpressionScroller.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E399909B1B34D01AB2A546EB6C3DB36F /* WXDatePickerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3385B1D34F74CB514A1F2A1655006FAE /* WXDatePickerManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E438E10685EBAC7D340D65F66EA18864 /* WXDatePickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FE015013B66B1C0D1995EDC08F00A5DC /* WXDatePickerManager.m */; };
-		E4405F02650881FAADBA76FA501BE7FE /* filters_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = F8BC307A597615C73BE0A922EDBB089E /* filters_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		E4F118FCD8C830B0F581C326A3B47253 /* WXBoxShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D995A79A47903B892A041E5E146FA9B /* WXBoxShadow.m */; };
-		E52BD03BE8BFD128C16C9F1891AA21C5 /* NSTimer+Weex.h in Headers */ = {isa = PBXBuildFile; fileRef = E417CC999C245BF9B710AA5CEB253761 /* NSTimer+Weex.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E548B6CC599F616096A888A8C2DCE8E6 /* format_constants.h in Headers */ = {isa = PBXBuildFile; fileRef = 384ACFA2218B5D62758BB73E47231118 /* format_constants.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E565E4663904AC099DC82F114E449997 /* upsampling_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = CBF43E904506DADD3C3D93485EB105A2 /* upsampling_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		E5877A4F092B19DD1C7DAC55AC9DE8C0 /* vp8i_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 18CD26551DBBCA8F223723F703189F32 /* vp8i_dec.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E61F2DE01D23BB6DE7298AD95A2795A5 /* WXDOMDebuggerDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = C1DDF30C44A536788353D98FF53ABC3E /* WXDOMDebuggerDomain.m */; };
-		E661C3EDED07CF7D8C01EC9CCC36C0E3 /* WXScrollerComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 69CF81A41F02AB7C9DD308EF060EFBE4 /* WXScrollerComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E6679E06AEEFA44DC8274CFD229B8656 /* WXCSSTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FD2E8C7F2D14E58865842797802377F /* WXCSSTypes.m */; };
-		E68A91180678F4C594B0D8B09716D052 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = EFF1CE4FD0C3866C40237B065B24BAD0 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E6E6425551A06FDFCCB32328F13054FB /* render_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 31D8207B401A9E4C5A28E8A9EC55CFC5 /* render_manager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E73357B38DFA11DC21851F5DF7933503 /* WXBridgeManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C855546EF5292369448E003FBF2C7C38 /* WXBridgeManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E7C409E27BD202799C04A8B12C93E519 /* WXExtendCallNativeProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A4D9E5BE97D1A51D745336410DF427 /* WXExtendCallNativeProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E7E90D328B7518F8A92D9943B27DFD77 /* render_cell_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D4A2708DF3DCAC7AA4BDFF2163EBB1 /* render_cell_factory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E8238CEF1E26A6AD933FC9806E8C3EC4 /* WXRecyclerDataController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA059172C822CF234B1D58669067F27E /* WXRecyclerDataController.m */; };
-		E83B362C91915D4F17CE80B5483DEC81 /* thread_impl_darwin.cc in Sources */ = {isa = PBXBuildFile; fileRef = E08C9D61FFF5FDB2001486391B334B63 /* thread_impl_darwin.cc */; };
-		E888D480EAEF1A7E005A3784EAF42C86 /* WXLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A596DDEC48D6239A9F5FB4D81048103 /* WXLayer.m */; };
-		E8B4B0A9AC67AE68DA12766D8504972A /* WXApmProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 12459D410F77C4E9D8E60F9BE5C17076 /* WXApmProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E9039B770E7E342F7A79DC73568F5992 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = E86809DCD0E6E25DCDC28026B62B28D9 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		E931B8D3E468929E6ACC9D8405C12AB9 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4078AEE86EC0EE1E361BABF862225D0E /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E93AE97A9B350C9E12D2C8990396B91F /* WXDOMDomainController.h in Headers */ = {isa = PBXBuildFile; fileRef = 042645D355C8105C3A29CD8BC46050C0 /* WXDOMDomainController.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E93CD033B4044520B543A9CCCAE48A62 /* WXPageDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A775FD262842D995DBC555569C83A5 /* WXPageDomain.m */; };
-		E9B1C83E3561C0BB189EF940131B0573 /* WXDiffUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 86033D529181F342549002F8B5D702CD /* WXDiffUtil.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E9E0FE7128EFAD0CA92CC3D704856C14 /* EBGyroEuler.h in Headers */ = {isa = PBXBuildFile; fileRef = 88DE4FC80B8F6F56708AE93E3F242D8C /* EBGyroEuler.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		E9F8C66AFF027349241C3DA940017FA6 /* WXVoiceOverModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 627025141003ADDC6798C08B8F6B8BD9 /* WXVoiceOverModule.m */; };
-		EA27ADA87C0A571F3101DAA531D91697 /* WXObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 48BD7D9F3C1D61BB708A03A0204FB61F /* WXObject.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EA5518CE15E7DAB0DF1B608C5FC12101 /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 542C32E7949FCF7F9790CFD83139C18C /* cpu.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		EACA0B01A39DAA52B0D8AFDD32DFF3EA /* WXAppMonitorProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 8267DD65FE71077879EAABFBAE3CCA3A /* WXAppMonitorProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EB4637638FA264C2C091FC8D7A0C2EE9 /* WXDivComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B33E706326DE99FB63BB83F6E4AA1BC /* WXDivComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EB46620328B7FB5C6C550299E75FA3DC /* WXDOMTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C53DCBF2FA2B6D4EF61712638B4807 /* WXDOMTypes.m */; };
-		EBA29E73359E7FBD8E69D95E9065AC65 /* lossless_enc_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = D77CDE27E38378FFBE513F12AA634272 /* lossless_enc_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		ECC57441EC9CE9CDF8EB60E1E01C6127 /* render_target.h in Headers */ = {isa = PBXBuildFile; fileRef = E03C5C96072819B690D558C11A414DF9 /* render_target.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		ECE8EA71883736F9BD021B97C03D65DD /* WXConsoleTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 760F2279D577B5EE7925C2992933BE44 /* WXConsoleTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		ECED674FE2572FDFAD5C632BE2B8CA9B /* WXWorkerDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = D1D501740C0C19057BF31411878F8384 /* WXWorkerDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EDA24BA835F0BC4BB7F13B6119F1A5F7 /* WXThreadSafeMutableArray.m in Sources */ = {isa = PBXBuildFile; fileRef = BE79D01A8CE8A44313D53E0BB81BBF14 /* WXThreadSafeMutableArray.m */; };
-		EE52F77E7489B953CABCD888782D41C9 /* NSError+WX_JSONObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F6724E5E6C688E9AE46CC0B477DA2A1 /* NSError+WX_JSONObject.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EE77AD8242D31A376DF58BBDC053E515 /* WXNetworkRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = E0AD0B2D0CD2ABF1F9E3192059A16E56 /* WXNetworkRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EF02B2E3BD16118D6E76F6D89188B64A /* wx_type_define.h in Headers */ = {isa = PBXBuildFile; fileRef = 712B82486FA9726B76BE61FFDF4EB411 /* wx_type_define.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EFB2C90BE5099C9AAF0D7D560D046598 /* WXVoiceOverModule.h in Headers */ = {isa = PBXBuildFile; fileRef = B8BF7BC74BF3394A6BAD14840EC0ED10 /* WXVoiceOverModule.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		EFB9097ABD0AFD6D9E59002418C7DB17 /* wson.c in Sources */ = {isa = PBXBuildFile; fileRef = E54504CF8E8DE89E0E62952969EA78E2 /* wson.c */; };
-		EFBE327913DC71BF903E2547D4BD051D /* JSValue+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = AEE24A8BBA085CBA10F75B100F7FF843 /* JSValue+Weex.m */; };
-		EFF7DC710B802714DF7220A5E0CFA4B0 /* WeexSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 65221697FA3F8237A789727D39DCECE9 /* WeexSDK.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F0231200BFC5E94D1D6ED7D1956CFEDA /* anim_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = A990D0124A773BC8F6B7E397CD5FE5A2 /* anim_encode.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		F02F4CA9FA28D89484C7D83AAC53F62C /* EBGyroOrientationEvaluator.h in Headers */ = {isa = PBXBuildFile; fileRef = 51840C8A2FE37FAE08E8909CDE06B26B /* EBGyroOrientationEvaluator.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F0668257AF90F31890EE1704AB0F3B3A /* render_creator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B0B3E6C399D6E2508EDACB8FAD79102B /* render_creator.cpp */; };
-		F09AF3C20636CECFC8384EDA3B89592B /* WXModuleMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 44BDFF70D1F5FD611856D11C3087C56D /* WXModuleMethod.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F147172E4E0BD85BC6A8D24C42666985 /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2D40D1C287FC413460A6DC6CAE1DF6 /* dsp.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F179E3BB01286CF93F10530BB3DCDDDC /* flex_enum.h in Headers */ = {isa = PBXBuildFile; fileRef = 8370CB757ED3DF90C752216C25EADC40 /* flex_enum.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F21064691D3E928513A837BFA5E18A7F /* alpha_processing_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = F6F173BB4E37141D9DB2D5B7C286B95F /* alpha_processing_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		F249F111F3392374670E24118FAB8CA8 /* WXTextComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = E46C77BC5D6E310D06CF53DA8165DA29 /* WXTextComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F288AF1A8531D10116F56BA201F7893A /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DDAB11B4F4ED1EA19C1925832E1C5DA5 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
-		F28C8BBD0F27A2DA3BE6D697488B7D4A /* WXCellSlotComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4256624AE40B24FB6568949D00B0D089 /* WXCellSlotComponent.mm */; };
-		F2943133B8D2322524046356383E4E8C /* WXDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 23CB672AD29ABC41BBEF0A26B6CEE88F /* WXDefine.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F2EE73FCA3E7B857CBD0355C37B62AF1 /* WXSDKError.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ED88C6116C055BA86A2A05826450B36 /* WXSDKError.m */; };
-		F33E54D38D191E8FF60EDA922362BEEA /* WXRoundedRect.mm in Sources */ = {isa = PBXBuildFile; fileRef = 93C6428C9EB27AC7A6170769A2B3C3C4 /* WXRoundedRect.mm */; };
-		F36BC2E6C6E83D50BE7697B56D297488 /* WXDefinitions.h in Headers */ = {isa = PBXBuildFile; fileRef = 677EE44402FA4C045667B8620C3EA638 /* WXDefinitions.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F3CCEB7D1DA1F2184B5975F5C969B208 /* render_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4202CD7FA7BCF2B094173780B4A6860E /* render_list.cpp */; };
-		F4227BAA7E57D5B5584D67D30FB2B233 /* msa_macro.h in Headers */ = {isa = PBXBuildFile; fileRef = 0525C56154294236DD8A4A8285B75037 /* msa_macro.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F428882567C18CA8A8154C1E8ADCE05E /* EBHandlerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 857E6CA7608808D0C861AD0352EE698A /* EBHandlerFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F450C61A9B8D725C3E35E0B649502DB9 /* WXDisplayLinkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F59AFE746C72B88C0461CB430CA587B9 /* WXDisplayLinkManager.m */; };
-		F499A940F6D557A593790298831C487C /* WXTimelineTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = A4BDCA209EBCB888FDF3439D0CFBD6A8 /* WXTimelineTypes.m */; };
-		F4AB448CAEE2DD0E19992D66612F4AAF /* WXNetworkTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 9006F0DE812C3B91A8083B4D0ADCC22A /* WXNetworkTypes.m */; };
-		F4FDB0ED05D8CC53AB4A862DE4F0AC2D /* WXThreadSafeMutableDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 34513ECEBDED881ACBB45BA25B85CE3A /* WXThreadSafeMutableDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		F59983BE5428D20A1BC30EF730A0E9E5 /* WXProfilerDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BF04B88EDF5423A2820E7A2F54C990F /* WXProfilerDomainController.m */; };
-		F5F0352527DCCBCF8585F103F384D7BB /* EBGyroQuaternion.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF5702D8920ECA75E4470937976190C /* EBGyroQuaternion.m */; };
-		F609A5125677FEB8B2A6C1D790DF0544 /* WXRecyclerComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = D44562C25CCC664C2E43A6D1402B24E8 /* WXRecyclerComponent.mm */; };
-		F63BEF2FD2F67689D5401C5DBEC88805 /* JsonPage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BACC744DD7646ABD72A785C27CB2C128 /* JsonPage.cpp */; };
-		F69BDF08D316EFE28F9042F406CFCAEF /* render_action_appendtree_createfinish.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 60A576B93881D755C54E184B91A542FE /* render_action_appendtree_createfinish.cpp */; };
-		F6E4329EBEFFC27A1E876E4DA4E5E5BD /* WXDebugger.m in Sources */ = {isa = PBXBuildFile; fileRef = 8491E8A977219F1C165FB8188BABA176 /* WXDebugger.m */; };
-		F77A32D7508181DBA6D6CD25083C0444 /* predictor_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9423EEB5F8BEC4F671E16B5866EE2605 /* predictor_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		F904E07BCA3FA971D68726C439034E8B /* WXJSFrameworkLoadDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 65831FF2FE7103D27F37E93236459F82 /* WXJSFrameworkLoadDefaultImpl.m */; };
-		F9DD68E1E06887975E53CAEE9EB3D459 /* json11.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33FB2D921F17AC550AD9FC7CF6D00A25 /* json11.cc */; };
-		FA179409425165826AAE8C73FCE0D76B /* EBJSMath.h in Headers */ = {isa = PBXBuildFile; fileRef = CAE03B7529752B427262D1DD1336C37D /* EBJSMath.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FA6579C53279E81157057D8C6251722A /* EBJSMath.m in Sources */ = {isa = PBXBuildFile; fileRef = 864655BAD9E35B09408CC534D6162364 /* EBJSMath.m */; };
-		FAEE0E00D277579D41653F011F051307 /* EBJSTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 069314319B6D8D52871CDC56996EF742 /* EBJSTransform.m */; };
-		FB2BD4C0D603CE5990917110586F6B30 /* EBWXUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 11546A1027C964C08505C5D468440EA9 /* EBWXUtils.m */; };
-		FB84D291A5FA20CD71D9CB11CBF6C7B5 /* EBTaffyTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = E265588009E7FF2C6201A5B244A3FF27 /* EBTaffyTuple.m */; };
-		FB8D3DC1550771EEF1D546C0B44096F3 /* WXMonitorHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F415BC155783817AD5512E32AA6B963 /* WXMonitorHandler.m */; };
-		FBB51602CFBF16AF836CEE8C96DA0142 /* JSContext+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = CCFE3476D208C1F1968FE51983C5F0AC /* JSContext+Weex.m */; };
-		FC1EC34093786A54F516384F6D1F7B47 /* dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 33A69B581574E9CDE434DE2FCE5C7C1B /* dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		FC37617BAF83F7D358A7AF5A11891081 /* upsampling_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 347B48BE2DE7AA39E77B4985FF0CB421 /* upsampling_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		FD48EAAAD29D608342A1C34BD31B88CB /* filters.c in Sources */ = {isa = PBXBuildFile; fileRef = 007BB85E9B1B5135F7CF56FCCD44EA20 /* filters.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		FD6BE9E02E1F896F333E03360F291042 /* request_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A9BA4F9440725BA7A597544A2E5C14C /* request_handler.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FD84EE4D3D2DF25B38A4EB82C5BC66BA /* WXRoundedRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B8CE7D262B386D0CB62ABD24F7F57FF /* WXRoundedRect.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FD97E7373EDFD46ECDEEAC3C1854ABF8 /* WXDebuggerDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = D15A6AB05FD9FBE0207D318BD99EC99B /* WXDebuggerDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FDDCFC534BCB5795131164C0D28302FF /* thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C84A27386B7484870C45B41147A6F9 /* thread.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FE3897D0F12D8C8FC4D296E1C6ECCA72 /* WXConsoleTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = B9044645E709FACB3D37D45F0519466A /* WXConsoleTypes.m */; };
-		FEAA6BFF84C1016FCA2A3AB5A6B8541F /* quant_levels_dec_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = C50D5BC7C8B5D39FDFDD5AEB9956EBE6 /* quant_levels_dec_utils.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FEB0E6237876735FC9BBAE527218AC8A /* WXNetworkDomainController.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF4DD0F8F24C9705A7DA35A66F10C40 /* WXNetworkDomainController.m */; };
-		FF4141486469E2BFD0AFC19CCC2B54F9 /* WXSDKInstance_performance.h in Headers */ = {isa = PBXBuildFile; fileRef = CA9681FE7EED152E1E979ADC3F4A17D1 /* WXSDKInstance_performance.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FF51863891F1059377A516F118711664 /* WXDiffUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C2473D9C2F03BB33BC7E5DC289E4B0C0 /* WXDiffUtil.m */; };
-		FF6EF7E8594287C7E72E7FD985DB6C3F /* WXSDKError.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D0D64A5A2F7C3F870B6964D50C748ED /* WXSDKError.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FFACC952E8EBA29C242309829CE68988 /* yuv_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = D51CC840319C797AB5FD7FFB7C300B76 /* yuv_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; };
-		FFD3574114ABB4C7FE340B42E56F8E71 /* wson_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B371316888C9F151F7F358437D50261 /* wson_util.cpp */; };
-		FFDE8AB50E05F7B8587AF0531CADF0C9 /* WXMultiColumnLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = A0CC2AEE31081738EE99D358A939174F /* WXMultiColumnLayout.h */; settings = {ATTRIBUTES = (Project, ); }; };
-		FFED797FB561D62E4B08FBAFBF341A9B /* WXLoadingComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = B207BF0B920F8A417A964B7044E8D487 /* WXLoadingComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		00600124F655D508A131E0CCC71B75EE /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;
-			remoteInfo = SocketRocket;
-		};
-		0DC2776A533B1B1C575610E013449F52 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BFCAFC5A05D2B40152EEE1A1F1F1DB37;
-			remoteInfo = WeexSDK;
-		};
-		15004C35F6D995E7B6FFEC7CEE4086B3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 344C7B8851D73171FD3FE521AF9DA956;
-			remoteInfo = "ATSDK-Weex";
-		};
-		1C1229037DBA868633EFFE0DE9439BF1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = ADE3323F1A1577AF39D4E28727906997;
-			remoteInfo = WXDevtool;
-		};
-		31CE919AC221AC484282760E182A45F2 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BFCAFC5A05D2B40152EEE1A1F1F1DB37;
-			remoteInfo = WeexSDK;
-		};
-		35B08CAFD5812A2235243ACBF160A8D7 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BFA2840E37C9C6EAC3C1E65FF46EA916;
-			remoteInfo = WeexPluginLoader;
-		};
-		3BE97F7DD6080FFF50FFB58CE16BD2A0 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429;
-			remoteInfo = SDWebImage;
-		};
-		42B414CA9F46DAE762D2AE82B8CAB874 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BFCAFC5A05D2B40152EEE1A1F1F1DB37;
-			remoteInfo = WeexSDK;
-		};
-		4917E5AC0C93874553DCC3DFC8642237 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BFCAFC5A05D2B40152EEE1A1F1F1DB37;
-			remoteInfo = WeexSDK;
-		};
-		5952010FAE53B10AF64AC6C60C7DA150 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = ADE3323F1A1577AF39D4E28727906997;
-			remoteInfo = WXDevtool;
-		};
-		5E6D17F71B8E8D4FA9308EC11A090804 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = B461E8D2696AA53B3DD289E7CF6D5D5B;
-			remoteInfo = BindingX;
-		};
-		77D833E787FF230BF73C55FC21D819A3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;
-			remoteInfo = SocketRocket;
-		};
-		91C9E7D9A90F0B8F3B206D176D950351 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BFA2840E37C9C6EAC3C1E65FF46EA916;
-			remoteInfo = WeexPluginLoader;
-		};
-		A0F0DB198CEBCF39BE52ECD44403F108 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 344C7B8851D73171FD3FE521AF9DA956;
-			remoteInfo = "ATSDK-Weex";
-		};
-		A509F8AD34CC2CEBAE2708A326F3BB9D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = B461E8D2696AA53B3DD289E7CF6D5D5B;
-			remoteInfo = BindingX;
-		};
-		BA64AE51423FDDB91EFD4849FCB721A7 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 47D2E85A78C25869BB13521D8561A638;
-			remoteInfo = libwebp;
-		};
-		BB0865516B282A9E87FFB7A6B5617891 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;
-			remoteInfo = SocketRocket;
-		};
-		C8B2AAECEC0318EDCEBD0AEE430AD81B /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BFCAFC5A05D2B40152EEE1A1F1F1DB37;
-			remoteInfo = WeexSDK;
-		};
-		D8A5C03001095D015CC0FFAF77405F7D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 47D2E85A78C25869BB13521D8561A638;
-			remoteInfo = libwebp;
-		};
-		E15C44810B89022BFD57F8F31225281F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 47D2E85A78C25869BB13521D8561A638;
-			remoteInfo = libwebp;
-		};
-		FC22CB15902D10A4FB4AF9D98E5CC2C9 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429;
-			remoteInfo = SDWebImage;
-		};
-		FF8A76CD1C133AF224259C44F42B4523 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BFA2840E37C9C6EAC3C1E65FF46EA916;
-			remoteInfo = WeexPluginLoader;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
-		000A3148D8532218CD1BE8F3664E4FD4 /* EBBindData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBBindData.h; path = core/ios/BindingX/EBBindData.h; sourceTree = "<group>"; };
-		00143244253DB637A29A922D6B448A57 /* EBNativeFunction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBNativeFunction.h; path = core/ios/BindingX/EBNativeFunction.h; sourceTree = "<group>"; };
-		0033441CEBBA9F8CE564361515728CAB /* WXTextInputComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXTextInputComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m; sourceTree = "<group>"; };
-		007BB85E9B1B5135F7CF56FCCD44EA20 /* filters.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters.c; path = src/dsp/filters.c; sourceTree = "<group>"; };
-		00878E679094B955A62AECCDDCDBE803 /* EBExpressionProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpressionProperty.h; path = core/ios/BindingX/EBExpressionProperty.h; sourceTree = "<group>"; };
-		00F9033A36AB18306A2D59326C9FF83E /* render_action_remove_element.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_remove_element.cpp; path = weex_core/Source/core/render/action/render_action_remove_element.cpp; sourceTree = "<group>"; };
-		0115713EE67211947B2CE13DBC965236 /* time_calculator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = time_calculator.h; path = weex_core/Source/base/time_calculator.h; sourceTree = "<group>"; };
-		01473A83E00902E4CDB5C8EFDB7A1A02 /* WXDOMStorageTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDOMStorageTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.m; sourceTree = "<group>"; };
-		01A93ED18D0860659F8AFF856EAEBCE6 /* enc_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_sse2.c; path = src/dsp/enc_sse2.c; sourceTree = "<group>"; };
-		01D9FA7A4F82C9C98BB22660271DFD6A /* core_side_in_platform.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = core_side_in_platform.cpp; path = weex_core/Source/core/bridge/platform/core_side_in_platform.cpp; sourceTree = "<group>"; };
-		022DC4330EAEC4FF483D2630EFE90B0C /* WXPrettyStringPrinter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPrettyStringPrinter.h; path = sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.h; sourceTree = "<group>"; };
-		024FE4856F5960412BD81B74F2510A3E /* WXBridgeProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXBridgeProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h; sourceTree = "<group>"; };
-		0255D439B3B4EF00ED06096E04C6FA4A /* log_defines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_defines.h; path = weex_core/Source/base/log_defines.h; sourceTree = "<group>"; };
-		0257FDA68ACC029AEF2F7012CE2AFD5C /* WXEditComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXEditComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXEditComponent.mm; sourceTree = "<group>"; };
-		026A573AE9ECFFF53B96886931AF090C /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = ATSDK.framework/Versions/A/Resources/en.lproj; sourceTree = "<group>"; };
-		02970D9181BC28BD61EFE8787E8A0EDD /* WXUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXUtility.m; path = ios/sdk/WeexSDK/Sources/Utility/WXUtility.m; sourceTree = "<group>"; };
-		02D6EDBCC7C21DE7C7C9475831975B3D /* WXDevTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDevTool.m; path = sdk/WXDevTool/Source/WXHeader/WXDevTool.m; sourceTree = "<group>"; };
-		03734C65E2779B2D91D8FDD54981FAFF /* mips_macro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mips_macro.h; path = src/dsp/mips_macro.h; sourceTree = "<group>"; };
-		03AE9F14E5E306AF858A165FEF8C3C90 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = "<group>"; };
-		03DFEEE2A49E3645C3B5ABFC2F7A1C0D /* WXType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXType.h; path = ios/sdk/WeexSDK/Sources/Utility/WXType.h; sourceTree = "<group>"; };
-		042645D355C8105C3A29CD8BC46050C0 /* WXDOMDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDOMDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.h; sourceTree = "<group>"; };
-		04D40336C13388583610E573031BEA52 /* WXMultiColumnLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXMultiColumnLayout.m; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.m; sourceTree = "<group>"; };
-		0525C56154294236DD8A4A8285B75037 /* msa_macro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = msa_macro.h; path = src/dsp/msa_macro.h; sourceTree = "<group>"; };
-		0567567E523BE2BE8694FAEE66DB956B /* WXLength.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXLength.h; path = ios/sdk/WeexSDK/Sources/Utility/WXLength.h; sourceTree = "<group>"; };
-		05740E523A72F980E1906F2171A5032E /* WXEmbedComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXEmbedComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h; sourceTree = "<group>"; };
-		05C66D056B8508B428222B139C089DB8 /* backward_references_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = backward_references_enc.h; path = src/enc/backward_references_enc.h; sourceTree = "<group>"; };
-		05CAFC367FBE9AA142F5DE1F652260B9 /* WXBaseViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXBaseViewController.h; path = ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h; sourceTree = "<group>"; };
-		0644E3B51ACAD71D3B5C37E398E3550A /* WXComponent+Navigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "WXComponent+Navigation.m"; path = "ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.m"; sourceTree = "<group>"; };
-		069314319B6D8D52871CDC56996EF742 /* EBJSTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBJSTransform.m; path = core/ios/BindingX/EBJSTransform.m; sourceTree = "<group>"; };
-		06A688D159048C1B3B0414BBF8B33B03 /* alpha_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_dec.c; path = src/dec/alpha_dec.c; sourceTree = "<group>"; };
-		06BADFC9EF95065C1056A48952B064E8 /* lossless_enc_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_neon.c; path = src/dsp/lossless_enc_neon.c; sourceTree = "<group>"; };
-		074C52F43589F0109AD27874922423A6 /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common.h; path = weex_core/Source/base/common.h; sourceTree = "<group>"; };
-		0774ECFA41B0E1666EBFDEC773948E46 /* WXInspectorDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXInspectorDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.m; sourceTree = "<group>"; };
-		07CC4175C573792B306F4CBC69B7E6A5 /* closure.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = closure.h; path = weex_core/Source/base/closure.h; sourceTree = "<group>"; };
-		07D4A2708DF3DCAC7AA4BDFF2163EBB1 /* render_cell_factory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_cell_factory.h; path = weex_core/Source/core/render/node/factory/render_cell_factory.h; sourceTree = "<group>"; };
-		0810EC959E26AE71394D5FDE4D3F6EC3 /* wx_api.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = wx_api.h; path = weex_core/Source/core/api/wx_api.h; sourceTree = "<group>"; };
-		0836949500BF9C257365910B2EFED23D /* WXModuleFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXModuleFactory.m; path = ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.m; sourceTree = "<group>"; };
-		08ADAC195BD0D98F724FF6FA2CFB0177 /* picture_tools_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_tools_enc.c; path = src/enc/picture_tools_enc.c; sourceTree = "<group>"; };
-		08F858DFFD07EAB648B1A09CADC0234E /* message_loop.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = message_loop.cc; path = weex_core/Source/base/message_loop/message_loop.cc; sourceTree = "<group>"; };
-		092773D962247C18999DEB541664EEAD /* vp8_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8_dec.h; path = src/dec/vp8_dec.h; sourceTree = "<group>"; };
-		099719036D28AF9F622D86C346D4F516 /* EBExpressionScope.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpressionScope.m; path = core/ios/BindingX/EBExpressionScope.m; sourceTree = "<group>"; };
-		09BC24040A3FB891C746FB141E118E30 /* waitable_event.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = waitable_event.h; path = weex_core/Source/base/thread/waitable_event.h; sourceTree = "<group>"; };
-		0A9BA4F9440725BA7A597544A2E5C14C /* request_handler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = request_handler.h; path = weex_core/Source/core/network/request_handler.h; sourceTree = "<group>"; };
-		0B178EDF8D33BBDC2C373BFE6D87C0A0 /* NSError+WX_JSONObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+WX_JSONObject.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.m"; sourceTree = "<group>"; };
-		0B1E54676AB150EA35945A33C83ABE40 /* thread_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_impl.h; path = weex_core/Source/base/thread/thread_impl.h; sourceTree = "<group>"; };
-		0B29E36763AAFA7A53DC0F146EED41AD /* EBUtility+WX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EBUtility+WX.m"; path = "weex/ios/Sources/EBUtility+WX.m"; sourceTree = "<group>"; };
-		0B3182AB3965AFEBC5671EFFB755C5A7 /* NSArray+Weex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Weex.h"; path = "ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h"; sourceTree = "<group>"; };
-		0BB2137DAF4202F81F2E0B5169DDF877 /* quant_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_dec.c; path = src/dec/quant_dec.c; sourceTree = "<group>"; };
-		0BDC1F81EE7912C2EC6E58CC88443905 /* css_value_getter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = css_value_getter.cpp; path = weex_core/Source/core/css/css_value_getter.cpp; sourceTree = "<group>"; };
-		0C2AF92DE2F7E88DAB04C235A7ECF064 /* WXClipboardModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXClipboardModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.m; sourceTree = "<group>"; };
-		0C7B92AF6207A8B7D132B6D7CF718CE1 /* common_sse2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_sse2.h; path = src/dsp/common_sse2.h; sourceTree = "<group>"; };
-		0C7F3E7A56D25FEDC5C6CBCC6064370A /* vp8l_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8l_dec.c; path = src/dec/vp8l_dec.c; sourceTree = "<group>"; };
-		0C8211BC38B16DDC3D089439810A4EBB /* frame_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = frame_enc.c; path = src/enc/frame_enc.c; sourceTree = "<group>"; };
-		0C89CE98C40CFE3A96A0D0B68CE303B1 /* render_action_interface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_interface.h; path = weex_core/Source/core/render/action/render_action_interface.h; sourceTree = "<group>"; };
-		0D68D9913F8D80250ABFE3F431482D28 /* WXRecyclerDragController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRecyclerDragController.m; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.m; sourceTree = "<group>"; };
-		0DC85480C6A87E116090A7A9A75E62C6 /* rescaler_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_mips32.c; path = src/dsp/rescaler_mips32.c; sourceTree = "<group>"; };
-		0DD2D2EF91B75353ABA9B99419AD5F0E /* random_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = random_utils.h; path = src/utils/random_utils.h; sourceTree = "<group>"; };
-		0F123B6718658F750DF4D8CE87071A33 /* SocketRocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-prefix.pch"; sourceTree = "<group>"; };
-		0F94B75D0D30B2147571042E32D9FC9A /* WXSliderNeighborComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSliderNeighborComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h; sourceTree = "<group>"; };
-		0FAA1A97520D7CB9B5EB68FA01B035B1 /* EBTaffyTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBTaffyTuple.h; path = core/ios/BindingX/EBTaffyTuple.h; sourceTree = "<group>"; };
-		0FAD43DAA99D38FA69179D955107F1EC /* dom_wson.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dom_wson.h; path = weex_core/Source/core/parser/dom_wson.h; sourceTree = "<group>"; };
-		0FBACBFBA3244C297DB8F84D1EFB79F2 /* io_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = io_dec.c; path = src/dec/io_dec.c; sourceTree = "<group>"; };
-		106AE9D851FB47A67DE44C625C664A2D /* libBindingX.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libBindingX.a; path = libBindingX.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		10BB2944AFB5AC38A28EF89F9E687CE4 /* WXMemoryTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXMemoryTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.m; sourceTree = "<group>"; };
-		111EED8313B5EE2B91EEB84391D0972B /* alpha_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_enc.c; path = src/enc/alpha_enc.c; sourceTree = "<group>"; };
-		112B0898E015D8CA4C8B6AD8EF6CF72E /* WXLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXLog.h; path = ios/sdk/WeexSDK/Sources/Utility/WXLog.h; sourceTree = "<group>"; };
-		11546A1027C964C08505C5D468440EA9 /* EBWXUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBWXUtils.m; path = weex/ios/Sources/EBWXUtils.m; sourceTree = "<group>"; };
-		119470AC05E46A949FE6381CE92CAC19 /* WXDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDomainController.h; sourceTree = "<group>"; };
-		11B31C576905D32B582E586FF255A41F /* WXDomModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDomModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXDomModule.h; sourceTree = "<group>"; };
-		123BC8578B19473F10477E4C0E4E5F4A /* Pods-WeexUITestDemo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-WeexUITestDemo-resources.sh"; sourceTree = "<group>"; };
-		12459D410F77C4E9D8E60F9BE5C17076 /* WXApmProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApmProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXApmProtocol.h; sourceTree = "<group>"; };
-		126A040BEDEE96AAC187B3E8F5A18A0F /* wson_util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = wson_util.h; path = weex_core/Source/wson/wson_util.h; sourceTree = "<group>"; };
-		1282ABA21874CFBC0FAF9974E2850E1A /* render_action_layout.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_layout.cpp; path = weex_core/Source/core/render/action/render_action_layout.cpp; sourceTree = "<group>"; };
-		12DD2480D399120FFA8F881C83C6E44E /* WXComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXComponent.h; path = ios/sdk/WeexSDK/Sources/Model/WXComponent.h; sourceTree = "<group>"; };
-		12E1081DA5826CF51ABE16450F257DD3 /* WXRecycleListTemplateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRecycleListTemplateManager.m; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.m; sourceTree = "<group>"; };
-		12EDCF160AE9E7FA1DA250D1B260C7A6 /* EBExpressionGesture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpressionGesture.h; path = core/ios/BindingX/EBExpressionGesture.h; sourceTree = "<group>"; };
-		133256AD05EEF685CA2CE43C1BD10702 /* WXResourceRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXResourceRequestHandler.h; path = ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h; sourceTree = "<group>"; };
-		136A04B23056E506174EB70F4E7E1B41 /* WXLocaleModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXLocaleModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.h; sourceTree = "<group>"; };
-		1432ACA44F3B6D33334C40C247745885 /* WXInnerLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXInnerLayer.h; path = ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h; sourceTree = "<group>"; };
-		143A455A4287C8156DCF9EBB94B1479B /* WXInstanceWrap.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXInstanceWrap.m; path = ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.m; sourceTree = "<group>"; };
-		148C0A519B1C89E4850E3E00D9448EBD /* WXWebSocketModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXWebSocketModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m; sourceTree = "<group>"; };
-		14CBCCE4F99D5F69E15F12EBAE9738FA /* EBGyroEuler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBGyroEuler.m; path = core/ios/BindingX/EBGyroEuler.m; sourceTree = "<group>"; };
-		14FDDCD854CD4525B09BBDD3FEE7D067 /* WXHeaderComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXHeaderComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.mm; sourceTree = "<group>"; };
-		15C5D864FF3B5BF27D73CF6B232665BF /* BindingX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BindingX-prefix.pch"; sourceTree = "<group>"; };
-		16075E1C01487783A46F19C5406DF2AA /* WXConvert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXConvert.h; path = ios/sdk/WeexSDK/Sources/Utility/WXConvert.h; sourceTree = "<group>"; };
-		1695D7B0C8755C788D5C01287F687ECA /* css_value_getter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = css_value_getter.h; path = weex_core/Source/core/css/css_value_getter.h; sourceTree = "<group>"; };
-		16E4D62210063F373B3A7DFD712D17B4 /* WXTextComponentProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTextComponentProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h; sourceTree = "<group>"; };
-		17544456786A253641CD996B499216B4 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = "<group>"; };
-		176E4573995A9D958752F00F6DD76F2D /* WXAnalyzerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXAnalyzerProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXAnalyzerProtocol.h; sourceTree = "<group>"; };
-		17CE1C3E86DEC5D8B8FE13CE6B95BE69 /* WXNetworkDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXNetworkDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.m; sourceTree = "<group>"; };
-		17DC31727FB1F407B8D55999463B60E7 /* render_action_createbody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_createbody.h; path = weex_core/Source/core/render/action/render_action_createbody.h; sourceTree = "<group>"; };
-		185623ADDCAEF1B78D00D450F656AF66 /* WXInvocationConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXInvocationConfig.h; path = ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h; sourceTree = "<group>"; };
-		18B14A37160FC72EA917C2FA3BC4ED32 /* WXRecyclerDragController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecyclerDragController.h; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.h; sourceTree = "<group>"; };
-		18CD26551DBBCA8F223723F703189F32 /* vp8i_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8i_dec.h; path = src/dec/vp8i_dec.h; sourceTree = "<group>"; };
-		199EDF992C8E9D6CE0578A0D9A0A6474 /* WXWebViewModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXWebViewModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.m; sourceTree = "<group>"; };
-		1A11C2E1AE7EA81E805CCE5EF38E8D72 /* message_pump_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = message_pump_posix.cc; path = weex_core/Source/base/message_loop/message_pump_posix.cc; sourceTree = "<group>"; };
-		1A5B2EA6097BA9FAF97664B9F83AE742 /* EBJSTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBJSTransform.h; path = core/ios/BindingX/EBJSTransform.h; sourceTree = "<group>"; };
-		1A87E61E44AE36A75F0FD9199501B446 /* bit_reader_inl_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_reader_inl_utils.h; path = src/utils/bit_reader_inl_utils.h; sourceTree = "<group>"; };
-		1B0DB19EEB288E21C6EF9D7418D9BE6A /* bit_reader_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = bit_reader_utils.c; path = src/utils/bit_reader_utils.c; sourceTree = "<group>"; };
-		1B424AB9E79A3417FDF7FA260D93275B /* NSManagedObject+WXRuntimePropertyDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+WXRuntimePropertyDescriptor.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.h"; sourceTree = "<group>"; };
-		1BC03199F58649AE8FB6790512422A05 /* BindingX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BindingX-dummy.m"; sourceTree = "<group>"; };
-		1BCEA8218760EAF4E34BD4C18BE11200 /* lossless.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lossless.h; path = src/dsp/lossless.h; sourceTree = "<group>"; };
-		1C2CAAE0879694A751B9750731B80009 /* huffman_encode_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = huffman_encode_utils.c; path = src/utils/huffman_encode_utils.c; sourceTree = "<group>"; };
-		1C45E4CC8FA3D7922179E3E950A4F047 /* WXDatabaseDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDatabaseDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.m; sourceTree = "<group>"; };
-		1C7B1FE34508E9A6F0EE043325527E7C /* lossless_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lossless_common.h; path = src/dsp/lossless_common.h; sourceTree = "<group>"; };
-		1C817C91B676EF472497E63FEF907BAB /* WXAnimationModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXAnimationModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m; sourceTree = "<group>"; };
-		1D815E4C7BA869860AB5356DEC9DB0C6 /* constants_name.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = constants_name.h; path = weex_core/Source/core/css/constants_name.h; sourceTree = "<group>"; };
-		1E966FF29AC3185448F9D07E528DBF8C /* WXFooterComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXFooterComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.h; sourceTree = "<group>"; };
-		1ED88C6116C055BA86A2A05826450B36 /* WXSDKError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXSDKError.m; path = ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m; sourceTree = "<group>"; };
-		1F64149CEF088BC7BEA756DB9C14E80E /* EBExpressionHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpressionHandler.m; path = core/ios/BindingX/EBExpressionHandler.m; sourceTree = "<group>"; };
-		1F78B974586351904E960D034432A672 /* WXBridgeContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXBridgeContext.h; path = ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h; sourceTree = "<group>"; };
-		1F9B2EE7CA5394EE77D53D606885DB29 /* zh-Hans.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = "zh-Hans.lproj"; path = "ATSDK.framework/Versions/A/Resources/zh-Hans.lproj"; sourceTree = "<group>"; };
-		1FCD4C86AB8FA7F0A52B1155E801B63F /* WXMemoryTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXMemoryTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.h; sourceTree = "<group>"; };
-		200782B8FADB56E511F01A85AF98A4DC /* make_copyable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = make_copyable.h; path = weex_core/Source/base/make_copyable.h; sourceTree = "<group>"; };
-		20092120087E0FEAF7B08C84EE41B1CD /* WXEventModuleProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXEventModuleProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h; sourceTree = "<group>"; };
-		200D91352B3E01C1E5761DE502BAD5F2 /* WXComponentMethod.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXComponentMethod.m; path = ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.m; sourceTree = "<group>"; };
-		203ECC4B56968AC736E1E08E79CB83FA /* Pods-WeexUITestDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-WeexUITestDemo.debug.xcconfig"; sourceTree = "<group>"; };
-		2048C284E39B46DC6875AB751338DF32 /* WXJSExceptionInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXJSExceptionInfo.m; path = ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.m; sourceTree = "<group>"; };
-		205E2CD48D8D429737C1247D533EBC99 /* picture_rescale_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_rescale_enc.c; path = src/enc/picture_rescale_enc.c; sourceTree = "<group>"; };
-		20A3EB852C3418AC7550D963CC70CAC7 /* eagle_bridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = eagle_bridge.h; path = weex_core/Source/core/bridge/eagle_bridge.h; sourceTree = "<group>"; };
-		20A587592F200521B14E01A246ED763B /* NSObject+EBTuplePacker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+EBTuplePacker.m"; path = "core/ios/BindingX/NSObject+EBTuplePacker.m"; sourceTree = "<group>"; };
-		2186A672DBF1C0DB12D9707C76CB93B9 /* WXFooterComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXFooterComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.m; sourceTree = "<group>"; };
-		21890F185979BBE342F9F81F6809DA57 /* WXTextAreaComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXTextAreaComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.mm; sourceTree = "<group>"; };
-		21BDFAD9337F234ABECCD8DE701F73E9 /* WXImageComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXImageComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m; sourceTree = "<group>"; };
-		21CA0C12626CD233BE9928CCEC516F8C /* tree_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = tree_dec.c; path = src/dec/tree_dec.c; sourceTree = "<group>"; };
-		220B636814A4BE99D5ABBF9283D5CDBC /* WXRuntimeDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRuntimeDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.m; sourceTree = "<group>"; };
-		223210E99319E2C7B9B54D6D1EA8B5A0 /* WXJSASTParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXJSASTParser.h; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.h; sourceTree = "<group>"; };
-		226CF447C08734967AA6C899A5EA24B5 /* lossless_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_sse2.c; path = src/dsp/lossless_sse2.c; sourceTree = "<group>"; };
-		22714A39E946520FE050E79B1A52431B /* render_appbar.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_appbar.cpp; path = weex_core/Source/core/render/node/render_appbar.cpp; sourceTree = "<group>"; };
-		227F4242FAB401781A67CD958055ABF3 /* render_action_update_attr.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_update_attr.cpp; path = weex_core/Source/core/render/action/render_action_update_attr.cpp; sourceTree = "<group>"; };
-		228E4B12485F6EFDCEC568C59AF69746 /* render_object.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_object.cpp; path = weex_core/Source/core/render/node/render_object.cpp; sourceTree = "<group>"; };
-		2294D500A3076758A84D6376836F99A2 /* EBWXUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBWXUtils.h; path = weex/ios/Sources/EBWXUtils.h; sourceTree = "<group>"; };
-		22DA81F07007CC8FF313B87A70F21E59 /* histogram_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = histogram_enc.c; path = src/enc/histogram_enc.c; sourceTree = "<group>"; };
-		22FC4738B8CBEA8C678773DECCBAC239 /* lossless_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_mips_dsp_r2.c; path = src/dsp/lossless_mips_dsp_r2.c; sourceTree = "<group>"; };
-		23005D6323BAB33DD315DD229B58459E /* picture_psnr_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_psnr_enc.c; path = src/enc/picture_psnr_enc.c; sourceTree = "<group>"; };
-		23CB672AD29ABC41BBEF0A26B6CEE88F /* WXDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDefine.h; path = ios/sdk/WeexSDK/Sources/Utility/WXDefine.h; sourceTree = "<group>"; };
-		240D2ABE7E928662FDF42D1ACAB22922 /* huffman_encode_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = huffman_encode_utils.h; path = src/utils/huffman_encode_utils.h; sourceTree = "<group>"; };
-		24298F19A1B7C09B4A075624E1F22907 /* color_cache_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = color_cache_utils.c; path = src/utils/color_cache_utils.c; sourceTree = "<group>"; };
-		246C9493B70FA5706109B51EC364DC61 /* render_target.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_target.cpp; path = weex_core/Source/core/render/target/render_target.cpp; sourceTree = "<group>"; };
-		24842AC0FA5CF1BA4D9BCF36B26D820B /* NSSet+WXRuntimePropertyDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSSet+WXRuntimePropertyDescriptor.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.h"; sourceTree = "<group>"; };
-		248FC68CE4516D247CFAD6CBB5C3874D /* WXComponent+Events.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "WXComponent+Events.m"; path = "ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m"; sourceTree = "<group>"; };
-		24AEE115677A3A720AAAA1D1BEF39667 /* WXRecyclerUpdateController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRecyclerUpdateController.m; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.m; sourceTree = "<group>"; };
-		24EB0712F76D4151717F5EFBCC5A22C2 /* WXView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXView.h; path = ios/sdk/WeexSDK/Sources/View/WXView.h; sourceTree = "<group>"; };
-		255DEA1674DB29A8E5D97B0F7C9619FE /* neon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = neon.h; path = src/dsp/neon.h; sourceTree = "<group>"; };
-		25CE64303E475BA1EEF4BA43CA848C71 /* enc_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_mips32.c; path = src/dsp/enc_mips32.c; sourceTree = "<group>"; };
-		25E4F248658E57C3D33FE06E88B894BE /* WXPageDomainUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXPageDomainUtility.m; path = sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.m; sourceTree = "<group>"; };
-		26395C471A391381C8934522320DD20A /* webpi_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = webpi_dec.h; path = src/dec/webpi_dec.h; sourceTree = "<group>"; };
-		2649E55A8151BC9CDD96FE2DCAFA59C2 /* random_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = random_utils.c; path = src/utils/random_utils.c; sourceTree = "<group>"; };
-		26529B5631AAD15C0E15227409B63BF6 /* WXComponent+Display.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXComponent+Display.h"; path = "ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h"; sourceTree = "<group>"; };
-		26644596A39563E5EB150B978840D629 /* WXURLRewriteDefaultImpl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXURLRewriteDefaultImpl.m; path = ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.m; sourceTree = "<group>"; };
-		26FD58C518EF81EE3E9854C87EFC25D4 /* WXRuntimeDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRuntimeDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.h; sourceTree = "<group>"; };
-		272D7861187D1239F9A0129CF84C3EB1 /* cost_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_sse2.c; path = src/dsp/cost_sse2.c; sourceTree = "<group>"; };
-		274CD92DCA5F55E382341134D0006851 /* SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = SocketRocket/SRWebSocket.h; sourceTree = "<group>"; };
-		27539D9B2A2F8389AB26D4D878ED6077 /* WXWebComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXWebComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m; sourceTree = "<group>"; };
-		27613CFAEF1255C7D18B59E63C5E42CD /* upsampling_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_neon.c; path = src/dsp/upsampling_neon.c; sourceTree = "<group>"; };
-		27710DA71383416300535ACD6D01788B /* http_module.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = http_module.cc; path = weex_core/Source/core/network/http_module.cc; sourceTree = "<group>"; };
-		2803631DDCDEC6529BB2501F8F0782AE /* yuv_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_mips_dsp_r2.c; path = src/dsp/yuv_mips_dsp_r2.c; sourceTree = "<group>"; };
-		283260E92B995709DD085C833062905B /* WXDOMDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDOMDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.m; sourceTree = "<group>"; };
-		283C35FEB00311EC8051F2205D274CFF /* WXServiceFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXServiceFactory.m; path = ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.m; sourceTree = "<group>"; };
-		291C154913498E709C6E54849EAD622C /* huffman_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = huffman_utils.c; path = src/utils/huffman_utils.c; sourceTree = "<group>"; };
-		299B091BE1D45D0A8336B3AD19D636A6 /* WXMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXMonitor.h; path = ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h; sourceTree = "<group>"; };
-		2B1E445201E254BFBCE6B8B4E7EF32EA /* WXApplicationCacheTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApplicationCacheTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.h; sourceTree = "<group>"; };
-		2B371316888C9F151F7F358437D50261 /* wson_util.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = wson_util.cpp; path = weex_core/Source/wson/wson_util.cpp; sourceTree = "<group>"; };
-		2B5331187B7774795F6903C51C4D972A /* WXDebuggerUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDebuggerUtility.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.m; sourceTree = "<group>"; };
-		2BCCF2C061E7D036DDFC414F0DD6B03F /* WXGlobalEventModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXGlobalEventModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h; sourceTree = "<group>"; };
-		2BF04B88EDF5423A2820E7A2F54C990F /* WXProfilerDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXProfilerDomainController.m; path = sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.m; sourceTree = "<group>"; };
-		2C5BDA2B0C456F712B2018CD7BF2606A /* WXTracingUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTracingUtility.h; path = sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.h; sourceTree = "<group>"; };
-		2C618ABBD3C1BA833345B48FBA24210A /* yuv_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_sse41.c; path = src/dsp/yuv_sse41.c; sourceTree = "<group>"; };
-		2CF911943BB9F31A51DC8B5E9E897443 /* WXValidateProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXValidateProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h; sourceTree = "<group>"; };
-		2DBE305F902AA096943928998332943D /* WXAppConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXAppConfiguration.m; path = ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.m; sourceTree = "<group>"; };
-		2E8CE70749746A500AF380D31C1711F3 /* WXFileSystemTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXFileSystemTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.m; sourceTree = "<group>"; };
-		2EA9CD94A0A125D52E9F8B9B2D31687A /* UIBezierPath+Weex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBezierPath+Weex.m"; path = "ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.m"; sourceTree = "<group>"; };
-		2EB6D980F03B04C188CE7AC7AF01EE18 /* message_pump_darwin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = message_pump_darwin.h; path = weex_core/Source/base/message_loop/message_pump_darwin.h; sourceTree = "<group>"; };
-		2EE0D4457E656DA4E480129B57A93AE1 /* EBExpressionExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpressionExecutor.h; path = core/ios/BindingX/EBExpressionExecutor.h; sourceTree = "<group>"; };
-		2F51557A69D218A74E366BD8CD068060 /* NSDate+WXDebugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+WXDebugger.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.h"; sourceTree = "<group>"; };
-		2F9A6D32AB68DBE91A3BFF5A87A5B240 /* NSSet+WXRuntimePropertyDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSSet+WXRuntimePropertyDescriptor.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.m"; sourceTree = "<group>"; };
-		2FCC4ABBEC608DEABCE4D51762F49CB7 /* WXMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXMonitor.m; path = ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m; sourceTree = "<group>"; };
-		2FEE6857CC00C14C12102F8B911E4450 /* WXRuntimeDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRuntimeDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.m; sourceTree = "<group>"; };
-		300BF6D3725538D9455F102E779321FA /* yuv_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_sse2.c; path = src/dsp/yuv_sse2.c; sourceTree = "<group>"; };
-		306F7BBE14439945F5BE43E3F4669D3C /* mux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mux.h; path = src/webp/mux.h; sourceTree = "<group>"; };
-		3090519F9C123B2C4B6396E7E5DE4ADA /* WXDomModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDomModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXDomModule.m; sourceTree = "<group>"; };
-		30B18709883CCB3E4CD0A1C5AF32BCB4 /* WXConvertUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXConvertUtility.h; path = ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.h; sourceTree = "<group>"; };
-		30EE4B2FBF7A51FDE60B0591D7E377CF /* render_action_remove_element.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_remove_element.h; path = weex_core/Source/core/render/action/render_action_remove_element.h; sourceTree = "<group>"; };
-		30FDA4038741EA0369B5D8EC15EA4A4E /* WXAppConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXAppConfiguration.h; path = ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h; sourceTree = "<group>"; };
-		316EB9CF282755336D6EFABA1174B121 /* WXDOMStorageTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDOMStorageTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.h; sourceTree = "<group>"; };
-		31D8207B401A9E4C5A28E8A9EC55CFC5 /* render_manager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_manager.h; path = weex_core/Source/core/render/manager/render_manager.h; sourceTree = "<group>"; };
-		325C6EE3E98249D6808EF6A2F2677B21 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = "<group>"; };
-		32ECB3B719AB358C8980CE68B77A86D9 /* picture_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_enc.c; path = src/enc/picture_enc.c; sourceTree = "<group>"; };
-		32F133C79F5A985EF9267C876D0F8879 /* WXDebugDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDebugDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.h; sourceTree = "<group>"; };
-		33794D962825042991B57A53B903DA15 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = "<group>"; };
-		3385B1D34F74CB514A1F2A1655006FAE /* WXDatePickerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDatePickerManager.h; path = ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h; sourceTree = "<group>"; };
-		339C631E844134E52729A6AB132C278C /* WXApmForInstance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApmForInstance.h; path = ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.h; sourceTree = "<group>"; };
-		33A69B581574E9CDE434DE2FCE5C7C1B /* dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec.c; path = src/dsp/dec.c; sourceTree = "<group>"; };
-		33FB2D921F17AC550AD9FC7CF6D00A25 /* json11.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = json11.cc; path = weex_core/Source/third_party/json11/json11.cc; sourceTree = "<group>"; };
-		340740D2A78A4B63D4156B0C630C2B36 /* libPods-WeexUITestDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-WeexUITestDemo.a"; path = "libPods-WeexUITestDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		34513ECEBDED881ACBB45BA25B85CE3A /* WXThreadSafeMutableDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXThreadSafeMutableDictionary.h; path = ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h; sourceTree = "<group>"; };
-		347B48BE2DE7AA39E77B4985FF0CB421 /* upsampling_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_sse2.c; path = src/dsp/upsampling_sse2.c; sourceTree = "<group>"; };
-		34C17278239E13469D8E4A555FEC9366 /* endian_inl_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = endian_inl_utils.h; path = src/utils/endian_inl_utils.h; sourceTree = "<group>"; };
-		34E4E1A88E6A521A4829463E8D736DEC /* WXTransform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXTransform.m; path = ios/sdk/WeexSDK/Sources/Component/WXTransform.m; sourceTree = "<group>"; };
-		3517F36E15E27895FC4A1E77EC343A6E /* WXComponent+PseudoClassManagement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "WXComponent+PseudoClassManagement.m"; path = "ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.m"; sourceTree = "<group>"; };
-		3525B041CA2BE20A8CB871787B0A8D5C /* NSObject+WXRuntimePropertyDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+WXRuntimePropertyDescriptor.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.h"; sourceTree = "<group>"; };
-		357E2BFE46D94C57D19BB81721B42DDE /* WXDebugDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDebugDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.m; sourceTree = "<group>"; };
-		35E1D9B3C206789807B4B7A962D51CA6 /* WXTransition.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXTransition.mm; path = ios/sdk/WeexSDK/Sources/Module/WXTransition.mm; sourceTree = "<group>"; };
-		35FBF4831A3149CAD67DCC34B6FD1503 /* WXProfilerDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXProfilerDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.m; sourceTree = "<group>"; };
-		3611AA526FB19FB9338F8D3D89F79E81 /* WXPageEventNotifyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPageEventNotifyEvent.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXPageEventNotifyEvent.h; sourceTree = "<group>"; };
-		36A618D4D2AD812E897D70F57E46B3F6 /* render_mask_factory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_mask_factory.h; path = weex_core/Source/core/render/node/factory/render_mask_factory.h; sourceTree = "<group>"; };
-		36CEA95C1F4AC46AC581889D047CA896 /* WXNavigationDefaultImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNavigationDefaultImpl.h; path = ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h; sourceTree = "<group>"; };
-		3741CE1152E8797AADF005063C770CC9 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = "<group>"; };
-		376710A2ECFF4EC9956C45CCF7A4213B /* render_object.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_object.h; path = weex_core/Source/core/render/node/render_object.h; sourceTree = "<group>"; };
-		37805030199FE45AFF17052FB858587A /* WXDebuggerUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDebuggerUtility.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.h; sourceTree = "<group>"; };
-		379BE2D025CA515F149A79108EE8EA1F /* style.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = style.cpp; path = weex_core/Source/core/layout/style.cpp; sourceTree = "<group>"; };
-		37E57AD3249A1625EDA6F9853920ECF2 /* WXPolyfillSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPolyfillSet.h; path = ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h; sourceTree = "<group>"; };
-		384ACFA2218B5D62758BB73E47231118 /* format_constants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = format_constants.h; path = src/webp/format_constants.h; sourceTree = "<group>"; };
-		38523DD31638B5271A648BE80D645448 /* WXCallJSMethod.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXCallJSMethod.m; path = ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m; sourceTree = "<group>"; };
-		3866AAF4D20C20B4D008673E504793B5 /* http_module.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = http_module.h; path = weex_core/Source/core/network/http_module.h; sourceTree = "<group>"; };
-		398DC184413965A9E6BDDC6D916A3108 /* webp_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = webp_enc.c; path = src/enc/webp_enc.c; sourceTree = "<group>"; };
-		39F271D37CDBFA4AE3732023C33A784B /* WXAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXAssert.m; path = ios/sdk/WeexSDK/Sources/Utility/WXAssert.m; sourceTree = "<group>"; };
-		39F3834F47723D84EED3CC378C8AAAA8 /* WXHeaderComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXHeaderComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.h; sourceTree = "<group>"; };
-		3A0845F34055E056A472B52866CBF46A /* thread_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = thread_utils.c; path = src/utils/thread_utils.c; sourceTree = "<group>"; };
-		3A4C86C1A4DB1BEFD3FBEFFA5D175592 /* WXModuleMethod.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXModuleMethod.m; path = ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m; sourceTree = "<group>"; };
-		3AC2EC0A0D7CC94318840A6328D6AEF3 /* render_page.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_page.cpp; path = weex_core/Source/core/render/page/render_page.cpp; sourceTree = "<group>"; };
-		3B1E2D0CEEC0548ADFBC6179F3039328 /* WXVideoComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXVideoComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h; sourceTree = "<group>"; };
-		3B22A18E5F341AE936A1D3CC1FEF1970 /* WXComponent_performance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXComponent_performance.h; path = ios/sdk/WeexSDK/Sources/Model/WXComponent_performance.h; sourceTree = "<group>"; };
-		3C369F5080DDE7FDB8DB370D02852FF1 /* decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = decode.h; path = src/webp/decode.h; sourceTree = "<group>"; };
-		3C6B8F91F4BBD13F43F43B52A1BC1BF0 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = "<group>"; };
-		3C8D08F25D322FDE225350FC7A4B422F /* dec_clip_tables.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_clip_tables.c; path = src/dsp/dec_clip_tables.c; sourceTree = "<group>"; };
-		3C94DD8B1A344DBC2A829D9ACFDEC9C5 /* WXWebGLTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWebGLTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.h; sourceTree = "<group>"; };
-		3D6F3BDDE29E6A8AB58A14B63EC2EF28 /* WXAnalyzerCenter+Transfer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXAnalyzerCenter+Transfer.h"; path = "ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter+Transfer.h"; sourceTree = "<group>"; };
-		3D7CD9878939528179D5E8F9F17D9FD0 /* bit_writer_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_writer_utils.h; path = src/utils/bit_writer_utils.h; sourceTree = "<group>"; };
-		3DD81240B46499A3B27D5E9A7D2F0FB0 /* WXNavigationDefaultImpl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXNavigationDefaultImpl.m; path = ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.m; sourceTree = "<group>"; };
-		3EC41A8F407F6967BB6C28CA7035AEDD /* WXSliderNeighborComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXSliderNeighborComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.mm; sourceTree = "<group>"; };
-		3F26A817A3EA5F11E6AEEF477E3E1750 /* WXScrollerComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXScrollerComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm; sourceTree = "<group>"; };
-		3F7A6CC8BEAA7EF6CD431364C5F23C7F /* WXAComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXAComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXAComponent.m; sourceTree = "<group>"; };
-		3FA74873954436F80E3ACE6F2E2169F1 /* render_text_factory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_text_factory.h; path = weex_core/Source/core/render/node/factory/render_text_factory.h; sourceTree = "<group>"; };
-		3FF59FF3FEA83471A133EF1637B8FD40 /* render_cell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_cell.h; path = weex_core/Source/core/render/node/render_cell.h; sourceTree = "<group>"; };
-		3FF6427D2C822AA9644AA17BC61EEC0C /* WXContainerIndex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXContainerIndex.m; path = sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.m; sourceTree = "<group>"; };
-		40102A5D2B52D87C553D2D82285C0815 /* NSObject+WXSwizzle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+WXSwizzle.m"; path = "ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.m"; sourceTree = "<group>"; };
-		4078AEE86EC0EE1E361BABF862225D0E /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = "<group>"; };
-		417E14C1A89F4D61DE283601C205396C /* WeexApiHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeexApiHeader.h; path = weex_core/Source/include/WeexApiHeader.h; sourceTree = "<group>"; };
-		4202CD7FA7BCF2B094173780B4A6860E /* render_list.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_list.cpp; path = weex_core/Source/core/render/node/render_list.cpp; sourceTree = "<group>"; };
-		4254F6BE0BB06241BA6CC3EF9E3744EC /* WXCanvasModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXCanvasModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.m; sourceTree = "<group>"; };
-		4256624AE40B24FB6568949D00B0D089 /* WXCellSlotComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXCellSlotComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.mm; sourceTree = "<group>"; };
-		429CCA750ED1C9DA834B1F69C537C19B /* WXIndexedDBTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXIndexedDBTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.h; sourceTree = "<group>"; };
-		42F9E408A2CE46E3B76C1EA326283740 /* WXTimelineTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTimelineTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.h; sourceTree = "<group>"; };
-		42FCCE7C105CBE4356971F79FA152DB9 /* WXComponentManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXComponentManager.h; path = ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h; sourceTree = "<group>"; };
-		435FE9BD8BD01F59754D0800669258E4 /* WXStorageModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXStorageModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h; sourceTree = "<group>"; };
-		4393261C083761D7ED36FC63755F68C3 /* WXSDKManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXSDKManager.m; path = ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m; sourceTree = "<group>"; };
-		4425A7F96C7883DA025E19363BC36E01 /* WXStreamModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXStreamModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h; sourceTree = "<group>"; };
-		447B917EA5C822A38458C9D537DD9223 /* WXNavigationProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNavigationProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h; sourceTree = "<group>"; };
-		44BDFF70D1F5FD611856D11C3087C56D /* WXModuleMethod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXModuleMethod.h; path = ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h; sourceTree = "<group>"; };
-		46E22E9BEEC6CF3435BAE66D38F9890D /* WXDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDomainController.m; sourceTree = "<group>"; };
-		477F1538ECB1049ED7E3A078E122140A /* WXDatabaseTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDatabaseTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.m; sourceTree = "<group>"; };
-		47BD868D13D85D4B214A47B72089C5AF /* WXResourceRequestHandlerDefaultImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXResourceRequestHandlerDefaultImpl.h; path = ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h; sourceTree = "<group>"; };
-		47E1246ED504AD9F3E175BD3F5C47CE4 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = "<group>"; };
-		487963401D867BAC55AAF9F1846903F9 /* WXComponent+ViewManagement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXComponent+ViewManagement.h"; path = "ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h"; sourceTree = "<group>"; };
-		48BD7D9F3C1D61BB708A03A0204FB61F /* WXObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXObject.h; path = sdk/WXDevTool/Source/PonyDebugger/WXObject.h; sourceTree = "<group>"; };
-		49380016F114CC21FE1B7FA7A993882E /* lossless_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_msa.c; path = src/dsp/lossless_msa.c; sourceTree = "<group>"; };
-		4942D5CB93B0A26765B6417510DAB51A /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = "<group>"; };
-		49D075A3BE65E5E1B82F6E7D5AE96275 /* WXRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRefreshComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h; sourceTree = "<group>"; };
-		4AB0737769CA949732BF4B4E3CF64FD6 /* EBGyroVector3.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBGyroVector3.m; path = core/ios/BindingX/EBGyroVector3.m; sourceTree = "<group>"; };
-		4AB7D019B3AD5CA7BE5187C9C683E604 /* WXConsoleLogModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXConsoleLogModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.h; sourceTree = "<group>"; };
-		4ADE381C9780F5CE89F4943B6AC048F0 /* WXWeakObjectWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWeakObjectWrapper.h; path = ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h; sourceTree = "<group>"; };
-		4B02007BB620EF4CCBCD239F3801EE41 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = "<group>"; };
-		4BF98273FC1C3FA77A28D2A4A79CB83D /* render_action_trigger_vsync.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_trigger_vsync.h; path = weex_core/Source/core/render/action/render_action_trigger_vsync.h; sourceTree = "<group>"; };
-		4C17AD96F7B553FA52A1307ACB959303 /* WXCycleSliderComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCycleSliderComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.h; sourceTree = "<group>"; };
-		4D48C9BAA449E4C89E9E20D2D99E32D6 /* muxinternal.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxinternal.c; path = src/mux/muxinternal.c; sourceTree = "<group>"; };
-		4D787F2AF2771CBA4D62A3D55DAB1B22 /* EBExpressionGesture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpressionGesture.m; path = core/ios/BindingX/EBExpressionGesture.m; sourceTree = "<group>"; };
-		4DA93269709E08749ADA71A4BEE50E12 /* WXComponentFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXComponentFactory.m; path = ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m; sourceTree = "<group>"; };
-		4DC7C7ED35B837AFE897CAF2A34B639D /* huffman_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = huffman_utils.h; path = src/utils/huffman_utils.h; sourceTree = "<group>"; };
-		4E20432D426F22ABEB931F2C2C78F075 /* dec_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_mips_dsp_r2.c; path = src/dsp/dec_mips_dsp_r2.c; sourceTree = "<group>"; };
-		4EAC33AD73DB9E2C46B9BD90FA0A5C95 /* log_defines.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = log_defines.cpp; path = weex_core/Source/base/log_defines.cpp; sourceTree = "<group>"; };
-		4FA2A987EDEF13E0979D6412C0087D68 /* filters_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_neon.c; path = src/dsp/filters_neon.c; sourceTree = "<group>"; };
-		4FD2E8C7F2D14E58865842797802377F /* WXCSSTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXCSSTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.m; sourceTree = "<group>"; };
-		5011BDBC7EAF5EC6770B94763C0F0184 /* render_appbar_factory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_appbar_factory.h; path = weex_core/Source/core/render/node/factory/render_appbar_factory.h; sourceTree = "<group>"; };
-		5046489C1B14B97F68DAD1DCE2668A3B /* cost.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost.c; path = src/dsp/cost.c; sourceTree = "<group>"; };
-		50B2583C0B8A4F9CF6AA3E55B6B620FB /* WXProfilerTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXProfilerTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.h; sourceTree = "<group>"; };
-		51778F83FDBA40339C0082663BCE545E /* render_list.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_list.h; path = weex_core/Source/core/render/node/render_list.h; sourceTree = "<group>"; };
-		51840C8A2FE37FAE08E8909CDE06B26B /* EBGyroOrientationEvaluator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBGyroOrientationEvaluator.h; path = core/ios/BindingX/EBGyroOrientationEvaluator.h; sourceTree = "<group>"; };
-		518CA001FC5D00215F85C3AF269D9471 /* histogram_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = histogram_enc.h; path = src/enc/histogram_enc.h; sourceTree = "<group>"; };
-		5229B7E34A0C4D04C25FDBBF6F1C8258 /* libwebp.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = libwebp.xcconfig; sourceTree = "<group>"; };
-		525F0C44D141D5FB7FE4884D80746370 /* message_pump_darwin.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = message_pump_darwin.cc; path = weex_core/Source/base/message_loop/message_pump_darwin.cc; sourceTree = "<group>"; };
-		52613ABD5111A2F14AB0F64FD524B4E8 /* EBJSEvaluate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBJSEvaluate.m; path = core/ios/BindingX/EBJSEvaluate.m; sourceTree = "<group>"; };
-		5269C696D4E80E4CFDB297C5457FA96C /* default_request_handler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = default_request_handler.mm; path = weex_core/Source/core/network/ios/default_request_handler.mm; sourceTree = "<group>"; };
-		52ED316BD2DA7013DC92A959AC245B4F /* WXStorageModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXStorageModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXStorageModule.m; sourceTree = "<group>"; };
-		542C32E7949FCF7F9790CFD83139C18C /* cpu.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cpu.c; path = src/dsp/cpu.c; sourceTree = "<group>"; };
-		544085C15C81373F7716C05D8E0B3C5F /* WXTimelineDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXTimelineDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.m; sourceTree = "<group>"; };
-		54B83AE7398DA8AB4FED9B3DA57D8DF5 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = "<group>"; };
-		550587F7B36776EA091BAFD1DFBD248B /* cost_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_neon.c; path = src/dsp/cost_neon.c; sourceTree = "<group>"; };
-		554829D5B19AFAECF09B35BFE575EA3A /* EBWXOldModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBWXOldModule.h; path = weex/ios/Sources/EBWXOldModule.h; sourceTree = "<group>"; };
-		557660BC11467BB6F1E7F6CFF55EE651 /* weex-main-jsfm.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "weex-main-jsfm.js"; path = "pre-build/weex-main-jsfm.js"; sourceTree = "<group>"; };
-		55C70945B2910AAAC1B4314D2ABADA63 /* WXComponent+ViewManagement.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = "WXComponent+ViewManagement.mm"; path = "ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm"; sourceTree = "<group>"; };
-		55C84A27386B7484870C45B41147A6F9 /* thread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread.h; path = weex_core/Source/base/thread/thread.h; sourceTree = "<group>"; };
-		564D8C0EF73E7378C9E89E77EA8AAF33 /* WXNetworkProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNetworkProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h; sourceTree = "<group>"; };
-		565151245CAD893A8C9F933AAFBB89A5 /* ATSDK.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = ATSDK.bundle; path = ATSDK.framework/Versions/A/Resources/ATSDK.bundle; sourceTree = "<group>"; };
-		56532DCE6BAD2315E1C61960678AF7D9 /* EBExpression.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpression.m; path = core/ios/BindingX/EBExpression.m; sourceTree = "<group>"; };
-		569187B97800B10B542FCB0DD8F64EF4 /* libwebp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "libwebp-dummy.m"; sourceTree = "<group>"; };
-		571B93F54A2BCBE03083DA34E92AE15B /* lossless_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_neon.c; path = src/dsp/lossless_neon.c; sourceTree = "<group>"; };
-		574046D5BB120076504E00F10E5E9CF3 /* message_pump_posix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = message_pump_posix.h; path = weex_core/Source/base/message_loop/message_pump_posix.h; sourceTree = "<group>"; };
-		57A1DE6298E167358B79D4DB2E69D224 /* wson.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = wson.h; path = weex_core/Source/wson/wson.h; sourceTree = "<group>"; };
-		57C2392C35D351CEA1445C24962C9BA8 /* ATSDK-Weex.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "ATSDK-Weex.xcconfig"; sourceTree = "<group>"; };
-		57D88746C9A66B0748EE7F9AAF27A3E9 /* WXDatabaseDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDatabaseDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.h; sourceTree = "<group>"; };
-		5802092E4F1DB06997B299A27BB6C689 /* render_page.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_page.h; path = weex_core/Source/core/render/page/render_page.h; sourceTree = "<group>"; };
-		58321BC3499A706BDCDFEF204B68D890 /* EBUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBUtility.h; path = core/ios/BindingX/EBUtility.h; sourceTree = "<group>"; };
-		588B1DF22DC12663D1C56C5FB056004F /* WXDebugDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDebugDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.h; sourceTree = "<group>"; };
-		589FAFECEA3AE16046843C3792FBE957 /* NSArray+Weex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Weex.m"; path = "ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.m"; sourceTree = "<group>"; };
-		5963DE8F5AD74DBA443C17DF746D5DAE /* WXApmForInstance.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXApmForInstance.m; path = ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.m; sourceTree = "<group>"; };
-		59712A521D4F2FEFA8957E7192AA0282 /* Pods-WeexUITestDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-WeexUITestDemo.release.xcconfig"; sourceTree = "<group>"; };
-		5A329D0C585706FF2B4DFBFD1A620ADA /* WXRichText.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXRichText.mm; path = ios/sdk/WeexSDK/Sources/Component/WXRichText.mm; sourceTree = "<group>"; };
-		5A596DDEC48D6239A9F5FB4D81048103 /* WXLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXLayer.m; path = ios/sdk/WeexSDK/Sources/Display/WXLayer.m; sourceTree = "<group>"; };
-		5A6621B5A06160C20268D1FF942A39E2 /* WXAnalyzerCenter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXAnalyzerCenter.h; path = ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.h; sourceTree = "<group>"; };
-		5AD7FF77DCD3E2B67AD9365AA4FDB748 /* enc_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_mips_dsp_r2.c; path = src/dsp/enc_mips_dsp_r2.c; sourceTree = "<group>"; };
-		5AFFCFBE9C4C4A79AFC4D22626C9AEFC /* WXRecycleListComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecycleListComponent.h; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.h; sourceTree = "<group>"; };
-		5B417F5656817FDF2B5F1C42D6D43655 /* weex-rax-api.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "weex-rax-api.js"; path = "pre-build/weex-rax-api.js"; sourceTree = "<group>"; };
-		5B81E94A295CD27E3DBC06078FAA95D4 /* EBExpressionScope.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpressionScope.h; path = core/ios/BindingX/EBExpressionScope.h; sourceTree = "<group>"; };
-		5BAC633A3EB18A51CED030CBB4211826 /* dec_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_msa.c; path = src/dsp/dec_msa.c; sourceTree = "<group>"; };
-		5C1DAB5173BE4D9AFD90E1774F55B88A /* UIImage+WebP.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+WebP.m"; path = "SDWebImage/UIImage+WebP.m"; sourceTree = "<group>"; };
-		5CF8AC7110C2C269AD25BBD82B9FB4E7 /* WXDynamicDebuggerDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDynamicDebuggerDomain.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.m; sourceTree = "<group>"; };
-		5CFAC8DFCA639A59B25A3C53009BFF51 /* NSOrderedSet+WXRuntimePropertyDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSOrderedSet+WXRuntimePropertyDescriptor.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.m"; sourceTree = "<group>"; };
-		5D25A2BB65D7A2FA732B9352AC72D542 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = "<group>"; };
-		5D7728EB2DC323F8FB375819B6C80518 /* WXDebugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDebugger.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDebugger.h; sourceTree = "<group>"; };
-		5D92C84F2F60B8D18C10DD39EF6EC8F3 /* constants_value.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = constants_value.h; path = weex_core/Source/core/css/constants_value.h; sourceTree = "<group>"; };
-		5DCFBD346AA48339E5D5BD6E0990B06C /* dec_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_sse2.c; path = src/dsp/dec_sse2.c; sourceTree = "<group>"; };
-		5E3FB7D2C61813EC676AEC786050D6C9 /* yuv_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_mips32.c; path = src/dsp/yuv_mips32.c; sourceTree = "<group>"; };
-		5E4674603A5D5B9215FFA0F8E69F8B71 /* liblibwebp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = liblibwebp.a; path = liblibwebp.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		5EEE887F1C8AC77A04E10C127096DEB1 /* WXTimelineDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTimelineDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.h; sourceTree = "<group>"; };
-		5FA21AC0ED4D577E3E5EA94DEF276BC5 /* libWeexSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libWeexSDK.a; path = libWeexSDK.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		60A576B93881D755C54E184B91A542FE /* render_action_appendtree_createfinish.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_appendtree_createfinish.cpp; path = weex_core/Source/core/render/action/render_action_appendtree_createfinish.cpp; sourceTree = "<group>"; };
-		60D92BDEF0C89DD60BEA3D9951902D06 /* WXDOMDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDOMDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.h; sourceTree = "<group>"; };
-		60F4B24CE94D2F72BC30FD57CC493F1A /* NSDictionary+WXRuntimePropertyDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+WXRuntimePropertyDescriptor.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.h"; sourceTree = "<group>"; };
-		610B55D2F796875DB1A15E69EE3984F9 /* WXComponentManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXComponentManager.mm; path = ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm; sourceTree = "<group>"; };
-		6118E94A5253FC7B2D918C278DF426DC /* WXApplicationCacheDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApplicationCacheDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.h; sourceTree = "<group>"; };
-		6144DFE729541CC05D668AB56A0C8C2D /* bit_reader_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_reader_utils.h; path = src/utils/bit_reader_utils.h; sourceTree = "<group>"; };
-		617AAA9CFC80584480E9CC7404654BC8 /* WXModalUIModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXModalUIModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.m; sourceTree = "<group>"; };
-		62239767813F4946C6F565B234287654 /* WXDevTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDevTool.h; path = sdk/WXDevTool/Source/WXHeader/WXDevTool.h; sourceTree = "<group>"; };
-		627025141003ADDC6798C08B8F6B8BD9 /* WXVoiceOverModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXVoiceOverModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.m; sourceTree = "<group>"; };
-		627F5382D6E503C3207827F7F3143B2C /* WXLoadingIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXLoadingIndicator.m; path = ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.m; sourceTree = "<group>"; };
-		62865E06BD5FE82A269EB806539EBF3D /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = "<group>"; };
-		6310788601150105C9D7AFF54D45AC39 /* filters_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filters_utils.h; path = src/utils/filters_utils.h; sourceTree = "<group>"; };
-		6353561875456A3926A0A5DF5E22A25F /* WXResourceResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXResourceResponse.h; path = ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h; sourceTree = "<group>"; };
-		640096C1296D81E11498A694040E6BB8 /* Pods-WeexDemo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-WeexDemo-resources.sh"; sourceTree = "<group>"; };
-		6424B32A5552DE209A7B9A15CECF440F /* WXTimerModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXTimerModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m; sourceTree = "<group>"; };
-		646D85D77890218A5B550A382A44D137 /* buffer_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = buffer_dec.c; path = src/dec/buffer_dec.c; sourceTree = "<group>"; };
-		65221697FA3F8237A789727D39DCECE9 /* WeexSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeexSDK.h; path = ios/sdk/WeexSDK/Sources/WeexSDK.h; sourceTree = "<group>"; };
-		653D2CE6B6588AD5E23381392157E330 /* config_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = config_enc.c; path = src/enc/config_enc.c; sourceTree = "<group>"; };
-		65831FF2FE7103D27F37E93236459F82 /* WXJSFrameworkLoadDefaultImpl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXJSFrameworkLoadDefaultImpl.m; path = ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.m; sourceTree = "<group>"; };
-		65E647FBD6592D9646B975FBC14E5D5A /* WXComponent_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXComponent_internal.h; path = ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h; sourceTree = "<group>"; };
-		660D561D446C4B928575C40DC822C970 /* types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = types.h; path = src/webp/types.h; sourceTree = "<group>"; };
-		666B4A6035789E80E60C32EE60633040 /* WXEditComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXEditComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXEditComponent.h; sourceTree = "<group>"; };
-		66CCA8129AEBD699E327188C15DD5088 /* WXSDKInstance_private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSDKInstance_private.h; path = ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h; sourceTree = "<group>"; };
-		677EE44402FA4C045667B8620C3EA638 /* WXDefinitions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDefinitions.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.h; sourceTree = "<group>"; };
-		67C20FBCE28AEC3E471098E04E4C640C /* WXListComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXListComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXListComponent.mm; sourceTree = "<group>"; };
-		6808D7F8FC3CA82AEC02FE4F83810DC5 /* render_action_update_style.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_update_style.h; path = weex_core/Source/core/render/action/render_action_update_style.h; sourceTree = "<group>"; };
-		688B9E4010E6B795C2865A4BE0DB56BD /* WXInspectorDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXInspectorDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.m; sourceTree = "<group>"; };
-		6905518B2D61D6DC628C6DE2B6A5C333 /* near_lossless_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = near_lossless_enc.c; path = src/enc/near_lossless_enc.c; sourceTree = "<group>"; };
-		69C4EFE7744EFFA2901C2AB394D53F1F /* backward_references_cost_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = backward_references_cost_enc.c; path = src/enc/backward_references_cost_enc.c; sourceTree = "<group>"; };
-		69CF81A41F02AB7C9DD308EF060EFBE4 /* WXScrollerComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXScrollerComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h; sourceTree = "<group>"; };
-		69E13804D88E5C6DA33A1A4598922618 /* EBExpressionOrientation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpressionOrientation.m; path = core/ios/BindingX/EBExpressionOrientation.m; sourceTree = "<group>"; };
-		6A0105F2665EF9E45047B14AF32A325D /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = "<group>"; };
-		6A51A02B569935B1CFFB3A2BBB877CC3 /* upsampling_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_mips_dsp_r2.c; path = src/dsp/upsampling_mips_dsp_r2.c; sourceTree = "<group>"; };
-		6B0AF454C349198FCE5D4BF657983CEE /* render_appbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_appbar.h; path = weex_core/Source/core/render/node/render_appbar.h; sourceTree = "<group>"; };
-		6B2088C1DBA7F86C9EF057C0A3405C1F /* rescaler_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_neon.c; path = src/dsp/rescaler_neon.c; sourceTree = "<group>"; };
-		6B8CE7D262B386D0CB62ABD24F7F57FF /* WXRoundedRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRoundedRect.h; path = ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h; sourceTree = "<group>"; };
-		6BF6CC9E4D9F28D280404A5F355407E6 /* WXExceptionUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXExceptionUtils.m; path = ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.m; sourceTree = "<group>"; };
-		6C5179E04421725162CC126E2BB89539 /* WXConsoleDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXConsoleDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.m; sourceTree = "<group>"; };
-		6C56F7E8E30A11CFF44841BD257BEC19 /* render_action_createfinish.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_createfinish.cpp; path = weex_core/Source/core/render/action/render_action_createfinish.cpp; sourceTree = "<group>"; };
-		6C880AADFB008B01BA28F9EF8486D76D /* Pods-WeexDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-WeexDemo-dummy.m"; sourceTree = "<group>"; };
-		6D50F6F42FDF6993A7BF16570B037B7A /* eagle_bridge.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = eagle_bridge.cpp; path = weex_core/Source/core/bridge/eagle_bridge.cpp; sourceTree = "<group>"; };
-		6D612333D9AEF8011462885EF49CB5E6 /* WXUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXUtility.h; path = ios/sdk/WeexSDK/Sources/Utility/WXUtility.h; sourceTree = "<group>"; };
-		6D823BC6FBF42D547E7A6B51552B61E8 /* dec_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_mips32.c; path = src/dsp/dec_mips32.c; sourceTree = "<group>"; };
-		6DA9A06FE67407BC9C0786A48CC20007 /* WXSDKInstance.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXSDKInstance.m; path = ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m; sourceTree = "<group>"; };
-		6DB93DB6CDDD37CAF9727C8EA585AF4F /* vp8l_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8l_enc.c; path = src/enc/vp8l_enc.c; sourceTree = "<group>"; };
-		6DC3DA9AC7A31B49D443C2ED3DD38F37 /* WXExtendCallNativeManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXExtendCallNativeManager.m; path = ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.m; sourceTree = "<group>"; };
-		6DF23A16B80C0C56AC8B427B33F53423 /* utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = utils.c; path = src/utils/utils.c; sourceTree = "<group>"; };
-		6E1F7632079A06CBBCDDC0AEB2425BCD /* cost_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_mips_dsp_r2.c; path = src/dsp/cost_mips_dsp_r2.c; sourceTree = "<group>"; };
-		6E2F4B5FD546A8005197C342FE6BA17F /* EBGyroVector3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBGyroVector3.h; path = core/ios/BindingX/EBGyroVector3.h; sourceTree = "<group>"; };
-		6F23BD4A985246D8B7536FD2BAAF4266 /* message_loop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = message_loop.h; path = weex_core/Source/base/message_loop/message_loop.h; sourceTree = "<group>"; };
-		6F27F751234744F1D55CA39C37C118B6 /* WXInspectorDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXInspectorDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.h; sourceTree = "<group>"; };
-		6F76688311A99F446EB1955FEB61E314 /* WXComponent+Events.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXComponent+Events.h"; path = "ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h"; sourceTree = "<group>"; };
-		6F8740E75EC067CF8F875A5BF4D7B376 /* render_manager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_manager.cpp; path = weex_core/Source/core/render/manager/render_manager.cpp; sourceTree = "<group>"; };
-		707198A712ABE0EBC96B4E731C4F9A5E /* EBHandlerFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBHandlerFactory.m; path = core/ios/BindingX/EBHandlerFactory.m; sourceTree = "<group>"; };
-		712B82486FA9726B76BE61FFDF4EB411 /* wx_type_define.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = wx_type_define.h; path = weex_core/Source/core/bridge/wx_type_define.h; sourceTree = "<group>"; };
-		715557CDE4F7E62560B934E99C1CDD54 /* alpha_processing_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_mips_dsp_r2.c; path = src/dsp/alpha_processing_mips_dsp_r2.c; sourceTree = "<group>"; };
-		71DE23F3857F4770A7BED70F231ADF8E /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = "<group>"; };
-		7239E6CF32AD3B30C0FFEDDCC9B1C3EC /* WXHandlerFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXHandlerFactory.h; path = ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h; sourceTree = "<group>"; };
-		72752A114E306EE1502FD7483D5BC2AF /* WXMemoryDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXMemoryDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.m; sourceTree = "<group>"; };
-		72D51839EB3A1D215E70FF149BDE5AB3 /* WXJSExceptionProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXJSExceptionProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h; sourceTree = "<group>"; };
-		73DC57F20AEAA5E4DF63AEDC15713259 /* upsampling_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_msa.c; path = src/dsp/upsampling_msa.c; sourceTree = "<group>"; };
-		7452F0CF401F8FABA2D2F0C843AC234D /* render_list_factory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_list_factory.h; path = weex_core/Source/core/render/node/factory/render_list_factory.h; sourceTree = "<group>"; };
-		7491005464123A9B84498A6E80E82A8D /* NSArray+WX_JSONObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+WX_JSONObject.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.m"; sourceTree = "<group>"; };
-		749AFAB8332464D86023B905B1A70E87 /* dom_wson.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = dom_wson.cpp; path = weex_core/Source/core/parser/dom_wson.cpp; sourceTree = "<group>"; };
-		74FF5C68BC1BB4E500D8196E4D3EE423 /* render_scroller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_scroller.h; path = weex_core/Source/core/render/node/render_scroller.h; sourceTree = "<group>"; };
-		750DFD10E8A495F61B73935AD19CEA94 /* WXDivComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDivComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXDivComponent.m; sourceTree = "<group>"; };
-		752E58CF55BCF349990686330A52C599 /* render_creator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_creator.h; path = weex_core/Source/core/render/node/factory/render_creator.h; sourceTree = "<group>"; };
-		753031B9509837B78EA2E9CF5D9A7A06 /* demux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = demux.h; path = src/webp/demux.h; sourceTree = "<group>"; };
-		75455111C321489DE29B265BB4026BDA /* WXDatabaseTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDatabaseTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.h; sourceTree = "<group>"; };
-		75527C9E9277054C993EF51EA84C7B5E /* frame_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = frame_dec.c; path = src/dec/frame_dec.c; sourceTree = "<group>"; };
-		755B2D2A9891D9247D25651476283530 /* script_bridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = script_bridge.h; path = weex_core/Source/core/bridge/script_bridge.h; sourceTree = "<group>"; };
-		759B891C482A044F9477EC6B3F5E8F59 /* WXProfilerTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXProfilerTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.m; sourceTree = "<group>"; };
-		75DAEBE3413648C49531D6466C165FBE /* WXThreadSafeMutableDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXThreadSafeMutableDictionary.m; path = ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m; sourceTree = "<group>"; };
-		760F2279D577B5EE7925C2992933BE44 /* WXConsoleTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXConsoleTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.h; sourceTree = "<group>"; };
-		76608084D23396212F14045A160845B6 /* render_page_custom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_page_custom.h; path = weex_core/Source/core/render/page/render_page_custom.h; sourceTree = "<group>"; };
-		766C61EAE2ED0A41B1BD895D097C8856 /* NSArray+WXRuntimePropertyDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+WXRuntimePropertyDescriptor.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.h"; sourceTree = "<group>"; };
-		76B75D38A8213F489A5CBBF026B34AC7 /* WXEmbedComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXEmbedComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m; sourceTree = "<group>"; };
-		7711034F765E54E1C7952B3AAAB8298F /* analysis_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = analysis_enc.c; path = src/enc/analysis_enc.c; sourceTree = "<group>"; };
-		7793767183C6CAFC41D1193AA754C4AD /* WXCSSDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXCSSDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.m; sourceTree = "<group>"; };
-		77D34AE7AB9D03DCDCA357F35A110BEB /* style.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = style.h; path = weex_core/Source/core/layout/style.h; sourceTree = "<group>"; };
-		783D9EE973E22466FF9A4F3927A1E325 /* EBWXModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBWXModule.m; path = weex/ios/Sources/EBWXModule.m; sourceTree = "<group>"; };
-		7846D8E21864529759418DF69A0D5F68 /* enc_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_neon.c; path = src/dsp/enc_neon.c; sourceTree = "<group>"; };
-		785BEA1628F2E8279FEF117373A139E6 /* WXRuntimeTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRuntimeTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.m; sourceTree = "<group>"; };
-		789A0D66FC2F3DDC0B730D43F95A06E2 /* WXScrollerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXScrollerProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h; sourceTree = "<group>"; };
-		791475048C62E04BFFA13DDFD585AB2F /* quant.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant.h; path = src/dsp/quant.h; sourceTree = "<group>"; };
-		7931DA95A0854204EBE7CB40C654BC90 /* bit_writer_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = bit_writer_utils.c; path = src/utils/bit_writer_utils.c; sourceTree = "<group>"; };
-		79936D43243E99532FE4C61FCF7F8592 /* EBExpressionTiming.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpressionTiming.m; path = core/ios/BindingX/EBExpressionTiming.m; sourceTree = "<group>"; };
-		79E729EDC1F1651C227A904526BB3071 /* WXDevtool-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "WXDevtool-prefix.pch"; sourceTree = "<group>"; };
-		7A3D029F5B28B2655DC0129087CEB447 /* WXURLRewriteDefaultImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXURLRewriteDefaultImpl.h; path = ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h; sourceTree = "<group>"; };
-		7AC8572623E585F7117B671D088D40DC /* WXVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXVersion.h; path = ios/sdk/WeexSDK/Sources/Utility/WXVersion.h; sourceTree = "<group>"; };
-		7AFA95C824F2DD4AF736A025CF479A87 /* WXHandlerFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXHandlerFactory.m; path = ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.m; sourceTree = "<group>"; };
-		7B08C974C02C1596DA9A2CC14EFD1F07 /* WXRecyclerDataController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecyclerDataController.h; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h; sourceTree = "<group>"; };
-		7BD85BF5B9247B85DC1C8E7E7A5309D0 /* Pods-WeexUITestDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-WeexUITestDemo-dummy.m"; sourceTree = "<group>"; };
-		7C4A22C2552E5B865E9C27390C678E89 /* render_mask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_mask.h; path = weex_core/Source/core/render/node/render_mask.h; sourceTree = "<group>"; };
-		7C8745742934548267445C335A0FDA6F /* WXRootViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRootViewController.m; path = ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.m; sourceTree = "<group>"; };
-		7D0D64A5A2F7C3F870B6964D50C748ED /* WXSDKError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSDKError.h; path = ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h; sourceTree = "<group>"; };
-		7D11BB1F09322EDF174FE9EAF01945AA /* muxi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = muxi.h; path = src/mux/muxi.h; sourceTree = "<group>"; };
-		7DA6B7198E908F90672D8F9052EA0EC1 /* log_bridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_bridge.h; path = weex_core/Source/core/bridge/log_bridge.h; sourceTree = "<group>"; };
-		7DC5280C30E9F194EC773F3B8F965730 /* WXWebGLDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWebGLDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.h; sourceTree = "<group>"; };
-		7DD569D7C5FDEDEAB92DAD6047B0821E /* core_side_in_script.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = core_side_in_script.cpp; path = weex_core/Source/core/bridge/script/core_side_in_script.cpp; sourceTree = "<group>"; };
-		7E4784D50E23AC2E6D613DCDAC424BFF /* WXJSFrameworkLoadProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXJSFrameworkLoadProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXJSFrameworkLoadProtocol.h; sourceTree = "<group>"; };
-		7E53E4CF0CA9D655D3A22DE7DDF36414 /* WXSDKInstance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSDKInstance.h; path = ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h; sourceTree = "<group>"; };
-		7E6D3071DBD29D08C23E4CE4834630B2 /* EBJSEvaluate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBJSEvaluate.h; path = core/ios/BindingX/EBJSEvaluate.h; sourceTree = "<group>"; };
-		7EBCCA75309150481CB6C41E621C4F03 /* WXComponent+Display.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "WXComponent+Display.m"; path = "ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m"; sourceTree = "<group>"; };
-		7EC1B99B1B0076AF5ECC0BB970362AD3 /* wson_parser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = wson_parser.cpp; path = weex_core/Source/wson/wson_parser.cpp; sourceTree = "<group>"; };
-		7F6724E5E6C688E9AE46CC0B477DA2A1 /* NSError+WX_JSONObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+WX_JSONObject.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.h"; sourceTree = "<group>"; };
-		802DD605FE5C62B581E3D3215A7BECE5 /* string_util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = string_util.h; path = weex_core/Source/base/string_util.h; sourceTree = "<group>"; };
-		80E76783A17376596888A4D50E9D0DB8 /* json11.hpp */ = {isa = PBXFileReference; includeInIndex = 1; name = json11.hpp; path = weex_core/Source/third_party/json11/json11.hpp; sourceTree = "<group>"; };
-		80F3C571DF359DB4A11352DBA10E2D7F /* WXCanvasComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXCanvasComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.m; sourceTree = "<group>"; };
-		81AF64896A2DC4374353CCB01726FAE9 /* render_page_base.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_page_base.h; path = weex_core/Source/core/render/page/render_page_base.h; sourceTree = "<group>"; };
-		8213A283F898071C6B3AB713DA5D59F7 /* vp8li_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8li_dec.h; path = src/dec/vp8li_dec.h; sourceTree = "<group>"; };
-		8267DD65FE71077879EAABFBAE3CCA3A /* WXAppMonitorProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXAppMonitorProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h; sourceTree = "<group>"; };
-		82AA7438CED848E75D3FD1C1C3BB5F49 /* WXComponent+PseudoClassManagement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXComponent+PseudoClassManagement.h"; path = "ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h"; sourceTree = "<group>"; };
-		835103DFFDC11E2D8D0890952D546563 /* EBUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBUtility.m; path = core/ios/BindingX/EBUtility.m; sourceTree = "<group>"; };
-		8370CB757ED3DF90C752216C25EADC40 /* flex_enum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = flex_enum.h; path = weex_core/Source/core/layout/flex_enum.h; sourceTree = "<group>"; };
-		83BDB24013BD3FA58F81DD8BCB45CAC6 /* filters_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_msa.c; path = src/dsp/filters_msa.c; sourceTree = "<group>"; };
-		8474D4CFFB6FBEA167000911A4C27363 /* render_action_move_element.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_move_element.cpp; path = weex_core/Source/core/render/action/render_action_move_element.cpp; sourceTree = "<group>"; };
-		8491E8A977219F1C165FB8188BABA176 /* WXDebugger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDebugger.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDebugger.m; sourceTree = "<group>"; };
-		851D7AE2CC6068A02A6289B6A4BBF402 /* EBExpressionTiming.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpressionTiming.h; path = core/ios/BindingX/EBExpressionTiming.h; sourceTree = "<group>"; };
-		852FC84A567B16BE4E766E27CEA115B8 /* default_request_handler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = default_request_handler.h; path = weex_core/Source/core/network/ios/default_request_handler.h; sourceTree = "<group>"; };
-		857DC134CF138674AB3DD04BECD4BA7E /* JsonRenderManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = JsonRenderManager.cpp; path = weex_core/Source/core/json/JsonRenderManager.cpp; sourceTree = "<group>"; };
-		857E6CA7608808D0C861AD0352EE698A /* EBHandlerFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBHandlerFactory.h; path = core/ios/BindingX/EBHandlerFactory.h; sourceTree = "<group>"; };
-		85A01882ED06DFEA2E0CE78BCDB204A7 /* libSocketRocket.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSocketRocket.a; path = libSocketRocket.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		85EF953A9D60907EF2306D4E4750BA29 /* WXDebuggerTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDebuggerTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.h; sourceTree = "<group>"; };
-		86033D529181F342549002F8B5D702CD /* WXDiffUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDiffUtil.h; path = ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.h; sourceTree = "<group>"; };
-		864655BAD9E35B09408CC534D6162364 /* EBJSMath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBJSMath.m; path = core/ios/BindingX/EBJSMath.m; sourceTree = "<group>"; };
-		868A683964FD081F51B55F88C7CD6A55 /* Pods-WeexDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-WeexDemo-acknowledgements.plist"; sourceTree = "<group>"; };
-		8690814B9B027077FEB7418909C49C45 /* WXView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXView.m; path = ios/sdk/WeexSDK/Sources/View/WXView.m; sourceTree = "<group>"; };
-		873AEE46C5C7387E0F7198D4E92FE694 /* WXDevToolType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDevToolType.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.h; sourceTree = "<group>"; };
-		87A767DF00D03EEA3C7C7DD5A5EE4F23 /* NSArray+WX_JSONObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+WX_JSONObject.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.h"; sourceTree = "<group>"; };
-		87E25C2E46D80B1C2B60B139F075B0C8 /* time_point.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = time_point.cc; path = weex_core/Source/base/time_point.cc; sourceTree = "<group>"; };
-		880D8F8B64B196B3B05E9737E770F9A5 /* layout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = layout.h; path = weex_core/Source/core/layout/layout.h; sourceTree = "<group>"; };
-		88268CA081F4DFE5B57B99645C04DA41 /* WXComponent+Layout.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = "WXComponent+Layout.mm"; path = "ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm"; sourceTree = "<group>"; };
-		886F31BB06714550409E5AB9A4C697A6 /* WXPageDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXPageDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.m; sourceTree = "<group>"; };
-		8881F541E86C486720ED44C61CE9C0C1 /* WXDefinitions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDefinitions.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.m; sourceTree = "<group>"; };
-		88DE4FC80B8F6F56708AE93E3F242D8C /* EBGyroEuler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBGyroEuler.h; path = core/ios/BindingX/EBGyroEuler.h; sourceTree = "<group>"; };
-		88E443FE62F0AAC79442F122AE65717E /* backward_references_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = backward_references_enc.c; path = src/enc/backward_references_enc.c; sourceTree = "<group>"; };
-		88FB711AB2764E5E7086C5524C422787 /* EBWXOldModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBWXOldModule.m; path = weex/ios/Sources/EBWXOldModule.m; sourceTree = "<group>"; };
-		890DD6A1D89D152ECBD1C8B4A51C4F4F /* lossless_enc_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_mips_dsp_r2.c; path = src/dsp/lossless_enc_mips_dsp_r2.c; sourceTree = "<group>"; };
-		89DF62AA9A3F430B40EA844AA359F91F /* WXFileSystemTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXFileSystemTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.h; sourceTree = "<group>"; };
-		89E70154B03FA2D7700ABFBF738E1B3F /* EBGyroManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBGyroManager.h; path = core/ios/BindingX/EBGyroManager.h; sourceTree = "<group>"; };
-		8A163D5274787AA62C72E274E9605BFC /* rescaler_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_mips_dsp_r2.c; path = src/dsp/rescaler_mips_dsp_r2.c; sourceTree = "<group>"; };
-		8A5D9BA0E025AF65EC016531A0AF5110 /* render_action_update_attr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_update_attr.h; path = weex_core/Source/core/render/action/render_action_update_attr.h; sourceTree = "<group>"; };
-		8AD1DF8182EFE56D218EBD5EA4E0EF97 /* WXRuntimeTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRuntimeTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.h; sourceTree = "<group>"; };
-		8AE9B4EE933264ABE520CB3B92932BAF /* WXIndexedDBDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXIndexedDBDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.m; sourceTree = "<group>"; };
-		8BFF6D0044851BBEBF63E07F07B2E1C7 /* WeexSDK.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WeexSDK.xcconfig; sourceTree = "<group>"; };
-		8C0130C14A50D4692C4E274EF08841D6 /* demux.c */ = {isa = PBXFileReference; includeInIndex = 1; name = demux.c; path = src/demux/demux.c; sourceTree = "<group>"; };
-		8C7739A69CC077AE0B6B901957DD62CC /* WXResourceRequestHandlerDefaultImpl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXResourceRequestHandlerDefaultImpl.m; path = ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m; sourceTree = "<group>"; };
-		8C9A1F3EDFAF0689340501C383770EF3 /* EBWXModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBWXModule.h; path = weex/ios/Sources/EBWXModule.h; sourceTree = "<group>"; };
-		8CA11531934B9BD06D11DE5EAF6A121D /* WXFileSystemDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXFileSystemDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.h; sourceTree = "<group>"; };
-		8CA9F96A4926437C444BA77F69A6AA28 /* lossless_enc_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_sse41.c; path = src/dsp/lossless_enc_sse41.c; sourceTree = "<group>"; };
-		8D79C4BA4538A43EB1E6A559C598A59B /* WXDOMDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDOMDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.m; sourceTree = "<group>"; };
-		8DBD739CA64C715A3BE652FBECE2BF5B /* WXConsoleDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXConsoleDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.m; sourceTree = "<group>"; };
-		8E9ECE08F8A25E25C29C421943677E2E /* WXPonyDebugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPonyDebugger.h; path = sdk/WXDevTool/Source/PonyDebugger/WXPonyDebugger.h; sourceTree = "<group>"; };
-		8F29A64CFE29E3E7B8D20109A625E54C /* WXComponentFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXComponentFactory.h; path = ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h; sourceTree = "<group>"; };
-		8F415BC155783817AD5512E32AA6B963 /* WXMonitorHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXMonitorHandler.m; path = sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.m; sourceTree = "<group>"; };
-		8F5533891517C84476A79130AAD4310F /* render_performance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_performance.cpp; path = weex_core/Source/core/moniter/render_performance.cpp; sourceTree = "<group>"; };
-		8F7933A8703F3047330FAE9A708DA24B /* WXLocaleModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXLocaleModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.m; sourceTree = "<group>"; };
-		9006F0DE812C3B91A8083B4D0ADCC22A /* WXNetworkTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXNetworkTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.m; sourceTree = "<group>"; };
-		90C5DBB0813A4F204BFB94A0CBCF2282 /* WXWebGLDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXWebGLDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.m; sourceTree = "<group>"; };
-		90D4BE139634554B4E0531CBB6240B27 /* WXRecycleListLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecycleListLayout.h; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.h; sourceTree = "<group>"; };
-		910241109EF06A11871B0507F5C9294F /* quant_levels_dec_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_levels_dec_utils.c; path = src/utils/quant_levels_dec_utils.c; sourceTree = "<group>"; };
-		9126BB30A75A24D6C4DAAD56E2A8686B /* WXDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDeviceInfo.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.h; sourceTree = "<group>"; };
-		913087348EE1FDC7047EBE34EA75CAFC /* layout.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = layout.cpp; path = weex_core/Source/core/layout/layout.cpp; sourceTree = "<group>"; };
-		914A40C062CF53086591A28C517CC15D /* render_action_add_element.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_add_element.h; path = weex_core/Source/core/render/action/render_action_add_element.h; sourceTree = "<group>"; };
-		9184E6D24ADD5D568A33B6BD00105E0B /* WXErrorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXErrorView.m; path = ios/sdk/WeexSDK/Sources/View/WXErrorView.m; sourceTree = "<group>"; };
-		9220F44F45F24C3820021DDD296603DC /* render_action_layout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_layout.h; path = weex_core/Source/core/render/action/render_action_layout.h; sourceTree = "<group>"; };
-		92B741E0CEA8769DC71CBA7370970206 /* WXDOMTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDOMTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.h; sourceTree = "<group>"; };
-		92D447623A67C2C47B857F6161207499 /* WXJSFrameworkLoadDefaultImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXJSFrameworkLoadDefaultImpl.h; path = ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.h; sourceTree = "<group>"; };
-		92F658198A67759DF71A31AE1D2CAD5B /* WXDisplayQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDisplayQueue.m; path = ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.m; sourceTree = "<group>"; };
-		9328748E5529451B715F5D65D7D25711 /* anim_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; name = anim_decode.c; path = src/demux/anim_decode.c; sourceTree = "<group>"; };
-		9351E3B76D347E620F13B4A2B75A68BC /* WXNetworkDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNetworkDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.h; sourceTree = "<group>"; };
-		93648363D06CFE1E7BC2B021D1A758B3 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = "<group>"; };
-		93B810B9CA6B20B7D3E49102C3566067 /* WXPickerModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXPickerModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m; sourceTree = "<group>"; };
-		93C6428C9EB27AC7A6170769A2B3C3C4 /* WXRoundedRect.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXRoundedRect.mm; path = ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.mm; sourceTree = "<group>"; };
-		9423EEB5F8BEC4F671E16B5866EE2605 /* predictor_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = predictor_enc.c; path = src/enc/predictor_enc.c; sourceTree = "<group>"; };
-		947E260212405D8C7BCDEF8D809FBF01 /* WXConsoleDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXConsoleDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.h; sourceTree = "<group>"; };
-		949E2A17F0D596B7851B635C58E2BBD9 /* render_mask.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_mask.cpp; path = weex_core/Source/core/render/node/render_mask.cpp; sourceTree = "<group>"; };
-		94EAEF4D8E102460F9B2B21C9819DC99 /* WXRecycleListDataManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecycleListDataManager.h; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.h; sourceTree = "<group>"; };
-		94EE8131B38FA653CCC9ED66AA9BA821 /* WXWebSocketHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWebSocketHandler.h; path = ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h; sourceTree = "<group>"; };
-		94FCC868F465392DB1DFDF3FEAEDE609 /* EBExpression.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpression.h; path = core/ios/BindingX/EBExpression.h; sourceTree = "<group>"; };
-		956511B7F9635E0B6DE23683C80C4D40 /* EBUtility+WX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EBUtility+WX.h"; path = "weex/ios/Sources/EBUtility+WX.h"; sourceTree = "<group>"; };
-		958A726D00B974F20937DC74E3E5EB15 /* render_action_add_event.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_add_event.h; path = weex_core/Source/core/render/action/render_action_add_event.h; sourceTree = "<group>"; };
-		958CD59E242BBBF19CA80730DE7637E0 /* WXWebGLTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXWebGLTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.m; sourceTree = "<group>"; };
-		95D9CBD14543F4160C3C88FFA2B75EA1 /* render_action_remove_event.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_remove_event.h; path = weex_core/Source/core/render/action/render_action_remove_event.h; sourceTree = "<group>"; };
-		95E91DB3C84499130864E821FDED23A1 /* icu_utf.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = icu_utf.cpp; path = weex_core/Source/base/third_party/icu/icu_utf.cpp; sourceTree = "<group>"; };
-		96146728562E7111791D8137B2675569 /* WXWebSocketModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWebSocketModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h; sourceTree = "<group>"; };
-		9652677CE59D391A09DDE5BDC59B5054 /* BindingX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BindingX.h; path = core/ios/BindingX/BindingX.h; sourceTree = "<group>"; };
-		96815DF3D74FDD1A73EDF90EA2346397 /* render_action_render_success.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_render_success.h; path = weex_core/Source/core/render/action/render_action_render_success.h; sourceTree = "<group>"; };
-		96A4D9E5BE97D1A51D745336410DF427 /* WXExtendCallNativeProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXExtendCallNativeProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h; sourceTree = "<group>"; };
-		96D92129845E0F1D7E57912B1FB525BE /* core_environment.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = core_environment.cpp; path = weex_core/Source/core/config/core_environment.cpp; sourceTree = "<group>"; };
-		96F76270672742083C30E0147E662634 /* WXTimelineDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXTimelineDomainController.m; path = sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.m; sourceTree = "<group>"; };
-		9719A64BBA6034679641C3E1A3B2662F /* WXFileSystemDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXFileSystemDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.m; sourceTree = "<group>"; };
-		971DBE7D3D997A1E2DECC20C8C1BD99B /* WXCSSDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCSSDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.h; sourceTree = "<group>"; };
-		97C53DCBF2FA2B6D4EF61712638B4807 /* WXDOMTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDOMTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.m; sourceTree = "<group>"; };
-		97E19BC05EEC6921A366B70E29674210 /* WXRuleManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRuleManager.h; path = ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h; sourceTree = "<group>"; };
-		98014BA78AD357BF63EA957B30266405 /* NSObject+EBTuplePacker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+EBTuplePacker.h"; path = "core/ios/BindingX/NSObject+EBTuplePacker.h"; sourceTree = "<group>"; };
-		984D30B9661EFB03814689674C0F1DF0 /* WXDestroyProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDestroyProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h; sourceTree = "<group>"; };
-		99036C848CC8109F98D00CC8D377C3E4 /* WXWebSocketLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWebSocketLoader.h; path = ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h; sourceTree = "<group>"; };
-		991C92DB3BB454A126FC061BE4928202 /* render_text.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_text.h; path = weex_core/Source/core/render/node/render_text.h; sourceTree = "<group>"; };
-		9920F1218ECD79A8F43D70238B728E22 /* core_environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = core_environment.h; path = weex_core/Source/core/config/core_environment.h; sourceTree = "<group>"; };
-		9A67E094DD5612AC44175A43B54E20F4 /* WXInnerLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXInnerLayer.m; path = ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.m; sourceTree = "<group>"; };
-		9A68D8B268583C401B50CC8D34D20627 /* render_page_custom.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_page_custom.cpp; path = weex_core/Source/core/render/page/render_page_custom.cpp; sourceTree = "<group>"; };
-		9AA2DBE9145021C0FB3CAB52E047896F /* WXNavigatorModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXNavigatorModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.m; sourceTree = "<group>"; };
-		9B12E16DDB67DC5679BC73F3419ABAEA /* WXTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTransform.h; path = ios/sdk/WeexSDK/Sources/Component/WXTransform.h; sourceTree = "<group>"; };
-		9B33E706326DE99FB63BB83F6E4AA1BC /* WXDivComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDivComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h; sourceTree = "<group>"; };
-		9B3DE931B94804536D30BC4363F131CF /* WXDataRenderHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDataRenderHandler.h; path = ios/sdk/WeexSDK/Sources/Eagle/WXDataRenderHandler.h; sourceTree = "<group>"; };
-		9B3F8C4C2A5D953C48863959D51463FC /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = "<group>"; };
-		9B4820DF6004D336565FE516721F5145 /* WXConsoleLogModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXConsoleLogModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.m; sourceTree = "<group>"; };
-		9B824E049218590472D5D433496C8527 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = "<group>"; };
-		9B88E8CF7E1A0DC58DB6CA7DDC604765 /* alphai_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = alphai_dec.h; path = src/dec/alphai_dec.h; sourceTree = "<group>"; };
-		9BEF1DF714F80E9161909B07E1574EB6 /* WXStreamModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXStreamModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m; sourceTree = "<group>"; };
-		9C20F26304A6A127CA15A4C1265C2554 /* render_action_createbody.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_createbody.cpp; path = weex_core/Source/core/render/action/render_action_createbody.cpp; sourceTree = "<group>"; };
-		9C3D1BE6B14E09268D56C547DBB84DA8 /* SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRWebSocket.m; path = SocketRocket/SRWebSocket.m; sourceTree = "<group>"; };
-		9C592507F189366B3EFEC57B844E6A8A /* ATSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ATSDK.framework; sourceTree = "<group>"; };
-		9C5DAD2B178975D5A26898D63156E143 /* WXInvocationConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXInvocationConfig.m; path = ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.m; sourceTree = "<group>"; };
-		9C99E728A9A533C7A9A3BADA3C7028E0 /* picture_csp_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_csp_enc.c; path = src/enc/picture_csp_enc.c; sourceTree = "<group>"; };
-		9CD57D3CAD159090439CA5B63B3664A7 /* WXRecycleListUpdateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecycleListUpdateManager.h; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.h; sourceTree = "<group>"; };
-		9D2898C6193F603C6AACEA4442FE4395 /* WXDebugTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDebugTool.m; path = ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m; sourceTree = "<group>"; };
-		9D6B9F39211E0C0B8867D6BD4963432F /* EBGyroManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBGyroManager.m; path = core/ios/BindingX/EBGyroManager.m; sourceTree = "<group>"; };
-		9D73441412DDA375DACFB56F21E2BDEA /* WXTimerModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTimerModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h; sourceTree = "<group>"; };
-		9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
-		9D995A79A47903B892A041E5E146FA9B /* WXBoxShadow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXBoxShadow.m; path = ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m; sourceTree = "<group>"; };
-		9DDFEF42700DB9411482A18311825259 /* WXResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXResourceLoader.h; path = ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h; sourceTree = "<group>"; };
-		9DF84FEA3D66BD30E8484E90EF59AA53 /* lossless_enc_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_mips32.c; path = src/dsp/lossless_enc_mips32.c; sourceTree = "<group>"; };
-		9E2F4036A9CDA75EC6288ED53ED093D3 /* WXComponentMethod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXComponentMethod.h; path = ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h; sourceTree = "<group>"; };
-		9EA4AE6ED35CA252F4EE80D491DFC631 /* WXPageDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPageDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.h; sourceTree = "<group>"; };
-		9EE2EDFC147BE91EBF817196B3DFAF5A /* WeexPluginLoader.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WeexPluginLoader.framework; sourceTree = "<group>"; };
-		9F8DA25A9F79BE3039467408957F4C25 /* EBExpressionScroller.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpressionScroller.m; path = core/ios/BindingX/EBExpressionScroller.m; sourceTree = "<group>"; };
-		A031087EDC670D102A82210905E80B93 /* EBExpressionScroller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpressionScroller.h; path = core/ios/BindingX/EBExpressionScroller.h; sourceTree = "<group>"; };
-		A0CC2AEE31081738EE99D358A939174F /* WXMultiColumnLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXMultiColumnLayout.h; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h; sourceTree = "<group>"; };
-		A12ADDF77A1A1073EC96A49AF21B0E69 /* token_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = token_enc.c; path = src/enc/token_enc.c; sourceTree = "<group>"; };
-		A15268E8755E42EB4B47B48545FC948E /* WXMetaModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXMetaModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m; sourceTree = "<group>"; };
-		A17D97A8EF680933BEB20A55EBCDB545 /* WXNetworkTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNetworkTransaction.h; path = sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.h; sourceTree = "<group>"; };
-		A1948733429E2AF04316657331FDCF0C /* NSArray+WXRuntimePropertyDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+WXRuntimePropertyDescriptor.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.m"; sourceTree = "<group>"; };
-		A19D364451C8BD861FDA8D934BE970F7 /* thread_impl_posix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_impl_posix.h; path = weex_core/Source/base/thread/thread_impl_posix.h; sourceTree = "<group>"; };
-		A2159AFF7924B506CDCE0853E5AB19DC /* WXRecyclerComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecyclerComponent.h; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h; sourceTree = "<group>"; };
-		A25B42D92E289641AEDB2C67D8CB9D2D /* thread_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_utils.h; path = src/utils/thread_utils.h; sourceTree = "<group>"; };
-		A273340E8055EDA85267A141DF2590A8 /* time_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = time_utils.h; path = weex_core/Source/base/time_utils.h; sourceTree = "<group>"; };
-		A28723D57D339F9D3A947FEFFCE023DB /* WeexApiValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeexApiValue.h; path = weex_core/Source/include/WeexApiValue.h; sourceTree = "<group>"; };
-		A2A60BD35796611A22E43B08AC75AA0A /* WXPageTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPageTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXPageTypes.h; sourceTree = "<group>"; };
-		A2EB5D25AEDE6112177C16CCAD28319C /* measure_func_adapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = measure_func_adapter.h; path = weex_core/Source/core/layout/measure_func_adapter.h; sourceTree = "<group>"; };
-		A30702DA138A9877C000FE60574467FB /* mux_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mux_types.h; path = src/webp/mux_types.h; sourceTree = "<group>"; };
-		A352453B043304509C876BC299C8ABA7 /* WXComponent+BoxShadow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXComponent+BoxShadow.h"; path = "ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h"; sourceTree = "<group>"; };
-		A358FA10C32008617BF04A32A1AA002C /* WXJSASTParser.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXJSASTParser.mm; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.mm; sourceTree = "<group>"; };
-		A3A663BC59F85D47ED810F0A9A408479 /* WXComponent+BoxShadow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "WXComponent+BoxShadow.m"; path = "ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m"; sourceTree = "<group>"; };
-		A3A91119F00550C57297F84B49E8229B /* WXObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXObject.m; path = sdk/WXDevTool/Source/PonyDebugger/WXObject.m; sourceTree = "<group>"; };
-		A41CB486AE3549B29B34B304FC32FA80 /* render_action_remove_event.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_remove_event.cpp; path = weex_core/Source/core/render/action/render_action_remove_event.cpp; sourceTree = "<group>"; };
-		A439808F7F3C93FFD507E60E1F6E7220 /* WXSwitchComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSwitchComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h; sourceTree = "<group>"; };
-		A46438F5804B24DCA8AF2A73F9913DFD /* alpha_processing_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_sse41.c; path = src/dsp/alpha_processing_sse41.c; sourceTree = "<group>"; };
-		A47C816B3A51B5F8CB135DA314195BE3 /* WXTracingUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXTracingUtility.m; path = sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.m; sourceTree = "<group>"; };
-		A4925003CBAC621EBC5B06C8E2457060 /* WXModalUIModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXModalUIModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h; sourceTree = "<group>"; };
-		A4BDCA209EBCB888FDF3439D0CFBD6A8 /* WXTimelineTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXTimelineTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.m; sourceTree = "<group>"; };
-		A4EB4BC36A315A4E63A4D9946E41895D /* WXRootViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRootViewController.h; path = ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h; sourceTree = "<group>"; };
-		A517E435BFFAD4F09C0E9D78584D6A60 /* render_action_add_event.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_add_event.cpp; path = weex_core/Source/core/render/action/render_action_add_event.cpp; sourceTree = "<group>"; };
-		A51C7D884DDD1846281DB33F5D8141A8 /* yuv.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv.c; path = src/dsp/yuv.c; sourceTree = "<group>"; };
-		A56DEC368C1E3186C5C8C40A8F162AF9 /* WXLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXLayer.h; path = ios/sdk/WeexSDK/Sources/Display/WXLayer.h; sourceTree = "<group>"; };
-		A5D61D9560F4F2856520727041FE865D /* NSObject+WXRuntimePropertyDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+WXRuntimePropertyDescriptor.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.m"; sourceTree = "<group>"; };
-		A5FB0140015558AADD947FBF3CB774A6 /* WXWorkerDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXWorkerDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.m; sourceTree = "<group>"; };
-		A61733B726794B753DAACFBF03835C0C /* encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = encode.h; path = src/webp/encode.h; sourceTree = "<group>"; };
-		A632E8E0F72D6FD93DA49734D3BA64AE /* WXCSSDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXCSSDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.m; sourceTree = "<group>"; };
-		A68AFCCAF5ECBF5410FC92277629C15B /* libPods-WeexDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-WeexDemo.a"; path = "libPods-WeexDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-		A6A1D4447B4A075E04F3E22EF4D928A9 /* common_sse41.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_sse41.h; path = src/dsp/common_sse41.h; sourceTree = "<group>"; };
-		A6ACAC5EF5101105062510C89F7689EE /* WXSimulatorShortcutManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSimulatorShortcutManager.h; path = ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h; sourceTree = "<group>"; };
-		A72B404DBE085F468042537622F7FCD0 /* WXDisplayQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDisplayQueue.h; path = ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h; sourceTree = "<group>"; };
-		A76B1446ADA0C25DA2DAF1E5C05C4156 /* WXIndexedDBDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXIndexedDBDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.h; sourceTree = "<group>"; };
-		A81A0420E21740E4BE95EA1D36B09BC6 /* render_action_add_element.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_add_element.cpp; path = weex_core/Source/core/render/action/render_action_add_element.cpp; sourceTree = "<group>"; };
-		A839923E143BE3DAFA2215D8D27E6DCA /* render_page_base.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_page_base.cpp; path = weex_core/Source/core/render/page/render_page_base.cpp; sourceTree = "<group>"; };
-		A89404987BBCCC789E77910517E1D66F /* WXPolyfillSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXPolyfillSet.m; path = ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.m; sourceTree = "<group>"; };
-		A990D0124A773BC8F6B7E397CD5FE5A2 /* anim_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; name = anim_encode.c; path = src/mux/anim_encode.c; sourceTree = "<group>"; };
-		A9DDD124DF7FF41543F425D91516C84C /* WXNavigatorModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNavigatorModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h; sourceTree = "<group>"; };
-		A9F3BD312016B2B282FAE79B6731E3A9 /* upsampling.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling.c; path = src/dsp/upsampling.c; sourceTree = "<group>"; };
-		AA094D3EE31E09919B09949BAB42A9E2 /* WXTextInputComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTextInputComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h; sourceTree = "<group>"; };
-		AA2D40D1C287FC413460A6DC6CAE1DF6 /* dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dsp.h; path = src/dsp/dsp.h; sourceTree = "<group>"; };
-		AA48BD65765AB3262CF8F1F041978AAA /* NSObject+WXSwizzle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+WXSwizzle.h"; path = "ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h"; sourceTree = "<group>"; };
-		AA53005D89D769FC1FAC5550ED45A338 /* WXCoreBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXCoreBridge.mm; path = ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm; sourceTree = "<group>"; };
-		AA920997C56ED998FB1AD39A0AAAE2AB /* WXRecycleListDataManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRecycleListDataManager.m; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.m; sourceTree = "<group>"; };
-		AAC2B58D2ED1E9C4E26C6E4BF6256620 /* WXIndicatorComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXIndicatorComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h; sourceTree = "<group>"; };
-		AB0E14C7CCC671578E6F4B2177E05413 /* rescaler_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_sse2.c; path = src/dsp/rescaler_sse2.c; sourceTree = "<group>"; };
-		AB1E97BD0F962C7169D9394B629AB0EB /* lossless_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc.c; path = src/dsp/lossless_enc.c; sourceTree = "<group>"; };
-		AB853D150177896F688FBD07C1D69A87 /* WXBaseViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXBaseViewController.m; path = ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m; sourceTree = "<group>"; };
-		AB880092824C56A49D57901CD65E01AA /* WXJSCoreBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXJSCoreBridge.mm; path = ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.mm; sourceTree = "<group>"; };
-		AC27B5C7B2E50B9BD88D30451DF8CCFD /* EBGyroQuaternion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBGyroQuaternion.h; path = core/ios/BindingX/EBGyroQuaternion.h; sourceTree = "<group>"; };
-		ACDB284BD4EB7CF6272A62885F5D1141 /* WXLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXLog.m; path = ios/sdk/WeexSDK/Sources/Utility/WXLog.m; sourceTree = "<group>"; };
-		ACE5D93BA3D18BE1DECFAE0CB38FC57B /* WXThreadSafeCounter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXThreadSafeCounter.m; path = ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.m; sourceTree = "<group>"; };
-		AD3EC3FA3CC0FA804AA453A747BA913A /* WXVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXVersion.m; path = ios/sdk/WeexSDK/Sources/Utility/WXVersion.m; sourceTree = "<group>"; };
-		AE3F773AC8E98ED609737F7CA3D860B7 /* WXProfilerDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXProfilerDomainController.h; path = sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.h; sourceTree = "<group>"; };
-		AE893D9B08F8A9E199262EC936028DC4 /* render_action_update_style.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_update_style.cpp; path = weex_core/Source/core/render/action/render_action_update_style.cpp; sourceTree = "<group>"; };
-		AED2463A704B22A8963535845DFBEB5A /* render_action_render_success.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_render_success.cpp; path = weex_core/Source/core/render/action/render_action_render_success.cpp; sourceTree = "<group>"; };
-		AEE24A8BBA085CBA10F75B100F7FF843 /* JSValue+Weex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "JSValue+Weex.m"; path = "ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m"; sourceTree = "<group>"; };
-		AEE5B062F503E710A7B0FF9D574B5C6E /* WXWebComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWebComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h; sourceTree = "<group>"; };
-		AF077A2262A5757FF623B0061E863CB8 /* WXCellComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCellComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h; sourceTree = "<group>"; };
-		AF5155B83910440F59E0CB6066E295BA /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = "<group>"; };
-		B00F53DFC9DA3291512DFE28AE03ECEB /* quant_levels_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant_levels_utils.h; path = src/utils/quant_levels_utils.h; sourceTree = "<group>"; };
-		B049E5DA3F941676044E86BC77B5AC31 /* webp_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = webp_dec.c; path = src/dec/webp_dec.c; sourceTree = "<group>"; };
-		B0635850016E4E9C3932F2B0B0AEBDD6 /* JsonPage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JsonPage.h; path = weex_core/Source/core/json/JsonPage.h; sourceTree = "<group>"; };
-		B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSDWebImage.a; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		B0B3E6C399D6E2508EDACB8FAD79102B /* render_creator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_creator.cpp; path = weex_core/Source/core/render/node/factory/render_creator.cpp; sourceTree = "<group>"; };
-		B1C9B1188852DEF5FD73FB3C2D97FF91 /* WXConsoleDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXConsoleDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.h; sourceTree = "<group>"; };
-		B207BF0B920F8A417A964B7044E8D487 /* WXLoadingComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXLoadingComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h; sourceTree = "<group>"; };
-		B207F58F49115B0D64EE51B7472C0083 /* common_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_dec.h; path = src/dec/common_dec.h; sourceTree = "<group>"; };
-		B35E93F4D19FD5C8479530DD853CDD95 /* WXSwitchComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXSwitchComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.mm; sourceTree = "<group>"; };
-		B3DCB9DA8798A677CA18FE8D5C6D4DDE /* UIImage+WebP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+WebP.h"; path = "SDWebImage/UIImage+WebP.h"; sourceTree = "<group>"; };
-		B44B3F4193FEB7E6F67EB8680C946F64 /* WXInspectorDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXInspectorDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.h; sourceTree = "<group>"; };
-		B4759F17AA60ABAB93B88CA8C6BAE732 /* cost_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cost_enc.h; path = src/enc/cost_enc.h; sourceTree = "<group>"; };
-		B4A8C434F488BCC61C1AFD9B9FC42EC1 /* WXRecycleListUpdateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRecycleListUpdateManager.m; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.m; sourceTree = "<group>"; };
-		B4FB2F3507912F2188496E2475A11872 /* wson_parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = wson_parser.h; path = weex_core/Source/wson/wson_parser.h; sourceTree = "<group>"; };
-		B55F1BFF85B6FE690D9EBDB59F96C0A7 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = "<group>"; };
-		B56671D897B7FA4F803F39A15C3A588E /* WXPageDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPageDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXPageDomain.h; sourceTree = "<group>"; };
-		B5C863D501296F7912451AC3C2709AEC /* WXProfilerDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXProfilerDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.h; sourceTree = "<group>"; };
-		B689BD8AE3708DCCD131727DA071B716 /* WXModuleFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXModuleFactory.h; path = ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h; sourceTree = "<group>"; };
-		B6D1F6F14EA65C02A6EC32D0D25B897B /* WXResourceRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXResourceRequest.h; path = ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h; sourceTree = "<group>"; };
-		B6F763DB20BC04926C65A88D5A97E9C4 /* WXDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDeviceInfo.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.m; sourceTree = "<group>"; };
-		B74CE6DCD03AA3AF30EB1EC801345020 /* WXComponent+Layout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXComponent+Layout.h"; path = "ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h"; sourceTree = "<group>"; };
-		B79513821BB1C921F6085D5A98232454 /* WXPrettyStringPrinter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXPrettyStringPrinter.m; path = sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.m; sourceTree = "<group>"; };
-		B7ECFD2AC9010595D8CC478DA02AEE04 /* core_constants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = core_constants.h; path = weex_core/Source/base/core_constants.h; sourceTree = "<group>"; };
-		B7EE3F4C6D936F9C7BCEE307BEB75CE3 /* platform_bridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = platform_bridge.h; path = weex_core/Source/core/bridge/platform_bridge.h; sourceTree = "<group>"; };
-		B850A513DFCEFBB0441052B1C32D25E8 /* WXThreadSafeMutableArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXThreadSafeMutableArray.h; path = ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h; sourceTree = "<group>"; };
-		B85CC15E1C2E75081EBCF38BBEACC5BA /* NSDate+WX_JSONObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+WX_JSONObject.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.m"; sourceTree = "<group>"; };
-		B8BF7BC74BF3394A6BAD14840EC0ED10 /* WXVoiceOverModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXVoiceOverModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.h; sourceTree = "<group>"; };
-		B9044645E709FACB3D37D45F0519466A /* WXConsoleTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXConsoleTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.m; sourceTree = "<group>"; };
-		B949D2AE94ED94A64F54C3D7A0A455C6 /* thread_impl_darwin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_impl_darwin.h; path = weex_core/Source/base/thread/thread_impl_darwin.h; sourceTree = "<group>"; };
-		B954548ACCEB1BD207CEFDCDF5C7FFBD /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = "<group>"; };
-		B9A23E64562C87CEB29C2E80F5DD6D5B /* WXCSSDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCSSDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.h; sourceTree = "<group>"; };
-		B9C83629BB33C9B41F69D35A75741B0F /* WXIndicatorComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXIndicatorComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.m; sourceTree = "<group>"; };
-		BA453A56E81CD445DBBB1B384BDD205D /* alpha_processing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing.c; path = src/dsp/alpha_processing.c; sourceTree = "<group>"; };
-		BA4E8B4BA0C71EE59F8274794E616391 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = "<group>"; };
-		BACC744DD7646ABD72A785C27CB2C128 /* JsonPage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = JsonPage.cpp; path = weex_core/Source/core/json/JsonPage.cpp; sourceTree = "<group>"; };
-		BBFBCD5918E867F40E2055561B1BF4CA /* WXAComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXAComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXAComponent.h; sourceTree = "<group>"; };
-		BC3D1BA97F230F382845F4539973E4E4 /* filters_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_utils.c; path = src/utils/filters_utils.c; sourceTree = "<group>"; };
-		BCD96AD89D58184127327076CD9BF4E6 /* weex_core_manager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = weex_core_manager.h; path = weex_core/Source/core/manager/weex_core_manager.h; sourceTree = "<group>"; };
-		BD0479CA7C6330BEF1A6300A9D01C0A2 /* thread_impl_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = thread_impl_posix.cc; path = weex_core/Source/base/thread/thread_impl_posix.cc; sourceTree = "<group>"; };
-		BD093F56BE964A8F387425D47F9C4A32 /* WXImgLoaderProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXImgLoaderProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h; sourceTree = "<group>"; };
-		BD247748D4AD18D571015167F4556B0A /* Pods-WeexDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-WeexDemo.debug.xcconfig"; sourceTree = "<group>"; };
-		BD79F4C6BEAD090B284A3783C0DF729B /* view_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = view_utils.h; path = weex_core/Source/core/common/view_utils.h; sourceTree = "<group>"; };
-		BE79D01A8CE8A44313D53E0BB81BBF14 /* WXThreadSafeMutableArray.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXThreadSafeMutableArray.m; path = ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.m; sourceTree = "<group>"; };
-		BEAB0E045C95BC3D42ED5D3630643183 /* WXImageComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXImageComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h; sourceTree = "<group>"; };
-		BEB8DE8AA1603764C252C52EFEE1CD42 /* time_unit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = time_unit.h; path = weex_core/Source/base/time_unit.h; sourceTree = "<group>"; };
-		BEC5318C90EF6DA5AC6A751E5CD24BF0 /* EBExpressionExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpressionExecutor.m; path = core/ios/BindingX/EBExpressionExecutor.m; sourceTree = "<group>"; };
-		BEF4DD0F8F24C9705A7DA35A66F10C40 /* WXNetworkDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXNetworkDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.m; sourceTree = "<group>"; };
-		BEF5702D8920ECA75E4470937976190C /* EBGyroQuaternion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBGyroQuaternion.m; path = core/ios/BindingX/EBGyroQuaternion.m; sourceTree = "<group>"; };
-		BF4E60480393C1216AB259C86C5CAA24 /* alpha_processing_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_neon.c; path = src/dsp/alpha_processing_neon.c; sourceTree = "<group>"; };
-		C076496B0EE3F809DF270B3061DED99B /* WXSourceDebuggerDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXSourceDebuggerDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.m; sourceTree = "<group>"; };
-		C09BDEBB68F0003C566749B5F51B685C /* lossless.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless.c; path = src/dsp/lossless.c; sourceTree = "<group>"; };
-		C13C84BA0CF7603990D293DCA2F68C64 /* native-bundle-main.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "native-bundle-main.js"; path = "pre-build/native-bundle-main.js"; sourceTree = "<group>"; };
-		C1DDF30C44A536788353D98FF53ABC3E /* WXDOMDebuggerDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDOMDebuggerDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.m; sourceTree = "<group>"; };
-		C2473D9C2F03BB33BC7E5DC289E4B0C0 /* WXDiffUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDiffUtil.m; path = ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.m; sourceTree = "<group>"; };
-		C276466BBB783E7F49667DE5E38840AD /* WXRootView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRootView.m; path = ios/sdk/WeexSDK/Sources/View/WXRootView.m; sourceTree = "<group>"; };
-		C2C514C61C1E2D317F737D4B8A2FB6DA /* enc_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_sse41.c; path = src/dsp/enc_sse41.c; sourceTree = "<group>"; };
-		C326AA3AA08F6A1905CA19549554B949 /* WXDebuggerDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDebuggerDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.m; sourceTree = "<group>"; };
-		C332AE7670B0650B31A2C2B5DF41E6D1 /* wx_load_error@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "wx_load_error@3x.png"; path = "ios/sdk/WeexSDK/Resources/wx_load_error@3x.png"; sourceTree = "<group>"; };
-		C39A86D6E5FB933BB697756A876EC226 /* Pods-WeexUITestDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-WeexUITestDemo-acknowledgements.plist"; sourceTree = "<group>"; };
-		C3A23AEBEA52A6A1803672BE58162E75 /* cost_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_mips32.c; path = src/dsp/cost_mips32.c; sourceTree = "<group>"; };
-		C3D4D07F2CE4CC3DE205DDAFE6E91E1B /* WXURLRewriteProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXURLRewriteProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h; sourceTree = "<group>"; };
-		C4AF39426CF128D7BED382941B1DFC72 /* message_pump.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = message_pump.h; path = weex_core/Source/base/message_loop/message_pump.h; sourceTree = "<group>"; };
-		C4E644868A49CA9A1BE59C8A24E8D23A /* WXNetworkDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNetworkDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.h; sourceTree = "<group>"; };
-		C50D5BC7C8B5D39FDFDD5AEB9956EBE6 /* quant_levels_dec_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant_levels_dec_utils.h; path = src/utils/quant_levels_dec_utils.h; sourceTree = "<group>"; };
-		C53B2CFE28EB177DB2AA4E4BEF3C1FC0 /* WXPickerModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPickerModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h; sourceTree = "<group>"; };
-		C581AE14D2EC657A0AB9C2489A6D8C72 /* simple_render_factory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = simple_render_factory.h; path = weex_core/Source/core/render/node/factory/simple_render_factory.h; sourceTree = "<group>"; };
-		C59AE1F6C3CF3BEA4A662DEB7DAB6CEB /* WXApplicationCacheDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXApplicationCacheDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.m; sourceTree = "<group>"; };
-		C5F331A2A2C78473C1AEF149A95C95E1 /* WXVideoComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXVideoComponent.m; path = ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.m; sourceTree = "<group>"; };
-		C6A3B98FF4E33ADF85E34108216C1CB0 /* thread_local.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_local.h; path = weex_core/Source/base/thread/thread_local.h; sourceTree = "<group>"; };
-		C6DA6B9B49ED77F945DAD1352B790172 /* rescaler.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler.c; path = src/dsp/rescaler.c; sourceTree = "<group>"; };
-		C702BE05EB93EE2C6E98210A896EEC10 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = "<group>"; };
-		C720C9030D814C35BA0CEB180D23EA9A /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = "<group>"; };
-		C72258F037CCB7145673CF6935D32136 /* WXCycleSliderComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXCycleSliderComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm; sourceTree = "<group>"; };
-		C77E708A92C07D9210E4C2C27FFDCBE9 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = "<group>"; };
-		C783A799EBA4357E0C8DB8283223378C /* render_scroller_factory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_scroller_factory.h; path = weex_core/Source/core/render/node/factory/render_scroller_factory.h; sourceTree = "<group>"; };
-		C855546EF5292369448E003FBF2C7C38 /* WXBridgeManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXBridgeManager.h; path = ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h; sourceTree = "<group>"; };
-		C9328B287F546FF4D3FB0CF5A6CEA647 /* WXIndexedDBDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXIndexedDBDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.m; sourceTree = "<group>"; };
-		C97C2D8D694C42318D0EA1762173E8AE /* WeexPluginLoader.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WeexPluginLoader.xcconfig; sourceTree = "<group>"; };
-		C99222E5BC9EE32C377E1A4B83EB1D09 /* EBNativeFunction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBNativeFunction.m; path = core/ios/BindingX/EBNativeFunction.m; sourceTree = "<group>"; };
-		C9926682814FF1E15A9B7D65B7B4D92B /* cost_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_enc.c; path = src/enc/cost_enc.c; sourceTree = "<group>"; };
-		C9CBD05805196749E2544F9B23E59926 /* render_action_appendtree_createfinish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_appendtree_createfinish.h; path = weex_core/Source/core/render/action/render_action_appendtree_createfinish.h; sourceTree = "<group>"; };
-		C9D3EA58EB020CF8A276B297A5100AD7 /* Pods-WeexDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-WeexDemo-acknowledgements.markdown"; sourceTree = "<group>"; };
-		C9E8CC83B908885EB00252703EC36034 /* WXCallJSMethod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCallJSMethod.h; path = ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h; sourceTree = "<group>"; };
-		C9F93FC17408203481FC4D176CC5C5F1 /* WXResourceRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXResourceRequest.m; path = ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.m; sourceTree = "<group>"; };
-		CA044BA802990D423C23FC0F1D99B143 /* libwebp-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libwebp-prefix.pch"; sourceTree = "<group>"; };
-		CA059172C822CF234B1D58669067F27E /* WXRecyclerDataController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRecyclerDataController.m; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.m; sourceTree = "<group>"; };
-		CA9681FE7EED152E1E979ADC3F4A17D1 /* WXSDKInstance_performance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSDKInstance_performance.h; path = ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.h; sourceTree = "<group>"; };
-		CABBA49D769F9587D63BED2FB7133BE5 /* weex-polyfill.js */ = {isa = PBXFileReference; includeInIndex = 1; name = "weex-polyfill.js"; path = "pre-build/weex-polyfill.js"; sourceTree = "<group>"; };
-		CAE03B7529752B427262D1DD1336C37D /* EBJSMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBJSMath.h; path = core/ios/BindingX/EBJSMath.h; sourceTree = "<group>"; };
-		CB090A36501501F36AD1686434685345 /* WXPrerenderManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXPrerenderManager.m; path = ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m; sourceTree = "<group>"; };
-		CB5F42FB40D084DDCA4EC8473056628A /* WXDisplayLinkManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDisplayLinkManager.h; path = ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.h; sourceTree = "<group>"; };
-		CB96A68E717337BDF1B92082C17F10D3 /* SocketRocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SocketRocket-dummy.m"; sourceTree = "<group>"; };
-		CB9FA4227005707427A3C9605385814A /* WXRuntimeDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRuntimeDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.h; sourceTree = "<group>"; };
-		CBC905A73127DD779E320EB1AF2EDCC7 /* JSContext+Weex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "JSContext+Weex.h"; path = "ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.h"; sourceTree = "<group>"; };
-		CBCEB17304D416691ED412FBCEC49975 /* WXDebuggerTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDebuggerTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.m; sourceTree = "<group>"; };
-		CBF43E904506DADD3C3D93485EB105A2 /* upsampling_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_sse41.c; path = src/dsp/upsampling_sse41.c; sourceTree = "<group>"; };
-		CC3194BA7EEB2B576E0C0ED609DEFC10 /* WXCSSTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCSSTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.h; sourceTree = "<group>"; };
-		CC67579B661BBC035F57C4593171B2DD /* core_side_in_platform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = core_side_in_platform.h; path = weex_core/Source/core/bridge/platform/core_side_in_platform.h; sourceTree = "<group>"; };
-		CCFE3476D208C1F1968FE51983C5F0AC /* JSContext+Weex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "JSContext+Weex.m"; path = "ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.m"; sourceTree = "<group>"; };
-		CD06E9D60922F55E106442C930FA14CD /* WXJSExceptionInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXJSExceptionInfo.h; path = ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h; sourceTree = "<group>"; };
-		CD95057CCD39CC7E5DEC23AF77F19D52 /* EBGyroOrientationEvaluator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBGyroOrientationEvaluator.m; path = core/ios/BindingX/EBGyroOrientationEvaluator.m; sourceTree = "<group>"; };
-		CDAD20EE1E53587BC603DD93C1099E07 /* quant_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_enc.c; path = src/enc/quant_enc.c; sourceTree = "<group>"; };
-		CDCB3E286F4634541246076D8CF97182 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = "<group>"; };
-		CECDE40D43D3099CECE5C8C556FB9C94 /* NSDictionary+WXRuntimePropertyDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+WXRuntimePropertyDescriptor.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.m"; sourceTree = "<group>"; };
-		CEF7F548A8F8601D656DAEDBEBC4BA16 /* NSDate+WXDebugger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+WXDebugger.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.m"; sourceTree = "<group>"; };
-		CF114F13F53C9C80D66E3789184F2751 /* libWXDevtool.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libWXDevtool.a; path = libWXDevtool.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		CFB666791566E44EF3D842F562575807 /* WXAnimationModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXAnimationModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h; sourceTree = "<group>"; };
-		D0656D856A2A8E59AF4CD4859516B22D /* WXNetworkRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXNetworkRecorder.m; path = sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.m; sourceTree = "<group>"; };
-		D08D3EA5D6154DF1CE9F24E97900709D /* WXResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXResources.m; path = sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.m; sourceTree = "<group>"; };
-		D0A39EE2393BA3436B4D984D97563A05 /* WXSDKEngine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXSDKEngine.m; path = ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m; sourceTree = "<group>"; };
-		D13D1E60A8F808FA4029AE256ECD43D0 /* WXTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTransition.h; path = ios/sdk/WeexSDK/Sources/Module/WXTransition.h; sourceTree = "<group>"; };
-		D15A6AB05FD9FBE0207D318BD99EC99B /* WXDebuggerDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDebuggerDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.h; sourceTree = "<group>"; };
-		D1A2BCA1F77501B181876E43A67EE18E /* WXSDKInstance_performance.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXSDKInstance_performance.m; path = ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.m; sourceTree = "<group>"; };
-		D1CE3579CE43DD6EFA87DAA975A2B423 /* EBExpressionProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBExpressionProperty.m; path = core/ios/BindingX/EBExpressionProperty.m; sourceTree = "<group>"; };
-		D1D501740C0C19057BF31411878F8384 /* WXWorkerDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWorkerDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.h; sourceTree = "<group>"; };
-		D219BEC5F1566DF319D1947A5D472330 /* WXErrorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXErrorView.h; path = ios/sdk/WeexSDK/Sources/View/WXErrorView.h; sourceTree = "<group>"; };
-		D25C4F77CA22D450FEFB386350C31235 /* WXConvertUtility.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXConvertUtility.mm; path = ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.mm; sourceTree = "<group>"; };
-		D2D81C7A85862C23E40FA6DDB82E336E /* core_side_in_script.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = core_side_in_script.h; path = weex_core/Source/core/bridge/script/core_side_in_script.h; sourceTree = "<group>"; };
-		D2F658EA57C0897126F3E2CB67E13CA4 /* quant_levels_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_levels_utils.c; path = src/utils/quant_levels_utils.c; sourceTree = "<group>"; };
-		D39550D554AC475F13E3C088022FA054 /* ssim_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = ssim_sse2.c; path = src/dsp/ssim_sse2.c; sourceTree = "<group>"; };
-		D3C1D47E23D40EC5F0276FAFAEA23C30 /* EBJSEase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBJSEase.h; path = core/ios/BindingX/EBJSEase.h; sourceTree = "<group>"; };
-		D3E806FFC70E778A996A8A337CA93916 /* utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = utils.h; path = src/utils/utils.h; sourceTree = "<group>"; };
-		D44562C25CCC664C2E43A6D1402B24E8 /* WXRecyclerComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXRecyclerComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.mm; sourceTree = "<group>"; };
-		D47CDADFF153F5E0BF4855B2E85CFB17 /* WXSDKManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSDKManager.h; path = ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h; sourceTree = "<group>"; };
-		D510A7D07FB93CAAEAE8BD348F2C5DAF /* BindingX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BindingX.xcconfig; sourceTree = "<group>"; };
-		D512893F36484D5F1D5044B5AF4D6F75 /* lossless_enc_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_msa.c; path = src/dsp/lossless_enc_msa.c; sourceTree = "<group>"; };
-		D51CC840319C797AB5FD7FFB7C300B76 /* yuv_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_neon.c; path = src/dsp/yuv_neon.c; sourceTree = "<group>"; };
-		D595196ECD8B1C51AD0563AE6DFD2E6B /* WXNetworkTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXNetworkTransaction.m; path = sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.m; sourceTree = "<group>"; };
-		D5A29E575740EFCD7E1F27029E58ECFA /* render_text.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_text.cpp; path = weex_core/Source/core/render/node/render_text.cpp; sourceTree = "<group>"; };
-		D5C58434E29780929AF6A0CAA8A7B7FB /* WXSectionDataController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSectionDataController.h; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.h; sourceTree = "<group>"; };
-		D69EBCD5357D23E1A92F315255C0438D /* EBExpressionHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpressionHandler.h; path = core/ios/BindingX/EBExpressionHandler.h; sourceTree = "<group>"; };
-		D6B64F41C0C1043EB45370CC555B7405 /* WXMetaModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXMetaModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h; sourceTree = "<group>"; };
-		D768533A6E5519163DD8531E35723F8D /* WXSectionDataController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXSectionDataController.m; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.m; sourceTree = "<group>"; };
-		D76B25A6E743F9EF66321AB299AD429B /* WXRuleManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRuleManager.m; path = ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m; sourceTree = "<group>"; };
-		D77CDE27E38378FFBE513F12AA634272 /* lossless_enc_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_sse2.c; path = src/dsp/lossless_enc_sse2.c; sourceTree = "<group>"; };
-		D7BEE88703122BADFCDE876F91B19DD0 /* WXListComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXListComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXListComponent.h; sourceTree = "<group>"; };
-		D95D5A5EB844080A48D53A7D7C208A04 /* WXDOMDebuggerDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDOMDebuggerDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.h; sourceTree = "<group>"; };
-		D9C2316D06512708906F7AD219359C77 /* WXIndexedDBDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXIndexedDBDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.h; sourceTree = "<group>"; };
-		D9C92B59DD89DF38CF395EA558E089E9 /* NSTimer+Weex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSTimer+Weex.m"; path = "ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.m"; sourceTree = "<group>"; };
-		DA22E8B354307DE67607B627B11C61C6 /* WXBridgeContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXBridgeContext.m; path = ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m; sourceTree = "<group>"; };
-		DA2E916E84F581BD243A4496CEE25C8B /* ssim.c */ = {isa = PBXFileReference; includeInIndex = 1; name = ssim.c; path = src/dsp/ssim.c; sourceTree = "<group>"; };
-		DA320FFC9D173CE46C59D11405D27738 /* render_action_trigger_vsync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_action_trigger_vsync.cpp; path = weex_core/Source/core/render/action/render_action_trigger_vsync.cpp; sourceTree = "<group>"; };
-		DA6F718B120A7B108A29930B217273D5 /* WXClipboardModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXClipboardModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h; sourceTree = "<group>"; };
-		DAC4E1B1F1E2F1C17C2836AA9B7EF223 /* WXServiceFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXServiceFactory.h; path = ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h; sourceTree = "<group>"; };
-		DACC4A78059A5CB50C255D5DACA56753 /* NSData+WXDebugger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+WXDebugger.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.m"; sourceTree = "<group>"; };
-		DB0CD6E027D0E420AA7262D09024E7D6 /* WXRecycleListComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXRecycleListComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.mm; sourceTree = "<group>"; };
-		DB2E1B35A59CFE89F72AFEE3FBA4A652 /* WXTextComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXTextComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm; sourceTree = "<group>"; };
-		DB66EDB88715CD1EFE2C0012452C37E8 /* WXLength.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXLength.m; path = ios/sdk/WeexSDK/Sources/Utility/WXLength.m; sourceTree = "<group>"; };
-		DB6CDC9C331DE89FFF3C8B95D3B8909D /* WXBridgeMethod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXBridgeMethod.h; path = ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h; sourceTree = "<group>"; };
-		DC193672FBD0D56FFB1E4E6C50F535BB /* vp8li_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8li_enc.h; path = src/enc/vp8li_enc.h; sourceTree = "<group>"; };
-		DCEEB6025C9DEE93EFFD35C04EC3BC45 /* vp8_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8_dec.c; path = src/dec/vp8_dec.c; sourceTree = "<group>"; };
-		DD0483310224B3C72C8A35173E13AC3B /* WXMemoryDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXMemoryDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.h; sourceTree = "<group>"; };
-		DD1A2C56D6802C0F770DE2760E972FD0 /* WXLoadingIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXLoadingIndicator.h; path = ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h; sourceTree = "<group>"; };
-		DDAB11B4F4ED1EA19C1925832E1C5DA5 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = "<group>"; };
-		DDD5A6ABEF7ADAFD9FDC205F4B9C55BE /* dec_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_sse41.c; path = src/dsp/dec_sse41.c; sourceTree = "<group>"; };
-		DE43062A63113606A7D0C0B260010D18 /* EBJSEase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBJSEase.m; path = core/ios/BindingX/EBJSEase.m; sourceTree = "<group>"; };
-		DE840DC09B9AA076A563FE7E62CA818B /* WXDevtool-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "WXDevtool-dummy.m"; sourceTree = "<group>"; };
-		DED0157F2880BD8D81D53E0CFF9AE445 /* WXTextAreaComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTextAreaComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h; sourceTree = "<group>"; };
-		DEDB705BCE8A5C13C75CD7CAD99552FB /* WXResourceResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXResourceResponse.m; path = ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.m; sourceTree = "<group>"; };
-		DF2C9E0CAD5DB2E23BD745FDD0C27131 /* WXCanvasComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCanvasComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h; sourceTree = "<group>"; };
-		DF8284E51BBAFB0B94EF8B6077A763D4 /* WXBridgeManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXBridgeManager.m; path = ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m; sourceTree = "<group>"; };
-		DFF336E9135B6D736DE5B404F0A58B17 /* muxread.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxread.c; path = src/mux/muxread.c; sourceTree = "<group>"; };
-		DFF448856886FE98D228409E81BA1F90 /* syntax_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = syntax_enc.c; path = src/enc/syntax_enc.c; sourceTree = "<group>"; };
-		E008E08878C27C01CC3DB44704C7C446 /* Pods-WeexDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-WeexDemo.release.xcconfig"; sourceTree = "<group>"; };
-		E03C5C96072819B690D558C11A414DF9 /* render_target.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_target.h; path = weex_core/Source/core/render/target/render_target.h; sourceTree = "<group>"; };
-		E08C9D61FFF5FDB2001486391B334B63 /* thread_impl_darwin.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = thread_impl_darwin.cc; path = weex_core/Source/base/thread/thread_impl_darwin.cc; sourceTree = "<group>"; };
-		E0AD0B2D0CD2ABF1F9E3192059A16E56 /* WXNetworkRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNetworkRecorder.h; path = sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.h; sourceTree = "<group>"; };
-		E1396A1386418E412485AE90D8F50A59 /* WXSourceDebuggerDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSourceDebuggerDomainController.h; path = sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.h; sourceTree = "<group>"; };
-		E140E026D95007B0B7214C0A5C2D4993 /* filter_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filter_enc.c; path = src/enc/filter_enc.c; sourceTree = "<group>"; };
-		E1588BD2BD00D730FA92B51B9C55F5C8 /* WXAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXAssert.h; path = ios/sdk/WeexSDK/Sources/Utility/WXAssert.h; sourceTree = "<group>"; };
-		E19A89559B2D5707F54BB69B9D5FA71F /* WXRecyclerUpdateController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecyclerUpdateController.h; path = ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h; sourceTree = "<group>"; };
-		E1D96880A5828F17A209085D4AD1BAC4 /* WXDebugTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDebugTool.h; path = ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h; sourceTree = "<group>"; };
-		E265588009E7FF2C6201A5B244A3FF27 /* EBTaffyTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBTaffyTuple.m; path = core/ios/BindingX/EBTaffyTuple.m; sourceTree = "<group>"; };
-		E2D2FE19F4BD4D8A8A4A29D3270A400E /* yuv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = yuv.h; path = src/dsp/yuv.h; sourceTree = "<group>"; };
-		E2EC823A9B99B58F35F1F1DF989DAB76 /* Pods-WeexUITestDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-WeexUITestDemo-acknowledgements.markdown"; sourceTree = "<group>"; };
-		E31DD62C0A393DADB3975791FF6AA229 /* rescaler_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_utils.c; path = src/utils/rescaler_utils.c; sourceTree = "<group>"; };
-		E32BF149530BB17C5E16D1980F3119F0 /* WXBridgeMethod.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXBridgeMethod.m; path = ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m; sourceTree = "<group>"; };
-		E365D88674D21919E5C129FF9E6DB349 /* WXConfigCenterProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXConfigCenterProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXConfigCenterProtocol.h; sourceTree = "<group>"; };
-		E3A7B60A1F25A1BFC53492A51FA84BE5 /* WXDOMStorageDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDOMStorageDomain.h; path = sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.h; sourceTree = "<group>"; };
-		E417CC999C245BF9B710AA5CEB253761 /* NSTimer+Weex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSTimer+Weex.h"; path = "ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h"; sourceTree = "<group>"; };
-		E450405103313E93765BE41F83B0C7EB /* render_action_move_element.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_move_element.h; path = weex_core/Source/core/render/action/render_action_move_element.h; sourceTree = "<group>"; };
-		E46C77BC5D6E310D06CF53DA8165DA29 /* WXTextComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTextComponent.h; path = ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h; sourceTree = "<group>"; };
-		E50E2DE5F6E4A7A22B6192EEAC35F56E /* rescaler_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = rescaler_utils.h; path = src/utils/rescaler_utils.h; sourceTree = "<group>"; };
-		E522D6ED23CECF32E263D482D9A89038 /* WXDebugDomainController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDebugDomainController.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.m; sourceTree = "<group>"; };
-		E54504CF8E8DE89E0E62952969EA78E2 /* wson.c */ = {isa = PBXFileReference; includeInIndex = 1; name = wson.c; path = weex_core/Source/wson/wson.c; sourceTree = "<group>"; };
-		E5697E5203985BC2D1A9EAE2A4309E3A /* JsonRenderManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JsonRenderManager.h; path = weex_core/Source/core/json/JsonRenderManager.h; sourceTree = "<group>"; };
-		E57FCABE882A305192E25CF3C8722B18 /* WXCellComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXCellComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXCellComponent.mm; sourceTree = "<group>"; };
-		E5C63F277A54A171CBD3F13892ED6282 /* render_performance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_performance.h; path = weex_core/Source/core/moniter/render_performance.h; sourceTree = "<group>"; };
-		E648C0012226B29A77BD9C7E4875A287 /* WXWebViewModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXWebViewModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h; sourceTree = "<group>"; };
-		E6A5CC47E20CB055B8A835F901DE00EE /* NSDate+WX_JSONObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+WX_JSONObject.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.h"; sourceTree = "<group>"; };
-		E6AE5A55769F17982E188ABE6A4EDBA7 /* SocketRocket.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.xcconfig; sourceTree = "<group>"; };
-		E70FF581CD4D1EEA2B70A725379CF31A /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = "<group>"; };
-		E72931779D644121C2B1D00495012790 /* WXSDKEngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXSDKEngine.h; path = ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h; sourceTree = "<group>"; };
-		E76D6895E6BDB4D969177BF71EF59ED4 /* EBBindData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EBBindData.m; path = core/ios/BindingX/EBBindData.m; sourceTree = "<group>"; };
-		E86587966ACF3EA9FBE3D7DFC0F66A42 /* WXPrerenderManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPrerenderManager.h; path = ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h; sourceTree = "<group>"; };
-		E86809DCD0E6E25DCDC28026B62B28D9 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = "<group>"; };
-		E8694E24F8F5B3D0AC35493D40EB95C8 /* WXPageDomainUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXPageDomainUtility.h; path = sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.h; sourceTree = "<group>"; };
-		E88E719DF07BE85FFDBDF9C2390C317C /* render_factory_interface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_factory_interface.h; path = weex_core/Source/core/render/node/factory/render_factory_interface.h; sourceTree = "<group>"; };
-		E8D60A5830F1E22863EB1D22339D0220 /* WXApplicationCacheTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXApplicationCacheTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.m; sourceTree = "<group>"; };
-		E9A775FD262842D995DBC555569C83A5 /* WXPageDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXPageDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXPageDomain.m; sourceTree = "<group>"; };
-		EA14347A2AE94D3278EC5B269298BEF1 /* WXIndexedDBTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXIndexedDBTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.m; sourceTree = "<group>"; };
-		EA9680EFD4BB62ADE3544DC15365654B /* WXPageTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXPageTypes.m; path = sdk/WXDevTool/Source/DerivedSources/WXPageTypes.m; sourceTree = "<group>"; };
-		EAB60ED994C33D0DEA94615572C8F132 /* color_cache_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = color_cache_utils.h; path = src/utils/color_cache_utils.h; sourceTree = "<group>"; };
-		EB6C75125D36ECFD73F8C827D0A31326 /* WXModuleProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXModuleProtocol.h; path = ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h; sourceTree = "<group>"; };
-		EBF10CCFD7DC524B871484F99082016E /* EBExpressionOrientation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EBExpressionOrientation.h; path = core/ios/BindingX/EBExpressionOrientation.h; sourceTree = "<group>"; };
-		EC07D99E932DB9B3C38FC8CAB0C859A8 /* WXAnalyzerCenter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXAnalyzerCenter.m; path = ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.m; sourceTree = "<group>"; };
-		ECC8BF6B094A7C9FFA5470E9BB27F09C /* WXCoreBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCoreBridge.h; path = ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h; sourceTree = "<group>"; };
-		ED0811492D08EAE304004EADA34BAF1C /* tree_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = tree_enc.c; path = src/enc/tree_enc.c; sourceTree = "<group>"; };
-		ED74AC691457447841A648E8FF4125F2 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = "<group>"; };
-		EE27BB1F53421E393E05A405F3437F1D /* WXExceptionUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXExceptionUtils.h; path = ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h; sourceTree = "<group>"; };
-		EE928482D530C875CEEDF17C5CA816FC /* WXContainerIndex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXContainerIndex.h; path = sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.h; sourceTree = "<group>"; };
-		EEE446B4190C4FD2F98DA0623C4884C9 /* WXDevtool.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WXDevtool.xcconfig; sourceTree = "<group>"; };
-		EF504FACB0FAC2BC212BEC4149B74228 /* render_object_interface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_object_interface.h; path = weex_core/Source/core/render/node/factory/render_object_interface.h; sourceTree = "<group>"; };
-		EFF1CE4FD0C3866C40237B065B24BAD0 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = "<group>"; };
-		F07FD118D7F91DAE2BFF671E1FD696F0 /* WXCellSlotComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCellSlotComponent.h; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.h; sourceTree = "<group>"; };
-		F0AAB080C8E159E3C3049D71463B8599 /* NSOrderedSet+WXRuntimePropertyDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSOrderedSet+WXRuntimePropertyDescriptor.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.h"; sourceTree = "<group>"; };
-		F10CBD91125D2B179E6A757D7F49D27D /* WXWebSocketLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXWebSocketLoader.m; path = ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.m; sourceTree = "<group>"; };
-		F12794CA188B8756E72C808DB5B15FF6 /* dec_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_neon.c; path = src/dsp/dec_neon.c; sourceTree = "<group>"; };
-		F1BBC79353A69E390B73F166C87761A5 /* WXSimulatorShortcutManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXSimulatorShortcutManager.m; path = ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.m; sourceTree = "<group>"; };
-		F1DC9D2ECA8E4CDB66C0ED152D0BB92E /* WXRecycleListLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXRecycleListLayout.m; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.m; sourceTree = "<group>"; };
-		F26199ACB6F13D484151EBB8F27E667C /* icu_utf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = icu_utf.h; path = weex_core/Source/base/third_party/icu/icu_utf.h; sourceTree = "<group>"; };
-		F270C55300BFAAF7582526134C556F72 /* WXBoxShadow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXBoxShadow.h; path = ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h; sourceTree = "<group>"; };
-		F2D0428444543AFAA5A2A2CE0D95AE58 /* WXJSCoreBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXJSCoreBridge.h; path = ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h; sourceTree = "<group>"; };
-		F2E5FDAAAAE5CB414AC0B590960240EE /* WeexSDK-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "WeexSDK-prefix.pch"; sourceTree = "<group>"; };
-		F487DCA098BE74D5BD7D677F4B7B143A /* WeexSDK-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "WeexSDK-dummy.m"; sourceTree = "<group>"; };
-		F58E4C1B2D7680BCB8BA41C30E6E4A12 /* WXRefreshComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXRefreshComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.mm; sourceTree = "<group>"; };
-		F59AFE746C72B88C0461CB430CA587B9 /* WXDisplayLinkManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDisplayLinkManager.m; path = ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.m; sourceTree = "<group>"; };
-		F5A10D2E37C73FAE87DEE38897820B74 /* WXDOMStorageDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDOMStorageDomain.m; path = sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.m; sourceTree = "<group>"; };
-		F5B3B0E00E5EB0BAE2760F01C384465C /* WXComponent+DataBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXComponent+DataBinding.h"; path = "ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.h"; sourceTree = "<group>"; };
-		F6034742F532C427028C51F0DC998D90 /* muxedit.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxedit.c; path = src/mux/muxedit.c; sourceTree = "<group>"; };
-		F66E6B5AF6892F01BABE972FEE7060E5 /* WXLoadingComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXLoadingComponent.mm; path = ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.mm; sourceTree = "<group>"; };
-		F686F775C183F4034BEC20CAE58F9087 /* WXComponent.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = WXComponent.mm; path = ios/sdk/WeexSDK/Sources/Model/WXComponent.mm; sourceTree = "<group>"; };
-		F688D0A7148003149F0A4F5857533093 /* WXDynamicDebuggerDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXDynamicDebuggerDomain.h; path = sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.h; sourceTree = "<group>"; };
-		F6BDC98C832CB1E3DA88B27B2E4B65D8 /* render_type.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_type.h; path = weex_core/Source/core/render/node/factory/render_type.h; sourceTree = "<group>"; };
-		F6F15F039EC8038701ED14CB6D3E0285 /* WXMonitorHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXMonitorHandler.h; path = sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.h; sourceTree = "<group>"; };
-		F6F173BB4E37141D9DB2D5B7C286B95F /* alpha_processing_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_sse2.c; path = src/dsp/alpha_processing_sse2.c; sourceTree = "<group>"; };
-		F702CD4B9262E496775038D6027248C8 /* NSData+WXDebugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+WXDebugger.h"; path = "sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.h"; sourceTree = "<group>"; };
-		F796B56AA30C17832F04647ED659C69B /* WXThreadSafeCounter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXThreadSafeCounter.h; path = ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h; sourceTree = "<group>"; };
-		F7C85AF26667B580F9FB7DC3B6FCF322 /* iterator_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = iterator_enc.c; path = src/enc/iterator_enc.c; sourceTree = "<group>"; };
-		F7E4FACA9BD658B80459CA3AA234999B /* WXRootView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRootView.h; path = ios/sdk/WeexSDK/Sources/View/WXRootView.h; sourceTree = "<group>"; };
-		F7F1797A5D3D2AB6E5916FEC099A70DC /* enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc.c; path = src/dsp/enc.c; sourceTree = "<group>"; };
-		F835839CAB9962E6CAB933584BC83BD2 /* NSManagedObject+WXRuntimePropertyDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+WXRuntimePropertyDescriptor.m"; path = "sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.m"; sourceTree = "<group>"; };
-		F8B69F7B70D30D373C51B72B11EC7282 /* WXExtendCallNativeManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXExtendCallNativeManager.h; path = ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h; sourceTree = "<group>"; };
-		F8BC307A597615C73BE0A922EDBB089E /* filters_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_mips_dsp_r2.c; path = src/dsp/filters_mips_dsp_r2.c; sourceTree = "<group>"; };
-		F946E76C49CD4C7C497653610E480FA7 /* vp8i_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8i_enc.h; path = src/enc/vp8i_enc.h; sourceTree = "<group>"; };
-		F9AF61BE593C7394F8C82ACF2099F638 /* WXRichText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRichText.h; path = ios/sdk/WeexSDK/Sources/Component/WXRichText.h; sourceTree = "<group>"; };
-		F9F2377788C89DAAB0665DE5379FE597 /* enc_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_msa.c; path = src/dsp/enc_msa.c; sourceTree = "<group>"; };
-		FA0F4A43931945E82C5DA9D1EC5AE6D3 /* UIBezierPath+Weex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBezierPath+Weex.h"; path = "ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h"; sourceTree = "<group>"; };
-		FA5EF01953F6FAE48E9B1CA4B0D20DB9 /* time_point.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = time_point.h; path = weex_core/Source/base/time_point.h; sourceTree = "<group>"; };
-		FA81C53394CF5BE4D692E30C7A4EBDE8 /* rescaler_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_msa.c; path = src/dsp/rescaler_msa.c; sourceTree = "<group>"; };
-		FA8BD63B5CAFB500E9C5E831D9A30630 /* WXRecycleListTemplateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXRecycleListTemplateManager.h; path = ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.h; sourceTree = "<group>"; };
-		FAC035A8F8B5B4FF3CF0DE7433F9F706 /* WXDevToolType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDevToolType.m; path = sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.m; sourceTree = "<group>"; };
-		FAD123CEC16F07E763151FDEAEBCC39E /* animi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = animi.h; path = src/mux/animi.h; sourceTree = "<group>"; };
-		FAD68FCD74BC7985D496456BED386D10 /* WXResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXResources.h; path = sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.h; sourceTree = "<group>"; };
-		FB31B198269F8FBB6A915914E18555CF /* WXConvert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXConvert.m; path = ios/sdk/WeexSDK/Sources/Utility/WXConvert.m; sourceTree = "<group>"; };
-		FB38E0AB8A212E3F530506289CCCD099 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = "<group>"; };
-		FBAFD931AB3578887D76A714F51A8F0B /* WXGlobalEventModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXGlobalEventModule.m; path = ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.m; sourceTree = "<group>"; };
-		FCC3C04588F2A2865190B2B7A1A4FD06 /* render_scroller.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = render_scroller.cpp; path = weex_core/Source/core/render/node/render_scroller.cpp; sourceTree = "<group>"; };
-		FD1351BF06D589BDC8255577ADB86843 /* JSValue+Weex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "JSValue+Weex.h"; path = "ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h"; sourceTree = "<group>"; };
-		FD249E89EDB93D998F4109436F3E3FF0 /* WXComponent+Navigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WXComponent+Navigation.h"; path = "ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h"; sourceTree = "<group>"; };
-		FDFF6B805300FA364E6C98E3DE3657A9 /* idec_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = idec_dec.c; path = src/dec/idec_dec.c; sourceTree = "<group>"; };
-		FE015013B66B1C0D1995EDC08F00A5DC /* WXDatePickerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXDatePickerManager.m; path = ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.m; sourceTree = "<group>"; };
-		FE5BF5B835CEF63B9BD060767DFEEE55 /* WXInstanceWrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXInstanceWrap.h; path = ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h; sourceTree = "<group>"; };
-		FE7655849DF77D42A4153FD758A4E79B /* filters_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_sse2.c; path = src/dsp/filters_sse2.c; sourceTree = "<group>"; };
-		FF67D676E033EEE7BC0C49EAE7E25489 /* WXNetworkTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXNetworkTypes.h; path = sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.h; sourceTree = "<group>"; };
-		FF780B8B99107B422737CDEB140E1A68 /* WXTimelineDomainController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXTimelineDomainController.h; path = sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.h; sourceTree = "<group>"; };
-		FF95A539C2D23962ABC23476B61F1103 /* WXResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXResourceLoader.m; path = ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.m; sourceTree = "<group>"; };
-		FF9DE7A2E1770DCCAC943871AAB70D89 /* WXComponent+DataBinding.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = "WXComponent+DataBinding.mm"; path = "ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.mm"; sourceTree = "<group>"; };
-		FFB44BFA97525E91FBC24C805B615734 /* WXWeakObjectWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WXWeakObjectWrapper.m; path = ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.m; sourceTree = "<group>"; };
-		FFE1D21B636F3E6897EAE41ACC5E01C1 /* render_action_createfinish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render_action_createfinish.h; path = weex_core/Source/core/render/action/render_action_createfinish.h; sourceTree = "<group>"; };
-		FFF88126AA6887CAE42D6CC2D314230D /* WXCanvasModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXCanvasModule.h; path = ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		04A6B87B63A10DB18DF43274A557399E /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		0FA1E2DFE3C93C64DFC7011F60C35214 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		568EE7E7B898AF800BD92CB9F08C2D60 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B110AB9D15028EF40A39A0A07E8A34E9 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C0F0CB1B4570A9576946FCEE6F27579C /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D2B2600F12CC0149A1C8AEFA54EAFD0D /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F4E93E3781F33AD90EE48C42A7A5E7F0 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F599D5B7F9D7741CA54C397FCE3FEBB8 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		0744BC0C5778D2AE9258492A37475DF9 /* Targets Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				BDBD2A84AE4FB3F98BE06BB0F64FA261 /* Pods-WeexDemo */,
-				3BE3308DC8DAC60543AC03B4A8559DA8 /* Pods-WeexUITestDemo */,
-			);
-			name = "Targets Support Files";
-			sourceTree = "<group>";
-		};
-		0C836CE41D14D9FFBE1257BE593D114B /* WXDevtool */ = {
-			isa = PBXGroup;
-			children = (
-				87A767DF00D03EEA3C7C7DD5A5EE4F23 /* NSArray+WX_JSONObject.h */,
-				7491005464123A9B84498A6E80E82A8D /* NSArray+WX_JSONObject.m */,
-				766C61EAE2ED0A41B1BD895D097C8856 /* NSArray+WXRuntimePropertyDescriptor.h */,
-				A1948733429E2AF04316657331FDCF0C /* NSArray+WXRuntimePropertyDescriptor.m */,
-				F702CD4B9262E496775038D6027248C8 /* NSData+WXDebugger.h */,
-				DACC4A78059A5CB50C255D5DACA56753 /* NSData+WXDebugger.m */,
-				E6A5CC47E20CB055B8A835F901DE00EE /* NSDate+WX_JSONObject.h */,
-				B85CC15E1C2E75081EBCF38BBEACC5BA /* NSDate+WX_JSONObject.m */,
-				2F51557A69D218A74E366BD8CD068060 /* NSDate+WXDebugger.h */,
-				CEF7F548A8F8601D656DAEDBEBC4BA16 /* NSDate+WXDebugger.m */,
-				60F4B24CE94D2F72BC30FD57CC493F1A /* NSDictionary+WXRuntimePropertyDescriptor.h */,
-				CECDE40D43D3099CECE5C8C556FB9C94 /* NSDictionary+WXRuntimePropertyDescriptor.m */,
-				7F6724E5E6C688E9AE46CC0B477DA2A1 /* NSError+WX_JSONObject.h */,
-				0B178EDF8D33BBDC2C373BFE6D87C0A0 /* NSError+WX_JSONObject.m */,
-				1B424AB9E79A3417FDF7FA260D93275B /* NSManagedObject+WXRuntimePropertyDescriptor.h */,
-				F835839CAB9962E6CAB933584BC83BD2 /* NSManagedObject+WXRuntimePropertyDescriptor.m */,
-				3525B041CA2BE20A8CB871787B0A8D5C /* NSObject+WXRuntimePropertyDescriptor.h */,
-				A5D61D9560F4F2856520727041FE865D /* NSObject+WXRuntimePropertyDescriptor.m */,
-				F0AAB080C8E159E3C3049D71463B8599 /* NSOrderedSet+WXRuntimePropertyDescriptor.h */,
-				5CFAC8DFCA639A59B25A3C53009BFF51 /* NSOrderedSet+WXRuntimePropertyDescriptor.m */,
-				24842AC0FA5CF1BA4D9BCF36B26D820B /* NSSet+WXRuntimePropertyDescriptor.h */,
-				2F9A6D32AB68DBE91A3BFF5A87A5B240 /* NSSet+WXRuntimePropertyDescriptor.m */,
-				6118E94A5253FC7B2D918C278DF426DC /* WXApplicationCacheDomain.h */,
-				C59AE1F6C3CF3BEA4A662DEB7DAB6CEB /* WXApplicationCacheDomain.m */,
-				2B1E445201E254BFBCE6B8B4E7EF32EA /* WXApplicationCacheTypes.h */,
-				E8D60A5830F1E22863EB1D22339D0220 /* WXApplicationCacheTypes.m */,
-				B1C9B1188852DEF5FD73FB3C2D97FF91 /* WXConsoleDomain.h */,
-				8DBD739CA64C715A3BE652FBECE2BF5B /* WXConsoleDomain.m */,
-				947E260212405D8C7BCDEF8D809FBF01 /* WXConsoleDomainController.h */,
-				6C5179E04421725162CC126E2BB89539 /* WXConsoleDomainController.m */,
-				760F2279D577B5EE7925C2992933BE44 /* WXConsoleTypes.h */,
-				B9044645E709FACB3D37D45F0519466A /* WXConsoleTypes.m */,
-				EE928482D530C875CEEDF17C5CA816FC /* WXContainerIndex.h */,
-				3FF6427D2C822AA9644AA17BC61EEC0C /* WXContainerIndex.m */,
-				971DBE7D3D997A1E2DECC20C8C1BD99B /* WXCSSDomain.h */,
-				A632E8E0F72D6FD93DA49734D3BA64AE /* WXCSSDomain.m */,
-				B9A23E64562C87CEB29C2E80F5DD6D5B /* WXCSSDomainController.h */,
-				7793767183C6CAFC41D1193AA754C4AD /* WXCSSDomainController.m */,
-				CC3194BA7EEB2B576E0C0ED609DEFC10 /* WXCSSTypes.h */,
-				4FD2E8C7F2D14E58865842797802377F /* WXCSSTypes.m */,
-				57D88746C9A66B0748EE7F9AAF27A3E9 /* WXDatabaseDomain.h */,
-				1C45E4CC8FA3D7922179E3E950A4F047 /* WXDatabaseDomain.m */,
-				75455111C321489DE29B265BB4026BDA /* WXDatabaseTypes.h */,
-				477F1538ECB1049ED7E3A078E122140A /* WXDatabaseTypes.m */,
-				588B1DF22DC12663D1C56C5FB056004F /* WXDebugDomain.h */,
-				357E2BFE46D94C57D19BB81721B42DDE /* WXDebugDomain.m */,
-				32F133C79F5A985EF9267C876D0F8879 /* WXDebugDomainController.h */,
-				E522D6ED23CECF32E263D482D9A89038 /* WXDebugDomainController.m */,
-				5D7728EB2DC323F8FB375819B6C80518 /* WXDebugger.h */,
-				8491E8A977219F1C165FB8188BABA176 /* WXDebugger.m */,
-				D15A6AB05FD9FBE0207D318BD99EC99B /* WXDebuggerDomain.h */,
-				C326AA3AA08F6A1905CA19549554B949 /* WXDebuggerDomain.m */,
-				85EF953A9D60907EF2306D4E4750BA29 /* WXDebuggerTypes.h */,
-				CBCEB17304D416691ED412FBCEC49975 /* WXDebuggerTypes.m */,
-				37805030199FE45AFF17052FB858587A /* WXDebuggerUtility.h */,
-				2B5331187B7774795F6903C51C4D972A /* WXDebuggerUtility.m */,
-				677EE44402FA4C045667B8620C3EA638 /* WXDefinitions.h */,
-				8881F541E86C486720ED44C61CE9C0C1 /* WXDefinitions.m */,
-				9126BB30A75A24D6C4DAAD56E2A8686B /* WXDeviceInfo.h */,
-				B6F763DB20BC04926C65A88D5A97E9C4 /* WXDeviceInfo.m */,
-				62239767813F4946C6F565B234287654 /* WXDevTool.h */,
-				02D6EDBCC7C21DE7C7C9475831975B3D /* WXDevTool.m */,
-				873AEE46C5C7387E0F7198D4E92FE694 /* WXDevToolType.h */,
-				FAC035A8F8B5B4FF3CF0DE7433F9F706 /* WXDevToolType.m */,
-				119470AC05E46A949FE6381CE92CAC19 /* WXDomainController.h */,
-				46E22E9BEEC6CF3435BAE66D38F9890D /* WXDomainController.m */,
-				D95D5A5EB844080A48D53A7D7C208A04 /* WXDOMDebuggerDomain.h */,
-				C1DDF30C44A536788353D98FF53ABC3E /* WXDOMDebuggerDomain.m */,
-				60D92BDEF0C89DD60BEA3D9951902D06 /* WXDOMDomain.h */,
-				283260E92B995709DD085C833062905B /* WXDOMDomain.m */,
-				042645D355C8105C3A29CD8BC46050C0 /* WXDOMDomainController.h */,
-				8D79C4BA4538A43EB1E6A559C598A59B /* WXDOMDomainController.m */,
-				E3A7B60A1F25A1BFC53492A51FA84BE5 /* WXDOMStorageDomain.h */,
-				F5A10D2E37C73FAE87DEE38897820B74 /* WXDOMStorageDomain.m */,
-				316EB9CF282755336D6EFABA1174B121 /* WXDOMStorageTypes.h */,
-				01473A83E00902E4CDB5C8EFDB7A1A02 /* WXDOMStorageTypes.m */,
-				92B741E0CEA8769DC71CBA7370970206 /* WXDOMTypes.h */,
-				97C53DCBF2FA2B6D4EF61712638B4807 /* WXDOMTypes.m */,
-				F688D0A7148003149F0A4F5857533093 /* WXDynamicDebuggerDomain.h */,
-				5CF8AC7110C2C269AD25BBD82B9FB4E7 /* WXDynamicDebuggerDomain.m */,
-				8CA11531934B9BD06D11DE5EAF6A121D /* WXFileSystemDomain.h */,
-				9719A64BBA6034679641C3E1A3B2662F /* WXFileSystemDomain.m */,
-				89DF62AA9A3F430B40EA844AA359F91F /* WXFileSystemTypes.h */,
-				2E8CE70749746A500AF380D31C1711F3 /* WXFileSystemTypes.m */,
-				A76B1446ADA0C25DA2DAF1E5C05C4156 /* WXIndexedDBDomain.h */,
-				8AE9B4EE933264ABE520CB3B92932BAF /* WXIndexedDBDomain.m */,
-				D9C2316D06512708906F7AD219359C77 /* WXIndexedDBDomainController.h */,
-				C9328B287F546FF4D3FB0CF5A6CEA647 /* WXIndexedDBDomainController.m */,
-				429CCA750ED1C9DA834B1F69C537C19B /* WXIndexedDBTypes.h */,
-				EA14347A2AE94D3278EC5B269298BEF1 /* WXIndexedDBTypes.m */,
-				6F27F751234744F1D55CA39C37C118B6 /* WXInspectorDomain.h */,
-				688B9E4010E6B795C2865A4BE0DB56BD /* WXInspectorDomain.m */,
-				B44B3F4193FEB7E6F67EB8680C946F64 /* WXInspectorDomainController.h */,
-				0774ECFA41B0E1666EBFDEC773948E46 /* WXInspectorDomainController.m */,
-				DD0483310224B3C72C8A35173E13AC3B /* WXMemoryDomain.h */,
-				72752A114E306EE1502FD7483D5BC2AF /* WXMemoryDomain.m */,
-				1FCD4C86AB8FA7F0A52B1155E801B63F /* WXMemoryTypes.h */,
-				10BB2944AFB5AC38A28EF89F9E687CE4 /* WXMemoryTypes.m */,
-				F6F15F039EC8038701ED14CB6D3E0285 /* WXMonitorHandler.h */,
-				8F415BC155783817AD5512E32AA6B963 /* WXMonitorHandler.m */,
-				C4E644868A49CA9A1BE59C8A24E8D23A /* WXNetworkDomain.h */,
-				17CE1C3E86DEC5D8B8FE13CE6B95BE69 /* WXNetworkDomain.m */,
-				9351E3B76D347E620F13B4A2B75A68BC /* WXNetworkDomainController.h */,
-				BEF4DD0F8F24C9705A7DA35A66F10C40 /* WXNetworkDomainController.m */,
-				E0AD0B2D0CD2ABF1F9E3192059A16E56 /* WXNetworkRecorder.h */,
-				D0656D856A2A8E59AF4CD4859516B22D /* WXNetworkRecorder.m */,
-				A17D97A8EF680933BEB20A55EBCDB545 /* WXNetworkTransaction.h */,
-				D595196ECD8B1C51AD0563AE6DFD2E6B /* WXNetworkTransaction.m */,
-				FF67D676E033EEE7BC0C49EAE7E25489 /* WXNetworkTypes.h */,
-				9006F0DE812C3B91A8083B4D0ADCC22A /* WXNetworkTypes.m */,
-				48BD7D9F3C1D61BB708A03A0204FB61F /* WXObject.h */,
-				A3A91119F00550C57297F84B49E8229B /* WXObject.m */,
-				B56671D897B7FA4F803F39A15C3A588E /* WXPageDomain.h */,
-				E9A775FD262842D995DBC555569C83A5 /* WXPageDomain.m */,
-				9EA4AE6ED35CA252F4EE80D491DFC631 /* WXPageDomainController.h */,
-				886F31BB06714550409E5AB9A4C697A6 /* WXPageDomainController.m */,
-				E8694E24F8F5B3D0AC35493D40EB95C8 /* WXPageDomainUtility.h */,
-				25E4F248658E57C3D33FE06E88B894BE /* WXPageDomainUtility.m */,
-				A2A60BD35796611A22E43B08AC75AA0A /* WXPageTypes.h */,
-				EA9680EFD4BB62ADE3544DC15365654B /* WXPageTypes.m */,
-				8E9ECE08F8A25E25C29C421943677E2E /* WXPonyDebugger.h */,
-				022DC4330EAEC4FF483D2630EFE90B0C /* WXPrettyStringPrinter.h */,
-				B79513821BB1C921F6085D5A98232454 /* WXPrettyStringPrinter.m */,
-				B5C863D501296F7912451AC3C2709AEC /* WXProfilerDomain.h */,
-				35FBF4831A3149CAD67DCC34B6FD1503 /* WXProfilerDomain.m */,
-				AE3F773AC8E98ED609737F7CA3D860B7 /* WXProfilerDomainController.h */,
-				2BF04B88EDF5423A2820E7A2F54C990F /* WXProfilerDomainController.m */,
-				50B2583C0B8A4F9CF6AA3E55B6B620FB /* WXProfilerTypes.h */,
-				759B891C482A044F9477EC6B3F5E8F59 /* WXProfilerTypes.m */,
-				FAD68FCD74BC7985D496456BED386D10 /* WXResources.h */,
-				D08D3EA5D6154DF1CE9F24E97900709D /* WXResources.m */,
-				26FD58C518EF81EE3E9854C87EFC25D4 /* WXRuntimeDomain.h */,
-				220B636814A4BE99D5ABBF9283D5CDBC /* WXRuntimeDomain.m */,
-				CB9FA4227005707427A3C9605385814A /* WXRuntimeDomainController.h */,
-				2FEE6857CC00C14C12102F8B911E4450 /* WXRuntimeDomainController.m */,
-				8AD1DF8182EFE56D218EBD5EA4E0EF97 /* WXRuntimeTypes.h */,
-				785BEA1628F2E8279FEF117373A139E6 /* WXRuntimeTypes.m */,
-				E1396A1386418E412485AE90D8F50A59 /* WXSourceDebuggerDomainController.h */,
-				C076496B0EE3F809DF270B3061DED99B /* WXSourceDebuggerDomainController.m */,
-				5EEE887F1C8AC77A04E10C127096DEB1 /* WXTimelineDomain.h */,
-				544085C15C81373F7716C05D8E0B3C5F /* WXTimelineDomain.m */,
-				FF780B8B99107B422737CDEB140E1A68 /* WXTimelineDomainController.h */,
-				96F76270672742083C30E0147E662634 /* WXTimelineDomainController.m */,
-				42F9E408A2CE46E3B76C1EA326283740 /* WXTimelineTypes.h */,
-				A4BDCA209EBCB888FDF3439D0CFBD6A8 /* WXTimelineTypes.m */,
-				2C5BDA2B0C456F712B2018CD7BF2606A /* WXTracingUtility.h */,
-				A47C816B3A51B5F8CB135DA314195BE3 /* WXTracingUtility.m */,
-				7DC5280C30E9F194EC773F3B8F965730 /* WXWebGLDomain.h */,
-				90C5DBB0813A4F204BFB94A0CBCF2282 /* WXWebGLDomain.m */,
-				3C94DD8B1A344DBC2A829D9ACFDEC9C5 /* WXWebGLTypes.h */,
-				958CD59E242BBBF19CA80730DE7637E0 /* WXWebGLTypes.m */,
-				D1D501740C0C19057BF31411878F8384 /* WXWorkerDomain.h */,
-				A5FB0140015558AADD947FBF3CB774A6 /* WXWorkerDomain.m */,
-				F824FF37903379A0038E1F6D7DD64947 /* Support Files */,
-			);
-			name = WXDevtool;
-			path = WXDevtool;
-			sourceTree = "<group>";
-		};
-		2761B993BC47E388457C970BA54AE36C /* WebP */ = {
-			isa = PBXGroup;
-			children = (
-				B3DCB9DA8798A677CA18FE8D5C6D4DDE /* UIImage+WebP.h */,
-				5C1DAB5173BE4D9AFD90E1774F55B88A /* UIImage+WebP.m */,
-			);
-			name = WebP;
-			sourceTree = "<group>";
-		};
-		27F06E45368B1B57B7F5026102A4AFEC /* WeexSDK */ = {
-			isa = PBXGroup;
-			children = (
-				07CC4175C573792B306F4CBC69B7E6A5 /* closure.h */,
-				074C52F43589F0109AD27874922423A6 /* common.h */,
-				1D815E4C7BA869860AB5356DEC9DB0C6 /* constants_name.h */,
-				5D92C84F2F60B8D18C10DD39EF6EC8F3 /* constants_value.h */,
-				B7ECFD2AC9010595D8CC478DA02AEE04 /* core_constants.h */,
-				96D92129845E0F1D7E57912B1FB525BE /* core_environment.cpp */,
-				9920F1218ECD79A8F43D70238B728E22 /* core_environment.h */,
-				01D9FA7A4F82C9C98BB22660271DFD6A /* core_side_in_platform.cpp */,
-				CC67579B661BBC035F57C4593171B2DD /* core_side_in_platform.h */,
-				7DD569D7C5FDEDEAB92DAD6047B0821E /* core_side_in_script.cpp */,
-				D2D81C7A85862C23E40FA6DDB82E336E /* core_side_in_script.h */,
-				0BDC1F81EE7912C2EC6E58CC88443905 /* css_value_getter.cpp */,
-				1695D7B0C8755C788D5C01287F687ECA /* css_value_getter.h */,
-				852FC84A567B16BE4E766E27CEA115B8 /* default_request_handler.h */,
-				5269C696D4E80E4CFDB297C5457FA96C /* default_request_handler.mm */,
-				749AFAB8332464D86023B905B1A70E87 /* dom_wson.cpp */,
-				0FAD43DAA99D38FA69179D955107F1EC /* dom_wson.h */,
-				6D50F6F42FDF6993A7BF16570B037B7A /* eagle_bridge.cpp */,
-				20A3EB852C3418AC7550D963CC70CAC7 /* eagle_bridge.h */,
-				8370CB757ED3DF90C752216C25EADC40 /* flex_enum.h */,
-				27710DA71383416300535ACD6D01788B /* http_module.cc */,
-				3866AAF4D20C20B4D008673E504793B5 /* http_module.h */,
-				95E91DB3C84499130864E821FDED23A1 /* icu_utf.cpp */,
-				F26199ACB6F13D484151EBB8F27E667C /* icu_utf.h */,
-				CBC905A73127DD779E320EB1AF2EDCC7 /* JSContext+Weex.h */,
-				CCFE3476D208C1F1968FE51983C5F0AC /* JSContext+Weex.m */,
-				33FB2D921F17AC550AD9FC7CF6D00A25 /* json11.cc */,
-				80E76783A17376596888A4D50E9D0DB8 /* json11.hpp */,
-				BACC744DD7646ABD72A785C27CB2C128 /* JsonPage.cpp */,
-				B0635850016E4E9C3932F2B0B0AEBDD6 /* JsonPage.h */,
-				857DC134CF138674AB3DD04BECD4BA7E /* JsonRenderManager.cpp */,
-				E5697E5203985BC2D1A9EAE2A4309E3A /* JsonRenderManager.h */,
-				FD1351BF06D589BDC8255577ADB86843 /* JSValue+Weex.h */,
-				AEE24A8BBA085CBA10F75B100F7FF843 /* JSValue+Weex.m */,
-				913087348EE1FDC7047EBE34EA75CAFC /* layout.cpp */,
-				880D8F8B64B196B3B05E9737E770F9A5 /* layout.h */,
-				7DA6B7198E908F90672D8F9052EA0EC1 /* log_bridge.h */,
-				4EAC33AD73DB9E2C46B9BD90FA0A5C95 /* log_defines.cpp */,
-				0255D439B3B4EF00ED06096E04C6FA4A /* log_defines.h */,
-				200782B8FADB56E511F01A85AF98A4DC /* make_copyable.h */,
-				A2EB5D25AEDE6112177C16CCAD28319C /* measure_func_adapter.h */,
-				08F858DFFD07EAB648B1A09CADC0234E /* message_loop.cc */,
-				6F23BD4A985246D8B7536FD2BAAF4266 /* message_loop.h */,
-				C4AF39426CF128D7BED382941B1DFC72 /* message_pump.h */,
-				525F0C44D141D5FB7FE4884D80746370 /* message_pump_darwin.cc */,
-				2EB6D980F03B04C188CE7AC7AF01EE18 /* message_pump_darwin.h */,
-				1A11C2E1AE7EA81E805CCE5EF38E8D72 /* message_pump_posix.cc */,
-				574046D5BB120076504E00F10E5E9CF3 /* message_pump_posix.h */,
-				0B3182AB3965AFEBC5671EFFB755C5A7 /* NSArray+Weex.h */,
-				589FAFECEA3AE16046843C3792FBE957 /* NSArray+Weex.m */,
-				AA48BD65765AB3262CF8F1F041978AAA /* NSObject+WXSwizzle.h */,
-				40102A5D2B52D87C553D2D82285C0815 /* NSObject+WXSwizzle.m */,
-				E417CC999C245BF9B710AA5CEB253761 /* NSTimer+Weex.h */,
-				D9C92B59DD89DF38CF395EA558E089E9 /* NSTimer+Weex.m */,
-				B7EE3F4C6D936F9C7BCEE307BEB75CE3 /* platform_bridge.h */,
-				A81A0420E21740E4BE95EA1D36B09BC6 /* render_action_add_element.cpp */,
-				914A40C062CF53086591A28C517CC15D /* render_action_add_element.h */,
-				A517E435BFFAD4F09C0E9D78584D6A60 /* render_action_add_event.cpp */,
-				958A726D00B974F20937DC74E3E5EB15 /* render_action_add_event.h */,
-				60A576B93881D755C54E184B91A542FE /* render_action_appendtree_createfinish.cpp */,
-				C9CBD05805196749E2544F9B23E59926 /* render_action_appendtree_createfinish.h */,
-				9C20F26304A6A127CA15A4C1265C2554 /* render_action_createbody.cpp */,
-				17DC31727FB1F407B8D55999463B60E7 /* render_action_createbody.h */,
-				6C56F7E8E30A11CFF44841BD257BEC19 /* render_action_createfinish.cpp */,
-				FFE1D21B636F3E6897EAE41ACC5E01C1 /* render_action_createfinish.h */,
-				0C89CE98C40CFE3A96A0D0B68CE303B1 /* render_action_interface.h */,
-				1282ABA21874CFBC0FAF9974E2850E1A /* render_action_layout.cpp */,
-				9220F44F45F24C3820021DDD296603DC /* render_action_layout.h */,
-				8474D4CFFB6FBEA167000911A4C27363 /* render_action_move_element.cpp */,
-				E450405103313E93765BE41F83B0C7EB /* render_action_move_element.h */,
-				00F9033A36AB18306A2D59326C9FF83E /* render_action_remove_element.cpp */,
-				30EE4B2FBF7A51FDE60B0591D7E377CF /* render_action_remove_element.h */,
-				A41CB486AE3549B29B34B304FC32FA80 /* render_action_remove_event.cpp */,
-				95D9CBD14543F4160C3C88FFA2B75EA1 /* render_action_remove_event.h */,
-				AED2463A704B22A8963535845DFBEB5A /* render_action_render_success.cpp */,
-				96815DF3D74FDD1A73EDF90EA2346397 /* render_action_render_success.h */,
-				DA320FFC9D173CE46C59D11405D27738 /* render_action_trigger_vsync.cpp */,
-				4BF98273FC1C3FA77A28D2A4A79CB83D /* render_action_trigger_vsync.h */,
-				227F4242FAB401781A67CD958055ABF3 /* render_action_update_attr.cpp */,
-				8A5D9BA0E025AF65EC016531A0AF5110 /* render_action_update_attr.h */,
-				AE893D9B08F8A9E199262EC936028DC4 /* render_action_update_style.cpp */,
-				6808D7F8FC3CA82AEC02FE4F83810DC5 /* render_action_update_style.h */,
-				22714A39E946520FE050E79B1A52431B /* render_appbar.cpp */,
-				6B0AF454C349198FCE5D4BF657983CEE /* render_appbar.h */,
-				5011BDBC7EAF5EC6770B94763C0F0184 /* render_appbar_factory.h */,
-				3FF59FF3FEA83471A133EF1637B8FD40 /* render_cell.h */,
-				07D4A2708DF3DCAC7AA4BDFF2163EBB1 /* render_cell_factory.h */,
-				B0B3E6C399D6E2508EDACB8FAD79102B /* render_creator.cpp */,
-				752E58CF55BCF349990686330A52C599 /* render_creator.h */,
-				E88E719DF07BE85FFDBDF9C2390C317C /* render_factory_interface.h */,
-				4202CD7FA7BCF2B094173780B4A6860E /* render_list.cpp */,
-				51778F83FDBA40339C0082663BCE545E /* render_list.h */,
-				7452F0CF401F8FABA2D2F0C843AC234D /* render_list_factory.h */,
-				6F8740E75EC067CF8F875A5BF4D7B376 /* render_manager.cpp */,
-				31D8207B401A9E4C5A28E8A9EC55CFC5 /* render_manager.h */,
-				949E2A17F0D596B7851B635C58E2BBD9 /* render_mask.cpp */,
-				7C4A22C2552E5B865E9C27390C678E89 /* render_mask.h */,
-				36A618D4D2AD812E897D70F57E46B3F6 /* render_mask_factory.h */,
-				228E4B12485F6EFDCEC568C59AF69746 /* render_object.cpp */,
-				376710A2ECFF4EC9956C45CCF7A4213B /* render_object.h */,
-				EF504FACB0FAC2BC212BEC4149B74228 /* render_object_interface.h */,
-				3AC2EC0A0D7CC94318840A6328D6AEF3 /* render_page.cpp */,
-				5802092E4F1DB06997B299A27BB6C689 /* render_page.h */,
-				A839923E143BE3DAFA2215D8D27E6DCA /* render_page_base.cpp */,
-				81AF64896A2DC4374353CCB01726FAE9 /* render_page_base.h */,
-				9A68D8B268583C401B50CC8D34D20627 /* render_page_custom.cpp */,
-				76608084D23396212F14045A160845B6 /* render_page_custom.h */,
-				8F5533891517C84476A79130AAD4310F /* render_performance.cpp */,
-				E5C63F277A54A171CBD3F13892ED6282 /* render_performance.h */,
-				FCC3C04588F2A2865190B2B7A1A4FD06 /* render_scroller.cpp */,
-				74FF5C68BC1BB4E500D8196E4D3EE423 /* render_scroller.h */,
-				C783A799EBA4357E0C8DB8283223378C /* render_scroller_factory.h */,
-				246C9493B70FA5706109B51EC364DC61 /* render_target.cpp */,
-				E03C5C96072819B690D558C11A414DF9 /* render_target.h */,
-				D5A29E575740EFCD7E1F27029E58ECFA /* render_text.cpp */,
-				991C92DB3BB454A126FC061BE4928202 /* render_text.h */,
-				3FA74873954436F80E3ACE6F2E2169F1 /* render_text_factory.h */,
-				F6BDC98C832CB1E3DA88B27B2E4B65D8 /* render_type.h */,
-				0A9BA4F9440725BA7A597544A2E5C14C /* request_handler.h */,
-				755B2D2A9891D9247D25651476283530 /* script_bridge.h */,
-				C581AE14D2EC657A0AB9C2489A6D8C72 /* simple_render_factory.h */,
-				802DD605FE5C62B581E3D3215A7BECE5 /* string_util.h */,
-				379BE2D025CA515F149A79108EE8EA1F /* style.cpp */,
-				77D34AE7AB9D03DCDCA357F35A110BEB /* style.h */,
-				55C84A27386B7484870C45B41147A6F9 /* thread.h */,
-				0B1E54676AB150EA35945A33C83ABE40 /* thread_impl.h */,
-				E08C9D61FFF5FDB2001486391B334B63 /* thread_impl_darwin.cc */,
-				B949D2AE94ED94A64F54C3D7A0A455C6 /* thread_impl_darwin.h */,
-				BD0479CA7C6330BEF1A6300A9D01C0A2 /* thread_impl_posix.cc */,
-				A19D364451C8BD861FDA8D934BE970F7 /* thread_impl_posix.h */,
-				C6A3B98FF4E33ADF85E34108216C1CB0 /* thread_local.h */,
-				0115713EE67211947B2CE13DBC965236 /* time_calculator.h */,
-				87E25C2E46D80B1C2B60B139F075B0C8 /* time_point.cc */,
-				FA5EF01953F6FAE48E9B1CA4B0D20DB9 /* time_point.h */,
-				BEB8DE8AA1603764C252C52EFEE1CD42 /* time_unit.h */,
-				A273340E8055EDA85267A141DF2590A8 /* time_utils.h */,
-				FA0F4A43931945E82C5DA9D1EC5AE6D3 /* UIBezierPath+Weex.h */,
-				2EA9CD94A0A125D52E9F8B9B2D31687A /* UIBezierPath+Weex.m */,
-				BD79F4C6BEAD090B284A3783C0DF729B /* view_utils.h */,
-				09BC24040A3FB891C746FB141E118E30 /* waitable_event.h */,
-				BCD96AD89D58184127327076CD9BF4E6 /* weex_core_manager.h */,
-				417E14C1A89F4D61DE283601C205396C /* WeexApiHeader.h */,
-				A28723D57D339F9D3A947FEFFCE023DB /* WeexApiValue.h */,
-				65221697FA3F8237A789727D39DCECE9 /* WeexSDK.h */,
-				E54504CF8E8DE89E0E62952969EA78E2 /* wson.c */,
-				57A1DE6298E167358B79D4DB2E69D224 /* wson.h */,
-				7EC1B99B1B0076AF5ECC0BB970362AD3 /* wson_parser.cpp */,
-				B4FB2F3507912F2188496E2475A11872 /* wson_parser.h */,
-				2B371316888C9F151F7F358437D50261 /* wson_util.cpp */,
-				126A040BEDEE96AAC187B3E8F5A18A0F /* wson_util.h */,
-				0810EC959E26AE71394D5FDE4D3F6EC3 /* wx_api.h */,
-				712B82486FA9726B76BE61FFDF4EB411 /* wx_type_define.h */,
-				BBFBCD5918E867F40E2055561B1BF4CA /* WXAComponent.h */,
-				3F7A6CC8BEAA7EF6CD431364C5F23C7F /* WXAComponent.m */,
-				5A6621B5A06160C20268D1FF942A39E2 /* WXAnalyzerCenter.h */,
-				EC07D99E932DB9B3C38FC8CAB0C859A8 /* WXAnalyzerCenter.m */,
-				3D6F3BDDE29E6A8AB58A14B63EC2EF28 /* WXAnalyzerCenter+Transfer.h */,
-				176E4573995A9D958752F00F6DD76F2D /* WXAnalyzerProtocol.h */,
-				CFB666791566E44EF3D842F562575807 /* WXAnimationModule.h */,
-				1C817C91B676EF472497E63FEF907BAB /* WXAnimationModule.m */,
-				339C631E844134E52729A6AB132C278C /* WXApmForInstance.h */,
-				5963DE8F5AD74DBA443C17DF746D5DAE /* WXApmForInstance.m */,
-				12459D410F77C4E9D8E60F9BE5C17076 /* WXApmProtocol.h */,
-				30FDA4038741EA0369B5D8EC15EA4A4E /* WXAppConfiguration.h */,
-				2DBE305F902AA096943928998332943D /* WXAppConfiguration.m */,
-				8267DD65FE71077879EAABFBAE3CCA3A /* WXAppMonitorProtocol.h */,
-				E1588BD2BD00D730FA92B51B9C55F5C8 /* WXAssert.h */,
-				39F271D37CDBFA4AE3732023C33A784B /* WXAssert.m */,
-				05CAFC367FBE9AA142F5DE1F652260B9 /* WXBaseViewController.h */,
-				AB853D150177896F688FBD07C1D69A87 /* WXBaseViewController.m */,
-				F270C55300BFAAF7582526134C556F72 /* WXBoxShadow.h */,
-				9D995A79A47903B892A041E5E146FA9B /* WXBoxShadow.m */,
-				1F78B974586351904E960D034432A672 /* WXBridgeContext.h */,
-				DA22E8B354307DE67607B627B11C61C6 /* WXBridgeContext.m */,
-				C855546EF5292369448E003FBF2C7C38 /* WXBridgeManager.h */,
-				DF8284E51BBAFB0B94EF8B6077A763D4 /* WXBridgeManager.m */,
-				DB6CDC9C331DE89FFF3C8B95D3B8909D /* WXBridgeMethod.h */,
-				E32BF149530BB17C5E16D1980F3119F0 /* WXBridgeMethod.m */,
-				024FE4856F5960412BD81B74F2510A3E /* WXBridgeProtocol.h */,
-				C9E8CC83B908885EB00252703EC36034 /* WXCallJSMethod.h */,
-				38523DD31638B5271A648BE80D645448 /* WXCallJSMethod.m */,
-				DF2C9E0CAD5DB2E23BD745FDD0C27131 /* WXCanvasComponent.h */,
-				80F3C571DF359DB4A11352DBA10E2D7F /* WXCanvasComponent.m */,
-				FFF88126AA6887CAE42D6CC2D314230D /* WXCanvasModule.h */,
-				4254F6BE0BB06241BA6CC3EF9E3744EC /* WXCanvasModule.m */,
-				AF077A2262A5757FF623B0061E863CB8 /* WXCellComponent.h */,
-				E57FCABE882A305192E25CF3C8722B18 /* WXCellComponent.mm */,
-				F07FD118D7F91DAE2BFF671E1FD696F0 /* WXCellSlotComponent.h */,
-				4256624AE40B24FB6568949D00B0D089 /* WXCellSlotComponent.mm */,
-				DA6F718B120A7B108A29930B217273D5 /* WXClipboardModule.h */,
-				0C2AF92DE2F7E88DAB04C235A7ECF064 /* WXClipboardModule.m */,
-				12DD2480D399120FFA8F881C83C6E44E /* WXComponent.h */,
-				F686F775C183F4034BEC20CAE58F9087 /* WXComponent.mm */,
-				A352453B043304509C876BC299C8ABA7 /* WXComponent+BoxShadow.h */,
-				A3A663BC59F85D47ED810F0A9A408479 /* WXComponent+BoxShadow.m */,
-				F5B3B0E00E5EB0BAE2760F01C384465C /* WXComponent+DataBinding.h */,
-				FF9DE7A2E1770DCCAC943871AAB70D89 /* WXComponent+DataBinding.mm */,
-				26529B5631AAD15C0E15227409B63BF6 /* WXComponent+Display.h */,
-				7EBCCA75309150481CB6C41E621C4F03 /* WXComponent+Display.m */,
-				6F76688311A99F446EB1955FEB61E314 /* WXComponent+Events.h */,
-				248FC68CE4516D247CFAD6CBB5C3874D /* WXComponent+Events.m */,
-				B74CE6DCD03AA3AF30EB1EC801345020 /* WXComponent+Layout.h */,
-				88268CA081F4DFE5B57B99645C04DA41 /* WXComponent+Layout.mm */,
-				FD249E89EDB93D998F4109436F3E3FF0 /* WXComponent+Navigation.h */,
-				0644E3B51ACAD71D3B5C37E398E3550A /* WXComponent+Navigation.m */,
-				82AA7438CED848E75D3FD1C1C3BB5F49 /* WXComponent+PseudoClassManagement.h */,
-				3517F36E15E27895FC4A1E77EC343A6E /* WXComponent+PseudoClassManagement.m */,
-				487963401D867BAC55AAF9F1846903F9 /* WXComponent+ViewManagement.h */,
-				55C70945B2910AAAC1B4314D2ABADA63 /* WXComponent+ViewManagement.mm */,
-				65E647FBD6592D9646B975FBC14E5D5A /* WXComponent_internal.h */,
-				3B22A18E5F341AE936A1D3CC1FEF1970 /* WXComponent_performance.h */,
-				8F29A64CFE29E3E7B8D20109A625E54C /* WXComponentFactory.h */,
-				4DA93269709E08749ADA71A4BEE50E12 /* WXComponentFactory.m */,
-				42FCCE7C105CBE4356971F79FA152DB9 /* WXComponentManager.h */,
-				610B55D2F796875DB1A15E69EE3984F9 /* WXComponentManager.mm */,
-				9E2F4036A9CDA75EC6288ED53ED093D3 /* WXComponentMethod.h */,
-				200D91352B3E01C1E5761DE502BAD5F2 /* WXComponentMethod.m */,
-				E365D88674D21919E5C129FF9E6DB349 /* WXConfigCenterProtocol.h */,
-				4AB7D019B3AD5CA7BE5187C9C683E604 /* WXConsoleLogModule.h */,
-				9B4820DF6004D336565FE516721F5145 /* WXConsoleLogModule.m */,
-				16075E1C01487783A46F19C5406DF2AA /* WXConvert.h */,
-				FB31B198269F8FBB6A915914E18555CF /* WXConvert.m */,
-				30B18709883CCB3E4CD0A1C5AF32BCB4 /* WXConvertUtility.h */,
-				D25C4F77CA22D450FEFB386350C31235 /* WXConvertUtility.mm */,
-				ECC8BF6B094A7C9FFA5470E9BB27F09C /* WXCoreBridge.h */,
-				AA53005D89D769FC1FAC5550ED45A338 /* WXCoreBridge.mm */,
-				4C17AD96F7B553FA52A1307ACB959303 /* WXCycleSliderComponent.h */,
-				C72258F037CCB7145673CF6935D32136 /* WXCycleSliderComponent.mm */,
-				9B3DE931B94804536D30BC4363F131CF /* WXDataRenderHandler.h */,
-				3385B1D34F74CB514A1F2A1655006FAE /* WXDatePickerManager.h */,
-				FE015013B66B1C0D1995EDC08F00A5DC /* WXDatePickerManager.m */,
-				E1D96880A5828F17A209085D4AD1BAC4 /* WXDebugTool.h */,
-				9D2898C6193F603C6AACEA4442FE4395 /* WXDebugTool.m */,
-				23CB672AD29ABC41BBEF0A26B6CEE88F /* WXDefine.h */,
-				984D30B9661EFB03814689674C0F1DF0 /* WXDestroyProtocol.h */,
-				86033D529181F342549002F8B5D702CD /* WXDiffUtil.h */,
-				C2473D9C2F03BB33BC7E5DC289E4B0C0 /* WXDiffUtil.m */,
-				CB5F42FB40D084DDCA4EC8473056628A /* WXDisplayLinkManager.h */,
-				F59AFE746C72B88C0461CB430CA587B9 /* WXDisplayLinkManager.m */,
-				A72B404DBE085F468042537622F7FCD0 /* WXDisplayQueue.h */,
-				92F658198A67759DF71A31AE1D2CAD5B /* WXDisplayQueue.m */,
-				9B33E706326DE99FB63BB83F6E4AA1BC /* WXDivComponent.h */,
-				750DFD10E8A495F61B73935AD19CEA94 /* WXDivComponent.m */,
-				11B31C576905D32B582E586FF255A41F /* WXDomModule.h */,
-				3090519F9C123B2C4B6396E7E5DE4ADA /* WXDomModule.m */,
-				666B4A6035789E80E60C32EE60633040 /* WXEditComponent.h */,
-				0257FDA68ACC029AEF2F7012CE2AFD5C /* WXEditComponent.mm */,
-				05740E523A72F980E1906F2171A5032E /* WXEmbedComponent.h */,
-				76B75D38A8213F489A5CBBF026B34AC7 /* WXEmbedComponent.m */,
-				D219BEC5F1566DF319D1947A5D472330 /* WXErrorView.h */,
-				9184E6D24ADD5D568A33B6BD00105E0B /* WXErrorView.m */,
-				20092120087E0FEAF7B08C84EE41B1CD /* WXEventModuleProtocol.h */,
-				EE27BB1F53421E393E05A405F3437F1D /* WXExceptionUtils.h */,
-				6BF6CC9E4D9F28D280404A5F355407E6 /* WXExceptionUtils.m */,
-				F8B69F7B70D30D373C51B72B11EC7282 /* WXExtendCallNativeManager.h */,
-				6DC3DA9AC7A31B49D443C2ED3DD38F37 /* WXExtendCallNativeManager.m */,
-				96A4D9E5BE97D1A51D745336410DF427 /* WXExtendCallNativeProtocol.h */,
-				1E966FF29AC3185448F9D07E528DBF8C /* WXFooterComponent.h */,
-				2186A672DBF1C0DB12D9707C76CB93B9 /* WXFooterComponent.m */,
-				2BCCF2C061E7D036DDFC414F0DD6B03F /* WXGlobalEventModule.h */,
-				FBAFD931AB3578887D76A714F51A8F0B /* WXGlobalEventModule.m */,
-				7239E6CF32AD3B30C0FFEDDCC9B1C3EC /* WXHandlerFactory.h */,
-				7AFA95C824F2DD4AF736A025CF479A87 /* WXHandlerFactory.m */,
-				39F3834F47723D84EED3CC378C8AAAA8 /* WXHeaderComponent.h */,
-				14FDDCD854CD4525B09BBDD3FEE7D067 /* WXHeaderComponent.mm */,
-				BEAB0E045C95BC3D42ED5D3630643183 /* WXImageComponent.h */,
-				21BDFAD9337F234ABECCD8DE701F73E9 /* WXImageComponent.m */,
-				BD093F56BE964A8F387425D47F9C4A32 /* WXImgLoaderProtocol.h */,
-				AAC2B58D2ED1E9C4E26C6E4BF6256620 /* WXIndicatorComponent.h */,
-				B9C83629BB33C9B41F69D35A75741B0F /* WXIndicatorComponent.m */,
-				1432ACA44F3B6D33334C40C247745885 /* WXInnerLayer.h */,
-				9A67E094DD5612AC44175A43B54E20F4 /* WXInnerLayer.m */,
-				FE5BF5B835CEF63B9BD060767DFEEE55 /* WXInstanceWrap.h */,
-				143A455A4287C8156DCF9EBB94B1479B /* WXInstanceWrap.m */,
-				185623ADDCAEF1B78D00D450F656AF66 /* WXInvocationConfig.h */,
-				9C5DAD2B178975D5A26898D63156E143 /* WXInvocationConfig.m */,
-				223210E99319E2C7B9B54D6D1EA8B5A0 /* WXJSASTParser.h */,
-				A358FA10C32008617BF04A32A1AA002C /* WXJSASTParser.mm */,
-				F2D0428444543AFAA5A2A2CE0D95AE58 /* WXJSCoreBridge.h */,
-				AB880092824C56A49D57901CD65E01AA /* WXJSCoreBridge.mm */,
-				CD06E9D60922F55E106442C930FA14CD /* WXJSExceptionInfo.h */,
-				2048C284E39B46DC6875AB751338DF32 /* WXJSExceptionInfo.m */,
-				72D51839EB3A1D215E70FF149BDE5AB3 /* WXJSExceptionProtocol.h */,
-				92D447623A67C2C47B857F6161207499 /* WXJSFrameworkLoadDefaultImpl.h */,
-				65831FF2FE7103D27F37E93236459F82 /* WXJSFrameworkLoadDefaultImpl.m */,
-				7E4784D50E23AC2E6D613DCDAC424BFF /* WXJSFrameworkLoadProtocol.h */,
-				A56DEC368C1E3186C5C8C40A8F162AF9 /* WXLayer.h */,
-				5A596DDEC48D6239A9F5FB4D81048103 /* WXLayer.m */,
-				0567567E523BE2BE8694FAEE66DB956B /* WXLength.h */,
-				DB66EDB88715CD1EFE2C0012452C37E8 /* WXLength.m */,
-				D7BEE88703122BADFCDE876F91B19DD0 /* WXListComponent.h */,
-				67C20FBCE28AEC3E471098E04E4C640C /* WXListComponent.mm */,
-				B207BF0B920F8A417A964B7044E8D487 /* WXLoadingComponent.h */,
-				F66E6B5AF6892F01BABE972FEE7060E5 /* WXLoadingComponent.mm */,
-				DD1A2C56D6802C0F770DE2760E972FD0 /* WXLoadingIndicator.h */,
-				627F5382D6E503C3207827F7F3143B2C /* WXLoadingIndicator.m */,
-				136A04B23056E506174EB70F4E7E1B41 /* WXLocaleModule.h */,
-				8F7933A8703F3047330FAE9A708DA24B /* WXLocaleModule.m */,
-				112B0898E015D8CA4C8B6AD8EF6CF72E /* WXLog.h */,
-				ACDB284BD4EB7CF6272A62885F5D1141 /* WXLog.m */,
-				D6B64F41C0C1043EB45370CC555B7405 /* WXMetaModule.h */,
-				A15268E8755E42EB4B47B48545FC948E /* WXMetaModule.m */,
-				A4925003CBAC621EBC5B06C8E2457060 /* WXModalUIModule.h */,
-				617AAA9CFC80584480E9CC7404654BC8 /* WXModalUIModule.m */,
-				B689BD8AE3708DCCD131727DA071B716 /* WXModuleFactory.h */,
-				0836949500BF9C257365910B2EFED23D /* WXModuleFactory.m */,
-				44BDFF70D1F5FD611856D11C3087C56D /* WXModuleMethod.h */,
-				3A4C86C1A4DB1BEFD3FBEFFA5D175592 /* WXModuleMethod.m */,
-				EB6C75125D36ECFD73F8C827D0A31326 /* WXModuleProtocol.h */,
-				299B091BE1D45D0A8336B3AD19D636A6 /* WXMonitor.h */,
-				2FCC4ABBEC608DEABCE4D51762F49CB7 /* WXMonitor.m */,
-				A0CC2AEE31081738EE99D358A939174F /* WXMultiColumnLayout.h */,
-				04D40336C13388583610E573031BEA52 /* WXMultiColumnLayout.m */,
-				36CEA95C1F4AC46AC581889D047CA896 /* WXNavigationDefaultImpl.h */,
-				3DD81240B46499A3B27D5E9A7D2F0FB0 /* WXNavigationDefaultImpl.m */,
-				447B917EA5C822A38458C9D537DD9223 /* WXNavigationProtocol.h */,
-				A9DDD124DF7FF41543F425D91516C84C /* WXNavigatorModule.h */,
-				9AA2DBE9145021C0FB3CAB52E047896F /* WXNavigatorModule.m */,
-				564D8C0EF73E7378C9E89E77EA8AAF33 /* WXNetworkProtocol.h */,
-				3611AA526FB19FB9338F8D3D89F79E81 /* WXPageEventNotifyEvent.h */,
-				C53B2CFE28EB177DB2AA4E4BEF3C1FC0 /* WXPickerModule.h */,
-				93B810B9CA6B20B7D3E49102C3566067 /* WXPickerModule.m */,
-				37E57AD3249A1625EDA6F9853920ECF2 /* WXPolyfillSet.h */,
-				A89404987BBCCC789E77910517E1D66F /* WXPolyfillSet.m */,
-				E86587966ACF3EA9FBE3D7DFC0F66A42 /* WXPrerenderManager.h */,
-				CB090A36501501F36AD1686434685345 /* WXPrerenderManager.m */,
-				5AFFCFBE9C4C4A79AFC4D22626C9AEFC /* WXRecycleListComponent.h */,
-				DB0CD6E027D0E420AA7262D09024E7D6 /* WXRecycleListComponent.mm */,
-				94EAEF4D8E102460F9B2B21C9819DC99 /* WXRecycleListDataManager.h */,
-				AA920997C56ED998FB1AD39A0AAAE2AB /* WXRecycleListDataManager.m */,
-				90D4BE139634554B4E0531CBB6240B27 /* WXRecycleListLayout.h */,
-				F1DC9D2ECA8E4CDB66C0ED152D0BB92E /* WXRecycleListLayout.m */,
-				FA8BD63B5CAFB500E9C5E831D9A30630 /* WXRecycleListTemplateManager.h */,
-				12E1081DA5826CF51ABE16450F257DD3 /* WXRecycleListTemplateManager.m */,
-				9CD57D3CAD159090439CA5B63B3664A7 /* WXRecycleListUpdateManager.h */,
-				B4A8C434F488BCC61C1AFD9B9FC42EC1 /* WXRecycleListUpdateManager.m */,
-				A2159AFF7924B506CDCE0853E5AB19DC /* WXRecyclerComponent.h */,
-				D44562C25CCC664C2E43A6D1402B24E8 /* WXRecyclerComponent.mm */,
-				7B08C974C02C1596DA9A2CC14EFD1F07 /* WXRecyclerDataController.h */,
-				CA059172C822CF234B1D58669067F27E /* WXRecyclerDataController.m */,
-				18B14A37160FC72EA917C2FA3BC4ED32 /* WXRecyclerDragController.h */,
-				0D68D9913F8D80250ABFE3F431482D28 /* WXRecyclerDragController.m */,
-				E19A89559B2D5707F54BB69B9D5FA71F /* WXRecyclerUpdateController.h */,
-				24AEE115677A3A720AAAA1D1BEF39667 /* WXRecyclerUpdateController.m */,
-				49D075A3BE65E5E1B82F6E7D5AE96275 /* WXRefreshComponent.h */,
-				F58E4C1B2D7680BCB8BA41C30E6E4A12 /* WXRefreshComponent.mm */,
-				9DDFEF42700DB9411482A18311825259 /* WXResourceLoader.h */,
-				FF95A539C2D23962ABC23476B61F1103 /* WXResourceLoader.m */,
-				B6D1F6F14EA65C02A6EC32D0D25B897B /* WXResourceRequest.h */,
-				C9F93FC17408203481FC4D176CC5C5F1 /* WXResourceRequest.m */,
-				133256AD05EEF685CA2CE43C1BD10702 /* WXResourceRequestHandler.h */,
-				47BD868D13D85D4B214A47B72089C5AF /* WXResourceRequestHandlerDefaultImpl.h */,
-				8C7739A69CC077AE0B6B901957DD62CC /* WXResourceRequestHandlerDefaultImpl.m */,
-				6353561875456A3926A0A5DF5E22A25F /* WXResourceResponse.h */,
-				DEDB705BCE8A5C13C75CD7CAD99552FB /* WXResourceResponse.m */,
-				F9AF61BE593C7394F8C82ACF2099F638 /* WXRichText.h */,
-				5A329D0C585706FF2B4DFBFD1A620ADA /* WXRichText.mm */,
-				F7E4FACA9BD658B80459CA3AA234999B /* WXRootView.h */,
-				C276466BBB783E7F49667DE5E38840AD /* WXRootView.m */,
-				A4EB4BC36A315A4E63A4D9946E41895D /* WXRootViewController.h */,
-				7C8745742934548267445C335A0FDA6F /* WXRootViewController.m */,
-				6B8CE7D262B386D0CB62ABD24F7F57FF /* WXRoundedRect.h */,
-				93C6428C9EB27AC7A6170769A2B3C3C4 /* WXRoundedRect.mm */,
-				97E19BC05EEC6921A366B70E29674210 /* WXRuleManager.h */,
-				D76B25A6E743F9EF66321AB299AD429B /* WXRuleManager.m */,
-				69CF81A41F02AB7C9DD308EF060EFBE4 /* WXScrollerComponent.h */,
-				3F26A817A3EA5F11E6AEEF477E3E1750 /* WXScrollerComponent.mm */,
-				789A0D66FC2F3DDC0B730D43F95A06E2 /* WXScrollerProtocol.h */,
-				E72931779D644121C2B1D00495012790 /* WXSDKEngine.h */,
-				D0A39EE2393BA3436B4D984D97563A05 /* WXSDKEngine.m */,
-				7D0D64A5A2F7C3F870B6964D50C748ED /* WXSDKError.h */,
-				1ED88C6116C055BA86A2A05826450B36 /* WXSDKError.m */,
-				7E53E4CF0CA9D655D3A22DE7DDF36414 /* WXSDKInstance.h */,
-				6DA9A06FE67407BC9C0786A48CC20007 /* WXSDKInstance.m */,
-				CA9681FE7EED152E1E979ADC3F4A17D1 /* WXSDKInstance_performance.h */,
-				D1A2BCA1F77501B181876E43A67EE18E /* WXSDKInstance_performance.m */,
-				66CCA8129AEBD699E327188C15DD5088 /* WXSDKInstance_private.h */,
-				D47CDADFF153F5E0BF4855B2E85CFB17 /* WXSDKManager.h */,
-				4393261C083761D7ED36FC63755F68C3 /* WXSDKManager.m */,
-				D5C58434E29780929AF6A0CAA8A7B7FB /* WXSectionDataController.h */,
-				D768533A6E5519163DD8531E35723F8D /* WXSectionDataController.m */,
-				DAC4E1B1F1E2F1C17C2836AA9B7EF223 /* WXServiceFactory.h */,
-				283C35FEB00311EC8051F2205D274CFF /* WXServiceFactory.m */,
-				A6ACAC5EF5101105062510C89F7689EE /* WXSimulatorShortcutManager.h */,
-				F1BBC79353A69E390B73F166C87761A5 /* WXSimulatorShortcutManager.m */,
-				0F94B75D0D30B2147571042E32D9FC9A /* WXSliderNeighborComponent.h */,
-				3EC41A8F407F6967BB6C28CA7035AEDD /* WXSliderNeighborComponent.mm */,
-				435FE9BD8BD01F59754D0800669258E4 /* WXStorageModule.h */,
-				52ED316BD2DA7013DC92A959AC245B4F /* WXStorageModule.m */,
-				4425A7F96C7883DA025E19363BC36E01 /* WXStreamModule.h */,
-				9BEF1DF714F80E9161909B07E1574EB6 /* WXStreamModule.m */,
-				A439808F7F3C93FFD507E60E1F6E7220 /* WXSwitchComponent.h */,
-				B35E93F4D19FD5C8479530DD853CDD95 /* WXSwitchComponent.mm */,
-				DED0157F2880BD8D81D53E0CFF9AE445 /* WXTextAreaComponent.h */,
-				21890F185979BBE342F9F81F6809DA57 /* WXTextAreaComponent.mm */,
-				E46C77BC5D6E310D06CF53DA8165DA29 /* WXTextComponent.h */,
-				DB2E1B35A59CFE89F72AFEE3FBA4A652 /* WXTextComponent.mm */,
-				16E4D62210063F373B3A7DFD712D17B4 /* WXTextComponentProtocol.h */,
-				AA094D3EE31E09919B09949BAB42A9E2 /* WXTextInputComponent.h */,
-				0033441CEBBA9F8CE564361515728CAB /* WXTextInputComponent.m */,
-				F796B56AA30C17832F04647ED659C69B /* WXThreadSafeCounter.h */,
-				ACE5D93BA3D18BE1DECFAE0CB38FC57B /* WXThreadSafeCounter.m */,
-				B850A513DFCEFBB0441052B1C32D25E8 /* WXThreadSafeMutableArray.h */,
-				BE79D01A8CE8A44313D53E0BB81BBF14 /* WXThreadSafeMutableArray.m */,
-				34513ECEBDED881ACBB45BA25B85CE3A /* WXThreadSafeMutableDictionary.h */,
-				75DAEBE3413648C49531D6466C165FBE /* WXThreadSafeMutableDictionary.m */,
-				9D73441412DDA375DACFB56F21E2BDEA /* WXTimerModule.h */,
-				6424B32A5552DE209A7B9A15CECF440F /* WXTimerModule.m */,
-				9B12E16DDB67DC5679BC73F3419ABAEA /* WXTransform.h */,
-				34E4E1A88E6A521A4829463E8D736DEC /* WXTransform.m */,
-				D13D1E60A8F808FA4029AE256ECD43D0 /* WXTransition.h */,
-				35E1D9B3C206789807B4B7A962D51CA6 /* WXTransition.mm */,
-				03DFEEE2A49E3645C3B5ABFC2F7A1C0D /* WXType.h */,
-				7A3D029F5B28B2655DC0129087CEB447 /* WXURLRewriteDefaultImpl.h */,
-				26644596A39563E5EB150B978840D629 /* WXURLRewriteDefaultImpl.m */,
-				C3D4D07F2CE4CC3DE205DDAFE6E91E1B /* WXURLRewriteProtocol.h */,
-				6D612333D9AEF8011462885EF49CB5E6 /* WXUtility.h */,
-				02970D9181BC28BD61EFE8787E8A0EDD /* WXUtility.m */,
-				2CF911943BB9F31A51DC8B5E9E897443 /* WXValidateProtocol.h */,
-				7AC8572623E585F7117B671D088D40DC /* WXVersion.h */,
-				AD3EC3FA3CC0FA804AA453A747BA913A /* WXVersion.m */,
-				3B1E2D0CEEC0548ADFBC6179F3039328 /* WXVideoComponent.h */,
-				C5F331A2A2C78473C1AEF149A95C95E1 /* WXVideoComponent.m */,
-				24EB0712F76D4151717F5EFBCC5A22C2 /* WXView.h */,
-				8690814B9B027077FEB7418909C49C45 /* WXView.m */,
-				B8BF7BC74BF3394A6BAD14840EC0ED10 /* WXVoiceOverModule.h */,
-				627025141003ADDC6798C08B8F6B8BD9 /* WXVoiceOverModule.m */,
-				4ADE381C9780F5CE89F4943B6AC048F0 /* WXWeakObjectWrapper.h */,
-				FFB44BFA97525E91FBC24C805B615734 /* WXWeakObjectWrapper.m */,
-				AEE5B062F503E710A7B0FF9D574B5C6E /* WXWebComponent.h */,
-				27539D9B2A2F8389AB26D4D878ED6077 /* WXWebComponent.m */,
-				94EE8131B38FA653CCC9ED66AA9BA821 /* WXWebSocketHandler.h */,
-				99036C848CC8109F98D00CC8D377C3E4 /* WXWebSocketLoader.h */,
-				F10CBD91125D2B179E6A757D7F49D27D /* WXWebSocketLoader.m */,
-				96146728562E7111791D8137B2675569 /* WXWebSocketModule.h */,
-				148C0A519B1C89E4850E3E00D9448EBD /* WXWebSocketModule.m */,
-				E648C0012226B29A77BD9C7E4875A287 /* WXWebViewModule.h */,
-				199EDF992C8E9D6CE0578A0D9A0A6474 /* WXWebViewModule.m */,
-				497E245093EE3B066AD2E58A72A7E86B /* Resources */,
-				D2B9D8328CD830051CB2B44F3AFC2544 /* Support Files */,
-			);
-			name = WeexSDK;
-			path = WeexSDK;
-			sourceTree = "<group>";
-		};
-		3BE3308DC8DAC60543AC03B4A8559DA8 /* Pods-WeexUITestDemo */ = {
-			isa = PBXGroup;
-			children = (
-				E2EC823A9B99B58F35F1F1DF989DAB76 /* Pods-WeexUITestDemo-acknowledgements.markdown */,
-				C39A86D6E5FB933BB697756A876EC226 /* Pods-WeexUITestDemo-acknowledgements.plist */,
-				7BD85BF5B9247B85DC1C8E7E7A5309D0 /* Pods-WeexUITestDemo-dummy.m */,
-				123BC8578B19473F10477E4C0E4E5F4A /* Pods-WeexUITestDemo-resources.sh */,
-				203ECC4B56968AC736E1E08E79CB83FA /* Pods-WeexUITestDemo.debug.xcconfig */,
-				59712A521D4F2FEFA8957E7192AA0282 /* Pods-WeexUITestDemo.release.xcconfig */,
-			);
-			name = "Pods-WeexUITestDemo";
-			path = "Target Support Files/Pods-WeexUITestDemo";
-			sourceTree = "<group>";
-		};
-		3CC9E43B58311C2C15BA284F924AC206 /* core */ = {
-			isa = PBXGroup;
-			children = (
-				06A688D159048C1B3B0414BBF8B33B03 /* alpha_dec.c */,
-				111EED8313B5EE2B91EEB84391D0972B /* alpha_enc.c */,
-				BA453A56E81CD445DBBB1B384BDD205D /* alpha_processing.c */,
-				715557CDE4F7E62560B934E99C1CDD54 /* alpha_processing_mips_dsp_r2.c */,
-				BF4E60480393C1216AB259C86C5CAA24 /* alpha_processing_neon.c */,
-				F6F173BB4E37141D9DB2D5B7C286B95F /* alpha_processing_sse2.c */,
-				A46438F5804B24DCA8AF2A73F9913DFD /* alpha_processing_sse41.c */,
-				9B88E8CF7E1A0DC58DB6CA7DDC604765 /* alphai_dec.h */,
-				7711034F765E54E1C7952B3AAAB8298F /* analysis_enc.c */,
-				69C4EFE7744EFFA2901C2AB394D53F1F /* backward_references_cost_enc.c */,
-				88E443FE62F0AAC79442F122AE65717E /* backward_references_enc.c */,
-				05C66D056B8508B428222B139C089DB8 /* backward_references_enc.h */,
-				1A87E61E44AE36A75F0FD9199501B446 /* bit_reader_inl_utils.h */,
-				1B0DB19EEB288E21C6EF9D7418D9BE6A /* bit_reader_utils.c */,
-				6144DFE729541CC05D668AB56A0C8C2D /* bit_reader_utils.h */,
-				7931DA95A0854204EBE7CB40C654BC90 /* bit_writer_utils.c */,
-				3D7CD9878939528179D5E8F9F17D9FD0 /* bit_writer_utils.h */,
-				646D85D77890218A5B550A382A44D137 /* buffer_dec.c */,
-				24298F19A1B7C09B4A075624E1F22907 /* color_cache_utils.c */,
-				EAB60ED994C33D0DEA94615572C8F132 /* color_cache_utils.h */,
-				B207F58F49115B0D64EE51B7472C0083 /* common_dec.h */,
-				0C7B92AF6207A8B7D132B6D7CF718CE1 /* common_sse2.h */,
-				A6A1D4447B4A075E04F3E22EF4D928A9 /* common_sse41.h */,
-				653D2CE6B6588AD5E23381392157E330 /* config_enc.c */,
-				5046489C1B14B97F68DAD1DCE2668A3B /* cost.c */,
-				C9926682814FF1E15A9B7D65B7B4D92B /* cost_enc.c */,
-				B4759F17AA60ABAB93B88CA8C6BAE732 /* cost_enc.h */,
-				C3A23AEBEA52A6A1803672BE58162E75 /* cost_mips32.c */,
-				6E1F7632079A06CBBCDDC0AEB2425BCD /* cost_mips_dsp_r2.c */,
-				550587F7B36776EA091BAFD1DFBD248B /* cost_neon.c */,
-				272D7861187D1239F9A0129CF84C3EB1 /* cost_sse2.c */,
-				542C32E7949FCF7F9790CFD83139C18C /* cpu.c */,
-				33A69B581574E9CDE434DE2FCE5C7C1B /* dec.c */,
-				3C8D08F25D322FDE225350FC7A4B422F /* dec_clip_tables.c */,
-				6D823BC6FBF42D547E7A6B51552B61E8 /* dec_mips32.c */,
-				4E20432D426F22ABEB931F2C2C78F075 /* dec_mips_dsp_r2.c */,
-				5BAC633A3EB18A51CED030CBB4211826 /* dec_msa.c */,
-				F12794CA188B8756E72C808DB5B15FF6 /* dec_neon.c */,
-				5DCFBD346AA48339E5D5BD6E0990B06C /* dec_sse2.c */,
-				DDD5A6ABEF7ADAFD9FDC205F4B9C55BE /* dec_sse41.c */,
-				AA2D40D1C287FC413460A6DC6CAE1DF6 /* dsp.h */,
-				F7F1797A5D3D2AB6E5916FEC099A70DC /* enc.c */,
-				25CE64303E475BA1EEF4BA43CA848C71 /* enc_mips32.c */,
-				5AD7FF77DCD3E2B67AD9365AA4FDB748 /* enc_mips_dsp_r2.c */,
-				F9F2377788C89DAAB0665DE5379FE597 /* enc_msa.c */,
-				7846D8E21864529759418DF69A0D5F68 /* enc_neon.c */,
-				01A93ED18D0860659F8AFF856EAEBCE6 /* enc_sse2.c */,
-				C2C514C61C1E2D317F737D4B8A2FB6DA /* enc_sse41.c */,
-				34C17278239E13469D8E4A555FEC9366 /* endian_inl_utils.h */,
-				E140E026D95007B0B7214C0A5C2D4993 /* filter_enc.c */,
-				007BB85E9B1B5135F7CF56FCCD44EA20 /* filters.c */,
-				F8BC307A597615C73BE0A922EDBB089E /* filters_mips_dsp_r2.c */,
-				83BDB24013BD3FA58F81DD8BCB45CAC6 /* filters_msa.c */,
-				4FA2A987EDEF13E0979D6412C0087D68 /* filters_neon.c */,
-				FE7655849DF77D42A4153FD758A4E79B /* filters_sse2.c */,
-				BC3D1BA97F230F382845F4539973E4E4 /* filters_utils.c */,
-				6310788601150105C9D7AFF54D45AC39 /* filters_utils.h */,
-				75527C9E9277054C993EF51EA84C7B5E /* frame_dec.c */,
-				0C8211BC38B16DDC3D089439810A4EBB /* frame_enc.c */,
-				22DA81F07007CC8FF313B87A70F21E59 /* histogram_enc.c */,
-				518CA001FC5D00215F85C3AF269D9471 /* histogram_enc.h */,
-				1C2CAAE0879694A751B9750731B80009 /* huffman_encode_utils.c */,
-				240D2ABE7E928662FDF42D1ACAB22922 /* huffman_encode_utils.h */,
-				291C154913498E709C6E54849EAD622C /* huffman_utils.c */,
-				4DC7C7ED35B837AFE897CAF2A34B639D /* huffman_utils.h */,
-				FDFF6B805300FA364E6C98E3DE3657A9 /* idec_dec.c */,
-				0FBACBFBA3244C297DB8F84D1EFB79F2 /* io_dec.c */,
-				F7C85AF26667B580F9FB7DC3B6FCF322 /* iterator_enc.c */,
-				C09BDEBB68F0003C566749B5F51B685C /* lossless.c */,
-				1BCEA8218760EAF4E34BD4C18BE11200 /* lossless.h */,
-				1C7B1FE34508E9A6F0EE043325527E7C /* lossless_common.h */,
-				AB1E97BD0F962C7169D9394B629AB0EB /* lossless_enc.c */,
-				9DF84FEA3D66BD30E8484E90EF59AA53 /* lossless_enc_mips32.c */,
-				890DD6A1D89D152ECBD1C8B4A51C4F4F /* lossless_enc_mips_dsp_r2.c */,
-				D512893F36484D5F1D5044B5AF4D6F75 /* lossless_enc_msa.c */,
-				06BADFC9EF95065C1056A48952B064E8 /* lossless_enc_neon.c */,
-				D77CDE27E38378FFBE513F12AA634272 /* lossless_enc_sse2.c */,
-				8CA9F96A4926437C444BA77F69A6AA28 /* lossless_enc_sse41.c */,
-				22FC4738B8CBEA8C678773DECCBAC239 /* lossless_mips_dsp_r2.c */,
-				49380016F114CC21FE1B7FA7A993882E /* lossless_msa.c */,
-				571B93F54A2BCBE03083DA34E92AE15B /* lossless_neon.c */,
-				226CF447C08734967AA6C899A5EA24B5 /* lossless_sse2.c */,
-				03734C65E2779B2D91D8FDD54981FAFF /* mips_macro.h */,
-				0525C56154294236DD8A4A8285B75037 /* msa_macro.h */,
-				6905518B2D61D6DC628C6DE2B6A5C333 /* near_lossless_enc.c */,
-				255DEA1674DB29A8E5D97B0F7C9619FE /* neon.h */,
-				9C99E728A9A533C7A9A3BADA3C7028E0 /* picture_csp_enc.c */,
-				32ECB3B719AB358C8980CE68B77A86D9 /* picture_enc.c */,
-				23005D6323BAB33DD315DD229B58459E /* picture_psnr_enc.c */,
-				205E2CD48D8D429737C1247D533EBC99 /* picture_rescale_enc.c */,
-				08ADAC195BD0D98F724FF6FA2CFB0177 /* picture_tools_enc.c */,
-				9423EEB5F8BEC4F671E16B5866EE2605 /* predictor_enc.c */,
-				791475048C62E04BFFA13DDFD585AB2F /* quant.h */,
-				0BB2137DAF4202F81F2E0B5169DDF877 /* quant_dec.c */,
-				CDAD20EE1E53587BC603DD93C1099E07 /* quant_enc.c */,
-				910241109EF06A11871B0507F5C9294F /* quant_levels_dec_utils.c */,
-				C50D5BC7C8B5D39FDFDD5AEB9956EBE6 /* quant_levels_dec_utils.h */,
-				D2F658EA57C0897126F3E2CB67E13CA4 /* quant_levels_utils.c */,
-				B00F53DFC9DA3291512DFE28AE03ECEB /* quant_levels_utils.h */,
-				2649E55A8151BC9CDD96FE2DCAFA59C2 /* random_utils.c */,
-				0DD2D2EF91B75353ABA9B99419AD5F0E /* random_utils.h */,
-				C6DA6B9B49ED77F945DAD1352B790172 /* rescaler.c */,
-				0DC85480C6A87E116090A7A9A75E62C6 /* rescaler_mips32.c */,
-				8A163D5274787AA62C72E274E9605BFC /* rescaler_mips_dsp_r2.c */,
-				FA81C53394CF5BE4D692E30C7A4EBDE8 /* rescaler_msa.c */,
-				6B2088C1DBA7F86C9EF057C0A3405C1F /* rescaler_neon.c */,
-				AB0E14C7CCC671578E6F4B2177E05413 /* rescaler_sse2.c */,
-				E31DD62C0A393DADB3975791FF6AA229 /* rescaler_utils.c */,
-				E50E2DE5F6E4A7A22B6192EEAC35F56E /* rescaler_utils.h */,
-				DA2E916E84F581BD243A4496CEE25C8B /* ssim.c */,
-				D39550D554AC475F13E3C088022FA054 /* ssim_sse2.c */,
-				DFF448856886FE98D228409E81BA1F90 /* syntax_enc.c */,
-				3A0845F34055E056A472B52866CBF46A /* thread_utils.c */,
-				A25B42D92E289641AEDB2C67D8CB9D2D /* thread_utils.h */,
-				A12ADDF77A1A1073EC96A49AF21B0E69 /* token_enc.c */,
-				21CA0C12626CD233BE9928CCEC516F8C /* tree_dec.c */,
-				ED0811492D08EAE304004EADA34BAF1C /* tree_enc.c */,
-				A9F3BD312016B2B282FAE79B6731E3A9 /* upsampling.c */,
-				6A51A02B569935B1CFFB3A2BBB877CC3 /* upsampling_mips_dsp_r2.c */,
-				73DC57F20AEAA5E4DF63AEDC15713259 /* upsampling_msa.c */,
-				27613CFAEF1255C7D18B59E63C5E42CD /* upsampling_neon.c */,
-				347B48BE2DE7AA39E77B4985FF0CB421 /* upsampling_sse2.c */,
-				CBF43E904506DADD3C3D93485EB105A2 /* upsampling_sse41.c */,
-				6DF23A16B80C0C56AC8B427B33F53423 /* utils.c */,
-				D3E806FFC70E778A996A8A337CA93916 /* utils.h */,
-				DCEEB6025C9DEE93EFFD35C04EC3BC45 /* vp8_dec.c */,
-				092773D962247C18999DEB541664EEAD /* vp8_dec.h */,
-				18CD26551DBBCA8F223723F703189F32 /* vp8i_dec.h */,
-				F946E76C49CD4C7C497653610E480FA7 /* vp8i_enc.h */,
-				0C7F3E7A56D25FEDC5C6CBCC6064370A /* vp8l_dec.c */,
-				6DB93DB6CDDD37CAF9727C8EA585AF4F /* vp8l_enc.c */,
-				8213A283F898071C6B3AB713DA5D59F7 /* vp8li_dec.h */,
-				DC193672FBD0D56FFB1E4E6C50F535BB /* vp8li_enc.h */,
-				B049E5DA3F941676044E86BC77B5AC31 /* webp_dec.c */,
-				398DC184413965A9E6BDDC6D916A3108 /* webp_enc.c */,
-				26395C471A391381C8934522320DD20A /* webpi_dec.h */,
-				A51C7D884DDD1846281DB33F5D8141A8 /* yuv.c */,
-				E2D2FE19F4BD4D8A8A4A29D3270A400E /* yuv.h */,
-				5E3FB7D2C61813EC676AEC786050D6C9 /* yuv_mips32.c */,
-				2803631DDCDEC6529BB2501F8F0782AE /* yuv_mips_dsp_r2.c */,
-				D51CC840319C797AB5FD7FFB7C300B76 /* yuv_neon.c */,
-				300BF6D3725538D9455F102E779321FA /* yuv_sse2.c */,
-				2C618ABBD3C1BA833345B48FBA24210A /* yuv_sse41.c */,
-			);
-			name = core;
-			sourceTree = "<group>";
-		};
-		45B7DBC322DB8CB0E383647A673181BC /* demux */ = {
-			isa = PBXGroup;
-			children = (
-				9328748E5529451B715F5D65D7D25711 /* anim_decode.c */,
-				8C0130C14A50D4692C4E274EF08841D6 /* demux.c */,
-			);
-			name = demux;
-			sourceTree = "<group>";
-		};
-		497E245093EE3B066AD2E58A72A7E86B /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				C13C84BA0CF7603990D293DCA2F68C64 /* native-bundle-main.js */,
-				557660BC11467BB6F1E7F6CFF55EE651 /* weex-main-jsfm.js */,
-				CABBA49D769F9587D63BED2FB7133BE5 /* weex-polyfill.js */,
-				5B417F5656817FDF2B5F1C42D6D43655 /* weex-rax-api.js */,
-				C332AE7670B0650B31A2C2B5DF41E6D1 /* wx_load_error@3x.png */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		49E656FB2517E5251A05B44306A190D3 /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				565151245CAD893A8C9F933AAFBB89A5 /* ATSDK.bundle */,
-				026A573AE9ECFFF53B96886931AF090C /* en.lproj */,
-				1F9B2EE7CA5394EE77D53D606885DB29 /* zh-Hans.lproj */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		59B6CAD5CA285788FD7A012A733281DA /* Core */ = {
-			isa = PBXGroup;
-			children = (
-				9B824E049218590472D5D433496C8527 /* NSData+ImageContentType.h */,
-				B55F1BFF85B6FE690D9EBDB59F96C0A7 /* NSData+ImageContentType.m */,
-				62865E06BD5FE82A269EB806539EBF3D /* SDImageCache.h */,
-				C702BE05EB93EE2C6E98210A896EEC10 /* SDImageCache.m */,
-				EFF1CE4FD0C3866C40237B065B24BAD0 /* SDWebImageCompat.h */,
-				3741CE1152E8797AADF005063C770CC9 /* SDWebImageCompat.m */,
-				5D25A2BB65D7A2FA732B9352AC72D542 /* SDWebImageDecoder.h */,
-				DDAB11B4F4ED1EA19C1925832E1C5DA5 /* SDWebImageDecoder.m */,
-				B954548ACCEB1BD207CEFDCDF5C7FFBD /* SDWebImageDownloader.h */,
-				4942D5CB93B0A26765B6417510DAB51A /* SDWebImageDownloader.m */,
-				ED74AC691457447841A648E8FF4125F2 /* SDWebImageDownloaderOperation.h */,
-				17544456786A253641CD996B499216B4 /* SDWebImageDownloaderOperation.m */,
-				4078AEE86EC0EE1E361BABF862225D0E /* SDWebImageManager.h */,
-				71DE23F3857F4770A7BED70F231ADF8E /* SDWebImageManager.m */,
-				BA4E8B4BA0C71EE59F8274794E616391 /* SDWebImageOperation.h */,
-				54B83AE7398DA8AB4FED9B3DA57D8DF5 /* SDWebImagePrefetcher.h */,
-				93648363D06CFE1E7BC2B021D1A758B3 /* SDWebImagePrefetcher.m */,
-				C720C9030D814C35BA0CEB180D23EA9A /* UIButton+WebCache.h */,
-				325C6EE3E98249D6808EF6A2F2677B21 /* UIButton+WebCache.m */,
-				AF5155B83910440F59E0CB6066E295BA /* UIImage+GIF.h */,
-				E86809DCD0E6E25DCDC28026B62B28D9 /* UIImage+GIF.m */,
-				03AE9F14E5E306AF858A165FEF8C3C90 /* UIImage+MultiFormat.h */,
-				6A0105F2665EF9E45047B14AF32A325D /* UIImage+MultiFormat.m */,
-				E70FF581CD4D1EEA2B70A725379CF31A /* UIImageView+HighlightedWebCache.h */,
-				FB38E0AB8A212E3F530506289CCCD099 /* UIImageView+HighlightedWebCache.m */,
-				CDCB3E286F4634541246076D8CF97182 /* UIImageView+WebCache.h */,
-				4B02007BB620EF4CCBCD239F3801EE41 /* UIImageView+WebCache.m */,
-				33794D962825042991B57A53B903DA15 /* UIView+WebCacheOperation.h */,
-				9B3F8C4C2A5D953C48863959D51463FC /* UIView+WebCacheOperation.m */,
-			);
-			name = Core;
-			sourceTree = "<group>";
-		};
-		5FFE5D88E7F14CA4B907D82A7813675D /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				57C2392C35D351CEA1445C24962C9BA8 /* ATSDK-Weex.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/ATSDK-Weex";
-			sourceTree = "<group>";
-		};
-		6260DC98749A4AD126DA88C9F9DE2E6D /* webp */ = {
-			isa = PBXGroup;
-			children = (
-				3C369F5080DDE7FDB8DB370D02852FF1 /* decode.h */,
-				753031B9509837B78EA2E9CF5D9A7A06 /* demux.h */,
-				A61733B726794B753DAACFBF03835C0C /* encode.h */,
-				384ACFA2218B5D62758BB73E47231118 /* format_constants.h */,
-				306F7BBE14439945F5BE43E3F4669D3C /* mux.h */,
-				A30702DA138A9877C000FE60574467FB /* mux_types.h */,
-				660D561D446C4B928575C40DC822C970 /* types.h */,
-			);
-			name = webp;
-			sourceTree = "<group>";
-		};
-		6BD97BC47FBFC646278C3F3BEAA539A9 /* SocketRocket */ = {
-			isa = PBXGroup;
-			children = (
-				274CD92DCA5F55E382341134D0006851 /* SRWebSocket.h */,
-				9C3D1BE6B14E09268D56C547DBB84DA8 /* SRWebSocket.m */,
-				EEA0D797F15C08E97576B772BEC72C18 /* Support Files */,
-			);
-			name = SocketRocket;
-			path = SocketRocket;
-			sourceTree = "<group>";
-		};
-		70AC0A955B79C0444475C679DD0F3659 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				9C592507F189366B3EFEC57B844E6A8A /* ATSDK.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		7899CF89C2C52EC8F2181F1BD5607E3D /* SDWebImage */ = {
-			isa = PBXGroup;
-			children = (
-				59B6CAD5CA285788FD7A012A733281DA /* Core */,
-				925F3BD26F6DE9D36D9B7EBE637F5160 /* Support Files */,
-				2761B993BC47E388457C970BA54AE36C /* WebP */,
-			);
-			name = SDWebImage;
-			path = SDWebImage;
-			sourceTree = "<group>";
-		};
-		84195C719FF9EB9FEE832A4CA2ED0189 /* ATSDK-Weex */ = {
-			isa = PBXGroup;
-			children = (
-				70AC0A955B79C0444475C679DD0F3659 /* Frameworks */,
-				49E656FB2517E5251A05B44306A190D3 /* Resources */,
-				5FFE5D88E7F14CA4B907D82A7813675D /* Support Files */,
-			);
-			name = "ATSDK-Weex";
-			path = "ATSDK-Weex";
-			sourceTree = "<group>";
-		};
-		8B5133023EA8CD4F55D71E23D2793BA1 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				C97C2D8D694C42318D0EA1762173E8AE /* WeexPluginLoader.xcconfig */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/WeexPluginLoader";
-			sourceTree = "<group>";
-		};
-		9135AA43EC5BC1E19B4604009146E4B7 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				106AE9D851FB47A67DE44C625C664A2D /* libBindingX.a */,
-				5E4674603A5D5B9215FFA0F8E69F8B71 /* liblibwebp.a */,
-				A68AFCCAF5ECBF5410FC92277629C15B /* libPods-WeexDemo.a */,
-				340740D2A78A4B63D4156B0C630C2B36 /* libPods-WeexUITestDemo.a */,
-				B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */,
-				85A01882ED06DFEA2E0CE78BCDB204A7 /* libSocketRocket.a */,
-				5FA21AC0ED4D577E3E5EA94DEF276BC5 /* libWeexSDK.a */,
-				CF114F13F53C9C80D66E3789184F2751 /* libWXDevtool.a */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		925F3BD26F6DE9D36D9B7EBE637F5160 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				47E1246ED504AD9F3E175BD3F5C47CE4 /* SDWebImage.xcconfig */,
-				3C6B8F91F4BBD13F43F43B52A1BC1BF0 /* SDWebImage-dummy.m */,
-				C77E708A92C07D9210E4C2C27FFDCBE9 /* SDWebImage-prefix.pch */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/SDWebImage";
-			sourceTree = "<group>";
-		};
-		A1DBFACAADDE75137060091FD4E70029 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				9EE2EDFC147BE91EBF817196B3DFAF5A /* WeexPluginLoader.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		A531ABE159C27C6B8CE463A6733D11B6 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				5229B7E34A0C4D04C25FDBBF6F1C8258 /* libwebp.xcconfig */,
-				569187B97800B10B542FCB0DD8F64EF4 /* libwebp-dummy.m */,
-				CA044BA802990D423C23FC0F1D99B143 /* libwebp-prefix.pch */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/libwebp";
-			sourceTree = "<group>";
-		};
-		AC09E6853653F79869011EE8DB402514 /* mux */ = {
-			isa = PBXGroup;
-			children = (
-				A990D0124A773BC8F6B7E397CD5FE5A2 /* anim_encode.c */,
-				FAD123CEC16F07E763151FDEAEBCC39E /* animi.h */,
-				F6034742F532C427028C51F0DC998D90 /* muxedit.c */,
-				7D11BB1F09322EDF174FE9EAF01945AA /* muxi.h */,
-				4D48C9BAA449E4C89E9E20D2D99E32D6 /* muxinternal.c */,
-				DFF336E9135B6D736DE5B404F0A58B17 /* muxread.c */,
-			);
-			name = mux;
-			sourceTree = "<group>";
-		};
-		AE14374FB76D2CC12572DE87F0C9DEA2 /* BindingX */ = {
-			isa = PBXGroup;
-			children = (
-				9652677CE59D391A09DDE5BDC59B5054 /* BindingX.h */,
-				000A3148D8532218CD1BE8F3664E4FD4 /* EBBindData.h */,
-				E76D6895E6BDB4D969177BF71EF59ED4 /* EBBindData.m */,
-				94FCC868F465392DB1DFDF3FEAEDE609 /* EBExpression.h */,
-				56532DCE6BAD2315E1C61960678AF7D9 /* EBExpression.m */,
-				2EE0D4457E656DA4E480129B57A93AE1 /* EBExpressionExecutor.h */,
-				BEC5318C90EF6DA5AC6A751E5CD24BF0 /* EBExpressionExecutor.m */,
-				12EDCF160AE9E7FA1DA250D1B260C7A6 /* EBExpressionGesture.h */,
-				4D787F2AF2771CBA4D62A3D55DAB1B22 /* EBExpressionGesture.m */,
-				D69EBCD5357D23E1A92F315255C0438D /* EBExpressionHandler.h */,
-				1F64149CEF088BC7BEA756DB9C14E80E /* EBExpressionHandler.m */,
-				EBF10CCFD7DC524B871484F99082016E /* EBExpressionOrientation.h */,
-				69E13804D88E5C6DA33A1A4598922618 /* EBExpressionOrientation.m */,
-				00878E679094B955A62AECCDDCDBE803 /* EBExpressionProperty.h */,
-				D1CE3579CE43DD6EFA87DAA975A2B423 /* EBExpressionProperty.m */,
-				5B81E94A295CD27E3DBC06078FAA95D4 /* EBExpressionScope.h */,
-				099719036D28AF9F622D86C346D4F516 /* EBExpressionScope.m */,
-				A031087EDC670D102A82210905E80B93 /* EBExpressionScroller.h */,
-				9F8DA25A9F79BE3039467408957F4C25 /* EBExpressionScroller.m */,
-				851D7AE2CC6068A02A6289B6A4BBF402 /* EBExpressionTiming.h */,
-				79936D43243E99532FE4C61FCF7F8592 /* EBExpressionTiming.m */,
-				88DE4FC80B8F6F56708AE93E3F242D8C /* EBGyroEuler.h */,
-				14CBCCE4F99D5F69E15F12EBAE9738FA /* EBGyroEuler.m */,
-				89E70154B03FA2D7700ABFBF738E1B3F /* EBGyroManager.h */,
-				9D6B9F39211E0C0B8867D6BD4963432F /* EBGyroManager.m */,
-				51840C8A2FE37FAE08E8909CDE06B26B /* EBGyroOrientationEvaluator.h */,
-				CD95057CCD39CC7E5DEC23AF77F19D52 /* EBGyroOrientationEvaluator.m */,
-				AC27B5C7B2E50B9BD88D30451DF8CCFD /* EBGyroQuaternion.h */,
-				BEF5702D8920ECA75E4470937976190C /* EBGyroQuaternion.m */,
-				6E2F4B5FD546A8005197C342FE6BA17F /* EBGyroVector3.h */,
-				4AB0737769CA949732BF4B4E3CF64FD6 /* EBGyroVector3.m */,
-				857E6CA7608808D0C861AD0352EE698A /* EBHandlerFactory.h */,
-				707198A712ABE0EBC96B4E731C4F9A5E /* EBHandlerFactory.m */,
-				D3C1D47E23D40EC5F0276FAFAEA23C30 /* EBJSEase.h */,
-				DE43062A63113606A7D0C0B260010D18 /* EBJSEase.m */,
-				7E6D3071DBD29D08C23E4CE4834630B2 /* EBJSEvaluate.h */,
-				52613ABD5111A2F14AB0F64FD524B4E8 /* EBJSEvaluate.m */,
-				CAE03B7529752B427262D1DD1336C37D /* EBJSMath.h */,
-				864655BAD9E35B09408CC534D6162364 /* EBJSMath.m */,
-				1A5B2EA6097BA9FAF97664B9F83AE742 /* EBJSTransform.h */,
-				069314319B6D8D52871CDC56996EF742 /* EBJSTransform.m */,
-				00143244253DB637A29A922D6B448A57 /* EBNativeFunction.h */,
-				C99222E5BC9EE32C377E1A4B83EB1D09 /* EBNativeFunction.m */,
-				0FAA1A97520D7CB9B5EB68FA01B035B1 /* EBTaffyTuple.h */,
-				E265588009E7FF2C6201A5B244A3FF27 /* EBTaffyTuple.m */,
-				58321BC3499A706BDCDFEF204B68D890 /* EBUtility.h */,
-				835103DFFDC11E2D8D0890952D546563 /* EBUtility.m */,
-				956511B7F9635E0B6DE23683C80C4D40 /* EBUtility+WX.h */,
-				0B29E36763AAFA7A53DC0F146EED41AD /* EBUtility+WX.m */,
-				8C9A1F3EDFAF0689340501C383770EF3 /* EBWXModule.h */,
-				783D9EE973E22466FF9A4F3927A1E325 /* EBWXModule.m */,
-				554829D5B19AFAECF09B35BFE575EA3A /* EBWXOldModule.h */,
-				88FB711AB2764E5E7086C5524C422787 /* EBWXOldModule.m */,
-				2294D500A3076758A84D6376836F99A2 /* EBWXUtils.h */,
-				11546A1027C964C08505C5D468440EA9 /* EBWXUtils.m */,
-				98014BA78AD357BF63EA957B30266405 /* NSObject+EBTuplePacker.h */,
-				20A587592F200521B14E01A246ED763B /* NSObject+EBTuplePacker.m */,
-				F3275DE0205FAF406B520AEEB2F3D2C1 /* Support Files */,
-			);
-			name = BindingX;
-			path = BindingX;
-			sourceTree = "<group>";
-		};
-		AF7158A116CEABFF3BA2AC3C423D0FE0 /* Pods */ = {
-			isa = PBXGroup;
-			children = (
-				84195C719FF9EB9FEE832A4CA2ED0189 /* ATSDK-Weex */,
-				AE14374FB76D2CC12572DE87F0C9DEA2 /* BindingX */,
-				E36442D80606BF889A5E44A2668BE277 /* libwebp */,
-				7899CF89C2C52EC8F2181F1BD5607E3D /* SDWebImage */,
-				6BD97BC47FBFC646278C3F3BEAA539A9 /* SocketRocket */,
-				BC34BD5A9F4F0087256F0BAA39B5DEAA /* WeexPluginLoader */,
-				27F06E45368B1B57B7F5026102A4AFEC /* WeexSDK */,
-				0C836CE41D14D9FFBE1257BE593D114B /* WXDevtool */,
-			);
-			name = Pods;
-			sourceTree = "<group>";
-		};
-		BC34BD5A9F4F0087256F0BAA39B5DEAA /* WeexPluginLoader */ = {
-			isa = PBXGroup;
-			children = (
-				A1DBFACAADDE75137060091FD4E70029 /* Frameworks */,
-				8B5133023EA8CD4F55D71E23D2793BA1 /* Support Files */,
-			);
-			name = WeexPluginLoader;
-			path = WeexPluginLoader;
-			sourceTree = "<group>";
-		};
-		BDBD2A84AE4FB3F98BE06BB0F64FA261 /* Pods-WeexDemo */ = {
-			isa = PBXGroup;
-			children = (
-				C9D3EA58EB020CF8A276B297A5100AD7 /* Pods-WeexDemo-acknowledgements.markdown */,
-				868A683964FD081F51B55F88C7CD6A55 /* Pods-WeexDemo-acknowledgements.plist */,
-				6C880AADFB008B01BA28F9EF8486D76D /* Pods-WeexDemo-dummy.m */,
-				640096C1296D81E11498A694040E6BB8 /* Pods-WeexDemo-resources.sh */,
-				BD247748D4AD18D571015167F4556B0A /* Pods-WeexDemo.debug.xcconfig */,
-				E008E08878C27C01CC3DB44704C7C446 /* Pods-WeexDemo.release.xcconfig */,
-			);
-			name = "Pods-WeexDemo";
-			path = "Target Support Files/Pods-WeexDemo";
-			sourceTree = "<group>";
-		};
-		CF1408CF629C7361332E53B88F7BD30C = {
-			isa = PBXGroup;
-			children = (
-				9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
-				D89477F20FB1DE18A04690586D7808C4 /* Frameworks */,
-				AF7158A116CEABFF3BA2AC3C423D0FE0 /* Pods */,
-				9135AA43EC5BC1E19B4604009146E4B7 /* Products */,
-				0744BC0C5778D2AE9258492A37475DF9 /* Targets Support Files */,
-			);
-			sourceTree = "<group>";
-		};
-		D2B9D8328CD830051CB2B44F3AFC2544 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				8BFF6D0044851BBEBF63E07F07B2E1C7 /* WeexSDK.xcconfig */,
-				F487DCA098BE74D5BD7D677F4B7B143A /* WeexSDK-dummy.m */,
-				F2E5FDAAAAE5CB414AC0B590960240EE /* WeexSDK-prefix.pch */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/WeexSDK";
-			sourceTree = "<group>";
-		};
-		D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		E36442D80606BF889A5E44A2668BE277 /* libwebp */ = {
-			isa = PBXGroup;
-			children = (
-				3CC9E43B58311C2C15BA284F924AC206 /* core */,
-				45B7DBC322DB8CB0E383647A673181BC /* demux */,
-				AC09E6853653F79869011EE8DB402514 /* mux */,
-				A531ABE159C27C6B8CE463A6733D11B6 /* Support Files */,
-				6260DC98749A4AD126DA88C9F9DE2E6D /* webp */,
-			);
-			name = libwebp;
-			path = libwebp;
-			sourceTree = "<group>";
-		};
-		EEA0D797F15C08E97576B772BEC72C18 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				E6AE5A55769F17982E188ABE6A4EDBA7 /* SocketRocket.xcconfig */,
-				CB96A68E717337BDF1B92082C17F10D3 /* SocketRocket-dummy.m */,
-				0F123B6718658F750DF4D8CE87071A33 /* SocketRocket-prefix.pch */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/SocketRocket";
-			sourceTree = "<group>";
-		};
-		F3275DE0205FAF406B520AEEB2F3D2C1 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				D510A7D07FB93CAAEAE8BD348F2C5DAF /* BindingX.xcconfig */,
-				1BC03199F58649AE8FB6790512422A05 /* BindingX-dummy.m */,
-				15C5D864FF3B5BF27D73CF6B232665BF /* BindingX-prefix.pch */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/BindingX";
-			sourceTree = "<group>";
-		};
-		F824FF37903379A0038E1F6D7DD64947 /* Support Files */ = {
-			isa = PBXGroup;
-			children = (
-				EEE446B4190C4FD2F98DA0623C4884C9 /* WXDevtool.xcconfig */,
-				DE840DC09B9AA076A563FE7E62CA818B /* WXDevtool-dummy.m */,
-				79E729EDC1F1651C227A904526BB3071 /* WXDevtool-prefix.pch */,
-			);
-			name = "Support Files";
-			path = "../Target Support Files/WXDevtool";
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		01920D7E26932E90D9322995DD8ECD3C /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				154E8328049700D34F99F993B7F65020 /* alphai_dec.h in Headers */,
-				DD489D280149EA9ECABED6938FA7FD38 /* animi.h in Headers */,
-				3F06961FA642E1D009627417C84849F6 /* backward_references_enc.h in Headers */,
-				7E5A7F482E783F5C2B27025AEB4C6288 /* bit_reader_inl_utils.h in Headers */,
-				2A0DEA6DAAAB302D522F47AD05041716 /* bit_reader_utils.h in Headers */,
-				358CFB68F4A364F01C9207B2D61EFE5F /* bit_writer_utils.h in Headers */,
-				A67E726A0BB237B42E783F055F3AEBFE /* color_cache_utils.h in Headers */,
-				832C034921CE698FA27B09EE37E52C1E /* common_dec.h in Headers */,
-				0394A1267D204A2130A9F2E4499E929A /* common_sse2.h in Headers */,
-				DAFC2AC402FBED1428CBCD3DBA6AD68E /* common_sse41.h in Headers */,
-				D3E9C486BCDAAE52AE37F8A15CD4C17B /* cost_enc.h in Headers */,
-				B92CF5345A2A81794B77730F4AD7DC2B /* decode.h in Headers */,
-				30B83FDA4DD482F45DA74E9E9AD12BF2 /* demux.h in Headers */,
-				F147172E4E0BD85BC6A8D24C42666985 /* dsp.h in Headers */,
-				49F587199B00B7407E63C5C46BE11828 /* encode.h in Headers */,
-				70DCEF2E8E9377662BA8C25EEDBF5E24 /* endian_inl_utils.h in Headers */,
-				5DAD82557768EDECE2F6A695F8D924C7 /* filters_utils.h in Headers */,
-				E548B6CC599F616096A888A8C2DCE8E6 /* format_constants.h in Headers */,
-				B2E4AA86B2E78AEEC4DCD2425DF94877 /* histogram_enc.h in Headers */,
-				43E4977DF492F65C4C4BB83AECB5172B /* huffman_encode_utils.h in Headers */,
-				55D317C2D088035B4B6A591EAC6029A0 /* huffman_utils.h in Headers */,
-				1D4748A1FA8CFC36CED753C8C230D57D /* lossless.h in Headers */,
-				505EDB296D468B6FE6178979188EF225 /* lossless_common.h in Headers */,
-				B0C7E004DA4FFCEF75FE0B57F786C35A /* mips_macro.h in Headers */,
-				F4227BAA7E57D5B5584D67D30FB2B233 /* msa_macro.h in Headers */,
-				4EEF68EF883DDE60DAE3DA8B91432049 /* mux.h in Headers */,
-				56C215C6E8E214B4F65A9306406B9832 /* mux_types.h in Headers */,
-				10A302CE5A419A1D411DE52040FF00E0 /* muxi.h in Headers */,
-				18B7DCB32904488BFD4039DCCB1D0713 /* neon.h in Headers */,
-				D1F9E18ACD245ACF7C4AEECA3FC4F412 /* quant.h in Headers */,
-				FEAA6BFF84C1016FCA2A3AB5A6B8541F /* quant_levels_dec_utils.h in Headers */,
-				C5659ED7E310860850AB7F50A4531D8E /* quant_levels_utils.h in Headers */,
-				3B4FFE6EFC1F5C59C42E6E91B746C260 /* random_utils.h in Headers */,
-				0623CA91E4A137AB8D6B88FE366DEEC4 /* rescaler_utils.h in Headers */,
-				D7033C6C3032645EC92937D3FEFD6DCB /* thread_utils.h in Headers */,
-				C6230A0FFE2066FDA1F4DD69C764B22D /* types.h in Headers */,
-				DB7FA8029499377D2A406A0175FD62A2 /* utils.h in Headers */,
-				48F746ECEECD926994D22209B50C3338 /* vp8_dec.h in Headers */,
-				E5877A4F092B19DD1C7DAC55AC9DE8C0 /* vp8i_dec.h in Headers */,
-				C2AD43F7BE351C65DF27161E1D7DB610 /* vp8i_enc.h in Headers */,
-				23532A70FBFC6F3D7E3F04664FFC732C /* vp8li_dec.h in Headers */,
-				9A45B6BA90F8EBC1999020AFE18CC9E6 /* vp8li_enc.h in Headers */,
-				7BAE62899E7EDAC5FBE7DD1DBC37E2BB /* webpi_dec.h in Headers */,
-				11C7B1309440A17273378AC3EF66D4F3 /* yuv.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		197912FD670836C01D76DD28C3A2F85D /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				0CD87FD98ED2DBE52FDF51BED7FE884E /* BindingX.h in Headers */,
-				227FCBE4A93E170A1096034A69D1A4E4 /* EBBindData.h in Headers */,
-				09EDAEA0E0C531FCC52CBF6749D54339 /* EBExpression.h in Headers */,
-				17EBBEC6F6F0E7E727EA6D1ACF44DF2E /* EBExpressionExecutor.h in Headers */,
-				3EF4289E7A4FE594596D6CA3FBCB9B4A /* EBExpressionGesture.h in Headers */,
-				347293F8A96E04FC13E180265C6C57C6 /* EBExpressionHandler.h in Headers */,
-				BB0C6F21E6E4B72709640B7DE6BB0B58 /* EBExpressionOrientation.h in Headers */,
-				002F5EBE418B277FDE20161216791F91 /* EBExpressionProperty.h in Headers */,
-				7F53C5700C995CFF9163D978F64B7C7D /* EBExpressionScope.h in Headers */,
-				E34103E5E67BB38D5CC5B727CB4A5FD1 /* EBExpressionScroller.h in Headers */,
-				DB68697318E4077E748DFFEC0752AE62 /* EBExpressionTiming.h in Headers */,
-				E9E0FE7128EFAD0CA92CC3D704856C14 /* EBGyroEuler.h in Headers */,
-				7AF4FDD5323F8CC856A83859C975AE17 /* EBGyroManager.h in Headers */,
-				F02F4CA9FA28D89484C7D83AAC53F62C /* EBGyroOrientationEvaluator.h in Headers */,
-				94FC9886E0FE69ED2DDA9E13F1657A03 /* EBGyroQuaternion.h in Headers */,
-				BE293496D7E0ED7DCDC95C2D5376908D /* EBGyroVector3.h in Headers */,
-				F428882567C18CA8A8154C1E8ADCE05E /* EBHandlerFactory.h in Headers */,
-				573C8C01C2D51C972AE62659E7F49DF0 /* EBJSEase.h in Headers */,
-				0F1EE613D07B17A1051F2BF8A24759B5 /* EBJSEvaluate.h in Headers */,
-				FA179409425165826AAE8C73FCE0D76B /* EBJSMath.h in Headers */,
-				463BEED7C2B3C6C9507BCFE4D75E1FF3 /* EBJSTransform.h in Headers */,
-				7F6295FA824F40CDBEA2CE1076FE2C1E /* EBNativeFunction.h in Headers */,
-				713D913E728B60118338ECB0ECDD2A08 /* EBTaffyTuple.h in Headers */,
-				5029F78851269CB0F3250F4D1787CE94 /* EBUtility+WX.h in Headers */,
-				42F6FC8B0AC319ED90D2E0ECBB17BFDB /* EBUtility.h in Headers */,
-				52E2860EAB392A2BAC2AB141E6B29960 /* EBWXModule.h in Headers */,
-				C59121BC592C70AEFC1627C36C2AFBC9 /* EBWXOldModule.h in Headers */,
-				B919D35E36C63753BCC5CA897C0A8A7B /* EBWXUtils.h in Headers */,
-				B86FB306370C50EE0B8BF943281EA402 /* NSObject+EBTuplePacker.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1FD2BF8CEBB1D8F8B006B9C2B9EF19F5 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C9FC0C77E29E00AB773225BB9C12407E /* NSArray+WX_JSONObject.h in Headers */,
-				CA676E6FA080338F94447C662955D21E /* NSArray+WXRuntimePropertyDescriptor.h in Headers */,
-				54230D4A056B740D0F74CDCCDD55CB09 /* NSData+WXDebugger.h in Headers */,
-				BEE9734F18411710F7D6C18CF054092D /* NSDate+WX_JSONObject.h in Headers */,
-				D4338609ADC139674396F26B9FDE7785 /* NSDate+WXDebugger.h in Headers */,
-				AB62F1F08DD787966117B11829E14F05 /* NSDictionary+WXRuntimePropertyDescriptor.h in Headers */,
-				EE52F77E7489B953CABCD888782D41C9 /* NSError+WX_JSONObject.h in Headers */,
-				D63A9DE2794A917EEB41D51CA2D9C7AE /* NSManagedObject+WXRuntimePropertyDescriptor.h in Headers */,
-				2F52A2D64F8D10B4A41B080AAD772047 /* NSObject+WXRuntimePropertyDescriptor.h in Headers */,
-				483607371B0B95D116390AE71C918BA0 /* NSOrderedSet+WXRuntimePropertyDescriptor.h in Headers */,
-				14E9DB12D6B6990E8626236361656085 /* NSSet+WXRuntimePropertyDescriptor.h in Headers */,
-				4E7C1AF288440BE36799B9DDF93EE18C /* WXApplicationCacheDomain.h in Headers */,
-				391220B603537DE608E106772C118C3B /* WXApplicationCacheTypes.h in Headers */,
-				B5460847CD7E3B827BB31A780F42C899 /* WXConsoleDomain.h in Headers */,
-				3B00B4B5A8974AFB97A349618A0652D3 /* WXConsoleDomainController.h in Headers */,
-				ECE8EA71883736F9BD021B97C03D65DD /* WXConsoleTypes.h in Headers */,
-				751303870229ACE7441C4475A4D42428 /* WXContainerIndex.h in Headers */,
-				5E26BAE4AFCC3E3C519D80B90F07F3B3 /* WXCSSDomain.h in Headers */,
-				E14F412BD5E29E9CFACC8F4C646CC73F /* WXCSSDomainController.h in Headers */,
-				224FCC4367429E754DF4E2838D37D0A0 /* WXCSSTypes.h in Headers */,
-				641609B353B4E2F3747EFF6F8EF7A64A /* WXDatabaseDomain.h in Headers */,
-				CC230002393F9284E1C193E387D914BA /* WXDatabaseTypes.h in Headers */,
-				75BEE96DE1FE72527D9C136513F0543C /* WXDebugDomain.h in Headers */,
-				74D9FBC6116BDD4ADED514EA6F3E19E8 /* WXDebugDomainController.h in Headers */,
-				4BD33D1BE0E98829B5E499E3CBD7ACF5 /* WXDebugger.h in Headers */,
-				FD97E7373EDFD46ECDEEAC3C1854ABF8 /* WXDebuggerDomain.h in Headers */,
-				2AE7D6DA80F76CA1119052F6651EFD27 /* WXDebuggerTypes.h in Headers */,
-				BB5F545BC8A2EC12E4A22FCA864508C2 /* WXDebuggerUtility.h in Headers */,
-				F36BC2E6C6E83D50BE7697B56D297488 /* WXDefinitions.h in Headers */,
-				6F1D598840E3C27D8DB60513F10C7225 /* WXDeviceInfo.h in Headers */,
-				4801960C4A94715FB799EDD76937B86F /* WXDevTool.h in Headers */,
-				C38E17CAE0CFB85651C83160FE9C9507 /* WXDevToolType.h in Headers */,
-				20D6F266925E953B1829B38A8ADBABBE /* WXDomainController.h in Headers */,
-				103F07ED6284EE282B4C581A17747C7A /* WXDOMDebuggerDomain.h in Headers */,
-				14B600E341C84EBAF2E61965E97DCB73 /* WXDOMDomain.h in Headers */,
-				E93AE97A9B350C9E12D2C8990396B91F /* WXDOMDomainController.h in Headers */,
-				2E97CF99DD945B639895069D9CA10C42 /* WXDOMStorageDomain.h in Headers */,
-				7AA5247DB316118793DDD11CCA425E91 /* WXDOMStorageTypes.h in Headers */,
-				6E53CE52C85FD2DD26EDC950828C0BD3 /* WXDOMTypes.h in Headers */,
-				49BE99E4F5EE52FFDD768ED611D300A9 /* WXDynamicDebuggerDomain.h in Headers */,
-				A19885FE4816D90654B448E1D476196A /* WXFileSystemDomain.h in Headers */,
-				B5D49E05AFE70CD7E84564ACF7D24185 /* WXFileSystemTypes.h in Headers */,
-				28C24912C9A618CB49E388BB446EC2B0 /* WXIndexedDBDomain.h in Headers */,
-				6825EFD9F75414F0A2A21B8CA041C5E9 /* WXIndexedDBDomainController.h in Headers */,
-				878566CF5C240BB41F114A9FFDD6B994 /* WXIndexedDBTypes.h in Headers */,
-				3B9607B19F30C9CA7A9A3B64FAAB551F /* WXInspectorDomain.h in Headers */,
-				1645611576401314D8A4205F9405AEE3 /* WXInspectorDomainController.h in Headers */,
-				B71DF8094EB2DE85BFFF66FB3A4A21AA /* WXMemoryDomain.h in Headers */,
-				2C121CF474A194BBD953C10397EF08A5 /* WXMemoryTypes.h in Headers */,
-				1B007C74948B540E3250F42D2679207C /* WXMonitorHandler.h in Headers */,
-				C4EA645B76454DF19E94DA94035DC782 /* WXNetworkDomain.h in Headers */,
-				00317C338156CFC816E198AAA966E5AB /* WXNetworkDomainController.h in Headers */,
-				EE77AD8242D31A376DF58BBDC053E515 /* WXNetworkRecorder.h in Headers */,
-				53B1406E5A92E0256487F9CD1C39D82E /* WXNetworkTransaction.h in Headers */,
-				0FE07021FE3BB2E363C0CBA95CF60842 /* WXNetworkTypes.h in Headers */,
-				EA27ADA87C0A571F3101DAA531D91697 /* WXObject.h in Headers */,
-				4EC19B0D26A202E2ACA481133EB261B3 /* WXPageDomain.h in Headers */,
-				8BE25E4717622D4F2ADC4A52944659AE /* WXPageDomainController.h in Headers */,
-				49733C48C444E1072ADCD4EACF72E3CC /* WXPageDomainUtility.h in Headers */,
-				37B07797A215022450447EC19A625D28 /* WXPageTypes.h in Headers */,
-				37ABFBE27CC14D417CC81F0C08F726B6 /* WXPonyDebugger.h in Headers */,
-				39E02EBE6AA4B7E6A8EF9C3136779CB1 /* WXPrettyStringPrinter.h in Headers */,
-				8859360E8080B1FEA729FBFE6C2CCC6F /* WXProfilerDomain.h in Headers */,
-				70E5F9900D98BCC48AC638E9D0FF7DB7 /* WXProfilerDomainController.h in Headers */,
-				9AF873DDB20E3FFC00FB7725F84E9BAE /* WXProfilerTypes.h in Headers */,
-				CA61357C9DBB8D037D38032A9696E68A /* WXResources.h in Headers */,
-				8F9632ED87074B3285F63B2B8102EDDC /* WXRuntimeDomain.h in Headers */,
-				ADA81FB09CEF484928E00FDB705161EC /* WXRuntimeDomainController.h in Headers */,
-				DCCEDBDE2EF24F15961C636BECD3362C /* WXRuntimeTypes.h in Headers */,
-				CF7DBBE79C13D070F4D275187472B8BD /* WXSourceDebuggerDomainController.h in Headers */,
-				9E72F962BD3DD12EE6DDA2A5BAFB1A3C /* WXTimelineDomain.h in Headers */,
-				A4A67B79EEDCC0E1BF8257E323FFBF97 /* WXTimelineDomainController.h in Headers */,
-				538A337C2A45781D73D4B1F3FB7B6DDE /* WXTimelineTypes.h in Headers */,
-				B23A96AB5847AE509944ABC71E14F02A /* WXTracingUtility.h in Headers */,
-				8651C897B11A5E95C8A68664E20ACAFD /* WXWebGLDomain.h in Headers */,
-				4B2C011899DD842116CC2113D2642D99 /* WXWebGLTypes.h in Headers */,
-				ECED674FE2572FDFAD5C632BE2B8CA9B /* WXWorkerDomain.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		2D2F5245D9F2C7C446F445FDC2F5F01C /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		92A0EA4B41EF01E9754A151449C0EDF9 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3F45232F1E2C2ECD11195674572216BE /* SRWebSocket.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A4587C42F5D9B919FF39B3A6EF4E6AB9 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7AFA9F4DEE1FC5C9B5C7212D33107C6F /* closure.h in Headers */,
-				2539C88528AA3249236187BFEF75FFFA /* common.h in Headers */,
-				C21658FE203949C819559C5F2CD62AD7 /* constants_name.h in Headers */,
-				91073BC6DC4B8500A00C03B7B7E5945A /* constants_value.h in Headers */,
-				5CE7009A3BFFE4A7901C43A0EED0D5A3 /* core_constants.h in Headers */,
-				052F834FCF2ED9AD905BF89D81E132BB /* core_environment.h in Headers */,
-				629C8B0CB170BEFCB1D4B92686B4E8EB /* core_side_in_platform.h in Headers */,
-				D5F7FEDDA0070D7804129C4D63BF1D07 /* core_side_in_script.h in Headers */,
-				0095553A0C2D2D75F050D425283F0455 /* css_value_getter.h in Headers */,
-				6CFE32C8DFF453F7E882F14CC4B3ABD8 /* default_request_handler.h in Headers */,
-				3D85F2D5937DB22093332B06986728F6 /* dom_wson.h in Headers */,
-				AB893C5CA47F5CCBF3C4D4419C572780 /* eagle_bridge.h in Headers */,
-				F179E3BB01286CF93F10530BB3DCDDDC /* flex_enum.h in Headers */,
-				891EE209C59270F9D36FF7C504459A5F /* http_module.h in Headers */,
-				272C7EFC2B47CE3D15AE89594A82BB86 /* icu_utf.h in Headers */,
-				939A0E8B33A1C4AA9A435505FF447026 /* JSContext+Weex.h in Headers */,
-				60458B1F3BF4476F3EB055017DE32BB7 /* json11.hpp in Headers */,
-				94F86F635CDA3F8609E2560DF955FE03 /* JsonPage.h in Headers */,
-				DFA8B424E33CC26ED4A8CD3DB2932ED3 /* JsonRenderManager.h in Headers */,
-				C97D131ABE94A9D3BA479927B7912FCE /* JSValue+Weex.h in Headers */,
-				0925C42930D59180C885F3B7951B5D17 /* layout.h in Headers */,
-				BB82AA0C84F8824BFBCF6E2B7C8470E8 /* log_bridge.h in Headers */,
-				90D2ADA35ECBEEDD4BD7279B8EFD4348 /* log_defines.h in Headers */,
-				BD0902FA9DA058B4D905A5E44C813325 /* make_copyable.h in Headers */,
-				096EB2817E47336C34A6E4FE567CA00C /* measure_func_adapter.h in Headers */,
-				7B6BFC5B29FB8662B04224C930A11B5C /* message_loop.h in Headers */,
-				B402F5DC3D7B9CE32B3C563B402A3809 /* message_pump.h in Headers */,
-				D1BCE90E581C3D2B9A33A1CDDB6293DB /* message_pump_darwin.h in Headers */,
-				6ABEF9A1C273A7212274BE904A6BCD02 /* message_pump_posix.h in Headers */,
-				42DE6FCED18BADC7C6317F99A28F008D /* NSArray+Weex.h in Headers */,
-				240DA06626744751E58BCEB2B4DD767C /* NSObject+WXSwizzle.h in Headers */,
-				E52BD03BE8BFD128C16C9F1891AA21C5 /* NSTimer+Weex.h in Headers */,
-				3C5A639FA4E926353AEA4A54955B3F6E /* platform_bridge.h in Headers */,
-				31C5547F89BFD41C69582C4BB779C267 /* render_action_add_element.h in Headers */,
-				35157A63CDAF1173C0BBAD976ED30920 /* render_action_add_event.h in Headers */,
-				503F4922024FD4141D8B901200D5118F /* render_action_appendtree_createfinish.h in Headers */,
-				5020F83FFDED3FDEF75BE18905867B9D /* render_action_createbody.h in Headers */,
-				A62B23068252FBF8D4034B7C9A55A41A /* render_action_createfinish.h in Headers */,
-				5C363E0D90AF8EBCB3F37BAE8EE0EB5D /* render_action_interface.h in Headers */,
-				A4B97BE6223E5A31A9A74393B9D93862 /* render_action_layout.h in Headers */,
-				D02822422B7B2822C68F4DFF3F9E8666 /* render_action_move_element.h in Headers */,
-				8C398072BFA98CD4AF7DF7478C04C263 /* render_action_remove_element.h in Headers */,
-				216914275B74C853D08FFB6BBD4AFD12 /* render_action_remove_event.h in Headers */,
-				3B92CA723D742BAC665AB0AAD9F82AAC /* render_action_render_success.h in Headers */,
-				7B94F31AFF8402665C02818B29758C7F /* render_action_trigger_vsync.h in Headers */,
-				6948777E73B3D24C23A7F1A69F088E31 /* render_action_update_attr.h in Headers */,
-				48351C03EABD8D94E69148C7E1D4598B /* render_action_update_style.h in Headers */,
-				6A1FDABD5021BE9EBCE0BAFD224D981B /* render_appbar.h in Headers */,
-				AF4A1C8195CA917E2DCBFC23866C5771 /* render_appbar_factory.h in Headers */,
-				123A591E375744AFEB32C4C6BAB136D8 /* render_cell.h in Headers */,
-				E7E90D328B7518F8A92D9943B27DFD77 /* render_cell_factory.h in Headers */,
-				CD0DCC672D7C7ED2724BD29454AF6245 /* render_creator.h in Headers */,
-				9837418A5AA467F935AA5284B9530ED6 /* render_factory_interface.h in Headers */,
-				BF83A4E3283A636F35D2F447AA2A0B6F /* render_list.h in Headers */,
-				192BFC5535E0C7568387CBAF23868605 /* render_list_factory.h in Headers */,
-				E6E6425551A06FDFCCB32328F13054FB /* render_manager.h in Headers */,
-				729E4FAA0D82F9BC20321580175A7AE9 /* render_mask.h in Headers */,
-				B2A3C9327704DF5968EDE2F44F3A8AB4 /* render_mask_factory.h in Headers */,
-				9455FD4A05F73D8AAA68A3307FEAB139 /* render_object.h in Headers */,
-				87FF1FF04AD7E1E0B2F7BEA41489F16D /* render_object_interface.h in Headers */,
-				C89F6EFF875C1B78F2E9435A4883345E /* render_page.h in Headers */,
-				4FE54EEE689609F9EE99B0A70CD6E182 /* render_page_base.h in Headers */,
-				71EF932D45672CF55A35A86FA899C4BF /* render_page_custom.h in Headers */,
-				971576ECC64431E5F450C54C0233CE59 /* render_performance.h in Headers */,
-				3F1F565F4BA02DC8D36F014DE72E831C /* render_scroller.h in Headers */,
-				902078221362EA150B8CC91468471EAB /* render_scroller_factory.h in Headers */,
-				ECC57441EC9CE9CDF8EB60E1E01C6127 /* render_target.h in Headers */,
-				D1D1B6244BD9E63613320AD5F1B1A8B9 /* render_text.h in Headers */,
-				1A26769C3A02208B3A2B774B1EB4E757 /* render_text_factory.h in Headers */,
-				9A68937F19EC91EAC6CB7CF572AFE555 /* render_type.h in Headers */,
-				FD6BE9E02E1F896F333E03360F291042 /* request_handler.h in Headers */,
-				99049B90130D929D863E52841D6AA22E /* script_bridge.h in Headers */,
-				C65EF991675592C4FCA6D04A1E1702CE /* simple_render_factory.h in Headers */,
-				27A56E15BD61D85F4C966D757C42FFA1 /* string_util.h in Headers */,
-				1F91301906430C4C28C81599443F7A98 /* style.h in Headers */,
-				FDDCFC534BCB5795131164C0D28302FF /* thread.h in Headers */,
-				93CA508122C92203B50B41A1ECD7C246 /* thread_impl.h in Headers */,
-				A7BD5D6B7E9B00C04947D94F740A35F0 /* thread_impl_darwin.h in Headers */,
-				2F8E359FD93937E02E4FE4CAEA1C988C /* thread_impl_posix.h in Headers */,
-				DF77970004F5CB3B6A2FFCEAF985909D /* thread_local.h in Headers */,
-				1397E2988253366588CC87B4B2215291 /* time_calculator.h in Headers */,
-				0466ADCDE155F1D2BCB6385898F270BE /* time_point.h in Headers */,
-				C6A130A5FAB160507E826DAE8E7FC0B6 /* time_unit.h in Headers */,
-				55816FAE56E97C1A2497A7CC2FABE405 /* time_utils.h in Headers */,
-				5C9E16BCA74D303212B529A4249383FC /* UIBezierPath+Weex.h in Headers */,
-				62CB5551B99683289733CA97117330C7 /* view_utils.h in Headers */,
-				6BEC80D670894EA2BDC2F24E1F60A906 /* waitable_event.h in Headers */,
-				CBC22BEDBCC69157EC03417710D2DA91 /* weex_core_manager.h in Headers */,
-				5F25953DDB33713C5DCC77CDD1943F5C /* WeexApiHeader.h in Headers */,
-				14DC363EFCBE6AF29927069E13D10DCC /* WeexApiValue.h in Headers */,
-				EFF7DC710B802714DF7220A5E0CFA4B0 /* WeexSDK.h in Headers */,
-				8404BE816EDA0AB29594EDB60E044755 /* wson.h in Headers */,
-				98BFC01F3A617E0738F3EE4E9D281853 /* wson_parser.h in Headers */,
-				7662DF1573E8E836AE6F14EBBCCC2EE7 /* wson_util.h in Headers */,
-				B7810782D3E814D8112C64E2F566430A /* wx_api.h in Headers */,
-				EF02B2E3BD16118D6E76F6D89188B64A /* wx_type_define.h in Headers */,
-				64B7564296B42FA0F0DC07F58F19E320 /* WXAComponent.h in Headers */,
-				0B4E2AA290D608B9E9D8F9DDA44EE4DB /* WXAnalyzerCenter+Transfer.h in Headers */,
-				72CBE300070BE7D02E27470ECD74A9F7 /* WXAnalyzerCenter.h in Headers */,
-				CB2B87B8A8C2CC5F349573DCDD34942D /* WXAnalyzerProtocol.h in Headers */,
-				BC11C55134297932FE7A470E4C807AF2 /* WXAnimationModule.h in Headers */,
-				2CF2BD092B8ACB11833354CBFC63EA77 /* WXApmForInstance.h in Headers */,
-				E8B4B0A9AC67AE68DA12766D8504972A /* WXApmProtocol.h in Headers */,
-				16B8AD5ECAA35F3D773927C9C403F13B /* WXAppConfiguration.h in Headers */,
-				EACA0B01A39DAA52B0D8AFDD32DFF3EA /* WXAppMonitorProtocol.h in Headers */,
-				B99408B288CC66CAA4B4AA155AB3F3C4 /* WXAssert.h in Headers */,
-				C93DA7E503A0F5A5ACEFBACEA3CF4A8C /* WXBaseViewController.h in Headers */,
-				9C52FCFFE9F54B6000554E9AE54D8EA0 /* WXBoxShadow.h in Headers */,
-				35F996548FC01A1F914BED875AA65645 /* WXBridgeContext.h in Headers */,
-				E73357B38DFA11DC21851F5DF7933503 /* WXBridgeManager.h in Headers */,
-				9DCF7BE1F2FA099346D5577DB96364AA /* WXBridgeMethod.h in Headers */,
-				348C139C358A5F1F47DF7123D6C4E038 /* WXBridgeProtocol.h in Headers */,
-				1FB3B9CB3908A8ACCF60A72688795C2B /* WXCallJSMethod.h in Headers */,
-				779F55E530552A2CF20A94B52A1FCCBE /* WXCanvasComponent.h in Headers */,
-				8A51663624B064CFB057A81DC8F47E22 /* WXCanvasModule.h in Headers */,
-				8C8039026008BC403E9132D5F283C2B7 /* WXCellComponent.h in Headers */,
-				BADC0923378EE838F947CEF3708F19AA /* WXCellSlotComponent.h in Headers */,
-				7249C560538DF0BBB21F202DD98900D4 /* WXClipboardModule.h in Headers */,
-				509077D620EC967FDB534008267D2D01 /* WXComponent+BoxShadow.h in Headers */,
-				77021D23CB82516015AC370EDE0A69E5 /* WXComponent+DataBinding.h in Headers */,
-				5A41CA1DD0906DFAFAA9C4DF83575ABE /* WXComponent+Display.h in Headers */,
-				A86C11775CDF8C24EC139939B7C479E5 /* WXComponent+Events.h in Headers */,
-				344034DA8409666A775BA162E58173A2 /* WXComponent+Layout.h in Headers */,
-				CE9DAB1F76F35CC628EC9A2C26E6E568 /* WXComponent+Navigation.h in Headers */,
-				A893FF168F5944B67F25149725B4BC98 /* WXComponent+PseudoClassManagement.h in Headers */,
-				376DF8E5D4E861EF09FA06C9E7C4CE6D /* WXComponent+ViewManagement.h in Headers */,
-				9EC4CB5E4752F3DF2C0FFEBD382DB3E9 /* WXComponent.h in Headers */,
-				4309DC925E2246BB81BB75E4F5F0AE63 /* WXComponent_internal.h in Headers */,
-				3BB894F23BC0CB5559EA58A59AEDEDFA /* WXComponent_performance.h in Headers */,
-				AC20A4C9E45E2513C8B1273040247E1C /* WXComponentFactory.h in Headers */,
-				5AD5C158347019955565E37F813111DB /* WXComponentManager.h in Headers */,
-				4670906E2E142E04942D9E421711C045 /* WXComponentMethod.h in Headers */,
-				B35DC09E6F0F54BE932918110BF19D3A /* WXConfigCenterProtocol.h in Headers */,
-				6D8F391646C677E6D9B6D42181C3D3DB /* WXConsoleLogModule.h in Headers */,
-				5A8E0837885FE21ECEA0309B6A787297 /* WXConvert.h in Headers */,
-				377E257153B5014668F609359F2AA8DB /* WXConvertUtility.h in Headers */,
-				CADEAB2BECDA2DBC62581FD469DA0C89 /* WXCoreBridge.h in Headers */,
-				2AD78044A48F9D5852D37F9AD1DFEC3D /* WXCycleSliderComponent.h in Headers */,
-				501AD89BD705E6004AFA85AF129F39E9 /* WXDataRenderHandler.h in Headers */,
-				E399909B1B34D01AB2A546EB6C3DB36F /* WXDatePickerManager.h in Headers */,
-				AB93A9E6CC49F434508AFD3DB767A61C /* WXDebugTool.h in Headers */,
-				F2943133B8D2322524046356383E4E8C /* WXDefine.h in Headers */,
-				D14CEBB08DD519B8D3E8A2097063DA51 /* WXDestroyProtocol.h in Headers */,
-				E9B1C83E3561C0BB189EF940131B0573 /* WXDiffUtil.h in Headers */,
-				C04578AEADCED1F4FCE83892E2683077 /* WXDisplayLinkManager.h in Headers */,
-				57845BA9303BD010CF1A967FBB5EC0E7 /* WXDisplayQueue.h in Headers */,
-				EB4637638FA264C2C091FC8D7A0C2EE9 /* WXDivComponent.h in Headers */,
-				C3E85972F6B8D371E53F1B9C878E7E7C /* WXDomModule.h in Headers */,
-				C98D4A7D6980701D13232AB1E7D0D0ED /* WXEditComponent.h in Headers */,
-				B7D4CF25ECB8CF9420F117810A727A90 /* WXEmbedComponent.h in Headers */,
-				9F6C8F91918923D92E1A0051A9883B50 /* WXErrorView.h in Headers */,
-				6816B339BCD3475DE24A6792B92498DC /* WXEventModuleProtocol.h in Headers */,
-				5A39C9B59B239899B750EF5C159720FD /* WXExceptionUtils.h in Headers */,
-				66F4B24CAFE96670668B03C0063B2769 /* WXExtendCallNativeManager.h in Headers */,
-				E7C409E27BD202799C04A8B12C93E519 /* WXExtendCallNativeProtocol.h in Headers */,
-				19665A3B391CA7CB377F9E3B076D4DD8 /* WXFooterComponent.h in Headers */,
-				2620928DFB5E011D323831002C036287 /* WXGlobalEventModule.h in Headers */,
-				7C1F3B7F9BAE63FD86112D3A32A666DF /* WXHandlerFactory.h in Headers */,
-				8CBC16C0DACB9349F4A5513A0F13E82B /* WXHeaderComponent.h in Headers */,
-				76D5CDE969A7E432A3C908D87C3C4C39 /* WXImageComponent.h in Headers */,
-				3B1257A92D1706288C0CA6A6181EAC29 /* WXImgLoaderProtocol.h in Headers */,
-				3FBE6BA2A2E41BF8CBA10195EC474BF4 /* WXIndicatorComponent.h in Headers */,
-				62F7E11684D1835C86847E5007A27DFD /* WXInnerLayer.h in Headers */,
-				5E558D980DEE34C0114EB60687B15E54 /* WXInstanceWrap.h in Headers */,
-				3BB557216B93FBB6F0DA4A23E12BEB5A /* WXInvocationConfig.h in Headers */,
-				0D59E06448F0C2C7032B8314792E0DA3 /* WXJSASTParser.h in Headers */,
-				6A72B357B6FA7C153C42455703F434E2 /* WXJSCoreBridge.h in Headers */,
-				6671E5217F68B3F824887D86CD2EC1C7 /* WXJSExceptionInfo.h in Headers */,
-				151006CEDE032F021E439ABA12DA4955 /* WXJSExceptionProtocol.h in Headers */,
-				9C935534F2E5C8886E7B93D9A349E074 /* WXJSFrameworkLoadDefaultImpl.h in Headers */,
-				98A055EFA9A53FB6BF540897E136EF59 /* WXJSFrameworkLoadProtocol.h in Headers */,
-				479348A75A0DF855471EBD567D0AF4E7 /* WXLayer.h in Headers */,
-				A21D10EAB8670352C223A370EE343666 /* WXLength.h in Headers */,
-				2FA0212A6BF5A5D22A59F7B6AD9EF7A1 /* WXListComponent.h in Headers */,
-				FFED797FB561D62E4B08FBAFBF341A9B /* WXLoadingComponent.h in Headers */,
-				602BE6814A91035B1663B7DB67B22D8D /* WXLoadingIndicator.h in Headers */,
-				BCAD4986320A78BC51A4C7626338EAD2 /* WXLocaleModule.h in Headers */,
-				005885D8B131E57FAB5AD2A1757DA8A9 /* WXLog.h in Headers */,
-				CE12A7386C9AABB2C9108894A066414B /* WXMetaModule.h in Headers */,
-				5B48C83CE3334A8E0BFC41BE92B094DE /* WXModalUIModule.h in Headers */,
-				89D17B80800AA8496A4664F63F722D25 /* WXModuleFactory.h in Headers */,
-				F09AF3C20636CECFC8384EDA3B89592B /* WXModuleMethod.h in Headers */,
-				8B5BFADD736D66E2877D545B6DBA945B /* WXModuleProtocol.h in Headers */,
-				A630DECBAC2EFF08DE3CED0B03E94795 /* WXMonitor.h in Headers */,
-				FFDE8AB50E05F7B8587AF0531CADF0C9 /* WXMultiColumnLayout.h in Headers */,
-				1E6C053172258EC31C12A53547DA0ECE /* WXNavigationDefaultImpl.h in Headers */,
-				650B3EE017E5ACFBC40110582B7DE3A3 /* WXNavigationProtocol.h in Headers */,
-				30760198DD28AAC7AAA3DF00628B281F /* WXNavigatorModule.h in Headers */,
-				625EC24CD8516E1520701F31D51CE318 /* WXNetworkProtocol.h in Headers */,
-				16E01D648511ED37C37BE06747CE7CCA /* WXPageEventNotifyEvent.h in Headers */,
-				733F47088B04CF802B8D97B0A9880C52 /* WXPickerModule.h in Headers */,
-				B85A746B4510A5AE9D85193E171C0DEF /* WXPolyfillSet.h in Headers */,
-				49522244EE0D71AEA171DCB9418C6BEE /* WXPrerenderManager.h in Headers */,
-				9FAD865DD5F2E657B6565F5174255DA8 /* WXRecycleListComponent.h in Headers */,
-				D9D344EFFBC3161E04DE622629926935 /* WXRecycleListDataManager.h in Headers */,
-				8DF6B13DCCB721C331343B53727DECDE /* WXRecycleListLayout.h in Headers */,
-				76BE3A74C2D0456947975F112C5AC98F /* WXRecycleListTemplateManager.h in Headers */,
-				B30AC6AA2209DEB18D6F74FF9FC2BE7E /* WXRecycleListUpdateManager.h in Headers */,
-				A53B225FE9F2B8AAD8E5588994A2A31A /* WXRecyclerComponent.h in Headers */,
-				303F8E584A657665F00D7B5BFC6D14AC /* WXRecyclerDataController.h in Headers */,
-				114B9A4B71C06E8DEC99D1B8AEA6CBFF /* WXRecyclerDragController.h in Headers */,
-				0008F0E5695535F8363C7D32C3D896BA /* WXRecyclerUpdateController.h in Headers */,
-				B76DB0032B062A50C1152EA8A6F5BCA2 /* WXRefreshComponent.h in Headers */,
-				CEF2AFD4846549CF4140C08F59FEA428 /* WXResourceLoader.h in Headers */,
-				4446B2C5263C762803B45503B1847956 /* WXResourceRequest.h in Headers */,
-				0DE2DE9B3172D688A8E1AD215914E03E /* WXResourceRequestHandler.h in Headers */,
-				1971270DCF06F26D06CFC1D59F74AFAB /* WXResourceRequestHandlerDefaultImpl.h in Headers */,
-				91C46862CD787F7EE7D0BF63AF98AB14 /* WXResourceResponse.h in Headers */,
-				22D0583CEC7DF9387D12B49A5495D4DB /* WXRichText.h in Headers */,
-				2193E59D6C552A4627100BB19E535C7A /* WXRootView.h in Headers */,
-				8D8DA9FEE6F997B912C29262B7E095E0 /* WXRootViewController.h in Headers */,
-				FD84EE4D3D2DF25B38A4EB82C5BC66BA /* WXRoundedRect.h in Headers */,
-				3AD6F924CDC1E7BBF924DB9D4C66A528 /* WXRuleManager.h in Headers */,
-				E661C3EDED07CF7D8C01EC9CCC36C0E3 /* WXScrollerComponent.h in Headers */,
-				46A60FFB4B41DF4AF8BD2D7EBC09D532 /* WXScrollerProtocol.h in Headers */,
-				99F73CAC5D9FE65892F2BE0686CFC6E4 /* WXSDKEngine.h in Headers */,
-				FF6EF7E8594287C7E72E7FD985DB6C3F /* WXSDKError.h in Headers */,
-				925A1AD842962A7F837DF0398CEB3168 /* WXSDKInstance.h in Headers */,
-				FF4141486469E2BFD0AFC19CCC2B54F9 /* WXSDKInstance_performance.h in Headers */,
-				5006B85168DE3874C5CBD97E26314163 /* WXSDKInstance_private.h in Headers */,
-				0F0FD736A0559EF261383A6D2392596D /* WXSDKManager.h in Headers */,
-				0B8747496A4C301612C8E701A498AD5A /* WXSectionDataController.h in Headers */,
-				0E3DC4BF0FAA14A3634569E2EF3C3E47 /* WXServiceFactory.h in Headers */,
-				138DE7DEEC6D5D7FDE217CE8BC341621 /* WXSimulatorShortcutManager.h in Headers */,
-				D682D5084611778FCB605AAB98D6421E /* WXSliderNeighborComponent.h in Headers */,
-				24548FB0E9D176AB1AA95A39BD5742FD /* WXStorageModule.h in Headers */,
-				74AF25D9DFCF4D292C2F06BD2A6616AE /* WXStreamModule.h in Headers */,
-				57003296A61A98C51DE764C37305B7CF /* WXSwitchComponent.h in Headers */,
-				3E48221E5E425473FF854D3B5374AF83 /* WXTextAreaComponent.h in Headers */,
-				F249F111F3392374670E24118FAB8CA8 /* WXTextComponent.h in Headers */,
-				2E49088F724CECC8AAE730768529DE6D /* WXTextComponentProtocol.h in Headers */,
-				07BCF23F159A3195A674657B5F50F424 /* WXTextInputComponent.h in Headers */,
-				2C0703069D6ACFC8EA1F0E4E8958F612 /* WXThreadSafeCounter.h in Headers */,
-				C57F63D3D73CBAA95856496B115EC587 /* WXThreadSafeMutableArray.h in Headers */,
-				F4FDB0ED05D8CC53AB4A862DE4F0AC2D /* WXThreadSafeMutableDictionary.h in Headers */,
-				14D0A0BF938F85E9CD64A337CB32DD18 /* WXTimerModule.h in Headers */,
-				40CE0F305A36BCEEB1D734EC685A287D /* WXTransform.h in Headers */,
-				300B15FCB3127490133E29A6B21A179D /* WXTransition.h in Headers */,
-				262E4ABA069B5C174B73EBA27107EA5A /* WXType.h in Headers */,
-				6C7305ADA965B0A9DB32754687A41384 /* WXURLRewriteDefaultImpl.h in Headers */,
-				1D09C921685230982CA4E3A46FF39E12 /* WXURLRewriteProtocol.h in Headers */,
-				462F42594CFDC05FE883B596497A31F9 /* WXUtility.h in Headers */,
-				0B70A8FB1A72706978E244F530ABD724 /* WXValidateProtocol.h in Headers */,
-				61D4DD050E65AD515BDE2F3DD025F37A /* WXVersion.h in Headers */,
-				709A74F90CCC5C5637D68725F0ADB777 /* WXVideoComponent.h in Headers */,
-				A168702FF0079906C5DEF8A43024236D /* WXView.h in Headers */,
-				EFB2C90BE5099C9AAF0D7D560D046598 /* WXVoiceOverModule.h in Headers */,
-				574A886BE752384526879E8F1B6A22D1 /* WXWeakObjectWrapper.h in Headers */,
-				5483EAB4FC0BE8A17C894E8E5A20D552 /* WXWebComponent.h in Headers */,
-				0854D80624BF98CA539C988A16B93226 /* WXWebSocketHandler.h in Headers */,
-				0298CE80F3BFEBF11B5EB21AEFB34158 /* WXWebSocketLoader.h in Headers */,
-				AD965565CFBEC790E32D27E85D81065E /* WXWebSocketModule.h in Headers */,
-				7EA1E9BFC0898EA1A9262E46747BBF0A /* WXWebViewModule.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E699FC9CB04799F3D87D4E7BCFB00CC8 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F6392DE3AE1D4263F4923867E758BE33 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				2FD57BB44E2A23B956D75FC63B83174B /* NSData+ImageContentType.h in Headers */,
-				95032780AC4C0BDD94C3AA26207CF84A /* SDImageCache.h in Headers */,
-				E68A91180678F4C594B0D8B09716D052 /* SDWebImageCompat.h in Headers */,
-				DDEC0D8AD4BA19A6B759ED83D65611A9 /* SDWebImageDecoder.h in Headers */,
-				A768317D7A116127448EBC34F47BB971 /* SDWebImageDownloader.h in Headers */,
-				37AAABF2A87A1C86ECBC342647F4B7F6 /* SDWebImageDownloaderOperation.h in Headers */,
-				E931B8D3E468929E6ACC9D8405C12AB9 /* SDWebImageManager.h in Headers */,
-				79BA229DB6A788B8BB01868D8D024215 /* SDWebImageOperation.h in Headers */,
-				A9DC89E8562675260B5216513C79DE8E /* SDWebImagePrefetcher.h in Headers */,
-				14AAD6191E253A21C7DF13DD5494AA18 /* UIButton+WebCache.h in Headers */,
-				40DD4526C6EBAC0F6CEE40CE07AD2E1E /* UIImage+GIF.h in Headers */,
-				9A30DC27A05C533E3E9F94C8E345617F /* UIImage+MultiFormat.h in Headers */,
-				DBE7605534E19070F4ACB11DF2521564 /* UIImage+WebP.h in Headers */,
-				6F85D74B05B6462188646EF79EAC92E7 /* UIImageView+HighlightedWebCache.h in Headers */,
-				0FDE625C6378A908BA17C526C2833F59 /* UIImageView+WebCache.h in Headers */,
-				D299B7600D028443BBFC0B52B647003B /* UIView+WebCacheOperation.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 530ACC161CE810EFCA10E318359391EE /* Build configuration list for PBXNativeTarget "SocketRocket" */;
-			buildPhases = (
-				92A0EA4B41EF01E9754A151449C0EDF9 /* Headers */,
-				83201ADE85EA9D8B041C6A9C044894DD /* Sources */,
-				B110AB9D15028EF40A39A0A07E8A34E9 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = SocketRocket;
-			productName = SocketRocket;
-			productReference = 85A01882ED06DFEA2E0CE78BCDB204A7 /* libSocketRocket.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = D8C307A270567F38708D7E0CC74655F5 /* Build configuration list for PBXNativeTarget "SDWebImage" */;
-			buildPhases = (
-				F6392DE3AE1D4263F4923867E758BE33 /* Headers */,
-				14C9F022592984FA862605325F2A50D3 /* Sources */,
-				568EE7E7B898AF800BD92CB9F08C2D60 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				ACFDF06A99C234A5BFC03474BF72348A /* PBXTargetDependency */,
-			);
-			name = SDWebImage;
-			productName = SDWebImage;
-			productReference = B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		47D2E85A78C25869BB13521D8561A638 /* libwebp */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 03506A1912D80F7684D5C1AD17B5B8B2 /* Build configuration list for PBXNativeTarget "libwebp" */;
-			buildPhases = (
-				01920D7E26932E90D9322995DD8ECD3C /* Headers */,
-				44A6412B700B0EF517B7B099CEF61BEA /* Sources */,
-				D2B2600F12CC0149A1C8AEFA54EAFD0D /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = libwebp;
-			productName = libwebp;
-			productReference = 5E4674603A5D5B9215FFA0F8E69F8B71 /* liblibwebp.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		49663250E6A87B489C7A19B827FEB585 /* Pods-WeexDemo */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 30A5437BC5BBB0CD58B024D59B15C9A3 /* Build configuration list for PBXNativeTarget "Pods-WeexDemo" */;
-			buildPhases = (
-				E699FC9CB04799F3D87D4E7BCFB00CC8 /* Headers */,
-				E3E8E83A607C9BCCE24EC94B60232FA6 /* Sources */,
-				0FA1E2DFE3C93C64DFC7011F60C35214 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				E97DE53525DDB7FEFA422A84548D736B /* PBXTargetDependency */,
-				E8B6EBF70E43E692E81B80A1C570E06D /* PBXTargetDependency */,
-				819A96FA107AAA25E07A93FF67C8537B /* PBXTargetDependency */,
-				00F34B96145DA02D92EC0BD33506B0CB /* PBXTargetDependency */,
-				3714835DF649D3BCF0150B5ED074EEC1 /* PBXTargetDependency */,
-				A84FDAE00001C3474A3878366C1FA7AE /* PBXTargetDependency */,
-				7D725D6267AE254DEEC799992D17D7DD /* PBXTargetDependency */,
-				1DB4BBFBB382F53D41D93200786D7FA7 /* PBXTargetDependency */,
-			);
-			name = "Pods-WeexDemo";
-			productName = "Pods-WeexDemo";
-			productReference = A68AFCCAF5ECBF5410FC92277629C15B /* libPods-WeexDemo.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		8CB28739C3769174E2F3B04D16F5FA25 /* Pods-WeexUITestDemo */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 643062A5FD3B39D256EC55297BAC89D7 /* Build configuration list for PBXNativeTarget "Pods-WeexUITestDemo" */;
-			buildPhases = (
-				2D2F5245D9F2C7C446F445FDC2F5F01C /* Headers */,
-				D57CC37552265019239645CEB7048EB9 /* Sources */,
-				C0F0CB1B4570A9576946FCEE6F27579C /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				9413334FF084B23403D57A8C05BD8733 /* PBXTargetDependency */,
-				6201F7198F036BDBD02D0267F546EFA2 /* PBXTargetDependency */,
-				6243DC26619B889CA3407914CB945CBE /* PBXTargetDependency */,
-				D7A7E9A6A459C1E36257551E16FF8DC0 /* PBXTargetDependency */,
-				758302EC936DCD7D8781EB7565532EB8 /* PBXTargetDependency */,
-				521499C1E44A177F72673542E3146D20 /* PBXTargetDependency */,
-				C3688F91D5F72496A00607D01F66148A /* PBXTargetDependency */,
-				5526F0775FD95B2A178336DAABD429DC /* PBXTargetDependency */,
-			);
-			name = "Pods-WeexUITestDemo";
-			productName = "Pods-WeexUITestDemo";
-			productReference = 340740D2A78A4B63D4156B0C630C2B36 /* libPods-WeexUITestDemo.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		ADE3323F1A1577AF39D4E28727906997 /* WXDevtool */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 6C12E0242F857E6143C01D0AC8692B87 /* Build configuration list for PBXNativeTarget "WXDevtool" */;
-			buildPhases = (
-				1FD2BF8CEBB1D8F8B006B9C2B9EF19F5 /* Headers */,
-				7B542B59DAEDD18B7240FFE381616E6C /* Sources */,
-				04A6B87B63A10DB18DF43274A557399E /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				CC489734BCF62E9A66A66A6329A5CE9B /* PBXTargetDependency */,
-				BAB011A6965C073EBE74F51FE6B5DAFD /* PBXTargetDependency */,
-			);
-			name = WXDevtool;
-			productName = WXDevtool;
-			productReference = CF114F13F53C9C80D66E3789184F2751 /* libWXDevtool.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		B461E8D2696AA53B3DD289E7CF6D5D5B /* BindingX */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = F5BA4730ADB6A261FFE0B321748824FB /* Build configuration list for PBXNativeTarget "BindingX" */;
-			buildPhases = (
-				197912FD670836C01D76DD28C3A2F85D /* Headers */,
-				48965152D1BF01301BC48A4E4751E5A0 /* Sources */,
-				F599D5B7F9D7741CA54C397FCE3FEBB8 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				1F0D92BCC52281ED413AB0B209BE780A /* PBXTargetDependency */,
-				59BE5B49D994F638C69220890E069A82 /* PBXTargetDependency */,
-			);
-			name = BindingX;
-			productName = BindingX;
-			productReference = 106AE9D851FB47A67DE44C625C664A2D /* libBindingX.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		BFCAFC5A05D2B40152EEE1A1F1F1DB37 /* WeexSDK */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = E98B876D882137A28265E4263834FE37 /* Build configuration list for PBXNativeTarget "WeexSDK" */;
-			buildPhases = (
-				A4587C42F5D9B919FF39B3A6EF4E6AB9 /* Headers */,
-				F83A61F0F3155B854ED94C235EA7F245 /* Sources */,
-				F4E93E3781F33AD90EE48C42A7A5E7F0 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = WeexSDK;
-			productName = WeexSDK;
-			productReference = 5FA21AC0ED4D577E3E5EA94DEF276BC5 /* libWeexSDK.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastSwiftUpdateCheck = 1100;
-				LastUpgradeCheck = 1100;
-			};
-			buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = en;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-			);
-			mainGroup = CF1408CF629C7361332E53B88F7BD30C;
-			productRefGroup = 9135AA43EC5BC1E19B4604009146E4B7 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				344C7B8851D73171FD3FE521AF9DA956 /* ATSDK-Weex */,
-				B461E8D2696AA53B3DD289E7CF6D5D5B /* BindingX */,
-				47D2E85A78C25869BB13521D8561A638 /* libwebp */,
-				49663250E6A87B489C7A19B827FEB585 /* Pods-WeexDemo */,
-				8CB28739C3769174E2F3B04D16F5FA25 /* Pods-WeexUITestDemo */,
-				3847153A6E5EEFB86565BA840768F429 /* SDWebImage */,
-				1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */,
-				BFA2840E37C9C6EAC3C1E65FF46EA916 /* WeexPluginLoader */,
-				BFCAFC5A05D2B40152EEE1A1F1F1DB37 /* WeexSDK */,
-				ADE3323F1A1577AF39D4E28727906997 /* WXDevtool */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXSourcesBuildPhase section */
-		14C9F022592984FA862605325F2A50D3 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				E02D1DD1D752D9BD3BD2081B6397D787 /* NSData+ImageContentType.m in Sources */,
-				6A5621D99FF07EE45C3DA9D00815A8D7 /* SDImageCache.m in Sources */,
-				0CD6C7CBF8F3F1028822CB7784B3CDF8 /* SDWebImage-dummy.m in Sources */,
-				84BAECFC84069463EA609C94BEBF5C42 /* SDWebImageCompat.m in Sources */,
-				F288AF1A8531D10116F56BA201F7893A /* SDWebImageDecoder.m in Sources */,
-				7B501F25E510175E37BA1BF7CFB6D973 /* SDWebImageDownloader.m in Sources */,
-				054277E287E1108D708766365E7D3E56 /* SDWebImageDownloaderOperation.m in Sources */,
-				CA8B55B43AF540FF252BDDE1AB355137 /* SDWebImageManager.m in Sources */,
-				C28CACF54EE520B36948BAEE8EBFCDC7 /* SDWebImagePrefetcher.m in Sources */,
-				14C2FB4989567A006971DE8438F40647 /* UIButton+WebCache.m in Sources */,
-				E9039B770E7E342F7A79DC73568F5992 /* UIImage+GIF.m in Sources */,
-				6FC1A866D5FD912EAB6DA6E0C529841B /* UIImage+MultiFormat.m in Sources */,
-				C9329756432188145234D96A58C9F921 /* UIImage+WebP.m in Sources */,
-				69FE68738563C27F9F4DCE97A70AB0DE /* UIImageView+HighlightedWebCache.m in Sources */,
-				8415FBEFAEE0F66430B88E51F81D150A /* UIImageView+WebCache.m in Sources */,
-				6180050B8C3B6FE5C01000BF65CF5B17 /* UIView+WebCacheOperation.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		44A6412B700B0EF517B7B099CEF61BEA /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				99F2B7D6D4652602EA0B7BC1DBFD5CCF /* alpha_dec.c in Sources */,
-				29182C02D75127362853CEF2D5A2A6FA /* alpha_enc.c in Sources */,
-				9E3A26737CA72773EDD70BCEBDA0FE9E /* alpha_processing.c in Sources */,
-				7DDC352AD993CA97BC442470526E88A7 /* alpha_processing_mips_dsp_r2.c in Sources */,
-				4F1EA27378C73D8BEDFD13BF40EC5E51 /* alpha_processing_neon.c in Sources */,
-				F21064691D3E928513A837BFA5E18A7F /* alpha_processing_sse2.c in Sources */,
-				725806C1BDD39E428C8CB80A9C3482DA /* alpha_processing_sse41.c in Sources */,
-				7BFF46D1F7948CAF7925CD81E6FE0A03 /* analysis_enc.c in Sources */,
-				0EE11B37D09BC2ADCEB04EBFAD988A46 /* anim_decode.c in Sources */,
-				F0231200BFC5E94D1D6ED7D1956CFEDA /* anim_encode.c in Sources */,
-				385A13B87922D80D1CC95A585E6ACA8E /* backward_references_cost_enc.c in Sources */,
-				4006FAD97D1F9B5614F34087630EB868 /* backward_references_enc.c in Sources */,
-				1F87E56D24399E0DB9FBC867910C155B /* bit_reader_utils.c in Sources */,
-				2CBF91B9DBD7E64DC64AE0010DEE3C73 /* bit_writer_utils.c in Sources */,
-				DD9A36F84A2F74DABE16B2530813677E /* buffer_dec.c in Sources */,
-				2B1366C144E5F5829AE2322E0482C0D7 /* color_cache_utils.c in Sources */,
-				711E275542D5DBABBD13BE564903B283 /* config_enc.c in Sources */,
-				225018A923470E2BAC650E2908DE5F70 /* cost.c in Sources */,
-				080339A79C86A9385DC2E20EC50B9DC8 /* cost_enc.c in Sources */,
-				5AB76F35C7B856385D4D44EC43A75744 /* cost_mips32.c in Sources */,
-				99AE746056BBEE403D958825D80E8C63 /* cost_mips_dsp_r2.c in Sources */,
-				CAC05999EA4EE2B69E7C72F7CEF4D59D /* cost_neon.c in Sources */,
-				8EB85A3151968A1B50750DE95F6C418E /* cost_sse2.c in Sources */,
-				EA5518CE15E7DAB0DF1B608C5FC12101 /* cpu.c in Sources */,
-				FC1EC34093786A54F516384F6D1F7B47 /* dec.c in Sources */,
-				386EEC228723CF221319CEEAF64D2086 /* dec_clip_tables.c in Sources */,
-				4E7065CF1A211CD5117142D274D6AA98 /* dec_mips32.c in Sources */,
-				5D5179A369BAF0FAD10E2D91FC8A93AF /* dec_mips_dsp_r2.c in Sources */,
-				3428811F3957C10EBAA63D32EFD7C06F /* dec_msa.c in Sources */,
-				57402DD943F3E4FAFBE210263A9F220E /* dec_neon.c in Sources */,
-				38E8DD360EA9D3034FFB9FBE9D05A4F9 /* dec_sse2.c in Sources */,
-				1B260C8218ABF1AB5C81F3A1D38B063F /* dec_sse41.c in Sources */,
-				A6CD7128FC641E0985D4462CD54DF5FB /* demux.c in Sources */,
-				9BB2CE5FA9D086AE2783427D159D4623 /* enc.c in Sources */,
-				41163502EB3D0F476E1C6A1687E029BD /* enc_mips32.c in Sources */,
-				315450C60AE3651E485F76AC8515D3FA /* enc_mips_dsp_r2.c in Sources */,
-				2C5F077FF419D6FCB1D30FC570208BC0 /* enc_msa.c in Sources */,
-				B771D36C5CE5576DC26602BE2B784196 /* enc_neon.c in Sources */,
-				5568E5DF3D3E6F22163ACF7A1364340E /* enc_sse2.c in Sources */,
-				0E9598E7A0B41433A321C9D0CB813C5D /* enc_sse41.c in Sources */,
-				5A5B1824CD1E518CD9347CDD56B043D1 /* filter_enc.c in Sources */,
-				FD48EAAAD29D608342A1C34BD31B88CB /* filters.c in Sources */,
-				E4405F02650881FAADBA76FA501BE7FE /* filters_mips_dsp_r2.c in Sources */,
-				D8AB891208EA8E04427E40E563A98BCC /* filters_msa.c in Sources */,
-				CB60AD0D1A8B93D0D18E1443B093A46B /* filters_neon.c in Sources */,
-				ACA4E9453A8A6806370C9C4037A50300 /* filters_sse2.c in Sources */,
-				C23138F72E895CBC9314FCC55FB8B393 /* filters_utils.c in Sources */,
-				82A6CAC61CADB0A34627A416BFED17C2 /* frame_dec.c in Sources */,
-				C701B7167CF9FC865D0B34CEDE63D355 /* frame_enc.c in Sources */,
-				A2870F96B469D31CCF30674E9C166C70 /* histogram_enc.c in Sources */,
-				4869317DD90E8F4C8865E48FB954F4E9 /* huffman_encode_utils.c in Sources */,
-				88199B0426CC5E77C1D7D9AC55FD4BE6 /* huffman_utils.c in Sources */,
-				B5837340D27BE001D05CD639F8703EAD /* idec_dec.c in Sources */,
-				09CFA18C0C61FC94C04E5C29C09697DD /* io_dec.c in Sources */,
-				037D3FF7A81C10C4992E3E2995B0D05E /* iterator_enc.c in Sources */,
-				2478CC4059A6FF3072B29D51D72B5480 /* libwebp-dummy.m in Sources */,
-				D6CFD4955EDB97A1FCD8DCD374A65346 /* lossless.c in Sources */,
-				D81D8F3ECA19DA0061ED39E21BCD3C36 /* lossless_enc.c in Sources */,
-				1C54ED615472F84F23402D71D57AD4F1 /* lossless_enc_mips32.c in Sources */,
-				AACF6262DBE399AFE2C89769F1C57D2F /* lossless_enc_mips_dsp_r2.c in Sources */,
-				65F42903004252F151F6C643EE0119BD /* lossless_enc_msa.c in Sources */,
-				449E1593C869140FFA5709FCA31C8F0B /* lossless_enc_neon.c in Sources */,
-				EBA29E73359E7FBD8E69D95E9065AC65 /* lossless_enc_sse2.c in Sources */,
-				2034619D0C9ABAD7D590D6652FDF8E31 /* lossless_enc_sse41.c in Sources */,
-				C6CA44CFD001CCFE871904776F74C10B /* lossless_mips_dsp_r2.c in Sources */,
-				218C9FD6F9A260A6333EC7EB1A0346DD /* lossless_msa.c in Sources */,
-				51452B6580FFD6589AAD054DD29F965A /* lossless_neon.c in Sources */,
-				C03CB6CBF0937FB67734616A41E7B90E /* lossless_sse2.c in Sources */,
-				2B2E32255B59EFDD71370AC6F900DF9D /* muxedit.c in Sources */,
-				186837C87CD9E9911511BD3C5903C2DB /* muxinternal.c in Sources */,
-				DFBB35B73816810591C24A832228B7ED /* muxread.c in Sources */,
-				8523C5A0992F545992F7B6ECC7027CAA /* near_lossless_enc.c in Sources */,
-				61D2B0275F21555DCFF030E57C4108A5 /* picture_csp_enc.c in Sources */,
-				323035301473FB38ACDFF4AAC13D54BA /* picture_enc.c in Sources */,
-				75421980DF9FB012F20DF973BF5C2127 /* picture_psnr_enc.c in Sources */,
-				0D5F3C552F0BB9830363FD9BF43269A4 /* picture_rescale_enc.c in Sources */,
-				B38FC09D16CEB54364AC4736975198DF /* picture_tools_enc.c in Sources */,
-				F77A32D7508181DBA6D6CD25083C0444 /* predictor_enc.c in Sources */,
-				1E61180E1FF586A793E8E499D5AA6F66 /* quant_dec.c in Sources */,
-				35933844C4E7B4C2227D148AE08A2187 /* quant_enc.c in Sources */,
-				A68C6AC7AE3B3F41E4B527CB5A8263D3 /* quant_levels_dec_utils.c in Sources */,
-				2944D936B2A38004E0DB67562331B82C /* quant_levels_utils.c in Sources */,
-				5FA5FF1082F53F226D93AC40E4C67884 /* random_utils.c in Sources */,
-				A0B64E3F59BF9D33DEFEFCFBB392219F /* rescaler.c in Sources */,
-				8AC2CCDC2B0BBDA476989EA548577AA4 /* rescaler_mips32.c in Sources */,
-				72CC5DE5FC0B6292A21B618A03DFF3BB /* rescaler_mips_dsp_r2.c in Sources */,
-				372370ED90621F6D7FBB33001518D34C /* rescaler_msa.c in Sources */,
-				B327B3FE6A78D33AE41372319B0D74AB /* rescaler_neon.c in Sources */,
-				3EBED9441E342CF77313586C0F3F9526 /* rescaler_sse2.c in Sources */,
-				A342698A00B89CF0C750FF9988E93CDC /* rescaler_utils.c in Sources */,
-				C780A7CC4DB7B1437BD2068962F31304 /* ssim.c in Sources */,
-				274BE3CE00D1175F5DD5E5E36ABF20F5 /* ssim_sse2.c in Sources */,
-				E2FC1D935B196656817D4F2302FFBE87 /* syntax_enc.c in Sources */,
-				4C4457EA759107DF765D756F59FC1689 /* thread_utils.c in Sources */,
-				4C8C25BEC1D6D20DE5BF37B25E80343B /* token_enc.c in Sources */,
-				6D28D2BD1FEC272B28D9435B8B28337D /* tree_dec.c in Sources */,
-				C2FED3268895EE62E7C82A2F82E8D2EE /* tree_enc.c in Sources */,
-				51C33A8B8C8B140D401B0FED38D86879 /* upsampling.c in Sources */,
-				642FCE6CD452F24698FB717555E6ED65 /* upsampling_mips_dsp_r2.c in Sources */,
-				493F41A3B5C4E5EF910BAC83131D101E /* upsampling_msa.c in Sources */,
-				6FBD9C3DD375D708B0E877D65F6E4368 /* upsampling_neon.c in Sources */,
-				FC37617BAF83F7D358A7AF5A11891081 /* upsampling_sse2.c in Sources */,
-				E565E4663904AC099DC82F114E449997 /* upsampling_sse41.c in Sources */,
-				66FDF5EB9F195CDD2ED1605BEC5E910F /* utils.c in Sources */,
-				AD82FC2F604111A2371E51E48C920F73 /* vp8_dec.c in Sources */,
-				9C80FECD534156CEC2D5C0878CB7BE25 /* vp8l_dec.c in Sources */,
-				A356369AD45D8C2FE0EAAF4D20145891 /* vp8l_enc.c in Sources */,
-				57986B2E9DD36CD20557C635BD3B1EA4 /* webp_dec.c in Sources */,
-				D33F4B937CCE359D39C850E875B38E60 /* webp_enc.c in Sources */,
-				CD48A9EF1A7E1AD573ABBDCD13E300CC /* yuv.c in Sources */,
-				A26FCC4812EA05D4E6BF81EBE5C748FC /* yuv_mips32.c in Sources */,
-				00C26CE475F36DDF4DB39724DC708EA0 /* yuv_mips_dsp_r2.c in Sources */,
-				FFACC952E8EBA29C242309829CE68988 /* yuv_neon.c in Sources */,
-				335BE2B558E7CD4364EEDC5698612E6F /* yuv_sse2.c in Sources */,
-				E2B960544591E9CFA094C591985C4E43 /* yuv_sse41.c in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		48965152D1BF01301BC48A4E4751E5A0 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				0C6E4F278A20ED952E28C8001A619CFB /* BindingX-dummy.m in Sources */,
-				E00BEAFA0AFA54243FB416D1BF8F3142 /* EBBindData.m in Sources */,
-				96A64DF2D3BD15BEEE5D569B35EF2C96 /* EBExpression.m in Sources */,
-				2580046CAEB52DF88A9EA427ABAF3AE6 /* EBExpressionExecutor.m in Sources */,
-				68E7777E61D1331537A0EB98FEA08FDC /* EBExpressionGesture.m in Sources */,
-				E010139C3769C278159F28B62D3698D0 /* EBExpressionHandler.m in Sources */,
-				8959BA181C2BD048D5ADDCC9884F827E /* EBExpressionOrientation.m in Sources */,
-				96CF2ED1787DF4011C1DD5C129D42773 /* EBExpressionProperty.m in Sources */,
-				7B0EE3F0918B2366A2C7E190AAC58F25 /* EBExpressionScope.m in Sources */,
-				3D50C764326C64DF4C4D3DFEA3598F10 /* EBExpressionScroller.m in Sources */,
-				73627C8A49274965170D20A32FA81DE6 /* EBExpressionTiming.m in Sources */,
-				66947290D58F4EE2820B17D4EABA17C4 /* EBGyroEuler.m in Sources */,
-				25881B7098EF727852E6AF8C74C7C8C4 /* EBGyroManager.m in Sources */,
-				1E1B5CA681564E78555490B2E414BDD8 /* EBGyroOrientationEvaluator.m in Sources */,
-				F5F0352527DCCBCF8585F103F384D7BB /* EBGyroQuaternion.m in Sources */,
-				932F4FD112340126B88662B34A815EF9 /* EBGyroVector3.m in Sources */,
-				6A67F662D32057D26F433991FE0742A3 /* EBHandlerFactory.m in Sources */,
-				5C10BB2536D2F62EC4DCD5F8B5C1FC8F /* EBJSEase.m in Sources */,
-				ADFA85B5C6F8238ADCC9986AB53D9FFF /* EBJSEvaluate.m in Sources */,
-				FA6579C53279E81157057D8C6251722A /* EBJSMath.m in Sources */,
-				FAEE0E00D277579D41653F011F051307 /* EBJSTransform.m in Sources */,
-				AB4AE40ACB5E63F2ADD133ACFF1A110F /* EBNativeFunction.m in Sources */,
-				FB84D291A5FA20CD71D9CB11CBF6C7B5 /* EBTaffyTuple.m in Sources */,
-				83246FC5140DC214603DDF5991E43984 /* EBUtility+WX.m in Sources */,
-				A807C5CCB59B1B9859E4B317ED2D692E /* EBUtility.m in Sources */,
-				0C11578C900368CAB3399A2325F67ECC /* EBWXModule.m in Sources */,
-				541A354FDC3A9D51FF86A71623A0A13A /* EBWXOldModule.m in Sources */,
-				FB2BD4C0D603CE5990917110586F6B30 /* EBWXUtils.m in Sources */,
-				352F731EA230AF3F7D813A92B062E328 /* NSObject+EBTuplePacker.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7B542B59DAEDD18B7240FFE381616E6C /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				1C380154615BDE3949D2D4B0CE8A64E6 /* NSArray+WX_JSONObject.m in Sources */,
-				2582957D9EF3878307ABE6612B14ED97 /* NSArray+WXRuntimePropertyDescriptor.m in Sources */,
-				853384D3581FD931B1B45628911A867E /* NSData+WXDebugger.m in Sources */,
-				A7DF1DEB2E1E2BD32ED301F3B5EAF134 /* NSDate+WX_JSONObject.m in Sources */,
-				11FD7D458A6E5F111EB35474617BDBCE /* NSDate+WXDebugger.m in Sources */,
-				CDA858E9820419D58C343B958A45BC7F /* NSDictionary+WXRuntimePropertyDescriptor.m in Sources */,
-				C27639533F81280750356E0ACDB4047D /* NSError+WX_JSONObject.m in Sources */,
-				25B0A57FCCBF3AC53C582C6E0E2301D9 /* NSManagedObject+WXRuntimePropertyDescriptor.m in Sources */,
-				3B3578CF1EE9CCF4E5F6E9F2C2037932 /* NSObject+WXRuntimePropertyDescriptor.m in Sources */,
-				8476217B171B1DF59E32787303F7D3CC /* NSOrderedSet+WXRuntimePropertyDescriptor.m in Sources */,
-				4540AD9610409D96874CFF206F55F6A4 /* NSSet+WXRuntimePropertyDescriptor.m in Sources */,
-				1C5A2F3372E29C1B5C13FFB2B841D3F3 /* WXApplicationCacheDomain.m in Sources */,
-				57F7BEFC987396610A814A16C2B58DDE /* WXApplicationCacheTypes.m in Sources */,
-				814C7E5E9ED678F4C70D49697DBB1886 /* WXConsoleDomain.m in Sources */,
-				83FB18E94E546308E4799BF944F913F4 /* WXConsoleDomainController.m in Sources */,
-				FE3897D0F12D8C8FC4D296E1C6ECCA72 /* WXConsoleTypes.m in Sources */,
-				1E3C37FB769BFDC28D1C27435C3C55FF /* WXContainerIndex.m in Sources */,
-				BDEF353F38D69B99417886484453627F /* WXCSSDomain.m in Sources */,
-				1052E2156B8A57CE963E62A79930DEE4 /* WXCSSDomainController.m in Sources */,
-				E6679E06AEEFA44DC8274CFD229B8656 /* WXCSSTypes.m in Sources */,
-				B534AD803F1A9152FB089040078DAAAF /* WXDatabaseDomain.m in Sources */,
-				C20EF5F81C67811054FE406F108F2E6E /* WXDatabaseTypes.m in Sources */,
-				4EB0D5F65E7B2DEA90EE905BD5FC7207 /* WXDebugDomain.m in Sources */,
-				1917146A98100591D1183DA428EF6E1B /* WXDebugDomainController.m in Sources */,
-				F6E4329EBEFFC27A1E876E4DA4E5E5BD /* WXDebugger.m in Sources */,
-				0E4723934BEEA0E4E90FE52954B5585A /* WXDebuggerDomain.m in Sources */,
-				A756161A94D252AD959AFCDF257FED99 /* WXDebuggerTypes.m in Sources */,
-				897BD088FCB389B1D0D5EC028DBC00F6 /* WXDebuggerUtility.m in Sources */,
-				A436D73E66DBBA3DAE4F2E678A30C856 /* WXDefinitions.m in Sources */,
-				CD5DBAE7B3B072F4744E4B70D3AB89CB /* WXDeviceInfo.m in Sources */,
-				2AE985FB5D8644D06EF881733E23F7BF /* WXDevtool-dummy.m in Sources */,
-				3104507B6FF6891F188A273FA016AEC6 /* WXDevTool.m in Sources */,
-				7F6D64BDA870B1EC098828FA506DD6BC /* WXDevToolType.m in Sources */,
-				D4C7AE1536AA3783040D0C0A5F050489 /* WXDomainController.m in Sources */,
-				E61F2DE01D23BB6DE7298AD95A2795A5 /* WXDOMDebuggerDomain.m in Sources */,
-				65200BF318FE306ACA989946346A5F16 /* WXDOMDomain.m in Sources */,
-				B4D9AF81FC96FA4961085EC41145EEFC /* WXDOMDomainController.m in Sources */,
-				912DE293217148031788CBD195995992 /* WXDOMStorageDomain.m in Sources */,
-				0AE98463BA4DDA001C828B4199FBEB77 /* WXDOMStorageTypes.m in Sources */,
-				EB46620328B7FB5C6C550299E75FA3DC /* WXDOMTypes.m in Sources */,
-				9D68E82B34C37BB00A54920CA7742A20 /* WXDynamicDebuggerDomain.m in Sources */,
-				9B2241FA02747C742B9D4EA9F184C56B /* WXFileSystemDomain.m in Sources */,
-				0FF6A72C4F8640E264F0F605B40E1F99 /* WXFileSystemTypes.m in Sources */,
-				9F49AE1346A0052F565E881FB68B4B76 /* WXIndexedDBDomain.m in Sources */,
-				A3072210A2F3EDC3F142A338B6B83F19 /* WXIndexedDBDomainController.m in Sources */,
-				12315C5A5A49BF92D53228E184EE6AF7 /* WXIndexedDBTypes.m in Sources */,
-				783D855FE091416D85FEDFF5CAD49896 /* WXInspectorDomain.m in Sources */,
-				01213BF4E6990408907BFF3FBC6BB2AE /* WXInspectorDomainController.m in Sources */,
-				291565FEFEAD069F39819C412771166C /* WXMemoryDomain.m in Sources */,
-				C6F428D06AB6A4CBD4122B7A5CB057ED /* WXMemoryTypes.m in Sources */,
-				FB8D3DC1550771EEF1D546C0B44096F3 /* WXMonitorHandler.m in Sources */,
-				DE9FB35560633B995DE146D314FA66AF /* WXNetworkDomain.m in Sources */,
-				FEB0E6237876735FC9BBAE527218AC8A /* WXNetworkDomainController.m in Sources */,
-				11BE3D8D97A48A0D8C6A2ED75E322D45 /* WXNetworkRecorder.m in Sources */,
-				DB361926437DC2E9E4437B6FACD6BAF4 /* WXNetworkTransaction.m in Sources */,
-				F4AB448CAEE2DD0E19992D66612F4AAF /* WXNetworkTypes.m in Sources */,
-				7CE376F61914264AFAE1E17111BE48AC /* WXObject.m in Sources */,
-				E93CD033B4044520B543A9CCCAE48A62 /* WXPageDomain.m in Sources */,
-				2A1901BFC18961B57BCE7187887AF0A2 /* WXPageDomainController.m in Sources */,
-				A7D6217809EE229AD323C4537514EA84 /* WXPageDomainUtility.m in Sources */,
-				AA19A4C29A218D1711E7723352AC6BE1 /* WXPageTypes.m in Sources */,
-				235C86BF9797141DC315894C231C44EF /* WXPrettyStringPrinter.m in Sources */,
-				DA32300C594EE9701E15D6AC55C8EA80 /* WXProfilerDomain.m in Sources */,
-				F59983BE5428D20A1BC30EF730A0E9E5 /* WXProfilerDomainController.m in Sources */,
-				39EADCB319D169D77760B263B1DC5E8E /* WXProfilerTypes.m in Sources */,
-				C49D2FCA31B5C905ADC1E41980FFE1D0 /* WXResources.m in Sources */,
-				B9C1A1CCECE87B1227B2656F5836520B /* WXRuntimeDomain.m in Sources */,
-				C7E0C7C42492270800567E32C6C339C0 /* WXRuntimeDomainController.m in Sources */,
-				65E84018B63EBA002ECA0DB9F6FAC78A /* WXRuntimeTypes.m in Sources */,
-				74F9BE45A88D518360319C4F0432F9B5 /* WXSourceDebuggerDomainController.m in Sources */,
-				320DFB81FF25B4B4ACC81AA81777A401 /* WXTimelineDomain.m in Sources */,
-				71CB9AF5D3FC020351882977A6058B82 /* WXTimelineDomainController.m in Sources */,
-				F499A940F6D557A593790298831C487C /* WXTimelineTypes.m in Sources */,
-				48ADCD77A3798A824518B6F22D633DB8 /* WXTracingUtility.m in Sources */,
-				9FCA0D054B5D038EA7F87D862B63D1EE /* WXWebGLDomain.m in Sources */,
-				13725B0FB567CFD891E68E5E6E74273F /* WXWebGLTypes.m in Sources */,
-				0E88FFF4DCE1CBC0E31403F69A059B24 /* WXWorkerDomain.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		83201ADE85EA9D8B041C6A9C044894DD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C882711624091B5499025CB261BAC5ED /* SocketRocket-dummy.m in Sources */,
-				6F9E496D324685D00E43F90B91E98612 /* SRWebSocket.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D57CC37552265019239645CEB7048EB9 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				9A6A575C72C08BDF6A58E6722218F910 /* Pods-WeexUITestDemo-dummy.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E3E8E83A607C9BCCE24EC94B60232FA6 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				CD0A31AF1D5566C43A9EF991AD8825D8 /* Pods-WeexDemo-dummy.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F83A61F0F3155B854ED94C235EA7F245 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				330B7CFCC2705309236BBADCB0C94A71 /* core_environment.cpp in Sources */,
-				9303DE59DB1F78ADBC83BB893F3FA095 /* core_side_in_platform.cpp in Sources */,
-				89387F5E9DB94703806F061A3719005F /* core_side_in_script.cpp in Sources */,
-				8033D2B991CDAA5C1B87B62FC9C77BE0 /* css_value_getter.cpp in Sources */,
-				270E69570A588B5D3C64B9B05C585322 /* default_request_handler.mm in Sources */,
-				842CEFCBCCE3C23931F462B15D57E3CF /* dom_wson.cpp in Sources */,
-				3091866C29573E2DBA3A1D66047C4421 /* eagle_bridge.cpp in Sources */,
-				9D2540416C6BA8530505928BE6187325 /* http_module.cc in Sources */,
-				0FA6DD8851BFA29EEE881911036CA47C /* icu_utf.cpp in Sources */,
-				FBB51602CFBF16AF836CEE8C96DA0142 /* JSContext+Weex.m in Sources */,
-				F9DD68E1E06887975E53CAEE9EB3D459 /* json11.cc in Sources */,
-				F63BEF2FD2F67689D5401C5DBEC88805 /* JsonPage.cpp in Sources */,
-				78E37D50691E50F6A1C166C1DEF5E30F /* JsonRenderManager.cpp in Sources */,
-				EFBE327913DC71BF903E2547D4BD051D /* JSValue+Weex.m in Sources */,
-				BC882A3D41CFC73A47B7F9B107969F12 /* layout.cpp in Sources */,
-				BF88F65C7B6A72D1704922504A265D2D /* log_defines.cpp in Sources */,
-				79A640C073AE17B507B24BB07AF8EADF /* message_loop.cc in Sources */,
-				2C09990247803FFA0EEF127C40097FE8 /* message_pump_darwin.cc in Sources */,
-				95DEDBA82B5D953A91CF96EDF8E08EB3 /* message_pump_posix.cc in Sources */,
-				8B0A25576E15A797332087851D5E7541 /* NSArray+Weex.m in Sources */,
-				282B128FB22FA7AB25DCC901B14276BA /* NSObject+WXSwizzle.m in Sources */,
-				8988AEE9F394E3E1BE147420FB86D07A /* NSTimer+Weex.m in Sources */,
-				8A49EBDA0A8452D7A925F3EAA9818F44 /* render_action_add_element.cpp in Sources */,
-				81A0AE9B81E3016B366A2839EE22032E /* render_action_add_event.cpp in Sources */,
-				F69BDF08D316EFE28F9042F406CFCAEF /* render_action_appendtree_createfinish.cpp in Sources */,
-				AE0BE9A2ED9C638215F9EA8DAC609424 /* render_action_createbody.cpp in Sources */,
-				61093A3919E468B4ED3E2D5D19B9E5F7 /* render_action_createfinish.cpp in Sources */,
-				DDDADBA774576FACE93E92C38123AE89 /* render_action_layout.cpp in Sources */,
-				9CA0A8A9B3CE5CE0F57091E063EB652E /* render_action_move_element.cpp in Sources */,
-				291FB26563C7AD7636FB2D52BE01BE18 /* render_action_remove_element.cpp in Sources */,
-				289923F072DD0F5BF251C860077BB8DA /* render_action_remove_event.cpp in Sources */,
-				81F2352389DB1F8C8B6D05CF7712C82B /* render_action_render_success.cpp in Sources */,
-				BEA5103212F2B3A8629CB5AF9F724C63 /* render_action_trigger_vsync.cpp in Sources */,
-				5BA552F297A3D10D67BD0B881E9FD7C7 /* render_action_update_attr.cpp in Sources */,
-				658DFD069844E2FE953C6BEF46ADD6D2 /* render_action_update_style.cpp in Sources */,
-				2D85E95E6DF934467B75E6ED555B71A9 /* render_appbar.cpp in Sources */,
-				F0668257AF90F31890EE1704AB0F3B3A /* render_creator.cpp in Sources */,
-				F3CCEB7D1DA1F2184B5975F5C969B208 /* render_list.cpp in Sources */,
-				04121156D9B04092FD726F284F7207D0 /* render_manager.cpp in Sources */,
-				2BFCB2D33094DA821815CEB4DBEFF7CC /* render_mask.cpp in Sources */,
-				92B31FE8DC9A09F2AA060501AB63DFB8 /* render_object.cpp in Sources */,
-				8ECA402ACDB928628FFC26E5BD9CDC9E /* render_page.cpp in Sources */,
-				99FD1CFE8543EB978B5E042E76518936 /* render_page_base.cpp in Sources */,
-				CE5EDD1DC832AB3AFE9BC8EB914B61F1 /* render_page_custom.cpp in Sources */,
-				269EECFCEE1C29567E1F11F3ECF02090 /* render_performance.cpp in Sources */,
-				B72B925494DB3C2986C1E6D6F2B25A6E /* render_scroller.cpp in Sources */,
-				3FADCBF79CE365F21F7EA184C25742F5 /* render_target.cpp in Sources */,
-				211D2E5200681680825E25B2DFEF37A9 /* render_text.cpp in Sources */,
-				849FACE8A8BD4E53423EAC292E8B0FB1 /* style.cpp in Sources */,
-				E83B362C91915D4F17CE80B5483DEC81 /* thread_impl_darwin.cc in Sources */,
-				7F22E04F1D10017F0C24B4E24CDA6B07 /* thread_impl_posix.cc in Sources */,
-				4749C93CE9F9FF091FA44B8348AB251C /* time_point.cc in Sources */,
-				2180FD9B893890A000052C17F4A8EE9C /* UIBezierPath+Weex.m in Sources */,
-				1E34C209BAD0E7EB34EDD47CF8DF9AD5 /* WeexSDK-dummy.m in Sources */,
-				EFB9097ABD0AFD6D9E59002418C7DB17 /* wson.c in Sources */,
-				B440D1105CD4191D1E622928C87E6EAC /* wson_parser.cpp in Sources */,
-				FFD3574114ABB4C7FE340B42E56F8E71 /* wson_util.cpp in Sources */,
-				33CCD80DA3222F78E38EFB0BD1FEE923 /* WXAComponent.m in Sources */,
-				DB311B7222FA4352EF59FEA00E08466D /* WXAnalyzerCenter.m in Sources */,
-				C15A8D1D2671D7B40D048F46E1E43426 /* WXAnimationModule.m in Sources */,
-				B4708D69418FBAD52E5EACB0B7CA0473 /* WXApmForInstance.m in Sources */,
-				98D10FEAEBCA5FEF4FD9F399BC991B75 /* WXAppConfiguration.m in Sources */,
-				8D07D02B0B19AD177CB1700FBE3B4953 /* WXAssert.m in Sources */,
-				D5F5C717342E92806A9FB356C71B5825 /* WXBaseViewController.m in Sources */,
-				E4F118FCD8C830B0F581C326A3B47253 /* WXBoxShadow.m in Sources */,
-				75A90D8AB048A5B6620DE537FB726C06 /* WXBridgeContext.m in Sources */,
-				B5613AB1A5F76D3A46115BFDC8596331 /* WXBridgeManager.m in Sources */,
-				6D86903E739B4318BCC32AC7C445A33F /* WXBridgeMethod.m in Sources */,
-				07FFF35D4F3C3543B9A6E982AC61374E /* WXCallJSMethod.m in Sources */,
-				AD3226A64CA17654AFC3804BA87DDD70 /* WXCanvasComponent.m in Sources */,
-				407518D21EDA8CD0E23B6013A96064F2 /* WXCanvasModule.m in Sources */,
-				565B9C4AAB8F06C897435F92C50B578E /* WXCellComponent.mm in Sources */,
-				F28C8BBD0F27A2DA3BE6D697488B7D4A /* WXCellSlotComponent.mm in Sources */,
-				19CE02A57F241BC56C3AED22D4649A1B /* WXClipboardModule.m in Sources */,
-				216A64F19F922E17EF4F2CC3B8D83648 /* WXComponent+BoxShadow.m in Sources */,
-				C3A8B10C06E47B74FE1050FADC797F0C /* WXComponent+DataBinding.mm in Sources */,
-				DABF4986F9AFA8C20F4B062C39A48A02 /* WXComponent+Display.m in Sources */,
-				506D5D2C1AC76FCB193EFA405F511A67 /* WXComponent+Events.m in Sources */,
-				323151941107A303939B0F6078C8367C /* WXComponent+Layout.mm in Sources */,
-				CA697C21710588F2B0AFB02738F71B7A /* WXComponent+Navigation.m in Sources */,
-				CAF3B8706341F246B0BC73A5FD0CE46F /* WXComponent+PseudoClassManagement.m in Sources */,
-				37CEA5C190AF61B44FF0B633003C3879 /* WXComponent+ViewManagement.mm in Sources */,
-				122F470A2BAE9A7E558C04913D8BBC55 /* WXComponent.mm in Sources */,
-				9743CEDF0B66176E649012EF8A1FF897 /* WXComponentFactory.m in Sources */,
-				3AC5BAAC89954E65FD9056C158F60BB7 /* WXComponentManager.mm in Sources */,
-				23E6EEE0FA58D792C2821772968D1B6E /* WXComponentMethod.m in Sources */,
-				CEC479CC798224ABDDE1FF6B121E0845 /* WXConsoleLogModule.m in Sources */,
-				5867D0B48EF58DFF2E75DF3291359323 /* WXConvert.m in Sources */,
-				9737913494A48C492AC88C4090711622 /* WXConvertUtility.mm in Sources */,
-				DAF10E7C354C9E69D28230A3BE32F394 /* WXCoreBridge.mm in Sources */,
-				310C657AD6D6AB7986820125A2898AAE /* WXCycleSliderComponent.mm in Sources */,
-				E438E10685EBAC7D340D65F66EA18864 /* WXDatePickerManager.m in Sources */,
-				75F978D6EE8D2B1E7644150F4D83833B /* WXDebugTool.m in Sources */,
-				FF51863891F1059377A516F118711664 /* WXDiffUtil.m in Sources */,
-				F450C61A9B8D725C3E35E0B649502DB9 /* WXDisplayLinkManager.m in Sources */,
-				67C2398EF2C12086AEDB1150F3A8A1F9 /* WXDisplayQueue.m in Sources */,
-				6858F461EADDD334F84593A1AFC095B0 /* WXDivComponent.m in Sources */,
-				4F8CFECB09C7EFB07033982372C03A8C /* WXDomModule.m in Sources */,
-				7001E9C56B8ED4DC9B75242A0A2AD1FE /* WXEditComponent.mm in Sources */,
-				0B99AB9303A9AEEB8F1A9F74381CF09B /* WXEmbedComponent.m in Sources */,
-				886161ACFC8591263E22511331DD821A /* WXErrorView.m in Sources */,
-				DDA0F7C176C4EC3C526102625D017BC8 /* WXExceptionUtils.m in Sources */,
-				A4FB97DE28E5E37A82712A2154EE1A4E /* WXExtendCallNativeManager.m in Sources */,
-				75D912D8D3509F6A7E21A96922D45B10 /* WXFooterComponent.m in Sources */,
-				8D4580E6ACD37B696F0CDAB3B8A54275 /* WXGlobalEventModule.m in Sources */,
-				DAD773511AAE4920E0368A28D45F1DCE /* WXHandlerFactory.m in Sources */,
-				D81D7407F4B4BECFE7C3F8C89AFD5114 /* WXHeaderComponent.mm in Sources */,
-				A8A24E8CD9FE9C5BC987F854613C2997 /* WXImageComponent.m in Sources */,
-				603D6675649D9C28D871801480E5026C /* WXIndicatorComponent.m in Sources */,
-				B3CA2C7312458116DBD28BD9FF9C7FB8 /* WXInnerLayer.m in Sources */,
-				878584F8C913784F1E07DB0E3532374F /* WXInstanceWrap.m in Sources */,
-				B03A7A36E9FBC6466754C10A2DC14FE7 /* WXInvocationConfig.m in Sources */,
-				9D8D9243EF7B1B445C1A915132194FC8 /* WXJSASTParser.mm in Sources */,
-				176231D509C9BCA3D1CA51AAD37AE3EC /* WXJSCoreBridge.mm in Sources */,
-				182681232123BC0D366715D4DB04169D /* WXJSExceptionInfo.m in Sources */,
-				F904E07BCA3FA971D68726C439034E8B /* WXJSFrameworkLoadDefaultImpl.m in Sources */,
-				E888D480EAEF1A7E005A3784EAF42C86 /* WXLayer.m in Sources */,
-				B35A261FC87A770864C3AE535B07E15B /* WXLength.m in Sources */,
-				6F68D0D3D55831671E8FBAC045BAA8A4 /* WXListComponent.mm in Sources */,
-				DF0036C5D5D9B4E331A4B8974E34BD0B /* WXLoadingComponent.mm in Sources */,
-				D5BAFF5ADCF4D3F52EF27EF13E9029C1 /* WXLoadingIndicator.m in Sources */,
-				21F6A1BB0B2C60F16820450468546947 /* WXLocaleModule.m in Sources */,
-				0E63280B0FDA03D4C17AEC0F9DFD93CD /* WXLog.m in Sources */,
-				9B941FFD2419BB90C19CDCD92EB269DA /* WXMetaModule.m in Sources */,
-				6765A5FDD656A07D6DAF4A4FBCF0A530 /* WXModalUIModule.m in Sources */,
-				9A126F35E390ACF843C0FF4EF9183E20 /* WXModuleFactory.m in Sources */,
-				596193A2CA366774F7CF0175B03364C1 /* WXModuleMethod.m in Sources */,
-				4FEE05F62E41ECEE22D75A19F855F6B8 /* WXMonitor.m in Sources */,
-				8453D2A5A55E3DDCB3B45A9E14EED72C /* WXMultiColumnLayout.m in Sources */,
-				22A46549C34C348356F33601A9F7488F /* WXNavigationDefaultImpl.m in Sources */,
-				341A7B0346DF2E835AF8E0A076416E10 /* WXNavigatorModule.m in Sources */,
-				142A69EF0CFD73C4A9D57E6C9649D87B /* WXPickerModule.m in Sources */,
-				907C279D52E344C80D545AF2A4E731AA /* WXPolyfillSet.m in Sources */,
-				DBD4AE95E2F1337F7872C51A893F3EBA /* WXPrerenderManager.m in Sources */,
-				CBDCC0361D35AF383ACC081BD26645F9 /* WXRecycleListComponent.mm in Sources */,
-				C45BB6496AED067CD99379F4AD00DB97 /* WXRecycleListDataManager.m in Sources */,
-				796346C9FC08B9345E7A4902DB31CC21 /* WXRecycleListLayout.m in Sources */,
-				3E0646027A42F00B951F475A11AC699B /* WXRecycleListTemplateManager.m in Sources */,
-				A48C0F2384346B40F3723CAE5468F25D /* WXRecycleListUpdateManager.m in Sources */,
-				F609A5125677FEB8B2A6C1D790DF0544 /* WXRecyclerComponent.mm in Sources */,
-				E8238CEF1E26A6AD933FC9806E8C3EC4 /* WXRecyclerDataController.m in Sources */,
-				3986BBE134D80BD08BB123B2A19F2288 /* WXRecyclerDragController.m in Sources */,
-				10822536ABA2568B99D5EA2A8E53DB86 /* WXRecyclerUpdateController.m in Sources */,
-				1643ACF2166E4582AE18923447533841 /* WXRefreshComponent.mm in Sources */,
-				A5BCD10513E3CE82E41AE73A3250515C /* WXResourceLoader.m in Sources */,
-				E2982126877378A33B4400D33B83962F /* WXResourceRequest.m in Sources */,
-				37347DE0AF7126290ABA9ECA97CAF7D8 /* WXResourceRequestHandlerDefaultImpl.m in Sources */,
-				4C814949A56EBA6026FB0065456FDACA /* WXResourceResponse.m in Sources */,
-				AE599572C685CE4D22A74A462A401B53 /* WXRichText.mm in Sources */,
-				13AECE027D0D1AE56F43F7151986AAC1 /* WXRootView.m in Sources */,
-				C11CC57BE173E92C8B9BC90ED6523187 /* WXRootViewController.m in Sources */,
-				F33E54D38D191E8FF60EDA922362BEEA /* WXRoundedRect.mm in Sources */,
-				57E747513EB2743516D21D2625613D5D /* WXRuleManager.m in Sources */,
-				B8455D6A3A9561164B99592E442FB853 /* WXScrollerComponent.mm in Sources */,
-				DB8ED6B9994EB09327034367F4E48150 /* WXSDKEngine.m in Sources */,
-				F2EE73FCA3E7B857CBD0355C37B62AF1 /* WXSDKError.m in Sources */,
-				D8DB0E6BE55433CD7CE0428F271B6805 /* WXSDKInstance.m in Sources */,
-				CA577A2D57297BB6850E7A10252A60E5 /* WXSDKInstance_performance.m in Sources */,
-				10C719DA9D7B8A674D8213C2F3F78F35 /* WXSDKManager.m in Sources */,
-				907AA11754CC4020AED30278CE45F148 /* WXSectionDataController.m in Sources */,
-				07C09A3BE04646187D8EABC6436A5B47 /* WXServiceFactory.m in Sources */,
-				A7FC902F674E778C30F017ACD97C29A0 /* WXSimulatorShortcutManager.m in Sources */,
-				26CE32FBE483FC250E343946BAA7A1A7 /* WXSliderNeighborComponent.mm in Sources */,
-				B91CED527D0C4465A6FE39FB573CFE56 /* WXStorageModule.m in Sources */,
-				A3EB8B6C685405C1DA49EEF3ECEDBC3D /* WXStreamModule.m in Sources */,
-				2BFD05D901D7F4FAD067C6CA11B40736 /* WXSwitchComponent.mm in Sources */,
-				B3EF1B042956DFF3338D8DDAB1806D57 /* WXTextAreaComponent.mm in Sources */,
-				C3161C4D9E7479AA4F0ADBABA63B8215 /* WXTextComponent.mm in Sources */,
-				BFD4DB43491D42DBB8D6104B0D7CB11B /* WXTextInputComponent.m in Sources */,
-				14A963421DCB4D4E75073D0593C83AB5 /* WXThreadSafeCounter.m in Sources */,
-				EDA24BA835F0BC4BB7F13B6119F1A5F7 /* WXThreadSafeMutableArray.m in Sources */,
-				13E700D3BBCCDC7BD16658D4341C7DC9 /* WXThreadSafeMutableDictionary.m in Sources */,
-				DB915A1F1F4196A02CB39ADEE01D7B50 /* WXTimerModule.m in Sources */,
-				05D73EE0C659F9C088BDE8C5D2E013FB /* WXTransform.m in Sources */,
-				9E25AA08079C1EF581BDDDA98D7CDBFA /* WXTransition.mm in Sources */,
-				194752A928EE8E32EF7554BC1C0C416E /* WXURLRewriteDefaultImpl.m in Sources */,
-				48C6B37D1D2E18D4C46FFEC24962731F /* WXUtility.m in Sources */,
-				D6AF6351A53AECE41426843994D2DF11 /* WXVersion.m in Sources */,
-				E235D852FE6781C72937C388F721CD31 /* WXVideoComponent.m in Sources */,
-				8A80EC10ED85AFD30C8D0A7361629B1A /* WXView.m in Sources */,
-				E9F8C66AFF027349241C3DA940017FA6 /* WXVoiceOverModule.m in Sources */,
-				0DC17ABB92DCAC1C41306EBD5B2295F7 /* WXWeakObjectWrapper.m in Sources */,
-				58B4EC980CC7DF54C4F7A39719B65E34 /* WXWebComponent.m in Sources */,
-				3CE97A6F2B5700BB0EE1C88C6F4E6B59 /* WXWebSocketLoader.m in Sources */,
-				26DE9334D97E4819826B81A364421246 /* WXWebSocketModule.m in Sources */,
-				8084E5D2386602F722CD9C031092389B /* WXWebViewModule.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		00F34B96145DA02D92EC0BD33506B0CB /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = SocketRocket;
-			target = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;
-			targetProxy = 00600124F655D508A131E0CCC71B75EE /* PBXContainerItemProxy */;
-		};
-		1DB4BBFBB382F53D41D93200786D7FA7 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = libwebp;
-			target = 47D2E85A78C25869BB13521D8561A638 /* libwebp */;
-			targetProxy = BA64AE51423FDDB91EFD4849FCB721A7 /* PBXContainerItemProxy */;
-		};
-		1F0D92BCC52281ED413AB0B209BE780A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WeexPluginLoader;
-			target = BFA2840E37C9C6EAC3C1E65FF46EA916 /* WeexPluginLoader */;
-			targetProxy = 35B08CAFD5812A2235243ACBF160A8D7 /* PBXContainerItemProxy */;
-		};
-		3714835DF649D3BCF0150B5ED074EEC1 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WXDevtool;
-			target = ADE3323F1A1577AF39D4E28727906997 /* WXDevtool */;
-			targetProxy = 5952010FAE53B10AF64AC6C60C7DA150 /* PBXContainerItemProxy */;
-		};
-		521499C1E44A177F72673542E3146D20 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WeexPluginLoader;
-			target = BFA2840E37C9C6EAC3C1E65FF46EA916 /* WeexPluginLoader */;
-			targetProxy = 91C9E7D9A90F0B8F3B206D176D950351 /* PBXContainerItemProxy */;
-		};
-		5526F0775FD95B2A178336DAABD429DC /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = libwebp;
-			target = 47D2E85A78C25869BB13521D8561A638 /* libwebp */;
-			targetProxy = D8A5C03001095D015CC0FFAF77405F7D /* PBXContainerItemProxy */;
-		};
-		59BE5B49D994F638C69220890E069A82 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WeexSDK;
-			target = BFCAFC5A05D2B40152EEE1A1F1F1DB37 /* WeexSDK */;
-			targetProxy = 31CE919AC221AC484282760E182A45F2 /* PBXContainerItemProxy */;
-		};
-		6201F7198F036BDBD02D0267F546EFA2 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = BindingX;
-			target = B461E8D2696AA53B3DD289E7CF6D5D5B /* BindingX */;
-			targetProxy = 5E6D17F71B8E8D4FA9308EC11A090804 /* PBXContainerItemProxy */;
-		};
-		6243DC26619B889CA3407914CB945CBE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = SDWebImage;
-			target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */;
-			targetProxy = 3BE97F7DD6080FFF50FFB58CE16BD2A0 /* PBXContainerItemProxy */;
-		};
-		758302EC936DCD7D8781EB7565532EB8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WXDevtool;
-			target = ADE3323F1A1577AF39D4E28727906997 /* WXDevtool */;
-			targetProxy = 1C1229037DBA868633EFFE0DE9439BF1 /* PBXContainerItemProxy */;
-		};
-		7D725D6267AE254DEEC799992D17D7DD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WeexSDK;
-			target = BFCAFC5A05D2B40152EEE1A1F1F1DB37 /* WeexSDK */;
-			targetProxy = 42B414CA9F46DAE762D2AE82B8CAB874 /* PBXContainerItemProxy */;
-		};
-		819A96FA107AAA25E07A93FF67C8537B /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = SDWebImage;
-			target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */;
-			targetProxy = FC22CB15902D10A4FB4AF9D98E5CC2C9 /* PBXContainerItemProxy */;
-		};
-		896BABA4742326E93ECD70A7923CA44E /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WeexSDK;
-			target = BFCAFC5A05D2B40152EEE1A1F1F1DB37 /* WeexSDK */;
-			targetProxy = 4917E5AC0C93874553DCC3DFC8642237 /* PBXContainerItemProxy */;
-		};
-		9413334FF084B23403D57A8C05BD8733 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = "ATSDK-Weex";
-			target = 344C7B8851D73171FD3FE521AF9DA956 /* ATSDK-Weex */;
-			targetProxy = A0F0DB198CEBCF39BE52ECD44403F108 /* PBXContainerItemProxy */;
-		};
-		A84FDAE00001C3474A3878366C1FA7AE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WeexPluginLoader;
-			target = BFA2840E37C9C6EAC3C1E65FF46EA916 /* WeexPluginLoader */;
-			targetProxy = FF8A76CD1C133AF224259C44F42B4523 /* PBXContainerItemProxy */;
-		};
-		ACFDF06A99C234A5BFC03474BF72348A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = libwebp;
-			target = 47D2E85A78C25869BB13521D8561A638 /* libwebp */;
-			targetProxy = E15C44810B89022BFD57F8F31225281F /* PBXContainerItemProxy */;
-		};
-		BAB011A6965C073EBE74F51FE6B5DAFD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WeexSDK;
-			target = BFCAFC5A05D2B40152EEE1A1F1F1DB37 /* WeexSDK */;
-			targetProxy = C8B2AAECEC0318EDCEBD0AEE430AD81B /* PBXContainerItemProxy */;
-		};
-		C3688F91D5F72496A00607D01F66148A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = WeexSDK;
-			target = BFCAFC5A05D2B40152EEE1A1F1F1DB37 /* WeexSDK */;
-			targetProxy = 0DC2776A533B1B1C575610E013449F52 /* PBXContainerItemProxy */;
-		};
-		CC489734BCF62E9A66A66A6329A5CE9B /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = SocketRocket;
-			target = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;
-			targetProxy = BB0865516B282A9E87FFB7A6B5617891 /* PBXContainerItemProxy */;
-		};
-		D7A7E9A6A459C1E36257551E16FF8DC0 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = SocketRocket;
-			target = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;
-			targetProxy = 77D833E787FF230BF73C55FC21D819A3 /* PBXContainerItemProxy */;
-		};
-		E8B6EBF70E43E692E81B80A1C570E06D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = BindingX;
-			target = B461E8D2696AA53B3DD289E7CF6D5D5B /* BindingX */;
-			targetProxy = A509F8AD34CC2CEBAE2708A326F3BB9D /* PBXContainerItemProxy */;
-		};
-		E97DE53525DDB7FEFA422A84548D736B /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = "ATSDK-Weex";
-			target = 344C7B8851D73171FD3FE521AF9DA956 /* ATSDK-Weex */;
-			targetProxy = 15004C35F6D995E7B6FFEC7CEE4086B3 /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
-		0958B8EAA9525B2360F05C622BC42500 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = C97C2D8D694C42318D0EA1762173E8AE /* WeexPluginLoader.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		17C9201EB2C855955939A39EE9755546 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D510A7D07FB93CAAEAE8BD348F2C5DAF /* BindingX.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/BindingX/BindingX-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = BindingX;
-				PRODUCT_NAME = BindingX;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		24A68F4A7365CE67FD51FD5106AFCBBC /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = EEE446B4190C4FD2F98DA0623C4884C9 /* WXDevtool.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/WXDevtool/WXDevtool-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = WXDevtool;
-				PRODUCT_NAME = WXDevtool;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		2BED96D64F7581C077B55788618A3C3C /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 59712A521D4F2FEFA8957E7192AA0282 /* Pods-WeexUITestDemo.release.xcconfig */;
-			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				MACH_O_TYPE = staticlib;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PODS_ROOT = "$(SRCROOT)";
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		3BC7531E094B6A2AEB01791BBA910783 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 57C2392C35D351CEA1445C24962C9BA8 /* ATSDK-Weex.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		41864F151537D2B11C066AE79DC4074B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 203ECC4B56968AC736E1E08E79CB83FA /* Pods-WeexUITestDemo.debug.xcconfig */;
-			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				MACH_O_TYPE = staticlib;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PODS_ROOT = "$(SRCROOT)";
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		461021E411752B6B9AA72583CE9363EB /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = EEE446B4190C4FD2F98DA0623C4884C9 /* WXDevtool.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/WXDevtool/WXDevtool-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = WXDevtool;
-				PRODUCT_NAME = WXDevtool;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		4F1A85598C361105292A06B0D1CDDB98 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 57C2392C35D351CEA1445C24962C9BA8 /* ATSDK-Weex.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		56AEE5B476614B27EAF22CC9F47E0DD6 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5229B7E34A0C4D04C25FDBBF6F1C8258 /* libwebp.xcconfig */;
-			buildSettings = {
-				CLANG_ENABLE_OBJC_WEAK = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/libwebp/libwebp-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = libwebp;
-				PRODUCT_NAME = libwebp;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		581EEAF72A05BE4C505B4A23CB007D59 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = E008E08878C27C01CC3DB44704C7C446 /* Pods-WeexDemo.release.xcconfig */;
-			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				MACH_O_TYPE = staticlib;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PODS_ROOT = "$(SRCROOT)";
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		5FD773C94E96701F372990245339C183 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = E6AE5A55769F17982E188ABE6A4EDBA7 /* SocketRocket.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = SocketRocket;
-				PRODUCT_NAME = SocketRocket;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		76A90711E22D3BFDAB4C4DBDDA66493A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = D510A7D07FB93CAAEAE8BD348F2C5DAF /* BindingX.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/BindingX/BindingX-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = BindingX;
-				PRODUCT_NAME = BindingX;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		81BE1CE798B69F78DB2859DF3A2DBEA9 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 5229B7E34A0C4D04C25FDBBF6F1C8258 /* libwebp.xcconfig */;
-			buildSettings = {
-				CLANG_ENABLE_OBJC_WEAK = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/libwebp/libwebp-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = libwebp;
-				PRODUCT_NAME = libwebp;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		8F17DC3A99F99FBAD606CE6963886315 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu11;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"POD_CONFIGURATION_RELEASE=1",
-					"$(inherited)",
-				);
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				MTL_ENABLE_DEBUG_INFO = NO;
-				MTL_FAST_MATH = YES;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				STRIP_INSTALLED_PRODUCT = NO;
-				SWIFT_COMPILATION_MODE = wholemodule;
-				SWIFT_OPTIMIZATION_LEVEL = "-O";
-				SWIFT_VERSION = 5.0;
-				SYMROOT = "${SRCROOT}/../build";
-			};
-			name = Release;
-		};
-		916E0404255105F480DC4950B7625F7A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ANALYZER_NONNULL = YES;
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_ENABLE_OBJC_WEAK = YES;
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_COMMA = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu11;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"POD_CONFIGURATION_DEBUG=1",
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
-				MTL_FAST_MATH = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				STRIP_INSTALLED_PRODUCT = NO;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
-				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
-				SWIFT_VERSION = 5.0;
-				SYMROOT = "${SRCROOT}/../build";
-			};
-			name = Debug;
-		};
-		92F64BDDA47C326A8CACA577D5D9925A /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 8BFF6D0044851BBEBF63E07F07B2E1C7 /* WeexSDK.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/WeexSDK/WeexSDK-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = WeexSDK;
-				PRODUCT_NAME = WeexSDK;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		9E0777309407C540F71C43A7351C9348 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 47E1246ED504AD9F3E175BD3F5C47CE4 /* SDWebImage.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = SDWebImage;
-				PRODUCT_NAME = SDWebImage;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		B86DCEA03550B0715666DF0D752B2A77 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 8BFF6D0044851BBEBF63E07F07B2E1C7 /* WeexSDK.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/WeexSDK/WeexSDK-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = WeexSDK;
-				PRODUCT_NAME = WeexSDK;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		BCDA898D30F5DB6ADCFE86FD5D17AB4E /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = E6AE5A55769F17982E188ABE6A4EDBA7 /* SocketRocket.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = SocketRocket;
-				PRODUCT_NAME = SocketRocket;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		E87E58E6B5E9D42327C58C92B3E61761 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = C97C2D8D694C42318D0EA1762173E8AE /* WeexPluginLoader.xcconfig */;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				SDKROOT = iphoneos;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				VALIDATE_PRODUCT = YES;
-			};
-			name = Release;
-		};
-		EB706ACA637C7B44CAEE4C86F5B4029E /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 47E1246ED504AD9F3E175BD3F5C47CE4 /* SDWebImage.xcconfig */;
-			buildSettings = {
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch";
-				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PRIVATE_HEADERS_FOLDER_PATH = "";
-				PRODUCT_MODULE_NAME = SDWebImage;
-				PRODUCT_NAME = SDWebImage;
-				PUBLIC_HEADERS_FOLDER_PATH = "";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-		EF6E445029D70754C7F4AB103553EB79 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = BD247748D4AD18D571015167F4556B0A /* Pods-WeexDemo.debug.xcconfig */;
-			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
-				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
-				MACH_O_TYPE = staticlib;
-				OTHER_LDFLAGS = "";
-				OTHER_LIBTOOLFLAGS = "";
-				PODS_ROOT = "$(SRCROOT)";
-				PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				TARGETED_DEVICE_FAMILY = "1,2";
-			};
-			name = Debug;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		03506A1912D80F7684D5C1AD17B5B8B2 /* Build configuration list for PBXNativeTarget "libwebp" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				56AEE5B476614B27EAF22CC9F47E0DD6 /* Debug */,
-				81BE1CE798B69F78DB2859DF3A2DBEA9 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		30A5437BC5BBB0CD58B024D59B15C9A3 /* Build configuration list for PBXNativeTarget "Pods-WeexDemo" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				EF6E445029D70754C7F4AB103553EB79 /* Debug */,
-				581EEAF72A05BE4C505B4A23CB007D59 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				916E0404255105F480DC4950B7625F7A /* Debug */,
-				8F17DC3A99F99FBAD606CE6963886315 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		530ACC161CE810EFCA10E318359391EE /* Build configuration list for PBXNativeTarget "SocketRocket" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				5FD773C94E96701F372990245339C183 /* Debug */,
-				BCDA898D30F5DB6ADCFE86FD5D17AB4E /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		5994863F560DF3BA097B2F62CFA682D1 /* Build configuration list for PBXAggregateTarget "ATSDK-Weex" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				4F1A85598C361105292A06B0D1CDDB98 /* Debug */,
-				3BC7531E094B6A2AEB01791BBA910783 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		643062A5FD3B39D256EC55297BAC89D7 /* Build configuration list for PBXNativeTarget "Pods-WeexUITestDemo" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				41864F151537D2B11C066AE79DC4074B /* Debug */,
-				2BED96D64F7581C077B55788618A3C3C /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		6C12E0242F857E6143C01D0AC8692B87 /* Build configuration list for PBXNativeTarget "WXDevtool" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				24A68F4A7365CE67FD51FD5106AFCBBC /* Debug */,
-				461021E411752B6B9AA72583CE9363EB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		D8C307A270567F38708D7E0CC74655F5 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				EB706ACA637C7B44CAEE4C86F5B4029E /* Debug */,
-				9E0777309407C540F71C43A7351C9348 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		E98B876D882137A28265E4263834FE37 /* Build configuration list for PBXNativeTarget "WeexSDK" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				B86DCEA03550B0715666DF0D752B2A77 /* Debug */,
-				92F64BDDA47C326A8CACA577D5D9925A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		F5BA4730ADB6A261FFE0B321748824FB /* Build configuration list for PBXNativeTarget "BindingX" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				76A90711E22D3BFDAB4C4DBDDA66493A /* Debug */,
-				17C9201EB2C855955939A39EE9755546 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		FEF8CC11DB4D1E326EDA3246E353BF4E /* Build configuration list for PBXAggregateTarget "WeexPluginLoader" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				0958B8EAA9525B2360F05C622BC42500 /* Debug */,
-				E87E58E6B5E9D42327C58C92B3E61761 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-}
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/ATSDK-Weex.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/ATSDK-Weex.xcscheme
deleted file mode 100644
index d9743e0..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/ATSDK-Weex.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "344C7B8851D73171FD3FE521AF9DA956"
-               BuildableName = "ATSDK-Weex"
-               BlueprintName = "ATSDK-Weex"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/BindingX.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/BindingX.xcscheme
deleted file mode 100644
index 8e30120..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/BindingX.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "B461E8D2696AA53B3DD289E7CF6D5D5B"
-               BuildableName = "libBindingX.a"
-               BlueprintName = "BindingX"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/Pods-WeexDemo.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/Pods-WeexDemo.xcscheme
deleted file mode 100644
index f6ad88c..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/Pods-WeexDemo.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "49663250E6A87B489C7A19B827FEB585"
-               BuildableName = "libPods-WeexDemo.a"
-               BlueprintName = "Pods-WeexDemo"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/Pods-WeexUITestDemo.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/Pods-WeexUITestDemo.xcscheme
deleted file mode 100644
index 7337f4a..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/Pods-WeexUITestDemo.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "8CB28739C3769174E2F3B04D16F5FA25"
-               BuildableName = "libPods-WeexUITestDemo.a"
-               BlueprintName = "Pods-WeexUITestDemo"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/SDWebImage.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/SDWebImage.xcscheme
deleted file mode 100644
index 6302782..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/SDWebImage.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "3847153A6E5EEFB86565BA840768F429"
-               BuildableName = "libSDWebImage.a"
-               BlueprintName = "SDWebImage"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/SocketRocket.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/SocketRocket.xcscheme
deleted file mode 100644
index 771b095..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/SocketRocket.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "1948D0B63D2CF6A48E18B0B292BC6091"
-               BuildableName = "libSocketRocket.a"
-               BlueprintName = "SocketRocket"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WXDevtool.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WXDevtool.xcscheme
deleted file mode 100644
index 5229be1..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WXDevtool.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "ADE3323F1A1577AF39D4E28727906997"
-               BuildableName = "libWXDevtool.a"
-               BlueprintName = "WXDevtool"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WeexPluginLoader.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WeexPluginLoader.xcscheme
deleted file mode 100644
index 2774c35..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WeexPluginLoader.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "BFA2840E37C9C6EAC3C1E65FF46EA916"
-               BuildableName = "WeexPluginLoader"
-               BlueprintName = "WeexPluginLoader"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WeexSDK.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WeexSDK.xcscheme
deleted file mode 100644
index 53647b6..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/WeexSDK.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "BFCAFC5A05D2B40152EEE1A1F1F1DB37"
-               BuildableName = "libWeexSDK.a"
-               BlueprintName = "WeexSDK"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/libwebp.xcscheme b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/libwebp.xcscheme
deleted file mode 100644
index 3160cdb..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/libwebp.xcscheme
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1100"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForAnalyzing = "YES"
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "47D2E85A78C25869BB13521D8561A638"
-               BuildableName = "liblibwebp.a"
-               BlueprintName = "libwebp"
-               ReferencedContainer = "container:Pods.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      buildConfiguration = "Debug"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES"
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>
diff --git a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/xcschememanagement.plist
deleted file mode 100644
index e8327a0..0000000
--- a/ios/Pods/Pods.xcodeproj/xcuserdata/wm.xcuserdatad/xcschemes/xcschememanagement.plist
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>SchemeUserState</key>
-	<dict>
-		<key>ATSDK-Weex.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>BindingX.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>Pods-WeexDemo.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>Pods-WeexUITestDemo.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>SDWebImage.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>SocketRocket.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>WXDevtool.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>WeexPluginLoader.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>WeexSDK.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-		<key>libwebp.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
-	</dict>
-	<key>SuppressBuildableAutocreation</key>
-	<dict/>
-</dict>
-</plist>
diff --git a/ios/Pods/SDWebImage/LICENSE b/ios/Pods/SDWebImage/LICENSE
deleted file mode 100644
index ae783e1..0000000
--- a/ios/Pods/SDWebImage/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2009 Olivier Poitrey <rs@dailymotion.com>
- 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
- 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
- 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
diff --git a/ios/Pods/SDWebImage/README.md b/ios/Pods/SDWebImage/README.md
deleted file mode 100644
index 62628f9..0000000
--- a/ios/Pods/SDWebImage/README.md
+++ /dev/null
@@ -1,334 +0,0 @@
-Web Image
-=========
-[![Build Status](http://img.shields.io/travis/rs/SDWebImage/master.svg?style=flat)](https://travis-ci.org/rs/SDWebImage)
-[![Pod Version](http://img.shields.io/cocoapods/v/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/)
-[![Pod Platform](http://img.shields.io/cocoapods/p/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/)
-[![Pod License](http://img.shields.io/cocoapods/l/SDWebImage.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html)
-[![Dependency Status](https://www.versioneye.com/objective-c/sdwebimage/3.3/badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/3.3)
-[![Reference Status](https://www.versioneye.com/objective-c/sdwebimage/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/references)
-[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/rs/SDWebImage)
-
-This library provides a category for UIImageView with support for remote images coming from the web.
-
-It provides:
-
-- An `UIImageView` category adding web image and cache management to the Cocoa Touch framework
-- An asynchronous image downloader
-- An asynchronous memory + disk image caching with automatic cache expiration handling
-- Animated GIF support
-- WebP format support
-- A background image decompression
-- A guarantee that the same URL won't be downloaded several times
-- A guarantee that bogus URLs won't be retried again and again
-- A guarantee that main thread will never be blocked
-- Performances!
-- Use GCD and ARC
-- Arm64 support
-
-NOTE: The version 3.0 of SDWebImage isn't fully backward compatible with 2.0 and requires iOS 5.1.1
-minimum deployment version. If you need iOS < 5.0 support, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat).
-
-[How is SDWebImage better than X?](https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F)
-
-Who Use It
-----------
-
-Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list.
-
-How To Use
-----------
-
-API documentation is available at [CocoaDocs - SDWebImage](http://cocoadocs.org/docsets/SDWebImage/)
-
-### Using UIImageView+WebCache category with UITableView
-
-Just #import the UIImageView+WebCache.h header, and call the sd_setImageWithURL:placeholderImage:
-method from the tableView:cellForRowAtIndexPath: UITableViewDataSource method. Everything will be
-handled for you, from async downloads to caching management.
-
-```objective-c
-#import <SDWebImage/UIImageView+WebCache.h>
-
-...
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    static NSString *MyIdentifier = @"MyIdentifier";
-
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
-    if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                       reuseIdentifier:MyIdentifier] autorelease];
-    }
-
-    // Here we use the new provided sd_setImageWithURL: method to load the web image
-    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
-                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
-
-    cell.textLabel.text = @"My Text";
-    return cell;
-}
-```
-
-### Using blocks
-
-With blocks, you can be notified about the image download progress and whenever the image retrieval
-has completed with success or not:
-
-```objective-c
-// Here we use the new provided sd_setImageWithURL: method to load the web image
-[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
-                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]
-                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-                                ... completion code here ...
-                             }];
-```
-
-Note: neither your success nor failure block will be call if your image request is canceled before completion.
-
-### Using SDWebImageManager
-
-The SDWebImageManager is the class behind the UIImageView+WebCache category. It ties the
-asynchronous downloader with the image cache store. You can use this class directly to benefit
-from web image downloading with caching in another context than a UIView (ie: with Cocoa).
-
-Here is a simple example of how to use SDWebImageManager:
-
-```objective-c
-SDWebImageManager *manager = [SDWebImageManager sharedManager];
-[manager downloadImageWithURL:imageURL
-                      options:0
-                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-                         // progression tracking code
-                     }
-                     completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-                         if (image) {
-                             // do something with image
-                         }
-                     }];
-```
-
-### Using Asynchronous Image Downloader Independently
-
-It's also possible to use the async image downloader independently:
-
-```objective-c
-SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
-[downloader downloadImageWithURL:imageURL
-                         options:0
-                        progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-                            // progression tracking code
-                        }
-                       completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
-                            if (image && finished) {
-                                // do something with image
-                            }
-                        }];
-```
-
-### Using Asynchronous Image Caching Independently
-
-It is also possible to use the async based image cache store independently. SDImageCache
-maintains a memory cache and an optional disk cache. Disk cache write operations are performed
-asynchronous so it doesn't add unnecessary latency to the UI.
-
-The SDImageCache class provides a singleton instance for convenience but you can create your own
-instance if you want to create separated cache namespace.
-
-To lookup the cache, you use the `queryDiskCacheForKey:done:` method. If the method returns nil, it means the cache
-doesn't currently own the image. You are thus responsible for generating and caching it. The cache
-key is an application unique identifier for the image to cache. It is generally the absolute URL of
-the image.
-
-```objective-c
-SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];
-[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) {
-    // image is not nil if image was found
-}];
-```
-
-By default SDImageCache will lookup the disk cache if an image can't be found in the memory cache.
-You can prevent this from happening by calling the alternative method `imageFromMemoryCacheForKey:`.
-
-To store an image into the cache, you use the storeImage:forKey: method:
-
-```objective-c
-[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];
-```
-
-By default, the image will be stored in memory cache as well as on disk cache (asynchronously). If
-you want only the memory cache, use the alternative method storeImage:forKey:toDisk: with a negative
-third argument.
-
-### Using cache key filter
-
-Sometime, you may not want to use the image URL as cache key because part of the URL is dynamic
-(i.e.: for access control purpose). SDWebImageManager provides a way to set a cache key filter that
-takes the NSURL as input, and output a cache key NSString.
-
-The following example sets a filter in the application delegate that will remove any query-string from
-the URL before to use it as a cache key:
-
-```objective-c
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
-    SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
-        url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
-        return [url absoluteString];
-    };
-
-    // Your app init code...
-    return YES;
-}
-```
-
-
-Common Problems
----------------
-
-### Using dynamic image size with UITableViewCell
-
-UITableView determines the size of the image by the first image set for a cell. If your remote images
-don't have the same size as your placeholder image, you may experience strange anamorphic scaling issue.
-The following article gives a way to workaround this issue:
-
-[http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/](http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/)
-
-
-### Handle image refresh
-
-SDWebImage does very aggressive caching by default. It ignores all kind of caching control header returned by the HTTP server and cache the returned images with no time restriction. It implies your images URLs are static URLs pointing to images that never change. If the pointed image happen to change, some parts of the URL should change accordingly.
-
-If you don't control the image server you're using, you may not be able to change the URL when its content is updated. This is the case for Facebook avatar URLs for instance. In such case, you may use the `SDWebImageRefreshCached` flag. This will slightly degrade the performance but will respect the HTTP caching control headers:
-
-``` objective-c
-[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
-                 placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
-                          options:SDWebImageRefreshCached];
-```
-
-### Add a progress indicator
-
-See this category: https://github.com/JJSaccolo/UIActivityIndicator-for-SDWebImage
-
-Installation
-------------
-
-There are three ways to use SDWebImage in your project:
-- using Cocoapods
-- copying all the files into your project
-- importing the project as a static library
-
-### Installation with CocoaPods
-
-[CocoaPods](http://cocoapods.org/) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the [Get Started](http://cocoapods.org/#get_started) section for more details.
-
-#### Podfile
-```
-platform :ios, '6.1'
-pod 'SDWebImage', '~>3.7'
-```
-
-If you are using Swift, be sure to add `use_frameworks!` and set your target to iOS 8+:
-```
-platform :ios, '8.0'
-use_frameworks!
-```
-
-#### Subspecs
-
-There are 3 subspecs available now: `Core`, `MapKit` and `WebP` (this means you can install only some of the SDWebImage modules. By default, you get just `Core`, so if you need `WebP`, you need to specify it). 
-
-Podfile example:
-```
-pod 'SDWebImage/WebP'
-```
-
-### Installation with Carthage (iOS 8+)
-
-[Carthage](https://github.com/Carthage/Carthage) is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods.
-
-To install with carthage, follow the instruction on [Carthage](https://github.com/Carthage/Carthage)
-
-#### Cartfile
-```
-github "rs/SDWebImage"
-```
-
-#### Usage
-Swift
-
-If you installed using CocoaPods:
-```
-import SDWebImage
-```
-
-If you installed manually:
-```
-import WebImage
-```
-
-Objective-C
-
-```
-@import WebImage;
-```
-
-### Installation by cloning the repository
-
-In order to gain access to all the files from the repository, you should clone it.
-```
-git clone --recursive https://github.com/rs/SDWebImage.git
-```
-
-### Add the SDWebImage project to your project
-
-- Download and unzip the last version of the framework from the [download page](https://github.com/rs/SDWebImage/releases)
-- Right-click on the project navigator and select "Add Files to "Your Project":
-- In the dialog, select SDWebImage.framework:
-- Check the "Copy items into destination group's folder (if needed)" checkbox
-
-### Add dependencies
-
-- In you application project app’s target settings, find the "Build Phases" section and open the "Link Binary With Libraries" block:
-- Click the "+" button again and select the "ImageIO.framework", this is needed by the progressive download feature:
-
-### Add Linker Flag
-
-Open the "Build Settings" tab, in the "Linking" section, locate the "Other Linker Flags" setting and add the "-ObjC" flag:
-
-![Other Linker Flags](http://dl.dropbox.com/u/123346/SDWebImage/10_other_linker_flags.jpg)
-
-Alternatively, if this causes compilation problems with frameworks that extend optional libraries, such as Parse,  RestKit or opencv2, instead of the -ObjC flag use:
-```
--force_load SDWebImage.framework/Versions/Current/SDWebImage
-```
-
-If you're using Cocoa Pods and have any frameworks that extend optional libraries, such as Parsen RestKit or opencv2, instead of the -ObjC flag use:
-```
--force_load $(TARGET_BUILD_DIR)/libPods.a
-```
-and this:
-```
-$(inherited)
-```
-
-### Import headers in your source files
-
-In the source files where you need to use the library, import the header file:
-
-```objective-c
-#import <SDWebImage/UIImageView+WebCache.h>
-```
-
-### Build Project
-
-At this point your workspace should build without error. If you are having problem, post to the Issue and the
-community can help you solve it.
-
-Future Enhancements
--------------------
-
-- LRU memory cache cleanup instead of reset on memory warning
-
-## Licenses
-
-All source code is licensed under the [MIT License](https://raw.github.com/rs/SDWebImage/master/LICENSE).
diff --git a/ios/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h b/ios/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h
deleted file mode 100644
index 69c76dc..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// Created by Fabrice Aneche on 06/01/14.
-// Copyright (c) 2014 Dailymotion. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface NSData (ImageContentType)
-
-/**
- *  Compute the content type for an image data
- *
- *  @param data the input data
- *
- *  @return the content type as string (i.e. image/jpeg, image/gif)
- */
-+ (NSString *)sd_contentTypeForImageData:(NSData *)data;
-
-@end
-
-
-@interface NSData (ImageContentTypeDeprecated)
-
-+ (NSString *)contentTypeForImageData:(NSData *)data __deprecated_msg("Use `sd_contentTypeForImageData:`");
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m b/ios/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m
deleted file mode 100644
index 0941cfa..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Created by Fabrice Aneche on 06/01/14.
-// Copyright (c) 2014 Dailymotion. All rights reserved.
-//
-
-#import "NSData+ImageContentType.h"
-
-
-@implementation NSData (ImageContentType)
-
-+ (NSString *)sd_contentTypeForImageData:(NSData *)data {
-    uint8_t c;
-    [data getBytes:&c length:1];
-    switch (c) {
-        case 0xFF:
-            return @"image/jpeg";
-        case 0x89:
-            return @"image/png";
-        case 0x47:
-            return @"image/gif";
-        case 0x49:
-        case 0x4D:
-            return @"image/tiff";
-        case 0x52:
-            // R as RIFF for WEBP
-            if ([data length] < 12) {
-                return nil;
-            }
-
-            NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
-            if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
-                return @"image/webp";
-            }
-
-            return nil;
-    }
-    return nil;
-}
-
-@end
-
-
-@implementation NSData (ImageContentTypeDeprecated)
-
-+ (NSString *)contentTypeForImageData:(NSData *)data {
-    return [self sd_contentTypeForImageData:data];
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDImageCache.h b/ios/Pods/SDWebImage/SDWebImage/SDImageCache.h
deleted file mode 100644
index 9577726..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDImageCache.h
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageCompat.h"
-
-typedef NS_ENUM(NSInteger, SDImageCacheType) {
-    /**
-     * The image wasn't available the SDWebImage caches, but was downloaded from the web.
-     */
-    SDImageCacheTypeNone,
-    /**
-     * The image was obtained from the disk cache.
-     */
-    SDImageCacheTypeDisk,
-    /**
-     * The image was obtained from the memory cache.
-     */
-    SDImageCacheTypeMemory
-};
-
-typedef void(^SDWebImageQueryCompletedBlock)(UIImage *image, SDImageCacheType cacheType);
-
-typedef void(^SDWebImageCheckCacheCompletionBlock)(BOOL isInCache);
-
-typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize);
-
-/**
- * SDImageCache maintains a memory cache and an optional disk cache. Disk cache write operations are performed
- * asynchronous so it doesn’t add unnecessary latency to the UI.
- */
-@interface SDImageCache : NSObject
-
-/**
- * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory.
- * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.
- */
-@property (assign, nonatomic) BOOL shouldDecompressImages;
-
-/**
- *  disable iCloud backup [defaults to YES]
- */
-@property (assign, nonatomic) BOOL shouldDisableiCloud;
-
-/**
- * use memory cache [defaults to YES]
- */
-@property (assign, nonatomic) BOOL shouldCacheImagesInMemory;
-
-/**
- * The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory.
- */
-@property (assign, nonatomic) NSUInteger maxMemoryCost;
-
-/**
- * The maximum number of objects the cache should hold.
- */
-@property (assign, nonatomic) NSUInteger maxMemoryCountLimit;
-
-/**
- * The maximum length of time to keep an image in the cache, in seconds
- */
-@property (assign, nonatomic) NSInteger maxCacheAge;
-
-/**
- * The maximum size of the cache, in bytes.
- */
-@property (assign, nonatomic) NSUInteger maxCacheSize;
-
-/**
- * Returns global shared cache instance
- *
- * @return SDImageCache global instance
- */
-+ (SDImageCache *)sharedImageCache;
-
-/**
- * Init a new cache store with a specific namespace
- *
- * @param ns The namespace to use for this cache store
- */
-- (id)initWithNamespace:(NSString *)ns;
-
-/**
- * Init a new cache store with a specific namespace and directory
- *
- * @param ns        The namespace to use for this cache store
- * @param directory Directory to cache disk images in
- */
-- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory;
-
--(NSString *)makeDiskCachePath:(NSString*)fullNamespace;
-
-/**
- * Add a read-only cache path to search for images pre-cached by SDImageCache
- * Useful if you want to bundle pre-loaded images with your app
- *
- * @param path The path to use for this read-only cache path
- */
-- (void)addReadOnlyCachePath:(NSString *)path;
-
-/**
- * Store an image into memory and disk cache at the given key.
- *
- * @param image The image to store
- * @param key   The unique image cache key, usually it's image absolute URL
- */
-- (void)storeImage:(UIImage *)image forKey:(NSString *)key;
-
-/**
- * Store an image into memory and optionally disk cache at the given key.
- *
- * @param image  The image to store
- * @param key    The unique image cache key, usually it's image absolute URL
- * @param toDisk Store the image to disk cache if YES
- */
-- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk;
-
-/**
- * Store an image into memory and optionally disk cache at the given key.
- *
- * @param image       The image to store
- * @param recalculate BOOL indicates if imageData can be used or a new data should be constructed from the UIImage
- * @param imageData   The image data as returned by the server, this representation will be used for disk storage
- *                    instead of converting the given image object into a storable/compressed image format in order
- *                    to save quality and CPU
- * @param key         The unique image cache key, usually it's image absolute URL
- * @param toDisk      Store the image to disk cache if YES
- */
-- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk;
-
-/**
- * Query the disk cache asynchronously.
- *
- * @param key The unique key used to store the wanted image
- */
-- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock;
-
-/**
- * Query the memory cache synchronously.
- *
- * @param key The unique key used to store the wanted image
- */
-- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key;
-
-/**
- * Query the disk cache synchronously after checking the memory cache.
- *
- * @param key The unique key used to store the wanted image
- */
-- (UIImage *)imageFromDiskCacheForKey:(NSString *)key;
-
-/**
- * Remove the image from memory and disk cache synchronously
- *
- * @param key The unique image cache key
- */
-- (void)removeImageForKey:(NSString *)key;
-
-
-/**
- * Remove the image from memory and disk cache asynchronously
- *
- * @param key             The unique image cache key
- * @param completion      An block that should be executed after the image has been removed (optional)
- */
-- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion;
-
-/**
- * Remove the image from memory and optionally disk cache asynchronously
- *
- * @param key      The unique image cache key
- * @param fromDisk Also remove cache entry from disk if YES
- */
-- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk;
-
-/**
- * Remove the image from memory and optionally disk cache asynchronously
- *
- * @param key             The unique image cache key
- * @param fromDisk        Also remove cache entry from disk if YES
- * @param completion      An block that should be executed after the image has been removed (optional)
- */
-- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;
-
-/**
- * Clear all memory cached images
- */
-- (void)clearMemory;
-
-/**
- * Clear all disk cached images. Non-blocking method - returns immediately.
- * @param completion    An block that should be executed after cache expiration completes (optional)
- */
-- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion;
-
-/**
- * Clear all disk cached images
- * @see clearDiskOnCompletion:
- */
-- (void)clearDisk;
-
-/**
- * Remove all expired cached image from disk. Non-blocking method - returns immediately.
- * @param completionBlock An block that should be executed after cache expiration completes (optional)
- */
-- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock;
-
-/**
- * Remove all expired cached image from disk
- * @see cleanDiskWithCompletionBlock:
- */
-- (void)cleanDisk;
-
-/**
- * Get the size used by the disk cache
- */
-- (NSUInteger)getSize;
-
-/**
- * Get the number of images in the disk cache
- */
-- (NSUInteger)getDiskCount;
-
-/**
- * Asynchronously calculate the disk cache's size.
- */
-- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock;
-
-/**
- *  Async check if image exists in disk cache already (does not load the image)
- *
- *  @param key             the key describing the url
- *  @param completionBlock the block to be executed when the check is done.
- *  @note the completion block will be always executed on the main queue
- */
-- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;
-
-/**
- *  Check if image exists in disk cache already (does not load the image)
- *
- *  @param key the key describing the url
- *
- *  @return YES if an image exists for the given key
- */
-- (BOOL)diskImageExistsWithKey:(NSString *)key;
-
-/**
- *  Get the cache path for a certain key (needs the cache path root folder)
- *
- *  @param key  the key (can be obtained from url using cacheKeyForURL)
- *  @param path the cache path root folder
- *
- *  @return the cache path
- */
-- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path;
-
-/**
- *  Get the default cache path for a certain key
- *
- *  @param key the key (can be obtained from url using cacheKeyForURL)
- *
- *  @return the default cache path
- */
-- (NSString *)defaultCachePathForKey:(NSString *)key;
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDImageCache.m b/ios/Pods/SDWebImage/SDWebImage/SDImageCache.m
deleted file mode 100644
index aa0ff6c..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDImageCache.m
+++ /dev/null
@@ -1,650 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDImageCache.h"
-#import "SDWebImageDecoder.h"
-#import "UIImage+MultiFormat.h"
-#import <CommonCrypto/CommonDigest.h>
-
-// See https://github.com/rs/SDWebImage/pull/1141 for discussion
-@interface AutoPurgeCache : NSCache
-@end
-
-@implementation AutoPurgeCache
-
-- (id)init
-{
-    self = [super init];
-    if (self) {
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
-    }
-    return self;
-}
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
-
-}
-
-@end
-
-static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week
-// PNG signature bytes and data (below)
-static unsigned char kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};
-static NSData *kPNGSignatureData = nil;
-
-BOOL ImageDataHasPNGPreffix(NSData *data);
-
-BOOL ImageDataHasPNGPreffix(NSData *data) {
-    NSUInteger pngSignatureLength = [kPNGSignatureData length];
-    if ([data length] >= pngSignatureLength) {
-        if ([[data subdataWithRange:NSMakeRange(0, pngSignatureLength)] isEqualToData:kPNGSignatureData]) {
-            return YES;
-        }
-    }
-
-    return NO;
-}
-
-FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
-    return image.size.height * image.size.width * image.scale * image.scale;
-}
-
-@interface SDImageCache ()
-
-@property (strong, nonatomic) NSCache *memCache;
-@property (strong, nonatomic) NSString *diskCachePath;
-@property (strong, nonatomic) NSMutableArray *customPaths;
-@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue;
-
-@end
-
-
-@implementation SDImageCache {
-    NSFileManager *_fileManager;
-}
-
-+ (SDImageCache *)sharedImageCache {
-    static dispatch_once_t once;
-    static id instance;
-    dispatch_once(&once, ^{
-        instance = [self new];
-    });
-    return instance;
-}
-
-- (id)init {
-    return [self initWithNamespace:@"default"];
-}
-
-- (id)initWithNamespace:(NSString *)ns {
-    NSString *path = [self makeDiskCachePath:ns];
-    return [self initWithNamespace:ns diskCacheDirectory:path];
-}
-
-- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory {
-    if ((self = [super init])) {
-        NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns];
-
-        // initialise PNG signature data
-        kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8];
-
-        // Create IO serial queue
-        _ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL);
-
-        // Init default values
-        _maxCacheAge = kDefaultCacheMaxCacheAge;
-
-        // Init the memory cache
-        _memCache = [[AutoPurgeCache alloc] init];
-        _memCache.name = fullNamespace;
-
-        // Init the disk cache
-        if (directory != nil) {
-            _diskCachePath = [directory stringByAppendingPathComponent:fullNamespace];
-        } else {
-            NSString *path = [self makeDiskCachePath:ns];
-            _diskCachePath = path;
-        }
-
-        // Set decompression to YES
-        _shouldDecompressImages = YES;
-
-        // memory cache enabled
-        _shouldCacheImagesInMemory = YES;
-
-        // Disable iCloud
-        _shouldDisableiCloud = YES;
-
-        dispatch_sync(_ioQueue, ^{
-            _fileManager = [NSFileManager new];
-        });
-
-#if TARGET_OS_IPHONE
-        // Subscribe to app events
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(clearMemory)
-                                                     name:UIApplicationDidReceiveMemoryWarningNotification
-                                                   object:nil];
-
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(cleanDisk)
-                                                     name:UIApplicationWillTerminateNotification
-                                                   object:nil];
-
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(backgroundCleanDisk)
-                                                     name:UIApplicationDidEnterBackgroundNotification
-                                                   object:nil];
-#endif
-    }
-
-    return self;
-}
-
-- (void)dealloc {
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-    SDDispatchQueueRelease(_ioQueue);
-}
-
-- (void)addReadOnlyCachePath:(NSString *)path {
-    if (!self.customPaths) {
-        self.customPaths = [NSMutableArray new];
-    }
-
-    if (![self.customPaths containsObject:path]) {
-        [self.customPaths addObject:path];
-    }
-}
-
-- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path {
-    NSString *filename = [self cachedFileNameForKey:key];
-    return [path stringByAppendingPathComponent:filename];
-}
-
-- (NSString *)defaultCachePathForKey:(NSString *)key {
-    return [self cachePathForKey:key inPath:self.diskCachePath];
-}
-
-#pragma mark SDImageCache (private)
-
-- (NSString *)cachedFileNameForKey:(NSString *)key {
-    const char *str = [key UTF8String];
-    if (str == NULL) {
-        str = "";
-    }
-    unsigned char r[CC_MD5_DIGEST_LENGTH];
-    CC_MD5(str, (CC_LONG)strlen(str), r);
-    NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@",
-                          r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10],
-                          r[11], r[12], r[13], r[14], r[15], [[key pathExtension] isEqualToString:@""] ? @"" : [NSString stringWithFormat:@".%@", [key pathExtension]]];
-
-    return filename;
-}
-
-#pragma mark ImageCache
-
-// Init the disk cache
--(NSString *)makeDiskCachePath:(NSString*)fullNamespace{
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
-    return [paths[0] stringByAppendingPathComponent:fullNamespace];
-}
-
-- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk {
-    if (!image || !key) {
-        return;
-    }
-    // if memory cache is enabled
-    if (self.shouldCacheImagesInMemory) {
-        NSUInteger cost = SDCacheCostForImage(image);
-        [self.memCache setObject:image forKey:key cost:cost];
-    }
-
-    if (toDisk) {
-        dispatch_async(self.ioQueue, ^{
-            NSData *data = imageData;
-
-            if (image && (recalculate || !data)) {
-#if TARGET_OS_IPHONE
-                // We need to determine if the image is a PNG or a JPEG
-                // PNGs are easier to detect because they have a unique signature (http://www.w3.org/TR/PNG-Structure.html)
-                // The first eight bytes of a PNG file always contain the following (decimal) values:
-                // 137 80 78 71 13 10 26 10
-
-                // If the imageData is nil (i.e. if trying to save a UIImage directly or the image was transformed on download)
-                // and the image has an alpha channel, we will consider it PNG to avoid losing the transparency
-                int alphaInfo = CGImageGetAlphaInfo(image.CGImage);
-                BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone ||
-                                  alphaInfo == kCGImageAlphaNoneSkipFirst ||
-                                  alphaInfo == kCGImageAlphaNoneSkipLast);
-                BOOL imageIsPng = hasAlpha;
-
-                // But if we have an image data, we will look at the preffix
-                if ([imageData length] >= [kPNGSignatureData length]) {
-                    imageIsPng = ImageDataHasPNGPreffix(imageData);
-                }
-
-                if (imageIsPng) {
-                    data = UIImagePNGRepresentation(image);
-                }
-                else {
-                    data = UIImageJPEGRepresentation(image, (CGFloat)1.0);
-                }
-#else
-                data = [NSBitmapImageRep representationOfImageRepsInArray:image.representations usingType: NSJPEGFileType properties:nil];
-#endif
-            }
-
-            if (data) {
-                if (![_fileManager fileExistsAtPath:_diskCachePath]) {
-                    [_fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL];
-                }
-
-                // get cache Path for image key
-                NSString *cachePathForKey = [self defaultCachePathForKey:key];
-                // transform to NSUrl
-                NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey];
-
-                [_fileManager createFileAtPath:cachePathForKey contents:data attributes:nil];
-
-                // disable iCloud backup
-                if (self.shouldDisableiCloud) {
-                    [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];
-                }
-            }
-        });
-    }
-}
-
-- (void)storeImage:(UIImage *)image forKey:(NSString *)key {
-    [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:YES];
-}
-
-- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk {
-    [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:toDisk];
-}
-
-- (BOOL)diskImageExistsWithKey:(NSString *)key {
-    BOOL exists = NO;
-    
-    // this is an exception to access the filemanager on another queue than ioQueue, but we are using the shared instance
-    // from apple docs on NSFileManager: The methods of the shared NSFileManager object can be called from multiple threads safely.
-    exists = [[NSFileManager defaultManager] fileExistsAtPath:[self defaultCachePathForKey:key]];
-
-    // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
-    // checking the key with and without the extension
-    if (!exists) {
-        exists = [[NSFileManager defaultManager] fileExistsAtPath:[[self defaultCachePathForKey:key] stringByDeletingPathExtension]];
-    }
-    
-    return exists;
-}
-
-- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {
-    dispatch_async(_ioQueue, ^{
-        BOOL exists = [_fileManager fileExistsAtPath:[self defaultCachePathForKey:key]];
-
-        // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
-        // checking the key with and without the extension
-        if (!exists) {
-            exists = [_fileManager fileExistsAtPath:[[self defaultCachePathForKey:key] stringByDeletingPathExtension]];
-        }
-
-        if (completionBlock) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                completionBlock(exists);
-            });
-        }
-    });
-}
-
-- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key {
-    return [self.memCache objectForKey:key];
-}
-
-- (UIImage *)imageFromDiskCacheForKey:(NSString *)key {
-
-    // First check the in-memory cache...
-    UIImage *image = [self imageFromMemoryCacheForKey:key];
-    if (image) {
-        return image;
-    }
-
-    // Second check the disk cache...
-    UIImage *diskImage = [self diskImageForKey:key];
-    if (diskImage && self.shouldCacheImagesInMemory) {
-        NSUInteger cost = SDCacheCostForImage(diskImage);
-        [self.memCache setObject:diskImage forKey:key cost:cost];
-    }
-
-    return diskImage;
-}
-
-- (NSData *)diskImageDataBySearchingAllPathsForKey:(NSString *)key {
-    NSString *defaultPath = [self defaultCachePathForKey:key];
-    NSData *data = [NSData dataWithContentsOfFile:defaultPath];
-    if (data) {
-        return data;
-    }
-
-    // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
-    // checking the key with and without the extension
-    data = [NSData dataWithContentsOfFile:[defaultPath stringByDeletingPathExtension]];
-    if (data) {
-        return data;
-    }
-
-    NSArray *customPaths = [self.customPaths copy];
-    for (NSString *path in customPaths) {
-        NSString *filePath = [self cachePathForKey:key inPath:path];
-        NSData *imageData = [NSData dataWithContentsOfFile:filePath];
-        if (imageData) {
-            return imageData;
-        }
-
-        // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
-        // checking the key with and without the extension
-        imageData = [NSData dataWithContentsOfFile:[filePath stringByDeletingPathExtension]];
-        if (imageData) {
-            return imageData;
-        }
-    }
-
-    return nil;
-}
-
-- (UIImage *)diskImageForKey:(NSString *)key {
-    NSData *data = [self diskImageDataBySearchingAllPathsForKey:key];
-    if (data) {
-        UIImage *image = [UIImage sd_imageWithData:data];
-        image = [self scaledImageForKey:key image:image];
-        if (self.shouldDecompressImages) {
-            image = [UIImage decodedImageWithImage:image];
-        }
-        return image;
-    }
-    else {
-        return nil;
-    }
-}
-
-- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image {
-    return SDScaledImageForKey(key, image);
-}
-
-- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock {
-    if (!doneBlock) {
-        return nil;
-    }
-
-    if (!key) {
-        doneBlock(nil, SDImageCacheTypeNone);
-        return nil;
-    }
-
-    // First check the in-memory cache...
-    UIImage *image = [self imageFromMemoryCacheForKey:key];
-    if (image) {
-        doneBlock(image, SDImageCacheTypeMemory);
-        return nil;
-    }
-
-    NSOperation *operation = [NSOperation new];
-    dispatch_async(self.ioQueue, ^{
-        if (operation.isCancelled) {
-            return;
-        }
-
-        @autoreleasepool {
-            UIImage *diskImage = [self diskImageForKey:key];
-            if (diskImage && self.shouldCacheImagesInMemory) {
-                NSUInteger cost = SDCacheCostForImage(diskImage);
-                [self.memCache setObject:diskImage forKey:key cost:cost];
-            }
-
-            dispatch_async(dispatch_get_main_queue(), ^{
-                doneBlock(diskImage, SDImageCacheTypeDisk);
-            });
-        }
-    });
-
-    return operation;
-}
-
-- (void)removeImageForKey:(NSString *)key {
-    [self removeImageForKey:key withCompletion:nil];
-}
-
-- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion {
-    [self removeImageForKey:key fromDisk:YES withCompletion:completion];
-}
-
-- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk {
-    [self removeImageForKey:key fromDisk:fromDisk withCompletion:nil];
-}
-
-- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion {
-    
-    if (key == nil) {
-        return;
-    }
-
-    if (self.shouldCacheImagesInMemory) {
-        [self.memCache removeObjectForKey:key];
-    }
-
-    if (fromDisk) {
-        dispatch_async(self.ioQueue, ^{
-            [_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil];
-            
-            if (completion) {
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    completion();
-                });
-            }
-        });
-    } else if (completion){
-        completion();
-    }
-    
-}
-
-- (void)setMaxMemoryCost:(NSUInteger)maxMemoryCost {
-    self.memCache.totalCostLimit = maxMemoryCost;
-}
-
-- (NSUInteger)maxMemoryCost {
-    return self.memCache.totalCostLimit;
-}
-
-- (NSUInteger)maxMemoryCountLimit {
-    return self.memCache.countLimit;
-}
-
-- (void)setMaxMemoryCountLimit:(NSUInteger)maxCountLimit {
-    self.memCache.countLimit = maxCountLimit;
-}
-
-- (void)clearMemory {
-    [self.memCache removeAllObjects];
-}
-
-- (void)clearDisk {
-    [self clearDiskOnCompletion:nil];
-}
-
-- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion
-{
-    dispatch_async(self.ioQueue, ^{
-        [_fileManager removeItemAtPath:self.diskCachePath error:nil];
-        [_fileManager createDirectoryAtPath:self.diskCachePath
-                withIntermediateDirectories:YES
-                                 attributes:nil
-                                      error:NULL];
-
-        if (completion) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                completion();
-            });
-        }
-    });
-}
-
-- (void)cleanDisk {
-    [self cleanDiskWithCompletionBlock:nil];
-}
-
-- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock {
-    dispatch_async(self.ioQueue, ^{
-        NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
-        NSArray *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentModificationDateKey, NSURLTotalFileAllocatedSizeKey];
-
-        // This enumerator prefetches useful properties for our cache files.
-        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL
-                                                   includingPropertiesForKeys:resourceKeys
-                                                                      options:NSDirectoryEnumerationSkipsHiddenFiles
-                                                                 errorHandler:NULL];
-
-        NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.maxCacheAge];
-        NSMutableDictionary *cacheFiles = [NSMutableDictionary dictionary];
-        NSUInteger currentCacheSize = 0;
-
-        // Enumerate all of the files in the cache directory.  This loop has two purposes:
-        //
-        //  1. Removing files that are older than the expiration date.
-        //  2. Storing file attributes for the size-based cleanup pass.
-        NSMutableArray *urlsToDelete = [[NSMutableArray alloc] init];
-        for (NSURL *fileURL in fileEnumerator) {
-            NSDictionary *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:NULL];
-
-            // Skip directories.
-            if ([resourceValues[NSURLIsDirectoryKey] boolValue]) {
-                continue;
-            }
-
-            // Remove files that are older than the expiration date;
-            NSDate *modificationDate = resourceValues[NSURLContentModificationDateKey];
-            if ([[modificationDate laterDate:expirationDate] isEqualToDate:expirationDate]) {
-                [urlsToDelete addObject:fileURL];
-                continue;
-            }
-
-            // Store a reference to this file and account for its total size.
-            NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey];
-            currentCacheSize += [totalAllocatedSize unsignedIntegerValue];
-            [cacheFiles setObject:resourceValues forKey:fileURL];
-        }
-        
-        for (NSURL *fileURL in urlsToDelete) {
-            [_fileManager removeItemAtURL:fileURL error:nil];
-        }
-
-        // If our remaining disk cache exceeds a configured maximum size, perform a second
-        // size-based cleanup pass.  We delete the oldest files first.
-        if (self.maxCacheSize > 0 && currentCacheSize > self.maxCacheSize) {
-            // Target half of our maximum cache size for this cleanup pass.
-            const NSUInteger desiredCacheSize = self.maxCacheSize / 2;
-
-            // Sort the remaining cache files by their last modification time (oldest first).
-            NSArray *sortedFiles = [cacheFiles keysSortedByValueWithOptions:NSSortConcurrent
-                                                            usingComparator:^NSComparisonResult(id obj1, id obj2) {
-                                                                return [obj1[NSURLContentModificationDateKey] compare:obj2[NSURLContentModificationDateKey]];
-                                                            }];
-
-            // Delete files until we fall below our desired cache size.
-            for (NSURL *fileURL in sortedFiles) {
-                if ([_fileManager removeItemAtURL:fileURL error:nil]) {
-                    NSDictionary *resourceValues = cacheFiles[fileURL];
-                    NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey];
-                    currentCacheSize -= [totalAllocatedSize unsignedIntegerValue];
-
-                    if (currentCacheSize < desiredCacheSize) {
-                        break;
-                    }
-                }
-            }
-        }
-        if (completionBlock) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                completionBlock();
-            });
-        }
-    });
-}
-
-- (void)backgroundCleanDisk {
-    Class UIApplicationClass = NSClassFromString(@"UIApplication");
-    if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) {
-        return;
-    }
-    UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)];
-    __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
-        // Clean up any unfinished task business by marking where you
-        // stopped or ending the task outright.
-        [application endBackgroundTask:bgTask];
-        bgTask = UIBackgroundTaskInvalid;
-    }];
-
-    // Start the long-running task and return immediately.
-    [self cleanDiskWithCompletionBlock:^{
-        [application endBackgroundTask:bgTask];
-        bgTask = UIBackgroundTaskInvalid;
-    }];
-}
-
-- (NSUInteger)getSize {
-    __block NSUInteger size = 0;
-    dispatch_sync(self.ioQueue, ^{
-        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
-        for (NSString *fileName in fileEnumerator) {
-            NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
-            NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
-            size += [attrs fileSize];
-        }
-    });
-    return size;
-}
-
-- (NSUInteger)getDiskCount {
-    __block NSUInteger count = 0;
-    dispatch_sync(self.ioQueue, ^{
-        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
-        count = [[fileEnumerator allObjects] count];
-    });
-    return count;
-}
-
-- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock {
-    NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
-
-    dispatch_async(self.ioQueue, ^{
-        NSUInteger fileCount = 0;
-        NSUInteger totalSize = 0;
-
-        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL
-                                                   includingPropertiesForKeys:@[NSFileSize]
-                                                                      options:NSDirectoryEnumerationSkipsHiddenFiles
-                                                                 errorHandler:NULL];
-
-        for (NSURL *fileURL in fileEnumerator) {
-            NSNumber *fileSize;
-            [fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL];
-            totalSize += [fileSize unsignedIntegerValue];
-            fileCount += 1;
-        }
-
-        if (completionBlock) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                completionBlock(fileCount, totalSize);
-            });
-        }
-    });
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h b/ios/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h
deleted file mode 100644
index 3c21b41..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- * (c) Jamie Pinkham
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <TargetConditionals.h>
-
-#ifdef __OBJC_GC__
-#error SDWebImage does not support Objective-C Garbage Collection
-#endif
-
-#if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0
-#error SDWebImage doesn't support Deployment Target version < 5.0
-#endif
-
-#if !TARGET_OS_IPHONE
-#import <AppKit/AppKit.h>
-#ifndef UIImage
-#define UIImage NSImage
-#endif
-#ifndef UIImageView
-#define UIImageView NSImageView
-#endif
-#else
-
-#import <UIKit/UIKit.h>
-
-#endif
-
-#ifndef NS_ENUM
-#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
-#endif
-
-#ifndef NS_OPTIONS
-#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type
-#endif
-
-#if OS_OBJECT_USE_OBJC
-    #undef SDDispatchQueueRelease
-    #undef SDDispatchQueueSetterSementics
-    #define SDDispatchQueueRelease(q)
-    #define SDDispatchQueueSetterSementics strong
-#else
-#undef SDDispatchQueueRelease
-#undef SDDispatchQueueSetterSementics
-#define SDDispatchQueueRelease(q) (dispatch_release(q))
-#define SDDispatchQueueSetterSementics assign
-#endif
-
-extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image);
-
-typedef void(^SDWebImageNoParamsBlock)();
-
-extern NSString *const SDWebImageErrorDomain;
-
-#define dispatch_main_sync_safe(block)\
-    if ([NSThread isMainThread]) {\
-        block();\
-    } else {\
-        dispatch_sync(dispatch_get_main_queue(), block);\
-    }
-
-#define dispatch_main_async_safe(block)\
-    if ([NSThread isMainThread]) {\
-        block();\
-    } else {\
-        dispatch_async(dispatch_get_main_queue(), block);\
-    }
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m b/ios/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m
deleted file mode 100644
index 9a011bc..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-//  SDWebImageCompat.m
-//  SDWebImage
-//
-//  Created by Olivier Poitrey on 11/12/12.
-//  Copyright (c) 2012 Dailymotion. All rights reserved.
-//
-
-#import "SDWebImageCompat.h"
-
-#if !__has_feature(objc_arc)
-#error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag
-#endif
-
-inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) {
-    if (!image) {
-        return nil;
-    }
-    
-    if ([image.images count] > 0) {
-        NSMutableArray *scaledImages = [NSMutableArray array];
-
-        for (UIImage *tempImage in image.images) {
-            [scaledImages addObject:SDScaledImageForKey(key, tempImage)];
-        }
-
-        return [UIImage animatedImageWithImages:scaledImages duration:image.duration];
-    }
-    else {
-        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
-            CGFloat scale = [UIScreen mainScreen].scale;
-            if (key.length >= 8) {
-                NSRange range = [key rangeOfString:@"@2x."];
-                if (range.location != NSNotFound) {
-                    scale = 2.0;
-                }
-                
-                range = [key rangeOfString:@"@3x."];
-                if (range.location != NSNotFound) {
-                    scale = 3.0;
-                }
-            }
-
-            UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];
-            image = scaledImage;
-        }
-        return image;
-    }
-}
-
-NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain";
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h b/ios/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h
deleted file mode 100644
index 0176a7b..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * Created by james <https://github.com/mystcolor> on 9/28/11.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageCompat.h"
-
-@interface UIImage (ForceDecode)
-
-+ (UIImage *)decodedImageWithImage:(UIImage *)image;
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m b/ios/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m
deleted file mode 100644
index a7c0246..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * Created by james <https://github.com/mystcolor> on 9/28/11.
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageDecoder.h"
-
-@implementation UIImage (ForceDecode)
-
-+ (UIImage *)decodedImageWithImage:(UIImage *)image {
-    // while downloading huge amount of images
-    // autorelease the bitmap context
-    // and all vars to help system to free memory
-    // when there are memory warning.
-    // on iOS7, do not forget to call
-    // [[SDImageCache sharedImageCache] clearMemory];
-    @autoreleasepool{
-        // do not decode animated images
-        if (image.images) { return image; }
-    
-        CGImageRef imageRef = image.CGImage;
-    
-        CGImageAlphaInfo alpha = CGImageGetAlphaInfo(imageRef);
-        BOOL anyAlpha = (alpha == kCGImageAlphaFirst ||
-                         alpha == kCGImageAlphaLast ||
-                         alpha == kCGImageAlphaPremultipliedFirst ||
-                         alpha == kCGImageAlphaPremultipliedLast);
-    
-        if (anyAlpha) { return image; }
-    
-        size_t width = CGImageGetWidth(imageRef);
-        size_t height = CGImageGetHeight(imageRef);
-    
-        // current
-        CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(CGImageGetColorSpace(imageRef));
-        CGColorSpaceRef colorspaceRef = CGImageGetColorSpace(imageRef);
-        
-        bool unsupportedColorSpace = (imageColorSpaceModel == 0 || imageColorSpaceModel == -1 || imageColorSpaceModel == kCGColorSpaceModelCMYK || imageColorSpaceModel == kCGColorSpaceModelIndexed);
-        if (unsupportedColorSpace)
-            colorspaceRef = CGColorSpaceCreateDeviceRGB();
-    
-        CGContextRef context = CGBitmapContextCreate(NULL, width,
-                                                     height,
-                                                     CGImageGetBitsPerComponent(imageRef),
-                                                     0,
-                                                     colorspaceRef,
-                                                     kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);
-    
-        // Draw the image into the context and retrieve the new image, which will now have an alpha layer
-        CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
-        CGImageRef imageRefWithAlpha = CGBitmapContextCreateImage(context);
-        UIImage *imageWithAlpha = [UIImage imageWithCGImage:imageRefWithAlpha scale:image.scale orientation:image.imageOrientation];
-    
-        if (unsupportedColorSpace)
-            CGColorSpaceRelease(colorspaceRef);
-        
-        CGContextRelease(context);
-        CGImageRelease(imageRefWithAlpha);
-        
-        return imageWithAlpha;
-    }
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h b/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h
deleted file mode 100644
index b64fb13..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageCompat.h"
-#import "SDWebImageOperation.h"
-
-typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) {
-    SDWebImageDownloaderLowPriority = 1 << 0,
-    SDWebImageDownloaderProgressiveDownload = 1 << 1,
-
-    /**
-     * By default, request prevent the of NSURLCache. With this flag, NSURLCache
-     * is used with default policies.
-     */
-    SDWebImageDownloaderUseNSURLCache = 1 << 2,
-
-    /**
-     * Call completion block with nil image/imageData if the image was read from NSURLCache
-     * (to be combined with `SDWebImageDownloaderUseNSURLCache`).
-     */
-
-    SDWebImageDownloaderIgnoreCachedResponse = 1 << 3,
-    /**
-     * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for
-     * extra time in background to let the request finish. If the background task expires the operation will be cancelled.
-     */
-
-    SDWebImageDownloaderContinueInBackground = 1 << 4,
-
-    /**
-     * Handles cookies stored in NSHTTPCookieStore by setting 
-     * NSMutableURLRequest.HTTPShouldHandleCookies = YES;
-     */
-    SDWebImageDownloaderHandleCookies = 1 << 5,
-
-    /**
-     * Enable to allow untrusted SSL certificates.
-     * Useful for testing purposes. Use with caution in production.
-     */
-    SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6,
-
-    /**
-     * Put the image in the high priority queue.
-     */
-    SDWebImageDownloaderHighPriority = 1 << 7,
-};
-
-typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) {
-    /**
-     * Default value. All download operations will execute in queue style (first-in-first-out).
-     */
-    SDWebImageDownloaderFIFOExecutionOrder,
-
-    /**
-     * All download operations will execute in stack style (last-in-first-out).
-     */
-    SDWebImageDownloaderLIFOExecutionOrder
-};
-
-extern NSString *const SDWebImageDownloadStartNotification;
-extern NSString *const SDWebImageDownloadStopNotification;
-
-typedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize);
-
-typedef void(^SDWebImageDownloaderCompletedBlock)(UIImage *image, NSData *data, NSError *error, BOOL finished);
-
-typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDictionary *headers);
-
-/**
- * Asynchronous downloader dedicated and optimized for image loading.
- */
-@interface SDWebImageDownloader : NSObject
-
-/**
- * Decompressing images that are downloaded and cached can improve performance but can consume lot of memory.
- * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.
- */
-@property (assign, nonatomic) BOOL shouldDecompressImages;
-
-@property (assign, nonatomic) NSInteger maxConcurrentDownloads;
-
-/**
- * Shows the current amount of downloads that still need to be downloaded
- */
-@property (readonly, nonatomic) NSUInteger currentDownloadCount;
-
-
-/**
- *  The timeout value (in seconds) for the download operation. Default: 15.0.
- */
-@property (assign, nonatomic) NSTimeInterval downloadTimeout;
-
-
-/**
- * Changes download operations execution order. Default value is `SDWebImageDownloaderFIFOExecutionOrder`.
- */
-@property (assign, nonatomic) SDWebImageDownloaderExecutionOrder executionOrder;
-
-/**
- *  Singleton method, returns the shared instance
- *
- *  @return global shared instance of downloader class
- */
-+ (SDWebImageDownloader *)sharedDownloader;
-
-/**
- *  Set the default URL credential to be set for request operations.
- */
-@property (strong, nonatomic) NSURLCredential *urlCredential;
-
-/**
- * Set username
- */
-@property (strong, nonatomic) NSString *username;
-
-/**
- * Set password
- */
-@property (strong, nonatomic) NSString *password;
-
-/**
- * Set filter to pick headers for downloading image HTTP request.
- *
- * This block will be invoked for each downloading image request, returned
- * NSDictionary will be used as headers in corresponding HTTP request.
- */
-@property (nonatomic, copy) SDWebImageDownloaderHeadersFilterBlock headersFilter;
-
-/**
- * Set a value for a HTTP header to be appended to each download HTTP request.
- *
- * @param value The value for the header field. Use `nil` value to remove the header.
- * @param field The name of the header field to set.
- */
-- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
-
-/**
- * Returns the value of the specified HTTP header field.
- *
- * @return The value associated with the header field field, or `nil` if there is no corresponding header field.
- */
-- (NSString *)valueForHTTPHeaderField:(NSString *)field;
-
-/**
- * Sets a subclass of `SDWebImageDownloaderOperation` as the default
- * `NSOperation` to be used each time SDWebImage constructs a request
- * operation to download an image.
- *
- * @param operationClass The subclass of `SDWebImageDownloaderOperation` to set 
- *        as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`.
- */
-- (void)setOperationClass:(Class)operationClass;
-
-/**
- * Creates a SDWebImageDownloader async downloader instance with a given URL
- *
- * The delegate will be informed when the image is finish downloaded or an error has happen.
- *
- * @see SDWebImageDownloaderDelegate
- *
- * @param url            The URL to the image to download
- * @param options        The options to be used for this download
- * @param progressBlock  A block called repeatedly while the image is downloading
- * @param completedBlock A block called once the download is completed.
- *                       If the download succeeded, the image parameter is set, in case of error,
- *                       error parameter is set with the error. The last parameter is always YES
- *                       if SDWebImageDownloaderProgressiveDownload isn't use. With the
- *                       SDWebImageDownloaderProgressiveDownload option, this block is called
- *                       repeatedly with the partial image object and the finished argument set to NO
- *                       before to be called a last time with the full image and finished argument
- *                       set to YES. In case of error, the finished argument is always YES.
- *
- * @return A cancellable SDWebImageOperation
- */
-- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
-                                         options:(SDWebImageDownloaderOptions)options
-                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
-                                       completed:(SDWebImageDownloaderCompletedBlock)completedBlock;
-
-/**
- * Sets the download queue suspension state
- */
-- (void)setSuspended:(BOOL)suspended;
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m b/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m
deleted file mode 100644
index 1fdcfc9..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageDownloader.h"
-#import "SDWebImageDownloaderOperation.h"
-#import <ImageIO/ImageIO.h>
-
-static NSString *const kProgressCallbackKey = @"progress";
-static NSString *const kCompletedCallbackKey = @"completed";
-
-@interface SDWebImageDownloader ()
-
-@property (strong, nonatomic) NSOperationQueue *downloadQueue;
-@property (weak, nonatomic) NSOperation *lastAddedOperation;
-@property (assign, nonatomic) Class operationClass;
-@property (strong, nonatomic) NSMutableDictionary *URLCallbacks;
-@property (strong, nonatomic) NSMutableDictionary *HTTPHeaders;
-// This queue is used to serialize the handling of the network responses of all the download operation in a single queue
-@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t barrierQueue;
-
-@end
-
-@implementation SDWebImageDownloader
-
-+ (void)initialize {
-    // Bind SDNetworkActivityIndicator if available (download it here: http://github.com/rs/SDNetworkActivityIndicator )
-    // To use it, just add #import "SDNetworkActivityIndicator.h" in addition to the SDWebImage import
-    if (NSClassFromString(@"SDNetworkActivityIndicator")) {
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-        id activityIndicator = [NSClassFromString(@"SDNetworkActivityIndicator") performSelector:NSSelectorFromString(@"sharedActivityIndicator")];
-#pragma clang diagnostic pop
-
-        // Remove observer in case it was previously added.
-        [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStartNotification object:nil];
-        [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStopNotification object:nil];
-
-        [[NSNotificationCenter defaultCenter] addObserver:activityIndicator
-                                                 selector:NSSelectorFromString(@"startActivity")
-                                                     name:SDWebImageDownloadStartNotification object:nil];
-        [[NSNotificationCenter defaultCenter] addObserver:activityIndicator
-                                                 selector:NSSelectorFromString(@"stopActivity")
-                                                     name:SDWebImageDownloadStopNotification object:nil];
-    }
-}
-
-+ (SDWebImageDownloader *)sharedDownloader {
-    static dispatch_once_t once;
-    static id instance;
-    dispatch_once(&once, ^{
-        instance = [self new];
-    });
-    return instance;
-}
-
-- (id)init {
-    if ((self = [super init])) {
-        _operationClass = [SDWebImageDownloaderOperation class];
-        _shouldDecompressImages = YES;
-        _executionOrder = SDWebImageDownloaderFIFOExecutionOrder;
-        _downloadQueue = [NSOperationQueue new];
-        _downloadQueue.maxConcurrentOperationCount = 6;
-        _URLCallbacks = [NSMutableDictionary new];
-#ifdef SD_WEBP
-        _HTTPHeaders = [@{@"Accept": @"image/webp,image/*;q=0.8"} mutableCopy];
-#else
-        _HTTPHeaders = [@{@"Accept": @"image/*;q=0.8"} mutableCopy];
-#endif
-        _barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT);
-        _downloadTimeout = 15.0;
-    }
-    return self;
-}
-
-- (void)dealloc {
-    [self.downloadQueue cancelAllOperations];
-    SDDispatchQueueRelease(_barrierQueue);
-}
-
-- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field {
-    if (value) {
-        self.HTTPHeaders[field] = value;
-    }
-    else {
-        [self.HTTPHeaders removeObjectForKey:field];
-    }
-}
-
-- (NSString *)valueForHTTPHeaderField:(NSString *)field {
-    return self.HTTPHeaders[field];
-}
-
-- (void)setMaxConcurrentDownloads:(NSInteger)maxConcurrentDownloads {
-    _downloadQueue.maxConcurrentOperationCount = maxConcurrentDownloads;
-}
-
-- (NSUInteger)currentDownloadCount {
-    return _downloadQueue.operationCount;
-}
-
-- (NSInteger)maxConcurrentDownloads {
-    return _downloadQueue.maxConcurrentOperationCount;
-}
-
-- (void)setOperationClass:(Class)operationClass {
-    _operationClass = operationClass ?: [SDWebImageDownloaderOperation class];
-}
-
-- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock {
-    __block SDWebImageDownloaderOperation *operation;
-    __weak __typeof(self)wself = self;
-
-    [self addProgressCallback:progressBlock completedBlock:completedBlock forURL:url createCallback:^{
-        NSTimeInterval timeoutInterval = wself.downloadTimeout;
-        if (timeoutInterval == 0.0) {
-            timeoutInterval = 15.0;
-        }
-
-        // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise
-        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:(options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:timeoutInterval];
-        request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies);
-        request.HTTPShouldUsePipelining = YES;
-        if (wself.headersFilter) {
-            request.allHTTPHeaderFields = wself.headersFilter(url, [wself.HTTPHeaders copy]);
-        }
-        else {
-            request.allHTTPHeaderFields = wself.HTTPHeaders;
-        }
-        operation = [[wself.operationClass alloc] initWithRequest:request
-                                                          options:options
-                                                         progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-                                                             SDWebImageDownloader *sself = wself;
-                                                             if (!sself) return;
-                                                             __block NSArray *callbacksForURL;
-                                                             dispatch_sync(sself.barrierQueue, ^{
-                                                                 callbacksForURL = [sself.URLCallbacks[url] copy];
-                                                             });
-                                                             for (NSDictionary *callbacks in callbacksForURL) {
-                                                                 dispatch_async(dispatch_get_main_queue(), ^{
-                                                                     SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey];
-                                                                     if (callback) callback(receivedSize, expectedSize);
-                                                                 });
-                                                             }
-                                                         }
-                                                        completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
-                                                            SDWebImageDownloader *sself = wself;
-                                                            if (!sself) return;
-                                                            __block NSArray *callbacksForURL;
-                                                            dispatch_barrier_sync(sself.barrierQueue, ^{
-                                                                callbacksForURL = [sself.URLCallbacks[url] copy];
-                                                                if (finished) {
-                                                                    [sself.URLCallbacks removeObjectForKey:url];
-                                                                }
-                                                            });
-                                                            for (NSDictionary *callbacks in callbacksForURL) {
-                                                                SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey];
-                                                                if (callback) callback(image, data, error, finished);
-                                                            }
-                                                        }
-                                                        cancelled:^{
-                                                            SDWebImageDownloader *sself = wself;
-                                                            if (!sself) return;
-                                                            dispatch_barrier_async(sself.barrierQueue, ^{
-                                                                [sself.URLCallbacks removeObjectForKey:url];
-                                                            });
-                                                        }];
-        operation.shouldDecompressImages = wself.shouldDecompressImages;
-        
-        if (wself.urlCredential) {
-            operation.credential = wself.urlCredential;
-        } else if (wself.username && wself.password) {
-            operation.credential = [NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession];
-        }
-        
-        if (options & SDWebImageDownloaderHighPriority) {
-            operation.queuePriority = NSOperationQueuePriorityHigh;
-        } else if (options & SDWebImageDownloaderLowPriority) {
-            operation.queuePriority = NSOperationQueuePriorityLow;
-        }
-
-        [wself.downloadQueue addOperation:operation];
-        if (wself.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) {
-            // Emulate LIFO execution order by systematically adding new operations as last operation's dependency
-            [wself.lastAddedOperation addDependency:operation];
-            wself.lastAddedOperation = operation;
-        }
-    }];
-
-    return operation;
-}
-
-- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock completedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback {
-    // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data.
-    if (url == nil) {
-        if (completedBlock != nil) {
-            completedBlock(nil, nil, nil, NO);
-        }
-        return;
-    }
-
-    dispatch_barrier_sync(self.barrierQueue, ^{
-        BOOL first = NO;
-        if (!self.URLCallbacks[url]) {
-            self.URLCallbacks[url] = [NSMutableArray new];
-            first = YES;
-        }
-
-        // Handle single download of simultaneous download request for the same URL
-        NSMutableArray *callbacksForURL = self.URLCallbacks[url];
-        NSMutableDictionary *callbacks = [NSMutableDictionary new];
-        if (progressBlock) callbacks[kProgressCallbackKey] = [progressBlock copy];
-        if (completedBlock) callbacks[kCompletedCallbackKey] = [completedBlock copy];
-        [callbacksForURL addObject:callbacks];
-        self.URLCallbacks[url] = callbacksForURL;
-
-        if (first) {
-            createCallback();
-        }
-    });
-}
-
-- (void)setSuspended:(BOOL)suspended {
-    [self.downloadQueue setSuspended:suspended];
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h b/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
deleted file mode 100644
index dd48b22..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageDownloader.h"
-#import "SDWebImageOperation.h"
-
-extern NSString *const SDWebImageDownloadStartNotification;
-extern NSString *const SDWebImageDownloadReceiveResponseNotification;
-extern NSString *const SDWebImageDownloadStopNotification;
-extern NSString *const SDWebImageDownloadFinishNotification;
-
-@interface SDWebImageDownloaderOperation : NSOperation <SDWebImageOperation>
-
-/**
- * The request used by the operation's connection.
- */
-@property (strong, nonatomic, readonly) NSURLRequest *request;
-
-
-@property (assign, nonatomic) BOOL shouldDecompressImages;
-
-/**
- * Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default.
- *
- * This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`.
- */
-@property (nonatomic, assign) BOOL shouldUseCredentialStorage;
-
-/**
- * The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`.
- *
- * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present.
- */
-@property (nonatomic, strong) NSURLCredential *credential;
-
-/**
- * The SDWebImageDownloaderOptions for the receiver.
- */
-@property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options;
-
-/**
- * The expected size of data.
- */
-@property (assign, nonatomic) NSInteger expectedSize;
-
-/**
- * The response returned by the operation's connection.
- */
-@property (strong, nonatomic) NSURLResponse *response;
-
-/**
- *  Initializes a `SDWebImageDownloaderOperation` object
- *
- *  @see SDWebImageDownloaderOperation
- *
- *  @param request        the URL request
- *  @param options        downloader options
- *  @param progressBlock  the block executed when a new chunk of data arrives. 
- *                        @note the progress block is executed on a background queue
- *  @param completedBlock the block executed when the download is done. 
- *                        @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue
- *  @param cancelBlock    the block executed if the download (operation) is cancelled
- *
- *  @return the initialized instance
- */
-- (id)initWithRequest:(NSURLRequest *)request
-              options:(SDWebImageDownloaderOptions)options
-             progress:(SDWebImageDownloaderProgressBlock)progressBlock
-            completed:(SDWebImageDownloaderCompletedBlock)completedBlock
-            cancelled:(SDWebImageNoParamsBlock)cancelBlock;
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m b/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m
deleted file mode 100644
index 5a8bd11..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageDownloaderOperation.h"
-#import "SDWebImageDecoder.h"
-#import "UIImage+MultiFormat.h"
-#import <ImageIO/ImageIO.h>
-#import "SDWebImageManager.h"
-
-NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification";
-NSString *const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification";
-NSString *const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification";
-NSString *const SDWebImageDownloadFinishNotification = @"SDWebImageDownloadFinishNotification";
-
-@interface SDWebImageDownloaderOperation () <NSURLConnectionDataDelegate>
-
-@property (copy, nonatomic) SDWebImageDownloaderProgressBlock progressBlock;
-@property (copy, nonatomic) SDWebImageDownloaderCompletedBlock completedBlock;
-@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock;
-
-@property (assign, nonatomic, getter = isExecuting) BOOL executing;
-@property (assign, nonatomic, getter = isFinished) BOOL finished;
-@property (strong, nonatomic) NSMutableData *imageData;
-@property (strong, nonatomic) NSURLConnection *connection;
-@property (strong, atomic) NSThread *thread;
-
-#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
-@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId;
-#endif
-
-@end
-
-@implementation SDWebImageDownloaderOperation {
-    size_t width, height;
-    UIImageOrientation orientation;
-    BOOL responseFromCached;
-}
-
-@synthesize executing = _executing;
-@synthesize finished = _finished;
-
-- (id)initWithRequest:(NSURLRequest *)request
-              options:(SDWebImageDownloaderOptions)options
-             progress:(SDWebImageDownloaderProgressBlock)progressBlock
-            completed:(SDWebImageDownloaderCompletedBlock)completedBlock
-            cancelled:(SDWebImageNoParamsBlock)cancelBlock {
-    if ((self = [super init])) {
-        _request = request;
-        _shouldDecompressImages = YES;
-        _shouldUseCredentialStorage = YES;
-        _options = options;
-        _progressBlock = [progressBlock copy];
-        _completedBlock = [completedBlock copy];
-        _cancelBlock = [cancelBlock copy];
-        _executing = NO;
-        _finished = NO;
-        _expectedSize = 0;
-        responseFromCached = YES; // Initially wrong until `connection:willCacheResponse:` is called or not called
-    }
-    return self;
-}
-
-- (void)start {
-    @synchronized (self) {
-        if (self.isCancelled) {
-            self.finished = YES;
-            [self reset];
-            return;
-        }
-
-#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
-        Class UIApplicationClass = NSClassFromString(@"UIApplication");
-        BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)];
-        if (hasApplication && [self shouldContinueWhenAppEntersBackground]) {
-            __weak __typeof__ (self) wself = self;
-            UIApplication * app = [UIApplicationClass performSelector:@selector(sharedApplication)];
-            self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{
-                __strong __typeof (wself) sself = wself;
-
-                if (sself) {
-                    [sself cancel];
-
-                    [app endBackgroundTask:sself.backgroundTaskId];
-                    sself.backgroundTaskId = UIBackgroundTaskInvalid;
-                }
-            }];
-        }
-#endif
-
-        self.executing = YES;
-        self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO];
-        self.thread = [NSThread currentThread];
-    }
-
-    [self.connection start];
-
-    if (self.connection) {
-        if (self.progressBlock) {
-            self.progressBlock(0, NSURLResponseUnknownLength);
-        }
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self];
-        });
-
-        if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_5_1) {
-            // Make sure to run the runloop in our background thread so it can process downloaded data
-            // Note: we use a timeout to work around an issue with NSURLConnection cancel under iOS 5
-            //       not waking up the runloop, leading to dead threads (see https://github.com/rs/SDWebImage/issues/466)
-            CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, false);
-        }
-        else {
-            CFRunLoopRun();
-        }
-
-        if (!self.isFinished) {
-            [self.connection cancel];
-            [self connection:self.connection didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:@{NSURLErrorFailingURLErrorKey : self.request.URL}]];
-        }
-    }
-    else {
-        if (self.completedBlock) {
-            self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Connection can't be initialized"}], YES);
-        }
-    }
-
-#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
-    Class UIApplicationClass = NSClassFromString(@"UIApplication");
-    if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) {
-        return;
-    }
-    if (self.backgroundTaskId != UIBackgroundTaskInvalid) {
-        UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)];
-        [app endBackgroundTask:self.backgroundTaskId];
-        self.backgroundTaskId = UIBackgroundTaskInvalid;
-    }
-#endif
-}
-
-- (void)cancel {
-    @synchronized (self) {
-        if (self.thread) {
-            [self performSelector:@selector(cancelInternalAndStop) onThread:self.thread withObject:nil waitUntilDone:NO];
-        }
-        else {
-            [self cancelInternal];
-        }
-    }
-}
-
-- (void)cancelInternalAndStop {
-    if (self.isFinished) return;
-    [self cancelInternal];
-    CFRunLoopStop(CFRunLoopGetCurrent());
-}
-
-- (void)cancelInternal {
-    if (self.isFinished) return;
-    [super cancel];
-    if (self.cancelBlock) self.cancelBlock();
-
-    if (self.connection) {
-        [self.connection cancel];
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
-        });
-
-        // As we cancelled the connection, its callback won't be called and thus won't
-        // maintain the isFinished and isExecuting flags.
-        if (self.isExecuting) self.executing = NO;
-        if (!self.isFinished) self.finished = YES;
-    }
-
-    [self reset];
-}
-
-- (void)done {
-    self.finished = YES;
-    self.executing = NO;
-    [self reset];
-}
-
-- (void)reset {
-    self.cancelBlock = nil;
-    self.completedBlock = nil;
-    self.progressBlock = nil;
-    self.connection = nil;
-    self.imageData = nil;
-    self.thread = nil;
-}
-
-- (void)setFinished:(BOOL)finished {
-    [self willChangeValueForKey:@"isFinished"];
-    _finished = finished;
-    [self didChangeValueForKey:@"isFinished"];
-}
-
-- (void)setExecuting:(BOOL)executing {
-    [self willChangeValueForKey:@"isExecuting"];
-    _executing = executing;
-    [self didChangeValueForKey:@"isExecuting"];
-}
-
-- (BOOL)isConcurrent {
-    return YES;
-}
-
-#pragma mark NSURLConnection (delegate)
-
-- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
-    
-    //'304 Not Modified' is an exceptional one
-    if (![response respondsToSelector:@selector(statusCode)] || ([((NSHTTPURLResponse *)response) statusCode] < 400 && [((NSHTTPURLResponse *)response) statusCode] != 304)) {
-        NSInteger expected = response.expectedContentLength > 0 ? (NSInteger)response.expectedContentLength : 0;
-        self.expectedSize = expected;
-        if (self.progressBlock) {
-            self.progressBlock(0, expected);
-        }
-
-        self.imageData = [[NSMutableData alloc] initWithCapacity:expected];
-        self.response = response;
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:self];
-        });
-    }
-    else {
-        NSUInteger code = [((NSHTTPURLResponse *)response) statusCode];
-        
-        //This is the case when server returns '304 Not Modified'. It means that remote image is not changed.
-        //In case of 304 we need just cancel the operation and return cached image from the cache.
-        if (code == 304) {
-            [self cancelInternal];
-        } else {
-            [self.connection cancel];
-        }
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
-        });
-
-        if (self.completedBlock) {
-            self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES);
-        }
-        CFRunLoopStop(CFRunLoopGetCurrent());
-        [self done];
-    }
-}
-
-- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
-    [self.imageData appendData:data];
-
-    if ((self.options & SDWebImageDownloaderProgressiveDownload) && self.expectedSize > 0 && self.completedBlock) {
-        // The following code is from http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/
-        // Thanks to the author @Nyx0uf
-
-        // Get the total bytes downloaded
-        const NSInteger totalSize = self.imageData.length;
-
-        // Update the data source, we must pass ALL the data, not just the new bytes
-        CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)self.imageData, NULL);
-
-        if (width + height == 0) {
-            CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
-            if (properties) {
-                NSInteger orientationValue = -1;
-                CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight);
-                if (val) CFNumberGetValue(val, kCFNumberLongType, &height);
-                val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth);
-                if (val) CFNumberGetValue(val, kCFNumberLongType, &width);
-                val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation);
-                if (val) CFNumberGetValue(val, kCFNumberNSIntegerType, &orientationValue);
-                CFRelease(properties);
-
-                // When we draw to Core Graphics, we lose orientation information,
-                // which means the image below born of initWithCGIImage will be
-                // oriented incorrectly sometimes. (Unlike the image born of initWithData
-                // in connectionDidFinishLoading.) So save it here and pass it on later.
-                orientation = [[self class] orientationFromPropertyValue:(orientationValue == -1 ? 1 : orientationValue)];
-            }
-
-        }
-
-        if (width + height > 0 && totalSize < self.expectedSize) {
-            // Create the image
-            CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
-
-#ifdef TARGET_OS_IPHONE
-            // Workaround for iOS anamorphic image
-            if (partialImageRef) {
-                const size_t partialHeight = CGImageGetHeight(partialImageRef);
-                CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
-                CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, width * 4, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);
-                CGColorSpaceRelease(colorSpace);
-                if (bmContext) {
-                    CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = width, .size.height = partialHeight}, partialImageRef);
-                    CGImageRelease(partialImageRef);
-                    partialImageRef = CGBitmapContextCreateImage(bmContext);
-                    CGContextRelease(bmContext);
-                }
-                else {
-                    CGImageRelease(partialImageRef);
-                    partialImageRef = nil;
-                }
-            }
-#endif
-
-            if (partialImageRef) {
-                UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation];
-                NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];
-                UIImage *scaledImage = [self scaledImageForKey:key image:image];
-                if (self.shouldDecompressImages) {
-                    image = [UIImage decodedImageWithImage:scaledImage];
-                }
-                else {
-                    image = scaledImage;
-                }
-                CGImageRelease(partialImageRef);
-                dispatch_main_sync_safe(^{
-                    if (self.completedBlock) {
-                        self.completedBlock(image, nil, nil, NO);
-                    }
-                });
-            }
-        }
-
-        CFRelease(imageSource);
-    }
-
-    if (self.progressBlock) {
-        self.progressBlock(self.imageData.length, self.expectedSize);
-    }
-}
-
-+ (UIImageOrientation)orientationFromPropertyValue:(NSInteger)value {
-    switch (value) {
-        case 1:
-            return UIImageOrientationUp;
-        case 3:
-            return UIImageOrientationDown;
-        case 8:
-            return UIImageOrientationLeft;
-        case 6:
-            return UIImageOrientationRight;
-        case 2:
-            return UIImageOrientationUpMirrored;
-        case 4:
-            return UIImageOrientationDownMirrored;
-        case 5:
-            return UIImageOrientationLeftMirrored;
-        case 7:
-            return UIImageOrientationRightMirrored;
-        default:
-            return UIImageOrientationUp;
-    }
-}
-
-- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image {
-    return SDScaledImageForKey(key, image);
-}
-
-- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection {
-    SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock;
-    @synchronized(self) {
-        CFRunLoopStop(CFRunLoopGetCurrent());
-        self.thread = nil;
-        self.connection = nil;
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:self];
-        });
-    }
-    
-    if (![[NSURLCache sharedURLCache] cachedResponseForRequest:_request]) {
-        responseFromCached = NO;
-    }
-    
-    if (completionBlock) {
-        if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached) {
-            completionBlock(nil, nil, nil, YES);
-        } else if (self.imageData) {
-            UIImage *image = [UIImage sd_imageWithData:self.imageData];
-            NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];
-            image = [self scaledImageForKey:key image:image];
-            
-            // Do not force decoding animated GIFs
-            if (!image.images) {
-                if (self.shouldDecompressImages) {
-                    image = [UIImage decodedImageWithImage:image];
-                }
-            }
-            if (CGSizeEqualToSize(image.size, CGSizeZero)) {
-                completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}], YES);
-            }
-            else {
-                completionBlock(image, self.imageData, nil, YES);
-            }
-        } else {
-            completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}], YES);
-        }
-    }
-    self.completionBlock = nil;
-    [self done];
-}
-
-- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
-    @synchronized(self) {
-        CFRunLoopStop(CFRunLoopGetCurrent());
-        self.thread = nil;
-        self.connection = nil;
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
-        });
-    }
-
-    if (self.completedBlock) {
-        self.completedBlock(nil, nil, error, YES);
-    }
-    self.completionBlock = nil;
-    [self done];
-}
-
-- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {
-    responseFromCached = NO; // If this method is called, it means the response wasn't read from cache
-    if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) {
-        // Prevents caching of responses
-        return nil;
-    }
-    else {
-        return cachedResponse;
-    }
-}
-
-- (BOOL)shouldContinueWhenAppEntersBackground {
-    return self.options & SDWebImageDownloaderContinueInBackground;
-}
-
-- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection {
-    return self.shouldUseCredentialStorage;
-}
-
-- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{
-    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
-        if (!(self.options & SDWebImageDownloaderAllowInvalidSSLCertificates) &&
-            [challenge.sender respondsToSelector:@selector(performDefaultHandlingForAuthenticationChallenge:)]) {
-            [challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge];
-        } else {
-            NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
-            [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
-        }
-    } else {
-        if ([challenge previousFailureCount] == 0) {
-            if (self.credential) {
-                [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge];
-            } else {
-                [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];
-            }
-        } else {
-            [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];
-        }
-    }
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageManager.h b/ios/Pods/SDWebImage/SDWebImage/SDWebImageManager.h
deleted file mode 100644
index 18e578a..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageManager.h
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageCompat.h"
-#import "SDWebImageOperation.h"
-#import "SDWebImageDownloader.h"
-#import "SDImageCache.h"
-
-typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {
-    /**
-     * By default, when a URL fail to be downloaded, the URL is blacklisted so the library won't keep trying.
-     * This flag disable this blacklisting.
-     */
-    SDWebImageRetryFailed = 1 << 0,
-
-    /**
-     * By default, image downloads are started during UI interactions, this flags disable this feature,
-     * leading to delayed download on UIScrollView deceleration for instance.
-     */
-    SDWebImageLowPriority = 1 << 1,
-
-    /**
-     * This flag disables on-disk caching
-     */
-    SDWebImageCacheMemoryOnly = 1 << 2,
-
-    /**
-     * This flag enables progressive download, the image is displayed progressively during download as a browser would do.
-     * By default, the image is only displayed once completely downloaded.
-     */
-    SDWebImageProgressiveDownload = 1 << 3,
-
-    /**
-     * Even if the image is cached, respect the HTTP response cache control, and refresh the image from remote location if needed.
-     * The disk caching will be handled by NSURLCache instead of SDWebImage leading to slight performance degradation.
-     * This option helps deal with images changing behind the same request URL, e.g. Facebook graph api profile pics.
-     * If a cached image is refreshed, the completion block is called once with the cached image and again with the final image.
-     *
-     * Use this flag only if you can't make your URLs static with embedded cache busting parameter.
-     */
-    SDWebImageRefreshCached = 1 << 4,
-
-    /**
-     * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for
-     * extra time in background to let the request finish. If the background task expires the operation will be cancelled.
-     */
-    SDWebImageContinueInBackground = 1 << 5,
-
-    /**
-     * Handles cookies stored in NSHTTPCookieStore by setting
-     * NSMutableURLRequest.HTTPShouldHandleCookies = YES;
-     */
-    SDWebImageHandleCookies = 1 << 6,
-
-    /**
-     * Enable to allow untrusted SSL certificates.
-     * Useful for testing purposes. Use with caution in production.
-     */
-    SDWebImageAllowInvalidSSLCertificates = 1 << 7,
-
-    /**
-     * By default, image are loaded in the order they were queued. This flag move them to
-     * the front of the queue and is loaded immediately instead of waiting for the current queue to be loaded (which 
-     * could take a while).
-     */
-    SDWebImageHighPriority = 1 << 8,
-    
-    /**
-     * By default, placeholder images are loaded while the image is loading. This flag will delay the loading
-     * of the placeholder image until after the image has finished loading.
-     */
-    SDWebImageDelayPlaceholder = 1 << 9,
-
-    /**
-     * We usually don't call transformDownloadedImage delegate method on animated images,
-     * as most transformation code would mangle it.
-     * Use this flag to transform them anyway.
-     */
-    SDWebImageTransformAnimatedImage = 1 << 10,
-    
-    /**
-     * By default, image is added to the imageView after download. But in some cases, we want to
-     * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance)
-     * Use this flag if you want to manually set the image in the completion when success
-     */
-    SDWebImageAvoidAutoSetImage = 1 << 11
-};
-
-typedef void(^SDWebImageCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL);
-
-typedef void(^SDWebImageCompletionWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL);
-
-typedef NSString *(^SDWebImageCacheKeyFilterBlock)(NSURL *url);
-
-
-@class SDWebImageManager;
-
-@protocol SDWebImageManagerDelegate <NSObject>
-
-@optional
-
-/**
- * Controls which image should be downloaded when the image is not found in the cache.
- *
- * @param imageManager The current `SDWebImageManager`
- * @param imageURL     The url of the image to be downloaded
- *
- * @return Return NO to prevent the downloading of the image on cache misses. If not implemented, YES is implied.
- */
-- (BOOL)imageManager:(SDWebImageManager *)imageManager shouldDownloadImageForURL:(NSURL *)imageURL;
-
-/**
- * Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory.
- * NOTE: This method is called from a global queue in order to not to block the main thread.
- *
- * @param imageManager The current `SDWebImageManager`
- * @param image        The image to transform
- * @param imageURL     The url of the image to transform
- *
- * @return The transformed image object.
- */
-- (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL;
-
-@end
-
-/**
- * The SDWebImageManager is the class behind the UIImageView+WebCache category and likes.
- * It ties the asynchronous downloader (SDWebImageDownloader) with the image cache store (SDImageCache).
- * You can use this class directly to benefit from web image downloading with caching in another context than
- * a UIView.
- *
- * Here is a simple example of how to use SDWebImageManager:
- *
- * @code
-
-SDWebImageManager *manager = [SDWebImageManager sharedManager];
-[manager downloadImageWithURL:imageURL
-                      options:0
-                     progress:nil
-                    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-                        if (image) {
-                            // do something with image
-                        }
-                    }];
-
- * @endcode
- */
-@interface SDWebImageManager : NSObject
-
-@property (weak, nonatomic) id <SDWebImageManagerDelegate> delegate;
-
-@property (strong, nonatomic, readonly) SDImageCache *imageCache;
-@property (strong, nonatomic, readonly) SDWebImageDownloader *imageDownloader;
-
-/**
- * The cache filter is a block used each time SDWebImageManager need to convert an URL into a cache key. This can
- * be used to remove dynamic part of an image URL.
- *
- * The following example sets a filter in the application delegate that will remove any query-string from the
- * URL before to use it as a cache key:
- *
- * @code
-
-[[SDWebImageManager sharedManager] setCacheKeyFilter:^(NSURL *url) {
-    url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
-    return [url absoluteString];
-}];
-
- * @endcode
- */
-@property (nonatomic, copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter;
-
-/**
- * Returns global SDWebImageManager instance.
- *
- * @return SDWebImageManager shared instance
- */
-+ (SDWebImageManager *)sharedManager;
-
-/**
- * Downloads the image at the given URL if not present in cache or return the cached version otherwise.
- *
- * @param url            The URL to the image
- * @param options        A mask to specify options to use for this request
- * @param progressBlock  A block called while image is downloading
- * @param completedBlock A block called when operation has been completed.
- *
- *   This parameter is required.
- * 
- *   This block has no return value and takes the requested UIImage as first parameter.
- *   In case of error the image parameter is nil and the second parameter may contain an NSError.
- *
- *   The third parameter is an `SDImageCacheType` enum indicating if the image was retrieved from the local cache
- *   or from the memory cache or from the network.
- *
- *   The last parameter is set to NO when the SDWebImageProgressiveDownload option is used and the image is 
- *   downloading. This block is thus called repeatedly with a partial image. When image is fully downloaded, the
- *   block is called a last time with the full image and the last parameter set to YES.
- *
- * @return Returns an NSObject conforming to SDWebImageOperation. Should be an instance of SDWebImageDownloaderOperation
- */
-- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
-                                         options:(SDWebImageOptions)options
-                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
-                                       completed:(SDWebImageCompletionWithFinishedBlock)completedBlock;
-
-/**
- * Saves image to cache for given URL
- *
- * @param image The image to cache
- * @param url   The URL to the image
- *
- */
-
-- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url;
-
-/**
- * Cancel all current operations
- */
-- (void)cancelAll;
-
-/**
- * Check one or more operations running
- */
-- (BOOL)isRunning;
-
-/**
- *  Check if image has already been cached
- *
- *  @param url image url
- *
- *  @return if the image was already cached
- */
-- (BOOL)cachedImageExistsForURL:(NSURL *)url;
-
-/**
- *  Check if image has already been cached on disk only
- *
- *  @param url image url
- *
- *  @return if the image was already cached (disk only)
- */
-- (BOOL)diskImageExistsForURL:(NSURL *)url;
-
-/**
- *  Async check if image has already been cached
- *
- *  @param url              image url
- *  @param completionBlock  the block to be executed when the check is finished
- *  
- *  @note the completion block is always executed on the main queue
- */
-- (void)cachedImageExistsForURL:(NSURL *)url
-                     completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;
-
-/**
- *  Async check if image has already been cached on disk only
- *
- *  @param url              image url
- *  @param completionBlock  the block to be executed when the check is finished
- *
- *  @note the completion block is always executed on the main queue
- */
-- (void)diskImageExistsForURL:(NSURL *)url
-                   completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;
-
-
-/**
- *Return the cache key for a given URL
- */
-- (NSString *)cacheKeyForURL:(NSURL *)url;
-
-@end
-
-
-#pragma mark - Deprecated
-
-typedef void(^SDWebImageCompletedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionBlock`");
-typedef void(^SDWebImageCompletedWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionWithFinishedBlock`");
-
-
-@interface SDWebImageManager (Deprecated)
-
-/**
- *  Downloads the image at the given URL if not present in cache or return the cached version otherwise.
- *
- *  @deprecated This method has been deprecated. Use `downloadImageWithURL:options:progress:completed:`
- */
-- (id <SDWebImageOperation>)downloadWithURL:(NSURL *)url
-                                    options:(SDWebImageOptions)options
-                                   progress:(SDWebImageDownloaderProgressBlock)progressBlock
-                                  completed:(SDWebImageCompletedWithFinishedBlock)completedBlock __deprecated_msg("Method deprecated. Use `downloadImageWithURL:options:progress:completed:`");
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageManager.m b/ios/Pods/SDWebImage/SDWebImage/SDWebImageManager.m
deleted file mode 100644
index c804ee9..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageManager.m
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageManager.h"
-#import <objc/message.h>
-
-@interface SDWebImageCombinedOperation : NSObject <SDWebImageOperation>
-
-@property (assign, nonatomic, getter = isCancelled) BOOL cancelled;
-@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock;
-@property (strong, nonatomic) NSOperation *cacheOperation;
-
-@end
-
-@interface SDWebImageManager ()
-
-@property (strong, nonatomic, readwrite) SDImageCache *imageCache;
-@property (strong, nonatomic, readwrite) SDWebImageDownloader *imageDownloader;
-@property (strong, nonatomic) NSMutableSet *failedURLs;
-@property (strong, nonatomic) NSMutableArray *runningOperations;
-
-@end
-
-@implementation SDWebImageManager
-
-+ (id)sharedManager {
-    static dispatch_once_t once;
-    static id instance;
-    dispatch_once(&once, ^{
-        instance = [self new];
-    });
-    return instance;
-}
-
-- (id)init {
-    if ((self = [super init])) {
-        _imageCache = [self createCache];
-        _imageDownloader = [SDWebImageDownloader sharedDownloader];
-        _failedURLs = [NSMutableSet new];
-        _runningOperations = [NSMutableArray new];
-    }
-    return self;
-}
-
-- (SDImageCache *)createCache {
-    return [SDImageCache sharedImageCache];
-}
-
-- (NSString *)cacheKeyForURL:(NSURL *)url {
-    if (self.cacheKeyFilter) {
-        return self.cacheKeyFilter(url);
-    }
-    else {
-        return [url absoluteString];
-    }
-}
-
-- (BOOL)cachedImageExistsForURL:(NSURL *)url {
-    NSString *key = [self cacheKeyForURL:url];
-    if ([self.imageCache imageFromMemoryCacheForKey:key] != nil) return YES;
-    return [self.imageCache diskImageExistsWithKey:key];
-}
-
-- (BOOL)diskImageExistsForURL:(NSURL *)url {
-    NSString *key = [self cacheKeyForURL:url];
-    return [self.imageCache diskImageExistsWithKey:key];
-}
-
-- (void)cachedImageExistsForURL:(NSURL *)url
-                     completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {
-    NSString *key = [self cacheKeyForURL:url];
-    
-    BOOL isInMemoryCache = ([self.imageCache imageFromMemoryCacheForKey:key] != nil);
-    
-    if (isInMemoryCache) {
-        // making sure we call the completion block on the main queue
-        dispatch_async(dispatch_get_main_queue(), ^{
-            if (completionBlock) {
-                completionBlock(YES);
-            }
-        });
-        return;
-    }
-    
-    [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) {
-        // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch
-        if (completionBlock) {
-            completionBlock(isInDiskCache);
-        }
-    }];
-}
-
-- (void)diskImageExistsForURL:(NSURL *)url
-                   completion:(SDWebImageCheckCacheCompletionBlock)completionBlock {
-    NSString *key = [self cacheKeyForURL:url];
-    
-    [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) {
-        // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch
-        if (completionBlock) {
-            completionBlock(isInDiskCache);
-        }
-    }];
-}
-
-- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
-                                         options:(SDWebImageOptions)options
-                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
-                                       completed:(SDWebImageCompletionWithFinishedBlock)completedBlock {
-    // Invoking this method without a completedBlock is pointless
-    NSAssert(completedBlock != nil, @"If you mean to prefetch the image, use -[SDWebImagePrefetcher prefetchURLs] instead");
-
-    // Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, XCode won't
-    // throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString.
-    if ([url isKindOfClass:NSString.class]) {
-        url = [NSURL URLWithString:(NSString *)url];
-    }
-
-    // Prevents app crashing on argument type error like sending NSNull instead of NSURL
-    if (![url isKindOfClass:NSURL.class]) {
-        url = nil;
-    }
-
-    __block SDWebImageCombinedOperation *operation = [SDWebImageCombinedOperation new];
-    __weak SDWebImageCombinedOperation *weakOperation = operation;
-
-    BOOL isFailedUrl = NO;
-    @synchronized (self.failedURLs) {
-        isFailedUrl = [self.failedURLs containsObject:url];
-    }
-
-    if (url.absoluteString.length == 0 || (!(options & SDWebImageRetryFailed) && isFailedUrl)) {
-        dispatch_main_sync_safe(^{
-            NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil];
-            completedBlock(nil, error, SDImageCacheTypeNone, YES, url);
-        });
-        return operation;
-    }
-
-    @synchronized (self.runningOperations) {
-        [self.runningOperations addObject:operation];
-    }
-    NSString *key = [self cacheKeyForURL:url];
-
-    operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) {
-        if (operation.isCancelled) {
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
-
-            return;
-        }
-
-        if ((!image || options & SDWebImageRefreshCached) && (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url])) {
-            if (image && options & SDWebImageRefreshCached) {
-                dispatch_main_sync_safe(^{
-                    // If image was found in the cache but SDWebImageRefreshCached is provided, notify about the cached image
-                    // AND try to re-download it in order to let a chance to NSURLCache to refresh it from server.
-                    completedBlock(image, nil, cacheType, YES, url);
-                });
-            }
-
-            // download if no image or requested to refresh anyway, and download allowed by delegate
-            SDWebImageDownloaderOptions downloaderOptions = 0;
-            if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority;
-            if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload;
-            if (options & SDWebImageRefreshCached) downloaderOptions |= SDWebImageDownloaderUseNSURLCache;
-            if (options & SDWebImageContinueInBackground) downloaderOptions |= SDWebImageDownloaderContinueInBackground;
-            if (options & SDWebImageHandleCookies) downloaderOptions |= SDWebImageDownloaderHandleCookies;
-            if (options & SDWebImageAllowInvalidSSLCertificates) downloaderOptions |= SDWebImageDownloaderAllowInvalidSSLCertificates;
-            if (options & SDWebImageHighPriority) downloaderOptions |= SDWebImageDownloaderHighPriority;
-            if (image && options & SDWebImageRefreshCached) {
-                // force progressive off if image already cached but forced refreshing
-                downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload;
-                // ignore image read from NSURLCache if image if cached but force refreshing
-                downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse;
-            }
-            id <SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) {
-                __strong __typeof(weakOperation) strongOperation = weakOperation;
-                if (!strongOperation || strongOperation.isCancelled) {
-                    // Do nothing if the operation was cancelled
-                    // See #699 for more details
-                    // if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data
-                }
-                else if (error) {
-                    dispatch_main_sync_safe(^{
-                        if (strongOperation && !strongOperation.isCancelled) {
-                            completedBlock(nil, error, SDImageCacheTypeNone, finished, url);
-                        }
-                    });
-
-                    if (   error.code != NSURLErrorNotConnectedToInternet
-                        && error.code != NSURLErrorCancelled
-                        && error.code != NSURLErrorTimedOut
-                        && error.code != NSURLErrorInternationalRoamingOff
-                        && error.code != NSURLErrorDataNotAllowed
-                        && error.code != NSURLErrorCannotFindHost
-                        && error.code != NSURLErrorCannotConnectToHost) {
-                        @synchronized (self.failedURLs) {
-                            [self.failedURLs addObject:url];
-                        }
-                    }
-                }
-                else {
-                    if ((options & SDWebImageRetryFailed)) {
-                        @synchronized (self.failedURLs) {
-                            [self.failedURLs removeObject:url];
-                        }
-                    }
-                    
-                    BOOL cacheOnDisk = !(options & SDWebImageCacheMemoryOnly);
-
-                    if (options & SDWebImageRefreshCached && image && !downloadedImage) {
-                        // Image refresh hit the NSURLCache cache, do not call the completion block
-                    }
-                    else if (downloadedImage && (!downloadedImage.images || (options & SDWebImageTransformAnimatedImage)) && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) {
-                        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
-                            UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url];
-
-                            if (transformedImage && finished) {
-                                BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage];
-                                [self.imageCache storeImage:transformedImage recalculateFromImage:imageWasTransformed imageData:(imageWasTransformed ? nil : data) forKey:key toDisk:cacheOnDisk];
-                            }
-
-                            dispatch_main_sync_safe(^{
-                                if (strongOperation && !strongOperation.isCancelled) {
-                                    completedBlock(transformedImage, nil, SDImageCacheTypeNone, finished, url);
-                                }
-                            });
-                        });
-                    }
-                    else {
-                        if (downloadedImage && finished) {
-                            [self.imageCache storeImage:downloadedImage recalculateFromImage:NO imageData:data forKey:key toDisk:cacheOnDisk];
-                        }
-
-                        dispatch_main_sync_safe(^{
-                            if (strongOperation && !strongOperation.isCancelled) {
-                                completedBlock(downloadedImage, nil, SDImageCacheTypeNone, finished, url);
-                            }
-                        });
-                    }
-                }
-
-                if (finished) {
-                    @synchronized (self.runningOperations) {
-                        if (strongOperation) {
-                            [self.runningOperations removeObject:strongOperation];
-                        }
-                    }
-                }
-            }];
-            operation.cancelBlock = ^{
-                [subOperation cancel];
-                
-                @synchronized (self.runningOperations) {
-                    __strong __typeof(weakOperation) strongOperation = weakOperation;
-                    if (strongOperation) {
-                        [self.runningOperations removeObject:strongOperation];
-                    }
-                }
-            };
-        }
-        else if (image) {
-            dispatch_main_sync_safe(^{
-                __strong __typeof(weakOperation) strongOperation = weakOperation;
-                if (strongOperation && !strongOperation.isCancelled) {
-                    completedBlock(image, nil, cacheType, YES, url);
-                }
-            });
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
-        }
-        else {
-            // Image not in cache and download disallowed by delegate
-            dispatch_main_sync_safe(^{
-                __strong __typeof(weakOperation) strongOperation = weakOperation;
-                if (strongOperation && !weakOperation.isCancelled) {
-                    completedBlock(nil, nil, SDImageCacheTypeNone, YES, url);
-                }
-            });
-            @synchronized (self.runningOperations) {
-                [self.runningOperations removeObject:operation];
-            }
-        }
-    }];
-
-    return operation;
-}
-
-- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url {
-    if (image && url) {
-        NSString *key = [self cacheKeyForURL:url];
-        [self.imageCache storeImage:image forKey:key toDisk:YES];
-    }
-}
-
-- (void)cancelAll {
-    @synchronized (self.runningOperations) {
-        NSArray *copiedOperations = [self.runningOperations copy];
-        [copiedOperations makeObjectsPerformSelector:@selector(cancel)];
-        [self.runningOperations removeObjectsInArray:copiedOperations];
-    }
-}
-
-- (BOOL)isRunning {
-    BOOL isRunning = NO;
-    @synchronized(self.runningOperations) {
-        isRunning = (self.runningOperations.count > 0);
-    }
-    return isRunning;
-}
-
-@end
-
-
-@implementation SDWebImageCombinedOperation
-
-- (void)setCancelBlock:(SDWebImageNoParamsBlock)cancelBlock {
-    // check if the operation is already cancelled, then we just call the cancelBlock
-    if (self.isCancelled) {
-        if (cancelBlock) {
-            cancelBlock();
-        }
-        _cancelBlock = nil; // don't forget to nil the cancelBlock, otherwise we will get crashes
-    } else {
-        _cancelBlock = [cancelBlock copy];
-    }
-}
-
-- (void)cancel {
-    self.cancelled = YES;
-    if (self.cacheOperation) {
-        [self.cacheOperation cancel];
-        self.cacheOperation = nil;
-    }
-    if (self.cancelBlock) {
-        self.cancelBlock();
-        
-        // TODO: this is a temporary fix to #809.
-        // Until we can figure the exact cause of the crash, going with the ivar instead of the setter
-//        self.cancelBlock = nil;
-        _cancelBlock = nil;
-    }
-}
-
-@end
-
-
-@implementation SDWebImageManager (Deprecated)
-
-// deprecated method, uses the non deprecated method
-// adapter for the completion block
-- (id <SDWebImageOperation>)downloadWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedWithFinishedBlock)completedBlock {
-    return [self downloadImageWithURL:url
-                              options:options
-                             progress:progressBlock
-                            completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-                                if (completedBlock) {
-                                    completedBlock(image, error, cacheType, finished);
-                                }
-                            }];
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h b/ios/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h
deleted file mode 100644
index 71094ee..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol SDWebImageOperation <NSObject>
-
-- (void)cancel;
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h b/ios/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h
deleted file mode 100644
index 6c31b15..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <Foundation/Foundation.h>
-#import "SDWebImageManager.h"
-
-@class SDWebImagePrefetcher;
-
-@protocol SDWebImagePrefetcherDelegate <NSObject>
-
-@optional
-
-/**
- * Called when an image was prefetched.
- *
- * @param imagePrefetcher The current image prefetcher
- * @param imageURL        The image url that was prefetched
- * @param finishedCount   The total number of images that were prefetched (successful or not)
- * @param totalCount      The total number of images that were to be prefetched
- */
-- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount;
-
-/**
- * Called when all images are prefetched.
- * @param imagePrefetcher The current image prefetcher
- * @param totalCount      The total number of images that were prefetched (whether successful or not)
- * @param skippedCount    The total number of images that were skipped
- */
-- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount;
-
-@end
-
-typedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls);
-typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls);
-
-/**
- * Prefetch some URLs in the cache for future use. Images are downloaded in low priority.
- */
-@interface SDWebImagePrefetcher : NSObject
-
-/**
- *  The web image manager
- */
-@property (strong, nonatomic, readonly) SDWebImageManager *manager;
-
-/**
- * Maximum number of URLs to prefetch at the same time. Defaults to 3.
- */
-@property (nonatomic, assign) NSUInteger maxConcurrentDownloads;
-
-/**
- * SDWebImageOptions for prefetcher. Defaults to SDWebImageLowPriority.
- */
-@property (nonatomic, assign) SDWebImageOptions options;
-
-/**
- * Queue options for Prefetcher. Defaults to Main Queue.
- */
-@property (nonatomic, assign) dispatch_queue_t prefetcherQueue;
-
-@property (weak, nonatomic) id <SDWebImagePrefetcherDelegate> delegate;
-
-/**
- * Return the global image prefetcher instance.
- */
-+ (SDWebImagePrefetcher *)sharedImagePrefetcher;
-
-/**
- * Allows you to instantiate a prefetcher with any arbitrary image manager.
- */
-- (id)initWithImageManager:(SDWebImageManager *)manager;
-
-/**
- * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,
- * currently one image is downloaded at a time,
- * and skips images for failed downloads and proceed to the next image in the list
- *
- * @param urls list of URLs to prefetch
- */
-- (void)prefetchURLs:(NSArray *)urls;
-
-/**
- * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,
- * currently one image is downloaded at a time,
- * and skips images for failed downloads and proceed to the next image in the list
- *
- * @param urls            list of URLs to prefetch
- * @param progressBlock   block to be called when progress updates; 
- *                        first parameter is the number of completed (successful or not) requests, 
- *                        second parameter is the total number of images originally requested to be prefetched
- * @param completionBlock block to be called when prefetching is completed
- *                        first param is the number of completed (successful or not) requests,
- *                        second parameter is the number of skipped requests
- */
-- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock;
-
-/**
- * Remove and cancel queued list
- */
-- (void)cancelPrefetching;
-
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m b/ios/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m
deleted file mode 100644
index f518d44..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImagePrefetcher.h"
-
-@interface SDWebImagePrefetcher ()
-
-@property (strong, nonatomic) SDWebImageManager *manager;
-@property (strong, nonatomic) NSArray *prefetchURLs;
-@property (assign, nonatomic) NSUInteger requestedCount;
-@property (assign, nonatomic) NSUInteger skippedCount;
-@property (assign, nonatomic) NSUInteger finishedCount;
-@property (assign, nonatomic) NSTimeInterval startedTime;
-@property (copy, nonatomic) SDWebImagePrefetcherCompletionBlock completionBlock;
-@property (copy, nonatomic) SDWebImagePrefetcherProgressBlock progressBlock;
-
-@end
-
-@implementation SDWebImagePrefetcher
-
-+ (SDWebImagePrefetcher *)sharedImagePrefetcher {
-    static dispatch_once_t once;
-    static id instance;
-    dispatch_once(&once, ^{
-        instance = [self new];
-    });
-    return instance;
-}
-
-- (id)init {
-    return [self initWithImageManager:[SDWebImageManager new]];
-}
-
-- (id)initWithImageManager:(SDWebImageManager *)manager {
-    if ((self = [super init])) {
-        _manager = manager;
-        _options = SDWebImageLowPriority;
-        _prefetcherQueue = dispatch_get_main_queue();
-        self.maxConcurrentDownloads = 3;
-    }
-    return self;
-}
-
-- (void)setMaxConcurrentDownloads:(NSUInteger)maxConcurrentDownloads {
-    self.manager.imageDownloader.maxConcurrentDownloads = maxConcurrentDownloads;
-}
-
-- (NSUInteger)maxConcurrentDownloads {
-    return self.manager.imageDownloader.maxConcurrentDownloads;
-}
-
-- (void)startPrefetchingAtIndex:(NSUInteger)index {
-    if (index >= self.prefetchURLs.count) return;
-    self.requestedCount++;
-    [self.manager downloadImageWithURL:self.prefetchURLs[index] options:self.options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-        if (!finished) return;
-        self.finishedCount++;
-
-        if (image) {
-            if (self.progressBlock) {
-                self.progressBlock(self.finishedCount,[self.prefetchURLs count]);
-            }
-        }
-        else {
-            if (self.progressBlock) {
-                self.progressBlock(self.finishedCount,[self.prefetchURLs count]);
-            }
-            // Add last failed
-            self.skippedCount++;
-        }
-        if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didPrefetchURL:finishedCount:totalCount:)]) {
-            [self.delegate imagePrefetcher:self
-                            didPrefetchURL:self.prefetchURLs[index]
-                             finishedCount:self.finishedCount
-                                totalCount:self.prefetchURLs.count
-             ];
-        }
-        if (self.prefetchURLs.count > self.requestedCount) {
-            dispatch_async(self.prefetcherQueue, ^{
-                [self startPrefetchingAtIndex:self.requestedCount];
-            });
-        } else if (self.finishedCount == self.requestedCount) {
-            [self reportStatus];
-            if (self.completionBlock) {
-                self.completionBlock(self.finishedCount, self.skippedCount);
-                self.completionBlock = nil;
-            }
-            self.progressBlock = nil;
-        }
-    }];
-}
-
-- (void)reportStatus {
-    NSUInteger total = [self.prefetchURLs count];
-    if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didFinishWithTotalCount:skippedCount:)]) {
-        [self.delegate imagePrefetcher:self
-               didFinishWithTotalCount:(total - self.skippedCount)
-                          skippedCount:self.skippedCount
-         ];
-    }
-}
-
-- (void)prefetchURLs:(NSArray *)urls {
-    [self prefetchURLs:urls progress:nil completed:nil];
-}
-
-- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock {
-    [self cancelPrefetching]; // Prevent duplicate prefetch request
-    self.startedTime = CFAbsoluteTimeGetCurrent();
-    self.prefetchURLs = urls;
-    self.completionBlock = completionBlock;
-    self.progressBlock = progressBlock;
-
-    if (urls.count == 0) {
-        if (completionBlock) {
-            completionBlock(0,0);
-        }
-    } else {
-        // Starts prefetching from the very first image on the list with the max allowed concurrency
-        NSUInteger listCount = self.prefetchURLs.count;
-        for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) {
-            [self startPrefetchingAtIndex:i];
-        }
-    }
-}
-
-- (void)cancelPrefetching {
-    self.prefetchURLs = nil;
-    self.skippedCount = 0;
-    self.requestedCount = 0;
-    self.finishedCount = 0;
-    [self.manager cancelAll];
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h b/ios/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h
deleted file mode 100644
index ecf5ced..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageCompat.h"
-#import "SDWebImageManager.h"
-
-/**
- * Integrates SDWebImage async downloading and caching of remote images with UIButtonView.
- */
-@interface UIButton (WebCache)
-
-/**
- * Get the current image URL.
- */
-- (NSURL *)sd_currentImageURL;
-
-/**
- * Get the image URL for a control state.
- * 
- * @param state Which state you want to know the URL for. The values are described in UIControlState.
- */
-- (NSURL *)sd_imageURLForState:(UIControlState)state;
-
-/**
- * Set the imageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url   The url for the image.
- * @param state The state that uses the specified title. The values are described in UIControlState.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state;
-
-/**
- * Set the imageView `image` with an `url` and a placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param state       The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @see sd_setImageWithURL:placeholderImage:options:
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param state       The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
-
-/**
- * Set the imageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the backgroundImageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url   The url for the image.
- * @param state The state that uses the specified title. The values are described in UIControlState.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state;
-
-/**
- * Set the backgroundImageView `image` with an `url` and a placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param state       The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @see sd_setImageWithURL:placeholderImage:options:
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder;
-
-/**
- * Set the backgroundImageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param state       The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
-
-/**
- * Set the backgroundImageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the backgroundImageView `image` with an `url`, placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param state          The state that uses the specified title. The values are described in UIControlState.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the backgroundImageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Cancel the current image download
- */
-- (void)sd_cancelImageLoadForState:(UIControlState)state;
-
-/**
- * Cancel the current backgroundImage download
- */
-- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state;
-
-@end
-
-
-@interface UIButton (WebCacheDeprecated)
-
-- (NSURL *)currentImageURL __deprecated_msg("Use `sd_currentImageURL`");
-- (NSURL *)imageURLForState:(UIControlState)state __deprecated_msg("Use `sd_imageURLForState:`");
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:`");
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:`");
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:`");
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:completed:`");
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:completed:`");
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:completed:`");
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:`");
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:`");
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:`");
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:completed:`");
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:completed:`");
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:completed:`");
-
-- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelImageLoadForState:`");
-- (void)cancelBackgroundImageLoadForState:(UIControlState)state __deprecated_msg("Use `sd_cancelBackgroundImageLoadForState:`");
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m b/ios/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m
deleted file mode 100644
index ce2175d..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "UIButton+WebCache.h"
-#import "objc/runtime.h"
-#import "UIView+WebCacheOperation.h"
-
-static char imageURLStorageKey;
-
-@implementation UIButton (WebCache)
-
-- (NSURL *)sd_currentImageURL {
-    NSURL *url = self.imageURLStorage[@(self.state)];
-
-    if (!url) {
-        url = self.imageURLStorage[@(UIControlStateNormal)];
-    }
-
-    return url;
-}
-
-- (NSURL *)sd_imageURLForState:(UIControlState)state {
-    return self.imageURLStorage[@(state)];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state {
-    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {
-
-    [self setImage:placeholder forState:state];
-    [self sd_cancelImageLoadForState:state];
-    
-    if (!url) {
-        [self.imageURLStorage removeObjectForKey:@(state)];
-        
-        dispatch_main_async_safe(^{
-            if (completedBlock) {
-                NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
-                completedBlock(nil, error, SDImageCacheTypeNone, url);
-            }
-        });
-        
-        return;
-    }
-    
-    self.imageURLStorage[@(state)] = url;
-
-    __weak __typeof(self)wself = self;
-    id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-        if (!wself) return;
-        dispatch_main_sync_safe(^{
-            __strong UIButton *sself = wself;
-            if (!sself) return;
-            if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
-            {
-                completedBlock(image, error, cacheType, url);
-                return;
-            }
-            else if (image) {
-                [sself setImage:image forState:state];
-            }
-            if (completedBlock && finished) {
-                completedBlock(image, error, cacheType, url);
-            }
-        });
-    }];
-    [self sd_setImageLoadOperation:operation forState:state];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock];
-}
-
-- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_cancelBackgroundImageLoadForState:state];
-
-    [self setBackgroundImage:placeholder forState:state];
-
-    if (url) {
-        __weak __typeof(self)wself = self;
-        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-            if (!wself) return;
-            dispatch_main_sync_safe(^{
-                __strong UIButton *sself = wself;
-                if (!sself) return;
-                if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
-                {
-                    completedBlock(image, error, cacheType, url);
-                    return;
-                }
-                else if (image) {
-                    [sself setBackgroundImage:image forState:state];
-                }
-                if (completedBlock && finished) {
-                    completedBlock(image, error, cacheType, url);
-                }
-            });
-        }];
-        [self sd_setBackgroundImageLoadOperation:operation forState:state];
-    } else {
-        dispatch_main_async_safe(^{
-            NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
-            if (completedBlock) {
-                completedBlock(nil, error, SDImageCacheTypeNone, url);
-            }
-        });
-    }
-}
-
-- (void)sd_setImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state {
-    [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]];
-}
-
-- (void)sd_cancelImageLoadForState:(UIControlState)state {
-    [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]];
-}
-
-- (void)sd_setBackgroundImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state {
-    [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]];
-}
-
-- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state {
-    [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]];
-}
-
-- (NSMutableDictionary *)imageURLStorage {
-    NSMutableDictionary *storage = objc_getAssociatedObject(self, &imageURLStorageKey);
-    if (!storage)
-    {
-        storage = [NSMutableDictionary dictionary];
-        objc_setAssociatedObject(self, &imageURLStorageKey, storage, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    }
-
-    return storage;
-}
-
-@end
-
-
-@implementation UIButton (WebCacheDeprecated)
-
-- (NSURL *)currentImageURL {
-    return [self sd_currentImageURL];
-}
-
-- (NSURL *)imageURLForState:(UIControlState)state {
-    return [self sd_imageURLForState:state];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state {
-    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)cancelCurrentImageLoad {
-    // in a backwards compatible manner, cancel for current state
-    [self sd_cancelImageLoadForState:self.state];
-}
-
-- (void)cancelBackgroundImageLoadForState:(UIControlState)state {
-    [self sd_cancelBackgroundImageLoadForState:state];
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImage+GIF.h b/ios/Pods/SDWebImage/SDWebImage/UIImage+GIF.h
deleted file mode 100755
index 084f424..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImage+GIF.h
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-//  UIImage+GIF.h
-//  LBGIFImage
-//
-//  Created by Laurin Brandner on 06.01.12.
-//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface UIImage (GIF)
-
-+ (UIImage *)sd_animatedGIFNamed:(NSString *)name;
-
-+ (UIImage *)sd_animatedGIFWithData:(NSData *)data;
-
-- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImage+GIF.m b/ios/Pods/SDWebImage/SDWebImage/UIImage+GIF.m
deleted file mode 100755
index e1ded2a..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImage+GIF.m
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-//  UIImage+GIF.m
-//  LBGIFImage
-//
-//  Created by Laurin Brandner on 06.01.12.
-//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
-//
-
-#import "UIImage+GIF.h"
-#import <ImageIO/ImageIO.h>
-
-@implementation UIImage (GIF)
-
-+ (UIImage *)sd_animatedGIFWithData:(NSData *)data {
-    if (!data) {
-        return nil;
-    }
-
-    CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
-
-    size_t count = CGImageSourceGetCount(source);
-
-    UIImage *animatedImage;
-
-    if (count <= 1) {
-        animatedImage = [[UIImage alloc] initWithData:data];
-    }
-    else {
-        NSMutableArray *images = [NSMutableArray array];
-
-        NSTimeInterval duration = 0.0f;
-
-        for (size_t i = 0; i < count; i++) {
-            CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
-
-            duration += [self sd_frameDurationAtIndex:i source:source];
-
-            [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
-
-            CGImageRelease(image);
-        }
-
-        if (!duration) {
-            duration = (1.0f / 10.0f) * count;
-        }
-
-        animatedImage = [UIImage animatedImageWithImages:images duration:duration];
-    }
-
-    CFRelease(source);
-
-    return animatedImage;
-}
-
-+ (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source {
-    float frameDuration = 0.1f;
-    CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil);
-    NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties;
-    NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary];
-
-    NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime];
-    if (delayTimeUnclampedProp) {
-        frameDuration = [delayTimeUnclampedProp floatValue];
-    }
-    else {
-
-        NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime];
-        if (delayTimeProp) {
-            frameDuration = [delayTimeProp floatValue];
-        }
-    }
-
-    // Many annoying ads specify a 0 duration to make an image flash as quickly as possible.
-    // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify
-    // a duration of <= 10 ms. See <rdar://problem/7689300> and <http://webkit.org/b/36082>
-    // for more information.
-
-    if (frameDuration < 0.011f) {
-        frameDuration = 0.100f;
-    }
-
-    CFRelease(cfFrameProperties);
-    return frameDuration;
-}
-
-+ (UIImage *)sd_animatedGIFNamed:(NSString *)name {
-    CGFloat scale = [UIScreen mainScreen].scale;
-
-    if (scale > 1.0f) {
-        NSString *retinaPath = [[NSBundle mainBundle] pathForResource:[name stringByAppendingString:@"@2x"] ofType:@"gif"];
-
-        NSData *data = [NSData dataWithContentsOfFile:retinaPath];
-
-        if (data) {
-            return [UIImage sd_animatedGIFWithData:data];
-        }
-
-        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"];
-
-        data = [NSData dataWithContentsOfFile:path];
-
-        if (data) {
-            return [UIImage sd_animatedGIFWithData:data];
-        }
-
-        return [UIImage imageNamed:name];
-    }
-    else {
-        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"];
-
-        NSData *data = [NSData dataWithContentsOfFile:path];
-
-        if (data) {
-            return [UIImage sd_animatedGIFWithData:data];
-        }
-
-        return [UIImage imageNamed:name];
-    }
-}
-
-- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size {
-    if (CGSizeEqualToSize(self.size, size) || CGSizeEqualToSize(size, CGSizeZero)) {
-        return self;
-    }
-
-    CGSize scaledSize = size;
-    CGPoint thumbnailPoint = CGPointZero;
-
-    CGFloat widthFactor = size.width / self.size.width;
-    CGFloat heightFactor = size.height / self.size.height;
-    CGFloat scaleFactor = (widthFactor > heightFactor) ? widthFactor : heightFactor;
-    scaledSize.width = self.size.width * scaleFactor;
-    scaledSize.height = self.size.height * scaleFactor;
-
-    if (widthFactor > heightFactor) {
-        thumbnailPoint.y = (size.height - scaledSize.height) * 0.5;
-    }
-    else if (widthFactor < heightFactor) {
-        thumbnailPoint.x = (size.width - scaledSize.width) * 0.5;
-    }
-
-    NSMutableArray *scaledImages = [NSMutableArray array];
-
-    for (UIImage *image in self.images) {
-        UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
-        
-        [image drawInRect:CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledSize.width, scaledSize.height)];
-        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
-
-        [scaledImages addObject:newImage];
-
-        UIGraphicsEndImageContext();
-    }
- 
-    return [UIImage animatedImageWithImages:scaledImages duration:self.duration];
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h b/ios/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h
deleted file mode 100644
index 186ebc0..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-//  UIImage+MultiFormat.h
-//  SDWebImage
-//
-//  Created by Olivier Poitrey on 07/06/13.
-//  Copyright (c) 2013 Dailymotion. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface UIImage (MultiFormat)
-
-+ (UIImage *)sd_imageWithData:(NSData *)data;
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m b/ios/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m
deleted file mode 100644
index a830754..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m
+++ /dev/null
@@ -1,118 +0,0 @@
-//
-//  UIImage+MultiFormat.m
-//  SDWebImage
-//
-//  Created by Olivier Poitrey on 07/06/13.
-//  Copyright (c) 2013 Dailymotion. All rights reserved.
-//
-
-#import "UIImage+MultiFormat.h"
-#import "UIImage+GIF.h"
-#import "NSData+ImageContentType.h"
-#import <ImageIO/ImageIO.h>
-
-#ifdef SD_WEBP
-#import "UIImage+WebP.h"
-#endif
-
-@implementation UIImage (MultiFormat)
-
-+ (UIImage *)sd_imageWithData:(NSData *)data {
-    if (!data) {
-        return nil;
-    }
-    
-    UIImage *image;
-    NSString *imageContentType = [NSData sd_contentTypeForImageData:data];
-    if ([imageContentType isEqualToString:@"image/gif"]) {
-        image = [UIImage sd_animatedGIFWithData:data];
-    }
-#ifdef SD_WEBP
-    else if ([imageContentType isEqualToString:@"image/webp"])
-    {
-        image = [UIImage sd_imageWithWebPData:data];
-    }
-#endif
-    else {
-        image = [[UIImage alloc] initWithData:data];
-        UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data];
-        if (orientation != UIImageOrientationUp) {
-            image = [UIImage imageWithCGImage:image.CGImage
-                                        scale:image.scale
-                                  orientation:orientation];
-        }
-    }
-
-
-    return image;
-}
-
-
-+(UIImageOrientation)sd_imageOrientationFromImageData:(NSData *)imageData {
-    UIImageOrientation result = UIImageOrientationUp;
-    CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
-    if (imageSource) {
-        CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
-        if (properties) {
-            CFTypeRef val;
-            int exifOrientation;
-            val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation);
-            if (val) {
-                CFNumberGetValue(val, kCFNumberIntType, &exifOrientation);
-                result = [self sd_exifOrientationToiOSOrientation:exifOrientation];
-            } // else - if it's not set it remains at up
-            CFRelease((CFTypeRef) properties);
-        } else {
-            //NSLog(@"NO PROPERTIES, FAIL");
-        }
-        CFRelease(imageSource);
-    }
-    return result;
-}
-
-#pragma mark EXIF orientation tag converter
-// Convert an EXIF image orientation to an iOS one.
-// reference see here: http://sylvana.net/jpegcrop/exif_orientation.html
-+ (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation {
-    UIImageOrientation orientation = UIImageOrientationUp;
-    switch (exifOrientation) {
-        case 1:
-            orientation = UIImageOrientationUp;
-            break;
-
-        case 3:
-            orientation = UIImageOrientationDown;
-            break;
-
-        case 8:
-            orientation = UIImageOrientationLeft;
-            break;
-
-        case 6:
-            orientation = UIImageOrientationRight;
-            break;
-
-        case 2:
-            orientation = UIImageOrientationUpMirrored;
-            break;
-
-        case 4:
-            orientation = UIImageOrientationDownMirrored;
-            break;
-
-        case 5:
-            orientation = UIImageOrientationLeftMirrored;
-            break;
-
-        case 7:
-            orientation = UIImageOrientationRightMirrored;
-            break;
-        default:
-            break;
-    }
-    return orientation;
-}
-
-
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImage+WebP.h b/ios/Pods/SDWebImage/SDWebImage/UIImage+WebP.h
deleted file mode 100644
index b791e6f..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImage+WebP.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-//  UIImage+WebP.h
-//  SDWebImage
-//
-//  Created by Olivier Poitrey on 07/06/13.
-//  Copyright (c) 2013 Dailymotion. All rights reserved.
-//
-
-#ifdef SD_WEBP
-
-#import <UIKit/UIKit.h>
-
-// Fix for issue #416 Undefined symbols for architecture armv7 since WebP introduction when deploying to device
-void WebPInitPremultiplyNEON(void);
-
-void WebPInitUpsamplersNEON(void);
-
-void VP8DspInitNEON(void);
-
-@interface UIImage (WebP)
-
-+ (UIImage *)sd_imageWithWebPData:(NSData *)data;
-
-@end
-
-#endif
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImage+WebP.m b/ios/Pods/SDWebImage/SDWebImage/UIImage+WebP.m
deleted file mode 100644
index f27a1b6..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImage+WebP.m
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-//  UIImage+WebP.m
-//  SDWebImage
-//
-//  Created by Olivier Poitrey on 07/06/13.
-//  Copyright (c) 2013 Dailymotion. All rights reserved.
-//
-
-#ifdef SD_WEBP
-#import "UIImage+WebP.h"
-
-#if !COCOAPODS
-#import "webp/decode.h"
-#else
-#import "libwebp/webp/decode.h"
-#endif
-
-// Callback for CGDataProviderRelease
-static void FreeImageData(void *info, const void *data, size_t size)
-{
-    free((void *)data);
-}
-
-@implementation UIImage (WebP)
-
-+ (UIImage *)sd_imageWithWebPData:(NSData *)data {
-    WebPDecoderConfig config;
-    if (!WebPInitDecoderConfig(&config)) {
-        return nil;
-    }
-
-    if (WebPGetFeatures(data.bytes, data.length, &config.input) != VP8_STATUS_OK) {
-        return nil;
-    }
-
-    config.output.colorspace = config.input.has_alpha ? MODE_rgbA : MODE_RGB;
-    config.options.use_threads = 1;
-
-    // Decode the WebP image data into a RGBA value array.
-    if (WebPDecode(data.bytes, data.length, &config) != VP8_STATUS_OK) {
-        return nil;
-    }
-
-    int width = config.input.width;
-    int height = config.input.height;
-    if (config.options.use_scaling) {
-        width = config.options.scaled_width;
-        height = config.options.scaled_height;
-    }
-
-    // Construct a UIImage from the decoded RGBA value array.
-    CGDataProviderRef provider =
-    CGDataProviderCreateWithData(NULL, config.output.u.RGBA.rgba, config.output.u.RGBA.size, FreeImageData);
-    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
-    CGBitmapInfo bitmapInfo = config.input.has_alpha ? kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast : 0;
-    size_t components = config.input.has_alpha ? 4 : 3;
-    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
-    CGImageRef imageRef = CGImageCreate(width, height, 8, components * 8, components * width, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
-
-    CGColorSpaceRelease(colorSpaceRef);
-    CGDataProviderRelease(provider);
-
-    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef];
-    CGImageRelease(imageRef);
-
-    return image;
-}
-
-@end
-
-#if !COCOAPODS
-// Functions to resolve some undefined symbols when using WebP and force_load flag
-void WebPInitPremultiplyNEON(void) {}
-void WebPInitUpsamplersNEON(void) {}
-void VP8DspInitNEON(void) {}
-#endif
-
-#endif
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h b/ios/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
deleted file mode 100644
index c1d8fea..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <UIKit/UIKit.h>
-#import "SDWebImageCompat.h"
-#import "SDWebImageManager.h"
-
-/**
- * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state.
- */
-@interface UIImageView (HighlightedWebCache)
-
-/**
- * Set the imageView `highlightedImage` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url The url for the image.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url;
-
-/**
- * Set the imageView `highlightedImage` with an `url` and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url     The url for the image.
- * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options;
-
-/**
- * Set the imageView `highlightedImage` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `highlightedImage` with an `url` and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `highlightedImage` with an `url` and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param progressBlock  A block called while image is downloading
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Cancel the current download
- */
-- (void)sd_cancelCurrentHighlightedImageLoad;
-
-@end
-
-
-@interface UIImageView (HighlightedWebCacheDeprecated)
-
-- (void)setHighlightedImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:`");
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:`");
-- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:completed:`");
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:completed:`");
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:progress:completed:`");
-
-- (void)cancelCurrentHighlightedImageLoad __deprecated_msg("Use `sd_cancelCurrentHighlightedImageLoad`");
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m b/ios/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m
deleted file mode 100644
index 921134e..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "UIImageView+HighlightedWebCache.h"
-#import "UIView+WebCacheOperation.h"
-
-#define UIImageViewHighlightedWebCacheOperationKey @"highlightedImage"
-
-@implementation UIImageView (HighlightedWebCache)
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil];
-}
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options {
-    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil];
-}
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock];
-}
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock];
-}
-
-- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_cancelCurrentHighlightedImageLoad];
-
-    if (url) {
-        __weak __typeof(self)wself = self;
-        id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-            if (!wself) return;
-            dispatch_main_sync_safe (^
-                                     {
-                                         if (!wself) return;
-                                         if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
-                                         {
-                                             completedBlock(image, error, cacheType, url);
-                                             return;
-                                         }
-                                         else if (image) {
-                                             wself.highlightedImage = image;
-                                             [wself setNeedsLayout];
-                                         }
-                                         if (completedBlock && finished) {
-                                             completedBlock(image, error, cacheType, url);
-                                         }
-                                     });
-        }];
-        [self sd_setImageLoadOperation:operation forKey:UIImageViewHighlightedWebCacheOperationKey];
-    } else {
-        dispatch_main_async_safe(^{
-            NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
-            if (completedBlock) {
-                completedBlock(nil, error, SDImageCacheTypeNone, url);
-            }
-        });
-    }
-}
-
-- (void)sd_cancelCurrentHighlightedImageLoad {
-    [self sd_cancelImageLoadOperationWithKey:UIImageViewHighlightedWebCacheOperationKey];
-}
-
-@end
-
-
-@implementation UIImageView (HighlightedWebCacheDeprecated)
-
-- (void)setHighlightedImageWithURL:(NSURL *)url {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil];
-}
-
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options {
-    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil];
-}
-
-- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setHighlightedImageWithURL:url options:0 progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)cancelCurrentHighlightedImageLoad {
-    [self sd_cancelCurrentHighlightedImageLoad];
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h b/ios/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h
deleted file mode 100644
index eeb7460..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "SDWebImageCompat.h"
-#import "SDWebImageManager.h"
-
-/**
- * Integrates SDWebImage async downloading and caching of remote images with UIImageView.
- *
- * Usage with a UITableViewCell sub-class:
- *
- * @code
-
-#import <SDWebImage/UIImageView+WebCache.h>
-
-...
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    static NSString *MyIdentifier = @"MyIdentifier";
- 
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
- 
-    if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]
-                 autorelease];
-    }
- 
-    // Here we use the provided sd_setImageWithURL: method to load the web image
-    // Ensure you use a placeholder image otherwise cells will be initialized with no image
-    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"]
-                      placeholderImage:[UIImage imageNamed:@"placeholder"]];
- 
-    cell.textLabel.text = @"My Text";
-    return cell;
-}
-
- * @endcode
- */
-@interface UIImageView (WebCache)
-
-/**
- * Get the current image URL.
- *
- * Note that because of the limitations of categories this property can get out of sync
- * if you use sd_setImage: directly.
- */
-- (NSURL *)sd_imageURL;
-
-/**
- * Set the imageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url The url for the image.
- */
-- (void)sd_setImageWithURL:(NSURL *)url;
-
-/**
- * Set the imageView `image` with an `url` and a placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @see sd_setImageWithURL:placeholderImage:options:
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url         The url for the image.
- * @param placeholder The image to be set initially, until the image request finishes.
- * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
-
-/**
- * Set the imageView `image` with an `url`.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url`, placeholder and custom options.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param progressBlock  A block called while image is downloading
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Set the imageView `image` with an `url` and optionally a placeholder image.
- *
- * The download is asynchronous and cached.
- *
- * @param url            The url for the image.
- * @param placeholder    The image to be set initially, until the image request finishes.
- * @param options        The options to use when downloading the image. @see SDWebImageOptions for the possible values.
- * @param progressBlock  A block called while image is downloading
- * @param completedBlock A block called when operation has been completed. This block has no return value
- *                       and takes the requested UIImage as first parameter. In case of error the image parameter
- *                       is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- *                       indicating if the image was retrieved from the local cache or from the network.
- *                       The fourth parameter is the original image url.
- */
-- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
-
-/**
- * Download an array of images and starts them in an animation loop
- *
- * @param arrayOfURLs An array of NSURL
- */
-- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs;
-
-/**
- * Cancel the current download
- */
-- (void)sd_cancelCurrentImageLoad;
-
-- (void)sd_cancelCurrentAnimationImagesLoad;
-
-/**
- *  Show activity UIActivityIndicatorView
- */
-- (void)setShowActivityIndicatorView:(BOOL)show;
-
-/**
- *  set desired UIActivityIndicatorViewStyle
- *
- *  @param style The style of the UIActivityIndicatorView
- */
-- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style;
-
-@end
-
-
-@interface UIImageView (WebCacheDeprecated)
-
-- (NSURL *)imageURL __deprecated_msg("Use `sd_imageURL`");
-
-- (void)setImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options`");
-
-- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:completed:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:completed:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:completed:`");
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:progress:completed:`");
-
-- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs __deprecated_msg("Use `sd_setAnimationImagesWithURLs:`");
-
-- (void)cancelCurrentArrayLoad __deprecated_msg("Use `sd_cancelCurrentAnimationImagesLoad`");
-
-- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelCurrentImageLoad`");
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m b/ios/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m
deleted file mode 100644
index 14f425c..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "UIImageView+WebCache.h"
-#import "objc/runtime.h"
-#import "UIView+WebCacheOperation.h"
-
-static char imageURLKey;
-static char TAG_ACTIVITY_INDICATOR;
-static char TAG_ACTIVITY_STYLE;
-static char TAG_ACTIVITY_SHOW;
-
-@implementation UIImageView (WebCache)
-
-- (void)sd_setImageWithURL:(NSURL *)url {
-    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];
-}
-
-- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
-    [self sd_cancelCurrentImageLoad];
-    objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-
-    if (!(options & SDWebImageDelayPlaceholder)) {
-        dispatch_main_async_safe(^{
-            self.image = placeholder;
-        });
-    }
-    
-    if (url) {
-
-        // check if activityView is enabled or not
-        if ([self showActivityIndicatorView]) {
-            [self addActivityIndicator];
-        }
-
-        __weak __typeof(self)wself = self;
-        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-            [wself removeActivityIndicator];
-            if (!wself) return;
-            dispatch_main_sync_safe(^{
-                if (!wself) return;
-                if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
-                {
-                    completedBlock(image, error, cacheType, url);
-                    return;
-                }
-                else if (image) {
-                    wself.image = image;
-                    [wself setNeedsLayout];
-                } else {
-                    if ((options & SDWebImageDelayPlaceholder)) {
-                        wself.image = placeholder;
-                        [wself setNeedsLayout];
-                    }
-                }
-                if (completedBlock && finished) {
-                    completedBlock(image, error, cacheType, url);
-                }
-            });
-        }];
-        [self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"];
-    } else {
-        dispatch_main_async_safe(^{
-            [self removeActivityIndicator];
-            if (completedBlock) {
-                NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
-                completedBlock(nil, error, SDImageCacheTypeNone, url);
-            }
-        });
-    }
-}
-
-- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
-    NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:url];
-    UIImage *lastPreviousCachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key];
-    
-    [self sd_setImageWithURL:url placeholderImage:lastPreviousCachedImage ?: placeholder options:options progress:progressBlock completed:completedBlock];    
-}
-
-- (NSURL *)sd_imageURL {
-    return objc_getAssociatedObject(self, &imageURLKey);
-}
-
-- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs {
-    [self sd_cancelCurrentAnimationImagesLoad];
-    __weak __typeof(self)wself = self;
-
-    NSMutableArray *operationsArray = [[NSMutableArray alloc] init];
-
-    for (NSURL *logoImageURL in arrayOfURLs) {
-        id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:logoImageURL options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
-            if (!wself) return;
-            dispatch_main_sync_safe(^{
-                __strong UIImageView *sself = wself;
-                [sself stopAnimating];
-                if (sself && image) {
-                    NSMutableArray *currentImages = [[sself animationImages] mutableCopy];
-                    if (!currentImages) {
-                        currentImages = [[NSMutableArray alloc] init];
-                    }
-                    [currentImages addObject:image];
-
-                    sself.animationImages = currentImages;
-                    [sself setNeedsLayout];
-                }
-                [sself startAnimating];
-            });
-        }];
-        [operationsArray addObject:operation];
-    }
-
-    [self sd_setImageLoadOperation:[NSArray arrayWithArray:operationsArray] forKey:@"UIImageViewAnimationImages"];
-}
-
-- (void)sd_cancelCurrentImageLoad {
-    [self sd_cancelImageLoadOperationWithKey:@"UIImageViewImageLoad"];
-}
-
-- (void)sd_cancelCurrentAnimationImagesLoad {
-    [self sd_cancelImageLoadOperationWithKey:@"UIImageViewAnimationImages"];
-}
-
-
-#pragma mark -
-- (UIActivityIndicatorView *)activityIndicator {
-    return (UIActivityIndicatorView *)objc_getAssociatedObject(self, &TAG_ACTIVITY_INDICATOR);
-}
-
-- (void)setActivityIndicator:(UIActivityIndicatorView *)activityIndicator {
-    objc_setAssociatedObject(self, &TAG_ACTIVITY_INDICATOR, activityIndicator, OBJC_ASSOCIATION_RETAIN);
-}
-
-- (void)setShowActivityIndicatorView:(BOOL)show{
-    objc_setAssociatedObject(self, &TAG_ACTIVITY_SHOW, [NSNumber numberWithBool:show], OBJC_ASSOCIATION_RETAIN);
-}
-
-- (BOOL)showActivityIndicatorView{
-    return [objc_getAssociatedObject(self, &TAG_ACTIVITY_SHOW) boolValue];
-}
-
-- (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style{
-    objc_setAssociatedObject(self, &TAG_ACTIVITY_STYLE, [NSNumber numberWithInt:style], OBJC_ASSOCIATION_RETAIN);
-}
-
-- (int)getIndicatorStyle{
-    return [objc_getAssociatedObject(self, &TAG_ACTIVITY_STYLE) intValue];
-}
-
-- (void)addActivityIndicator {
-    if (!self.activityIndicator) {
-        self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:[self getIndicatorStyle]];
-        self.activityIndicator.translatesAutoresizingMaskIntoConstraints = NO;
-
-        dispatch_main_async_safe(^{
-            [self addSubview:self.activityIndicator];
-
-            [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator
-                                                             attribute:NSLayoutAttributeCenterX
-                                                             relatedBy:NSLayoutRelationEqual
-                                                                toItem:self
-                                                             attribute:NSLayoutAttributeCenterX
-                                                            multiplier:1.0
-                                                              constant:0.0]];
-            [self addConstraint:[NSLayoutConstraint constraintWithItem:self.activityIndicator
-                                                             attribute:NSLayoutAttributeCenterY
-                                                             relatedBy:NSLayoutRelationEqual
-                                                                toItem:self
-                                                             attribute:NSLayoutAttributeCenterY
-                                                            multiplier:1.0
-                                                              constant:0.0]];
-        });
-    }
-
-    dispatch_main_async_safe(^{
-        [self.activityIndicator startAnimating];
-    });
-
-}
-
-- (void)removeActivityIndicator {
-    if (self.activityIndicator) {
-        [self.activityIndicator removeFromSuperview];
-        self.activityIndicator = nil;
-    }
-}
-
-@end
-
-
-@implementation UIImageView (WebCacheDeprecated)
-
-- (NSURL *)imageURL {
-    return [self sd_imageURL];
-}
-
-- (void)setImageWithURL:(NSURL *)url {
-    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
-}
-
-- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock {
-    [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
-        if (completedBlock) {
-            completedBlock(image, error, cacheType);
-        }
-    }];
-}
-
-- (void)cancelCurrentArrayLoad {
-    [self sd_cancelCurrentAnimationImagesLoad];
-}
-
-- (void)cancelCurrentImageLoad {
-    [self sd_cancelCurrentImageLoad];
-}
-
-- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs {
-    [self sd_setAnimationImagesWithURLs:arrayOfURLs];
-}
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h b/ios/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h
deleted file mode 100644
index 6719036..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import <UIKit/UIKit.h>
-#import "SDWebImageManager.h"
-
-@interface UIView (WebCacheOperation)
-
-/**
- *  Set the image load operation (storage in a UIView based dictionary)
- *
- *  @param operation the operation
- *  @param key       key for storing the operation
- */
-- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key;
-
-/**
- *  Cancel all operations for the current UIView and key
- *
- *  @param key key for identifying the operations
- */
-- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key;
-
-/**
- *  Just remove the operations corresponding to the current UIView and key without cancelling them
- *
- *  @param key key for identifying the operations
- */
-- (void)sd_removeImageLoadOperationWithKey:(NSString *)key;
-
-@end
diff --git a/ios/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m b/ios/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m
deleted file mode 100644
index 9219478..0000000
--- a/ios/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#import "UIView+WebCacheOperation.h"
-#import "objc/runtime.h"
-
-static char loadOperationKey;
-
-@implementation UIView (WebCacheOperation)
-
-- (NSMutableDictionary *)operationDictionary {
-    NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey);
-    if (operations) {
-        return operations;
-    }
-    operations = [NSMutableDictionary dictionary];
-    objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    return operations;
-}
-
-- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key {
-    [self sd_cancelImageLoadOperationWithKey:key];
-    NSMutableDictionary *operationDictionary = [self operationDictionary];
-    [operationDictionary setObject:operation forKey:key];
-}
-
-- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key {
-    // Cancel in progress downloader from queue
-    NSMutableDictionary *operationDictionary = [self operationDictionary];
-    id operations = [operationDictionary objectForKey:key];
-    if (operations) {
-        if ([operations isKindOfClass:[NSArray class]]) {
-            for (id <SDWebImageOperation> operation in operations) {
-                if (operation) {
-                    [operation cancel];
-                }
-            }
-        } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){
-            [(id<SDWebImageOperation>) operations cancel];
-        }
-        [operationDictionary removeObjectForKey:key];
-    }
-}
-
-- (void)sd_removeImageLoadOperationWithKey:(NSString *)key {
-    NSMutableDictionary *operationDictionary = [self operationDictionary];
-    [operationDictionary removeObjectForKey:key];
-}
-
-@end
diff --git a/ios/Pods/SocketRocket/LICENSE b/ios/Pods/SocketRocket/LICENSE
deleted file mode 100644
index c01a79c..0000000
--- a/ios/Pods/SocketRocket/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-
-   Copyright 2012 Square 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.
-
diff --git a/ios/Pods/SocketRocket/README.rst b/ios/Pods/SocketRocket/README.rst
deleted file mode 100644
index da16023..0000000
--- a/ios/Pods/SocketRocket/README.rst
+++ /dev/null
@@ -1,255 +0,0 @@
-SocketRocket Objective-C WebSocket Client (beta)
-================================================
-A conforming WebSocket (`RFC 6455 <http://tools.ietf.org/html/rfc6455>`_)
-client library.
-
-`Test results for SocketRocket here <http://square.github.com/SocketRocket/results/>`_.
-You can compare to what `modern browsers look like here
-<http://www.tavendo.de/autobahn/testsuite/report/clients/index.html>`_.
-
-SocketRocket currently conforms to all ~300 of `Autobahn
-<http://autobahn.ws/testsuite/>`_'s fuzzing tests (aside from
-two UTF-8 ones where it is merely *non-strict*. tests 6.4.2 and 6.4.4)
-
-Features/Design
----------------
-- TLS (wss) support.  It uses CFStream so we get this for *free*
-- Uses NSStream/CFNetworking.  Earlier implementations used ``dispatch_io``,
-  however, this proved to be make TLS nearly impossible.  Also I wanted this to
-  work in iOS 4.x. (SocketRocket only supports 5.0 and above now)
-- Uses ARC.  It uses the 4.0 compatible subset (no weak refs).
-- Seems to perform quite well
-- Parallel architecture. Most of the work is done in background worker queues.
-- Delegate-based. Had older versions that could use blocks too, but I felt it
-  didn't blend well with retain cycles and just objective C in general.
-
-Changes
--------
-
-v0.3.1-beta2 - 2013-01-12
-`````````````````````````
-
-- Stability fix for ``closeWithCode:reason:`` (Thanks @michaelpetrov!)
-- Actually clean up the NSStreams and remove them from their runloops
-- ``_SRRunLoopThread``'s ``main`` wasn't correctly wrapped with
-  ``@autoreleasepool``
-
-v0.3.1-beta1 - 2013-01-12
-`````````````````````````
-
-- Cleaned up GCD so OS_OBJECT_USE_OBJC_RETAIN_RELEASE is optional
-- Removed deprecated ``dispatch_get_current_queue`` in favor of ``dispatch_queue_set_specific`` and ``dispatch_get_specific``
-- Dropping support for iOS 4.0 (it may still work)
-
-
-Installing (iOS)
-----------------
-There's a few options. Choose one, or just figure it out
-
-- You can copy all the files in the SocketRocket group into your app.
-- Include SocketRocket as a subproject and use libSocketRocket
-
-  If you do this, you must add -ObjC to your "other linker flags" option
-
-- For OS X you will have to repackage make a .framework target.  I will take
-  contributions. Message me if you are interested.
-
-
-Depending on how you configure your project you may need to ``#import`` either
-``<SocketRocket/SRWebSocket.h>`` or ``"SRWebSocket.h"``
-
-Framework Dependencies
-``````````````````````
-Your .app must be linked against the following frameworks/dylibs
-
-- libicucore.dylib
-- CFNetwork.framework
-- Security.framework
-- Foundation.framework
-
-Installing (OS X)
------------------
-SocketRocket now has (64-bit only) OS X support.  ``SocketRocket.framework``
-inside Xcode project is for OS X only.  It should be identical in function aside
-from the unicode validation.  ICU isn't shipped with OS X which is what the
-original implementation used for unicode validation.  The workaround is much
-more rudimentary and less robust.
-
-1. Add SocketRocket.xcodeproj as either a subproject of your app or in your workspace.
-2. Add ``SocketRocket.framework`` to the link libraries
-3. If you don't have a "copy files" step for ``Framework``, create one
-4. Add ``SocketRocket.framework`` to the "copy files" step.
-
-API
----
-The classes
-
-``SRWebSocket``
-```````````````
-The Web Socket.
-
-.. note:: ``SRWebSocket`` will retain itself between ``-(void)open`` and when it
-  closes, errors, or fails.  This is similar to how ``NSURLConnection`` behaves.
-  (unlike ``NSURLConnection``, ``SRWebSocket`` won't retain the delegate)
-
-What you need to know
-
-.. code-block:: objective-c
-
-  @interface SRWebSocket : NSObject
-
-  // Make it with this
-  - (id)initWithURLRequest:(NSURLRequest *)request;
-
-  // Set this before opening
-  @property (nonatomic, assign) id <SRWebSocketDelegate> delegate;
-
-  - (void)open;
-  
-  // Close it with this
-  - (void)close;
-
-  // Send a UTF8 String or Data
-  - (void)send:(id)data;
-
-  @end
-
-``SRWebSocketDelegate``
-```````````````````````
-You implement this
-
-.. code-block:: objective-c
-
-  @protocol SRWebSocketDelegate <NSObject>
-
-  - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
-
-  @optional
-
-  - (void)webSocketDidOpen:(SRWebSocket *)webSocket;
-  - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
-  - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
-
-  @end
-
-Known Issues/Server Todo's
---------------------------
-- Needs auth delegates (like in NSURLConnection)
-- Move the streams off the main runloop (most of the work is backgrounded uses
-  GCD, but I just haven't gotten around to moving it off the main loop since I
-  converted it from dispatch_io)
-- Re-implement server. I removed an existing implementation as well because it
-  wasn't being used and I wasn't super happy with the interface.  Will revisit
-  this.
-- Separate framer and client logic. This will make it nicer when having a
-  server.
-
-Testing
--------
-Included are setup scripts for the python testing environment.  It comes
-packaged with vitualenv so all the dependencies are installed in userland.
-
-To run the short test from the command line, run::
-
-  make test
-
-To run all the tests, run::
-
-  make test_all
-
-The short tests don't include the performance tests.  (the test harness is
-actually the bottleneck, not SocketRocket).
-
-The first time this is run, it may take a while to install the dependencies.  It
-will be smooth sailing after that.  After the test runs the makefile will open
-the results page in your browser.  If nothing comes up, you failed.  Working on
-making this interface a bit nicer.
-
-To run from the app, choose the ``SocketRocket`` target and run the test action
-(``cmd+u``). It runs the same thing, but makes it easier to debug.  There is
-some serious pre/post hooks in the Test action.  You can edit it to customize
-behavior.
-
-.. note:: Xcode only up to version 4.4 is currently supported for the test
-  harness
-
-TestChat Demo Application
--------------------------
-SocketRocket includes a demo app, TestChat.  It will "chat" with a listening
-websocket on port 9900.
-
-It's a simple project.  Uses storyboard.  Storyboard is sweet.
-
-
-TestChat Server
-```````````````
-We've included a small server for the chat app.  It has a simple function.
-It will take a message and broadcast it to all other connected clients.
-
-We have to get some dependencies.  We also want to reuse the virtualenv we made
-when we ran the tests. If you haven't run the tests yet, go into the
-SocketRocket root directory and type::
-
-  make test
-
-This will set up your `virtualenv <http://pypi.python.org/pypi/virtualenv>`_.
-Now, in your terminal::
-
-  source .env/bin/activate
-  pip install git+https://github.com/facebook/tornado.git
-
-In the same terminal session, start the chatroom server::
-
-  python TestChatServer/py/chatroom.py
-
-There's also a Go implementation (with the latest weekly) where you can::
-
-  cd TestChatServer/go
-  go run chatroom.go
-
-Chatting
-````````
-Now, start TestChat.app (just run the target in the XCode project).  If you had
-it started already you can hit the refresh button to reconnect.  It should say
-"Connected!" on top.
-
-To talk with the app, open up your browser to `http://localhost:9000 <http://localhost:9000>`_ and
-start chatting.
-
-
-WebSocket Server Implementation Recommendations
------------------------------------------------
-SocketRocket has been used with the following libraries:
-
-- `Tornado <https://github.com/facebook/tornado>`_
-- Go's `WebSocket package <http://godoc.org/code.google.com/p/go.net/websocket>`_ or Gorilla's `version <http://www.gorillatoolkit.org/pkg/websocket>`_
-- `Autobahn <http://www.tavendo.de/autobahn/testsuite.html>`_ (using its fuzzing
-  client)
-
-The Tornado one is dirt simple and works like a charm.  (`IPython notebook
-<http://ipython.org/ipython-doc/dev/interactive/htmlnotebook.html>`_ uses it
-too).  It's much easier to configure handlers and routes than in
-Autobahn/twisted.
-
-As far as Go's goes, it works in my limited testing. I much prefer go's
-concurrency model as well. Try it! You may like it.
-It could use some more control over things such as pings, etc., but I
-am sure it will come in time.
-
-Autobahn is a great test suite.  The Python server code is good, and conforms
-well (obviously).  However for me, twisted would be a deal-breaker for writing
-something new.  I find it a bit too complex and heavy for a simple service. If
-you are already using twisted though, Autobahn is probably for you.
-
-Contributing
-------------
-Any contributors to the master SocketRocket repository must sign the `Individual
-Contributor License Agreement
-(CLA)
-<https://spreadsheets.google.com/spreadsheet/viewform?formkey=dDViT2xzUHAwRkI3X3k5Z0lQM091OGc6MQ&ndplr=1>`_.
-It's a short form that covers our bases and makes sure you're eligible to
-contribute.
-
-When you have a change you'd like to see in the master repository, `send a pull
-request <https://github.com/square/SocketRocket/pulls>`_. Before we merge your
-request, we'll make sure you're in the list of people who have signed a CLA.
diff --git a/ios/Pods/SocketRocket/SocketRocket/SRWebSocket.h b/ios/Pods/SocketRocket/SocketRocket/SRWebSocket.h
deleted file mode 100644
index 5f8bca1..0000000
--- a/ios/Pods/SocketRocket/SocketRocket/SRWebSocket.h
+++ /dev/null
@@ -1,140 +0,0 @@
-//
-//   Copyright 2012 Square 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.
-//
-
-#import <Foundation/Foundation.h>
-#import <Security/SecCertificate.h>
-
-typedef NS_ENUM(NSInteger, SRReadyState) {
-    SR_CONNECTING   = 0,
-    SR_OPEN         = 1,
-    SR_CLOSING      = 2,
-    SR_CLOSED       = 3,
-};
-
-typedef enum SRStatusCode : NSInteger {
-    SRStatusCodeNormal = 1000,
-    SRStatusCodeGoingAway = 1001,
-    SRStatusCodeProtocolError = 1002,
-    SRStatusCodeUnhandledType = 1003,
-    // 1004 reserved.
-    SRStatusNoStatusReceived = 1005,
-    // 1004-1006 reserved.
-    SRStatusCodeInvalidUTF8 = 1007,
-    SRStatusCodePolicyViolated = 1008,
-    SRStatusCodeMessageTooBig = 1009,
-} SRStatusCode;
-
-@class SRWebSocket;
-
-extern NSString *const SRWebSocketErrorDomain;
-extern NSString *const SRHTTPResponseErrorKey;
-
-#pragma mark - SRWebSocketDelegate
-
-@protocol SRWebSocketDelegate;
-
-#pragma mark - SRWebSocket
-
-@interface SRWebSocket : NSObject <NSStreamDelegate>
-
-@property (nonatomic, weak) id <SRWebSocketDelegate> delegate;
-
-@property (nonatomic, readonly) SRReadyState readyState;
-@property (nonatomic, readonly, retain) NSURL *url;
-
-
-@property (nonatomic, readonly) CFHTTPMessageRef receivedHTTPHeaders;
-
-// Optional array of cookies (NSHTTPCookie objects) to apply to the connections
-@property (nonatomic, readwrite) NSArray * requestCookies;
-
-// This returns the negotiated protocol.
-// It will be nil until after the handshake completes.
-@property (nonatomic, readonly, copy) NSString *protocol;
-
-// Protocols should be an array of strings that turn into Sec-WebSocket-Protocol.
-- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates;
-- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols;
-- (id)initWithURLRequest:(NSURLRequest *)request;
-
-// Some helper constructors.
-- (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates;
-- (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols;
-- (id)initWithURL:(NSURL *)url;
-
-// Delegate queue will be dispatch_main_queue by default.
-// You cannot set both OperationQueue and dispatch_queue.
-- (void)setDelegateOperationQueue:(NSOperationQueue*) queue;
-- (void)setDelegateDispatchQueue:(dispatch_queue_t) queue;
-
-// By default, it will schedule itself on +[NSRunLoop SR_networkRunLoop] using defaultModes.
-- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
-- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
-
-// SRWebSockets are intended for one-time-use only.  Open should be called once and only once.
-- (void)open;
-
-- (void)close;
-- (void)closeWithCode:(NSInteger)code reason:(NSString *)reason;
-
-// Send a UTF8 String or Data.
-- (void)send:(id)data;
-
-// Send Data (can be nil) in a ping message.
-- (void)sendPing:(NSData *)data;
-
-@end
-
-#pragma mark - SRWebSocketDelegate
-
-@protocol SRWebSocketDelegate <NSObject>
-
-// message will either be an NSString if the server is using text
-// or NSData if the server is using binary.
-- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
-
-@optional
-
-- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
-- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
-- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
-- (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload;
-
-@end
-
-#pragma mark - NSURLRequest (CertificateAdditions)
-
-@interface NSURLRequest (CertificateAdditions)
-
-@property (nonatomic, retain, readonly) NSArray *SR_SSLPinnedCertificates;
-
-@end
-
-#pragma mark - NSMutableURLRequest (CertificateAdditions)
-
-@interface NSMutableURLRequest (CertificateAdditions)
-
-@property (nonatomic, retain) NSArray *SR_SSLPinnedCertificates;
-
-@end
-
-#pragma mark - NSRunLoop (SRWebSocket)
-
-@interface NSRunLoop (SRWebSocket)
-
-+ (NSRunLoop *)SR_networkRunLoop;
-
-@end
diff --git a/ios/Pods/SocketRocket/SocketRocket/SRWebSocket.m b/ios/Pods/SocketRocket/SocketRocket/SRWebSocket.m
deleted file mode 100644
index a0d41fc..0000000
--- a/ios/Pods/SocketRocket/SocketRocket/SRWebSocket.m
+++ /dev/null
@@ -1,1812 +0,0 @@
-//
-//   Copyright 2012 Square 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.
-//
-
-
-#import "SRWebSocket.h"
-
-#if TARGET_OS_IPHONE
-#define HAS_ICU
-#endif
-
-#ifdef HAS_ICU
-#import <unicode/utf8.h>
-#endif
-
-#if TARGET_OS_IPHONE
-#import <Endian.h>
-#else
-#import <CoreServices/CoreServices.h>
-#endif
-
-#import <CommonCrypto/CommonDigest.h>
-#import <Security/SecRandom.h>
-
-#if OS_OBJECT_USE_OBJC_RETAIN_RELEASE
-#define sr_dispatch_retain(x)
-#define sr_dispatch_release(x)
-#define maybe_bridge(x) ((__bridge void *) x)
-#else
-#define sr_dispatch_retain(x) dispatch_retain(x)
-#define sr_dispatch_release(x) dispatch_release(x)
-#define maybe_bridge(x) (x)
-#endif
-
-#if !__has_feature(objc_arc) 
-#error SocketRocket must be compiled with ARC enabled
-#endif
-
-
-typedef enum  {
-    SROpCodeTextFrame = 0x1,
-    SROpCodeBinaryFrame = 0x2,
-    // 3-7 reserved.
-    SROpCodeConnectionClose = 0x8,
-    SROpCodePing = 0x9,
-    SROpCodePong = 0xA,
-    // B-F reserved.
-} SROpCode;
-
-typedef struct {
-    BOOL fin;
-//  BOOL rsv1;
-//  BOOL rsv2;
-//  BOOL rsv3;
-    uint8_t opcode;
-    BOOL masked;
-    uint64_t payload_length;
-} frame_header;
-
-static NSString *const SRWebSocketAppendToSecKeyString = @"258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
-
-static inline int32_t validate_dispatch_data_partial_string(NSData *data);
-static inline void SRFastLog(NSString *format, ...);
-
-@interface NSData (SRWebSocket)
-
-- (NSString *)stringBySHA1ThenBase64Encoding;
-
-@end
-
-
-@interface NSString (SRWebSocket)
-
-- (NSString *)stringBySHA1ThenBase64Encoding;
-
-@end
-
-
-@interface NSURL (SRWebSocket)
-
-// The origin isn't really applicable for a native application.
-// So instead, just map ws -> http and wss -> https.
-- (NSString *)SR_origin;
-
-@end
-
-
-@interface _SRRunLoopThread : NSThread
-
-@property (nonatomic, readonly) NSRunLoop *runLoop;
-
-@end
-
-
-static NSString *newSHA1String(const char *bytes, size_t length) {
-    uint8_t md[CC_SHA1_DIGEST_LENGTH];
-
-    assert(length >= 0);
-    assert(length <= UINT32_MAX);
-    CC_SHA1(bytes, (CC_LONG)length, md);
-    
-    NSData *data = [NSData dataWithBytes:md length:CC_SHA1_DIGEST_LENGTH];
-    
-    if ([data respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
-        return [data base64EncodedStringWithOptions:0];
-    }
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-    return [data base64Encoding];
-#pragma clang diagnostic pop
-}
-
-@implementation NSData (SRWebSocket)
-
-- (NSString *)stringBySHA1ThenBase64Encoding;
-{
-    return newSHA1String(self.bytes, self.length);
-}
-
-@end
-
-
-@implementation NSString (SRWebSocket)
-
-- (NSString *)stringBySHA1ThenBase64Encoding;
-{
-    return newSHA1String(self.UTF8String, self.length);
-}
-
-@end
-
-NSString *const SRWebSocketErrorDomain = @"SRWebSocketErrorDomain";
-NSString *const SRHTTPResponseErrorKey = @"HTTPResponseStatusCode";
-
-// Returns number of bytes consumed. Returning 0 means you didn't match.
-// Sends bytes to callback handler;
-typedef size_t (^stream_scanner)(NSData *collected_data);
-
-typedef void (^data_callback)(SRWebSocket *webSocket,  NSData *data);
-
-@interface SRIOConsumer : NSObject {
-    stream_scanner _scanner;
-    data_callback _handler;
-    size_t _bytesNeeded;
-    BOOL _readToCurrentFrame;
-    BOOL _unmaskBytes;
-}
-@property (nonatomic, copy, readonly) stream_scanner consumer;
-@property (nonatomic, copy, readonly) data_callback handler;
-@property (nonatomic, assign) size_t bytesNeeded;
-@property (nonatomic, assign, readonly) BOOL readToCurrentFrame;
-@property (nonatomic, assign, readonly) BOOL unmaskBytes;
-
-@end
-
-// This class is not thread-safe, and is expected to always be run on the same queue.
-@interface SRIOConsumerPool : NSObject
-
-- (id)initWithBufferCapacity:(NSUInteger)poolSize;
-
-- (SRIOConsumer *)consumerWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-- (void)returnConsumer:(SRIOConsumer *)consumer;
-
-@end
-
-@interface SRWebSocket ()  <NSStreamDelegate>
-
-@property (nonatomic) SRReadyState readyState;
-
-@property (nonatomic) NSOperationQueue *delegateOperationQueue;
-@property (nonatomic) dispatch_queue_t delegateDispatchQueue;
-
-// Specifies whether SSL trust chain should NOT be evaluated.
-// By default this flag is set to NO, meaning only secure SSL connections are allowed.
-// For DEBUG builds this flag is ignored, and SSL connections are allowed regardless
-// of the certificate trust configuration
-@property (nonatomic, readwrite) BOOL allowsUntrustedSSLCertificates;
-
-@end
-
-
-@implementation SRWebSocket {
-    NSInteger _webSocketVersion;
-    
-    NSOperationQueue *_delegateOperationQueue;
-    dispatch_queue_t _delegateDispatchQueue;
-    
-    dispatch_queue_t _workQueue;
-    NSMutableArray *_consumers;
-
-    NSInputStream *_inputStream;
-    NSOutputStream *_outputStream;
-   
-    NSMutableData *_readBuffer;
-    NSUInteger _readBufferOffset;
- 
-    NSMutableData *_outputBuffer;
-    NSUInteger _outputBufferOffset;
-
-    uint8_t _currentFrameOpcode;
-    size_t _currentFrameCount;
-    size_t _readOpCount;
-    uint32_t _currentStringScanPosition;
-    NSMutableData *_currentFrameData;
-    
-    NSString *_closeReason;
-    
-    NSString *_secKey;
-    NSString *_basicAuthorizationString;
-    
-    BOOL _pinnedCertFound;
-    
-    uint8_t _currentReadMaskKey[4];
-    size_t _currentReadMaskOffset;
-
-    BOOL _consumerStopped;
-    
-    BOOL _closeWhenFinishedWriting;
-    BOOL _failed;
-
-    BOOL _secure;
-    NSURLRequest *_urlRequest;
-
-    BOOL _sentClose;
-    BOOL _didFail;
-    int _closeCode;
-    
-    BOOL _isPumping;
-    
-    NSMutableSet *_scheduledRunloops;
-    
-    // We use this to retain ourselves.
-    __strong SRWebSocket *_selfRetain;
-    
-    NSArray *_requestedProtocols;
-    SRIOConsumerPool *_consumerPool;
-}
-
-@synthesize delegate = _delegate;
-@synthesize url = _url;
-@synthesize readyState = _readyState;
-@synthesize protocol = _protocol;
-
-static __strong NSData *CRLFCRLF;
-
-+ (void)initialize;
-{
-    CRLFCRLF = [[NSData alloc] initWithBytes:"\r\n\r\n" length:4];
-}
-
-- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates;
-{
-    self = [super init];
-    if (self) {
-        assert(request.URL);
-        _url = request.URL;
-        _urlRequest = request;
-        _allowsUntrustedSSLCertificates = allowsUntrustedSSLCertificates;
-        
-        _requestedProtocols = [protocols copy];
-        
-        [self _SR_commonInit];
-    }
-    
-    return self;
-}
-
-- (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols;
-{
-    return [self initWithURLRequest:request protocols:protocols allowsUntrustedSSLCertificates:NO];
-}
-
-- (id)initWithURLRequest:(NSURLRequest *)request;
-{
-    return [self initWithURLRequest:request protocols:nil];
-}
-
-- (id)initWithURL:(NSURL *)url;
-{
-    return [self initWithURL:url protocols:nil];
-}
-
-- (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols;
-{
-    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];    
-    return [self initWithURLRequest:request protocols:protocols];
-}
-
-- (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates;
-{
-    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
-    return [self initWithURLRequest:request protocols:protocols allowsUntrustedSSLCertificates:allowsUntrustedSSLCertificates];
-}
-
-- (void)_SR_commonInit;
-{
-    NSString *scheme = _url.scheme.lowercaseString;
-    assert([scheme isEqualToString:@"ws"] || [scheme isEqualToString:@"http"] || [scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]);
-    
-    if ([scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]) {
-        _secure = YES;
-    }
-    
-    _readyState = SR_CONNECTING;
-    _consumerStopped = YES;
-    _webSocketVersion = 13;
-    
-    _workQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
-    
-    // Going to set a specific on the queue so we can validate we're on the work queue
-    dispatch_queue_set_specific(_workQueue, (__bridge void *)self, maybe_bridge(_workQueue), NULL);
-    
-    _delegateDispatchQueue = dispatch_get_main_queue();
-    sr_dispatch_retain(_delegateDispatchQueue);
-    
-    _readBuffer = [[NSMutableData alloc] init];
-    _outputBuffer = [[NSMutableData alloc] init];
-    
-    _currentFrameData = [[NSMutableData alloc] init];
-
-    _consumers = [[NSMutableArray alloc] init];
-    
-    _consumerPool = [[SRIOConsumerPool alloc] init];
-    
-    _scheduledRunloops = [[NSMutableSet alloc] init];
-    
-    [self _initializeStreams];
-    
-    // default handlers
-}
-
-- (void)assertOnWorkQueue;
-{
-    assert(dispatch_get_specific((__bridge void *)self) == maybe_bridge(_workQueue));
-}
-
-- (void)dealloc
-{
-    _inputStream.delegate = nil;
-    _outputStream.delegate = nil;
-
-    [_inputStream close];
-    [_outputStream close];
-    
-    if (_workQueue) {
-        sr_dispatch_release(_workQueue);
-        _workQueue = NULL;
-    }
-    
-    if (_receivedHTTPHeaders) {
-        CFRelease(_receivedHTTPHeaders);
-        _receivedHTTPHeaders = NULL;
-    }
-    
-    if (_delegateDispatchQueue) {
-        sr_dispatch_release(_delegateDispatchQueue);
-        _delegateDispatchQueue = NULL;
-    }
-}
-
-#ifndef NDEBUG
-
-- (void)setReadyState:(SRReadyState)aReadyState;
-{
-    [self willChangeValueForKey:@"readyState"];
-    assert(aReadyState > _readyState);
-    _readyState = aReadyState;
-    [self didChangeValueForKey:@"readyState"];
-}
-
-#endif
-
-- (void)open;
-{
-    assert(_url);
-    NSAssert(_readyState == SR_CONNECTING, @"Cannot call -(void)open on SRWebSocket more than once");
-
-    _selfRetain = self;
-    
-    [self openConnection];
-}
-
-// Calls block on delegate queue
-- (void)_performDelegateBlock:(dispatch_block_t)block;
-{
-    if (_delegateOperationQueue) {
-        [_delegateOperationQueue addOperationWithBlock:block];
-    } else {
-        assert(_delegateDispatchQueue);
-        dispatch_async(_delegateDispatchQueue, block);
-    }
-}
-
-- (void)setDelegateDispatchQueue:(dispatch_queue_t)queue;
-{
-    if (queue) {
-        sr_dispatch_retain(queue);
-    }
-    
-    if (_delegateDispatchQueue) {
-        sr_dispatch_release(_delegateDispatchQueue);
-    }
-    
-    _delegateDispatchQueue = queue;
-}
-
-- (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage;
-{
-    NSString *acceptHeader = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(httpMessage, CFSTR("Sec-WebSocket-Accept")));
-
-    if (acceptHeader == nil) {
-        return NO;
-    }
-    
-    NSString *concattedString = [_secKey stringByAppendingString:SRWebSocketAppendToSecKeyString];
-    NSString *expectedAccept = [concattedString stringBySHA1ThenBase64Encoding];
-    
-    return [acceptHeader isEqualToString:expectedAccept];
-}
-
-- (void)_HTTPHeadersDidFinish;
-{
-    NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(_receivedHTTPHeaders);
-    
-    if (responseCode >= 400) {
-        SRFastLog(@"Request failed with response code %d", responseCode);
-        [self _failWithError:[NSError errorWithDomain:SRWebSocketErrorDomain code:2132 userInfo:@{NSLocalizedDescriptionKey:[NSString stringWithFormat:@"received bad response code from server %ld", (long)responseCode], SRHTTPResponseErrorKey:@(responseCode)}]];
-        return;
-    }
-    
-    if(![self _checkHandshake:_receivedHTTPHeaders]) {
-        [self _failWithError:[NSError errorWithDomain:SRWebSocketErrorDomain code:2133 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Invalid Sec-WebSocket-Accept response"] forKey:NSLocalizedDescriptionKey]]];
-        return;
-    }
-    
-    NSString *negotiatedProtocol = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(_receivedHTTPHeaders, CFSTR("Sec-WebSocket-Protocol")));
-    if (negotiatedProtocol) {
-        // Make sure we requested the protocol
-        if ([_requestedProtocols indexOfObject:negotiatedProtocol] == NSNotFound) {
-            [self _failWithError:[NSError errorWithDomain:SRWebSocketErrorDomain code:2133 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Server specified Sec-WebSocket-Protocol that wasn't requested"] forKey:NSLocalizedDescriptionKey]]];
-            return;
-        }
-        
-        _protocol = negotiatedProtocol;
-    }
-    
-    self.readyState = SR_OPEN;
-    
-    if (!_didFail) {
-        [self _readFrameNew];
-    }
-
-    [self _performDelegateBlock:^{
-        if ([self.delegate respondsToSelector:@selector(webSocketDidOpen:)]) {
-            [self.delegate webSocketDidOpen:self];
-        };
-    }];
-}
-
-
-- (void)_readHTTPHeader;
-{
-    if (_receivedHTTPHeaders == NULL) {
-        _receivedHTTPHeaders = CFHTTPMessageCreateEmpty(NULL, NO);
-    }
-                        
-    [self _readUntilHeaderCompleteWithCallback:^(SRWebSocket *self,  NSData *data) {
-        CFHTTPMessageAppendBytes(_receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length);
-        
-        if (CFHTTPMessageIsHeaderComplete(_receivedHTTPHeaders)) {
-            SRFastLog(@"Finished reading headers %@", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(_receivedHTTPHeaders)));
-            [self _HTTPHeadersDidFinish];
-        } else {
-            [self _readHTTPHeader];
-        }
-    }];
-}
-
-- (void)didConnect;
-{
-    SRFastLog(@"Connected");
-    CFHTTPMessageRef request = CFHTTPMessageCreateRequest(NULL, CFSTR("GET"), (__bridge CFURLRef)_url, kCFHTTPVersion1_1);
-    
-    // Set host first so it defaults
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Host"), (__bridge CFStringRef)(_url.port ? [NSString stringWithFormat:@"%@:%@", _url.host, _url.port] : _url.host));
-        
-    NSMutableData *keyBytes = [[NSMutableData alloc] initWithLength:16];
-    SecRandomCopyBytes(kSecRandomDefault, keyBytes.length, keyBytes.mutableBytes);
-    
-    if ([keyBytes respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
-        _secKey = [keyBytes base64EncodedStringWithOptions:0];
-    } else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-        _secKey = [keyBytes base64Encoding];
-#pragma clang diagnostic pop
-    }
-    
-    assert([_secKey length] == 24);
-
-    // Apply cookies if any have been provided
-    NSDictionary * cookies = [NSHTTPCookie requestHeaderFieldsWithCookies:[self requestCookies]];
-    for (NSString * cookieKey in cookies) {
-        NSString * cookieValue = [cookies objectForKey:cookieKey];
-        if ([cookieKey length] && [cookieValue length]) {
-            CFHTTPMessageSetHeaderFieldValue(request, (__bridge CFStringRef)cookieKey, (__bridge CFStringRef)cookieValue);
-        }
-    }
- 
-    // set header for http basic auth
-    if (_url.user.length && _url.password.length) {
-        NSData *userAndPassword = [[NSString stringWithFormat:@"%@:%@", _url.user, _url.password] dataUsingEncoding:NSUTF8StringEncoding];
-        NSString *userAndPasswordBase64Encoded;
-        if ([keyBytes respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
-            userAndPasswordBase64Encoded = [userAndPassword base64EncodedStringWithOptions:0];
-        } else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-            userAndPasswordBase64Encoded = [userAndPassword base64Encoding];
-#pragma clang diagnostic pop
-        }
-        _basicAuthorizationString = [NSString stringWithFormat:@"Basic %@", userAndPasswordBase64Encoded];
-        CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Authorization"), (__bridge CFStringRef)_basicAuthorizationString);
-    }
-
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Upgrade"), CFSTR("websocket"));
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Connection"), CFSTR("Upgrade"));
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Key"), (__bridge CFStringRef)_secKey);
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Version"), (__bridge CFStringRef)[NSString stringWithFormat:@"%ld", (long)_webSocketVersion]);
-    
-    CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Origin"), (__bridge CFStringRef)_url.SR_origin);
-    
-    if (_requestedProtocols) {
-        CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Sec-WebSocket-Protocol"), (__bridge CFStringRef)[_requestedProtocols componentsJoinedByString:@", "]);
-    }
-
-    [_urlRequest.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-        CFHTTPMessageSetHeaderFieldValue(request, (__bridge CFStringRef)key, (__bridge CFStringRef)obj);
-    }];
-    
-    NSData *message = CFBridgingRelease(CFHTTPMessageCopySerializedMessage(request));
-    
-    CFRelease(request);
-
-    [self _writeData:message];
-    [self _readHTTPHeader];
-}
-
-- (void)_initializeStreams;
-{
-    assert(_url.port.unsignedIntValue <= UINT32_MAX);
-    uint32_t port = _url.port.unsignedIntValue;
-    if (port == 0) {
-        if (!_secure) {
-            port = 80;
-        } else {
-            port = 443;
-        }
-    }
-    NSString *host = _url.host;
-    
-    CFReadStreamRef readStream = NULL;
-    CFWriteStreamRef writeStream = NULL;
-    
-    CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream);
-    
-    _outputStream = CFBridgingRelease(writeStream);
-    _inputStream = CFBridgingRelease(readStream);
-    
-    _inputStream.delegate = self;
-    _outputStream.delegate = self;
-}
-
-- (void)_updateSecureStreamOptions;
-{
-    if (_secure) {
-        NSMutableDictionary *SSLOptions = [[NSMutableDictionary alloc] init];
-        
-        [_outputStream setProperty:(__bridge id)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(__bridge id)kCFStreamPropertySocketSecurityLevel];
-        
-        // If we're using pinned certs, don't validate the certificate chain
-        if ([_urlRequest SR_SSLPinnedCertificates].count) {
-            [SSLOptions setValue:@NO forKey:(__bridge id)kCFStreamSSLValidatesCertificateChain];
-        }
-        
-#if DEBUG
-        self.allowsUntrustedSSLCertificates = YES;
-#endif
-
-        if (self.allowsUntrustedSSLCertificates) {
-            [SSLOptions setValue:@NO forKey:(__bridge id)kCFStreamSSLValidatesCertificateChain];
-            SRFastLog(@"Allowing connection to any root cert");
-        }
-        
-        [_outputStream setProperty:SSLOptions
-                            forKey:(__bridge id)kCFStreamPropertySSLSettings];
-    }
-}
-
-- (void)openConnection;
-{
-    [self _updateSecureStreamOptions];
-    
-    if (!_scheduledRunloops.count) {
-        [self scheduleInRunLoop:[NSRunLoop SR_networkRunLoop] forMode:NSDefaultRunLoopMode];
-    }
-    
-    
-    [_outputStream open];
-    [_inputStream open];
-}
-
-- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
-{
-    [_outputStream scheduleInRunLoop:aRunLoop forMode:mode];
-    [_inputStream scheduleInRunLoop:aRunLoop forMode:mode];
-    
-    [_scheduledRunloops addObject:@[aRunLoop, mode]];
-}
-
-- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
-{
-    [_outputStream removeFromRunLoop:aRunLoop forMode:mode];
-    [_inputStream removeFromRunLoop:aRunLoop forMode:mode];
-    
-    [_scheduledRunloops removeObject:@[aRunLoop, mode]];
-}
-
-- (void)close;
-{
-    [self closeWithCode:SRStatusCodeNormal reason:nil];
-}
-
-- (void)closeWithCode:(NSInteger)code reason:(NSString *)reason;
-{
-    assert(code);
-    dispatch_async(_workQueue, ^{
-        if (self.readyState == SR_CLOSING || self.readyState == SR_CLOSED) {
-            return;
-        }
-        
-        BOOL wasConnecting = self.readyState == SR_CONNECTING;
-        
-        self.readyState = SR_CLOSING;
-        
-        SRFastLog(@"Closing with code %d reason %@", code, reason);
-        
-        if (wasConnecting) {
-            [self closeConnection];
-            return;
-        }
-
-        size_t maxMsgSize = [reason maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-        NSMutableData *mutablePayload = [[NSMutableData alloc] initWithLength:sizeof(uint16_t) + maxMsgSize];
-        NSData *payload = mutablePayload;
-        
-        ((uint16_t *)mutablePayload.mutableBytes)[0] = EndianU16_BtoN(code);
-        
-        if (reason) {
-            NSRange remainingRange = {0};
-            
-            NSUInteger usedLength = 0;
-            
-            BOOL success = [reason getBytes:(char *)mutablePayload.mutableBytes + sizeof(uint16_t) maxLength:payload.length - sizeof(uint16_t) usedLength:&usedLength encoding:NSUTF8StringEncoding options:NSStringEncodingConversionExternalRepresentation range:NSMakeRange(0, reason.length) remainingRange:&remainingRange];
-            #pragma unused (success)
-            
-            assert(success);
-            assert(remainingRange.length == 0);
-
-            if (usedLength != maxMsgSize) {
-                payload = [payload subdataWithRange:NSMakeRange(0, usedLength + sizeof(uint16_t))];
-            }
-        }
-        
-        
-        [self _sendFrameWithOpcode:SROpCodeConnectionClose data:payload];
-    });
-}
-
-- (void)_closeWithProtocolError:(NSString *)message;
-{
-    // Need to shunt this on the _callbackQueue first to see if they received any messages 
-    [self _performDelegateBlock:^{
-        [self closeWithCode:SRStatusCodeProtocolError reason:message];
-        dispatch_async(_workQueue, ^{
-            [self closeConnection];
-        });
-    }];
-}
-
-- (void)_failWithError:(NSError *)error;
-{
-    dispatch_async(_workQueue, ^{
-        if (self.readyState != SR_CLOSED) {
-            _failed = YES;
-            [self _performDelegateBlock:^{
-                if ([self.delegate respondsToSelector:@selector(webSocket:didFailWithError:)]) {
-                    [self.delegate webSocket:self didFailWithError:error];
-                }
-            }];
-
-            self.readyState = SR_CLOSED;
-            _selfRetain = nil;
-
-            SRFastLog(@"Failing with error %@", error.localizedDescription);
-            
-            [self closeConnection];
-        }
-    });
-}
-
-- (void)_writeData:(NSData *)data;
-{    
-    [self assertOnWorkQueue];
-
-    if (_closeWhenFinishedWriting) {
-            return;
-    }
-    [_outputBuffer appendData:data];
-    [self _pumpWriting];
-}
-
-- (void)send:(id)data;
-{
-    NSAssert(self.readyState != SR_CONNECTING, @"Invalid State: Cannot call send: until connection is open");
-    // TODO: maybe not copy this for performance
-    data = [data copy];
-    dispatch_async(_workQueue, ^{
-        if ([data isKindOfClass:[NSString class]]) {
-            [self _sendFrameWithOpcode:SROpCodeTextFrame data:[(NSString *)data dataUsingEncoding:NSUTF8StringEncoding]];
-        } else if ([data isKindOfClass:[NSData class]]) {
-            [self _sendFrameWithOpcode:SROpCodeBinaryFrame data:data];
-        } else if (data == nil) {
-            [self _sendFrameWithOpcode:SROpCodeTextFrame data:data];
-        } else {
-            assert(NO);
-        }
-    });
-}
-
-- (void)sendPing:(NSData *)data;
-{
-    NSAssert(self.readyState == SR_OPEN, @"Invalid State: Cannot call send: until connection is open");
-    // TODO: maybe not copy this for performance
-    data = [data copy] ?: [NSData data]; // It's okay for a ping to be empty
-    dispatch_async(_workQueue, ^{
-        [self _sendFrameWithOpcode:SROpCodePing data:data];
-    });
-}
-
-- (void)handlePing:(NSData *)pingData;
-{
-    // Need to pingpong this off _callbackQueue first to make sure messages happen in order
-    [self _performDelegateBlock:^{
-        dispatch_async(_workQueue, ^{
-            [self _sendFrameWithOpcode:SROpCodePong data:pingData];
-        });
-    }];
-}
-
-- (void)handlePong:(NSData *)pongData;
-{
-    SRFastLog(@"Received pong");
-    [self _performDelegateBlock:^{
-        if ([self.delegate respondsToSelector:@selector(webSocket:didReceivePong:)]) {
-            [self.delegate webSocket:self didReceivePong:pongData];
-        }
-    }];
-}
-
-- (void)_handleMessage:(id)message
-{
-    SRFastLog(@"Received message");
-    [self _performDelegateBlock:^{
-        [self.delegate webSocket:self didReceiveMessage:message];
-    }];
-}
-
-
-static inline BOOL closeCodeIsValid(int closeCode) {
-    if (closeCode < 1000) {
-        return NO;
-    }
-    
-    if (closeCode >= 1000 && closeCode <= 1011) {
-        if (closeCode == 1004 ||
-            closeCode == 1005 ||
-            closeCode == 1006) {
-            return NO;
-        }
-        return YES;
-    }
-    
-    if (closeCode >= 3000 && closeCode <= 3999) {
-        return YES;
-    }
-    
-    if (closeCode >= 4000 && closeCode <= 4999) {
-        return YES;
-    }
-
-    return NO;
-}
-
-//  Note from RFC:
-//
-//  If there is a body, the first two
-//  bytes of the body MUST be a 2-byte unsigned integer (in network byte
-//  order) representing a status code with value /code/ defined in
-//  Section 7.4.  Following the 2-byte integer the body MAY contain UTF-8
-//  encoded data with value /reason/, the interpretation of which is not
-//  defined by this specification.
-
-- (void)handleCloseWithData:(NSData *)data;
-{
-    size_t dataSize = data.length;
-    __block uint16_t closeCode = 0;
-    
-    SRFastLog(@"Received close frame");
-    
-    if (dataSize == 1) {
-        // TODO handle error
-        [self _closeWithProtocolError:@"Payload for close must be larger than 2 bytes"];
-        return;
-    } else if (dataSize >= 2) {
-        [data getBytes:&closeCode length:sizeof(closeCode)];
-        _closeCode = EndianU16_BtoN(closeCode);
-        if (!closeCodeIsValid(_closeCode)) {
-            [self _closeWithProtocolError:[NSString stringWithFormat:@"Cannot have close code of %d", _closeCode]];
-            return;
-        }
-        if (dataSize > 2) {
-            _closeReason = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(2, dataSize - 2)] encoding:NSUTF8StringEncoding];
-            if (!_closeReason) {
-                [self _closeWithProtocolError:@"Close reason MUST be valid UTF-8"];
-                return;
-            }
-        }
-    } else {
-        _closeCode = SRStatusNoStatusReceived;
-    }
-    
-    [self assertOnWorkQueue];
-    
-    if (self.readyState == SR_OPEN) {
-        [self closeWithCode:1000 reason:nil];
-    }
-    dispatch_async(_workQueue, ^{
-        [self closeConnection];
-    });
-}
-
-- (void)closeConnection;
-{
-    [self assertOnWorkQueue];
-    SRFastLog(@"Trying to disconnect");
-    _closeWhenFinishedWriting = YES;
-    [self _pumpWriting];
-}
-
-- (void)_handleFrameWithData:(NSData *)frameData opCode:(NSInteger)opcode;
-{                
-    // Check that the current data is valid UTF8
-    
-    BOOL isControlFrame = (opcode == SROpCodePing || opcode == SROpCodePong || opcode == SROpCodeConnectionClose);
-    if (!isControlFrame) {
-        [self _readFrameNew];
-    } else {
-        dispatch_async(_workQueue, ^{
-            [self _readFrameContinue];
-        });
-    }
-    
-    switch (opcode) {
-        case SROpCodeTextFrame: {
-            NSString *str = [[NSString alloc] initWithData:frameData encoding:NSUTF8StringEncoding];
-            if (str == nil && frameData) {
-                [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"];
-                dispatch_async(_workQueue, ^{
-                    [self closeConnection];
-                });
-
-                return;
-            }
-            [self _handleMessage:str];
-            break;
-        }
-        case SROpCodeBinaryFrame:
-            [self _handleMessage:[frameData copy]];
-            break;
-        case SROpCodeConnectionClose:
-            [self handleCloseWithData:frameData];
-            break;
-        case SROpCodePing:
-            [self handlePing:frameData];
-            break;
-        case SROpCodePong:
-            [self handlePong:frameData];
-            break;
-        default:
-            [self _closeWithProtocolError:[NSString stringWithFormat:@"Unknown opcode %ld", (long)opcode]];
-            // TODO: Handle invalid opcode
-            break;
-    }
-}
-
-- (void)_handleFrameHeader:(frame_header)frame_header curData:(NSData *)curData;
-{
-    assert(frame_header.opcode != 0);
-    
-    if (self.readyState != SR_OPEN) {
-        return;
-    }
-    
-    
-    BOOL isControlFrame = (frame_header.opcode == SROpCodePing || frame_header.opcode == SROpCodePong || frame_header.opcode == SROpCodeConnectionClose);
-    
-    if (isControlFrame && !frame_header.fin) {
-        [self _closeWithProtocolError:@"Fragmented control frames not allowed"];
-        return;
-    }
-    
-    if (isControlFrame && frame_header.payload_length >= 126) {
-        [self _closeWithProtocolError:@"Control frames cannot have payloads larger than 126 bytes"];
-        return;
-    }
-    
-    if (!isControlFrame) {
-        _currentFrameOpcode = frame_header.opcode;
-        _currentFrameCount += 1;
-    }
-    
-    if (frame_header.payload_length == 0) {
-        if (isControlFrame) {
-            [self _handleFrameWithData:curData opCode:frame_header.opcode];
-        } else {
-            if (frame_header.fin) {
-                [self _handleFrameWithData:_currentFrameData opCode:frame_header.opcode];
-            } else {
-                // TODO add assert that opcode is not a control;
-                [self _readFrameContinue];
-            }
-        }
-    } else {
-        assert(frame_header.payload_length <= SIZE_T_MAX);
-        [self _addConsumerWithDataLength:(size_t)frame_header.payload_length callback:^(SRWebSocket *self, NSData *newData) {
-            if (isControlFrame) {
-                [self _handleFrameWithData:newData opCode:frame_header.opcode];
-            } else {
-                if (frame_header.fin) {
-                    [self _handleFrameWithData:self->_currentFrameData opCode:frame_header.opcode];
-                } else {
-                    // TODO add assert that opcode is not a control;
-                    [self _readFrameContinue];
-                }
-                
-            }
-        } readToCurrentFrame:!isControlFrame unmaskBytes:frame_header.masked];
-    }
-}
-
-/* From RFC:
-
- 0                   1                   2                   3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- +-+-+-+-+-------+-+-------------+-------------------------------+
- |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
- |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
- |N|V|V|V|       |S|             |   (if payload len==126/127)   |
- | |1|2|3|       |K|             |                               |
- +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
- |     Extended payload length continued, if payload len == 127  |
- + - - - - - - - - - - - - - - - +-------------------------------+
- |                               |Masking-key, if MASK set to 1  |
- +-------------------------------+-------------------------------+
- | Masking-key (continued)       |          Payload Data         |
- +-------------------------------- - - - - - - - - - - - - - - - +
- :                     Payload Data continued ...                :
- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
- |                     Payload Data continued ...                |
- +---------------------------------------------------------------+
- */
-
-static const uint8_t SRFinMask          = 0x80;
-static const uint8_t SROpCodeMask       = 0x0F;
-static const uint8_t SRRsvMask          = 0x70;
-static const uint8_t SRMaskMask         = 0x80;
-static const uint8_t SRPayloadLenMask   = 0x7F;
-
-
-- (void)_readFrameContinue;
-{
-    assert((_currentFrameCount == 0 && _currentFrameOpcode == 0) || (_currentFrameCount > 0 && _currentFrameOpcode > 0));
-
-    [self _addConsumerWithDataLength:2 callback:^(SRWebSocket *self, NSData *data) {
-        __block frame_header header = {0};
-        
-        const uint8_t *headerBuffer = data.bytes;
-        assert(data.length >= 2);
-        
-        if (headerBuffer[0] & SRRsvMask) {
-            [self _closeWithProtocolError:@"Server used RSV bits"];
-            return;
-        }
-        
-        uint8_t receivedOpcode = (SROpCodeMask & headerBuffer[0]);
-        
-        BOOL isControlFrame = (receivedOpcode == SROpCodePing || receivedOpcode == SROpCodePong || receivedOpcode == SROpCodeConnectionClose);
-        
-        if (!isControlFrame && receivedOpcode != 0 && self->_currentFrameCount > 0) {
-            [self _closeWithProtocolError:@"all data frames after the initial data frame must have opcode 0"];
-            return;
-        }
-        
-        if (receivedOpcode == 0 && self->_currentFrameCount == 0) {
-            [self _closeWithProtocolError:@"cannot continue a message"];
-            return;
-        }
-        
-        header.opcode = receivedOpcode == 0 ? self->_currentFrameOpcode : receivedOpcode;
-        
-        header.fin = !!(SRFinMask & headerBuffer[0]);
-        
-        
-        header.masked = !!(SRMaskMask & headerBuffer[1]);
-        header.payload_length = SRPayloadLenMask & headerBuffer[1];
-        
-        headerBuffer = NULL;
-        
-        if (header.masked) {
-            [self _closeWithProtocolError:@"Client must receive unmasked data"];
-        }
-        
-        size_t extra_bytes_needed = header.masked ? sizeof(_currentReadMaskKey) : 0;
-        
-        if (header.payload_length == 126) {
-            extra_bytes_needed += sizeof(uint16_t);
-        } else if (header.payload_length == 127) {
-            extra_bytes_needed += sizeof(uint64_t);
-        }
-        
-        if (extra_bytes_needed == 0) {
-            [self _handleFrameHeader:header curData:self->_currentFrameData];
-        } else {
-            [self _addConsumerWithDataLength:extra_bytes_needed callback:^(SRWebSocket *self, NSData *data) {
-                size_t mapped_size = data.length;
-                #pragma unused (mapped_size)
-                const void *mapped_buffer = data.bytes;
-                size_t offset = 0;
-                
-                if (header.payload_length == 126) {
-                    assert(mapped_size >= sizeof(uint16_t));
-                    uint16_t newLen = EndianU16_BtoN(*(uint16_t *)(mapped_buffer));
-                    header.payload_length = newLen;
-                    offset += sizeof(uint16_t);
-                } else if (header.payload_length == 127) {
-                    assert(mapped_size >= sizeof(uint64_t));
-                    header.payload_length = EndianU64_BtoN(*(uint64_t *)(mapped_buffer));
-                    offset += sizeof(uint64_t);
-                } else {
-                    assert(header.payload_length < 126 && header.payload_length >= 0);
-                }
-                
-                if (header.masked) {
-                    assert(mapped_size >= sizeof(_currentReadMaskOffset) + offset);
-                    memcpy(self->_currentReadMaskKey, ((uint8_t *)mapped_buffer) + offset, sizeof(self->_currentReadMaskKey));
-                }
-                
-                [self _handleFrameHeader:header curData:self->_currentFrameData];
-            } readToCurrentFrame:NO unmaskBytes:NO];
-        }
-    } readToCurrentFrame:NO unmaskBytes:NO];
-}
-
-- (void)_readFrameNew;
-{
-    dispatch_async(_workQueue, ^{
-        [_currentFrameData setLength:0];
-        
-        _currentFrameOpcode = 0;
-        _currentFrameCount = 0;
-        _readOpCount = 0;
-        _currentStringScanPosition = 0;
-        
-        [self _readFrameContinue];
-    });
-}
-
-- (void)_pumpWriting;
-{
-    [self assertOnWorkQueue];
-    
-    NSUInteger dataLength = _outputBuffer.length;
-    if (dataLength - _outputBufferOffset > 0 && _outputStream.hasSpaceAvailable) {
-        NSInteger bytesWritten = [_outputStream write:_outputBuffer.bytes + _outputBufferOffset maxLength:dataLength - _outputBufferOffset];
-        if (bytesWritten == -1) {
-            [self _failWithError:[NSError errorWithDomain:SRWebSocketErrorDomain code:2145 userInfo:[NSDictionary dictionaryWithObject:@"Error writing to stream" forKey:NSLocalizedDescriptionKey]]];
-             return;
-        }
-        
-        _outputBufferOffset += bytesWritten;
-        
-        if (_outputBufferOffset > 4096 && _outputBufferOffset > (_outputBuffer.length >> 1)) {
-            _outputBuffer = [[NSMutableData alloc] initWithBytes:(char *)_outputBuffer.bytes + _outputBufferOffset length:_outputBuffer.length - _outputBufferOffset];
-            _outputBufferOffset = 0;
-        }
-    }
-    
-    if (_closeWhenFinishedWriting && 
-        _outputBuffer.length - _outputBufferOffset == 0 && 
-        (_inputStream.streamStatus != NSStreamStatusNotOpen &&
-         _inputStream.streamStatus != NSStreamStatusClosed) &&
-        !_sentClose) {
-        _sentClose = YES;
-            
-        [_outputStream close];
-        [_inputStream close];
-        
-        
-        for (NSArray *runLoop in [_scheduledRunloops copy]) {
-            [self unscheduleFromRunLoop:[runLoop objectAtIndex:0] forMode:[runLoop objectAtIndex:1]];
-        }
-        
-        if (!_failed) {
-            [self _performDelegateBlock:^{
-                if ([self.delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)]) {
-                    [self.delegate webSocket:self didCloseWithCode:_closeCode reason:_closeReason wasClean:YES];
-                }
-            }];
-        }
-        
-        _selfRetain = nil;
-    }
-}
-
-- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback;
-{
-    [self assertOnWorkQueue];
-    [self _addConsumerWithScanner:consumer callback:callback dataLength:0];
-}
-
-- (void)_addConsumerWithDataLength:(size_t)dataLength callback:(data_callback)callback readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-{   
-    [self assertOnWorkQueue];
-    assert(dataLength);
-    
-    [_consumers addObject:[_consumerPool consumerWithScanner:nil handler:callback bytesNeeded:dataLength readToCurrentFrame:readToCurrentFrame unmaskBytes:unmaskBytes]];
-    [self _pumpScanner];
-}
-
-- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength;
-{    
-    [self assertOnWorkQueue];
-    [_consumers addObject:[_consumerPool consumerWithScanner:consumer handler:callback bytesNeeded:dataLength readToCurrentFrame:NO unmaskBytes:NO]];
-    [self _pumpScanner];
-}
-
-
-static const char CRLFCRLFBytes[] = {'\r', '\n', '\r', '\n'};
-
-- (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler;
-{
-    [self _readUntilBytes:CRLFCRLFBytes length:sizeof(CRLFCRLFBytes) callback:dataHandler];
-}
-
-- (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler;
-{
-    // TODO optimize so this can continue from where we last searched
-    stream_scanner consumer = ^size_t(NSData *data) {
-        __block size_t found_size = 0;
-        __block size_t match_count = 0;
-        
-        size_t size = data.length;
-        const unsigned char *buffer = data.bytes;
-        for (size_t i = 0; i < size; i++ ) {
-            if (((const unsigned char *)buffer)[i] == ((const unsigned char *)bytes)[match_count]) {
-                match_count += 1;
-                if (match_count == length) {
-                    found_size = i + 1;
-                    break;
-                }
-            } else {
-                match_count = 0;
-            }
-        }
-        return found_size;
-    };
-    [self _addConsumerWithScanner:consumer callback:dataHandler];
-}
-
-
-// Returns true if did work
-- (BOOL)_innerPumpScanner {
-    
-    BOOL didWork = NO;
-    
-    if (self.readyState >= SR_CLOSING) {
-        return didWork;
-    }
-    
-    if (!_consumers.count) {
-        return didWork;
-    }
-    
-    size_t curSize = _readBuffer.length - _readBufferOffset;
-    if (!curSize) {
-        return didWork;
-    }
-    
-    SRIOConsumer *consumer = [_consumers objectAtIndex:0];
-    
-    size_t bytesNeeded = consumer.bytesNeeded;
-    
-    size_t foundSize = 0;
-    if (consumer.consumer) {
-        NSData *tempView = [NSData dataWithBytesNoCopy:(char *)_readBuffer.bytes + _readBufferOffset length:_readBuffer.length - _readBufferOffset freeWhenDone:NO];  
-        foundSize = consumer.consumer(tempView);
-    } else {
-        assert(consumer.bytesNeeded);
-        if (curSize >= bytesNeeded) {
-            foundSize = bytesNeeded;
-        } else if (consumer.readToCurrentFrame) {
-            foundSize = curSize;
-        }
-    }
-    
-    NSData *slice = nil;
-    if (consumer.readToCurrentFrame || foundSize) {
-        NSRange sliceRange = NSMakeRange(_readBufferOffset, foundSize);
-        slice = [_readBuffer subdataWithRange:sliceRange];
-        
-        _readBufferOffset += foundSize;
-        
-        if (_readBufferOffset > 4096 && _readBufferOffset > (_readBuffer.length >> 1)) {
-            _readBuffer = [[NSMutableData alloc] initWithBytes:(char *)_readBuffer.bytes + _readBufferOffset length:_readBuffer.length - _readBufferOffset];            _readBufferOffset = 0;
-        }
-        
-        if (consumer.unmaskBytes) {
-            NSMutableData *mutableSlice = [slice mutableCopy];
-            
-            NSUInteger len = mutableSlice.length;
-            uint8_t *bytes = mutableSlice.mutableBytes;
-            
-            for (NSUInteger i = 0; i < len; i++) {
-                bytes[i] = bytes[i] ^ _currentReadMaskKey[_currentReadMaskOffset % sizeof(_currentReadMaskKey)];
-                _currentReadMaskOffset += 1;
-            }
-            
-            slice = mutableSlice;
-        }
-        
-        if (consumer.readToCurrentFrame) {
-            [_currentFrameData appendData:slice];
-            
-            _readOpCount += 1;
-            
-            if (_currentFrameOpcode == SROpCodeTextFrame) {
-                // Validate UTF8 stuff.
-                size_t currentDataSize = _currentFrameData.length;
-                if (_currentFrameOpcode == SROpCodeTextFrame && currentDataSize > 0) {
-                    // TODO: Optimize the crap out of this.  Don't really have to copy all the data each time
-                    
-                    size_t scanSize = currentDataSize - _currentStringScanPosition;
-                    
-                    NSData *scan_data = [_currentFrameData subdataWithRange:NSMakeRange(_currentStringScanPosition, scanSize)];
-                    int32_t valid_utf8_size = validate_dispatch_data_partial_string(scan_data);
-                    
-                    if (valid_utf8_size == -1) {
-                        [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@"Text frames must be valid UTF-8"];
-                        dispatch_async(_workQueue, ^{
-                            [self closeConnection];
-                        });
-                        return didWork;
-                    } else {
-                        _currentStringScanPosition += valid_utf8_size;
-                    }
-                } 
-                
-            }
-            
-            consumer.bytesNeeded -= foundSize;
-            
-            if (consumer.bytesNeeded == 0) {
-                [_consumers removeObjectAtIndex:0];
-                consumer.handler(self, nil);
-                [_consumerPool returnConsumer:consumer];
-                didWork = YES;
-            }
-        } else if (foundSize) {
-            [_consumers removeObjectAtIndex:0];
-            consumer.handler(self, slice);
-            [_consumerPool returnConsumer:consumer];
-            didWork = YES;
-        }
-    }
-    return didWork;
-}
-
--(void)_pumpScanner;
-{
-    [self assertOnWorkQueue];
-    
-    if (!_isPumping) {
-        _isPumping = YES;
-    } else {
-        return;
-    }
-    
-    while ([self _innerPumpScanner]) {
-        
-    }
-    
-    _isPumping = NO;
-}
-
-//#define NOMASK
-
-static const size_t SRFrameHeaderOverhead = 32;
-
-- (void)_sendFrameWithOpcode:(SROpCode)opcode data:(id)data;
-{
-    [self assertOnWorkQueue];
-    
-    if (nil == data) {
-        return;
-    }
-    
-    NSAssert([data isKindOfClass:[NSData class]] || [data isKindOfClass:[NSString class]], @"NSString or NSData");
-    
-    size_t payloadLength = [data isKindOfClass:[NSString class]] ? [(NSString *)data lengthOfBytesUsingEncoding:NSUTF8StringEncoding] : [data length];
-        
-    NSMutableData *frame = [[NSMutableData alloc] initWithLength:payloadLength + SRFrameHeaderOverhead];
-    if (!frame) {
-        [self closeWithCode:SRStatusCodeMessageTooBig reason:@"Message too big"];
-        return;
-    }
-    uint8_t *frame_buffer = (uint8_t *)[frame mutableBytes];
-    
-    // set fin
-    frame_buffer[0] = SRFinMask | opcode;
-    
-    BOOL useMask = YES;
-#ifdef NOMASK
-    useMask = NO;
-#endif
-    
-    if (useMask) {
-    // set the mask and header
-        frame_buffer[1] |= SRMaskMask;
-    }
-    
-    size_t frame_buffer_size = 2;
-    
-    const uint8_t *unmasked_payload = NULL;
-    if ([data isKindOfClass:[NSData class]]) {
-        unmasked_payload = (uint8_t *)[data bytes];
-    } else if ([data isKindOfClass:[NSString class]]) {
-        unmasked_payload =  (const uint8_t *)[data UTF8String];
-    } else {
-        return;
-    }
-    
-    if (payloadLength < 126) {
-        frame_buffer[1] |= payloadLength;
-    } else if (payloadLength <= UINT16_MAX) {
-        frame_buffer[1] |= 126;
-        *((uint16_t *)(frame_buffer + frame_buffer_size)) = EndianU16_BtoN((uint16_t)payloadLength);
-        frame_buffer_size += sizeof(uint16_t);
-    } else {
-        frame_buffer[1] |= 127;
-        *((uint64_t *)(frame_buffer + frame_buffer_size)) = EndianU64_BtoN((uint64_t)payloadLength);
-        frame_buffer_size += sizeof(uint64_t);
-    }
-        
-    if (!useMask) {
-        for (size_t i = 0; i < payloadLength; i++) {
-            frame_buffer[frame_buffer_size] = unmasked_payload[i];
-            frame_buffer_size += 1;
-        }
-    } else {
-        uint8_t *mask_key = frame_buffer + frame_buffer_size;
-        SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key);
-        frame_buffer_size += sizeof(uint32_t);
-        
-        // TODO: could probably optimize this with SIMD
-        for (size_t i = 0; i < payloadLength; i++) {
-            frame_buffer[frame_buffer_size] = unmasked_payload[i] ^ mask_key[i % sizeof(uint32_t)];
-            frame_buffer_size += 1;
-        }
-    }
-
-    assert(frame_buffer_size <= [frame length]);
-    frame.length = frame_buffer_size;
-    
-    [self _writeData:frame];
-}
-
-- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode;
-{
-    if (_secure && !_pinnedCertFound && (eventCode == NSStreamEventHasBytesAvailable || eventCode == NSStreamEventHasSpaceAvailable)) {
-        
-        NSArray *sslCerts = [_urlRequest SR_SSLPinnedCertificates];
-        if (sslCerts) {
-            SecTrustRef secTrust = (__bridge SecTrustRef)[aStream propertyForKey:(__bridge id)kCFStreamPropertySSLPeerTrust];
-            if (secTrust) {
-                NSInteger numCerts = SecTrustGetCertificateCount(secTrust);
-                for (NSInteger i = 0; i < numCerts && !_pinnedCertFound; i++) {
-                    SecCertificateRef cert = SecTrustGetCertificateAtIndex(secTrust, i);
-                    NSData *certData = CFBridgingRelease(SecCertificateCopyData(cert));
-                    
-                    for (id ref in sslCerts) {
-                        SecCertificateRef trustedCert = (__bridge SecCertificateRef)ref;
-                        NSData *trustedCertData = CFBridgingRelease(SecCertificateCopyData(trustedCert));
-                        
-                        if ([trustedCertData isEqualToData:certData]) {
-                            _pinnedCertFound = YES;
-                            break;
-                        }
-                    }
-                }
-            }
-            
-            if (!_pinnedCertFound) {
-                dispatch_async(_workQueue, ^{
-                    [self _failWithError:[NSError errorWithDomain:SRWebSocketErrorDomain code:23556 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Invalid server cert"] forKey:NSLocalizedDescriptionKey]]];
-                });
-                return;
-            }
-        }
-    }
-
-    dispatch_async(_workQueue, ^{
-        switch (eventCode) {
-            case NSStreamEventOpenCompleted: {
-                SRFastLog(@"NSStreamEventOpenCompleted %@", aStream);
-                if (self.readyState >= SR_CLOSING) {
-                    return;
-                }
-                assert(_readBuffer);
-                
-                if (self.readyState == SR_CONNECTING && aStream == _inputStream) {
-                    [self didConnect];
-                }
-                [self _pumpWriting];
-                [self _pumpScanner];
-                break;
-            }
-                
-            case NSStreamEventErrorOccurred: {
-                SRFastLog(@"NSStreamEventErrorOccurred %@ %@", aStream, [[aStream streamError] copy]);
-                /// TODO specify error better!
-                [self _failWithError:aStream.streamError];
-                _readBufferOffset = 0;
-                [_readBuffer setLength:0];
-                break;
-                
-            }
-                
-            case NSStreamEventEndEncountered: {
-                [self _pumpScanner];
-                SRFastLog(@"NSStreamEventEndEncountered %@", aStream);
-                if (aStream.streamError) {
-                    [self _failWithError:aStream.streamError];
-                } else {
-                    dispatch_async(_workQueue, ^{
-                        if (self.readyState != SR_CLOSED) {
-                            self.readyState = SR_CLOSED;
-                            _selfRetain = nil;
-                        }
-
-                        if (!_sentClose && !_failed) {
-                            _sentClose = YES;
-                            // If we get closed in this state it's probably not clean because we should be sending this when we send messages
-                            [self _performDelegateBlock:^{
-                                if ([self.delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)]) {
-                                    [self.delegate webSocket:self didCloseWithCode:SRStatusCodeGoingAway reason:@"Stream end encountered" wasClean:NO];
-                                }
-                            }];
-                        }
-                    });
-                }
-                
-                break;
-            }
-                
-            case NSStreamEventHasBytesAvailable: {
-                SRFastLog(@"NSStreamEventHasBytesAvailable %@", aStream);
-                const int bufferSize = 2048;
-                uint8_t buffer[bufferSize];
-                
-                while (_inputStream.hasBytesAvailable) {
-                    NSInteger bytes_read = [_inputStream read:buffer maxLength:bufferSize];
-                    
-                    if (bytes_read > 0) {
-                        [_readBuffer appendBytes:buffer length:bytes_read];
-                    } else if (bytes_read < 0) {
-                        [self _failWithError:_inputStream.streamError];
-                    }
-                    
-                    if (bytes_read != bufferSize) {
-                        break;
-                    }
-                };
-                [self _pumpScanner];
-                break;
-            }
-                
-            case NSStreamEventHasSpaceAvailable: {
-                SRFastLog(@"NSStreamEventHasSpaceAvailable %@", aStream);
-                [self _pumpWriting];
-                break;
-            }
-                
-            default:
-                SRFastLog(@"(default)  %@", aStream);
-                break;
-        }
-    });
-}
-
-@end
-
-
-@implementation SRIOConsumer
-
-@synthesize bytesNeeded = _bytesNeeded;
-@synthesize consumer = _scanner;
-@synthesize handler = _handler;
-@synthesize readToCurrentFrame = _readToCurrentFrame;
-@synthesize unmaskBytes = _unmaskBytes;
-
-- (void)setupWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-{
-    _scanner = [scanner copy];
-    _handler = [handler copy];
-    _bytesNeeded = bytesNeeded;
-    _readToCurrentFrame = readToCurrentFrame;
-    _unmaskBytes = unmaskBytes;
-    assert(_scanner || _bytesNeeded);
-}
-
-
-@end
-
-
-@implementation SRIOConsumerPool {
-    NSUInteger _poolSize;
-    NSMutableArray *_bufferedConsumers;
-}
-
-- (id)initWithBufferCapacity:(NSUInteger)poolSize;
-{
-    self = [super init];
-    if (self) {
-        _poolSize = poolSize;
-        _bufferedConsumers = [[NSMutableArray alloc] initWithCapacity:poolSize];
-    }
-    return self;
-}
-
-- (id)init
-{
-    return [self initWithBufferCapacity:8];
-}
-
-- (SRIOConsumer *)consumerWithScanner:(stream_scanner)scanner handler:(data_callback)handler bytesNeeded:(size_t)bytesNeeded readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
-{
-    SRIOConsumer *consumer = nil;
-    if (_bufferedConsumers.count) {
-        consumer = [_bufferedConsumers lastObject];
-        [_bufferedConsumers removeLastObject];
-    } else {
-        consumer = [[SRIOConsumer alloc] init];
-    }
-    
-    [consumer setupWithScanner:scanner handler:handler bytesNeeded:bytesNeeded readToCurrentFrame:readToCurrentFrame unmaskBytes:unmaskBytes];
-    
-    return consumer;
-}
-
-- (void)returnConsumer:(SRIOConsumer *)consumer;
-{
-    if (_bufferedConsumers.count < _poolSize) {
-        [_bufferedConsumers addObject:consumer];
-    }
-}
-
-@end
-
-
-@implementation  NSURLRequest (CertificateAdditions)
-
-- (NSArray *)SR_SSLPinnedCertificates;
-{
-    return [NSURLProtocol propertyForKey:@"SR_SSLPinnedCertificates" inRequest:self];
-}
-
-@end
-
-@implementation  NSMutableURLRequest (CertificateAdditions)
-
-- (NSArray *)SR_SSLPinnedCertificates;
-{
-    return [NSURLProtocol propertyForKey:@"SR_SSLPinnedCertificates" inRequest:self];
-}
-
-- (void)setSR_SSLPinnedCertificates:(NSArray *)SR_SSLPinnedCertificates;
-{
-    [NSURLProtocol setProperty:SR_SSLPinnedCertificates forKey:@"SR_SSLPinnedCertificates" inRequest:self];
-}
-
-@end
-
-@implementation NSURL (SRWebSocket)
-
-- (NSString *)SR_origin;
-{
-    NSString *scheme = [self.scheme lowercaseString];
-        
-    if ([scheme isEqualToString:@"wss"]) {
-        scheme = @"https";
-    } else if ([scheme isEqualToString:@"ws"]) {
-        scheme = @"http";
-    }
-    
-    BOOL portIsDefault = !self.port ||
-                         ([scheme isEqualToString:@"http"] && self.port.integerValue == 80) ||
-                         ([scheme isEqualToString:@"https"] && self.port.integerValue == 443);
-    
-    if (!portIsDefault) {
-        return [NSString stringWithFormat:@"%@://%@:%@", scheme, self.host, self.port];
-    } else {
-        return [NSString stringWithFormat:@"%@://%@", scheme, self.host];
-    }
-}
-
-@end
-
-//#define SR_ENABLE_LOG
-
-static inline void SRFastLog(NSString *format, ...)  {
-#ifdef SR_ENABLE_LOG
-    __block va_list arg_list;
-    va_start (arg_list, format);
-    
-    NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:arg_list];
-    
-    va_end(arg_list);
-    
-    NSLog(@"[SR] %@", formattedString);
-#endif
-}
-
-
-#ifdef HAS_ICU
-
-static inline int32_t validate_dispatch_data_partial_string(NSData *data) {
-    if ([data length] > INT32_MAX) {
-        // INT32_MAX is the limit so long as this Framework is using 32 bit ints everywhere.
-        return -1;
-    }
-
-    int32_t size = (int32_t)[data length];
-
-    const void * contents = [data bytes];
-    const uint8_t *str = (const uint8_t *)contents;
-    
-    UChar32 codepoint = 1;
-    int32_t offset = 0;
-    int32_t lastOffset = 0;
-    while(offset < size && codepoint > 0)  {
-        lastOffset = offset;
-        U8_NEXT(str, offset, size, codepoint);
-    }
-    
-    if (codepoint == -1) {
-        // Check to see if the last byte is valid or whether it was just continuing
-        if (!U8_IS_LEAD(str[lastOffset]) || U8_COUNT_TRAIL_BYTES(str[lastOffset]) + lastOffset < (int32_t)size) {
-            
-            size = -1;
-        } else {
-            uint8_t leadByte = str[lastOffset];
-            U8_MASK_LEAD_BYTE(leadByte, U8_COUNT_TRAIL_BYTES(leadByte));
-            
-            for (int i = lastOffset + 1; i < offset; i++) {
-                if (U8_IS_SINGLE(str[i]) || U8_IS_LEAD(str[i]) || !U8_IS_TRAIL(str[i])) {
-                    size = -1;
-                }
-            }
-            
-            if (size != -1) {
-                size = lastOffset;
-            }
-        }
-    }
-    
-    if (size != -1 && ![[NSString alloc] initWithBytesNoCopy:(char *)[data bytes] length:size encoding:NSUTF8StringEncoding freeWhenDone:NO]) {
-        size = -1;
-    }
-    
-    return size;
-}
-
-#else
-
-// This is a hack, and probably not optimal
-static inline int32_t validate_dispatch_data_partial_string(NSData *data) {
-    static const int maxCodepointSize = 3;
-    
-    for (int i = 0; i < maxCodepointSize; i++) {
-        NSString *str = [[NSString alloc] initWithBytesNoCopy:(char *)data.bytes length:data.length - i encoding:NSUTF8StringEncoding freeWhenDone:NO];
-        if (str) {
-            return (int32_t)data.length - i;
-        }
-    }
-    
-    return -1;
-}
-
-#endif
-
-static _SRRunLoopThread *networkThread = nil;
-static NSRunLoop *networkRunLoop = nil;
-
-@implementation NSRunLoop (SRWebSocket)
-
-+ (NSRunLoop *)SR_networkRunLoop {
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        networkThread = [[_SRRunLoopThread alloc] init];
-        networkThread.name = @"com.squareup.SocketRocket.NetworkThread";
-        [networkThread start];
-        networkRunLoop = networkThread.runLoop;
-    });
-    
-    return networkRunLoop;
-}
-
-@end
-
-
-@implementation _SRRunLoopThread {
-    dispatch_group_t _waitGroup;
-}
-
-@synthesize runLoop = _runLoop;
-
-- (void)dealloc
-{
-    sr_dispatch_release(_waitGroup);
-}
-
-- (id)init
-{
-    self = [super init];
-    if (self) {
-        _waitGroup = dispatch_group_create();
-        dispatch_group_enter(_waitGroup);
-    }
-    return self;
-}
-
-- (void)main;
-{
-    @autoreleasepool {
-        _runLoop = [NSRunLoop currentRunLoop];
-        dispatch_group_leave(_waitGroup);
-        
-        // Add an empty run loop source to prevent runloop from spinning.
-        CFRunLoopSourceContext sourceCtx = {
-            .version = 0,
-            .info = NULL,
-            .retain = NULL,
-            .release = NULL,
-            .copyDescription = NULL,
-            .equal = NULL,
-            .hash = NULL,
-            .schedule = NULL,
-            .cancel = NULL,
-            .perform = NULL
-        };
-        CFRunLoopSourceRef source = CFRunLoopSourceCreate(NULL, 0, &sourceCtx);
-        CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode);
-        CFRelease(source);
-        
-        while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {
-            
-        }
-        assert(NO);
-    }
-}
-
-- (NSRunLoop *)runLoop;
-{
-    dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER);
-    return _runLoop;
-}
-
-@end
diff --git a/ios/Pods/Target Support Files/ATSDK-Weex/ATSDK-Weex.xcconfig b/ios/Pods/Target Support Files/ATSDK-Weex/ATSDK-Weex.xcconfig
deleted file mode 100644
index 02e9b6b..0000000
--- a/ios/Pods/Target Support Files/ATSDK-Weex/ATSDK-Weex.xcconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ATSDK-Weex
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/ATSDK-Weex"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/ATSDK-Weex
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
diff --git a/ios/Pods/Target Support Files/BindingX/BindingX-dummy.m b/ios/Pods/Target Support Files/BindingX/BindingX-dummy.m
deleted file mode 100644
index 91151ea..0000000
--- a/ios/Pods/Target Support Files/BindingX/BindingX-dummy.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_BindingX : NSObject
-@end
-@implementation PodsDummy_BindingX
-@end
diff --git a/ios/Pods/Target Support Files/BindingX/BindingX-prefix.pch b/ios/Pods/Target Support Files/BindingX/BindingX-prefix.pch
deleted file mode 100644
index beb2a24..0000000
--- a/ios/Pods/Target Support Files/BindingX/BindingX-prefix.pch
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
diff --git a/ios/Pods/Target Support Files/BindingX/BindingX.xcconfig b/ios/Pods/Target Support Files/BindingX/BindingX.xcconfig
deleted file mode 100644
index 62cc790..0000000
--- a/ios/Pods/Target Support Files/BindingX/BindingX.xcconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/BindingX
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/WeexPluginLoader"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BindingX" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BindingX" "${PODS_ROOT}/Headers/Public/WeexSDK"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/BindingX
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
diff --git a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-acknowledgements.markdown b/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-acknowledgements.markdown
deleted file mode 100644
index 7acafdc..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-acknowledgements.markdown
+++ /dev/null
@@ -1,105 +0,0 @@
-# Acknowledgements
-This application makes use of the following third party libraries:
-
-## ATSDK-Weex
-
-Alibaba-INC copyright
-
-
-## BindingX
-
-Alibaba-INC copyright
-
-
-## SDWebImage
-
-Copyright (c) 2009 Olivier Poitrey <rs@dailymotion.com>
- 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
- 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
- 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-
-## SocketRocket
-
-
-   Copyright 2012 Square 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.
-
-
-
-## WXDevtool
-
-Alibaba-INC copyright
-
-
-## WeexPluginLoader
-
-Alibaba-INC copyright
-
-
-## WeexSDK
-
-Alibaba-INC copyright
-
-
-## libwebp
-
-Copyright (c) 2010, Google Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-  * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-  * Neither the name of Google nor the names of its contributors may
-    be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-Generated by CocoaPods - https://cocoapods.org
diff --git a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-acknowledgements.plist b/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-acknowledgements.plist
deleted file mode 100644
index 23f272b..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-acknowledgements.plist
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>PreferenceSpecifiers</key>
-	<array>
-		<dict>
-			<key>FooterText</key>
-			<string>This application makes use of the following third party libraries:</string>
-			<key>Title</key>
-			<string>Acknowledgements</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>ATSDK-Weex</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>BindingX</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2009 Olivier Poitrey &lt;rs@dailymotion.com&gt;
- 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
- 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
- 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>SDWebImage</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-   Copyright 2012 Square 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.
-
-</string>
-			<key>License</key>
-			<string>Apache License, Version 2.0</string>
-			<key>Title</key>
-			<string>SocketRocket</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>WXDevtool</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>WeexPluginLoader</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>WeexSDK</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2010, Google Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-  * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-  * Neither the name of Google nor the names of its contributors may
-    be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-</string>
-			<key>License</key>
-			<string>BSD</string>
-			<key>Title</key>
-			<string>libwebp</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Generated by CocoaPods - https://cocoapods.org</string>
-			<key>Title</key>
-			<string></string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-	</array>
-	<key>StringsTable</key>
-	<string>Acknowledgements</string>
-	<key>Title</key>
-	<string>Acknowledgements</string>
-</dict>
-</plist>
diff --git a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-dummy.m b/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-dummy.m
deleted file mode 100644
index 852a84d..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-dummy.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_Pods_WeexDemo : NSObject
-@end
-@implementation PodsDummy_Pods_WeexDemo
-@end
diff --git a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh b/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh
deleted file mode 100755
index 52f5209..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/bin/sh
-set -e
-set -u
-set -o pipefail
-
-function on_error {
-  echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
-}
-trap 'on_error $LINENO' ERR
-
-if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then
-  # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
-  # resources to, so exit 0 (signalling the script phase was successful).
-  exit 0
-fi
-
-mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-
-RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
-> "$RESOURCES_TO_COPY"
-
-XCASSET_FILES=()
-
-# This protects against multiple targets copying the same framework dependency at the same time. The solution
-# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
-RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
-
-case "${TARGETED_DEVICE_FAMILY:-}" in
-  1,2)
-    TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
-    ;;
-  1)
-    TARGET_DEVICE_ARGS="--target-device iphone"
-    ;;
-  2)
-    TARGET_DEVICE_ARGS="--target-device ipad"
-    ;;
-  3)
-    TARGET_DEVICE_ARGS="--target-device tv"
-    ;;
-  4)
-    TARGET_DEVICE_ARGS="--target-device watch"
-    ;;
-  *)
-    TARGET_DEVICE_ARGS="--target-device mac"
-    ;;
-esac
-
-install_resource()
-{
-  if [[ "$1" = /* ]] ; then
-    RESOURCE_PATH="$1"
-  else
-    RESOURCE_PATH="${PODS_ROOT}/$1"
-  fi
-  if [[ ! -e "$RESOURCE_PATH" ]] ; then
-    cat << EOM
-error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
-EOM
-    exit 1
-  fi
-  case $RESOURCE_PATH in
-    *.storyboard)
-      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
-      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
-      ;;
-    *.xib)
-      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
-      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
-      ;;
-    *.framework)
-      echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
-      mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
-      echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
-      rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
-      ;;
-    *.xcdatamodel)
-      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
-      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
-      ;;
-    *.xcdatamodeld)
-      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
-      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
-      ;;
-    *.xcmappingmodel)
-      echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
-      xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
-      ;;
-    *.xcassets)
-      ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
-      XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
-      ;;
-    *)
-      echo "$RESOURCE_PATH" || true
-      echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
-      ;;
-  esac
-}
-if [[ "$CONFIGURATION" == "Debug" ]]; then
-  install_resource "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle"
-  install_resource "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj"
-  install_resource "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/native-bundle-main.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-main-jsfm.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-polyfill.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-rax-api.js"
-  install_resource "${PODS_ROOT}/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png"
-fi
-if [[ "$CONFIGURATION" == "Release" ]]; then
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/native-bundle-main.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-main-jsfm.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-polyfill.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-rax-api.js"
-  install_resource "${PODS_ROOT}/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png"
-fi
-
-mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
-  mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-fi
-rm -f "$RESOURCES_TO_COPY"
-
-if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ]
-then
-  # Find all other xcassets (this unfortunately includes those of path pods and other targets).
-  OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
-  while read line; do
-    if [[ $line != "${PODS_ROOT}*" ]]; then
-      XCASSET_FILES+=("$line")
-    fi
-  done <<<"$OTHER_XCASSETS"
-
-  if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then
-    printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-  else
-    printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist"
-  fi
-fi
diff --git a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.debug.xcconfig b/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.debug.xcconfig
deleted file mode 100644
index 461b832..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.debug.xcconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/ATSDK-Weex" "${PODS_ROOT}/WeexPluginLoader" '$(PODS_ROOT)/WeexSDK'
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) SD_WEBP=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BindingX" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SocketRocket" "${PODS_ROOT}/Headers/Public/WXDevtool" "${PODS_ROOT}/Headers/Public/WeexSDK" "${PODS_ROOT}/Headers/Public/libwebp"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BindingX" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/WXDevtool" "${PODS_CONFIGURATION_BUILD_DIR}/WeexSDK" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"BindingX" -l"SDWebImage" -l"SocketRocket" -l"WXDevtool" -l"WeexSDK" -l"c++" -l"icucore" -l"libwebp" -l"stdc++" -l"z" -framework "ATSDK" -framework "AVFoundation" -framework "AVKit" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreData" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreText" -framework "Foundation" -framework "GLKit" -framework "ImageIO" -framework "JavaScriptCore" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "UIKit" -framework "WeexPluginLoader"
-OTHER_LINK_FLAG = $(inherited) -ObjC
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
-PODS_ROOT = ${SRCROOT}/Pods
diff --git a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.release.xcconfig b/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.release.xcconfig
deleted file mode 100644
index b7a6235..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.release.xcconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/WeexPluginLoader" '$(PODS_ROOT)/WeexSDK'
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) SD_WEBP=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BindingX" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SocketRocket" "${PODS_ROOT}/Headers/Public/WXDevtool" "${PODS_ROOT}/Headers/Public/WeexSDK" "${PODS_ROOT}/Headers/Public/libwebp"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BindingX" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/WXDevtool" "${PODS_CONFIGURATION_BUILD_DIR}/WeexSDK" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"BindingX" -l"SDWebImage" -l"SocketRocket" -l"WXDevtool" -l"WeexSDK" -l"c++" -l"icucore" -l"libwebp" -l"stdc++" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "CFNetwork" -framework "CoreData" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreText" -framework "Foundation" -framework "GLKit" -framework "ImageIO" -framework "JavaScriptCore" -framework "MediaPlayer" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "UIKit" -framework "WeexPluginLoader"
-OTHER_LINK_FLAG = $(inherited) -ObjC
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
-PODS_ROOT = ${SRCROOT}/Pods
diff --git a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-acknowledgements.markdown b/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-acknowledgements.markdown
deleted file mode 100644
index 7acafdc..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-acknowledgements.markdown
+++ /dev/null
@@ -1,105 +0,0 @@
-# Acknowledgements
-This application makes use of the following third party libraries:
-
-## ATSDK-Weex
-
-Alibaba-INC copyright
-
-
-## BindingX
-
-Alibaba-INC copyright
-
-
-## SDWebImage
-
-Copyright (c) 2009 Olivier Poitrey <rs@dailymotion.com>
- 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
- 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
- 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
-
-## SocketRocket
-
-
-   Copyright 2012 Square 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.
-
-
-
-## WXDevtool
-
-Alibaba-INC copyright
-
-
-## WeexPluginLoader
-
-Alibaba-INC copyright
-
-
-## WeexSDK
-
-Alibaba-INC copyright
-
-
-## libwebp
-
-Copyright (c) 2010, Google Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-  * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-  * Neither the name of Google nor the names of its contributors may
-    be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-Generated by CocoaPods - https://cocoapods.org
diff --git a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-acknowledgements.plist b/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-acknowledgements.plist
deleted file mode 100644
index 23f272b..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-acknowledgements.plist
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>PreferenceSpecifiers</key>
-	<array>
-		<dict>
-			<key>FooterText</key>
-			<string>This application makes use of the following third party libraries:</string>
-			<key>Title</key>
-			<string>Acknowledgements</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>ATSDK-Weex</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>BindingX</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2009 Olivier Poitrey &lt;rs@dailymotion.com&gt;
- 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
- 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
- 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>SDWebImage</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>
-   Copyright 2012 Square 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.
-
-</string>
-			<key>License</key>
-			<string>Apache License, Version 2.0</string>
-			<key>Title</key>
-			<string>SocketRocket</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>WXDevtool</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>WeexPluginLoader</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Alibaba-INC copyright
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>WeexSDK</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright (c) 2010, Google Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-  * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-  * Neither the name of Google nor the names of its contributors may
-    be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-</string>
-			<key>License</key>
-			<string>BSD</string>
-			<key>Title</key>
-			<string>libwebp</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Generated by CocoaPods - https://cocoapods.org</string>
-			<key>Title</key>
-			<string></string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
-	</array>
-	<key>StringsTable</key>
-	<string>Acknowledgements</string>
-	<key>Title</key>
-	<string>Acknowledgements</string>
-</dict>
-</plist>
diff --git a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-dummy.m b/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-dummy.m
deleted file mode 100644
index a531a46..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-dummy.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_Pods_WeexUITestDemo : NSObject
-@end
-@implementation PodsDummy_Pods_WeexUITestDemo
-@end
diff --git a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-resources.sh b/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-resources.sh
deleted file mode 100755
index 52f5209..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-resources.sh
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/bin/sh
-set -e
-set -u
-set -o pipefail
-
-function on_error {
-  echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
-}
-trap 'on_error $LINENO' ERR
-
-if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then
-  # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
-  # resources to, so exit 0 (signalling the script phase was successful).
-  exit 0
-fi
-
-mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-
-RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
-> "$RESOURCES_TO_COPY"
-
-XCASSET_FILES=()
-
-# This protects against multiple targets copying the same framework dependency at the same time. The solution
-# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
-RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
-
-case "${TARGETED_DEVICE_FAMILY:-}" in
-  1,2)
-    TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
-    ;;
-  1)
-    TARGET_DEVICE_ARGS="--target-device iphone"
-    ;;
-  2)
-    TARGET_DEVICE_ARGS="--target-device ipad"
-    ;;
-  3)
-    TARGET_DEVICE_ARGS="--target-device tv"
-    ;;
-  4)
-    TARGET_DEVICE_ARGS="--target-device watch"
-    ;;
-  *)
-    TARGET_DEVICE_ARGS="--target-device mac"
-    ;;
-esac
-
-install_resource()
-{
-  if [[ "$1" = /* ]] ; then
-    RESOURCE_PATH="$1"
-  else
-    RESOURCE_PATH="${PODS_ROOT}/$1"
-  fi
-  if [[ ! -e "$RESOURCE_PATH" ]] ; then
-    cat << EOM
-error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
-EOM
-    exit 1
-  fi
-  case $RESOURCE_PATH in
-    *.storyboard)
-      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
-      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
-      ;;
-    *.xib)
-      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
-      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
-      ;;
-    *.framework)
-      echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
-      mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
-      echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
-      rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
-      ;;
-    *.xcdatamodel)
-      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
-      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
-      ;;
-    *.xcdatamodeld)
-      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
-      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
-      ;;
-    *.xcmappingmodel)
-      echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
-      xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
-      ;;
-    *.xcassets)
-      ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
-      XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
-      ;;
-    *)
-      echo "$RESOURCE_PATH" || true
-      echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
-      ;;
-  esac
-}
-if [[ "$CONFIGURATION" == "Debug" ]]; then
-  install_resource "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle"
-  install_resource "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj"
-  install_resource "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/native-bundle-main.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-main-jsfm.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-polyfill.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-rax-api.js"
-  install_resource "${PODS_ROOT}/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png"
-fi
-if [[ "$CONFIGURATION" == "Release" ]]; then
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/native-bundle-main.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-main-jsfm.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-polyfill.js"
-  install_resource "${PODS_ROOT}/WeexSDK/pre-build/weex-rax-api.js"
-  install_resource "${PODS_ROOT}/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png"
-fi
-
-mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
-  mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-fi
-rm -f "$RESOURCES_TO_COPY"
-
-if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ]
-then
-  # Find all other xcassets (this unfortunately includes those of path pods and other targets).
-  OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
-  while read line; do
-    if [[ $line != "${PODS_ROOT}*" ]]; then
-      XCASSET_FILES+=("$line")
-    fi
-  done <<<"$OTHER_XCASSETS"
-
-  if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then
-    printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
-  else
-    printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist"
-  fi
-fi
diff --git a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.debug.xcconfig b/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.debug.xcconfig
deleted file mode 100644
index 461b832..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.debug.xcconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/ATSDK-Weex" "${PODS_ROOT}/WeexPluginLoader" '$(PODS_ROOT)/WeexSDK'
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) SD_WEBP=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BindingX" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SocketRocket" "${PODS_ROOT}/Headers/Public/WXDevtool" "${PODS_ROOT}/Headers/Public/WeexSDK" "${PODS_ROOT}/Headers/Public/libwebp"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BindingX" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/WXDevtool" "${PODS_CONFIGURATION_BUILD_DIR}/WeexSDK" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"BindingX" -l"SDWebImage" -l"SocketRocket" -l"WXDevtool" -l"WeexSDK" -l"c++" -l"icucore" -l"libwebp" -l"stdc++" -l"z" -framework "ATSDK" -framework "AVFoundation" -framework "AVKit" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreData" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreText" -framework "Foundation" -framework "GLKit" -framework "ImageIO" -framework "JavaScriptCore" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "UIKit" -framework "WeexPluginLoader"
-OTHER_LINK_FLAG = $(inherited) -ObjC
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
-PODS_ROOT = ${SRCROOT}/Pods
diff --git a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.release.xcconfig b/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.release.xcconfig
deleted file mode 100644
index b7a6235..0000000
--- a/ios/Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.release.xcconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/WeexPluginLoader" '$(PODS_ROOT)/WeexSDK'
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) SD_WEBP=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BindingX" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SocketRocket" "${PODS_ROOT}/Headers/Public/WXDevtool" "${PODS_ROOT}/Headers/Public/WeexSDK" "${PODS_ROOT}/Headers/Public/libwebp"
-LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BindingX" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/WXDevtool" "${PODS_CONFIGURATION_BUILD_DIR}/WeexSDK" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp"
-OTHER_LDFLAGS = $(inherited) -ObjC -l"BindingX" -l"SDWebImage" -l"SocketRocket" -l"WXDevtool" -l"WeexSDK" -l"c++" -l"icucore" -l"libwebp" -l"stdc++" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "CFNetwork" -framework "CoreData" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreText" -framework "Foundation" -framework "GLKit" -framework "ImageIO" -framework "JavaScriptCore" -framework "MediaPlayer" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "UIKit" -framework "WeexPluginLoader"
-OTHER_LINK_FLAG = $(inherited) -ObjC
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
-PODS_ROOT = ${SRCROOT}/Pods
diff --git a/ios/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m b/ios/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m
deleted file mode 100644
index 86d2b5f..0000000
--- a/ios/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_SDWebImage : NSObject
-@end
-@implementation PodsDummy_SDWebImage
-@end
diff --git a/ios/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch b/ios/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch
deleted file mode 100644
index beb2a24..0000000
--- a/ios/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
diff --git a/ios/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/ios/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig
deleted file mode 100644
index cfac7be..0000000
--- a/ios/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) SD_WEBP=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/libwebp"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
diff --git a/ios/Pods/Target Support Files/SocketRocket/SocketRocket-dummy.m b/ios/Pods/Target Support Files/SocketRocket/SocketRocket-dummy.m
deleted file mode 100644
index 1e9d2c9..0000000
--- a/ios/Pods/Target Support Files/SocketRocket/SocketRocket-dummy.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_SocketRocket : NSObject
-@end
-@implementation PodsDummy_SocketRocket
-@end
diff --git a/ios/Pods/Target Support Files/SocketRocket/SocketRocket-prefix.pch b/ios/Pods/Target Support Files/SocketRocket/SocketRocket-prefix.pch
deleted file mode 100644
index beb2a24..0000000
--- a/ios/Pods/Target Support Files/SocketRocket/SocketRocket-prefix.pch
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
diff --git a/ios/Pods/Target Support Files/SocketRocket/SocketRocket.xcconfig b/ios/Pods/Target Support Files/SocketRocket/SocketRocket.xcconfig
deleted file mode 100644
index 3c8102b..0000000
--- a/ios/Pods/Target Support Files/SocketRocket/SocketRocket.xcconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SocketRocket" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SocketRocket"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/SocketRocket
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
diff --git a/ios/Pods/Target Support Files/WXDevtool/WXDevtool-dummy.m b/ios/Pods/Target Support Files/WXDevtool/WXDevtool-dummy.m
deleted file mode 100644
index 2760571..0000000
--- a/ios/Pods/Target Support Files/WXDevtool/WXDevtool-dummy.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_WXDevtool : NSObject
-@end
-@implementation PodsDummy_WXDevtool
-@end
diff --git a/ios/Pods/Target Support Files/WXDevtool/WXDevtool-prefix.pch b/ios/Pods/Target Support Files/WXDevtool/WXDevtool-prefix.pch
deleted file mode 100644
index beb2a24..0000000
--- a/ios/Pods/Target Support Files/WXDevtool/WXDevtool-prefix.pch
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
diff --git a/ios/Pods/Target Support Files/WXDevtool/WXDevtool.xcconfig b/ios/Pods/Target Support Files/WXDevtool/WXDevtool.xcconfig
deleted file mode 100644
index 0f1777f..0000000
--- a/ios/Pods/Target Support Files/WXDevtool/WXDevtool.xcconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WXDevtool
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/WXDevtool" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SocketRocket" "${PODS_ROOT}/Headers/Public/WXDevtool" "${PODS_ROOT}/Headers/Public/WeexSDK"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/WXDevtool
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
diff --git a/ios/Pods/Target Support Files/WeexPluginLoader/WeexPluginLoader.xcconfig b/ios/Pods/Target Support Files/WeexPluginLoader/WeexPluginLoader.xcconfig
deleted file mode 100644
index 1e6a09d..0000000
--- a/ios/Pods/Target Support Files/WeexPluginLoader/WeexPluginLoader.xcconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WeexPluginLoader
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/WeexPluginLoader"
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/WeexSDK"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/WeexPluginLoader
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
diff --git a/ios/Pods/Target Support Files/WeexSDK/WeexSDK-dummy.m b/ios/Pods/Target Support Files/WeexSDK/WeexSDK-dummy.m
deleted file mode 100644
index e0f8121..0000000
--- a/ios/Pods/Target Support Files/WeexSDK/WeexSDK-dummy.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_WeexSDK : NSObject
-@end
-@implementation PodsDummy_WeexSDK
-@end
diff --git a/ios/Pods/Target Support Files/WeexSDK/WeexSDK-prefix.pch b/ios/Pods/Target Support Files/WeexSDK/WeexSDK-prefix.pch
deleted file mode 100644
index 5d3ad69..0000000
--- a/ios/Pods/Target Support Files/WeexSDK/WeexSDK-prefix.pch
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
-//
-//  Prefix header
-//
-//  The contents of this file are implicitly included at the beginning of every source file.
-//
-
-#ifdef __OBJC__
-    #import <Foundation/Foundation.h>
-    #import <UIKit/UIKit.h>
-    #import "WXDefine.h"
-#endif
\ No newline at end of file
diff --git a/ios/Pods/Target Support Files/WeexSDK/WeexSDK.xcconfig b/ios/Pods/Target Support Files/WeexSDK/WeexSDK.xcconfig
deleted file mode 100644
index 7f3c131..0000000
--- a/ios/Pods/Target Support Files/WeexSDK/WeexSDK.xcconfig
+++ /dev/null
@@ -1,11 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WeexSDK
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OS_IOS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/WeexSDK" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/WeexSDK"
-OTHER_LINK_FLAG = $(inherited) -ObjC
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/WeexSDK
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USER_HEADER_SEARCH_PATHS = ${PODS_TARGET_SRCROOT}/weex_core/Source/ ${PROJECT_DIR}/../../../weex_core/Source
diff --git a/ios/Pods/Target Support Files/libwebp/libwebp-dummy.m b/ios/Pods/Target Support Files/libwebp/libwebp-dummy.m
deleted file mode 100644
index f8ce935..0000000
--- a/ios/Pods/Target Support Files/libwebp/libwebp-dummy.m
+++ /dev/null
@@ -1,5 +0,0 @@
-#import <Foundation/Foundation.h>
-@interface PodsDummy_libwebp : NSObject
-@end
-@implementation PodsDummy_libwebp
-@end
diff --git a/ios/Pods/Target Support Files/libwebp/libwebp-prefix.pch b/ios/Pods/Target Support Files/libwebp/libwebp-prefix.pch
deleted file mode 100644
index beb2a24..0000000
--- a/ios/Pods/Target Support Files/libwebp/libwebp-prefix.pch
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifdef __OBJC__
-#import <UIKit/UIKit.h>
-#else
-#ifndef FOUNDATION_EXPORT
-#if defined(__cplusplus)
-#define FOUNDATION_EXPORT extern "C"
-#else
-#define FOUNDATION_EXPORT extern
-#endif
-#endif
-#endif
-
diff --git a/ios/Pods/Target Support Files/libwebp/libwebp.xcconfig b/ios/Pods/Target Support Files/libwebp/libwebp.xcconfig
deleted file mode 100644
index 83c3f7d..0000000
--- a/ios/Pods/Target Support Files/libwebp/libwebp.xcconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/libwebp
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/libwebp" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/libwebp"
-PODS_BUILD_DIR = ${BUILD_DIR}
-PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
-PODS_ROOT = ${SRCROOT}
-PODS_TARGET_SRCROOT = ${PODS_ROOT}/libwebp
-PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
-SKIP_INSTALL = YES
-USER_HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/libwebp/**
diff --git a/ios/Pods/WXDevtool/LICENSE b/ios/Pods/WXDevtool/LICENSE
deleted file mode 100644
index 97f0cd3..0000000
--- a/ios/Pods/WXDevtool/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 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
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2017 The Apache Software Foundation
-
-   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.
\ No newline at end of file
diff --git a/ios/Pods/WXDevtool/README.md b/ios/Pods/WXDevtool/README.md
deleted file mode 100644
index 6bd9f85..0000000
--- a/ios/Pods/WXDevtool/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-[![GitHub release](https://img.shields.io/github/release/weexteam/weex-devtool-iOS.svg)](https://github.com/weexteam/weex-devtool-iOS/releases)  [![GitHub issues](https://img.shields.io/github/issues/weexteam/weex-devtool-iOS.svg)](https://github.com/weexteam/weex-devtool-iOS/issues) [![CocoaPods](https://img.shields.io/cocoapods/v/WXDevtool.svg?maxAge=2592000)]()
-
-# weex-devtool-iOS
-
-Remote debug for your native iOS app using Chrome Developer Tools
-
-
-## Launch
-
-Firstly, install `weex-toolkit` by 
-
-```
-$ npm i weex-toolkit@latest -g
-```
-
-Then run the command:
-
-```
-$ weex debug
-```
-
-You can see the QR code generate by `weex-debugger`, for test, you can use [Weex Playground App](http://weex.apache.org/tools/playground.html) to scan the QR code, you will enter the debug mode. 
-
-> Note: when you use the latest version of the Devtool SDK, make sure you are using the latest version of `weex-debugger`, you can upgrade using the command `weex update weex-debugger@latest`.
-
-
-		
-## Develop
-
-See [Integrate Devtool to iOS](http://weex.apache.org/guide/integrate-devtool-to-ios.html-)
-
-
-
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.h
deleted file mode 100644
index af4620b..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-//  WXApplicationCacheDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXApplicationCacheApplicationCache;
-
-@protocol WXApplicationCacheCommandDelegate;
-
-@interface WXApplicationCacheDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXApplicationCacheCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-// Param frameId: Identifier of the frame containing document whose application cache updated status.
-// Param manifestURL: Manifest URL.
-// Param status: Updated application cache status.
-- (void)applicationCacheStatusUpdatedWithFrameId:(NSString *)frameId manifestURL:(NSString *)manifestURL status:(NSNumber *)status;
-- (void)networkStateUpdatedWithIsNowOnline:(NSNumber *)isNowOnline;
-
-@end
-
-@protocol WXApplicationCacheCommandDelegate <WXCommandDelegate>
-@optional
-
-// Returns array of frame identifiers with manifest urls for each frame containing a document associated with some application cache.
-// Callback Param frameIds: Array of frame identifiers with manifest urls for each frame containing a document associated with some application cache.
-- (void)domain:(WXApplicationCacheDomain *)domain getFramesWithManifestsWithCallback:(void (^)(NSArray *frameIds, id error))callback;
-
-// Enables application cache domain notifications.
-- (void)domain:(WXApplicationCacheDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Returns manifest URL for document in the given frame.
-// Param frameId: Identifier of the frame containing document whose manifest is retrieved.
-// Callback Param manifestURL: Manifest URL for document in the given frame.
-- (void)domain:(WXApplicationCacheDomain *)domain getManifestForFrameWithFrameId:(NSString *)frameId callback:(void (^)(NSString *manifestURL, id error))callback;
-
-// Returns relevant application cache data for the document in given frame.
-// Param frameId: Identifier of the frame containing document whose application cache is retrieved.
-// Callback Param applicationCache: Relevant application cache data for the document in given frame.
-- (void)domain:(WXApplicationCacheDomain *)domain getApplicationCacheForFrameWithFrameId:(NSString *)frameId callback:(void (^)(WXApplicationCacheApplicationCache *applicationCache, id error))callback;
-
-@end
-
-@interface WXDebugger (WXApplicationCacheDomain)
-
-@property (nonatomic, readonly, strong) WXApplicationCacheDomain *applicationCacheDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.m
deleted file mode 100644
index be491ed..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheDomain.m
+++ /dev/null
@@ -1,113 +0,0 @@
-//
-//  WXApplicationCacheDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXApplicationCacheDomain.h"
-#import "WXObject.h"
-#import "WXApplicationCacheTypes.h"
-
-
-@interface WXApplicationCacheDomain ()
-//Commands
-
-@end
-
-@implementation WXApplicationCacheDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"ApplicationCache";
-}
-
-// Events
-- (void)applicationCacheStatusUpdatedWithFrameId:(NSString *)frameId manifestURL:(NSString *)manifestURL status:(NSNumber *)status;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (frameId != nil) {
-        [params setObject:[frameId WX_JSONObject] forKey:@"frameId"];
-    }
-    if (manifestURL != nil) {
-        [params setObject:[manifestURL WX_JSONObject] forKey:@"manifestURL"];
-    }
-    if (status != nil) {
-        [params setObject:[status WX_JSONObject] forKey:@"status"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"ApplicationCache.applicationCacheStatusUpdated" parameters:params];
-}
-- (void)networkStateUpdatedWithIsNowOnline:(NSNumber *)isNowOnline;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (isNowOnline != nil) {
-        [params setObject:[isNowOnline WX_JSONObject] forKey:@"isNowOnline"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"ApplicationCache.networkStateUpdated" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"getFramesWithManifests"] && [self.delegate respondsToSelector:@selector(domain:getFramesWithManifestsWithCallback:)]) {
-        [self.delegate domain:self getFramesWithManifestsWithCallback:^(NSArray *frameIds, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (frameIds != nil) {
-                [params setObject:frameIds forKey:@"frameIds"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getManifestForFrame"] && [self.delegate respondsToSelector:@selector(domain:getManifestForFrameWithFrameId:callback:)]) {
-        [self.delegate domain:self getManifestForFrameWithFrameId:[params objectForKey:@"frameId"] callback:^(NSString *manifestURL, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (manifestURL != nil) {
-                [params setObject:manifestURL forKey:@"manifestURL"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getApplicationCacheForFrame"] && [self.delegate respondsToSelector:@selector(domain:getApplicationCacheForFrameWithFrameId:callback:)]) {
-        [self.delegate domain:self getApplicationCacheForFrameWithFrameId:[params objectForKey:@"frameId"] callback:^(WXApplicationCacheApplicationCache *applicationCache, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (applicationCache != nil) {
-                [params setObject:applicationCache forKey:@"applicationCache"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXApplicationCacheDomain)
-
-- (WXApplicationCacheDomain *)applicationCacheDomain;
-{
-    return [self domainForName:@"ApplicationCache"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.h
deleted file mode 100644
index 9fcf417..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.h
+++ /dev/null
@@ -1,77 +0,0 @@
-//    
-//  WXApplicationCacheTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// Detailed application cache resource information.
-@interface WXApplicationCacheApplicationCacheResource : WXObject
-
-// Resource url.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// Resource size.
-// Type: integer
-@property (nonatomic, strong) NSNumber *size;
-
-// Resource type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-@end
-
-
-// Detailed application cache information.
-@interface WXApplicationCacheApplicationCache : WXObject
-
-// Manifest URL.
-// Type: string
-@property (nonatomic, strong) NSString *manifestURL;
-
-// Application cache size.
-// Type: number
-@property (nonatomic, strong) NSNumber *size;
-
-// Application cache creation time.
-// Type: number
-@property (nonatomic, strong) NSNumber *creationTime;
-
-// Application cache update time.
-// Type: number
-@property (nonatomic, strong) NSNumber *updateTime;
-
-// Application cache resources.
-// Type: array
-@property (nonatomic, strong) NSArray *resources;
-
-@end
-
-
-// Frame identifier - manifest URL pair.
-@interface WXApplicationCacheFrameWithManifest : WXObject
-
-// Frame identifier.
-@property (nonatomic, strong) NSString *frameId;
-
-// Manifest URL.
-// Type: string
-@property (nonatomic, strong) NSString *manifestURL;
-
-// Application cache status.
-// Type: integer
-@property (nonatomic, strong) NSNumber *status;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.m
deleted file mode 100644
index 96be80d..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXApplicationCacheTypes.m
+++ /dev/null
@@ -1,86 +0,0 @@
-//
-//  WXApplicationCacheTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXApplicationCacheTypes.h"
-
-@implementation WXApplicationCacheApplicationCacheResource
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"url",@"url",
-                    @"size",@"size",
-                    @"type",@"type",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic url;
-@dynamic size;
-@dynamic type;
- 
-@end
-
-@implementation WXApplicationCacheApplicationCache
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"manifestURL",@"manifestURL",
-                    @"size",@"size",
-                    @"creationTime",@"creationTime",
-                    @"updateTime",@"updateTime",
-                    @"resources",@"resources",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic manifestURL;
-@dynamic size;
-@dynamic creationTime;
-@dynamic updateTime;
-@dynamic resources;
- 
-@end
-
-@implementation WXApplicationCacheFrameWithManifest
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"frameId",@"frameId",
-                    @"manifestURL",@"manifestURL",
-                    @"status",@"status",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic frameId;
-@dynamic manifestURL;
-@dynamic status;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.h
deleted file mode 100644
index 36fb30d..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.h
+++ /dev/null
@@ -1,136 +0,0 @@
-//
-//  WXCSSDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXCSSCSSRule;
-@class WXCSSCSSStyleId;
-@class WXCSSCSSStyleSheetBody;
-@class WXCSSCSSStyle;
-@class WXCSSSelectorProfile;
-@class WXCSSCSSRuleId;
-@class WXCSSNamedFlow;
-
-@protocol WXCSSCommandDelegate;
-
-// This domain exposes CSS read/write operations. All CSS objects, like stylesheets, rules, and styles, have an associated <code>id</code> used in subsequent operations on the related object. Each object type has a specific <code>id</code> structure, and those are not interchangeable between objects of different kinds. CSS objects can be loaded using the <code>get*ForNode()</code> calls (which accept a DOM node id). Alternatively, a client can discover all the existing stylesheets with the <code>getAllStyleSheets()</code> method and subsequently load the required stylesheet contents using the <code>getStyleSheet[Text]()</code> methods.
-@interface WXCSSDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXCSSCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-
-// Fires whenever a MediaQuery result changes (for example, after a browser window has been resized.) The current implementation considers only viewport-dependent media features.
-- (void)mediaQueryResultChanged;
-
-// Fired whenever a stylesheet is changed as a result of the client operation.
-- (void)styleSheetChangedWithStyleSheetId:(NSString *)styleSheetId;
-
-// Fires when a Named Flow is created.
-// Param documentNodeId: The document node id.
-// Param namedFlow: Identifier of the new Named Flow.
-- (void)namedFlowCreatedWithDocumentNodeId:(NSNumber *)documentNodeId namedFlow:(NSString *)namedFlow;
-
-// Fires when a Named Flow is removed: has no associated content nodes and regions.
-// Param documentNodeId: The document node id.
-// Param namedFlow: Identifier of the removed Named Flow.
-- (void)namedFlowRemovedWithDocumentNodeId:(NSNumber *)documentNodeId namedFlow:(NSString *)namedFlow;
-
-@end
-
-@protocol WXCSSCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables the CSS agent for the given page. Clients should not assume that the CSS agent has been enabled until the result of this command is received.
-- (void)domain:(WXCSSDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables the CSS agent for the given page.
-- (void)domain:(WXCSSDomain *)domain disableWithCallback:(void (^)(id error))callback;
-
-// Returns requested styles for a DOM node identified by <code>nodeId</code>.
-// Param includePseudo: Whether to include pseudo styles (default: true).
-// Param includeInherited: Whether to include inherited styles (default: true).
-// Callback Param matchedCSSRules: CSS rules matching this node, from all applicable stylesheets.
-// Callback Param pseudoElements: Pseudo style rules for this node.
-// Callback Param inherited: A chain of inherited styles (from the immediate node parent up to the DOM tree root).
-- (void)domain:(WXCSSDomain *)domain getMatchedStylesForNodeWithNodeId:(NSNumber *)nodeId includePseudo:(NSNumber *)includePseudo includeInherited:(NSNumber *)includeInherited callback:(void (^)(NSArray *matchedCSSRules, NSArray *pseudoElements, NSArray *inherited, id error))callback;
-
-// Returns the styles defined inline (explicitly in the "style" attribute and implicitly, using DOM attributes) for a DOM node identified by <code>nodeId</code>.
-// Callback Param inlineStyle: Inline style for the specified DOM node.
-// Callback Param attributesStyle: Attribute-defined element style (e.g. resulting from "width=20 height=100%").
-- (void)domain:(WXCSSDomain *)domain getInlineStylesForNodeWithNodeId:(NSNumber *)nodeId callback:(void (^)(WXCSSCSSStyle *inlineStyle, WXCSSCSSStyle *attributesStyle, id error))callback;
-
-// Returns the computed style for a DOM node identified by <code>nodeId</code>.
-// Callback Param computedStyle: Computed style for the specified DOM node.
-- (void)domain:(WXCSSDomain *)domain getComputedStyleForNodeWithNodeId:(NSNumber *)nodeId callback:(void (^)(NSArray *computedStyle, id error))callback;
-
-// Returns metainfo entries for all known stylesheets.
-// Callback Param headers: Descriptor entries for all available stylesheets.
-- (void)domain:(WXCSSDomain *)domain getAllStyleSheetsWithCallback:(void (^)(NSArray *headers, id error))callback;
-
-// Returns stylesheet data for the specified <code>styleSheetId</code>.
-// Callback Param styleSheet: Stylesheet contents for the specified <code>styleSheetId</code>.
-- (void)domain:(WXCSSDomain *)domain getStyleSheetWithStyleSheetId:(NSString *)styleSheetId callback:(void (^)(WXCSSCSSStyleSheetBody *styleSheet, id error))callback;
-
-// Returns the current textual content and the URL for a stylesheet.
-// Callback Param text: The stylesheet text.
-- (void)domain:(WXCSSDomain *)domain getStyleSheetTextWithStyleSheetId:(NSString *)styleSheetId callback:(void (^)(NSString *text, id error))callback;
-
-// Sets the new stylesheet text, thereby invalidating all existing <code>CSSStyleId</code>'s and <code>CSSRuleId</code>'s contained by this stylesheet.
-- (void)domain:(WXCSSDomain *)domain setStyleSheetTextWithStyleSheetId:(NSString *)styleSheetId text:(NSString *)text callback:(void (^)(id error))callback;
-
-// Sets the new <code>text</code> for a property in the respective style, at offset <code>propertyIndex</code>. If <code>overwrite</code> is <code>true</code>, a property at the given offset is overwritten, otherwise inserted. <code>text</code> entirely replaces the property <code>name: value</code>.
-// Callback Param style: The resulting style after the property text modification.
-- (void)domain:(WXCSSDomain *)domain setPropertyTextWithStyleId:(WXCSSCSSStyleId *)styleId propertyIndex:(NSNumber *)propertyIndex text:(NSString *)text overwrite:(NSNumber *)overwrite callback:(void (^)(WXCSSCSSStyle *style, id error))callback;
-
-// Toggles the property in the respective style, at offset <code>propertyIndex</code>. The <code>disable</code> parameter denotes whether the property should be disabled (i.e. removed from the style declaration). If <code>disable == false</code>, the property gets put back into its original place in the style declaration.
-// Callback Param style: The resulting style after the property toggling.
-- (void)domain:(WXCSSDomain *)domain togglePropertyWithStyleId:(WXCSSCSSStyleId *)styleId propertyIndex:(NSNumber *)propertyIndex disable:(NSNumber *)disable callback:(void (^)(WXCSSCSSStyle *style, id error))callback;
-
-// Modifies the rule selector.
-// Callback Param rule: The resulting rule after the selector modification.
-- (void)domain:(WXCSSDomain *)domain setRuleSelectorWithRuleId:(WXCSSCSSRuleId *)ruleId selector:(NSString *)selector callback:(void (^)(WXCSSCSSRule *rule, id error))callback;
-
-// Creates a new empty rule with the given <code>selector</code> in a special "inspector" stylesheet in the owner document of the context node.
-// Callback Param rule: The newly created rule.
-- (void)domain:(WXCSSDomain *)domain addRuleWithContextNodeId:(NSNumber *)contextNodeId selector:(NSString *)selector callback:(void (^)(WXCSSCSSRule *rule, id error))callback;
-
-// Returns all supported CSS property names.
-// Callback Param cssProperties: Supported property metainfo.
-- (void)domain:(WXCSSDomain *)domain getSupportedCSSPropertiesWithCallback:(void (^)(NSArray *cssProperties, id error))callback;
-
-// Ensures that the given node will have specified pseudo-classes whenever its style is computed by the browser.
-// Param nodeId: The element id for which to force the pseudo state.
-// Param forcedPseudoClasses: Element pseudo classes to force when computing the element's style.
-- (void)domain:(WXCSSDomain *)domain forcePseudoStateWithNodeId:(NSNumber *)nodeId forcedPseudoClasses:(NSArray *)forcedPseudoClasses callback:(void (^)(id error))callback;
-- (void)domain:(WXCSSDomain *)domain startSelectorProfilerWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXCSSDomain *)domain stopSelectorProfilerWithCallback:(void (^)(WXCSSSelectorProfile *profile, id error))callback;
-
-// Returns the Named Flows from the document.
-// Param documentNodeId: The document node id for which to get the Named Flow Collection.
-// Callback Param namedFlows: An array containing the Named Flows in the document.
-- (void)domain:(WXCSSDomain *)domain getNamedFlowCollectionWithDocumentNodeId:(NSNumber *)documentNodeId callback:(void (^)(NSArray *namedFlows, id error))callback;
-
-// Returns the Named Flow identified by the given name
-// Param documentNodeId: The document node id.
-// Param name: Named Flow identifier.
-// Callback Param namedFlow: A Named Flow.
-- (void)domain:(WXCSSDomain *)domain getFlowByNameWithDocumentNodeId:(NSNumber *)documentNodeId name:(NSString *)name callback:(void (^)(WXCSSNamedFlow *namedFlow, id error))callback;
-
-@end
-
-@interface WXDebugger (WXCSSDomain)
-
-@property (nonatomic, readonly, strong) WXCSSDomain *CSSDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.m
deleted file mode 100644
index d079768..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSDomain.m
+++ /dev/null
@@ -1,290 +0,0 @@
-//
-//  WXCSSDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXCSSDomain.h"
-#import "WXObject.h"
-#import "WXCSSTypes.h"
-
-
-@interface WXCSSDomain ()
-//Commands
-
-@end
-
-@implementation WXCSSDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"CSS";
-}
-
-// Events
-
-// Fires whenever a MediaQuery result changes (for example, after a browser window has been resized.) The current implementation considers only viewport-dependent media features.
-- (void)mediaQueryResultChanged;
-{
-    [self.debuggingServer sendEventWithName:@"CSS.mediaQueryResultChanged" parameters:nil];
-}
-
-// Fired whenever a stylesheet is changed as a result of the client operation.
-- (void)styleSheetChangedWithStyleSheetId:(NSString *)styleSheetId;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (styleSheetId != nil) {
-        [params setObject:[styleSheetId WX_JSONObject] forKey:@"styleSheetId"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"CSS.styleSheetChanged" parameters:params];
-}
-
-// Fires when a Named Flow is created.
-- (void)namedFlowCreatedWithDocumentNodeId:(NSNumber *)documentNodeId namedFlow:(NSString *)namedFlow;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (documentNodeId != nil) {
-        [params setObject:[documentNodeId WX_JSONObject] forKey:@"documentNodeId"];
-    }
-    if (namedFlow != nil) {
-        [params setObject:[namedFlow WX_JSONObject] forKey:@"namedFlow"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"CSS.namedFlowCreated" parameters:params];
-}
-
-// Fires when a Named Flow is removed: has no associated content nodes and regions.
-- (void)namedFlowRemovedWithDocumentNodeId:(NSNumber *)documentNodeId namedFlow:(NSString *)namedFlow;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (documentNodeId != nil) {
-        [params setObject:[documentNodeId WX_JSONObject] forKey:@"documentNodeId"];
-    }
-    if (namedFlow != nil) {
-        [params setObject:[namedFlow WX_JSONObject] forKey:@"namedFlow"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"CSS.namedFlowRemoved" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getMatchedStylesForNode"] && [self.delegate respondsToSelector:@selector(domain:getMatchedStylesForNodeWithNodeId:includePseudo:includeInherited:callback:)]) {
-        [self.delegate domain:self getMatchedStylesForNodeWithNodeId:[params objectForKey:@"nodeId"] includePseudo:[params objectForKey:@"includePseudo"] includeInherited:[params objectForKey:@"includeInherited"] callback:^(NSArray *matchedCSSRules, NSArray *pseudoElements, NSArray *inherited, id error) {
-            if (!matchedCSSRules) {
-                responseCallback(nil, error);
-                return;
-            }
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-            if (matchedCSSRules != nil) {
-                [params setObject:matchedCSSRules forKey:@"matchedCSSRules"];
-            }
-            if (pseudoElements != nil) {
-                [params setObject:pseudoElements forKey:@"pseudoElements"];
-            }
-            if (inherited != nil) {
-                [params setObject:inherited forKey:@"inherited"];
-            }
-            
-            /*
-            WXCSSCSSStyle *inlineStyle = [[WXCSSCSSStyle alloc] init];
-            inlineStyle.styleSheetId = @"22222.2";
-            inlineStyle.cssProperties = @[];
-            inlineStyle.cssText = @"";
-            inlineStyle.shorthandEntries = @[];
-            WXCSSSourceRange *range = [[WXCSSSourceRange alloc] init];
-            range.startLine = [NSNumber numberWithInt:0];
-            range.endLine = [NSNumber numberWithInt:0];
-            range.startColumn = [NSNumber numberWithInt:0];
-            range.endColumn = [NSNumber numberWithInt:0];
-            inlineStyle.range = range;
-            
-            [params setObject:[inlineStyle WX_JSONObject] forKey:@"inlineStyle"];
-             */
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getInlineStylesForNode"] && [self.delegate respondsToSelector:@selector(domain:getInlineStylesForNodeWithNodeId:callback:)]) {
-        [self.delegate domain:self getInlineStylesForNodeWithNodeId:[params objectForKey:@"nodeId"] callback:^(WXCSSCSSStyle *inlineStyle, WXCSSCSSStyle *attributesStyle, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (inlineStyle != nil) {
-                [params setObject:inlineStyle forKey:@"inlineStyle"];
-            }
-            if (attributesStyle != nil) {
-                [params setObject:attributesStyle forKey:@"attributesStyle"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getComputedStyleForNode"] && [self.delegate respondsToSelector:@selector(domain:getComputedStyleForNodeWithNodeId:callback:)]) {
-        [self.delegate domain:self getComputedStyleForNodeWithNodeId:[params objectForKey:@"nodeId"] callback:^(NSArray *computedStyle, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (computedStyle != nil) {
-                [params setObject:computedStyle forKey:@"computedStyle"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getAllStyleSheets"] && [self.delegate respondsToSelector:@selector(domain:getAllStyleSheetsWithCallback:)]) {
-        [self.delegate domain:self getAllStyleSheetsWithCallback:^(NSArray *headers, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (headers != nil) {
-                [params setObject:headers forKey:@"headers"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getStyleSheet"] && [self.delegate respondsToSelector:@selector(domain:getStyleSheetWithStyleSheetId:callback:)]) {
-        [self.delegate domain:self getStyleSheetWithStyleSheetId:[params objectForKey:@"styleSheetId"] callback:^(WXCSSCSSStyleSheetBody *styleSheet, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (styleSheet != nil) {
-                [params setObject:styleSheet forKey:@"styleSheet"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getStyleSheetText"] && [self.delegate respondsToSelector:@selector(domain:getStyleSheetTextWithStyleSheetId:callback:)]) {
-        [self.delegate domain:self getStyleSheetTextWithStyleSheetId:[params objectForKey:@"styleSheetId"] callback:^(NSString *text, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (text != nil) {
-                [params setObject:text forKey:@"text"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setStyleSheetText"] && [self.delegate respondsToSelector:@selector(domain:setStyleSheetTextWithStyleSheetId:text:callback:)]) {
-        [self.delegate domain:self setStyleSheetTextWithStyleSheetId:[params objectForKey:@"styleSheetId"] text:[params objectForKey:@"text"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setPropertyText"] && [self.delegate respondsToSelector:@selector(domain:setPropertyTextWithStyleId:propertyIndex:text:overwrite:callback:)]) {
-        [self.delegate domain:self setPropertyTextWithStyleId:[params objectForKey:@"styleId"] propertyIndex:[params objectForKey:@"propertyIndex"] text:[params objectForKey:@"text"] overwrite:[params objectForKey:@"overwrite"] callback:^(WXCSSCSSStyle *style, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (style != nil) {
-                [params setObject:style forKey:@"style"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"toggleProperty"] && [self.delegate respondsToSelector:@selector(domain:togglePropertyWithStyleId:propertyIndex:disable:callback:)]) {
-        [self.delegate domain:self togglePropertyWithStyleId:[params objectForKey:@"styleId"] propertyIndex:[params objectForKey:@"propertyIndex"] disable:[params objectForKey:@"disable"] callback:^(WXCSSCSSStyle *style, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (style != nil) {
-                [params setObject:style forKey:@"style"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setRuleSelector"] && [self.delegate respondsToSelector:@selector(domain:setRuleSelectorWithRuleId:selector:callback:)]) {
-        [self.delegate domain:self setRuleSelectorWithRuleId:[params objectForKey:@"ruleId"] selector:[params objectForKey:@"selector"] callback:^(WXCSSCSSRule *rule, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (rule != nil) {
-                [params setObject:rule forKey:@"rule"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"addRule"] && [self.delegate respondsToSelector:@selector(domain:addRuleWithContextNodeId:selector:callback:)]) {
-        [self.delegate domain:self addRuleWithContextNodeId:[params objectForKey:@"contextNodeId"] selector:[params objectForKey:@"selector"] callback:^(WXCSSCSSRule *rule, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (rule != nil) {
-                [params setObject:rule forKey:@"rule"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getSupportedCSSProperties"] && [self.delegate respondsToSelector:@selector(domain:getSupportedCSSPropertiesWithCallback:)]) {
-        [self.delegate domain:self getSupportedCSSPropertiesWithCallback:^(NSArray *cssProperties, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (cssProperties != nil) {
-                [params setObject:cssProperties forKey:@"cssProperties"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"forcePseudoState"] && [self.delegate respondsToSelector:@selector(domain:forcePseudoStateWithNodeId:forcedPseudoClasses:callback:)]) {
-        [self.delegate domain:self forcePseudoStateWithNodeId:[params objectForKey:@"nodeId"] forcedPseudoClasses:[params objectForKey:@"forcedPseudoClasses"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"startSelectorProfiler"] && [self.delegate respondsToSelector:@selector(domain:startSelectorProfilerWithCallback:)]) {
-        [self.delegate domain:self startSelectorProfilerWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"stopSelectorProfiler"] && [self.delegate respondsToSelector:@selector(domain:stopSelectorProfilerWithCallback:)]) {
-        [self.delegate domain:self stopSelectorProfilerWithCallback:^(WXCSSSelectorProfile *profile, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (profile != nil) {
-                [params setObject:profile forKey:@"profile"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getNamedFlowCollection"] && [self.delegate respondsToSelector:@selector(domain:getNamedFlowCollectionWithDocumentNodeId:callback:)]) {
-        [self.delegate domain:self getNamedFlowCollectionWithDocumentNodeId:[params objectForKey:@"documentNodeId"] callback:^(NSArray *namedFlows, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (namedFlows != nil) {
-                [params setObject:namedFlows forKey:@"namedFlows"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getFlowByName"] && [self.delegate respondsToSelector:@selector(domain:getFlowByNameWithDocumentNodeId:name:callback:)]) {
-        [self.delegate domain:self getFlowByNameWithDocumentNodeId:[params objectForKey:@"documentNodeId"] name:[params objectForKey:@"name"] callback:^(WXCSSNamedFlow *namedFlow, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (namedFlow != nil) {
-                [params setObject:namedFlow forKey:@"namedFlow"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXCSSDomain)
-
-- (WXCSSDomain *)CSSDomain;
-{
-    return [self domainForName:@"CSS"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.h
deleted file mode 100644
index eadb2a2..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.h
+++ /dev/null
@@ -1,415 +0,0 @@
-//    
-//  WXCSSTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@class WXCSSSourceRange;
-@class WXCSSCSSStyle;
-@class WXCSSSelectorListData;
-
-
-// This object identifies a CSS style in a unique way.
-@interface WXCSSCSSStyleId : WXObject
-
-// Enclosing stylesheet identifier.
-@property (nonatomic, strong) NSString *styleSheetId;
-
-// The style ordinal within the stylesheet.
-// Type: integer
-@property (nonatomic, strong) NSNumber *ordinal;
-
-@end
-
-
-// This object identifies a CSS rule in a unique way.
-@interface WXCSSCSSRuleId : WXObject
-
-// Enclosing stylesheet identifier.
-@property (nonatomic, strong) NSString *styleSheetId;
-
-// The rule ordinal within the stylesheet.
-// Type: integer
-@property (nonatomic, strong) NSNumber *ordinal;
-
-@end
-
-
-// CSS rule collection for a single pseudo style.
-@interface WXCSSPseudoIdRules : WXObject
-
-// Pseudo style identifier (see <code>enum PseudoId</code> in <code>RenderStyleConstants.h</code>).
-// Type: integer
-@property (nonatomic, strong) NSNumber *pseudoId;
-
-// CSS rules applicable to the pseudo style.
-// Type: array
-@property (nonatomic, strong) NSArray *rules;
-
-@end
-
-
-// CSS rule collection for a single pseudo style.
-@interface WXCSSInheritedStyleEntry : WXObject
-
-// The ancestor node's inline style, if any, in the style inheritance chain.
-@property (nonatomic, strong) WXCSSCSSStyle *inlineStyle;
-
-// CSS rules matching the ancestor node in the style inheritance chain.
-// Type: array
-@property (nonatomic, strong) NSArray *matchedCSSRules;
-
-@end
-
-
-// CSS style information for a DOM style attribute.
-@interface WXCSSCSSStyleAttribute : WXObject
-
-// DOM attribute name (e.g. "width").
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// CSS style generated by the respective DOM attribute.
-@property (nonatomic, strong) WXCSSCSSStyle *style;
-
-@end
-
-
-// CSS stylesheet metainformation.
-@interface WXCSSCSSStyleSheetHeader : WXObject
-
-// The stylesheet identifier.
-@property (nonatomic, strong) NSString *styleSheetId;
-
-// Owner frame identifier.
-@property (nonatomic, strong) NSString *frameId;
-
-// Stylesheet resource URL.
-// Type: string
-@property (nonatomic, strong) NSString *sourceURL;
-
-// Stylesheet origin.
-@property (nonatomic, strong) NSString *origin;
-
-// Stylesheet title.
-// Type: string
-@property (nonatomic, strong) NSString *title;
-
-// Denotes whether the stylesheet is disabled.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *disabled;
-
-@end
-
-
-// CSS stylesheet contents.
-@interface WXCSSCSSStyleSheetBody : WXObject
-
-// The stylesheet identifier.
-@property (nonatomic, strong) NSString *styleSheetId;
-
-// Stylesheet resource URL.
-// Type: array
-@property (nonatomic, strong) NSArray *rules;
-
-// Stylesheet resource contents (if available).
-// Type: string
-@property (nonatomic, strong) NSString *text;
-
-@end
-
-
-// CSS rule representation.
-@interface WXCSSCSSRule : WXObject
-
-// The CSS rule identifier (absent for user agent stylesheet and user-specified stylesheet rules).
-@property (nonatomic, strong) WXCSSCSSRuleId *ruleId;
-
-@property (nonatomic, strong) NSString *styleSheetId;
-
-// Rule selector.
-// Type: string
-@property (nonatomic, strong) NSString *selectorText;
-
-//Rule selector list
-//Type: WXCSSSelectorListData array
-@property (nonatomic, strong)WXCSSSelectorListData *selectorList;
-
-// Parent stylesheet resource URL (for regular rules).
-// Type: string
-@property (nonatomic, strong) NSString *sourceURL;
-
-// Line ordinal of the rule selector start character in the resource.
-// Type: integer
-@property (nonatomic, strong) NSNumber *sourceLine;
-
-// Parent stylesheet's origin.
-@property (nonatomic, strong) NSString *origin;
-
-// Associated style declaration.
-@property (nonatomic, strong) WXCSSCSSStyle *style;
-
-// The rule selector range in the underlying resource (if available).
-@property (nonatomic, strong) WXCSSSourceRange *selectorRange;
-
-// Media list array (for rules involving media queries). The array enumerates media queries starting with the innermost one, going outwards.
-// Type: array
-@property (nonatomic, strong) NSArray *media;
-
-@end
-
-
-// Text range within a resource.
-@interface WXCSSSourceRange : WXObject
-
-// Start of range (inclusive).
-// Type: integer
-//@property (nonatomic, strong) NSNumber *start;
-
-@property (nonatomic, strong) NSNumber *startLine;
-
-@property (nonatomic, strong) NSNumber *endLine;
-
-@property (nonatomic, strong) NSNumber *startColumn;
-
-@property (nonatomic, strong) NSNumber *endColumn;
-
-// End of range (exclusive).
-// Type: integer
-//@property (nonatomic, strong) NSNumber *end;
-
-@end
-
-
-@interface WXCSSShorthandEntry : WXObject
-
-// Shorthand name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Shorthand value.
-// Type: string
-@property (nonatomic, strong) NSString *value;
-
-@end
-
-
-@interface WXCSSCSSPropertyInfo : WXObject
-
-// Property name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Longhand property names.
-// Type: array
-@property (nonatomic, strong) NSArray *longhands;
-
-@end
-
-
-@interface WXCSSCSSComputedStyleProperty : WXObject
-
-// Computed style property name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Computed style property value.
-// Type: string
-@property (nonatomic, strong) NSString *value;
-
-@end
-
-
-// CSS style representation.
-@interface WXCSSCSSStyle : WXObject
-
-// The CSS style identifier (absent for attribute styles).
-@property (nonatomic, strong) WXCSSCSSStyleId *styleId;
-
-//
-@property (nonatomic, strong) NSString *styleSheetId;
-
-// CSS properties in the style.
-// Type: array
-@property (nonatomic, strong) NSArray *cssProperties;
-
-// Computed values for all shorthands found in the style.
-// Type: array
-@property (nonatomic, strong) NSArray *shorthandEntries;
-
-// Style declaration text (if available).
-// Type: string
-@property (nonatomic, strong) NSString *cssText;
-
-// Style declaration range in the enclosing stylesheet (if available).
-@property (nonatomic, strong) WXCSSSourceRange *range;
-
-// The effective "width" property value from this style.
-// Type: string
-@property (nonatomic, strong) NSString *width;
-
-// The effective "height" property value from this style.
-// Type: string
-@property (nonatomic, strong) NSString *height;
-
-@end
-
-
-// CSS style effective visual dimensions and source offsets.
-@interface WXCSSCSSProperty : WXObject
-
-// The property name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// The property value.
-// Type: string
-@property (nonatomic, strong) NSString *value;
-
-// The property priority (implies "" if absent).
-// Type: string
-@property (nonatomic, strong) NSString *priority;
-
-// Whether the property is implicit (implies <code>false</code> if absent).
-// Type: boolean
-@property (nonatomic, strong) NSNumber *implicit;
-
-// The full property text as specified in the style.
-// Type: string
-@property (nonatomic, strong) NSString *text;
-
-// Whether the property is understood by the browser (implies <code>true</code> if absent).
-// Type: boolean
-@property (nonatomic, strong) NSNumber *parsedOk;
-
-// The property status: "active" (implied if absent) if the property is effective in the style, "inactive" if the property is overridden by a same-named property in this style later on, "disabled" if the property is disabled by the user, "style" if the property is reported by the browser rather than by the CSS source parser.
-// Type: string
-@property (nonatomic, strong) NSString *status;
-
-// The entire property range in the enclosing style declaration (if available).
-@property (nonatomic, strong) WXCSSSourceRange *range;
-
-@end
-
-
-// CSS media query descriptor.
-@interface WXCSSCSSMedia : WXObject
-
-// Media query text.
-// Type: string
-@property (nonatomic, strong) NSString *text;
-
-// Source of the media query: "mediaRule" if specified by a @media rule, "importRule" if specified by an @import rule, "linkedSheet" if specified by a "media" attribute in a linked stylesheet's LINK tag, "inlineSheet" if specified by a "media" attribute in an inline stylesheet's STYLE tag.
-// Type: string
-@property (nonatomic, strong) NSString *source;
-
-// URL of the document containing the media query description.
-// Type: string
-@property (nonatomic, strong) NSString *sourceURL;
-
-// Line in the document containing the media query (not defined for the "stylesheet" source).
-// Type: integer
-@property (nonatomic, strong) NSNumber *sourceLine;
-
-@end
-
-
-// CSS selector profile entry.
-@interface WXCSSSelectorProfileEntry : WXObject
-
-// CSS selector of the corresponding rule.
-// Type: string
-@property (nonatomic, strong) NSString *selector;
-
-// URL of the resource containing the corresponding rule.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// Selector line number in the resource for the corresponding rule.
-// Type: integer
-@property (nonatomic, strong) NSNumber *lineNumber;
-
-// Total time this rule handling contributed to the browser running time during profiling (in milliseconds.)
-// Type: number
-@property (nonatomic, strong) NSNumber *time;
-
-// Number of times this rule was considered a candidate for matching against DOM elements.
-// Type: integer
-@property (nonatomic, strong) NSNumber *hitCount;
-
-// Number of times this rule actually matched a DOM element.
-// Type: integer
-@property (nonatomic, strong) NSNumber *matchCount;
-
-@end
-
-
-@interface WXCSSSelectorProfile : WXObject
-
-// Total processing time for all selectors in the profile (in milliseconds.)
-// Type: number
-@property (nonatomic, strong) NSNumber *totalTime;
-
-// CSS selector profile entries.
-// Type: array
-@property (nonatomic, strong) NSArray *data;
-
-@end
-
-
-// This object represents a region that flows from a Named Flow.
-@interface WXCSSRegion : WXObject
-
-// The "overset" attribute of a Named Flow.
-// Type: string
-@property (nonatomic, strong) NSString *regionOverset;
-
-// The corresponding DOM node id.
-@property (nonatomic, strong) NSNumber *nodeId;
-
-@end
-
-
-// This object represents a Named Flow.
-@interface WXCSSNamedFlow : WXObject
-
-// The document node id.
-@property (nonatomic, strong) NSNumber *documentNodeId;
-
-// Named Flow identifier.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// The "overset" attribute of a Named Flow.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *overset;
-
-// An array of nodes that flow into the Named Flow.
-// Type: array
-@property (nonatomic, strong) NSArray *content;
-
-// An array of regions associated with the Named Flow.
-// Type: array
-@property (nonatomic, strong) NSArray *regions;
-
-@end
-
-@interface WXCSSSelectorListData : WXObject
-
-@property (nonatomic, strong)NSArray *selectors;
-
-@property (nonatomic, copy)NSString *text;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.m
deleted file mode 100644
index 5f2cf79..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXCSSTypes.m
+++ /dev/null
@@ -1,507 +0,0 @@
-//
-//  WXCSSTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXCSSTypes.h"
-
-@implementation WXCSSCSSStyleId
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"styleSheetId",@"styleSheetId",
-                    @"ordinal",@"ordinal",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic styleSheetId;
-@dynamic ordinal;
- 
-@end
-
-@implementation WXCSSCSSRuleId
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"styleSheetId",@"styleSheetId",
-                    @"ordinal",@"ordinal",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic styleSheetId;
-@dynamic ordinal;
- 
-@end
-
-@implementation WXCSSPseudoIdRules
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"pseudoId",@"pseudoId",
-                    @"rules",@"rules",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic pseudoId;
-@dynamic rules;
- 
-@end
-
-@implementation WXCSSInheritedStyleEntry
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"inlineStyle",@"inlineStyle",
-                    @"matchedCSSRules",@"matchedCSSRules",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic inlineStyle;
-@dynamic matchedCSSRules;
- 
-@end
-
-@implementation WXCSSCSSStyleAttribute
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"style",@"style",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic style;
- 
-@end
-
-@implementation WXCSSCSSStyleSheetHeader
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"styleSheetId",@"styleSheetId",
-                    @"frameId",@"frameId",
-                    @"sourceURL",@"sourceURL",
-                    @"origin",@"origin",
-                    @"title",@"title",
-                    @"disabled",@"disabled",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic styleSheetId;
-@dynamic frameId;
-@dynamic sourceURL;
-@dynamic origin;
-@dynamic title;
-@dynamic disabled;
- 
-@end
-
-@implementation WXCSSCSSStyleSheetBody
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"styleSheetId",@"styleSheetId",
-                    @"rules",@"rules",
-                    @"text",@"text",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic styleSheetId;
-@dynamic rules;
-@dynamic text;
- 
-@end
-
-@implementation WXCSSCSSRule
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"ruleId",@"ruleId",
-                    @"styleSheetId",@"styleSheetId",
-                    @"selectorText",@"selectorText",
-                    @"selectorList",@"selectorList",
-                    @"sourceURL",@"sourceURL",
-                    @"sourceLine",@"sourceLine",
-                    @"origin",@"origin",
-                    @"style",@"style",
-                    @"selectorRange",@"selectorRange",
-                    @"media",@"media",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic ruleId;
-@dynamic styleSheetId;
-@dynamic selectorText;
-@dynamic selectorList;
-@dynamic sourceURL;
-@dynamic sourceLine;
-@dynamic origin;
-@dynamic style;
-@dynamic selectorRange;
-@dynamic media;
- 
-@end
-
-@implementation WXCSSSourceRange
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"startLine",@"startLine",
-                    @"endLine",@"endLine",
-                    @"startColumn",@"startColumn",
-                    @"endColumn",@"endColumn",
-                    nil];
-    });
-
-    return mappings;
-}
-
-//@dynamic start;
-//@dynamic end;
-
-@dynamic startLine;
-@dynamic endLine;
-@dynamic startColumn;
-@dynamic endColumn;
-
-@end
-
-@implementation WXCSSShorthandEntry
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"value",@"value",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic value;
- 
-@end
-
-@implementation WXCSSCSSPropertyInfo
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"longhands",@"longhands",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic longhands;
- 
-@end
-
-@implementation WXCSSCSSComputedStyleProperty
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"value",@"value",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic value;
- 
-@end
-
-@implementation WXCSSCSSStyle
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"styleId",@"styleId",
-                    @"styleSheetId",@"styleSheetId",
-                    @"cssProperties",@"cssProperties",
-                    @"shorthandEntries",@"shorthandEntries",
-                    @"cssText",@"cssText",
-                    @"range",@"range",
-                    @"width",@"width",
-                    @"height",@"height",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic styleId;
-@dynamic styleSheetId;
-@dynamic cssProperties;
-@dynamic shorthandEntries;
-@dynamic cssText;
-@dynamic range;
-@dynamic width;
-@dynamic height;
- 
-@end
-
-@implementation WXCSSCSSProperty
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"value",@"value",
-                    @"priority",@"priority",
-                    @"implicit",@"implicit",
-                    @"text",@"text",
-                    @"parsedOk",@"parsedOk",
-                    @"status",@"status",
-                    @"range",@"range",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic value;
-@dynamic priority;
-@dynamic implicit;
-@dynamic text;
-@dynamic parsedOk;
-@dynamic status;
-@dynamic range;
- 
-@end
-
-@implementation WXCSSCSSMedia
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"text",@"text",
-                    @"source",@"source",
-                    @"sourceURL",@"sourceURL",
-                    @"sourceLine",@"sourceLine",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic text;
-@dynamic source;
-@dynamic sourceURL;
-@dynamic sourceLine;
- 
-@end
-
-@implementation WXCSSSelectorProfileEntry
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"selector",@"selector",
-                    @"url",@"url",
-                    @"lineNumber",@"lineNumber",
-                    @"time",@"time",
-                    @"hitCount",@"hitCount",
-                    @"matchCount",@"matchCount",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic selector;
-@dynamic url;
-@dynamic lineNumber;
-@dynamic time;
-@dynamic hitCount;
-@dynamic matchCount;
- 
-@end
-
-@implementation WXCSSSelectorProfile
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"totalTime",@"totalTime",
-                    @"data",@"data",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic totalTime;
-@dynamic data;
- 
-@end
-
-@implementation WXCSSRegion
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"regionOverset",@"regionOverset",
-                    @"nodeId",@"nodeId",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic regionOverset;
-@dynamic nodeId;
- 
-@end
-
-@implementation WXCSSNamedFlow
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"documentNodeId",@"documentNodeId",
-                    @"name",@"name",
-                    @"overset",@"overset",
-                    @"content",@"content",
-                    @"regions",@"regions",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic documentNodeId;
-@dynamic name;
-@dynamic overset;
-@dynamic content;
-@dynamic regions;
- 
-@end
-
-@implementation WXCSSSelectorListData
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"selectors",@"selectors",
-                    @"text",@"text",
-                    nil];
-    });
-    
-    return mappings;
-}
-@dynamic selectors;
-@dynamic text;
-
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.h
deleted file mode 100644
index 9f9ba9f..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.h
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-//  WXConsoleDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXConsoleConsoleMessage;
-
-@protocol WXConsoleCommandDelegate;
-
-// Console domain defines methods and events for interaction with the JavaScript console. Console collects messages created by means of the <a href='http://getfirebug.com/wiki/index.php/Console_API'>JavaScript Console API</a>. One needs to enable this domain using <code>enable</code> command in order to start receiving the console messages. Browser collects messages issued while console domain is not enabled as well and reports them using <code>messageAdded</code> notification upon enabling.
-@interface WXConsoleDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXConsoleCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-
-// Issued when new console message is added.
-// Param message: Console message that has been added.
-- (void)messageAddedWithMessage:(WXConsoleConsoleMessage *)message;
-
-// Issued when subsequent message(s) are equal to the previous one(s).
-// Param count: New repeat count value.
-- (void)messageRepeatCountUpdatedWithCount:(NSNumber *)count;
-
-// Issued when console is cleared. This happens either upon <code>clearMessages</code> command or after page navigation.
-- (void)messagesCleared;
-
-@end
-
-@protocol WXConsoleCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables console domain, sends the messages collected so far to the client by means of the <code>messageAdded</code> notification.
-- (void)domain:(WXConsoleDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables console domain, prevents further console messages from being reported to the client.
-- (void)domain:(WXConsoleDomain *)domain disableWithCallback:(void (^)(id error))callback;
-
-// Clears console messages collected in the browser.
-- (void)domain:(WXConsoleDomain *)domain clearMessagesWithCallback:(void (^)(id error))callback;
-
-// Toggles monitoring of XMLHttpRequest. If <code>true</code>, console will receive messages upon each XHR issued.
-// Param enabled: Monitoring enabled state.
-- (void)domain:(WXConsoleDomain *)domain setMonitoringXHREnabledWithEnabled:(NSNumber *)enabled callback:(void (^)(id error))callback;
-
-// Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions).
-// Param nodeId: DOM node id to be accessible by means of $x command line API.
-- (void)domain:(WXConsoleDomain *)domain addInspectedNodeWithNodeId:(NSNumber *)nodeId callback:(void (^)(id error))callback;
-- (void)domain:(WXConsoleDomain *)domain addInspectedHeapObjectWithHeapObjectId:(NSNumber *)heapObjectId callback:(void (^)(id error))callback;
-
-@end
-
-@interface WXDebugger (WXConsoleDomain)
-
-@property (nonatomic, readonly, strong) WXConsoleDomain *consoleDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.m
deleted file mode 100644
index aa4ccdb..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleDomain.m
+++ /dev/null
@@ -1,107 +0,0 @@
-//
-//  WXConsoleDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXConsoleDomain.h"
-#import "WXObject.h"
-#import "WXConsoleTypes.h"
-
-
-@interface WXConsoleDomain ()
-//Commands
-
-@end
-
-@implementation WXConsoleDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Console";
-}
-
-// Events
-
-// Issued when new console message is added.
-- (void)messageAddedWithMessage:(WXConsoleConsoleMessage *)message;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (message != nil) {
-        [params setObject:[message WX_JSONObject] forKey:@"message"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Console.messageAdded" parameters:params];
-}
-
-// Issued when subsequent message(s) are equal to the previous one(s).
-- (void)messageRepeatCountUpdatedWithCount:(NSNumber *)count;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (count != nil) {
-        [params setObject:[count WX_JSONObject] forKey:@"count"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Console.messageRepeatCountUpdated" parameters:params];
-}
-
-// Issued when console is cleared. This happens either upon <code>clearMessages</code> command or after page navigation.
-- (void)messagesCleared;
-{
-    [self.debuggingServer sendEventWithName:@"Console.messagesCleared" parameters:nil];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"clearMessages"] && [self.delegate respondsToSelector:@selector(domain:clearMessagesWithCallback:)]) {
-        [self.delegate domain:self clearMessagesWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setMonitoringXHREnabled"] && [self.delegate respondsToSelector:@selector(domain:setMonitoringXHREnabledWithEnabled:callback:)]) {
-        [self.delegate domain:self setMonitoringXHREnabledWithEnabled:[params objectForKey:@"enabled"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"addInspectedNode"] && [self.delegate respondsToSelector:@selector(domain:addInspectedNodeWithNodeId:callback:)]) {
-        [self.delegate domain:self addInspectedNodeWithNodeId:[params objectForKey:@"nodeId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"addInspectedHeapObject"] && [self.delegate respondsToSelector:@selector(domain:addInspectedHeapObjectWithHeapObjectId:callback:)]) {
-        [self.delegate domain:self addInspectedHeapObjectWithHeapObjectId:[params objectForKey:@"heapObjectId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXConsoleDomain)
-
-- (WXConsoleDomain *)consoleDomain;
-{
-    return [self domainForName:@"Console"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.h
deleted file mode 100644
index 29fdbfd..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.h
+++ /dev/null
@@ -1,82 +0,0 @@
-//    
-//  WXConsoleTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// Console message.
-@interface WXConsoleConsoleMessage : WXObject
-
-// Message source.
-// Type: string
-@property (nonatomic, strong) NSString *source;
-
-// Message severity.
-// Type: string
-@property (nonatomic, strong) NSString *level;
-
-// Message text.
-// Type: string
-@property (nonatomic, strong) NSString *text;
-
-// Console message type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// URL of the message origin.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// Line number in the resource that generated this message.
-// Type: integer
-@property (nonatomic, strong) NSNumber *line;
-
-// Repeat count for repeated messages.
-// Type: integer
-@property (nonatomic, strong) NSNumber *repeatCount;
-
-// Message parameters in case of the formatted message.
-// Type: array
-@property (nonatomic, strong) NSArray *parameters;
-
-// JavaScript stack trace for assertions and error messages.
-@property (nonatomic, strong) NSArray *stackTrace;
-
-// Identifier of the network request associated with this message.
-@property (nonatomic, strong) NSString *networkRequestId;
-
-@end
-
-
-// Stack entry for console errors and assertions.
-@interface WXConsoleCallFrame : WXObject
-
-// JavaScript function name.
-// Type: string
-@property (nonatomic, strong) NSString *functionName;
-
-// JavaScript script name or url.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// JavaScript script line number.
-// Type: integer
-@property (nonatomic, strong) NSNumber *lineNumber;
-
-// JavaScript script column number.
-// Type: integer
-@property (nonatomic, strong) NSNumber *columnNumber;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.m
deleted file mode 100644
index cf1c869..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXConsoleTypes.m
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-//  WXConsoleTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXConsoleTypes.h"
-
-@implementation WXConsoleConsoleMessage
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"source",@"source",
-                    @"level",@"level",
-                    @"text",@"text",
-                    @"type",@"type",
-                    @"url",@"url",
-                    @"line",@"line",
-                    @"repeatCount",@"repeatCount",
-                    @"parameters",@"parameters",
-                    @"stackTrace",@"stackTrace",
-                    @"networkRequestId",@"networkRequestId",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic source;
-@dynamic level;
-@dynamic text;
-@dynamic type;
-@dynamic url;
-@dynamic line;
-@dynamic repeatCount;
-@dynamic parameters;
-@dynamic stackTrace;
-@dynamic networkRequestId;
- 
-@end
-
-@implementation WXConsoleCallFrame
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"functionName",@"functionName",
-                    @"url",@"url",
-                    @"lineNumber",@"lineNumber",
-                    @"columnNumber",@"columnNumber",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic functionName;
-@dynamic url;
-@dynamic lineNumber;
-@dynamic columnNumber;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.h
deleted file mode 100644
index ec16a60..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.h
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-//  WXDOMDebuggerDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@protocol WXDOMDebuggerCommandDelegate;
-
-// DOM debugging allows setting breakpoints on particular DOM operations and events. JavaScript execution will stop on these operations as if there was a regular breakpoint set.
-@interface WXDOMDebuggerDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXDOMDebuggerCommandDelegate, WXCommandDelegate> delegate;
-
-@end
-
-@protocol WXDOMDebuggerCommandDelegate <WXCommandDelegate>
-@optional
-
-// Sets breakpoint on particular operation with DOM.
-// Param nodeId: Identifier of the node to set breakpoint on.
-// Param type: Type of the operation to stop upon.
-- (void)domain:(WXDOMDebuggerDomain *)domain setDOMBreakpointWithNodeId:(NSNumber *)nodeId type:(NSString *)type callback:(void (^)(id error))callback;
-
-// Removes DOM breakpoint that was set using <code>setDOMBreakpoint</code>.
-// Param nodeId: Identifier of the node to remove breakpoint from.
-// Param type: Type of the breakpoint to remove.
-- (void)domain:(WXDOMDebuggerDomain *)domain removeDOMBreakpointWithNodeId:(NSNumber *)nodeId type:(NSString *)type callback:(void (^)(id error))callback;
-
-// Sets breakpoint on particular DOM event.
-// Param eventName: DOM Event name to stop on (any DOM event will do).
-- (void)domain:(WXDOMDebuggerDomain *)domain setEventListenerBreakpointWithEventName:(NSString *)eventName callback:(void (^)(id error))callback;
-
-// Removes breakpoint on particular DOM event.
-// Param eventName: Event name.
-- (void)domain:(WXDOMDebuggerDomain *)domain removeEventListenerBreakpointWithEventName:(NSString *)eventName callback:(void (^)(id error))callback;
-
-// Sets breakpoint on particular native event.
-// Param eventName: Instrumentation name to stop on.
-- (void)domain:(WXDOMDebuggerDomain *)domain setInstrumentationBreakpointWithEventName:(NSString *)eventName callback:(void (^)(id error))callback;
-
-// Sets breakpoint on particular native event.
-// Param eventName: Instrumentation name to stop on.
-- (void)domain:(WXDOMDebuggerDomain *)domain removeInstrumentationBreakpointWithEventName:(NSString *)eventName callback:(void (^)(id error))callback;
-
-// Sets breakpoint on XMLHttpRequest.
-// Param url: Resource URL substring. All XHRs having this substring in the URL will get stopped upon.
-- (void)domain:(WXDOMDebuggerDomain *)domain setXHRBreakpointWithUrl:(NSString *)url callback:(void (^)(id error))callback;
-
-// Removes breakpoint from XMLHttpRequest.
-// Param url: Resource URL substring.
-- (void)domain:(WXDOMDebuggerDomain *)domain removeXHRBreakpointWithUrl:(NSString *)url callback:(void (^)(id error))callback;
-
-@end
-
-@interface WXDebugger (WXDOMDebuggerDomain)
-
-@property (nonatomic, readonly, strong) WXDOMDebuggerDomain *DOMDebuggerDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.m
deleted file mode 100644
index 6af72ea..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDebuggerDomain.m
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-//  WXDOMDebuggerDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDOMDebuggerDomain.h"
-#import "WXObject.h"
-
-
-@interface WXDOMDebuggerDomain ()
-//Commands
-
-@end
-
-@implementation WXDOMDebuggerDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"DOMDebugger";
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"setDOMBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:setDOMBreakpointWithNodeId:type:callback:)]) {
-        [self.delegate domain:self setDOMBreakpointWithNodeId:[params objectForKey:@"nodeId"] type:[params objectForKey:@"type"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeDOMBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:removeDOMBreakpointWithNodeId:type:callback:)]) {
-        [self.delegate domain:self removeDOMBreakpointWithNodeId:[params objectForKey:@"nodeId"] type:[params objectForKey:@"type"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setEventListenerBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:setEventListenerBreakpointWithEventName:callback:)]) {
-        [self.delegate domain:self setEventListenerBreakpointWithEventName:[params objectForKey:@"eventName"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeEventListenerBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:removeEventListenerBreakpointWithEventName:callback:)]) {
-        [self.delegate domain:self removeEventListenerBreakpointWithEventName:[params objectForKey:@"eventName"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setInstrumentationBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:setInstrumentationBreakpointWithEventName:callback:)]) {
-        [self.delegate domain:self setInstrumentationBreakpointWithEventName:[params objectForKey:@"eventName"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeInstrumentationBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:removeInstrumentationBreakpointWithEventName:callback:)]) {
-        [self.delegate domain:self removeInstrumentationBreakpointWithEventName:[params objectForKey:@"eventName"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setXHRBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:setXHRBreakpointWithUrl:callback:)]) {
-        [self.delegate domain:self setXHRBreakpointWithUrl:[params objectForKey:@"url"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeXHRBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:removeXHRBreakpointWithUrl:callback:)]) {
-        [self.delegate domain:self removeXHRBreakpointWithUrl:[params objectForKey:@"url"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXDOMDebuggerDomain)
-
-- (WXDOMDebuggerDomain *)DOMDebuggerDomain;
-{
-    return [self domainForName:@"DOMDebugger"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.h
deleted file mode 100644
index 3f8e326..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.h
+++ /dev/null
@@ -1,255 +0,0 @@
-//
-//  WXDOMDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDOMTypes.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXRuntimeRemoteObject;
-@class WXDOMHighlightConfig;
-@class WXDOMRGBA;
-@class WXDOMNode;
-
-@protocol WXDOMCommandDelegate;
-
-// This domain exposes DOM read/write operations. Each DOM Node is represented with its mirror object that has an <code>id</code>. This <code>id</code> can be used to get additional information on the Node, resolve it into the JavaScript object wrapper, etc. It is important that client receives DOM events only for the nodes that are known to the client. Backend keeps track of the nodes that were sent to the client and never sends the same node twice. It is client's responsibility to collect information about the nodes that were sent to the client.<p>Note that <code>iframe</code> owner elements will return corresponding document elements as their child nodes.</p>
-@interface WXDOMDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXDOMCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-
-// Fired when <code>Document</code> has been totally updated. Node ids are no longer valid.
-- (void)documentUpdated;
-
-// Fired when backend wants to provide client with the missing DOM structure. This happens upon most of the calls requesting node ids.
-// Param parentId: Parent node id to populate with children.
-// Param nodes: Child nodes array.
-- (void)setChildNodesWithParentId:(NSNumber *)parentId nodes:(NSArray *)nodes;
-
-// Fired when <code>Element</code>'s attribute is modified.
-// Param nodeId: Id of the node that has changed.
-// Param name: Attribute name.
-// Param value: Attribute value.
-- (void)attributeModifiedWithNodeId:(NSNumber *)nodeId name:(NSString *)name value:(NSString *)value;
-
-// Fired when <code>Element</code>'s attribute is removed.
-// Param nodeId: Id of the node that has changed.
-// Param name: A ttribute name.
-- (void)attributeRemovedWithNodeId:(NSNumber *)nodeId name:(NSString *)name;
-
-// Fired when <code>Element</code>'s inline style is modified via a CSS property modification.
-// Param nodeIds: Ids of the nodes for which the inline styles have been invalidated.
-- (void)inlineStyleInvalidatedWithNodeIds:(NSArray *)nodeIds;
-
-// Mirrors <code>DOMCharacterDataModified</code> event.
-// Param nodeId: Id of the node that has changed.
-// Param characterData: New text value.
-- (void)characterDataModifiedWithNodeId:(NSNumber *)nodeId characterData:(NSString *)characterData;
-
-// Fired when <code>Container</code>'s child node count has changed.
-// Param nodeId: Id of the node that has changed.
-// Param childNodeCount: New node count.
-- (void)childNodeCountUpdatedWithNodeId:(NSNumber *)nodeId childNodeCount:(NSNumber *)childNodeCount;
-
-// Mirrors <code>DOMNodeInserted</code> event.
-// Param parentNodeId: Id of the node that has changed.
-// Param previousNodeId: If of the previous siblint.
-// Param node: Inserted node data.
-- (void)childNodeInsertedWithParentNodeId:(NSNumber *)parentNodeId previousNodeId:(NSNumber *)previousNodeId node:(WXDOMNode *)node;
-
-// Mirrors <code>DOMNodeRemoved</code> event.
-// Param parentNodeId: Parent id.
-// Param nodeId: Id of the node that has been removed.
-- (void)childNodeRemovedWithParentNodeId:(NSNumber *)parentNodeId nodeId:(NSNumber *)nodeId;
-
-// Called when shadow root is pushed into the element.
-// Param hostId: Host element id.
-// Param root: Shadow root.
-- (void)shadowRootPushedWithHostId:(NSNumber *)hostId root:(WXDOMNode *)root;
-
-// Called when shadow root is popped from the element.
-// Param hostId: Host element id.
-// Param rootId: Shadow root id.
-- (void)shadowRootPoppedWithHostId:(NSNumber *)hostId rootId:(NSNumber *)rootId;
-
-@end
-
-@protocol WXDOMCommandDelegate <WXCommandDelegate>
-@optional
-
-// Returns the root VDOM node to the caller.
-// Callback Param root: Resulting node.
-- (void)domain:(WXDOMDomain *)domain getVirtualDocumentWithCallback:(void (^)(WXDOMNode *root, id error))callback;
-
-// Returns the root DOM node to the caller.
-// Callback Param root: Resulting node.
-- (void)domain:(WXDOMDomain *)domain getDocumentWithCallback:(void (^)(WXDOMNode *root, id error))callback;
-
-// Requests that children of the node with given id are returned to the caller in form of <code>setChildNodes</code> events.
-// Param nodeId: Id of the node to get children for.
-- (void)domain:(WXDOMDomain *)domain requestChildNodesWithNodeId:(NSNumber *)nodeId callback:(void (^)(id error))callback;
-
-// Executes <code>querySelector</code> on a given node.
-// Param nodeId: Id of the node to query upon.
-// Param selector: Selector string.
-// Callback Param nodeId: Query selector result.
-- (void)domain:(WXDOMDomain *)domain querySelectorWithNodeId:(NSNumber *)nodeId selector:(NSString *)selector callback:(void (^)(NSNumber *nodeId, id error))callback;
-
-// Executes <code>querySelectorAll</code> on a given node.
-// Param nodeId: Id of the node to query upon.
-// Param selector: Selector string.
-// Callback Param nodeIds: Query selector result.
-- (void)domain:(WXDOMDomain *)domain querySelectorAllWithNodeId:(NSNumber *)nodeId selector:(NSString *)selector callback:(void (^)(NSArray *nodeIds, id error))callback;
-
-// Sets node name for a node with given id.
-// Param nodeId: Id of the node to set name for.
-// Param name: New node's name.
-// Callback Param nodeId: New node's id.
-- (void)domain:(WXDOMDomain *)domain setNodeNameWithNodeId:(NSNumber *)nodeId name:(NSString *)name callback:(void (^)(NSNumber *nodeId, id error))callback;
-
-// Sets node value for a node with given id.
-// Param nodeId: Id of the node to set value for.
-// Param value: New node's value.
-- (void)domain:(WXDOMDomain *)domain setNodeValueWithNodeId:(NSNumber *)nodeId value:(NSString *)value callback:(void (^)(id error))callback;
-
-// Removes node with given id.
-// Param nodeId: Id of the node to remove.
-- (void)domain:(WXDOMDomain *)domain removeNodeWithNodeId:(NSNumber *)nodeId callback:(void (^)(id error))callback;
-
-// Sets attribute for an element with given id.
-// Param nodeId: Id of the element to set attribute for.
-// Param name: Attribute name.
-// Param value: Attribute value.
-- (void)domain:(WXDOMDomain *)domain setAttributeValueWithNodeId:(NSNumber *)nodeId name:(NSString *)name value:(NSString *)value callback:(void (^)(id error))callback;
-
-// Sets attributes on element with given id. This method is useful when user edits some existing attribute value and types in several attribute name/value pairs.
-// Param nodeId: Id of the element to set attributes for.
-// Param text: Text with a number of attributes. Will parse this text using HTML parser.
-// Param name: Attribute name to replace with new attributes derived from text in case text parsed successfully.
-- (void)domain:(WXDOMDomain *)domain setAttributesAsTextWithNodeId:(NSNumber *)nodeId text:(NSString *)text name:(NSString *)name callback:(void (^)(id error))callback;
-
-// Removes attribute with given name from an element with given id.
-// Param nodeId: Id of the element to remove attribute from.
-// Param name: Name of the attribute to remove.
-- (void)domain:(WXDOMDomain *)domain removeAttributeWithNodeId:(NSNumber *)nodeId name:(NSString *)name callback:(void (^)(id error))callback;
-
-// Returns event listeners relevant to the node.
-// Param nodeId: Id of the node to get listeners for.
-// Callback Param listeners: Array of relevant listeners.
-- (void)domain:(WXDOMDomain *)domain getEventListenersForNodeWithNodeId:(NSNumber *)nodeId callback:(void (^)(NSArray *listeners, id error))callback;
-
-// Returns node's HTML markup.
-// Param nodeId: Id of the node to get markup for.
-// Callback Param outerHTML: Outer HTML markup.
-- (void)domain:(WXDOMDomain *)domain getOuterHTMLWithNodeId:(NSNumber *)nodeId callback:(void (^)(NSString *outerHTML, id error))callback;
-
-// Sets node HTML markup, returns new node id.
-// Param nodeId: Id of the node to set markup for.
-// Param outerHTML: Outer HTML markup to set.
-- (void)domain:(WXDOMDomain *)domain setOuterHTMLWithNodeId:(NSNumber *)nodeId outerHTML:(NSString *)outerHTML callback:(void (^)(id error))callback;
-
-// Searches for a given string in the DOM tree. Use <code>getSearchResults</code> to access search results or <code>cancelSearch</code> to end this search session.
-// Param query: Plain text or query selector or XPath search query.
-// Callback Param searchId: Unique search session identifier.
-// Callback Param resultCount: Number of search results.
-- (void)domain:(WXDOMDomain *)domain performSearchWithQuery:(NSString *)query callback:(void (^)(NSString *searchId, NSNumber *resultCount, id error))callback;
-
-// Returns search results from given <code>fromIndex</code> to given <code>toIndex</code> from the sarch with the given identifier.
-// Param searchId: Unique search session identifier.
-// Param fromIndex: Start index of the search result to be returned.
-// Param toIndex: End index of the search result to be returned.
-// Callback Param nodeIds: Ids of the search result nodes.
-- (void)domain:(WXDOMDomain *)domain getSearchResultsWithSearchId:(NSString *)searchId fromIndex:(NSNumber *)fromIndex toIndex:(NSNumber *)toIndex callback:(void (^)(NSArray *nodeIds, id error))callback;
-
-// Discards search results from the session with the given id. <code>getSearchResults</code> should no longer be called for that search.
-// Param searchId: Unique search session identifier.
-- (void)domain:(WXDOMDomain *)domain discardSearchResultsWithSearchId:(NSString *)searchId callback:(void (^)(id error))callback;
-
-// Requests that the node is sent to the caller given the JavaScript node object reference. All nodes that form the path from the node to the root are also sent to the client as a series of <code>setChildNodes</code> notifications.
-// Param objectId: JavaScript object id to convert into node.
-// Callback Param nodeId: Node id for given object.
-- (void)domain:(WXDOMDomain *)domain requestNodeWithObjectId:(NSString *)objectId callback:(void (^)(NSNumber *nodeId, id error))callback;
-
-// Enters the 'inspect' mode. In this mode, elements that user is hovering over are highlighted. Backend then generates 'inspect' command upon element selection.
-// Param enabled: True to enable inspection mode, false to disable it.
-// Param highlightConfig: A descriptor for the highlight appearance of hovered-over nodes. May be omitted if <code>enabled == false</code>.
-- (void)domain:(WXDOMDomain *)domain setInspectModeEnabledWithEnabled:(NSNumber *)enabled highlightConfig:(WXDOMHighlightConfig *)highlightConfig callback:(void (^)(id error))callback;
-
-// Highlights given rectangle. Coordinates are absolute with respect to the main frame viewport.
-// Param x: X coordinate
-// Param y: Y coordinate
-// Param width: Rectangle width
-// Param height: Rectangle height
-// Param color: The highlight fill color (default: transparent).
-// Param outlineColor: The highlight outline color (default: transparent).
-- (void)domain:(WXDOMDomain *)domain highlightRectWithX:(NSNumber *)x y:(NSNumber *)y width:(NSNumber *)width height:(NSNumber *)height color:(WXDOMRGBA *)color outlineColor:(WXDOMRGBA *)outlineColor callback:(void (^)(id error))callback;
-
-// Highlights DOM node with given id.
-// Param nodeId: Identifier of the node to highlight.
-// Param highlightConfig: A descriptor for the highlight appearance.
-- (void)domain:(WXDOMDomain *)domain highlightNodeWithNodeId:(NSNumber *)nodeId highlightConfig:(WXDOMHighlightConfig *)highlightConfig callback:(void (^)(id error))callback;
-
-// Hides DOM node highlight.
-- (void)domain:(WXDOMDomain *)domain hideHighlightWithCallback:(void (^)(id error))callback;
-
-// Highlights owner element of the frame with given id.
-// Param frameId: Identifier of the frame to highlight.
-// Param contentColor: The content box highlight fill color (default: transparent).
-// Param contentOutlineColor: The content box highlight outline color (default: transparent).
-- (void)domain:(WXDOMDomain *)domain highlightFrameWithFrameId:(NSString *)frameId contentColor:(WXDOMRGBA *)contentColor contentOutlineColor:(WXDOMRGBA *)contentOutlineColor callback:(void (^)(id error))callback;
-
-// Requests that the node is sent to the caller given its path. // FIXME, use XPath
-// Param path: Path to node in the proprietary format.
-// Callback Param nodeId: Id of the node for given path.
-- (void)domain:(WXDOMDomain *)domain pushNodeByPathToFrontendWithPath:(NSString *)path callback:(void (^)(NSNumber *nodeId, id error))callback;
-
-// Resolves JavaScript node object for given node id.
-// Param nodeId: Id of the node to resolve.
-// Param objectGroup: Symbolic group name that can be used to release multiple objects.
-// Callback Param object: JavaScript object wrapper for given node.
-- (void)domain:(WXDOMDomain *)domain resolveNodeWithNodeId:(NSNumber *)nodeId objectGroup:(NSString *)objectGroup callback:(void (^)(WXRuntimeRemoteObject *object, id error))callback;
-
-// Returns attributes for the specified node.
-// Param nodeId: Id of the node to retrieve attibutes for.
-// Callback Param attributes: An interleaved array of node attribute names and values.
-- (void)domain:(WXDOMDomain *)domain getAttributesWithNodeId:(NSNumber *)nodeId callback:(void (^)(NSArray *attributes, id error))callback;
-
-// Moves node into the new container, places it before the given anchor.
-// Param nodeId: Id of the node to drop.
-// Param targetNodeId: Id of the element to drop into.
-// Param insertBeforeNodeId: Drop node before given one.
-// Callback Param nodeId: New id of the moved node.
-- (void)domain:(WXDOMDomain *)domain moveToWithNodeId:(NSNumber *)nodeId targetNodeId:(NSNumber *)targetNodeId insertBeforeNodeId:(NSNumber *)insertBeforeNodeId callback:(void (^)(NSNumber *nodeId, id error))callback;
-
-// Undoes the last performed action.
-- (void)domain:(WXDOMDomain *)domain undoWithCallback:(void (^)(id error))callback;
-
-// Re-does the last undone action.
-- (void)domain:(WXDOMDomain *)domain redoWithCallback:(void (^)(id error))callback;
-
-// Marks last undoable state.
-- (void)domain:(WXDOMDomain *)domain markUndoableStateWithCallback:(void (^)(id error))callback;
-
-//get BoxModel on screencast
-- (void)domain:(WXDOMDomain *)domain getBoxModelNodeId:(NSString *)nodeId callback:(void (^)(WXDOMBoxModel *boxModel, id error))callback;
-
-//get NodeForLocation on screencast
-- (void)domain:(WXDOMDomain *)domain getNodeForLocationX:(NSNumber *)locationX locationY:(NSNumber *)locationY callback:(void (^)(NSNumber *nodeId, id error))callback;
-
-@end
-
-@interface WXDebugger (WXDOMDomain)
-
-@property (nonatomic, readonly, strong) WXDOMDomain *DOMDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.m
deleted file mode 100644
index badcbba..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMDomain.m
+++ /dev/null
@@ -1,426 +0,0 @@
-//
-//  WXDOMDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDOMDomain.h"
-#import "WXObject.h"
-#import "WXDOMTypes.h"
-#import "WXRuntimeTypes.h"
-
-
-@interface WXDOMDomain ()
-//Commands
-
-@end
-
-@implementation WXDOMDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"DOM";
-}
-
-// Events
-
-// Fired when <code>Document</code> has been totally updated. Node ids are no longer valid.
-- (void)documentUpdated;
-{
-    [self.debuggingServer sendEventWithName:@"DOM.documentUpdated" parameters:nil];
-}
-
-// Fired when backend wants to provide client with the missing DOM structure. This happens upon most of the calls requesting node ids.
-- (void)setChildNodesWithParentId:(NSNumber *)parentId nodes:(NSArray *)nodes;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (parentId != nil) {
-        [params setObject:[parentId WX_JSONObject] forKey:@"parentId"];
-    }
-    if (nodes != nil) {
-        [params setObject:[nodes WX_JSONObject] forKey:@"nodes"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.setChildNodes" parameters:params];
-}
-
-// Fired when <code>Element</code>'s attribute is modified.
-- (void)attributeModifiedWithNodeId:(NSNumber *)nodeId name:(NSString *)name value:(NSString *)value;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (nodeId != nil) {
-        [params setObject:[nodeId WX_JSONObject] forKey:@"nodeId"];
-    }
-    if (name != nil) {
-        [params setObject:[name WX_JSONObject] forKey:@"name"];
-    }
-    if (value != nil) {
-        [params setObject:[value WX_JSONObject] forKey:@"value"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.attributeModified" parameters:params];
-}
-
-// Fired when <code>Element</code>'s attribute is removed.
-- (void)attributeRemovedWithNodeId:(NSNumber *)nodeId name:(NSString *)name;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (nodeId != nil) {
-        [params setObject:[nodeId WX_JSONObject] forKey:@"nodeId"];
-    }
-    if (name != nil) {
-        [params setObject:[name WX_JSONObject] forKey:@"name"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.attributeRemoved" parameters:params];
-}
-
-// Fired when <code>Element</code>'s inline style is modified via a CSS property modification.
-- (void)inlineStyleInvalidatedWithNodeIds:(NSArray *)nodeIds;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (nodeIds != nil) {
-        [params setObject:[nodeIds WX_JSONObject] forKey:@"nodeIds"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.inlineStyleInvalidated" parameters:params];
-}
-
-// Mirrors <code>DOMCharacterDataModified</code> event.
-- (void)characterDataModifiedWithNodeId:(NSNumber *)nodeId characterData:(NSString *)characterData;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (nodeId != nil) {
-        [params setObject:[nodeId WX_JSONObject] forKey:@"nodeId"];
-    }
-    if (characterData != nil) {
-        [params setObject:[characterData WX_JSONObject] forKey:@"characterData"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.characterDataModified" parameters:params];
-}
-
-// Fired when <code>Container</code>'s child node count has changed.
-- (void)childNodeCountUpdatedWithNodeId:(NSNumber *)nodeId childNodeCount:(NSNumber *)childNodeCount;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (nodeId != nil) {
-        [params setObject:[nodeId WX_JSONObject] forKey:@"nodeId"];
-    }
-    if (childNodeCount != nil) {
-        [params setObject:[childNodeCount WX_JSONObject] forKey:@"childNodeCount"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.childNodeCountUpdated" parameters:params];
-}
-
-// Mirrors <code>DOMNodeInserted</code> event.
-- (void)childNodeInsertedWithParentNodeId:(NSNumber *)parentNodeId previousNodeId:(NSNumber *)previousNodeId node:(WXDOMNode *)node;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (parentNodeId != nil) {
-        [params setObject:[parentNodeId WX_JSONObject] forKey:@"parentNodeId"];
-    }
-    if (previousNodeId != nil) {
-        [params setObject:[previousNodeId WX_JSONObject] forKey:@"previousNodeId"];
-    }
-    if (node != nil) {
-        [params setObject:[node WX_JSONObject] forKey:@"node"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.childNodeInserted" parameters:params];
-}
-
-// Mirrors <code>DOMNodeRemoved</code> event.
-- (void)childNodeRemovedWithParentNodeId:(NSNumber *)parentNodeId nodeId:(NSNumber *)nodeId;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (parentNodeId != nil) {
-        [params setObject:[parentNodeId WX_JSONObject] forKey:@"parentNodeId"];
-    }
-    if (nodeId != nil) {
-        [params setObject:[nodeId WX_JSONObject] forKey:@"nodeId"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.childNodeRemoved" parameters:params];
-}
-
-// Called when shadow root is pushed into the element.
-- (void)shadowRootPushedWithHostId:(NSNumber *)hostId root:(WXDOMNode *)root;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (hostId != nil) {
-        [params setObject:[hostId WX_JSONObject] forKey:@"hostId"];
-    }
-    if (root != nil) {
-        [params setObject:[root WX_JSONObject] forKey:@"root"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.shadowRootPushed" parameters:params];
-}
-
-// Called when shadow root is popped from the element.
-- (void)shadowRootPoppedWithHostId:(NSNumber *)hostId rootId:(NSNumber *)rootId;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (hostId != nil) {
-        [params setObject:[hostId WX_JSONObject] forKey:@"hostId"];
-    }
-    if (rootId != nil) {
-        [params setObject:[rootId WX_JSONObject] forKey:@"rootId"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOM.shadowRootPopped" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"getDocument"] && [self.delegate respondsToSelector:@selector(domain:getDocumentWithCallback:)]) {
-        [self.delegate domain:self getDocumentWithCallback:^(WXDOMNode *root, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-            
-            if (root != nil) {
-                [params setObject:root forKey:@"root"];
-            }
-            
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestChildNodes"] && [self.delegate respondsToSelector:@selector(domain:requestChildNodesWithNodeId:callback:)]) {
-        [self.delegate domain:self requestChildNodesWithNodeId:[params objectForKey:@"nodeId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"querySelector"] && [self.delegate respondsToSelector:@selector(domain:querySelectorWithNodeId:selector:callback:)]) {
-        [self.delegate domain:self querySelectorWithNodeId:[params objectForKey:@"nodeId"] selector:[params objectForKey:@"selector"] callback:^(NSNumber *nodeId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (nodeId != nil) {
-                [params setObject:nodeId forKey:@"nodeId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"querySelectorAll"] && [self.delegate respondsToSelector:@selector(domain:querySelectorAllWithNodeId:selector:callback:)]) {
-        [self.delegate domain:self querySelectorAllWithNodeId:[params objectForKey:@"nodeId"] selector:[params objectForKey:@"selector"] callback:^(NSArray *nodeIds, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (nodeIds != nil) {
-                [params setObject:nodeIds forKey:@"nodeIds"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setNodeName"] && [self.delegate respondsToSelector:@selector(domain:setNodeNameWithNodeId:name:callback:)]) {
-        [self.delegate domain:self setNodeNameWithNodeId:[params objectForKey:@"nodeId"] name:[params objectForKey:@"name"] callback:^(NSNumber *nodeId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (nodeId != nil) {
-                [params setObject:nodeId forKey:@"nodeId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setNodeValue"] && [self.delegate respondsToSelector:@selector(domain:setNodeValueWithNodeId:value:callback:)]) {
-        [self.delegate domain:self setNodeValueWithNodeId:[params objectForKey:@"nodeId"] value:[params objectForKey:@"value"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeNode"] && [self.delegate respondsToSelector:@selector(domain:removeNodeWithNodeId:callback:)]) {
-        [self.delegate domain:self removeNodeWithNodeId:[params objectForKey:@"nodeId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setAttributeValue"] && [self.delegate respondsToSelector:@selector(domain:setAttributeValueWithNodeId:name:value:callback:)]) {
-        [self.delegate domain:self setAttributeValueWithNodeId:[params objectForKey:@"nodeId"] name:[params objectForKey:@"name"] value:[params objectForKey:@"value"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setAttributesAsText"] && [self.delegate respondsToSelector:@selector(domain:setAttributesAsTextWithNodeId:text:name:callback:)]) {
-        [self.delegate domain:self setAttributesAsTextWithNodeId:[params objectForKey:@"nodeId"] text:[params objectForKey:@"text"] name:[params objectForKey:@"name"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeAttribute"] && [self.delegate respondsToSelector:@selector(domain:removeAttributeWithNodeId:name:callback:)]) {
-        [self.delegate domain:self removeAttributeWithNodeId:[params objectForKey:@"nodeId"] name:[params objectForKey:@"name"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getEventListenersForNode"] && [self.delegate respondsToSelector:@selector(domain:getEventListenersForNodeWithNodeId:callback:)]) {
-        [self.delegate domain:self getEventListenersForNodeWithNodeId:[params objectForKey:@"nodeId"] callback:^(NSArray *listeners, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (listeners != nil) {
-                [params setObject:listeners forKey:@"listeners"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getOuterHTML"] && [self.delegate respondsToSelector:@selector(domain:getOuterHTMLWithNodeId:callback:)]) {
-        [self.delegate domain:self getOuterHTMLWithNodeId:[params objectForKey:@"nodeId"] callback:^(NSString *outerHTML, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (outerHTML != nil) {
-                [params setObject:outerHTML forKey:@"outerHTML"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setOuterHTML"] && [self.delegate respondsToSelector:@selector(domain:setOuterHTMLWithNodeId:outerHTML:callback:)]) {
-        [self.delegate domain:self setOuterHTMLWithNodeId:[params objectForKey:@"nodeId"] outerHTML:[params objectForKey:@"outerHTML"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"performSearch"] && [self.delegate respondsToSelector:@selector(domain:performSearchWithQuery:callback:)]) {
-        [self.delegate domain:self performSearchWithQuery:[params objectForKey:@"query"] callback:^(NSString *searchId, NSNumber *resultCount, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (searchId != nil) {
-                [params setObject:searchId forKey:@"searchId"];
-            }
-            if (resultCount != nil) {
-                [params setObject:resultCount forKey:@"resultCount"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getSearchResults"] && [self.delegate respondsToSelector:@selector(domain:getSearchResultsWithSearchId:fromIndex:toIndex:callback:)]) {
-        [self.delegate domain:self getSearchResultsWithSearchId:[params objectForKey:@"searchId"] fromIndex:[params objectForKey:@"fromIndex"] toIndex:[params objectForKey:@"toIndex"] callback:^(NSArray *nodeIds, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (nodeIds != nil) {
-                [params setObject:nodeIds forKey:@"nodeIds"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"discardSearchResults"] && [self.delegate respondsToSelector:@selector(domain:discardSearchResultsWithSearchId:callback:)]) {
-        [self.delegate domain:self discardSearchResultsWithSearchId:[params objectForKey:@"searchId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestNode"] && [self.delegate respondsToSelector:@selector(domain:requestNodeWithObjectId:callback:)]) {
-        [self.delegate domain:self requestNodeWithObjectId:[params objectForKey:@"objectId"] callback:^(NSNumber *nodeId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (nodeId != nil) {
-                [params setObject:nodeId forKey:@"nodeId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setInspectModeEnabled"] && [self.delegate respondsToSelector:@selector(domain:setInspectModeEnabledWithEnabled:highlightConfig:callback:)]) {
-        [self.delegate domain:self setInspectModeEnabledWithEnabled:[params objectForKey:@"enabled"] highlightConfig:[params objectForKey:@"highlightConfig"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"highlightRect"] && [self.delegate respondsToSelector:@selector(domain:highlightRectWithX:y:width:height:color:outlineColor:callback:)]) {
-        [self.delegate domain:self highlightRectWithX:[params objectForKey:@"x"] y:[params objectForKey:@"y"] width:[params objectForKey:@"width"] height:[params objectForKey:@"height"] color:[params objectForKey:@"color"] outlineColor:[params objectForKey:@"outlineColor"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"highlightNode"] && [self.delegate respondsToSelector:@selector(domain:highlightNodeWithNodeId:highlightConfig:callback:)]) {
-        [self.delegate domain:self highlightNodeWithNodeId:[params objectForKey:@"nodeId"] highlightConfig:[params objectForKey:@"highlightConfig"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"hideHighlight"] && [self.delegate respondsToSelector:@selector(domain:hideHighlightWithCallback:)]) {
-        [self.delegate domain:self hideHighlightWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"highlightFrame"] && [self.delegate respondsToSelector:@selector(domain:highlightFrameWithFrameId:contentColor:contentOutlineColor:callback:)]) {
-        [self.delegate domain:self highlightFrameWithFrameId:[params objectForKey:@"frameId"] contentColor:[params objectForKey:@"contentColor"] contentOutlineColor:[params objectForKey:@"contentOutlineColor"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"pushNodeByPathToFrontend"] && [self.delegate respondsToSelector:@selector(domain:pushNodeByPathToFrontendWithPath:callback:)]) {
-        [self.delegate domain:self pushNodeByPathToFrontendWithPath:[params objectForKey:@"path"] callback:^(NSNumber *nodeId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (nodeId != nil) {
-                [params setObject:nodeId forKey:@"nodeId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"resolveNode"] && [self.delegate respondsToSelector:@selector(domain:resolveNodeWithNodeId:objectGroup:callback:)]) {
-        [self.delegate domain:self resolveNodeWithNodeId:[params objectForKey:@"nodeId"] objectGroup:[params objectForKey:@"objectGroup"] callback:^(WXRuntimeRemoteObject *object, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (object != nil) {
-                [params setObject:object forKey:@"object"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getAttributes"] && [self.delegate respondsToSelector:@selector(domain:getAttributesWithNodeId:callback:)]) {
-        [self.delegate domain:self getAttributesWithNodeId:[params objectForKey:@"nodeId"] callback:^(NSArray *attributes, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (attributes != nil) {
-                [params setObject:attributes forKey:@"attributes"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"moveTo"] && [self.delegate respondsToSelector:@selector(domain:moveToWithNodeId:targetNodeId:insertBeforeNodeId:callback:)]) {
-        [self.delegate domain:self moveToWithNodeId:[params objectForKey:@"nodeId"] targetNodeId:[params objectForKey:@"targetNodeId"] insertBeforeNodeId:[params objectForKey:@"insertBeforeNodeId"] callback:^(NSNumber *nodeId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (nodeId != nil) {
-                [params setObject:nodeId forKey:@"nodeId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"undo"] && [self.delegate respondsToSelector:@selector(domain:undoWithCallback:)]) {
-        [self.delegate domain:self undoWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"redo"] && [self.delegate respondsToSelector:@selector(domain:redoWithCallback:)]) {
-        [self.delegate domain:self redoWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"markUndoableState"] && [self.delegate respondsToSelector:@selector(domain:markUndoableStateWithCallback:)]) {
-        [self.delegate domain:self markUndoableStateWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getBoxModel"] && [self.delegate respondsToSelector:@selector(domain:getBoxModelNodeId:callback:)]) {
-        [self.delegate domain:self getBoxModelNodeId:[params objectForKey:@"nodeId"] callback:^(WXDOMBoxModel *boxModel, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-            [params setObject:[boxModel WX_JSONObjectCopy] forKey:@"model"];
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getNodeForLocation"] && [self.delegate respondsToSelector:@selector(domain:getNodeForLocationX:locationY:callback:)]) {
-        [self.delegate domain:self getNodeForLocationX:[params objectForKey:@"x"] locationY:[params objectForKey:@"y"] callback:^(NSNumber *nodeId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-            
-            if (nodeId != nil) {
-                [params setObject:nodeId forKey:@"nodeId"];
-            }
-            
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXDOMDomain)
-
-- (WXDOMDomain *)DOMDomain;
-{
-    return [self domainForName:@"DOM"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.h
deleted file mode 100644
index 51a3328..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.h
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-//  WXDOMStorageDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXDOMStorageEntry;
-
-@protocol WXDOMStorageCommandDelegate;
-
-@interface WXDOMStorageDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXDOMStorageCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-- (void)addDOMStorageWithStorage:(WXDOMStorageEntry *)storage;
-- (void)domStorageUpdatedWithStorageId:(NSString *)storageId;
-
-@end
-
-@protocol WXDOMStorageCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables storage tracking, storage events will now be delivered to the client.
-- (void)domain:(WXDOMStorageDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables storage tracking, prevents storage events from being sent to the client.
-- (void)domain:(WXDOMStorageDomain *)domain disableWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXDOMStorageDomain *)domain getDOMStorageEntriesWithStorageId:(NSString *)storageId callback:(void (^)(NSArray *entries, id error))callback;
-- (void)domain:(WXDOMStorageDomain *)domain setDOMStorageItemWithStorageId:(NSString *)storageId key:(NSString *)key value:(NSString *)value callback:(void (^)(NSNumber *success, id error))callback;
-- (void)domain:(WXDOMStorageDomain *)domain removeDOMStorageItemWithStorageId:(NSString *)storageId key:(NSString *)key callback:(void (^)(NSNumber *success, id error))callback;
-
-@end
-
-@interface WXDebugger (WXDOMStorageDomain)
-
-@property (nonatomic, readonly, strong) WXDOMStorageDomain *DOMStorageDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.m
deleted file mode 100644
index fc652d4..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageDomain.m
+++ /dev/null
@@ -1,111 +0,0 @@
-//
-//  WXDOMStorageDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDOMStorageDomain.h"
-#import "WXObject.h"
-#import "WXDOMStorageTypes.h"
-
-
-@interface WXDOMStorageDomain ()
-//Commands
-
-@end
-
-@implementation WXDOMStorageDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"DOMStorage";
-}
-
-// Events
-- (void)addDOMStorageWithStorage:(WXDOMStorageEntry *)storage;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (storage != nil) {
-        [params setObject:[storage WX_JSONObject] forKey:@"storage"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOMStorage.addDOMStorage" parameters:params];
-}
-- (void)domStorageUpdatedWithStorageId:(NSString *)storageId;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (storageId != nil) {
-        [params setObject:[storageId WX_JSONObject] forKey:@"storageId"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"DOMStorage.domStorageUpdated" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getDOMStorageEntries"] && [self.delegate respondsToSelector:@selector(domain:getDOMStorageEntriesWithStorageId:callback:)]) {
-        [self.delegate domain:self getDOMStorageEntriesWithStorageId:[params objectForKey:@"storageId"] callback:^(NSArray *entries, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (entries != nil) {
-                [params setObject:entries forKey:@"entries"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setDOMStorageItem"] && [self.delegate respondsToSelector:@selector(domain:setDOMStorageItemWithStorageId:key:value:callback:)]) {
-        [self.delegate domain:self setDOMStorageItemWithStorageId:[params objectForKey:@"storageId"] key:[params objectForKey:@"key"] value:[params objectForKey:@"value"] callback:^(NSNumber *success, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (success != nil) {
-                [params setObject:success forKey:@"success"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeDOMStorageItem"] && [self.delegate respondsToSelector:@selector(domain:removeDOMStorageItemWithStorageId:key:callback:)]) {
-        [self.delegate domain:self removeDOMStorageItemWithStorageId:[params objectForKey:@"storageId"] key:[params objectForKey:@"key"] callback:^(NSNumber *success, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (success != nil) {
-                [params setObject:success forKey:@"success"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXDOMStorageDomain)
-
-- (WXDOMStorageDomain *)DOMStorageDomain;
-{
-    return [self domainForName:@"DOMStorage"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.h
deleted file mode 100644
index 827ac70..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//    
-//  WXDOMStorageTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// DOM Storage entry.
-@interface WXDOMStorageEntry : WXObject
-
-// Document origin.
-// Type: string
-@property (nonatomic, strong) NSString *origin;
-
-// True for local storage.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *isLocalStorage;
-
-// Entry id for further reference.
-@property (nonatomic, strong) NSString *identifier;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.m
deleted file mode 100644
index 5c05fec..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMStorageTypes.m
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-//  WXDOMStorageTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDOMStorageTypes.h"
-
-@implementation WXDOMStorageEntry
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"origin",@"origin",
-                    @"isLocalStorage",@"isLocalStorage",
-                    @"id",@"identifier",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic origin;
-@dynamic isLocalStorage;
-@dynamic identifier;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.h
deleted file mode 100644
index 610ad30..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.h
+++ /dev/null
@@ -1,179 +0,0 @@
-//    
-//  WXDOMTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@class WXDebuggerLocation;
-
-
-// DOM interaction is implemented in terms of mirror objects that represent the actual DOM nodes. DOMNode is a base node mirror type.
-@interface WXDOMNode : WXObject
-
-// Node identifier that is passed into the rest of the DOM messages as the <code>nodeId</code>. Backend will only push node with given <code>id</code> once. It is aware of all requested nodes and will only fire DOM events for nodes known to the client.
-@property (nonatomic, strong) NSNumber *nodeId;
-
-// <code>Node</code>'s nodeType.
-// Type: integer
-@property (nonatomic, strong) NSNumber *nodeType;
-
-// <code>Node</code>'s nodeName.
-// Type: string
-@property (nonatomic, strong) NSString *nodeName;
-
-// <code>Node</code>'s localName.
-// Type: string
-@property (nonatomic, strong) NSString *localName;
-
-// <code>Node</code>'s nodeValue.
-// Type: string
-@property (nonatomic, strong) NSString *nodeValue;
-
-// Child count for <code>Container</code> nodes.
-// Type: integer
-@property (nonatomic, strong) NSNumber *childNodeCount;
-
-// Child nodes of this node when requested with children.
-// Type: array
-@property (nonatomic, strong) NSArray *children;
-
-// Attributes of the <code>Element</code> node in the form of flat array <code>[name1, value1, name2, value2]</code>.
-// Type: array
-@property (nonatomic, strong) NSArray *attributes;
-
-// Document URL that <code>Document</code> or <code>FrameOwner</code> node points to.
-// Type: string
-@property (nonatomic, strong) NSString *documentURL;
-
-// <code>DocumentType</code>'s publicId.
-// Type: string
-@property (nonatomic, strong) NSString *publicId;
-
-// <code>DocumentType</code>'s systemId.
-// Type: string
-@property (nonatomic, strong) NSString *systemId;
-
-// <code>DocumentType</code>'s internalSubset.
-// Type: string
-@property (nonatomic, strong) NSString *internalSubset;
-
-// <code>Document</code>'s XML version in case of XML documents.
-// Type: string
-@property (nonatomic, strong) NSString *xmlVersion;
-
-// <code>Attr</code>'s name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// <code>Attr</code>'s value.
-// Type: string
-@property (nonatomic, strong) NSString *value;
-
-// Content document for frame owner elements.
-@property (nonatomic, strong) WXDOMNode *contentDocument;
-
-// Shadow root list for given element host.
-// Type: array
-@property (nonatomic, strong) NSArray *shadowRoots;
-
-@end
-
-
-// DOM interaction is implemented in terms of mirror objects that represent the actual DOM nodes. DOMNode is a base node mirror type.
-@interface WXDOMEventListener : WXObject
-
-// <code>EventListener</code>'s type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// <code>EventListener</code>'s useCapture.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *useCapture;
-
-// <code>EventListener</code>'s isAttribute.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *isAttribute;
-
-// Target <code>DOMNode</code> id.
-@property (nonatomic, strong) NSNumber *nodeId;
-
-// Event handler function body.
-// Type: string
-@property (nonatomic, strong) NSString *handlerBody;
-
-// Handler code location.
-@property (nonatomic, strong) WXDebuggerLocation *location;
-
-@end
-
-
-// A structure holding an RGBA color.
-@interface WXDOMRGBA : WXObject
-
-// The red component, in the [0-255] range.
-// Type: integer
-@property (nonatomic, strong) NSNumber *r;
-
-// The green component, in the [0-255] range.
-// Type: integer
-@property (nonatomic, strong) NSNumber *g;
-
-// The blue component, in the [0-255] range.
-// Type: integer
-@property (nonatomic, strong) NSNumber *b;
-
-// The alpha component, in the [0-1] range (default: 1).
-// Type: number
-@property (nonatomic, strong) NSNumber *a;
-
-@end
-
-
-// Configuration data for the highlighting of page elements.
-@interface WXDOMHighlightConfig : WXObject
-
-// Whether the node info tooltip should be shown (default: false).
-// Type: boolean
-@property (nonatomic, strong) NSNumber *showInfo;
-
-// The content box highlight fill color (default: transparent).
-@property (nonatomic, strong) WXDOMRGBA *contentColor;
-
-// The padding highlight fill color (default: transparent).
-@property (nonatomic, strong) WXDOMRGBA *paddingColor;
-
-// The border highlight fill color (default: transparent).
-@property (nonatomic, strong) WXDOMRGBA *borderColor;
-
-// The margin highlight fill color (default: transparent).
-@property (nonatomic, strong) WXDOMRGBA *marginColor;
-
-@end
-
-@interface WXDOMBoxModel : WXObject
-
-@property (nonatomic, strong) NSArray *content;
-
-@property (nonatomic, strong) NSArray *padding;
-
-@property (nonatomic, strong) NSArray *border;
-
-@property (nonatomic, strong) NSArray *margin;
-
-@property (nonatomic, strong) NSNumber *width;
-
-@property (nonatomic, strong) NSNumber *height;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.m
deleted file mode 100644
index e856ec2..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDOMTypes.m
+++ /dev/null
@@ -1,173 +0,0 @@
-//
-//  WXDOMTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDOMTypes.h"
-
-@implementation WXDOMNode
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"nodeId",@"nodeId",
-                    @"nodeType",@"nodeType",
-                    @"nodeName",@"nodeName",
-                    @"localName",@"localName",
-                    @"nodeValue",@"nodeValue",
-                    @"childNodeCount",@"childNodeCount",
-                    @"children",@"children",
-                    @"attributes",@"attributes",
-                    @"documentURL",@"documentURL",
-                    @"publicId",@"publicId",
-                    @"systemId",@"systemId",
-                    @"internalSubset",@"internalSubset",
-                    @"xmlVersion",@"xmlVersion",
-                    @"name",@"name",
-                    @"value",@"value",
-                    @"contentDocument",@"contentDocument",
-                    @"shadowRoots",@"shadowRoots",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic nodeId;
-@dynamic nodeType;
-@dynamic nodeName;
-@dynamic localName;
-@dynamic nodeValue;
-@dynamic childNodeCount;
-@dynamic children;
-@dynamic attributes;
-@dynamic documentURL;
-@dynamic publicId;
-@dynamic systemId;
-@dynamic internalSubset;
-@dynamic xmlVersion;
-@dynamic name;
-@dynamic value;
-@dynamic contentDocument;
-@dynamic shadowRoots;
- 
-@end
-
-@implementation WXDOMEventListener
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"type",@"type",
-                    @"useCapture",@"useCapture",
-                    @"isAttribute",@"isAttribute",
-                    @"nodeId",@"nodeId",
-                    @"handlerBody",@"handlerBody",
-                    @"location",@"location",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic type;
-@dynamic useCapture;
-@dynamic isAttribute;
-@dynamic nodeId;
-@dynamic handlerBody;
-@dynamic location;
- 
-@end
-
-@implementation WXDOMRGBA
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"r",@"r",
-                    @"g",@"g",
-                    @"b",@"b",
-                    @"a",@"a",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic r;
-@dynamic g;
-@dynamic b;
-@dynamic a;
- 
-@end
-
-@implementation WXDOMHighlightConfig
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"showInfo",@"showInfo",
-                    @"contentColor",@"contentColor",
-                    @"paddingColor",@"paddingColor",
-                    @"borderColor",@"borderColor",
-                    @"marginColor",@"marginColor",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic showInfo;
-@dynamic contentColor;
-@dynamic paddingColor;
-@dynamic borderColor;
-@dynamic marginColor;
- 
-@end
-
-@implementation WXDOMBoxModel
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"content",@"content",
-                    @"padding",@"padding",
-                    @"border",@"border",
-                    @"margin",@"margin",
-                    @"width",@"width",
-                    @"height",@"height",
-                    nil];
-    });
-    
-    return mappings;
-}
-
-@dynamic content;
-@dynamic padding;
-@dynamic border;
-@dynamic margin;
-@dynamic width;
-@dynamic height;
-
-@end
\ No newline at end of file
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.h
deleted file mode 100644
index 21d3ae8..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.h
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-//  WXDatabaseDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXDatabaseDatabase;
-
-@protocol WXDatabaseCommandDelegate;
-
-@interface WXDatabaseDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXDatabaseCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-- (void)addDatabaseWithDatabase:(WXDatabaseDatabase *)database;
-- (void)sqlTransactionSucceededWithTransactionId:(NSNumber *)transactionId columnNames:(NSArray *)columnNames values:(NSArray *)values;
-- (void)sqlTransactionFailedWithTransactionId:(NSNumber *)transactionId sqlError:(NSDictionary *)sqlError;
-
-@end
-
-@protocol WXDatabaseCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables database tracking, database events will now be delivered to the client.
-- (void)domain:(WXDatabaseDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables database tracking, prevents database events from being sent to the client.
-- (void)domain:(WXDatabaseDomain *)domain disableWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXDatabaseDomain *)domain getDatabaseTableNamesWithDatabaseId:(NSString *)databaseId callback:(void (^)(NSArray *tableNames, id error))callback;
-- (void)domain:(WXDatabaseDomain *)domain executeSQLWithDatabaseId:(NSString *)databaseId query:(NSString *)query callback:(void (^)(NSNumber *success, NSNumber *transactionId, id error))callback;
-
-@end
-
-@interface WXDebugger (WXDatabaseDomain)
-
-@property (nonatomic, readonly, strong) WXDatabaseDomain *databaseDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.m
deleted file mode 100644
index 651db37..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseDomain.m
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-//  WXDatabaseDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDatabaseDomain.h"
-#import "WXObject.h"
-#import "WXDatabaseTypes.h"
-
-
-@interface WXDatabaseDomain ()
-//Commands
-
-@end
-
-@implementation WXDatabaseDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Database";
-}
-
-// Events
-- (void)addDatabaseWithDatabase:(WXDatabaseDatabase *)database;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (database != nil) {
-        [params setObject:[database WX_JSONObject] forKey:@"database"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Database.addDatabase" parameters:params];
-}
-- (void)sqlTransactionSucceededWithTransactionId:(NSNumber *)transactionId columnNames:(NSArray *)columnNames values:(NSArray *)values;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (transactionId != nil) {
-        [params setObject:[transactionId WX_JSONObject] forKey:@"transactionId"];
-    }
-    if (columnNames != nil) {
-        [params setObject:[columnNames WX_JSONObject] forKey:@"columnNames"];
-    }
-    if (values != nil) {
-        [params setObject:[values WX_JSONObject] forKey:@"values"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Database.sqlTransactionSucceeded" parameters:params];
-}
-- (void)sqlTransactionFailedWithTransactionId:(NSNumber *)transactionId sqlError:(NSDictionary *)sqlError;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (transactionId != nil) {
-        [params setObject:[transactionId WX_JSONObject] forKey:@"transactionId"];
-    }
-    if (sqlError != nil) {
-        [params setObject:[sqlError WX_JSONObject] forKey:@"sqlError"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Database.sqlTransactionFailed" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getDatabaseTableNames"] && [self.delegate respondsToSelector:@selector(domain:getDatabaseTableNamesWithDatabaseId:callback:)]) {
-        [self.delegate domain:self getDatabaseTableNamesWithDatabaseId:[params objectForKey:@"databaseId"] callback:^(NSArray *tableNames, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (tableNames != nil) {
-                [params setObject:tableNames forKey:@"tableNames"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"executeSQL"] && [self.delegate respondsToSelector:@selector(domain:executeSQLWithDatabaseId:query:callback:)]) {
-        [self.delegate domain:self executeSQLWithDatabaseId:[params objectForKey:@"databaseId"] query:[params objectForKey:@"query"] callback:^(NSNumber *success, NSNumber *transactionId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (success != nil) {
-                [params setObject:success forKey:@"success"];
-            }
-            if (transactionId != nil) {
-                [params setObject:transactionId forKey:@"transactionId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXDatabaseDomain)
-
-- (WXDatabaseDomain *)databaseDomain;
-{
-    return [self domainForName:@"Database"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.h
deleted file mode 100644
index 2311c25..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.h
+++ /dev/null
@@ -1,37 +0,0 @@
-//    
-//  WXDatabaseTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// Database object.
-@interface WXDatabaseDatabase : WXObject
-
-// Database ID.
-@property (nonatomic, strong) NSString *identifier;
-
-// Database domain.
-// Type: string
-@property (nonatomic, strong) NSString *domain;
-
-// Database name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Database version.
-// Type: string
-@property (nonatomic, strong) NSString *version;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.m
deleted file mode 100644
index 3e172e6..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDatabaseTypes.m
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-//  WXDatabaseTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDatabaseTypes.h"
-
-@implementation WXDatabaseDatabase
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"id",@"identifier",
-                    @"domain",@"domain",
-                    @"name",@"name",
-                    @"version",@"version",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic identifier;
-@dynamic domain;
-@dynamic name;
-@dynamic version;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.h
deleted file mode 100644
index 3dc3aa9..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXDynamicDebuggerDomain.h"
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDevTool.h"
-
-@protocol WXDebugCommandDelegate;
-
-@interface WXDebugDomain : WXDynamicDebuggerDomain
-
-@property (nonatomic, assign) id <WXDebugCommandDelegate, WXCommandDelegate>delegate;
-
-@end
-
-@protocol WXDebugCommandDelegate <WXCommandDelegate>
-@optional
-- (void)domain:(WXDebugDomain *)domain sendLogLevel:(NSString *)level withCallback:(void (^)(id error))callback;
-- (void)domain:(WXDebugDomain *)domain setInspectorMode:(NSString *)mode withCallback:(void (^)(id error))callback;
-- (void)domain:(WXDynamicDebuggerDomain *)domain refreshCallback:(void (^)(id error))callback;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain reloadCallback:(void (^)(id error))callback;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain enableNetwork:(BOOL)enable networkCallback:(void (^)(id error))callback;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callNative:(NSDictionary *)jsModule callBack:(void (^)(id error))callback;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callAddElement:(NSDictionary *)jsModule callBack:(void (^)(id error))callback;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callCreateBody:(NSDictionary *)jsModule callBack:(void (^)(id error))callback;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callRemoveElement:(NSDictionary *)jsModule callBack:(void (^)(id error))callback ;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callMoveElement:(NSDictionary *)jsModule callBack:(void (^)(id error))callback ;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callUpdateAttrs:(NSDictionary *)jsModule callBack:(void (^)(id error))callback ;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callUpdateStyle:(NSDictionary *)jsModule callBack:(void (^)(id error))callback ;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callAddEvent:(NSDictionary *)jsModule callBack:(void (^)(id error))callback ;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callRemoveEvent:(NSDictionary *)jsModule callBack:(void (^)(id error))callback ;
-- (void)domain:(WXDynamicDebuggerDomain *)domain syncCall:(NSDictionary *)args callBack:(void (^)(NSDictionary *data, id error))callback;
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain enablePerformanceMonitor:(BOOL)enable monitorCallback:(void (^)(id error))callback;
-- (void)domain:(WXDynamicDebuggerDomain *)domain sendPerformanceData:(BOOL)enable sendCallback:(void (^)(id error))callback;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.m
deleted file mode 100644
index 25ffdfe..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebugDomain.m
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXDebugDomain.h"
-#import "WXTracingUtility.h"
-
-@implementation WXDebugDomain 
-
-@dynamic delegate;
-
-+ (NSString *)domainName {
-    return @"WxDebug";
-}
-
-#pragma mark - Public Method
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback {
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setLogLevel"] && [self.delegate respondsToSelector:@selector(domain:sendLogLevel:withCallback:)]) {
-        [self.delegate domain:self sendLogLevel:[params objectForKey:@"logLevel"] withCallback:^(id error) {
-            responseCallback(nil,error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil,error);
-        }];
-    } else if ([methodName isEqualToString:@"setElementMode"] && [self.delegate respondsToSelector:@selector(domain:setInspectorMode:withCallback:)]) {
-        [self.delegate domain:self setInspectorMode:[params objectForKey:@"mode"] withCallback:^(id error) {
-            responseCallback(nil,error);
-        }];
-    } else if ([methodName isEqualToString:@"refresh"] && [self.delegate respondsToSelector:@selector(domain:refreshCallback:)]) {
-        [self.delegate domain:self refreshCallback:^(id error) {
-            responseCallback(nil,error);
-        }];
-    } else if ([methodName isEqualToString:@"reload"] && [self.delegate respondsToSelector:@selector(domain:reloadCallback:)]) {
-        [self.delegate domain:self reloadCallback:^(id error) {
-            responseCallback(nil,error);
-        }];
-    } else if ([methodName isEqualToString:@"network"] && [self.delegate respondsToSelector:@selector(domain:enableNetwork:networkCallback:)]) {
-        [self.delegate domain:self enableNetwork:[[params objectForKey:@"enable"] boolValue] networkCallback:^(id error) {
-            responseCallback(nil,error);
-        }];
-    } else if ([methodName isEqualToString:@"syncCall"] && [self.delegate respondsToSelector:@selector(domain:syncCall:callBack:)]) {
-        [self.delegate domain:self syncCall:params callBack:^(NSDictionary *result, id error) {
-            responseCallback(result, error);
-        }];
-    } else if ([methodName isEqualToString:@"callNative"] && [self.delegate respondsToSelector:@selector(domain:callNative:callBack:)]) {
-        [self.delegate domain:self callNative:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"callAddElement"] && [self.delegate respondsToSelector:@selector(domain:callAddElement:callBack:)]) {
-        [self.delegate domain:self callAddElement:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }else if ([methodName isEqualToString:@"callCreateBody"] && [self.delegate respondsToSelector:@selector(domain:callCreateBody:callBack:)]) {
-        [self.delegate domain:self callCreateBody:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }else if ([methodName isEqualToString:@"callRemoveElement"] && [self.delegate respondsToSelector:@selector(domain:callRemoveElement:callBack:)]) {
-        [self.delegate domain:self callRemoveElement:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }else if ([methodName isEqualToString:@"callMoveElement"] && [self.delegate respondsToSelector:@selector(domain:callMoveElement:callBack:)]) {
-        [self.delegate domain:self callMoveElement:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }else if ([methodName isEqualToString:@"callUpdateAttrs"] && [self.delegate respondsToSelector:@selector(domain:callUpdateAttrs:callBack:)]) {
-        [self.delegate domain:self callUpdateAttrs:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }else if ([methodName isEqualToString:@"callUpdateStyle"] && [self.delegate respondsToSelector:@selector(domain:callUpdateStyle:callBack:)]) {
-        [self.delegate domain:self callUpdateStyle:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }else if ([methodName isEqualToString:@"callAddEvent"] && [self.delegate respondsToSelector:@selector(domain:callAddEvent:callBack:)]) {
-        [self.delegate domain:self callAddEvent:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }else if ([methodName isEqualToString:@"callRemoveEvent"] && [self.delegate respondsToSelector:@selector(domain:callRemoveEvent:callBack:)]) {
-        [self.delegate domain:self callRemoveEvent:params callBack:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }else if ([methodName isEqualToString:@"enablePerformanceMonitor"]) {
-        [self.delegate domain:self enablePerformanceMonitor:[[params objectForKey:@"value"] boolValue] monitorCallback:^(id error) {
-            responseCallback(nil,error);
-        }];
-    }else if ([methodName isEqualToString:@"refreshPerformanceData"]) {
-        [self.delegate domain:self sendPerformanceData:[[params objectForKey:@"value"] boolValue] sendCallback:^(id error) {
-            responseCallback(nil,error);
-        }];
-    } 
-}
-
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.h
deleted file mode 100644
index e9821aa..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.h
+++ /dev/null
@@ -1,205 +0,0 @@
-//
-//  WXDebuggerDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXDebuggerLocation;
-@class WXDebuggerFunctionDetails;
-@class WXRuntimeRemoteObject;
-
-@protocol WXDebuggerCommandDelegate;
-
-// Debugger domain exposes JavaScript debugging capabilities. It allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc.
-@interface WXDebuggerDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXDebuggerCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-
-// Called when global has been cleared and debugger client should reset its state. Happens upon navigation or reload.
-- (void)globalObjectCleared;
-
-// Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger.
-// Param scriptId: Identifier of the script parsed.
-// Param url: URL or name of the script parsed (if any).
-// Param startLine: Line offset of the script within the resource with given URL (for script tags).
-// Param startColumn: Column offset of the script within the resource with given URL.
-// Param endLine: Last line of the script.
-// Param endColumn: Length of the last line of the script.
-// Param isContentScript: Determines whether this script is a user extension script.
-// Param sourceMapURL: URL of source map associated with script (if any).
-- (void)scriptParsedWithScriptId:(NSString *)scriptId url:(NSString *)url startLine:(NSNumber *)startLine startColumn:(NSNumber *)startColumn endLine:(NSNumber *)endLine endColumn:(NSNumber *)endColumn isContentScript:(NSNumber *)isContentScript sourceMapURL:(NSString *)sourceMapURL;
-
-// Fired when virtual machine fails to parse the script.
-// Param url: URL of the script that failed to parse.
-// Param scriptSource: Source text of the script that failed to parse.
-// Param startLine: Line offset of the script within the resource.
-// Param errorLine: Line with error.
-// Param errorMessage: Parse error message.
-- (void)scriptFailedToParseWithUrl:(NSString *)url scriptSource:(NSString *)scriptSource startLine:(NSNumber *)startLine errorLine:(NSNumber *)errorLine errorMessage:(NSString *)errorMessage;
-
-// Fired when breakpoint is resolved to an actual script and location.
-// Param breakpointId: Breakpoint unique identifier.
-// Param location: Actual breakpoint location.
-- (void)breakpointResolvedWithBreakpointId:(NSString *)breakpointId location:(WXDebuggerLocation *)location;
-
-// Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria.
-// Param callFrames: Call stack the virtual machine stopped on.
-// Param reason: Pause reason.
-// Param data: Object containing break-specific auxiliary properties.
-- (void)pausedWithCallFrames:(NSArray *)callFrames reason:(NSString *)reason data:(NSDictionary *)data;
-
-// Fired when the virtual machine resumed execution.
-- (void)resumed;
-
-
-@end
-
-@protocol WXDebuggerCommandDelegate <WXCommandDelegate>
-@optional
-
-// Tells whether enabling debugger causes scripts recompilation.
-// Callback Param result: True if enabling debugger causes scripts recompilation.
-- (void)domain:(WXDebuggerDomain *)domain causesRecompilationWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-// Tells whether debugger supports separate script compilation and execution.
-// Callback Param result: True if debugger supports separate script compilation and execution.
-- (void)domain:(WXDebuggerDomain *)domain supportsSeparateScriptCompilationAndExecutionWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-// Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received.
-- (void)domain:(WXDebuggerDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables debugger for given page.
-- (void)domain:(WXDebuggerDomain *)domain disableWithCallback:(void (^)(id error))callback;
-
-// Activates / deactivates all breakpoints on the page.
-// Param active: New value for breakpoints active state.
-- (void)domain:(WXDebuggerDomain *)domain setBreakpointsActiveWithActive:(NSNumber *)active callback:(void (^)(id error))callback;
-
-// Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in <code>locations</code> property. Further matching script parsing will result in subsequent <code>breakpointResolved</code> events issued. This logical breakpoint will survive page reloads.
-// Param lineNumber: Line number to set breakpoint at.
-// Param url: URL of the resources to set breakpoint on.
-// Param urlRegex: Regex pattern for the URLs of the resources to set breakpoints on. Either <code>url</code> or <code>urlRegex</code> must be specified.
-// Param columnNumber: Offset in the line to set breakpoint at.
-// Param condition: Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
-// Callback Param breakpointId: Id of the created breakpoint for further reference.
-// Callback Param locations: List of the locations this breakpoint resolved into upon addition.
-- (void)domain:(WXDebuggerDomain *)domain setBreakpointByUrlWithLineNumber:(NSNumber *)lineNumber url:(NSString *)url urlRegex:(NSString *)urlRegex columnNumber:(NSNumber *)columnNumber condition:(NSString *)condition callback:(void (^)(NSString *breakpointId, NSArray *locations, id error))callback;
-
-// Sets JavaScript breakpoint at a given location.
-// Param location: Location to set breakpoint in.
-// Param condition: Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
-// Callback Param breakpointId: Id of the created breakpoint for further reference.
-// Callback Param actualLocation: Location this breakpoint resolved into.
-- (void)domain:(WXDebuggerDomain *)domain setBreakpointWithLocation:(WXDebuggerLocation *)location condition:(NSString *)condition callback:(void (^)(NSString *breakpointId, WXDebuggerLocation *actualLocation, id error))callback;
-
-// Removes JavaScript breakpoint.
-- (void)domain:(WXDebuggerDomain *)domain removeBreakpointWithBreakpointId:(NSString *)breakpointId callback:(void (^)(id error))callback;
-
-// Continues execution until specific location is reached.
-// Param location: Location to continue to.
-- (void)domain:(WXDebuggerDomain *)domain continueToLocationWithLocation:(WXDebuggerLocation *)location callback:(void (^)(id error))callback;
-
-// Steps over the statement.
-- (void)domain:(WXDebuggerDomain *)domain stepOverWithCallback:(void (^)(id error))callback;
-
-// Steps into the function call.
-- (void)domain:(WXDebuggerDomain *)domain stepIntoWithCallback:(void (^)(id error))callback;
-
-// Steps out of the function call.
-- (void)domain:(WXDebuggerDomain *)domain stepOutWithCallback:(void (^)(id error))callback;
-
-// Stops on the next JavaScript statement.
-- (void)domain:(WXDebuggerDomain *)domain pauseWithCallback:(void (^)(id error))callback;
-
-// Resumes JavaScript execution.
-- (void)domain:(WXDebuggerDomain *)domain resumeWithCallback:(void (^)(id error))callback;
-
-// Searches for given string in script content.
-// Param scriptId: Id of the script to search in.
-// Param query: String to search for.
-// Param caseSensitive: If true, search is case sensitive.
-// Param isRegex: If true, treats string parameter as regex.
-// Callback Param result: List of search matches.
-- (void)domain:(WXDebuggerDomain *)domain searchInContentWithScriptId:(NSString *)scriptId query:(NSString *)query caseSensitive:(NSNumber *)caseSensitive isRegex:(NSNumber *)isRegex callback:(void (^)(NSArray *result, id error))callback;
-
-// Tells whether <code>setScriptSource</code> is supported.
-// Callback Param result: True if <code>setScriptSource</code> is supported.
-- (void)domain:(WXDebuggerDomain *)domain canSetScriptSourceWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-// Edits JavaScript source live.
-// Param scriptId: Id of the script to edit.
-// Param scriptSource: New content of the script.
-// Param preview:  If true the change will not actually be applied. Preview mode may be used to get result description without actually modifying the code.
-// Callback Param callFrames: New stack trace in case editing has happened while VM was stopped.
-// Callback Param result: VM-specific description of the changes applied.
-- (void)domain:(WXDebuggerDomain *)domain setScriptSourceWithScriptId:(NSString *)scriptId scriptSource:(NSString *)scriptSource preview:(NSNumber *)preview callback:(void (^)(NSArray *callFrames, NSDictionary *result, id error))callback;
-
-// Restarts particular call frame from the beginning.
-// Param callFrameId: Call frame identifier to evaluate on.
-// Callback Param callFrames: New stack trace.
-// Callback Param result: VM-specific description.
-- (void)domain:(WXDebuggerDomain *)domain restartFrameWithCallFrameId:(NSString *)callFrameId callback:(void (^)(NSArray *callFrames, NSDictionary *result, id error))callback;
-
-// Returns source for the script with given id.
-// Param scriptId: Id of the script to get source for.
-// Callback Param scriptSource: Script source.
-- (void)domain:(WXDebuggerDomain *)domain getScriptSourceWithScriptId:(NSString *)scriptId callback:(void (^)(NSString *scriptSource, id error))callback;
-
-// Returns detailed informtation on given function.
-// Param functionId: Id of the function to get location for.
-// Callback Param details: Information about the function.
-- (void)domain:(WXDebuggerDomain *)domain getFunctionDetailsWithFunctionId:(NSString *)functionId callback:(void (^)(WXDebuggerFunctionDetails *details, id error))callback;
-
-// Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is <code>none</code>.
-// Param state: Pause on exceptions mode.
-- (void)domain:(WXDebuggerDomain *)domain setPauseOnExceptionsWithState:(NSString *)state callback:(void (^)(id error))callback;
-
-// Evaluates expression on a given call frame.
-// Param callFrameId: Call frame identifier to evaluate on.
-// Param expression: Expression to evaluate.
-// Param objectGroup: String object group name to put result into (allows rapid releasing resulting object handles using <code>releaseObjectGroup</code>).
-// Param includeCommandLineAPI: Specifies whether command line API should be available to the evaluated expression, defaults to false.
-// Param doNotPauseOnExceptionsAndMuteConsole: Specifies whether evaluation should stop on exceptions and mute console. Overrides setPauseOnException state.
-// Param returnByValue: Whether the result is expected to be a JSON object that should be sent by value.
-// Callback Param result: Object wrapper for the evaluation result.
-// Callback Param wasThrown: True if the result was thrown during the evaluation.
-- (void)domain:(WXDebuggerDomain *)domain evaluateOnCallFrameWithCallFrameId:(NSString *)callFrameId expression:(NSString *)expression objectGroup:(NSString *)objectGroup includeCommandLineAPI:(NSNumber *)includeCommandLineAPI doNotPauseOnExceptionsAndMuteConsole:(NSNumber *)doNotPauseOnExceptionsAndMuteConsole returnByValue:(NSNumber *)returnByValue callback:(void (^)(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error))callback;
-
-// Compiles expression.
-// Param expression: Expression to compile.
-// Param sourceURL: Source url to be set for the script.
-// Callback Param scriptId: Id of the script.
-// Callback Param syntaxErrorMessage: Syntax error message if compilation failed.
-- (void)domain:(WXDebuggerDomain *)domain compileScriptWithExpression:(NSString *)expression sourceURL:(NSString *)sourceURL callback:(void (^)(NSString *scriptId, NSString *syntaxErrorMessage, id error))callback;
-
-// Runs script with given id in a given context.
-// Param scriptId: Id of the script to run.
-// Param contextId: Specifies in which isolated context to perform script run. Each content script lives in an isolated context and this parameter may be used to specify one of those contexts. If the parameter is omitted or 0 the evaluation will be performed in the context of the inspected page.
-// Param objectGroup: Symbolic group name that can be used to release multiple objects.
-// Param doNotPauseOnExceptionsAndMuteConsole: Specifies whether script run should stop on exceptions and mute console. Overrides setPauseOnException state.
-// Callback Param result: Run result.
-// Callback Param wasThrown: True if the result was thrown during the script run.
-- (void)domain:(WXDebuggerDomain *)domain runScriptWithScriptId:(NSString *)scriptId contextId:(NSNumber *)contextId objectGroup:(NSString *)objectGroup doNotPauseOnExceptionsAndMuteConsole:(NSNumber *)doNotPauseOnExceptionsAndMuteConsole callback:(void (^)(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error))callback;
-
-// Sets overlay message.
-// Param message: Overlay message to display when paused in debugger.
-- (void)domain:(WXDebuggerDomain *)domain setOverlayMessageWithMessage:(NSString *)message callback:(void (^)(id error))callback;
-
-@end
-
-@interface WXDebugger (WXDebuggerDomain)
-
-@property (nonatomic, readonly, strong) WXDebuggerDomain *debuggerDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.m
deleted file mode 100644
index 7bda449..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerDomain.m
+++ /dev/null
@@ -1,354 +0,0 @@
-//
-//  WXDebuggerDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebuggerDomain.h"
-#import "WXObject.h"
-#import "WXRuntimeTypes.h"
-#import "WXDebuggerTypes.h"
-
-
-@interface WXDebuggerDomain ()
-//Commands
-
-@end
-
-@implementation WXDebuggerDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Debugger";
-}
-
-// Events
-
-// Called when global has been cleared and debugger client should reset its state. Happens upon navigation or reload.
-- (void)globalObjectCleared;
-{
-    [self.debuggingServer sendEventWithName:@"Debugger.globalObjectCleared" parameters:nil];
-}
-
-// Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger.
-- (void)scriptParsedWithScriptId:(NSString *)scriptId url:(NSString *)url startLine:(NSNumber *)startLine startColumn:(NSNumber *)startColumn endLine:(NSNumber *)endLine endColumn:(NSNumber *)endColumn isContentScript:(NSNumber *)isContentScript sourceMapURL:(NSString *)sourceMapURL;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:8];
-
-    if (scriptId != nil) {
-        [params setObject:[scriptId WX_JSONObject] forKey:@"scriptId"];
-    }
-    if (url != nil) {
-        [params setObject:[url WX_JSONObject] forKey:@"url"];
-    }
-    if (startLine != nil) {
-        [params setObject:[startLine WX_JSONObject] forKey:@"startLine"];
-    }
-    if (startColumn != nil) {
-        [params setObject:[startColumn WX_JSONObject] forKey:@"startColumn"];
-    }
-    if (endLine != nil) {
-        [params setObject:[endLine WX_JSONObject] forKey:@"endLine"];
-    }
-    if (endColumn != nil) {
-        [params setObject:[endColumn WX_JSONObject] forKey:@"endColumn"];
-    }
-    if (isContentScript != nil) {
-        [params setObject:[isContentScript WX_JSONObject] forKey:@"isContentScript"];
-    }
-    if (sourceMapURL != nil) {
-        [params setObject:[sourceMapURL WX_JSONObject] forKey:@"sourceMapURL"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Debugger.scriptParsed" parameters:params];
-}
-
-// Fired when virtual machine fails to parse the script.
-- (void)scriptFailedToParseWithUrl:(NSString *)url scriptSource:(NSString *)scriptSource startLine:(NSNumber *)startLine errorLine:(NSNumber *)errorLine errorMessage:(NSString *)errorMessage;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:5];
-
-    if (url != nil) {
-        [params setObject:[url WX_JSONObject] forKey:@"url"];
-    }
-    if (scriptSource != nil) {
-        [params setObject:[scriptSource WX_JSONObject] forKey:@"scriptSource"];
-    }
-    if (startLine != nil) {
-        [params setObject:[startLine WX_JSONObject] forKey:@"startLine"];
-    }
-    if (errorLine != nil) {
-        [params setObject:[errorLine WX_JSONObject] forKey:@"errorLine"];
-    }
-    if (errorMessage != nil) {
-        [params setObject:[errorMessage WX_JSONObject] forKey:@"errorMessage"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Debugger.scriptFailedToParse" parameters:params];
-}
-
-// Fired when breakpoint is resolved to an actual script and location.
-- (void)breakpointResolvedWithBreakpointId:(NSString *)breakpointId location:(WXDebuggerLocation *)location;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (breakpointId != nil) {
-        [params setObject:[breakpointId WX_JSONObject] forKey:@"breakpointId"];
-    }
-    if (location != nil) {
-        [params setObject:[location WX_JSONObject] forKey:@"location"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Debugger.breakpointResolved" parameters:params];
-}
-
-// Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria.
-- (void)pausedWithCallFrames:(NSArray *)callFrames reason:(NSString *)reason data:(NSDictionary *)data;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (callFrames != nil) {
-        [params setObject:[callFrames WX_JSONObject] forKey:@"callFrames"];
-    }
-    if (reason != nil) {
-        [params setObject:[reason WX_JSONObject] forKey:@"reason"];
-    }
-    if (data != nil) {
-        [params setObject:[data WX_JSONObject] forKey:@"data"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Debugger.paused" parameters:params];
-}
-
-// Fired when the virtual machine resumed execution.
-- (void)resumed;
-{
-    [self.debuggingServer sendEventWithName:@"Debugger.resumed" parameters:nil];
-}
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"causesRecompilation"] && [self.delegate respondsToSelector:@selector(domain:causesRecompilationWithCallback:)]) {
-        [self.delegate domain:self causesRecompilationWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"supportsSeparateScriptCompilationAndExecution"] && [self.delegate respondsToSelector:@selector(domain:supportsSeparateScriptCompilationAndExecutionWithCallback:)]) {
-        [self.delegate domain:self supportsSeparateScriptCompilationAndExecutionWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setBreakpointsActive"] && [self.delegate respondsToSelector:@selector(domain:setBreakpointsActiveWithActive:callback:)]) {
-        [self.delegate domain:self setBreakpointsActiveWithActive:[params objectForKey:@"active"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setBreakpointByUrl"] && [self.delegate respondsToSelector:@selector(domain:setBreakpointByUrlWithLineNumber:url:urlRegex:columnNumber:condition:callback:)]) {
-        [self.delegate domain:self setBreakpointByUrlWithLineNumber:[params objectForKey:@"lineNumber"] url:[params objectForKey:@"url"] urlRegex:[params objectForKey:@"urlRegex"] columnNumber:[params objectForKey:@"columnNumber"] condition:[params objectForKey:@"condition"] callback:^(NSString *breakpointId, NSArray *locations, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (breakpointId != nil) {
-                [params setObject:breakpointId forKey:@"breakpointId"];
-            }
-            if (locations != nil) {
-                [params setObject:locations forKey:@"locations"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:setBreakpointWithLocation:condition:callback:)]) {
-        [self.delegate domain:self setBreakpointWithLocation:[params objectForKey:@"location"] condition:[params objectForKey:@"condition"] callback:^(NSString *breakpointId, WXDebuggerLocation *actualLocation, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (breakpointId != nil) {
-                [params setObject:breakpointId forKey:@"breakpointId"];
-            }
-            if (actualLocation != nil) {
-                [params setObject:actualLocation forKey:@"actualLocation"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeBreakpoint"] && [self.delegate respondsToSelector:@selector(domain:removeBreakpointWithBreakpointId:callback:)]) {
-        [self.delegate domain:self removeBreakpointWithBreakpointId:[params objectForKey:@"breakpointId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"continueToLocation"] && [self.delegate respondsToSelector:@selector(domain:continueToLocationWithLocation:callback:)]) {
-        [self.delegate domain:self continueToLocationWithLocation:[params objectForKey:@"location"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"stepOver"] && [self.delegate respondsToSelector:@selector(domain:stepOverWithCallback:)]) {
-        [self.delegate domain:self stepOverWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"stepInto"] && [self.delegate respondsToSelector:@selector(domain:stepIntoWithCallback:)]) {
-        [self.delegate domain:self stepIntoWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"stepOut"] && [self.delegate respondsToSelector:@selector(domain:stepOutWithCallback:)]) {
-        [self.delegate domain:self stepOutWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"pause"] && [self.delegate respondsToSelector:@selector(domain:pauseWithCallback:)]) {
-        [self.delegate domain:self pauseWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"resume"] && [self.delegate respondsToSelector:@selector(domain:resumeWithCallback:)]) {
-        [self.delegate domain:self resumeWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"searchInContent"] && [self.delegate respondsToSelector:@selector(domain:searchInContentWithScriptId:query:caseSensitive:isRegex:callback:)]) {
-        [self.delegate domain:self searchInContentWithScriptId:[params objectForKey:@"scriptId"] query:[params objectForKey:@"query"] caseSensitive:[params objectForKey:@"caseSensitive"] isRegex:[params objectForKey:@"isRegex"] callback:^(NSArray *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"canSetScriptSource"] && [self.delegate respondsToSelector:@selector(domain:canSetScriptSourceWithCallback:)]) {
-        [self.delegate domain:self canSetScriptSourceWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setScriptSource"] && [self.delegate respondsToSelector:@selector(domain:setScriptSourceWithScriptId:scriptSource:preview:callback:)]) {
-        [self.delegate domain:self setScriptSourceWithScriptId:[params objectForKey:@"scriptId"] scriptSource:[params objectForKey:@"scriptSource"] preview:[params objectForKey:@"preview"] callback:^(NSArray *callFrames, NSDictionary *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (callFrames != nil) {
-                [params setObject:callFrames forKey:@"callFrames"];
-            }
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"restartFrame"] && [self.delegate respondsToSelector:@selector(domain:restartFrameWithCallFrameId:callback:)]) {
-        [self.delegate domain:self restartFrameWithCallFrameId:[params objectForKey:@"callFrameId"] callback:^(NSArray *callFrames, NSDictionary *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (callFrames != nil) {
-                [params setObject:callFrames forKey:@"callFrames"];
-            }
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getScriptSource"] && [self.delegate respondsToSelector:@selector(domain:getScriptSourceWithScriptId:callback:)]) {
-        [self.delegate domain:self getScriptSourceWithScriptId:[params objectForKey:@"scriptId"] callback:^(NSString *scriptSource, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (scriptSource != nil) {
-                [params setObject:scriptSource forKey:@"scriptSource"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getFunctionDetails"] && [self.delegate respondsToSelector:@selector(domain:getFunctionDetailsWithFunctionId:callback:)]) {
-        [self.delegate domain:self getFunctionDetailsWithFunctionId:[params objectForKey:@"functionId"] callback:^(WXDebuggerFunctionDetails *details, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (details != nil) {
-                [params setObject:details forKey:@"details"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setPauseOnExceptions"] && [self.delegate respondsToSelector:@selector(domain:setPauseOnExceptionsWithState:callback:)]) {
-        [self.delegate domain:self setPauseOnExceptionsWithState:[params objectForKey:@"state"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"evaluateOnCallFrame"] && [self.delegate respondsToSelector:@selector(domain:evaluateOnCallFrameWithCallFrameId:expression:objectGroup:includeCommandLineAPI:doNotPauseOnExceptionsAndMuteConsole:returnByValue:callback:)]) {
-        [self.delegate domain:self evaluateOnCallFrameWithCallFrameId:[params objectForKey:@"callFrameId"] expression:[params objectForKey:@"expression"] objectGroup:[params objectForKey:@"objectGroup"] includeCommandLineAPI:[params objectForKey:@"includeCommandLineAPI"] doNotPauseOnExceptionsAndMuteConsole:[params objectForKey:@"doNotPauseOnExceptionsAndMuteConsole"] returnByValue:[params objectForKey:@"returnByValue"] callback:^(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-            if (wasThrown != nil) {
-                [params setObject:wasThrown forKey:@"wasThrown"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"compileScript"] && [self.delegate respondsToSelector:@selector(domain:compileScriptWithExpression:sourceURL:callback:)]) {
-        [self.delegate domain:self compileScriptWithExpression:[params objectForKey:@"expression"] sourceURL:[params objectForKey:@"sourceURL"] callback:^(NSString *scriptId, NSString *syntaxErrorMessage, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (scriptId != nil) {
-                [params setObject:scriptId forKey:@"scriptId"];
-            }
-            if (syntaxErrorMessage != nil) {
-                [params setObject:syntaxErrorMessage forKey:@"syntaxErrorMessage"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"runScript"] && [self.delegate respondsToSelector:@selector(domain:runScriptWithScriptId:contextId:objectGroup:doNotPauseOnExceptionsAndMuteConsole:callback:)]) {
-        [self.delegate domain:self runScriptWithScriptId:[params objectForKey:@"scriptId"] contextId:[params objectForKey:@"contextId"] objectGroup:[params objectForKey:@"objectGroup"] doNotPauseOnExceptionsAndMuteConsole:[params objectForKey:@"doNotPauseOnExceptionsAndMuteConsole"] callback:^(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-            if (wasThrown != nil) {
-                [params setObject:wasThrown forKey:@"wasThrown"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setOverlayMessage"] && [self.delegate respondsToSelector:@selector(domain:setOverlayMessageWithMessage:callback:)]) {
-        [self.delegate domain:self setOverlayMessageWithMessage:[params objectForKey:@"message"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXDebuggerDomain)
-
-- (WXDebuggerDomain *)debuggerDomain;
-{
-    return [self domainForName:@"Debugger"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.h
deleted file mode 100644
index 906d100..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.h
+++ /dev/null
@@ -1,97 +0,0 @@
-//    
-//  WXDebuggerTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@class WXRuntimeRemoteObject;
-
-
-// Location in the source code.
-@interface WXDebuggerLocation : WXObject
-
-// Script identifier as reported in the <code>Debugger.scriptParsed</code>.
-@property (nonatomic, strong) NSString *scriptId;
-
-// Line number in the script.
-// Type: integer
-@property (nonatomic, strong) NSNumber *lineNumber;
-
-// Column number in the script.
-// Type: integer
-@property (nonatomic, strong) NSNumber *columnNumber;
-
-@end
-
-
-// Information about the function.
-@interface WXDebuggerFunctionDetails : WXObject
-
-// Location of the function.
-@property (nonatomic, strong) WXDebuggerLocation *location;
-
-// Name of the function. Not present for anonymous functions.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Display name of the function(specified in 'displayName' property on the function object).
-// Type: string
-@property (nonatomic, strong) NSString *displayName;
-
-// Name of the function inferred from its initial assignment.
-// Type: string
-@property (nonatomic, strong) NSString *inferredName;
-
-// Scope chain for this closure.
-// Type: array
-@property (nonatomic, strong) NSArray *scopeChain;
-
-@end
-
-
-// JavaScript call frame. Array of call frames form the call stack.
-@interface WXDebuggerCallFrame : WXObject
-
-// Call frame identifier. This identifier is only valid while the virtual machine is paused.
-@property (nonatomic, strong) NSString *callFrameId;
-
-// Name of the JavaScript function called on this call frame.
-// Type: string
-@property (nonatomic, strong) NSString *functionName;
-
-// Location in the source code.
-@property (nonatomic, strong) WXDebuggerLocation *location;
-
-// Scope chain for this call frame.
-// Type: array
-@property (nonatomic, strong) NSArray *scopeChain;
-
-// <code>this</code> object for this call frame.
-@property (nonatomic, strong) WXRuntimeRemoteObject *this;
-
-@end
-
-
-// Scope description.
-@interface WXDebuggerScope : WXObject
-
-// Scope type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// Object representing the scope. For <code>global</code> and <code>with</code> scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties.
-@property (nonatomic, strong) WXRuntimeRemoteObject *object;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.m
deleted file mode 100644
index ac8e333..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXDebuggerTypes.m
+++ /dev/null
@@ -1,111 +0,0 @@
-//
-//  WXDebuggerTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDebuggerTypes.h"
-
-@implementation WXDebuggerLocation
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"scriptId",@"scriptId",
-                    @"lineNumber",@"lineNumber",
-                    @"columnNumber",@"columnNumber",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic scriptId;
-@dynamic lineNumber;
-@dynamic columnNumber;
- 
-@end
-
-@implementation WXDebuggerFunctionDetails
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"location",@"location",
-                    @"name",@"name",
-                    @"displayName",@"displayName",
-                    @"inferredName",@"inferredName",
-                    @"scopeChain",@"scopeChain",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic location;
-@dynamic name;
-@dynamic displayName;
-@dynamic inferredName;
-@dynamic scopeChain;
- 
-@end
-
-@implementation WXDebuggerCallFrame
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"callFrameId",@"callFrameId",
-                    @"functionName",@"functionName",
-                    @"location",@"location",
-                    @"scopeChain",@"scopeChain",
-                    @"this",@"this",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic callFrameId;
-@dynamic functionName;
-@dynamic location;
-@dynamic scopeChain;
-@dynamic this;
- 
-@end
-
-@implementation WXDebuggerScope
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"type",@"type",
-                    @"object",@"object",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic type;
-@dynamic object;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.h
deleted file mode 100644
index 34c051e..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.h
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-//  WXFileSystemDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXFileSystemMetadata;
-@class WXFileSystemEntry;
-
-@protocol WXFileSystemCommandDelegate;
-
-@interface WXFileSystemDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXFileSystemCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-
-// Completion event of requestFileSystemRoot command.
-// Param requestId: Request Identifier that was returned by corresponding requestFileSystemRoot command.
-// Param errorCode: 0, if no error. Otherwise, errorCode is set to FileError::ErrorCode value.
-// Param root: Contains root of the requested FileSystem if the command completed successfully.
-- (void)fileSystemRootReceivedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode root:(WXFileSystemEntry *)root;
-
-// Completion event of requestDirectoryContent command.
-// Param requestId: Request Identifier that was returned by corresponding requestDirectoryContent command.
-// Param errorCode: 0, if no error. Otherwise, errorCode is set to FileError::ErrorCode value.
-// Param entries: Contains all entries on directory if the command completed successfully.
-- (void)directoryContentReceivedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode entries:(NSArray *)entries;
-
-// Completion event of requestMetadata command.
-// Param requestId: Request Identifier that was returned in response to the corresponding requestMetadata command.
-// Param errorCode: 0, if no error. Otherwise, errorCode is set to FileError::ErrorCode value.
-// Param metadata: Contains metadata of the entry if the command completed successfully.
-- (void)metadataReceivedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode metadata:(WXFileSystemMetadata *)metadata;
-
-// Completion event of requestFileContent command.
-// Param requestId: Request Identifier that was returned in response to the corresponding requestFileContent command.
-// Param errorCode: 0, if no error. Otherwise, errorCode is set to FileError::ErrorCode value.
-// Param content: Content of the file.
-// Param charset: Charset of the content if it is served as text.
-- (void)fileContentReceivedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode content:(NSString *)content charset:(NSString *)charset;
-
-// Completion event of deleteEntry command.
-// Param requestId: Request Identifier that was returned in response to the corresponding deleteEntry command.
-// Param errorCode: 0, if no error. Otherwise errorCode is set to FileError::ErrorCode value.
-- (void)deletionCompletedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode;
-
-@end
-
-@protocol WXFileSystemCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables events from backend.
-- (void)domain:(WXFileSystemDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables events from backend.
-- (void)domain:(WXFileSystemDomain *)domain disableWithCallback:(void (^)(id error))callback;
-
-// Returns root directory of the FileSystem as fileSystemRootReceived event, if exists.
-// Param origin: Security origin of requesting FileSystem. One of frames in current page needs to have this security origin.
-// Param type: FileSystem type of requesting FileSystem.
-// Callback Param requestId: Request identifier. Corresponding fileSystemRootReceived event should have same requestId with this.
-- (void)domain:(WXFileSystemDomain *)domain requestFileSystemRootWithOrigin:(NSString *)origin type:(NSString *)type callback:(void (^)(NSNumber *requestId, id error))callback;
-
-// Returns content of the directory as directoryContentReceived event.
-// Param url: URL of the directory that the frontend is requesting to read from.
-// Callback Param requestId: Request identifier. Corresponding directoryContentReceived event should have same requestId with this.
-- (void)domain:(WXFileSystemDomain *)domain requestDirectoryContentWithUrl:(NSString *)url callback:(void (^)(NSNumber *requestId, id error))callback;
-
-// Returns metadata of the entry as metadataReceived event.
-// Param url: URL of the entry that the frontend is requesting to get metadata from.
-// Callback Param requestId: Request identifier. Corresponding metadataReceived event should have same requestId with this.
-- (void)domain:(WXFileSystemDomain *)domain requestMetadataWithUrl:(NSString *)url callback:(void (^)(NSNumber *requestId, id error))callback;
-
-// Returns content of the file as fileContentReceived event. Result should be sliced into [start, end).
-// Param url: URL of the file that the frontend is requesting to read from.
-// Param readAsText: True if the content should be read as text, otherwise the result will be returned as base64 encoded text.
-// Param start: Specifies the start of range to read.
-// Param end: Specifies the end of range to read exclusively.
-// Param charset: Overrides charset of the content when content is served as text.
-// Callback Param requestId: Request identifier. Corresponding fileContentReceived event should have same requestId with this.
-- (void)domain:(WXFileSystemDomain *)domain requestFileContentWithUrl:(NSString *)url readAsText:(NSNumber *)readAsText start:(NSNumber *)start end:(NSNumber *)end charset:(NSString *)charset callback:(void (^)(NSNumber *requestId, id error))callback;
-
-// Deletes specified entry. If the entry is a directory, the agent deletes children recursively.
-// Param url: URL of the entry to delete.
-// Callback Param requestId: Request identifier. Corresponding deletionCompleted event should have same requestId with this.
-- (void)domain:(WXFileSystemDomain *)domain deleteEntryWithUrl:(NSString *)url callback:(void (^)(NSNumber *requestId, id error))callback;
-
-@end
-
-@interface WXDebugger (WXFileSystemDomain)
-
-@property (nonatomic, readonly, strong) WXFileSystemDomain *fileSystemDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.m
deleted file mode 100644
index 15265f5..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemDomain.m
+++ /dev/null
@@ -1,201 +0,0 @@
-//
-//  WXFileSystemDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXFileSystemDomain.h"
-#import "WXObject.h"
-#import "WXFileSystemTypes.h"
-
-
-@interface WXFileSystemDomain ()
-//Commands
-
-@end
-
-@implementation WXFileSystemDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"FileSystem";
-}
-
-// Events
-
-// Completion event of requestFileSystemRoot command.
-- (void)fileSystemRootReceivedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode root:(WXFileSystemEntry *)root;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (errorCode != nil) {
-        [params setObject:[errorCode WX_JSONObject] forKey:@"errorCode"];
-    }
-    if (root != nil) {
-        [params setObject:[root WX_JSONObject] forKey:@"root"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"FileSystem.fileSystemRootReceived" parameters:params];
-}
-
-// Completion event of requestDirectoryContent command.
-- (void)directoryContentReceivedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode entries:(NSArray *)entries;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (errorCode != nil) {
-        [params setObject:[errorCode WX_JSONObject] forKey:@"errorCode"];
-    }
-    if (entries != nil) {
-        [params setObject:[entries WX_JSONObject] forKey:@"entries"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"FileSystem.directoryContentReceived" parameters:params];
-}
-
-// Completion event of requestMetadata command.
-- (void)metadataReceivedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode metadata:(WXFileSystemMetadata *)metadata;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (errorCode != nil) {
-        [params setObject:[errorCode WX_JSONObject] forKey:@"errorCode"];
-    }
-    if (metadata != nil) {
-        [params setObject:[metadata WX_JSONObject] forKey:@"metadata"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"FileSystem.metadataReceived" parameters:params];
-}
-
-// Completion event of requestFileContent command.
-- (void)fileContentReceivedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode content:(NSString *)content charset:(NSString *)charset;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:4];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (errorCode != nil) {
-        [params setObject:[errorCode WX_JSONObject] forKey:@"errorCode"];
-    }
-    if (content != nil) {
-        [params setObject:[content WX_JSONObject] forKey:@"content"];
-    }
-    if (charset != nil) {
-        [params setObject:[charset WX_JSONObject] forKey:@"charset"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"FileSystem.fileContentReceived" parameters:params];
-}
-
-// Completion event of deleteEntry command.
-- (void)deletionCompletedWithRequestId:(NSNumber *)requestId errorCode:(NSNumber *)errorCode;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (errorCode != nil) {
-        [params setObject:[errorCode WX_JSONObject] forKey:@"errorCode"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"FileSystem.deletionCompleted" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestFileSystemRoot"] && [self.delegate respondsToSelector:@selector(domain:requestFileSystemRootWithOrigin:type:callback:)]) {
-        [self.delegate domain:self requestFileSystemRootWithOrigin:[params objectForKey:@"origin"] type:[params objectForKey:@"type"] callback:^(NSNumber *requestId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (requestId != nil) {
-                [params setObject:requestId forKey:@"requestId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestDirectoryContent"] && [self.delegate respondsToSelector:@selector(domain:requestDirectoryContentWithUrl:callback:)]) {
-        [self.delegate domain:self requestDirectoryContentWithUrl:[params objectForKey:@"url"] callback:^(NSNumber *requestId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (requestId != nil) {
-                [params setObject:requestId forKey:@"requestId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestMetadata"] && [self.delegate respondsToSelector:@selector(domain:requestMetadataWithUrl:callback:)]) {
-        [self.delegate domain:self requestMetadataWithUrl:[params objectForKey:@"url"] callback:^(NSNumber *requestId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (requestId != nil) {
-                [params setObject:requestId forKey:@"requestId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestFileContent"] && [self.delegate respondsToSelector:@selector(domain:requestFileContentWithUrl:readAsText:start:end:charset:callback:)]) {
-        [self.delegate domain:self requestFileContentWithUrl:[params objectForKey:@"url"] readAsText:[params objectForKey:@"readAsText"] start:[params objectForKey:@"start"] end:[params objectForKey:@"end"] charset:[params objectForKey:@"charset"] callback:^(NSNumber *requestId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (requestId != nil) {
-                [params setObject:requestId forKey:@"requestId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"deleteEntry"] && [self.delegate respondsToSelector:@selector(domain:deleteEntryWithUrl:callback:)]) {
-        [self.delegate domain:self deleteEntryWithUrl:[params objectForKey:@"url"] callback:^(NSNumber *requestId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (requestId != nil) {
-                [params setObject:requestId forKey:@"requestId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXFileSystemDomain)
-
-- (WXFileSystemDomain *)fileSystemDomain;
-{
-    return [self domainForName:@"FileSystem"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.h
deleted file mode 100644
index b5b4b6f..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//    
-//  WXFileSystemTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// Represents a browser side file or directory.
-@interface WXFileSystemEntry : WXObject
-
-// filesystem: URL for the entry.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// The name of the file or directory.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// True if the entry is a directory.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *isDirectory;
-
-// MIME type of the entry, available for a file only.
-// Type: string
-@property (nonatomic, strong) NSString *mimeType;
-
-// ResourceType of the entry, available for a file only.
-@property (nonatomic, strong) NSString *resourceType;
-
-// True if the entry is a text file.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *isTextFile;
-
-@end
-
-
-// Represents metadata of a file or entry.
-@interface WXFileSystemMetadata : WXObject
-
-// Modification time.
-// Type: number
-@property (nonatomic, strong) NSNumber *modificationTime;
-
-// File size. This field is always zero for directories.
-// Type: number
-@property (nonatomic, strong) NSNumber *size;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.m
deleted file mode 100644
index 6dfa765..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXFileSystemTypes.m
+++ /dev/null
@@ -1,63 +0,0 @@
-//
-//  WXFileSystemTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXFileSystemTypes.h"
-
-@implementation WXFileSystemEntry
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"url",@"url",
-                    @"name",@"name",
-                    @"isDirectory",@"isDirectory",
-                    @"mimeType",@"mimeType",
-                    @"resourceType",@"resourceType",
-                    @"isTextFile",@"isTextFile",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic url;
-@dynamic name;
-@dynamic isDirectory;
-@dynamic mimeType;
-@dynamic resourceType;
-@dynamic isTextFile;
- 
-@end
-
-@implementation WXFileSystemMetadata
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"modificationTime",@"modificationTime",
-                    @"size",@"size",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic modificationTime;
-@dynamic size;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.h
deleted file mode 100644
index 1ddd761..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.h
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-//  WXIndexedDBDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXIndexedDBDatabaseWithObjectStores;
-@class WXIndexedDBSecurityOriginWithDatabaseNames;
-@class WXIndexedDBKeyRange;
-
-@protocol WXIndexedDBCommandDelegate;
-
-@interface WXIndexedDBDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXIndexedDBCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-// Param requestId: Request id.
-// Param securityOriginWithDatabaseNames: Frame with database names.
-- (void)databaseNamesLoadedWithRequestId:(NSNumber *)requestId securityOriginWithDatabaseNames:(WXIndexedDBSecurityOriginWithDatabaseNames *)securityOriginWithDatabaseNames;
-// Param requestId: Request id.
-// Param databaseWithObjectStores: Database with an array of object stores.
-- (void)databaseLoadedWithRequestId:(NSNumber *)requestId databaseWithObjectStores:(WXIndexedDBDatabaseWithObjectStores *)databaseWithObjectStores;
-// Param requestId: Request id.
-// Param objectStoreDataEntries: Array of object store data entries.
-// Param hasMore: If true, there are more entries to fetch in the given range.
-- (void)objectStoreDataLoadedWithRequestId:(NSNumber *)requestId objectStoreDataEntries:(NSArray *)objectStoreDataEntries hasMore:(NSNumber *)hasMore;
-// Param requestId: Request id.
-// Param indexDataEntries: Array of index data entries.
-// Param hasMore: If true, there are more entries to fetch in the given range.
-- (void)indexDataLoadedWithRequestId:(NSNumber *)requestId indexDataEntries:(NSArray *)indexDataEntries hasMore:(NSNumber *)hasMore;
-
-@end
-
-@protocol WXIndexedDBCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables events from backend.
-- (void)domain:(WXIndexedDBDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables events from backend.
-- (void)domain:(WXIndexedDBDomain *)domain disableWithCallback:(void (^)(id error))callback;
-
-// Requests database names for given frame's security origin.
-// Param requestId: Request id.
-// Param frameId: Frame id.
-- (void)domain:(WXIndexedDBDomain *)domain requestDatabaseNamesForFrameWithRequestId:(NSNumber *)requestId frameId:(NSString *)frameId callback:(void (^)(id error))callback;
-
-// Requests database with given name in given frame.
-// Param requestId: Request id.
-// Param frameId: Frame id.
-// Param databaseName: Database name.
-- (void)domain:(WXIndexedDBDomain *)domain requestDatabaseWithRequestId:(NSNumber *)requestId frameId:(NSString *)frameId databaseName:(NSString *)databaseName callback:(void (^)(id error))callback;
-
-// Requests data from object store or index.
-// Param requestId: Request id.
-// Param frameId: Frame id.
-// Param databaseName: Database name.
-// Param objectStoreName: Object store name.
-// Param indexName: Index name, empty string for object store data requests.
-// Param skipCount: Number of records to skip.
-// Param pageSize: Number of records to fetch.
-// Param keyRange: Key range.
-- (void)domain:(WXIndexedDBDomain *)domain requestDataWithRequestId:(NSNumber *)requestId frameId:(NSString *)frameId databaseName:(NSString *)databaseName objectStoreName:(NSString *)objectStoreName indexName:(NSString *)indexName skipCount:(NSNumber *)skipCount pageSize:(NSNumber *)pageSize keyRange:(WXIndexedDBKeyRange *)keyRange callback:(void (^)(id error))callback;
-
-@end
-
-@interface WXDebugger (WXIndexedDBDomain)
-
-@property (nonatomic, readonly, strong) WXIndexedDBDomain *indexedDBDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.m
deleted file mode 100644
index 1f593fe..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBDomain.m
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-//  WXIndexedDBDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXIndexedDBDomain.h"
-#import "WXObject.h"
-#import "WXIndexedDBTypes.h"
-
-
-@interface WXIndexedDBDomain ()
-//Commands
-
-@end
-
-@implementation WXIndexedDBDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"IndexedDB";
-}
-
-// Events
-- (void)databaseNamesLoadedWithRequestId:(NSNumber *)requestId securityOriginWithDatabaseNames:(WXIndexedDBSecurityOriginWithDatabaseNames *)securityOriginWithDatabaseNames;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (securityOriginWithDatabaseNames != nil) {
-        [params setObject:[securityOriginWithDatabaseNames WX_JSONObject] forKey:@"securityOriginWithDatabaseNames"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"IndexedDB.databaseNamesLoaded" parameters:params];
-}
-- (void)databaseLoadedWithRequestId:(NSNumber *)requestId databaseWithObjectStores:(WXIndexedDBDatabaseWithObjectStores *)databaseWithObjectStores;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (databaseWithObjectStores != nil) {
-        [params setObject:[databaseWithObjectStores WX_JSONObject] forKey:@"databaseWithObjectStores"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"IndexedDB.databaseLoaded" parameters:params];
-}
-- (void)objectStoreDataLoadedWithRequestId:(NSNumber *)requestId objectStoreDataEntries:(NSArray *)objectStoreDataEntries hasMore:(NSNumber *)hasMore;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (objectStoreDataEntries != nil) {
-        [params setObject:[objectStoreDataEntries WX_JSONObject] forKey:@"objectStoreDataEntries"];
-    }
-    if (hasMore != nil) {
-        [params setObject:[hasMore WX_JSONObject] forKey:@"hasMore"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"IndexedDB.objectStoreDataLoaded" parameters:params];
-}
-- (void)indexDataLoadedWithRequestId:(NSNumber *)requestId indexDataEntries:(NSArray *)indexDataEntries hasMore:(NSNumber *)hasMore;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (indexDataEntries != nil) {
-        [params setObject:[indexDataEntries WX_JSONObject] forKey:@"indexDataEntries"];
-    }
-    if (hasMore != nil) {
-        [params setObject:[hasMore WX_JSONObject] forKey:@"hasMore"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"IndexedDB.indexDataLoaded" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestDatabaseNamesForFrame"] && [self.delegate respondsToSelector:@selector(domain:requestDatabaseNamesForFrameWithRequestId:frameId:callback:)]) {
-        [self.delegate domain:self requestDatabaseNamesForFrameWithRequestId:[params objectForKey:@"requestId"] frameId:[params objectForKey:@"frameId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestDatabase"] && [self.delegate respondsToSelector:@selector(domain:requestDatabaseWithRequestId:frameId:databaseName:callback:)]) {
-        [self.delegate domain:self requestDatabaseWithRequestId:[params objectForKey:@"requestId"] frameId:[params objectForKey:@"frameId"] databaseName:[params objectForKey:@"databaseName"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"requestData"] && [self.delegate respondsToSelector:@selector(domain:requestDataWithRequestId:frameId:databaseName:objectStoreName:indexName:skipCount:pageSize:keyRange:callback:)]) {
-        [self.delegate domain:self requestDataWithRequestId:[params objectForKey:@"requestId"] frameId:[params objectForKey:@"frameId"] databaseName:[params objectForKey:@"databaseName"] objectStoreName:[params objectForKey:@"objectStoreName"] indexName:[params objectForKey:@"indexName"] skipCount:[params objectForKey:@"skipCount"] pageSize:[params objectForKey:@"pageSize"] keyRange:[params objectForKey:@"keyRange"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXIndexedDBDomain)
-
-- (WXIndexedDBDomain *)indexedDBDomain;
-{
-    return [self domainForName:@"IndexedDB"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.h
deleted file mode 100644
index d46a87f..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.h
+++ /dev/null
@@ -1,173 +0,0 @@
-//    
-//  WXIndexedDBTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@class WXRuntimeRemoteObject;
-@class WXIndexedDBKeyPath;
-
-
-// Security origin with database names.
-@interface WXIndexedDBSecurityOriginWithDatabaseNames : WXObject
-
-// Security origin.
-// Type: string
-@property (nonatomic, strong) NSString *securityOrigin;
-
-// Database names for this origin.
-// Type: array
-@property (nonatomic, strong) NSArray *databaseNames;
-
-@end
-
-
-// Database with an array of object stores.
-@interface WXIndexedDBDatabaseWithObjectStores : WXObject
-
-// Database name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Database version.
-// Type: string
-@property (nonatomic, strong) NSString *version;
-
-// Object stores in this database.
-// Type: array
-@property (nonatomic, strong) NSArray *objectStores;
-
-@end
-
-
-// Object store.
-@interface WXIndexedDBObjectStore : WXObject
-
-// Object store name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Object store key path.
-@property (nonatomic, strong) WXIndexedDBKeyPath *keyPath;
-
-// If true, object store has auto increment flag set.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *autoIncrement;
-
-// Indexes in this object store.
-// Type: array
-@property (nonatomic, strong) NSArray *indexes;
-
-@end
-
-
-// Object store index.
-@interface WXIndexedDBObjectStoreIndex : WXObject
-
-// Index name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Index key path.
-@property (nonatomic, strong) WXIndexedDBKeyPath *keyPath;
-
-// If true, index is unique.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *unique;
-
-// If true, index allows multiple entries for a key.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *multiEntry;
-
-@end
-
-
-// Key.
-@interface WXIndexedDBKey : WXObject
-
-// Key type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// Number value.
-// Type: number
-@property (nonatomic, strong) NSNumber *number;
-
-// String value.
-// Type: string
-@property (nonatomic, strong) NSString *string;
-
-// Date value.
-// Type: number
-@property (nonatomic, strong) NSNumber *date;
-
-// Array value.
-// Type: array
-@property (nonatomic, strong) NSArray *array;
-
-@end
-
-
-// Key range.
-@interface WXIndexedDBKeyRange : WXObject
-
-// Lower bound.
-@property (nonatomic, strong) WXIndexedDBKey *lower;
-
-// Upper bound.
-@property (nonatomic, strong) WXIndexedDBKey *upper;
-
-// If true lower bound is open.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *lowerOpen;
-
-// If true upper bound is open.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *upperOpen;
-
-@end
-
-
-// Data entry.
-@interface WXIndexedDBDataEntry : WXObject
-
-// Key.
-@property (nonatomic, strong) WXIndexedDBKey *key;
-
-// Primary key.
-@property (nonatomic, strong) WXIndexedDBKey *primaryKey;
-
-// Value.
-@property (nonatomic, strong) WXRuntimeRemoteObject *value;
-
-@end
-
-
-// Key path.
-@interface WXIndexedDBKeyPath : WXObject
-
-// Key path type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// String value.
-// Type: string
-@property (nonatomic, strong) NSString *string;
-
-// Array value.
-// Type: array
-@property (nonatomic, strong) NSArray *array;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.m
deleted file mode 100644
index 60ad925..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXIndexedDBTypes.m
+++ /dev/null
@@ -1,205 +0,0 @@
-//
-//  WXIndexedDBTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXIndexedDBTypes.h"
-
-@implementation WXIndexedDBSecurityOriginWithDatabaseNames
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"securityOrigin",@"securityOrigin",
-                    @"databaseNames",@"databaseNames",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic securityOrigin;
-@dynamic databaseNames;
- 
-@end
-
-@implementation WXIndexedDBDatabaseWithObjectStores
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"version",@"version",
-                    @"objectStores",@"objectStores",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic version;
-@dynamic objectStores;
- 
-@end
-
-@implementation WXIndexedDBObjectStore
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"keyPath",@"keyPath",
-                    @"autoIncrement",@"autoIncrement",
-                    @"indexes",@"indexes",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic keyPath;
-@dynamic autoIncrement;
-@dynamic indexes;
- 
-@end
-
-@implementation WXIndexedDBObjectStoreIndex
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"keyPath",@"keyPath",
-                    @"unique",@"unique",
-                    @"multiEntry",@"multiEntry",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic keyPath;
-@dynamic unique;
-@dynamic multiEntry;
- 
-@end
-
-@implementation WXIndexedDBKey
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"type",@"type",
-                    @"number",@"number",
-                    @"string",@"string",
-                    @"date",@"date",
-                    @"array",@"array",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic type;
-@dynamic number;
-@dynamic string;
-@dynamic date;
-@dynamic array;
- 
-@end
-
-@implementation WXIndexedDBKeyRange
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"lower",@"lower",
-                    @"upper",@"upper",
-                    @"lowerOpen",@"lowerOpen",
-                    @"upperOpen",@"upperOpen",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic lower;
-@dynamic upper;
-@dynamic lowerOpen;
-@dynamic upperOpen;
- 
-@end
-
-@implementation WXIndexedDBDataEntry
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"key",@"key",
-                    @"primaryKey",@"primaryKey",
-                    @"value",@"value",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic key;
-@dynamic primaryKey;
-@dynamic value;
- 
-@end
-
-@implementation WXIndexedDBKeyPath
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"type",@"type",
-                    @"string",@"string",
-                    @"array",@"array",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic type;
-@dynamic string;
-@dynamic array;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.h
deleted file mode 100644
index 3c168b0..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-//  WXInspectorDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXRuntimeRemoteObject;
-
-@protocol WXInspectorCommandDelegate;
-
-@interface WXInspectorDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXInspectorCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-- (void)evaluateForTestInFrontendWithTestCallId:(NSNumber *)testCallId script:(NSString *)script;
-- (void)inspectWithObject:(WXRuntimeRemoteObject *)object hints:(NSDictionary *)hints;
-
-@end
-
-@protocol WXInspectorCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables inspector domain notifications.
-- (void)domain:(WXInspectorDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables inspector domain notifications.
-- (void)domain:(WXInspectorDomain *)domain disableWithCallback:(void (^)(id error))callback;
-
-@end
-
-@interface WXDebugger (WXInspectorDomain)
-
-@property (nonatomic, readonly, strong) WXInspectorDomain *inspectorDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.m
deleted file mode 100644
index c3a3cc1..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXInspectorDomain.m
+++ /dev/null
@@ -1,87 +0,0 @@
-//
-//  WXInspectorDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXInspectorDomain.h"
-#import "WXObject.h"
-#import "WXRuntimeTypes.h"
-
-
-@interface WXInspectorDomain ()
-//Commands
-
-@end
-
-@implementation WXInspectorDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Inspector";
-}
-
-// Events
-- (void)evaluateForTestInFrontendWithTestCallId:(NSNumber *)testCallId script:(NSString *)script;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (testCallId != nil) {
-        [params setObject:[testCallId WX_JSONObject] forKey:@"testCallId"];
-    }
-    if (script != nil) {
-        [params setObject:[script WX_JSONObject] forKey:@"script"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Inspector.evaluateForTestInFrontend" parameters:params];
-}
-- (void)inspectWithObject:(WXRuntimeRemoteObject *)object hints:(NSDictionary *)hints;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (object != nil) {
-        [params setObject:[object WX_JSONObject] forKey:@"object"];
-    }
-    if (hints != nil) {
-        [params setObject:[hints WX_JSONObject] forKey:@"hints"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Inspector.inspect" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXInspectorDomain)
-
-- (WXInspectorDomain *)inspectorDomain;
-{
-    return [self domainForName:@"Inspector"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.h
deleted file mode 100644
index 45db0fb..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.h
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-//  WXMemoryDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXMemoryMemoryBlock;
-@class WXMemoryStringStatistics;
-
-@protocol WXMemoryCommandDelegate;
-
-@interface WXMemoryDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXMemoryCommandDelegate, WXCommandDelegate> delegate;
-
-@end
-
-@protocol WXMemoryCommandDelegate <WXCommandDelegate>
-@optional
-- (void)domain:(WXMemoryDomain *)domain getDOMNodeCountWithCallback:(void (^)(NSArray *domGroups, WXMemoryStringStatistics *strings, id error))callback;
-// Callback Param distribution: An object describing all memory allocated by the process
-- (void)domain:(WXMemoryDomain *)domain getProcessMemoryDistributionWithCallback:(void (^)(WXMemoryMemoryBlock *distribution, id error))callback;
-
-@end
-
-@interface WXDebugger (WXMemoryDomain)
-
-@property (nonatomic, readonly, strong) WXMemoryDomain *memoryDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.m
deleted file mode 100644
index ffdf362..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryDomain.m
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-//  WXMemoryDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXMemoryDomain.h"
-#import "WXObject.h"
-#import "WXMemoryTypes.h"
-
-
-@interface WXMemoryDomain ()
-//Commands
-
-@end
-
-@implementation WXMemoryDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Memory";
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"getDOMNodeCount"] && [self.delegate respondsToSelector:@selector(domain:getDOMNodeCountWithCallback:)]) {
-        [self.delegate domain:self getDOMNodeCountWithCallback:^(NSArray *domGroups, WXMemoryStringStatistics *strings, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (domGroups != nil) {
-                [params setObject:domGroups forKey:@"domGroups"];
-            }
-            if (strings != nil) {
-                [params setObject:strings forKey:@"strings"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getProcessMemoryDistribution"] && [self.delegate respondsToSelector:@selector(domain:getProcessMemoryDistributionWithCallback:)]) {
-        [self.delegate domain:self getProcessMemoryDistributionWithCallback:^(WXMemoryMemoryBlock *distribution, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (distribution != nil) {
-                [params setObject:distribution forKey:@"distribution"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXMemoryDomain)
-
-- (WXMemoryDomain *)memoryDomain;
-{
-    return [self domainForName:@"Memory"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.h
deleted file mode 100644
index 7d0e51c..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.h
+++ /dev/null
@@ -1,91 +0,0 @@
-//    
-//  WXMemoryTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// Number of nodes with given name.
-@interface WXMemoryNodeCount : WXObject
-
-// Type: string
-@property (nonatomic, strong) NSString *nodeName;
-
-// Type: integer
-@property (nonatomic, strong) NSNumber *count;
-
-@end
-
-
-// Number of JS event listeners by event type.
-@interface WXMemoryListenerCount : WXObject
-
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// Type: integer
-@property (nonatomic, strong) NSNumber *count;
-
-@end
-
-
-// Character data statistics for the page.
-@interface WXMemoryStringStatistics : WXObject
-
-// Type: integer
-@property (nonatomic, strong) NSNumber *dom;
-
-// Type: integer
-@property (nonatomic, strong) NSNumber *js;
-
-// Type: integer
-@property (nonatomic, strong) NSNumber *shared;
-
-@end
-
-
-@interface WXMemoryDOMGroup : WXObject
-
-// Type: integer
-@property (nonatomic, strong) NSNumber *size;
-
-// Type: string
-@property (nonatomic, strong) NSString *title;
-
-// Type: string
-@property (nonatomic, strong) NSString *documentURI;
-
-// Type: array
-@property (nonatomic, strong) NSArray *nodeCount;
-
-// Type: array
-@property (nonatomic, strong) NSArray *listenerCount;
-
-@end
-
-
-@interface WXMemoryMemoryBlock : WXObject
-
-// Size of the block in bytes if available
-// Type: number
-@property (nonatomic, strong) NSNumber *size;
-
-// Unique name used to identify the component that allocated this block
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Type: array
-@property (nonatomic, strong) NSArray *children;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.m
deleted file mode 100644
index 1746d45..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXMemoryTypes.m
+++ /dev/null
@@ -1,128 +0,0 @@
-//
-//  WXMemoryTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXMemoryTypes.h"
-
-@implementation WXMemoryNodeCount
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"nodeName",@"nodeName",
-                    @"count",@"count",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic nodeName;
-@dynamic count;
- 
-@end
-
-@implementation WXMemoryListenerCount
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"type",@"type",
-                    @"count",@"count",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic type;
-@dynamic count;
- 
-@end
-
-@implementation WXMemoryStringStatistics
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"dom",@"dom",
-                    @"js",@"js",
-                    @"shared",@"shared",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic dom;
-@dynamic js;
-@dynamic shared;
- 
-@end
-
-@implementation WXMemoryDOMGroup
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"size",@"size",
-                    @"title",@"title",
-                    @"documentURI",@"documentURI",
-                    @"nodeCount",@"nodeCount",
-                    @"listenerCount",@"listenerCount",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic size;
-@dynamic title;
-@dynamic documentURI;
-@dynamic nodeCount;
-@dynamic listenerCount;
- 
-@end
-
-@implementation WXMemoryMemoryBlock
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"size",@"size",
-                    @"name",@"name",
-                    @"children",@"children",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic size;
-@dynamic name;
-@dynamic children;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.h
deleted file mode 100644
index 7478eae..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.h
+++ /dev/null
@@ -1,175 +0,0 @@
-//
-//  WXNetworkDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXNetworkWebSocketResponse;
-@class WXNetworkRequest;
-@class WXNetworkWebSocketRequest;
-@class WXNetworkResponse;
-@class WXNetworkInitiator;
-@class WXNetworkCachedResource;
-@class WXNetworkWebSocketFrame;
-
-@protocol WXNetworkCommandDelegate;
-
-// Network domain allows tracking network activities of the page. It exposes information about http, file, data and other requests and responses, their headers, bodies, timing, etc.
-@interface WXNetworkDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXNetworkCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-
-// Fired when page is about to send HTTP request.
-// Param requestId: Request identifier.
-// Param frameId: Frame identifier.
-// Param loaderId: Loader identifier.
-// Param documentURL: URL of the document this request is loaded for.
-// Param request: Request data.
-// Param timestamp: Timestamp.
-// Param initiator: Request initiator.
-// Param redirectResponse: Redirect response data.
-- (void)requestWillBeSentWithRequestId:(NSString *)requestId frameId:(NSString *)frameId loaderId:(NSString *)loaderId documentURL:(NSString *)documentURL request:(WXNetworkRequest *)request timestamp:(NSNumber *)timestamp initiator:(WXNetworkInitiator *)initiator redirectResponse:(WXNetworkResponse *)redirectResponse;
-
-// Fired if request ended up loading from cache.
-// Param requestId: Request identifier.
-- (void)requestServedFromCacheWithRequestId:(NSString *)requestId;
-
-// Fired when HTTP response is available.
-// Param requestId: Request identifier.
-// Param frameId: Frame identifier.
-// Param loaderId: Loader identifier.
-// Param timestamp: Timestamp.
-// Param type: Resource type.
-// Param response: Response data.
-- (void)responseReceivedWithRequestId:(NSString *)requestId frameId:(NSString *)frameId loaderId:(NSString *)loaderId timestamp:(NSNumber *)timestamp type:(NSString *)type response:(WXNetworkResponse *)response;
-
-// Fired when data chunk was received over the network.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-// Param dataLength: Data chunk length.
-// Param encodedDataLength: Actual bytes received (might be less than dataLength for compressed encodings).
-- (void)dataReceivedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp dataLength:(NSNumber *)dataLength encodedDataLength:(NSNumber *)encodedDataLength;
-
-// Fired when HTTP request has finished loading.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-- (void)loadingFinishedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp;
-
-// Fired when HTTP request has failed to load.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-// Param errorText: User friendly error message.
-// Param canceled: True if loading was canceled.
-- (void)loadingFailedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp errorText:(NSString *)errorText canceled:(NSNumber *)canceled;
-
-// Fired when HTTP request has been served from memory cache.
-// Param requestId: Request identifier.
-// Param frameId: Frame identifier.
-// Param loaderId: Loader identifier.
-// Param documentURL: URL of the document this request is loaded for.
-// Param timestamp: Timestamp.
-// Param initiator: Request initiator.
-// Param resource: Cached resource data.
-- (void)requestServedFromMemoryCacheWithRequestId:(NSString *)requestId frameId:(NSString *)frameId loaderId:(NSString *)loaderId documentURL:(NSString *)documentURL timestamp:(NSNumber *)timestamp initiator:(WXNetworkInitiator *)initiator resource:(WXNetworkCachedResource *)resource;
-
-// Fired when WebSocket is about to initiate handshake.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-// Param request: WebSocket request data.
-- (void)webSocketWillSendHandshakeRequestWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp request:(WXNetworkWebSocketRequest *)request;
-
-// Fired when WebSocket handshake response becomes available.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-// Param response: WebSocket response data.
-- (void)webSocketHandshakeResponseReceivedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp response:(WXNetworkWebSocketResponse *)response;
-
-// Fired upon WebSocket creation.
-// Param requestId: Request identifier.
-// Param url: WebSocket request URL.
-- (void)webSocketCreatedWithRequestId:(NSString *)requestId url:(NSString *)url;
-
-// Fired when WebSocket is closed.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-- (void)webSocketClosedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp;
-
-// Fired when WebSocket frame is received.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-// Param response: WebSocket response data.
-- (void)webSocketFrameReceivedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp response:(WXNetworkWebSocketFrame *)response;
-
-// Fired when WebSocket frame error occurs.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-// Param errorMessage: WebSocket frame error message.
-- (void)webSocketFrameErrorWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp errorMessage:(NSString *)errorMessage;
-
-// Fired when WebSocket frame is sent.
-// Param requestId: Request identifier.
-// Param timestamp: Timestamp.
-// Param response: WebSocket response data.
-- (void)webSocketFrameSentWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp response:(WXNetworkWebSocketFrame *)response;
-
-@end
-
-@protocol WXNetworkCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables network tracking, network events will now be delivered to the client.
-- (void)domain:(WXNetworkDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables network tracking, prevents network events from being sent to the client.
-- (void)domain:(WXNetworkDomain *)domain disableWithCallback:(void (^)(id error))callback;
-
-// Allows overriding user agent with the given string.
-// Param userAgent: User agent to use.
-- (void)domain:(WXNetworkDomain *)domain setUserAgentOverrideWithUserAgent:(NSString *)userAgent callback:(void (^)(id error))callback;
-
-// Specifies whether to always send extra HTTP headers with the requests from this page.
-// Param headers: Map with extra HTTP headers.
-- (void)domain:(WXNetworkDomain *)domain setExtraHTTPHeadersWithHeaders:(NSDictionary *)headers callback:(void (^)(id error))callback;
-
-// Returns content served for the given request.
-// Param requestId: Identifier of the network request to get content for.
-// Callback Param body: Response body.
-// Callback Param base64Encoded: True, if content was sent as base64.
-- (void)domain:(WXNetworkDomain *)domain getResponseBodyWithRequestId:(NSString *)requestId callback:(void (^)(NSString *body, NSNumber *base64Encoded, id error))callback;
-
-// Tells whether clearing browser cache is supported.
-// Callback Param result: True if browser cache can be cleared.
-- (void)domain:(WXNetworkDomain *)domain canClearBrowserCacheWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-// Clears browser cache.
-- (void)domain:(WXNetworkDomain *)domain clearBrowserCacheWithCallback:(void (^)(id error))callback;
-
-// Tells whether clearing browser cookies is supported.
-// Callback Param result: True if browser cookies can be cleared.
-- (void)domain:(WXNetworkDomain *)domain canClearBrowserCookiesWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-// Clears browser cookies.
-- (void)domain:(WXNetworkDomain *)domain clearBrowserCookiesWithCallback:(void (^)(id error))callback;
-
-// Toggles ignoring cache for each request. If <code>true</code>, cache will not be used.
-// Param cacheDisabled: Cache disabled state.
-- (void)domain:(WXNetworkDomain *)domain setCacheDisabledWithCacheDisabled:(NSNumber *)cacheDisabled callback:(void (^)(id error))callback;
-
-@end
-
-@interface WXDebugger (WXNetworkDomain)
-
-@property (nonatomic, readonly, strong) WXNetworkDomain *networkDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.m
deleted file mode 100644
index 9f7e401..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkDomain.m
+++ /dev/null
@@ -1,406 +0,0 @@
-//
-//  WXNetworkDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXNetworkDomain.h"
-#import "WXObject.h"
-#import "WXNetworkTypes.h"
-#import "WXSourceDebuggerDomainController.h"
-
-
-@interface WXNetworkDomain ()
-//Commands
-
-@end
-
-@implementation WXNetworkDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Network";
-}
-
-// Events
-
-// Fired when page is about to send HTTP request.
-- (void)requestWillBeSentWithRequestId:(NSString *)requestId frameId:(NSString *)frameId loaderId:(NSString *)loaderId documentURL:(NSString *)documentURL request:(WXNetworkRequest *)request timestamp:(NSNumber *)timestamp initiator:(WXNetworkInitiator *)initiator redirectResponse:(WXNetworkResponse *)redirectResponse;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:8];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (frameId != nil) {
-        [params setObject:[frameId WX_JSONObject] forKey:@"frameId"];
-    }
-    if (loaderId != nil) {
-        [params setObject:[loaderId WX_JSONObject] forKey:@"loaderId"];
-    }
-    if (documentURL != nil) {
-        [params setObject:[documentURL WX_JSONObject] forKey:@"documentURL"];
-    }
-    if (request != nil) {
-        [params setObject:[request WX_JSONObject] forKey:@"request"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (initiator != nil) {
-        [params setObject:[initiator WX_JSONObject] forKey:@"initiator"];
-    }
-    if (redirectResponse != nil) {
-        [params setObject:[redirectResponse WX_JSONObject] forKey:@"redirectResponse"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.requestWillBeSent" parameters:params];
-}
-
-// Fired if request ended up loading from cache.
-- (void)requestServedFromCacheWithRequestId:(NSString *)requestId;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.requestServedFromCache" parameters:params];
-}
-
-// Fired when HTTP response is available.
-- (void)responseReceivedWithRequestId:(NSString *)requestId frameId:(NSString *)frameId loaderId:(NSString *)loaderId timestamp:(NSNumber *)timestamp type:(NSString *)type response:(WXNetworkResponse *)response;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:6];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (frameId != nil) {
-        [params setObject:[frameId WX_JSONObject] forKey:@"frameId"];
-    }
-    if (loaderId != nil) {
-        [params setObject:[loaderId WX_JSONObject] forKey:@"loaderId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (type != nil) {
-        [params setObject:[type WX_JSONObject] forKey:@"type"];
-    }
-    if (response != nil) {
-        [params setObject:[response WX_JSONObject] forKey:@"response"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.responseReceived" parameters:params];
-    
-    [[WXSourceDebuggerDomainController defaultInstance] getScriptSourceTreeWithId:requestId url:response.url isContentScript:[NSNumber numberWithBool:NO] sourceMapURL:@""];
-}
-
-// Fired when data chunk was received over the network.
-- (void)dataReceivedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp dataLength:(NSNumber *)dataLength encodedDataLength:(NSNumber *)encodedDataLength;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:4];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (dataLength != nil) {
-        [params setObject:[dataLength WX_JSONObject] forKey:@"dataLength"];
-    }
-    if (encodedDataLength != nil) {
-        [params setObject:[encodedDataLength WX_JSONObject] forKey:@"encodedDataLength"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.dataReceived" parameters:params];
-}
-
-// Fired when HTTP request has finished loading.
-- (void)loadingFinishedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.loadingFinished" parameters:params];
-}
-
-// Fired when HTTP request has failed to load.
-- (void)loadingFailedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp errorText:(NSString *)errorText canceled:(NSNumber *)canceled;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:4];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (errorText != nil) {
-        [params setObject:[errorText WX_JSONObject] forKey:@"errorText"];
-    }
-    if (canceled != nil) {
-        [params setObject:[canceled WX_JSONObject] forKey:@"canceled"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.loadingFailed" parameters:params];
-}
-
-// Fired when HTTP request has been served from memory cache.
-- (void)requestServedFromMemoryCacheWithRequestId:(NSString *)requestId frameId:(NSString *)frameId loaderId:(NSString *)loaderId documentURL:(NSString *)documentURL timestamp:(NSNumber *)timestamp initiator:(WXNetworkInitiator *)initiator resource:(WXNetworkCachedResource *)resource;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:7];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (frameId != nil) {
-        [params setObject:[frameId WX_JSONObject] forKey:@"frameId"];
-    }
-    if (loaderId != nil) {
-        [params setObject:[loaderId WX_JSONObject] forKey:@"loaderId"];
-    }
-    if (documentURL != nil) {
-        [params setObject:[documentURL WX_JSONObject] forKey:@"documentURL"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (initiator != nil) {
-        [params setObject:[initiator WX_JSONObject] forKey:@"initiator"];
-    }
-    if (resource != nil) {
-        [params setObject:[resource WX_JSONObject] forKey:@"resource"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.requestServedFromMemoryCache" parameters:params];
-}
-
-// Fired when WebSocket is about to initiate handshake.
-- (void)webSocketWillSendHandshakeRequestWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp request:(WXNetworkWebSocketRequest *)request;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (request != nil) {
-        [params setObject:[request WX_JSONObject] forKey:@"request"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.webSocketWillSendHandshakeRequest" parameters:params];
-}
-
-// Fired when WebSocket handshake response becomes available.
-- (void)webSocketHandshakeResponseReceivedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp response:(WXNetworkWebSocketResponse *)response;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (response != nil) {
-        [params setObject:[response WX_JSONObject] forKey:@"response"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.webSocketHandshakeResponseReceived" parameters:params];
-}
-
-// Fired upon WebSocket creation.
-- (void)webSocketCreatedWithRequestId:(NSString *)requestId url:(NSString *)url;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (url != nil) {
-        [params setObject:[url WX_JSONObject] forKey:@"url"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.webSocketCreated" parameters:params];
-}
-
-// Fired when WebSocket is closed.
-- (void)webSocketClosedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.webSocketClosed" parameters:params];
-}
-
-// Fired when WebSocket frame is received.
-- (void)webSocketFrameReceivedWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp response:(WXNetworkWebSocketFrame *)response;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (response != nil) {
-        [params setObject:[response WX_JSONObject] forKey:@"response"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.webSocketFrameReceived" parameters:params];
-}
-
-// Fired when WebSocket frame error occurs.
-- (void)webSocketFrameErrorWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp errorMessage:(NSString *)errorMessage;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (errorMessage != nil) {
-        [params setObject:[errorMessage WX_JSONObject] forKey:@"errorMessage"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.webSocketFrameError" parameters:params];
-}
-
-// Fired when WebSocket frame is sent.
-- (void)webSocketFrameSentWithRequestId:(NSString *)requestId timestamp:(NSNumber *)timestamp response:(WXNetworkWebSocketFrame *)response;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (requestId != nil) {
-        [params setObject:[requestId WX_JSONObject] forKey:@"requestId"];
-    }
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    if (response != nil) {
-        [params setObject:[response WX_JSONObject] forKey:@"response"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Network.webSocketFrameSent" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"setUserAgentOverride"] && [self.delegate respondsToSelector:@selector(domain:setUserAgentOverrideWithUserAgent:callback:)]) {
-        [self.delegate domain:self setUserAgentOverrideWithUserAgent:[params objectForKey:@"userAgent"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"setExtraHTTPHeaders"] && [self.delegate respondsToSelector:@selector(domain:setExtraHTTPHeadersWithHeaders:callback:)]) {
-        [self.delegate domain:self setExtraHTTPHeadersWithHeaders:[params objectForKey:@"headers"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"getResponseBody"] && [self.delegate respondsToSelector:@selector(domain:getResponseBodyWithRequestId:callback:)]) {
-        [self.delegate domain:self getResponseBodyWithRequestId:[params objectForKey:@"requestId"] callback:^(NSString *body, NSNumber *base64Encoded, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (body != nil) {
-                [params setObject:body forKey:@"body"];
-            }
-            if (base64Encoded != nil) {
-                [params setObject:base64Encoded forKey:@"base64Encoded"];
-            }
-
-            responseCallback(params, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"canClearBrowserCache"] && [self.delegate respondsToSelector:@selector(domain:canClearBrowserCacheWithCallback:)]) {
-        [self.delegate domain:self canClearBrowserCacheWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"clearBrowserCache"] && [self.delegate respondsToSelector:@selector(domain:clearBrowserCacheWithCallback:)]) {
-        [self.delegate domain:self clearBrowserCacheWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"canClearBrowserCookies"] && [self.delegate respondsToSelector:@selector(domain:canClearBrowserCookiesWithCallback:)]) {
-        [self.delegate domain:self canClearBrowserCookiesWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"clearBrowserCookies"] && [self.delegate respondsToSelector:@selector(domain:clearBrowserCookiesWithCallback:)]) {
-        [self.delegate domain:self clearBrowserCookiesWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }
-    else if ([methodName isEqualToString:@"setCacheDisabled"] && [self.delegate respondsToSelector:@selector(domain:setCacheDisabledWithCacheDisabled:callback:)]) {
-        [self.delegate domain:self setCacheDisabledWithCacheDisabled:[params objectForKey:@"cacheDisabled"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    }
-    else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXNetworkDomain)
-
-- (WXNetworkDomain *)networkDomain;
-{
-    return [self domainForName:@"Network"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.h
deleted file mode 100644
index 83e7dfd..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.h
+++ /dev/null
@@ -1,235 +0,0 @@
-//    
-//  WXNetworkTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// Timing information for the request.
-@interface WXNetworkResourceTiming : WXObject
-
-// Timing's requestTime is a baseline in seconds, while the other numbers are ticks in milliseconds relatively to this requestTime.
-// Type: number
-@property (nonatomic, strong) NSNumber *requestTime;
-
-// Started resolving proxy.
-// Type: number
-@property (nonatomic, strong) NSNumber *proxyStart;
-
-// Finished resolving proxy.
-// Type: number
-@property (nonatomic, strong) NSNumber *proxyEnd;
-
-// Started DNS address resolve.
-// Type: number
-@property (nonatomic, strong) NSNumber *dnsStart;
-
-// Finished DNS address resolve.
-// Type: number
-@property (nonatomic, strong) NSNumber *dnsEnd;
-
-// Started connecting to the remote host.
-// Type: number
-@property (nonatomic, strong) NSNumber *connectStart;
-
-// Connected to the remote host.
-// Type: number
-@property (nonatomic, strong) NSNumber *connectEnd;
-
-// Started SSL handshake.
-// Type: number
-@property (nonatomic, strong) NSNumber *sslStart;
-
-// Finished SSL handshake.
-// Type: number
-@property (nonatomic, strong) NSNumber *sslEnd;
-
-// Started sending request.
-// Type: number
-@property (nonatomic, strong) NSNumber *sendStart;
-
-// Finished sending request.
-// Type: number
-@property (nonatomic, strong) NSNumber *sendEnd;
-
-// Finished receiving response headers.
-// Type: number
-@property (nonatomic, strong) NSNumber *receiveHeadersEnd;
-
-@end
-
-
-// HTTP request data.
-@interface WXNetworkRequest : WXObject
-
-// Request URL.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// HTTP request method.
-// Type: string
-@property (nonatomic, strong) NSString *method;
-
-// HTTP request headers.
-@property (nonatomic, strong) NSDictionary *headers;
-
-// HTTP POST request data.
-// Type: string
-@property (nonatomic, strong) NSString *postData;
-
-@end
-
-
-// HTTP response data.
-@interface WXNetworkResponse : WXObject
-
-// Response URL.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// HTTP response status code.
-// Type: number
-@property (nonatomic, strong) NSNumber *status;
-
-// HTTP response status text.
-// Type: string
-@property (nonatomic, strong) NSString *statusText;
-
-// HTTP response headers.
-@property (nonatomic, strong) NSDictionary *headers;
-
-// HTTP response headers text.
-// Type: string
-@property (nonatomic, strong) NSString *headersText;
-
-// Resource mimeType as determined by the browser.
-// Type: string
-@property (nonatomic, strong) NSString *mimeType;
-
-// Refined HTTP request headers that were actually transmitted over the network.
-@property (nonatomic, strong) NSDictionary *requestHeaders;
-
-// HTTP request headers text.
-// Type: string
-@property (nonatomic, strong) NSString *requestHeadersText;
-
-// Specifies whether physical connection was actually reused for this request.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *connectionReused;
-
-// Physical connection id that was actually used for this request.
-// Type: number
-@property (nonatomic, strong) NSNumber *connectionId;
-
-// Specifies that the request was served from the disk cache.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *fromDiskCache;
-
-// Timing information for the given request.
-@property (nonatomic, strong) WXNetworkResourceTiming *timing;
-
-@end
-
-
-// WebSocket request data.
-@interface WXNetworkWebSocketRequest : WXObject
-
-// HTTP response status text.
-// Type: string
-@property (nonatomic, strong) NSString *requestKey3;
-
-// HTTP response headers.
-@property (nonatomic, strong) NSDictionary *headers;
-
-@end
-
-
-// WebSocket response data.
-@interface WXNetworkWebSocketResponse : WXObject
-
-// HTTP response status code.
-// Type: number
-@property (nonatomic, strong) NSNumber *status;
-
-// HTTP response status text.
-// Type: string
-@property (nonatomic, strong) NSString *statusText;
-
-// HTTP response headers.
-@property (nonatomic, strong) NSDictionary *headers;
-
-// Challenge response.
-// Type: string
-@property (nonatomic, strong) NSString *challengeResponse;
-
-@end
-
-
-// WebSocket frame data.
-@interface WXNetworkWebSocketFrame : WXObject
-
-// WebSocket frame opcode.
-// Type: number
-@property (nonatomic, strong) NSNumber *opcode;
-
-// WebSocke frame mask.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *mask;
-
-// WebSocke frame payload data.
-// Type: string
-@property (nonatomic, strong) NSString *payloadData;
-
-@end
-
-
-// Information about the cached resource.
-@interface WXNetworkCachedResource : WXObject
-
-// Resource URL.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// Type of this resource.
-@property (nonatomic, strong) NSString *type;
-
-// Cached response data.
-@property (nonatomic, strong) WXNetworkResponse *response;
-
-// Cached response body size.
-// Type: number
-@property (nonatomic, strong) NSNumber *bodySize;
-
-@end
-
-
-// Information about the request initiator.
-@interface WXNetworkInitiator : WXObject
-
-// Type of this initiator.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// Initiator JavaScript stack trace, set for Script only.
-@property (nonatomic, strong) NSArray *stackTrace;
-
-// Initiator URL, set for Parser type only.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// Initiator line number, set for Parser type only.
-// Type: number
-@property (nonatomic, strong) NSNumber *lineNumber;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.m
deleted file mode 100644
index ea15ec1..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXNetworkTypes.m
+++ /dev/null
@@ -1,239 +0,0 @@
-//
-//  WXNetworkTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXNetworkTypes.h"
-
-@implementation WXNetworkResourceTiming
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"requestTime",@"requestTime",
-                    @"proxyStart",@"proxyStart",
-                    @"proxyEnd",@"proxyEnd",
-                    @"dnsStart",@"dnsStart",
-                    @"dnsEnd",@"dnsEnd",
-                    @"connectStart",@"connectStart",
-                    @"connectEnd",@"connectEnd",
-                    @"sslStart",@"sslStart",
-                    @"sslEnd",@"sslEnd",
-                    @"sendStart",@"sendStart",
-                    @"sendEnd",@"sendEnd",
-                    @"receiveHeadersEnd",@"receiveHeadersEnd",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic requestTime;
-@dynamic proxyStart;
-@dynamic proxyEnd;
-@dynamic dnsStart;
-@dynamic dnsEnd;
-@dynamic connectStart;
-@dynamic connectEnd;
-@dynamic sslStart;
-@dynamic sslEnd;
-@dynamic sendStart;
-@dynamic sendEnd;
-@dynamic receiveHeadersEnd;
- 
-@end
-
-@implementation WXNetworkRequest
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"url",@"url",
-                    @"method",@"method",
-                    @"headers",@"headers",
-                    @"postData",@"postData",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic url;
-@dynamic method;
-@dynamic headers;
-@dynamic postData;
- 
-@end
-
-@implementation WXNetworkResponse
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"url",@"url",
-                    @"status",@"status",
-                    @"statusText",@"statusText",
-                    @"headers",@"headers",
-                    @"headersText",@"headersText",
-                    @"mimeType",@"mimeType",
-                    @"requestHeaders",@"requestHeaders",
-                    @"requestHeadersText",@"requestHeadersText",
-                    @"connectionReused",@"connectionReused",
-                    @"connectionId",@"connectionId",
-                    @"fromDiskCache",@"fromDiskCache",
-                    @"timing",@"timing",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic url;
-@dynamic status;
-@dynamic statusText;
-@dynamic headers;
-@dynamic headersText;
-@dynamic mimeType;
-@dynamic requestHeaders;
-@dynamic requestHeadersText;
-@dynamic connectionReused;
-@dynamic connectionId;
-@dynamic fromDiskCache;
-@dynamic timing;
- 
-@end
-
-@implementation WXNetworkWebSocketRequest
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"requestKey3",@"requestKey3",
-                    @"headers",@"headers",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic requestKey3;
-@dynamic headers;
- 
-@end
-
-@implementation WXNetworkWebSocketResponse
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"status",@"status",
-                    @"statusText",@"statusText",
-                    @"headers",@"headers",
-                    @"challengeResponse",@"challengeResponse",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic status;
-@dynamic statusText;
-@dynamic headers;
-@dynamic challengeResponse;
- 
-@end
-
-@implementation WXNetworkWebSocketFrame
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"opcode",@"opcode",
-                    @"mask",@"mask",
-                    @"payloadData",@"payloadData",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic opcode;
-@dynamic mask;
-@dynamic payloadData;
- 
-@end
-
-@implementation WXNetworkCachedResource
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"url",@"url",
-                    @"type",@"type",
-                    @"response",@"response",
-                    @"bodySize",@"bodySize",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic url;
-@dynamic type;
-@dynamic response;
-@dynamic bodySize;
- 
-@end
-
-@implementation WXNetworkInitiator
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"type",@"type",
-                    @"stackTrace",@"stackTrace",
-                    @"url",@"url",
-                    @"lineNumber",@"lineNumber",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic type;
-@dynamic stackTrace;
-@dynamic url;
-@dynamic lineNumber;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomain.h
deleted file mode 100644
index 05e386b..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomain.h
+++ /dev/null
@@ -1,175 +0,0 @@
-//
-//  WXPageDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXPageFrame;
-@class WXPageFrameResourceTree;
-
-@protocol WXPageCommandDelegate;
-
-// Actions and events related to the inspected page belong to the page domain.
-@interface WXPageDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXPageCommandDelegate, WXCommandDelegate> delegate;
-
-@property (nonatomic, assign) CGFloat screenScaleFactor;
-
-// Events
-- (void)domContentEventFiredWithTimestamp:(NSNumber *)timestamp;
-- (void)loadEventFiredWithTimestamp:(NSNumber *)timestamp;
-
-// Fired once navigation of the frame has completed. Frame is now associated with the new loader.
-// Param frame: Frame object.
-- (void)frameNavigatedWithFrame:(WXPageFrame *)frame;
-
-// Fired when frame has been detached from its parent.
-// Param frameId: Id of the frame that has been detached.
-- (void)frameDetachedWithFrameId:(NSString *)frameId;
-
-//yangshengtao test
-- (void)workerRegistrationUpdated;
-- (void)workerVersionUpdated;
-
-@end
-
-@protocol WXPageCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables page domain notifications.
-- (void)domain:(WXPageDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables page domain notifications.
-- (void)domain:(WXPageDomain *)domain disableWithCallback:(void (^)(id error))callback;
-// Callback Param identifier: Identifier of the added script.
-- (void)domain:(WXPageDomain *)domain addScriptToEvaluateOnLoadWithScriptSource:(NSString *)scriptSource callback:(void (^)(NSString *identifier, id error))callback;
-- (void)domain:(WXPageDomain *)domain removeScriptToEvaluateOnLoadWithIdentifier:(NSString *)identifier callback:(void (^)(id error))callback;
-
-// Reloads given page optionally ignoring the cache.
-// Param ignoreCache: If true, browser cache is ignored (as if the user pressed Shift+refresh).
-// Param scriptToEvaluateOnLoad: If set, the script will be injected into all frames of the inspected page after reload.
-- (void)domain:(WXPageDomain *)domain reloadWithIgnoreCache:(NSNumber *)ignoreCache scriptToEvaluateOnLoad:(NSString *)scriptToEvaluateOnLoad callback:(void (^)(id error))callback;
-
-// Navigates current page to the given URL.
-// Param url: URL to navigate the page to.
-- (void)domain:(WXPageDomain *)domain navigateWithUrl:(NSString *)url callback:(void (^)(id error))callback;
-
-// Returns all browser cookies. Depending on the backend support, will either return detailed cookie information in the <code>cookie</code> field or string cookie representation using <code>cookieString</code>.
-// Callback Param cookies: Array of cookie objects.
-// Callback Param cookiesString: document.cookie string representation of the cookies.
-- (void)domain:(WXPageDomain *)domain getCookiesWithCallback:(void (^)(NSArray *cookies, NSString *cookiesString, id error))callback;
-
-// Deletes browser cookie with given name for the given domain.
-// Param cookieName: Name of the cookie to remove.
-// Param domain: Domain of the cookie to remove.
-- (void)domain:(WXPageDomain *)domain deleteCookieWithCookieName:(NSString *)cookieName domain:(NSString *)domain callback:(void (^)(id error))callback;
-
-// Returns present frame / resource tree structure.
-// Callback Param frameTree: Present frame / resource tree structure.
-- (void)domain:(WXPageDomain *)domain getResourceTreeWithCallback:(void (^)(WXPageFrameResourceTree *frameTree, id error))callback;
-
-// Returns content of the given resource.
-// Param frameId: Frame id to get resource for.
-// Param url: URL of the resource to get content for.
-// Callback Param content: Resource content.
-// Callback Param base64Encoded: True, if content was served as base64.
-- (void)domain:(WXPageDomain *)domain getResourceContentWithFrameId:(NSString *)frameId url:(NSString *)url callback:(void (^)(NSString *content, NSNumber *base64Encoded, id error))callback;
-
-// Searches for given string in resource content.
-// Param frameId: Frame id for resource to search in.
-// Param url: URL of the resource to search in.
-// Param query: String to search for.
-// Param caseSensitive: If true, search is case sensitive.
-// Param isRegex: If true, treats string parameter as regex.
-// Callback Param result: List of search matches.
-- (void)domain:(WXPageDomain *)domain searchInResourceWithFrameId:(NSString *)frameId url:(NSString *)url query:(NSString *)query caseSensitive:(NSNumber *)caseSensitive isRegex:(NSNumber *)isRegex callback:(void (^)(NSArray *result, id error))callback;
-
-// Searches for given string in frame / resource tree structure.
-// Param text: String to search for.
-// Param caseSensitive: If true, search is case sensitive.
-// Param isRegex: If true, treats string parameter as regex.
-// Callback Param result: List of search results.
-- (void)domain:(WXPageDomain *)domain searchInResourcesWithText:(NSString *)text caseSensitive:(NSNumber *)caseSensitive isRegex:(NSNumber *)isRegex callback:(void (^)(NSArray *result, id error))callback;
-
-// Sets given markup as the document's HTML.
-// Param frameId: Frame id to set HTML for.
-// Param html: HTML content to set.
-- (void)domain:(WXPageDomain *)domain setDocumentContentWithFrameId:(NSString *)frameId html:(NSString *)html callback:(void (^)(id error))callback;
-
-// Checks whether <code>setDeviceMetricsOverride</code> can be invoked.
-// Callback Param result: If true, <code>setDeviceMetricsOverride</code> can safely be invoked on the agent.
-- (void)domain:(WXPageDomain *)domain canOverrideDeviceMetricsWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-// Overrides the values of device screen dimensions (window.screen.width, window.screen.height, window.innerWidth, window.innerHeight, and "device-width"/"device-height"-related CSS media query results) and the font scale factor.
-// Param width: Overriding width value in pixels (minimum 0, maximum 10000000). 0 disables the override.
-// Param height: Overriding height value in pixels (minimum 0, maximum 10000000). 0 disables the override.
-// Param fontScaleFactor: Overriding font scale factor value (must be positive). 1 disables the override.
-// Param fitWindow: Whether a view that exceeds the available browser window area should be scaled down to fit.
-- (void)domain:(WXPageDomain *)domain setDeviceMetricsOverrideWithWidth:(NSNumber *)width height:(NSNumber *)height fontScaleFactor:(NSNumber *)fontScaleFactor fitWindow:(NSNumber *)fitWindow callback:(void (^)(id error))callback;
-
-// Requests that backend shows paint rectangles
-// Param result: True for showing paint rectangles
-- (void)domain:(WXPageDomain *)domain setShowPaintRectsWithResult:(NSNumber *)result callback:(void (^)(id error))callback;
-
-// Determines if scripts can be executed in the page.
-// Callback Param result: Script execution status: "allowed" if scripts can be executed, "disabled" if script execution has been disabled through page settings, "forbidden" if script execution for the given page is not possible for other reasons.
-- (void)domain:(WXPageDomain *)domain getScriptExecutionStatusWithCallback:(void (^)(NSString *result, id error))callback;
-
-// Switches script execution in the page.
-// Param value: Whether script execution should be disabled in the page.
-- (void)domain:(WXPageDomain *)domain setScriptExecutionDisabledWithValue:(NSNumber *)value callback:(void (^)(id error))callback;
-
-// Overrides the Geolocation Position or Error.
-// Param latitude: Mock longitude
-// Param longitude: Mock latitude
-// Param accuracy: Mock accuracy
-- (void)domain:(WXPageDomain *)domain setGeolocationOverrideWithLatitude:(NSNumber *)latitude longitude:(NSNumber *)longitude accuracy:(NSNumber *)accuracy callback:(void (^)(id error))callback;
-
-// Clears the overriden Geolocation Position and Error.
-- (void)domain:(WXPageDomain *)domain clearGeolocationOverrideWithCallback:(void (^)(id error))callback;
-
-// Checks if Geolocation can be overridden.
-// Callback Param result: True if browser can ovrride Geolocation.
-- (void)domain:(WXPageDomain *)domain canOverrideGeolocationWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-// Overrides the Device Orientation.
-// Param alpha: Mock alpha
-// Param beta: Mock beta
-// Param gamma: Mock gamma
-- (void)domain:(WXPageDomain *)domain setDeviceOrientationOverrideWithAlpha:(NSNumber *)alpha beta:(NSNumber *)beta gamma:(NSNumber *)gamma callback:(void (^)(id error))callback;
-
-// Clears the overridden Device Orientation.
-- (void)domain:(WXPageDomain *)domain clearDeviceOrientationOverrideWithCallback:(void (^)(id error))callback;
-
-// Check the backend if Web Inspector can override the device orientation.
-// Callback Param result: If true, <code>setDeviceOrientationOverride</code> can safely be invoked on the agent.
-- (void)domain:(WXPageDomain *)domain canOverrideDeviceOrientationWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-//start screencast
-- (void)domain:(WXPageDomain *)domain startScreencastWithcallback:(void (^)(id error))callback;
-
-//stop screencast
-- (void)domain:(WXPageDomain *)domain stopScreencastWithcallback:(void (^)(id error))callback;
-
-// Toggles mouse event-based touch event emulation.
-// Param enabled: Whether the touch event emulation should be enabled.
-- (void)domain:(WXPageDomain *)domain setTouchEmulationEnabledWithEnabled:(NSNumber *)enabled callback:(void (^)(id error))callback;
-
-
-@end
-
-@interface WXDebugger (WXPageDomain)
-
-@property (nonatomic, readonly, strong) WXPageDomain *pageDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomain.m
deleted file mode 100644
index d21f40a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomain.m
+++ /dev/null
@@ -1,438 +0,0 @@
-//
-//  WXPageDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXPageDomain.h"
-#import "WXObject.h"
-#import "WXPageTypes.h"
-#import "WXPageDomainUtility.h"
-#import "WXRuntimeTypes.h"
-
-static BOOL observing = NO;
-static NSString * const WXScreencastChangeNotification = @"WXScreencastChangeNotification";
-
-@interface WXPageDomain ()
-//Commands
-
-@property (nonatomic, strong)WXPageFrameResourceTree *testFrameTree;
-
-@property (nonatomic, strong)WXStartScreencast *startScreencast;
-
-@end
-
-@implementation WXPageDomain
-@synthesize testFrameTree;
-@synthesize startScreencast;
-@synthesize screenScaleFactor;
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Page";
-}
-
-// Events
-- (void)domContentEventFiredWithTimestamp:(NSNumber *)timestamp;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Page.domContentEventFired" parameters:params];
-}
-- (void)loadEventFiredWithTimestamp:(NSNumber *)timestamp;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (timestamp != nil) {
-        [params setObject:[timestamp WX_JSONObject] forKey:@"timestamp"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Page.loadEventFired" parameters:params];
-}
-
-- (void)executionContextCreatedForRuntime {
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-    WXRuntimeExecutionContextDescription *context = [[WXRuntimeExecutionContextDescription alloc] init];
-    context.frameId = self.testFrameTree.frame.identifier;
-    context.identifier = [NSNumber numberWithInteger:12];
-    context.isDefault = [NSNumber numberWithBool:YES];
-    context.name = @"";
-    context.origin = self.testFrameTree.frame.url;
-    [params setObject:[context WX_JSONObject] forKey:@"context"];
-    [self.debuggingServer sendEventWithName:@"Runtime.executionContextCreated" parameters:params];
-}
-
-// Fired once navigation of the frame has completed. Frame is now associated with the new loader.
-- (void)frameNavigatedWithFrame:(WXPageFrame *)frame;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (frame != nil) {
-        [params setObject:[frame WX_JSONObject] forKey:@"frame"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Page.frameNavigated" parameters:params];
-}
-
-// Fired when frame has been detached from its parent.
-- (void)frameDetachedWithFrameId:(NSString *)frameId;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (frameId != nil) {
-        [params setObject:[frameId WX_JSONObject] forKey:@"frameId"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Page.frameDetached" parameters:params];
-}
-
-- (void)workerRegistrationUpdated {
-    NSDictionary *registrations = @{@"registrations":[NSArray array]};
-    [self.debuggingServer sendEventWithName:@"ServiceWorker.workerVersionUpdated" parameters:registrations];
-}
-
-- (void)workerVersionUpdated {
-    NSDictionary *version = @{@"versions":[NSArray array]};
-    [self.debuggingServer sendEventWithName:@"ServiceWorker.workerVersionUpdated" parameters:version];
-}
-
-
-- (void)screencastFormat:(NSString *)format Quality:(NSNumber *)quality scaleFactor:(CGFloat)scaleFactor
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-    UIImage *screenImage = [WXPageDomainUtility screencastDataScale:scaleFactor];
-    NSData *imageData = UIImageJPEGRepresentation(screenImage, [quality floatValue]);
-    NSString *codeImage = [imageData base64EncodedStringWithOptions:0];
-    [params setObject:codeImage forKey:@"data"];
-    
-    NSMutableDictionary *metaData = [WXPageDomainUtility screencastMetaDataWithScale:scaleFactor];
-    [metaData setObject:[NSNumber numberWithInteger:screenImage.size.width] forKey:@"deviceWidth"];
-    [metaData setObject:[NSNumber numberWithInteger:screenImage.size.height] forKey:@"deviceHeight"];
-    [params setObject:metaData forKey:@"metadata"];
-    
-    [params setObject:[NSNumber numberWithInteger:1] forKey:@"sessionId"];
-    
-    [self.debuggingServer sendEventWithName:@"Page.screencastFrame" parameters:params];
-}
-
-- (void)screencastFrame:(NSNotification *)notification
-{
-    if (self.startScreencast) {
-        UIView *view = [WXPageDomainUtility getCurrentKeyController].view;
-        if ([WXPageDomainUtility isContainWebView:view]) {
-            __weak typeof(self) weakSelf = self;
-            WXPerformBlockOnMainThread(^{
-                [weakSelf screencastFormat:weakSelf.startScreencast.format
-                                   Quality:weakSelf.startScreencast.quality
-                               scaleFactor:weakSelf.screenScaleFactor];
-            });
-        }else {
-            __weak typeof(self) weakSelf = self;
-            WXPerformBlockOnScreencastThread(^{
-                [weakSelf screencastFormat:weakSelf.startScreencast.format
-                               Quality:weakSelf.startScreencast.quality
-                           scaleFactor:weakSelf.screenScaleFactor];
-            });
-        }
-    }
-}
-
-#pragma mark -
-- (void)startObserving
-{
-    if (observing == NO) {
-        [self swizzledFrameChangeMethod];
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screencastFrame:) name:WXScreencastChangeNotification object:nil];
-        observing = YES;
-    }
-}
-
-- (void)stopObserving
-{
-    if (observing == YES) {
-        [self swizzledFrameChangeMethod];
-        [[NSNotificationCenter defaultCenter] removeObserver:self name:WXScreencastChangeNotification object:nil];
-        observing = NO;
-    }
-}
-
-- (void)swizzledFrameChangeMethod
-{
-    // I think setFrame has enough. From gurisxie
-    Method original, swizzle;
-    Class componentClass = [WXComponent class];
-    original = class_getInstanceMethod(componentClass, @selector(setNeedsLayout));
-    swizzle = class_getInstanceMethod(componentClass, sel_registerName("devtool_setNeedsLayout"));
-    method_exchangeImplementations(original, swizzle);
-}
-
-#pragma mark - handleMethod
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"addScriptToEvaluateOnLoad"] && [self.delegate respondsToSelector:@selector(domain:addScriptToEvaluateOnLoadWithScriptSource:callback:)]) {
-        [self.delegate domain:self addScriptToEvaluateOnLoadWithScriptSource:[params objectForKey:@"scriptSource"] callback:^(NSString *identifier, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (identifier != nil) {
-                [params setObject:identifier forKey:@"identifier"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeScriptToEvaluateOnLoad"] && [self.delegate respondsToSelector:@selector(domain:removeScriptToEvaluateOnLoadWithIdentifier:callback:)]) {
-        [self.delegate domain:self removeScriptToEvaluateOnLoadWithIdentifier:[params objectForKey:@"identifier"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"reload"] && [self.delegate respondsToSelector:@selector(domain:reloadWithIgnoreCache:scriptToEvaluateOnLoad:callback:)]) {
-        [self.delegate domain:self reloadWithIgnoreCache:[params objectForKey:@"ignoreCache"] scriptToEvaluateOnLoad:[params objectForKey:@"scriptToEvaluateOnLoad"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"navigate"] && [self.delegate respondsToSelector:@selector(domain:navigateWithUrl:callback:)]) {
-        [self.delegate domain:self navigateWithUrl:[params objectForKey:@"url"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getCookies"] && [self.delegate respondsToSelector:@selector(domain:getCookiesWithCallback:)]) {
-        [self.delegate domain:self getCookiesWithCallback:^(NSArray *cookies, NSString *cookiesString, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (cookies != nil) {
-                [params setObject:cookies forKey:@"cookies"];
-            }
-            if (cookiesString != nil) {
-                [params setObject:cookiesString forKey:@"cookiesString"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"deleteCookie"] && [self.delegate respondsToSelector:@selector(domain:deleteCookieWithCookieName:domain:callback:)]) {
-        [self.delegate domain:self deleteCookieWithCookieName:[params objectForKey:@"cookieName"] domain:[params objectForKey:@"domain"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getResourceTree"] && [self.delegate respondsToSelector:@selector(domain:getResourceTreeWithCallback:)]) {
-        [self.delegate domain:self getResourceTreeWithCallback:^(WXPageFrameResourceTree *frameTree, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (frameTree != nil) {
-                [params setObject:frameTree forKey:@"frameTree"];
-                self.testFrameTree = frameTree;
-            }
-//            NSMutableDictionary *newDic = @{@"frameTree":frameTree};
-            responseCallback(params, error);
-            [self executionContextCreatedForRuntime];
-        }];
-    } else if ([methodName isEqualToString:@"getResourceContent"] && [self.delegate respondsToSelector:@selector(domain:getResourceContentWithFrameId:url:callback:)]) {
-        [self.delegate domain:self getResourceContentWithFrameId:[params objectForKey:@"frameId"] url:[params objectForKey:@"url"] callback:^(NSString *content, NSNumber *base64Encoded, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (content != nil) {
-                [params setObject:content forKey:@"content"];
-            }
-            if (base64Encoded != nil) {
-                [params setObject:base64Encoded forKey:@"base64Encoded"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"searchInResource"] && [self.delegate respondsToSelector:@selector(domain:searchInResourceWithFrameId:url:query:caseSensitive:isRegex:callback:)]) {
-        [self.delegate domain:self searchInResourceWithFrameId:[params objectForKey:@"frameId"] url:[params objectForKey:@"url"] query:[params objectForKey:@"query"] caseSensitive:[params objectForKey:@"caseSensitive"] isRegex:[params objectForKey:@"isRegex"] callback:^(NSArray *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"searchInResources"] && [self.delegate respondsToSelector:@selector(domain:searchInResourcesWithText:caseSensitive:isRegex:callback:)]) {
-        [self.delegate domain:self searchInResourcesWithText:[params objectForKey:@"text"] caseSensitive:[params objectForKey:@"caseSensitive"] isRegex:[params objectForKey:@"isRegex"] callback:^(NSArray *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setDocumentContent"] && [self.delegate respondsToSelector:@selector(domain:setDocumentContentWithFrameId:html:callback:)]) {
-        [self.delegate domain:self setDocumentContentWithFrameId:[params objectForKey:@"frameId"] html:[params objectForKey:@"html"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"canOverrideDeviceMetrics"] && [self.delegate respondsToSelector:@selector(domain:canOverrideDeviceMetricsWithCallback:)]) {
-        [self.delegate domain:self canOverrideDeviceMetricsWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setDeviceMetricsOverride"] && [self.delegate respondsToSelector:@selector(domain:setDeviceMetricsOverrideWithWidth:height:fontScaleFactor:fitWindow:callback:)]) {
-        [self.delegate domain:self setDeviceMetricsOverrideWithWidth:[params objectForKey:@"width"] height:[params objectForKey:@"height"] fontScaleFactor:[params objectForKey:@"fontScaleFactor"] fitWindow:[params objectForKey:@"fitWindow"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setShowPaintRects"] && [self.delegate respondsToSelector:@selector(domain:setShowPaintRectsWithResult:callback:)]) {
-        [self.delegate domain:self setShowPaintRectsWithResult:[params objectForKey:@"result"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getScriptExecutionStatus"] && [self.delegate respondsToSelector:@selector(domain:getScriptExecutionStatusWithCallback:)]) {
-        [self.delegate domain:self getScriptExecutionStatusWithCallback:^(NSString *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setScriptExecutionDisabled"] && [self.delegate respondsToSelector:@selector(domain:setScriptExecutionDisabledWithValue:callback:)]) {
-        [self.delegate domain:self setScriptExecutionDisabledWithValue:[params objectForKey:@"value"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setGeolocationOverride"] && [self.delegate respondsToSelector:@selector(domain:setGeolocationOverrideWithLatitude:longitude:accuracy:callback:)]) {
-        [self.delegate domain:self setGeolocationOverrideWithLatitude:[params objectForKey:@"latitude"] longitude:[params objectForKey:@"longitude"] accuracy:[params objectForKey:@"accuracy"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"clearGeolocationOverride"] && [self.delegate respondsToSelector:@selector(domain:clearGeolocationOverrideWithCallback:)]) {
-        [self.delegate domain:self clearGeolocationOverrideWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"canOverrideGeolocation"] && [self.delegate respondsToSelector:@selector(domain:canOverrideGeolocationWithCallback:)]) {
-        [self.delegate domain:self canOverrideGeolocationWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setDeviceOrientationOverride"] && [self.delegate respondsToSelector:@selector(domain:setDeviceOrientationOverrideWithAlpha:beta:gamma:callback:)]) {
-        [self.delegate domain:self setDeviceOrientationOverrideWithAlpha:[params objectForKey:@"alpha"] beta:[params objectForKey:@"beta"] gamma:[params objectForKey:@"gamma"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"clearDeviceOrientationOverride"] && [self.delegate respondsToSelector:@selector(domain:clearDeviceOrientationOverrideWithCallback:)]) {
-        [self.delegate domain:self clearDeviceOrientationOverrideWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"canOverrideDeviceOrientation"] && [self.delegate respondsToSelector:@selector(domain:canOverrideDeviceOrientationWithCallback:)]) {
-        [self.delegate domain:self canOverrideDeviceOrientationWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"setTouchEmulationEnabled"] && [self.delegate respondsToSelector:@selector(domain:setTouchEmulationEnabledWithEnabled:callback:)]) {
-        [self.delegate domain:self setTouchEmulationEnabledWithEnabled:[params objectForKey:@"enabled"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"startScreencast"] && [self.delegate respondsToSelector:@selector(domain:startScreencastWithcallback:)]) {
-        [self.delegate domain:self startScreencastWithcallback:^(id error) {
-            NSNumber *maxWidth = [params objectForKey:@"maxWidth"];
-            NSNumber *maxHeight = [params objectForKey:@"maxHeight"];
-            if (!self.startScreencast) {
-                self.startScreencast = [[WXStartScreencast alloc] init];
-            }
-            self.startScreencast.quality = [params objectForKey:@"quality"];
-            self.startScreencast.format = [params objectForKey:@"format"];
-            
-            CGRect rect = [WXPageDomainUtility getCurrentKeyController].view.frame;
-            CGFloat deviceWidth = rect.size.width;
-            CGFloat deviceHeight = rect.size.height;
-            CGFloat scaleFactorWidth = maxWidth.floatValue/deviceWidth;
-            CGFloat scaleFactorHeight = maxHeight.floatValue/deviceHeight;
-            CGFloat scaleFactor = (scaleFactorWidth < scaleFactorHeight) ? scaleFactorWidth : scaleFactorHeight;
-            self.screenScaleFactor = scaleFactor;
-            
-            UIView *view = [WXPageDomainUtility getCurrentKeyController].view;
-            if ([WXPageDomainUtility isContainWebView:view]){
-                __weak typeof(self) weakSelf = self;
-                WXPerformBlockOnMainThread(^{
-                    [weakSelf screencastFormat:[params objectForKey:@"format"] Quality:[params objectForKey:@"format"] scaleFactor:scaleFactor];
-                });
-            }else {
-                __weak typeof(self) weakSelf = self;
-                WXPerformBlockOnScreencastThread(^{
-                    [weakSelf screencastFormat:[params objectForKey:@"format"] Quality:[params objectForKey:@"format"] scaleFactor:scaleFactor];
-                });
-            }
-            
-            
-            [self startObserving];
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"stopScreencast"] && [self.delegate respondsToSelector:@selector(domain:stopScreencastWithcallback:)]) {
-        [self.delegate domain:self stopScreencastWithcallback:^(id error) {
-            responseCallback(nil, error);
-            [self stopObserving];
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXPageDomain)
-
-- (WXPageDomain *)pageDomain;
-{
-    return [self domainForName:@"Page"];
-}
-
-@end
-
-@implementation WXComponent (ScreencastChange)
-
-- (void)devtool_setNeedsLayout
-{
-    [self devtool_setNeedsLayout];
-    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(postNotificationScreencastChangeNotification) object:nil];
-    [self performSelector:@selector(postNotificationScreencastChangeNotification) withObject:nil afterDelay:2];
-}
-
-- (void)devtool_setNeedsDisplay
-{
-    [self devtool_setNeedsDisplay];
-    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(postNotificationScreencastChangeNotification) object:nil];
-    [self performSelector:@selector(postNotificationScreencastChangeNotification) withObject:nil afterDelay:2];
-}
-
-- (void)devtool_setFrame:(CGRect)frame
-{
-    [self devtool_setFrame:frame];
-    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(postNotificationScreencastChangeNotification) object:nil];
-    [self performSelector:@selector(postNotificationScreencastChangeNotification) withObject:nil afterDelay:2];
-}
-
-- (void)postNotificationScreencastChangeNotification
-{
-    [[NSNotificationCenter defaultCenter] postNotificationName:WXScreencastChangeNotification object:nil];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.h
deleted file mode 100644
index 7118dba..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-@interface WXPageDomainUtility : NSObject
-
-@property (nonatomic, assign) BOOL  stopRunning;
-
-+ (UIImage *)screencastDataScale:(float)scale;
-
-+ (NSMutableDictionary *)screencastMetaDataWithScale:(float)scale;
-
-+ (UIViewController *)getCurrentKeyController;
-    
-+(BOOL)isContainWebView:(UIView *)rootView;
-
-
-/**
- * @abstract execute asynchronous action block on the main thread.
- *
- */
-extern void WXPerformBlockOnScreencastThread(void (^block)(void));
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.m
deleted file mode 100644
index e7e658a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageDomainUtility.m
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXPageDomainUtility.h"
-#import <objc/runtime.h>
-#import <WebKit/WebKit.h>
-
-#define IsIOS8 [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0
-
-@implementation WXPageDomainUtility
-
-@synthesize stopRunning;
-
-+ (UIImage *)screencastDataScale:(float)scale
-{
-    return [self captureWithScale:scale];
-}
-
-+ (NSMutableDictionary *)screencastMetaDataWithScale:(float)scale
-{
-    NSMutableDictionary *metaDataDic = [[NSMutableDictionary alloc] initWithCapacity:6];
-    [metaDataDic setObject:[NSNumber numberWithFloat:scale] forKey:@"pageScaleFactor"];
-    [metaDataDic setObject:[NSNumber numberWithFloat:0] forKey:@"offsetTop"];
-    [metaDataDic setObject:[NSNumber numberWithFloat:0] forKey:@"scrollOffsetX"];
-    [metaDataDic setObject:[NSNumber numberWithFloat:0] forKey:@"scrollOffsetY"];
-    
-    return metaDataDic;
-}
-
-#pragma mark -
-+ (UIImage *)captureWithScale:(float)scale
-{
-//    UIWindow * window = [UIApplication sharedApplication].keyWindow;
-//    UIView *view = [[window subviews] objectAtIndex:0];
-    UIView *view = [self getCurrentKeyController].view;
-    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, [UIScreen mainScreen].scale);
-    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
-    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
-    return [self scaleImage:image toScale:scale];
-}
-
-+ (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
-
-{
-    UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize));
-    [image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
-    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
-    return scaledImage;
-}
-
-+(UIViewController*)getCurrentKeyController
-{
-    UIViewController *result;
-    UIWindow *topWindow = [[[UIApplication sharedApplication] delegate] window];
-    if (topWindow.windowLevel != UIWindowLevelNormal)
-    {
-        NSArray *windows = [[UIApplication sharedApplication] windows];
-        for(topWindow in windows)
-        {
-            if (topWindow.windowLevel == UIWindowLevelNormal)
-            break;
-        }
-    }
-    id lenderClass = objc_getClass("UILayoutContainerView"); // 通过字符串名字,获取类
-    id nextResponder;
-    UIView *rootView = [[topWindow subviews] objectAtIndex:0];
-        
-    if(IsIOS8 && ![rootView isMemberOfClass:[lenderClass class]])
-    {
-        NSArray *arr = [rootView valueForKey:@"subviewCache"];
-        if(arr.count>0)
-        {
-            UIView *v = [arr objectAtIndex:0];
-            nextResponder = [v nextResponder];
-        }
-        else if([[rootView subviews] count] > 0)
-        {
-            nextResponder = [[[rootView subviews] objectAtIndex:0] nextResponder];
-        }
-    }
-    else
-    {
-        nextResponder = [rootView nextResponder];
-    }
-    if ([nextResponder isKindOfClass:[UIViewController class]])
-    {
-        result = nextResponder;
-    }
-    else if ([topWindow respondsToSelector:@selector(rootViewController)] && topWindow.rootViewController != nil)
-    {
-        result = topWindow.rootViewController;
-    }
-    else
-    {
-            
-        NSAssert(NO, @"ShareKit: Could not find a root view controller.  You can assign one manually by calling [[SHK currentHelper] setRootViewController:YOURROOTVIEWCONTROLLER].");
-    }
-    return result;
-}
-    
-+(BOOL)isContainWebView:(UIView *)rootView
-{
-    for (UIView *subview in [rootView.subviews reverseObjectEnumerator]) {
-        BOOL isWebView = [self isContainWebView:subview];
-        if (isWebView) {
-            return isWebView;
-        }
-    }
-    if ([rootView isKindOfClass:[UIWebView class]] || [rootView isKindOfClass:[objc_getClass("WKWebView") class]]) {
-        return YES;
-    }
-    return NO;
-}
-        
-#pragma mark - 
-static NSThread *WXScreencastThread;
-#define WX_SCREENCAST_THREAD_NAME @"com.taobao.devtool.bridge"
-+ (NSThread *)screencastThread
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        WXScreencastThread = [[NSThread alloc] initWithTarget:[[self class] alloc] selector:@selector(_runLoopThread) object:nil];
-        [WXScreencastThread setName:WX_SCREENCAST_THREAD_NAME];
-        if([[[UIDevice currentDevice] systemVersion] compare:@"8.0" options:NSNumericSearch] != NSOrderedAscending) {
-            [WXScreencastThread setQualityOfService:[[NSThread mainThread] qualityOfService]];
-        } else {
-            [WXScreencastThread setThreadPriority:[[NSThread mainThread] threadPriority]];
-        }
-        
-        [WXScreencastThread start];
-    });
-    
-    return WXScreencastThread;
-}
-
-- (void)_runLoopThread
-{
-    [[NSRunLoop currentRunLoop] addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
-    while (!self.stopRunning) {
-        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
-    }
-}
-
-void WXPerformBlockOnScreencastThread(void (^block)(void))
-{
-    [WXPageDomainUtility _performBlockOnScreencastThread:block];
-}
-
-+ (void)_performBlockOnScreencastThread:(void (^)(void))block
-{
-    if ([NSThread currentThread] == [self screencastThread]) {
-        block();
-    } else {
-        [self performSelector:@selector(_performBlockOnScreencastThread:)
-                     onThread:[self screencastThread]
-                   withObject:[block copy]
-                waitUntilDone:NO];
-    }
-}
-
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageTypes.h
deleted file mode 100644
index ab85d0d..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageTypes.h
+++ /dev/null
@@ -1,198 +0,0 @@
-//    
-//  WXPageTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@interface WXFrameResource : WXObject
-
-@property (nonatomic, strong) NSString *url;
-
-@property (nonatomic, strong) NSString *type;
-
-@property (nonatomic, strong) NSString *mimeType;
-
-@property (nonatomic, assign) BOOL failed;
-
-@property (nonatomic, assign) BOOL canceled;
-
-@end
-
-// Information about the Frame on the page.
-@interface WXPageFrame : WXObject
-
-// Frame unique identifier.
-// Type: string
-@property (nonatomic, strong) NSString *identifier;
-
-// Parent frame identifier.
-// Type: string
-@property (nonatomic, strong) NSString *parentId;
-
-// Identifier of the loader associated with this frame.
-@property (nonatomic, strong) NSString *loaderId;
-
-// Frame's name as specified in the tag.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Frame document's URL.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// Frame document's security origin.
-// Type: string
-@property (nonatomic, strong) NSString *securityOrigin;
-
-// Frame document's mimeType as determined by the browser.
-// Type: string
-@property (nonatomic, strong) NSString *mimeType;
-
-@end
-
-
-// Information about the Frame hierarchy along with their cached resources.
-@interface WXPageFrameResourceTree : WXObject
-
-// Frame information for this tree item.
-@property (nonatomic, strong) WXPageFrame *frame;
-
-// Child frames.
-// Type: array
-@property (nonatomic, strong) NSArray *childFrames;
-
-// Information about frame resources.
-// Type: array
-@property (nonatomic, strong) NSArray *resources;
-
-@end
-
-@interface WXPageFrameResource : WXObject
-
-@end
-
-// Search match for resource.
-@interface WXPageSearchMatch : WXObject
-
-// Line number in resource content.
-// Type: number
-@property (nonatomic, strong) NSNumber *lineNumber;
-
-// Line with match content.
-// Type: string
-@property (nonatomic, strong) NSString *lineContent;
-
-@end
-
-
-// Search result for resource.
-@interface WXPageSearchResult : WXObject
-
-// Resource URL.
-// Type: string
-@property (nonatomic, strong) NSString *url;
-
-// Resource frame id.
-@property (nonatomic, strong) NSString *frameId;
-
-// Number of matches in the resource content.
-// Type: number
-@property (nonatomic, strong) NSNumber *matchesCount;
-
-@end
-
-
-// Cookie object
-@interface WXPageCookie : WXObject
-
-// Cookie name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Cookie value.
-// Type: string
-@property (nonatomic, strong) NSString *value;
-
-// Cookie domain.
-// Type: string
-@property (nonatomic, strong) NSString *domain;
-
-// Cookie path.
-// Type: string
-@property (nonatomic, strong) NSString *path;
-
-// Cookie expires.
-// Type: number
-@property (nonatomic, strong) NSNumber *expires;
-
-// Cookie size.
-// Type: integer
-@property (nonatomic, strong) NSNumber *size;
-
-// True if cookie is http-only.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *httpOnly;
-
-// True if cookie is secure.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *secure;
-
-// True in case of session cookie.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *session;
-
-@end
-
-@interface WXScreencastFrameMetadata : WXObject
-
-@property (nonatomic, strong) NSNumber *offsetTop;
-
-@property (nonatomic, strong) NSNumber *pageScaleFactor;
-
-@property (nonatomic, strong) NSNumber *deviceWidth;
-
-@property (nonatomic, strong) NSNumber *deviceHeight;
-
-@property (nonatomic, strong) NSNumber *scrollOffsetX;
-
-@property (nonatomic, strong) NSNumber *scrollOffsetY;
-
-@property (nonatomic, strong) NSNumber *timestamp;
-
-@end
-
-@interface WXScreencastFrame : WXObject
-
-@property (nonatomic, copy) NSString *data;
-
-@property (nonatomic, strong) WXScreencastFrameMetadata *metadata;
-
-@property (nonatomic, strong) NSNumber *sessionId;
-
-@end
-
-@interface WXStartScreencast : WXObject
-
-@property (nonatomic, copy) NSString *format;
-
-@property (nonatomic, strong) NSNumber *quality;
-
-@property (nonatomic, strong) NSNumber *maxWidth;
-
-@property (nonatomic, strong) NSNumber *maxHeight;
-
-@property (nonatomic, strong) NSNumber *everyNthFrame;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageTypes.m
deleted file mode 100644
index 00514f7..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXPageTypes.m
+++ /dev/null
@@ -1,248 +0,0 @@
-//
-//  WXPageTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXPageTypes.h"
-@implementation WXFrameResource
-
-+ (NSDictionary *)keysToEncode {
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"url",@"url",
-                    @"type",@"type",
-                    @"mimeType",@"mimeType",
-                    @"failed",@"failed",
-                    @"canceled",@"canceled",
-                    nil];
-    });
-    
-    return mappings;
-}
-
-@dynamic url,type,mimeType,failed,canceled;
-
-@end
-
-@implementation WXPageFrame
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"id",@"identifier",
-                    @"parentId",@"parentId",
-                    @"loaderId",@"loaderId",
-                    @"name",@"name",
-                    @"url",@"url",
-                    @"securityOrigin",@"securityOrigin",
-                    @"mimeType",@"mimeType",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic identifier;
-@dynamic parentId;
-@dynamic loaderId;
-@dynamic name;
-@dynamic url;
-@dynamic securityOrigin;
-@dynamic mimeType;
- 
-@end
-
-@implementation WXPageFrameResourceTree
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"frame",@"frame",
-                    @"childFrames",@"childFrames",
-                    @"resources",@"resources",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic frame;
-@dynamic childFrames;
-@dynamic resources;
- 
-@end
-
-@implementation WXPageSearchMatch
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"lineNumber",@"lineNumber",
-                    @"lineContent",@"lineContent",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic lineNumber;
-@dynamic lineContent;
- 
-@end
-
-@implementation WXPageSearchResult
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"url",@"url",
-                    @"frameId",@"frameId",
-                    @"matchesCount",@"matchesCount",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic url;
-@dynamic frameId;
-@dynamic matchesCount;
- 
-@end
-
-@implementation WXPageCookie
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"value",@"value",
-                    @"domain",@"domain",
-                    @"path",@"path",
-                    @"expires",@"expires",
-                    @"size",@"size",
-                    @"httpOnly",@"httpOnly",
-                    @"secure",@"secure",
-                    @"session",@"session",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic value;
-@dynamic domain;
-@dynamic path;
-@dynamic expires;
-@dynamic size;
-@dynamic httpOnly;
-@dynamic secure;
-@dynamic session;
- 
-@end
-
-@implementation WXScreencastFrameMetadata
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"offsetTop",@"offsetTop",
-                    @"pageScaleFactor",@"pageScaleFactor",
-                    @"deviceWidth",@"deviceWidth",
-                    @"deviceHeight",@"deviceHeight",
-                    @"scrollOffsetX",@"scrollOffsetX",
-                    @"scrollOffsetY",@"scrollOffsetY",
-                    @"timestamp",@"timestamp",
-                    nil];
-    });
-    
-    return mappings;
-}
-
-@dynamic offsetTop;
-@dynamic pageScaleFactor;
-@dynamic deviceWidth;
-@dynamic deviceHeight;
-@dynamic scrollOffsetX;
-@dynamic scrollOffsetY;
-@dynamic timestamp;
-
-@end
-
-@implementation WXScreencastFrame
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"data",@"data",
-                    @"metadata",@"metadata",
-                    @"sessionId",@"sessionId",
-                    nil];
-    });
-    
-    return mappings;
-}
-
-@dynamic data;
-@dynamic metadata;
-@dynamic sessionId;
-
-@end
-
-@implementation WXStartScreencast
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"format",@"format",
-                    @"quality",@"quality",
-                    @"maxWidth",@"maxWidth",
-                    @"maxHeight",@"maxHeight",
-                    @"everyNthFrame",@"everyNthFrame",
-                    nil];
-    });
-    
-    return mappings;
-}
-
-@dynamic format;
-@dynamic quality;
-@dynamic maxWidth;
-@dynamic maxHeight;
-@dynamic everyNthFrame;
-
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.h
deleted file mode 100644
index b6e6308..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.h
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-//  WXProfilerDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXRuntimeRemoteObject;
-@class WXProfilerProfile;
-@class WXProfilerProfileHeader;
-
-@protocol WXProfilerCommandDelegate;
-
-@interface WXProfilerDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXProfilerCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-- (void)addProfileHeaderWithHeader:(WXProfilerProfileHeader *)header;
-- (void)addHeapSnapshotChunkWithUid:(NSNumber *)uid chunk:(NSString *)chunk;
-- (void)finishHeapSnapshotWithUid:(NSNumber *)uid;
-- (void)setRecordingProfileWithIsProfiling:(NSNumber *)isProfiling;
-- (void)resetProfiles;
-- (void)reportHeapSnapshotProgressWithDone:(NSNumber *)done total:(NSNumber *)total;
-
-@end
-
-@protocol WXProfilerCommandDelegate <WXCommandDelegate>
-@optional
-- (void)domain:(WXProfilerDomain *)domain causesRecompilationWithCallback:(void (^)(NSNumber *result, id error))callback;
-- (void)domain:(WXProfilerDomain *)domain isSamplingWithCallback:(void (^)(NSNumber *result, id error))callback;
-- (void)domain:(WXProfilerDomain *)domain hasHeapProfilerWithCallback:(void (^)(NSNumber *result, id error))callback;
-- (void)domain:(WXProfilerDomain *)domain enableWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXProfilerDomain *)domain disableWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXProfilerDomain *)domain startWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXProfilerDomain *)domain stopWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXProfilerDomain *)domain getProfileHeadersWithCallback:(void (^)(NSArray *headers, id error))callback;
-- (void)domain:(WXProfilerDomain *)domain getProfileWithType:(NSString *)type uid:(NSNumber *)uid callback:(void (^)(WXProfilerProfile *profile, id error))callback;
-- (void)domain:(WXProfilerDomain *)domain removeProfileWithType:(NSString *)type uid:(NSNumber *)uid callback:(void (^)(id error))callback;
-- (void)domain:(WXProfilerDomain *)domain clearProfilesWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXProfilerDomain *)domain takeHeapSnapshotWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXProfilerDomain *)domain collectGarbageWithCallback:(void (^)(id error))callback;
-// Param objectGroup: Symbolic group name that can be used to release multiple objects.
-// Callback Param result: Evaluation result.
-- (void)domain:(WXProfilerDomain *)domain getObjectByHeapObjectIdWithObjectId:(NSString *)objectId objectGroup:(NSString *)objectGroup callback:(void (^)(WXRuntimeRemoteObject *result, id error))callback;
-// Param objectId: Identifier of the object to get heap object id for.
-// Callback Param heapSnapshotObjectId: Id of the heap snapshot object corresponding to the passed remote object id.
-- (void)domain:(WXProfilerDomain *)domain getHeapObjectIdWithObjectId:(NSString *)objectId callback:(void (^)(NSString *heapSnapshotObjectId, id error))callback;
-
-@end
-
-@interface WXDebugger (WXProfilerDomain)
-
-@property (nonatomic, readonly, strong) WXProfilerDomain *profilerDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.m
deleted file mode 100644
index ba39f70..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomain.m
+++ /dev/null
@@ -1,216 +0,0 @@
-//
-//  WXProfilerDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXProfilerDomain.h"
-#import "WXObject.h"
-#import "WXRuntimeTypes.h"
-#import "WXProfilerTypes.h"
-
-
-@interface WXProfilerDomain ()
-//Commands
-
-@end
-
-@implementation WXProfilerDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Profiler";
-}
-
-// Events
-- (void)addProfileHeaderWithHeader:(WXProfilerProfileHeader *)header;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (header != nil) {
-        [params setObject:[header WX_JSONObject] forKey:@"header"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Profiler.addProfileHeader" parameters:params];
-}
-- (void)addHeapSnapshotChunkWithUid:(NSNumber *)uid chunk:(NSString *)chunk;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (uid != nil) {
-        [params setObject:[uid WX_JSONObject] forKey:@"uid"];
-    }
-    if (chunk != nil) {
-        [params setObject:[chunk WX_JSONObject] forKey:@"chunk"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Profiler.addHeapSnapshotChunk" parameters:params];
-}
-- (void)finishHeapSnapshotWithUid:(NSNumber *)uid;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (uid != nil) {
-        [params setObject:[uid WX_JSONObject] forKey:@"uid"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Profiler.finishHeapSnapshot" parameters:params];
-}
-- (void)setRecordingProfileWithIsProfiling:(NSNumber *)isProfiling;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (isProfiling != nil) {
-        [params setObject:[isProfiling WX_JSONObject] forKey:@"isProfiling"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Profiler.setRecordingProfile" parameters:params];
-}
-- (void)resetProfiles;
-{
-    [self.debuggingServer sendEventWithName:@"Profiler.resetProfiles" parameters:nil];
-}
-- (void)reportHeapSnapshotProgressWithDone:(NSNumber *)done total:(NSNumber *)total;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (done != nil) {
-        [params setObject:[done WX_JSONObject] forKey:@"done"];
-    }
-    if (total != nil) {
-        [params setObject:[total WX_JSONObject] forKey:@"total"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Profiler.reportHeapSnapshotProgress" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"causesRecompilation"] && [self.delegate respondsToSelector:@selector(domain:causesRecompilationWithCallback:)]) {
-        [self.delegate domain:self causesRecompilationWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"isSampling"] && [self.delegate respondsToSelector:@selector(domain:isSamplingWithCallback:)]) {
-        [self.delegate domain:self isSamplingWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"hasHeapProfiler"] && [self.delegate respondsToSelector:@selector(domain:hasHeapProfilerWithCallback:)]) {
-        [self.delegate domain:self hasHeapProfilerWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"start"] && [self.delegate respondsToSelector:@selector(domain:startWithCallback:)]) {
-        [self.delegate domain:self startWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"stop"] && [self.delegate respondsToSelector:@selector(domain:stopWithCallback:)]) {
-        [self.delegate domain:self stopWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getProfileHeaders"] && [self.delegate respondsToSelector:@selector(domain:getProfileHeadersWithCallback:)]) {
-        [self.delegate domain:self getProfileHeadersWithCallback:^(NSArray *headers, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (headers != nil) {
-                [params setObject:headers forKey:@"headers"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getProfile"] && [self.delegate respondsToSelector:@selector(domain:getProfileWithType:uid:callback:)]) {
-        [self.delegate domain:self getProfileWithType:[params objectForKey:@"type"] uid:[params objectForKey:@"uid"] callback:^(WXProfilerProfile *profile, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (profile != nil) {
-                [params setObject:profile forKey:@"profile"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"removeProfile"] && [self.delegate respondsToSelector:@selector(domain:removeProfileWithType:uid:callback:)]) {
-        [self.delegate domain:self removeProfileWithType:[params objectForKey:@"type"] uid:[params objectForKey:@"uid"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"clearProfiles"] && [self.delegate respondsToSelector:@selector(domain:clearProfilesWithCallback:)]) {
-        [self.delegate domain:self clearProfilesWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"takeHeapSnapshot"] && [self.delegate respondsToSelector:@selector(domain:takeHeapSnapshotWithCallback:)]) {
-        [self.delegate domain:self takeHeapSnapshotWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"collectGarbage"] && [self.delegate respondsToSelector:@selector(domain:collectGarbageWithCallback:)]) {
-        [self.delegate domain:self collectGarbageWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"getObjectByHeapObjectId"] && [self.delegate respondsToSelector:@selector(domain:getObjectByHeapObjectIdWithObjectId:objectGroup:callback:)]) {
-        [self.delegate domain:self getObjectByHeapObjectIdWithObjectId:[params objectForKey:@"objectId"] objectGroup:[params objectForKey:@"objectGroup"] callback:^(WXRuntimeRemoteObject *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getHeapObjectId"] && [self.delegate respondsToSelector:@selector(domain:getHeapObjectIdWithObjectId:callback:)]) {
-        [self.delegate domain:self getHeapObjectIdWithObjectId:[params objectForKey:@"objectId"] callback:^(NSString *heapSnapshotObjectId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (heapSnapshotObjectId != nil) {
-                [params setObject:heapSnapshotObjectId forKey:@"heapSnapshotObjectId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXProfilerDomain)
-
-- (WXProfilerDomain *)profilerDomain;
-{
-    return [self domainForName:@"Profiler"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.h
deleted file mode 100644
index 1b4d0f7..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXPonyDebugger.h"
-
-@interface WXProfilerDomainController : WXDomainController
-
-+(WXProfilerDomainController *)defaultInstace;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.m
deleted file mode 100644
index 8119154..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerDomainController.m
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXProfilerDomainController.h"
-
-@implementation WXProfilerDomainController
-
-+(WXProfilerDomainController *)defaultInstace {
-    static WXProfilerDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXProfilerDomainController alloc] init];
-    });
-    
-    return defaultInstance;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.h
deleted file mode 100644
index d60e797..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.h
+++ /dev/null
@@ -1,50 +0,0 @@
-//    
-//  WXProfilerTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// Profile header.
-@interface WXProfilerProfileHeader : WXObject
-
-// Profile type name.
-// Type: string
-@property (nonatomic, strong) NSString *typeId;
-
-// Profile title.
-// Type: string
-@property (nonatomic, strong) NSString *title;
-
-// Unique identifier of the profile.
-// Type: integer
-@property (nonatomic, strong) NSNumber *uid;
-
-// Last seen JS object Id.
-// Type: integer
-@property (nonatomic, strong) NSNumber *maxJSObjectId;
-
-@end
-
-
-// Profile.
-@interface WXProfilerProfile : WXObject
-
-// Type: object
-@property (nonatomic, strong) NSDictionary *head;
-
-// Type: object
-@property (nonatomic, strong) NSDictionary *bottomUpHead;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.m
deleted file mode 100644
index 317a113..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXProfilerTypes.m
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-//  WXProfilerTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXProfilerTypes.h"
-
-@implementation WXProfilerProfileHeader
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"typeId",@"typeId",
-                    @"title",@"title",
-                    @"uid",@"uid",
-                    @"maxJSObjectId",@"maxJSObjectId",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic typeId;
-@dynamic title;
-@dynamic uid;
-@dynamic maxJSObjectId;
- 
-@end
-
-@implementation WXProfilerProfile
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"head",@"head",
-                    @"bottomUpHead",@"bottomUpHead",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic head;
-@dynamic bottomUpHead;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.h
deleted file mode 100644
index 858df9e..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.h
+++ /dev/null
@@ -1,85 +0,0 @@
-//
-//  WXRuntimeDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXRuntimeRemoteObject;
-@class WXRuntimeExecutionContextDescription;
-
-@protocol WXRuntimeCommandDelegate;
-
-// Runtime domain exposes JavaScript runtime by means of remote evaluation and mirror objects. Evaluation results are returned as mirror object that expose object type, string representation and unique identifier that can be used for further object reference. Original objects are maintained in memory unless they are either explicitly released or are released along with the other objects in their object group.
-@interface WXRuntimeDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXRuntimeCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-
-// Issued when new isolated context is created.
-// Param context: A newly created isolated contex.
-- (void)isolatedContextCreatedWithContext:(WXRuntimeExecutionContextDescription *)context;
-
-@end
-
-@protocol WXRuntimeCommandDelegate <WXCommandDelegate>
-@optional
-
-// Evaluates expression on global object.
-// Param expression: Expression to evaluate.
-// Param objectGroup: Symbolic group name that can be used to release multiple objects.
-// Param includeCommandLineAPI: Determines whether Command Line API should be available during the evaluation.
-// Param doNotPauseOnExceptionsAndMuteConsole: Specifies whether evaluation should stop on exceptions and mute console. Overrides setPauseOnException state.
-// Param contextId: Specifies in which isolated context to perform evaluation. Each content script lives in an isolated context and this parameter may be used to specify one of those contexts. If the parameter is omitted or 0 the evaluation will be performed in the context of the inspected page.
-// Param returnByValue: Whether the result is expected to be a JSON object that should be sent by value.
-// Callback Param result: Evaluation result.
-// Callback Param wasThrown: True if the result was thrown during the evaluation.
-- (void)domain:(WXRuntimeDomain *)domain evaluateWithExpression:(NSString *)expression objectGroup:(NSString *)objectGroup includeCommandLineAPI:(NSNumber *)includeCommandLineAPI doNotPauseOnExceptionsAndMuteConsole:(NSNumber *)doNotPauseOnExceptionsAndMuteConsole contextId:(NSNumber *)contextId returnByValue:(NSNumber *)returnByValue callback:(void (^)(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error))callback;
-
-// Calls function with given declaration on the given object. Object group of the result is inherited from the target object.
-// Param objectId: Identifier of the object to call function on.
-// Param functionDeclaration: Declaration of the function to call.
-// Param arguments: Call arguments. All call arguments must belong to the same JavaScript world as the target object.
-// Param doNotPauseOnExceptionsAndMuteConsole: Specifies whether function call should stop on exceptions and mute console. Overrides setPauseOnException state.
-// Param returnByValue: Whether the result is expected to be a JSON object which should be sent by value.
-// Callback Param result: Call result.
-// Callback Param wasThrown: True if the result was thrown during the evaluation.
-- (void)domain:(WXRuntimeDomain *)domain callFunctionOnWithObjectId:(NSString *)objectId functionDeclaration:(NSString *)functionDeclaration arguments:(NSArray *)arguments doNotPauseOnExceptionsAndMuteConsole:(NSNumber *)doNotPauseOnExceptionsAndMuteConsole returnByValue:(NSNumber *)returnByValue callback:(void (^)(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error))callback;
-
-// Returns properties of a given object. Object group of the result is inherited from the target object.
-// Param objectId: Identifier of the object to return properties for.
-// Param ownProperties: If true, returns properties belonging only to the element itself, not to its prototype chain.
-// Callback Param result: Object properties.
-- (void)domain:(WXRuntimeDomain *)domain getPropertiesWithObjectId:(NSString *)objectId ownProperties:(NSNumber *)ownProperties callback:(void (^)(NSArray *result, id error))callback;
-
-// Releases remote object with given id.
-// Param objectId: Identifier of the object to release.
-- (void)domain:(WXRuntimeDomain *)domain releaseObjectWithObjectId:(NSString *)objectId callback:(void (^)(id error))callback;
-
-// Releases all remote objects that belong to a given group.
-// Param objectGroup: Symbolic object group name.
-- (void)domain:(WXRuntimeDomain *)domain releaseObjectGroupWithObjectGroup:(NSString *)objectGroup callback:(void (^)(id error))callback;
-
-// Tells inspected instance(worker or page) that it can run in case it was started paused.
-- (void)domain:(WXRuntimeDomain *)domain runWithCallback:(void (^)(id error))callback;
-
-// Enables reporting about creation of isolated contexts by means of <code>isolatedContextCreated</code> event. When the reporting gets enabled the event will be sent immediately for each existing isolated context.
-// Param enabled: Reporting enabled state.
-- (void)domain:(WXRuntimeDomain *)domain setReportExecutionContextCreationWithEnabled:(NSNumber *)enabled callback:(void (^)(id error))callback;
-
-@end
-
-@interface WXDebugger (WXRuntimeDomain)
-
-@property (nonatomic, readonly, strong) WXRuntimeDomain *runtimeDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.m
deleted file mode 100644
index 4787c83..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeDomain.m
+++ /dev/null
@@ -1,117 +0,0 @@
-//
-//  WXRuntimeDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXRuntimeDomain.h"
-#import "WXObject.h"
-#import "WXRuntimeTypes.h"
-
-
-@interface WXRuntimeDomain ()
-//Commands
-
-@end
-
-@implementation WXRuntimeDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Runtime";
-}
-
-// Events
-
-// Issued when new isolated context is created.
-- (void)isolatedContextCreatedWithContext:(WXRuntimeExecutionContextDescription *)context;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (context != nil) {
-        [params setObject:[context WX_JSONObject] forKey:@"context"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Runtime.isolatedContextCreated" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"evaluate"] && [self.delegate respondsToSelector:@selector(domain:evaluateWithExpression:objectGroup:includeCommandLineAPI:doNotPauseOnExceptionsAndMuteConsole:contextId:returnByValue:callback:)]) {
-        [self.delegate domain:self evaluateWithExpression:[params objectForKey:@"expression"] objectGroup:[params objectForKey:@"objectGroup"] includeCommandLineAPI:[params objectForKey:@"includeCommandLineAPI"] doNotPauseOnExceptionsAndMuteConsole:[params objectForKey:@"doNotPauseOnExceptionsAndMuteConsole"] contextId:[params objectForKey:@"contextId"] returnByValue:[params objectForKey:@"returnByValue"] callback:^(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-            if (wasThrown != nil) {
-                [params setObject:wasThrown forKey:@"wasThrown"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"callFunctionOn"] && [self.delegate respondsToSelector:@selector(domain:callFunctionOnWithObjectId:functionDeclaration:arguments:doNotPauseOnExceptionsAndMuteConsole:returnByValue:callback:)]) {
-        [self.delegate domain:self callFunctionOnWithObjectId:[params objectForKey:@"objectId"] functionDeclaration:[params objectForKey:@"functionDeclaration"] arguments:[params objectForKey:@"arguments"] doNotPauseOnExceptionsAndMuteConsole:[params objectForKey:@"doNotPauseOnExceptionsAndMuteConsole"] returnByValue:[params objectForKey:@"returnByValue"] callback:^(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-            if (wasThrown != nil) {
-                [params setObject:wasThrown forKey:@"wasThrown"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getProperties"] && [self.delegate respondsToSelector:@selector(domain:getPropertiesWithObjectId:ownProperties:callback:)]) {
-        [self.delegate domain:self getPropertiesWithObjectId:[params objectForKey:@"objectId"] ownProperties:[params objectForKey:@"ownProperties"] callback:^(NSArray *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"releaseObject"] && [self.delegate respondsToSelector:@selector(domain:releaseObjectWithObjectId:callback:)]) {
-        [self.delegate domain:self releaseObjectWithObjectId:[params objectForKey:@"objectId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"releaseObjectGroup"] && [self.delegate respondsToSelector:@selector(domain:releaseObjectGroupWithObjectGroup:callback:)]) {
-        [self.delegate domain:self releaseObjectGroupWithObjectGroup:[params objectForKey:@"objectGroup"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"run"] && [self.delegate respondsToSelector:@selector(domain:runWithCallback:)]) {
-        [self.delegate domain:self runWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setReportExecutionContextCreation"] && [self.delegate respondsToSelector:@selector(domain:setReportExecutionContextCreationWithEnabled:callback:)]) {
-        [self.delegate domain:self setReportExecutionContextCreationWithEnabled:[params objectForKey:@"enabled"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXRuntimeDomain)
-
-- (WXRuntimeDomain *)runtimeDomain;
-{
-    return [self domainForName:@"Runtime"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.h
deleted file mode 100644
index 4e6ade1..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.h
+++ /dev/null
@@ -1,163 +0,0 @@
-//    
-//  WXRuntimeTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@class WXRuntimeObjectPreview;
-
-
-// Mirror object referencing original JavaScript object.
-@interface WXRuntimeRemoteObject : WXObject
-
-// Object type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// Object subtype hint. Specified for <code>object</code> type values only.
-// Type: string
-@property (nonatomic, strong) NSString *subtype;
-
-// Object class (constructor) name. Specified for <code>object</code> type values only.
-// Type: string
-@property (nonatomic, strong) NSString *classNameString;
-
-// Remote object value (in case of primitive values or JSON values if it was requested).
-// Type: any
-@property (nonatomic, strong) id value;
-
-// String representation of the object.
-// Type: string
-@property (nonatomic, strong) NSString *objectDescription;
-
-// Unique object identifier (for non-primitive values).
-@property (nonatomic, strong) NSString *objectId;
-
-// Preview containsing abbreviated property values.
-@property (nonatomic, strong) WXRuntimeObjectPreview *preview;
-
-@end
-
-
-// Object containing abbreviated remote object value.
-@interface WXRuntimeObjectPreview : WXObject
-
-// Determines whether preview is lossless (contains all information of the original object).
-// Type: boolean
-@property (nonatomic, strong) NSNumber *lossless;
-
-// True iff some of the properties of the original did not fit.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *overflow;
-
-// List of the properties.
-// Type: array
-@property (nonatomic, strong) NSArray *properties;
-
-@end
-
-
-@interface WXRuntimePropertyPreview : WXObject
-
-// Property name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Object type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// User-friendly property value string.
-// Type: string
-@property (nonatomic, strong) NSString *value;
-
-// Object subtype hint. Specified for <code>object</code> type values only.
-// Type: string
-@property (nonatomic, strong) NSString *subtype;
-
-@end
-
-
-// Object property descriptor.
-@interface WXRuntimePropertyDescriptor : WXObject
-
-// Property name.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// The value associated with the property.
-@property (nonatomic, strong) WXRuntimeRemoteObject *value;
-
-// True if the value associated with the property may be changed (data descriptors only).
-// Type: boolean
-@property (nonatomic, strong) NSNumber *writable;
-
-// A function which serves as a getter for the property, or <code>undefined</code> if there is no getter (accessor descriptors only).
-@property (nonatomic, strong) WXRuntimeRemoteObject *get;
-
-// A function which serves as a setter for the property, or <code>undefined</code> if there is no setter (accessor descriptors only).
-@property (nonatomic, strong) WXRuntimeRemoteObject *set;
-
-// True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *configurable;
-
-// True if this property shows up during enumeration of the properties on the corresponding object.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *enumerable;
-
-// True if the result was thrown during the evaluation.
-// Type: boolean
-@property (nonatomic, strong) NSNumber *wasThrown;
-
-@end
-
-
-// Represents function call argument. Either remote object id <code>objectId</code> or primitive <code>value</code> or neither of (for undefined) them should be specified.
-@interface WXRuntimeCallArgument : WXObject
-
-// Primitive value.
-// Type: any
-@property (nonatomic, strong) id value;
-
-// Remote object handle.
-@property (nonatomic, strong) NSString *objectId;
-
-@end
-
-
-// Description of an isolated world.
-@interface WXRuntimeExecutionContextDescription : WXObject
-
-// Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed.
-@property (nonatomic, strong) NSNumber *identifier;
-
-// True if this is a context where inpspected web page scripts run. False if it is a content script isolated context.
-// Type: boolean
-//@property (nonatomic, strong) NSNumber *isPageContext;
-
-@property (nonatomic, strong) NSNumber *isDefault;
-
-@property (nonatomic, strong) NSString *origin;
-
-
-// Human readable name describing given context.
-// Type: string
-@property (nonatomic, strong) NSString *name;
-
-// Id of the owning frame.
-@property (nonatomic, strong) NSString *frameId;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.m
deleted file mode 100644
index 5cd929b..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXRuntimeTypes.m
+++ /dev/null
@@ -1,174 +0,0 @@
-//
-//  WXRuntimeTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXRuntimeTypes.h"
-
-@implementation WXRuntimeRemoteObject
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"type",@"type",
-                    @"subtype",@"subtype",
-                    @"className",@"classNameString",
-                    @"value",@"value",
-                    @"description",@"objectDescription",
-                    @"objectId",@"objectId",
-                    @"preview",@"preview",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic type;
-@dynamic subtype;
-@dynamic classNameString;
-@dynamic value;
-@dynamic objectDescription;
-@dynamic objectId;
-@dynamic preview;
- 
-@end
-
-@implementation WXRuntimeObjectPreview
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"lossless",@"lossless",
-                    @"overflow",@"overflow",
-                    @"properties",@"properties",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic lossless;
-@dynamic overflow;
-@dynamic properties;
- 
-@end
-
-@implementation WXRuntimePropertyPreview
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"type",@"type",
-                    @"value",@"value",
-                    @"subtype",@"subtype",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic type;
-@dynamic value;
-@dynamic subtype;
- 
-@end
-
-@implementation WXRuntimePropertyDescriptor
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"name",@"name",
-                    @"value",@"value",
-                    @"writable",@"writable",
-                    @"get",@"get",
-                    @"set",@"set",
-                    @"configurable",@"configurable",
-                    @"enumerable",@"enumerable",
-                    @"wasThrown",@"wasThrown",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic name;
-@dynamic value;
-@dynamic writable;
-@dynamic get;
-@dynamic set;
-@dynamic configurable;
-@dynamic enumerable;
-@dynamic wasThrown;
- 
-@end
-
-@implementation WXRuntimeCallArgument
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"value",@"value",
-                    @"objectId",@"objectId",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic value;
-@dynamic objectId;
- 
-@end
-
-@implementation WXRuntimeExecutionContextDescription
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"id",@"identifier",
-                    @"isDefault",@"isDefault",
-                    @"name",@"name",
-                    @"frameId",@"frameId",
-                    @"origin",@"origin",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic identifier;
-//@dynamic isPageContext;
-@dynamic isDefault;
-@dynamic origin;
-@dynamic name;
-@dynamic frameId;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.h
deleted file mode 100644
index e9e88f7..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-//  WXTimelineDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXTimelineTimelineEvent;
-
-@protocol WXTimelineCommandDelegate;
-
-// Timeline provides its clients with instrumentation records that are generated during the page runtime. Timeline instrumentation can be started and stopped using corresponding commands. While timeline is started, it is generating timeline event records.
-@interface WXTimelineDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXTimelineCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-
-// Fired for every instrumentation event while timeline is started.
-// Param record: Timeline event record data.
-- (void)eventRecordedWithRecord:(WXTimelineTimelineEvent *)record;
-
-@end
-
-@protocol WXTimelineCommandDelegate <WXCommandDelegate>
-@optional
-
-// Starts capturing instrumentation events.
-// Param maxCallStackDepth: Samples JavaScript stack traces up to <code>maxCallStackDepth</code>, defaults to 5.
-- (void)domain:(WXTimelineDomain *)domain startWithMaxCallStackDepth:(NSNumber *)maxCallStackDepth callback:(void (^)(id error))callback;
-
-// Stops capturing instrumentation events.
-- (void)domain:(WXTimelineDomain *)domain stopWithCallback:(void (^)(id error))callback;
-
-// Starts calculating various DOM statistics and sending them as part of timeline events.
-// Param enabled: True to start collecting DOM counters.
-- (void)domain:(WXTimelineDomain *)domain setIncludeMemoryDetailsWithEnabled:(NSNumber *)enabled callback:(void (^)(id error))callback;
-
-// Tells whether timeline agent supports frame instrumentation.
-// Callback Param result: True if timeline supports frame instrumentation.
-- (void)domain:(WXTimelineDomain *)domain supportsFrameInstrumentationWithCallback:(void (^)(NSNumber *result, id error))callback;
-
-@end
-
-@interface WXDebugger (WXTimelineDomain)
-
-@property (nonatomic, readonly, strong) WXTimelineDomain *timelineDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.m
deleted file mode 100644
index 6b16a28..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomain.m
+++ /dev/null
@@ -1,86 +0,0 @@
-//
-//  WXTimelineDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXTimelineDomain.h"
-#import "WXTimelineTypes.h"
-
-
-@interface WXTimelineDomain ()
-//Commands
-
-@end
-
-@implementation WXTimelineDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Timeline";
-}
-
-// Events
-
-// Fired for every instrumentation event while timeline is started.
-- (void)eventRecordedWithRecord:(WXTimelineTimelineEvent *)record;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (record != nil) {
-        [params setObject:[record WX_JSONObject] forKey:@"record"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Timeline.eventRecorded" parameters:params];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"start"] && [self.delegate respondsToSelector:@selector(domain:startWithMaxCallStackDepth:callback:)]) {
-        [self.delegate domain:self startWithMaxCallStackDepth:[params objectForKey:@"maxCallStackDepth"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"stop"] && [self.delegate respondsToSelector:@selector(domain:stopWithCallback:)]) {
-        [self.delegate domain:self stopWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setIncludeMemoryDetails"] && [self.delegate respondsToSelector:@selector(domain:setIncludeMemoryDetailsWithEnabled:callback:)]) {
-        [self.delegate domain:self setIncludeMemoryDetailsWithEnabled:[params objectForKey:@"enabled"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"supportsFrameInstrumentation"] && [self.delegate respondsToSelector:@selector(domain:supportsFrameInstrumentationWithCallback:)]) {
-        [self.delegate domain:self supportsFrameInstrumentationWithCallback:^(NSNumber *result, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (result != nil) {
-                [params setObject:result forKey:@"result"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXTimelineDomain)
-
-- (WXTimelineDomain *)timelineDomain;
-{
-    return [self domainForName:@"Timeline"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.h
deleted file mode 100644
index 844b8cb..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXPonyDebugger.h"
-#import "WXTimelineDomain.h"
-
-@interface WXTimelineDomainController : WXDomainController
-
-+(WXTimelineDomainController *)defaultInstance;
-
-@property (nonatomic, strong) WXTimelineDomain *domain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.m
deleted file mode 100644
index c04ecc9..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineDomainController.m
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-//  WXTimelineDomainController.m
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-#import "WXTimelineDomainController.h"
-
-@interface WXTimelineDomainController () <WXTimelineCommandDelegate>
-
-@end
-
-@implementation WXTimelineDomainController
-
-@dynamic domain;
-
-+(WXTimelineDomainController *)defaultInstance {
-    static WXTimelineDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXTimelineDomainController alloc] init];
-    });
-    
-    return defaultInstance;
-}
-
-+(Class)domainClass {
-    return [WXTimelineDomain class];
-}
-
-#pragma mark - WXTimelineCommandDelegate
-// Starts capturing instrumentation events.
-// Param maxCallStackDepth: Samples JavaScript stack traces up to <code>maxCallStackDepth</code>, defaults to 5.
-- (void)domain:(WXTimelineDomain *)domain startWithMaxCallStackDepth:(NSNumber *)maxCallStackDepth callback:(void (^)(id error))callback {
-    
-}
-
-// Stops capturing instrumentation events.
-- (void)domain:(WXTimelineDomain *)domain stopWithCallback:(void (^)(id error))callback {
-    
-}
-
-// Starts calculating various DOM statistics and sending them as part of timeline events.
-// Param enabled: True to start collecting DOM counters.
-- (void)domain:(WXTimelineDomain *)domain setIncludeMemoryDetailsWithEnabled:(NSNumber *)enabled callback:(void (^)(id error))callback {
-    
-}
-
-// Tells whether timeline agent supports frame instrumentation.
-// Callback Param result: True if timeline supports frame instrumentation.
-- (void)domain:(WXTimelineDomain *)domain supportsFrameInstrumentationWithCallback:(void (^)(NSNumber *result, id error))callback {
-    
-}
-
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.h
deleted file mode 100644
index 2005159..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//    
-//  WXTimelineTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-// Timeline record contains information about the recorded activity.
-@interface WXTimelineTimelineEvent : WXObject
-
-// Event type.
-// Type: string
-@property (nonatomic, strong) NSString *type;
-
-// Event data.
-// Type: object
-@property (nonatomic, strong) NSDictionary *data;
-
-// Nested records.
-// Type: array
-@property (nonatomic, strong) NSArray *children;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.m
deleted file mode 100644
index 4420830..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXTimelineTypes.m
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-//  WXTimelineTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXTimelineTypes.h"
-
-@implementation WXTimelineTimelineEvent
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"type",@"type",
-                    @"data",@"data",
-                    @"children",@"children",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic type;
-@dynamic data;
-@dynamic children;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.h
deleted file mode 100644
index 1b69011..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-//  WXWebGLDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@class WXWebGLTraceLog;
-
-@protocol WXWebGLCommandDelegate;
-
-@interface WXWebGLDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXWebGLCommandDelegate, WXCommandDelegate> delegate;
-
-@end
-
-@protocol WXWebGLCommandDelegate <WXCommandDelegate>
-@optional
-
-// Enables WebGL inspection.
-- (void)domain:(WXWebGLDomain *)domain enableWithCallback:(void (^)(id error))callback;
-
-// Disables WebGL inspection.
-- (void)domain:(WXWebGLDomain *)domain disableWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXWebGLDomain *)domain dropTraceLogWithTraceLogId:(NSString *)traceLogId callback:(void (^)(id error))callback;
-- (void)domain:(WXWebGLDomain *)domain captureFrameWithCallback:(void (^)(NSString *traceLogId, id error))callback;
-- (void)domain:(WXWebGLDomain *)domain getTraceLogWithTraceLogId:(NSString *)traceLogId callback:(void (^)(WXWebGLTraceLog *traceLog, id error))callback;
-- (void)domain:(WXWebGLDomain *)domain replayTraceLogWithTraceLogId:(NSString *)traceLogId stepNo:(NSNumber *)stepNo callback:(void (^)(NSString *screenshotDataUrl, id error))callback;
-
-@end
-
-@interface WXDebugger (WXWebGLDomain)
-
-@property (nonatomic, readonly, strong) WXWebGLDomain *webGLDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.m
deleted file mode 100644
index d07cf1c..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLDomain.m
+++ /dev/null
@@ -1,93 +0,0 @@
-//
-//  WXWebGLDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXWebGLDomain.h"
-#import "WXObject.h"
-#import "WXWebGLTypes.h"
-
-
-@interface WXWebGLDomain ()
-//Commands
-
-@end
-
-@implementation WXWebGLDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"WebGL";
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"dropTraceLog"] && [self.delegate respondsToSelector:@selector(domain:dropTraceLogWithTraceLogId:callback:)]) {
-        [self.delegate domain:self dropTraceLogWithTraceLogId:[params objectForKey:@"traceLogId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"captureFrame"] && [self.delegate respondsToSelector:@selector(domain:captureFrameWithCallback:)]) {
-        [self.delegate domain:self captureFrameWithCallback:^(NSString *traceLogId, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (traceLogId != nil) {
-                [params setObject:traceLogId forKey:@"traceLogId"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"getTraceLog"] && [self.delegate respondsToSelector:@selector(domain:getTraceLogWithTraceLogId:callback:)]) {
-        [self.delegate domain:self getTraceLogWithTraceLogId:[params objectForKey:@"traceLogId"] callback:^(WXWebGLTraceLog *traceLog, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (traceLog != nil) {
-                [params setObject:traceLog forKey:@"traceLog"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else if ([methodName isEqualToString:@"replayTraceLog"] && [self.delegate respondsToSelector:@selector(domain:replayTraceLogWithTraceLogId:stepNo:callback:)]) {
-        [self.delegate domain:self replayTraceLogWithTraceLogId:[params objectForKey:@"traceLogId"] stepNo:[params objectForKey:@"stepNo"] callback:^(NSString *screenshotDataUrl, id error) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-            if (screenshotDataUrl != nil) {
-                [params setObject:screenshotDataUrl forKey:@"screenshotDataUrl"];
-            }
-
-            responseCallback(params, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXWebGLDomain)
-
-- (WXWebGLDomain *)webGLDomain;
-{
-    return [self domainForName:@"WebGL"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.h
deleted file mode 100644
index 5e3b427..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//    
-//  WXWebGLTypes.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-    
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@interface WXWebGLCall : WXObject
-
-// Type: string
-@property (nonatomic, strong) NSString *functionName;
-
-@end
-
-
-@interface WXWebGLTraceLog : WXObject
-
-@property (nonatomic, strong) NSString *identifier;
-
-// Type: array
-@property (nonatomic, strong) NSArray *calls;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.m
deleted file mode 100644
index bc1f932..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWebGLTypes.m
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-//  WXWebGLTypes.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXWebGLTypes.h"
-
-@implementation WXWebGLCall
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"functionName",@"functionName",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic functionName;
- 
-@end
-
-@implementation WXWebGLTraceLog
-
-+ (NSDictionary *)keysToEncode;
-{
-    static NSDictionary *mappings = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mappings = [[NSDictionary alloc] initWithObjectsAndKeys:
-                    @"id",@"identifier",
-                    @"calls",@"calls",
-                    nil];
-    });
-
-    return mappings;
-}
-
-@dynamic identifier;
-@dynamic calls;
- 
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.h
deleted file mode 100644
index 9ee9c8a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-//  WXWorkerDomain.h
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-
-
-@protocol WXWorkerCommandDelegate;
-
-@interface WXWorkerDomain : WXDynamicDebuggerDomain 
-
-@property (nonatomic, assign) id <WXWorkerCommandDelegate, WXCommandDelegate> delegate;
-
-// Events
-- (void)workerCreatedWithWorkerId:(NSNumber *)workerId url:(NSString *)url inspectorConnected:(NSNumber *)inspectorConnected;
-- (void)workerTerminatedWithWorkerId:(NSNumber *)workerId;
-- (void)dispatchMessageFromWorkerWithWorkerId:(NSNumber *)workerId message:(NSDictionary *)message;
-- (void)disconnectedFromWorker;
-
-@end
-
-@protocol WXWorkerCommandDelegate <WXCommandDelegate>
-@optional
-- (void)domain:(WXWorkerDomain *)domain enableWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXWorkerDomain *)domain disableWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXWorkerDomain *)domain sendMessageToWorkerWithWorkerId:(NSNumber *)workerId message:(NSDictionary *)message callback:(void (^)(id error))callback;
-- (void)domain:(WXWorkerDomain *)domain connectToWorkerWithWorkerId:(NSNumber *)workerId callback:(void (^)(id error))callback;
-- (void)domain:(WXWorkerDomain *)domain disconnectFromWorkerWithWorkerId:(NSNumber *)workerId callback:(void (^)(id error))callback;
-- (void)domain:(WXWorkerDomain *)domain setAutoconnectToWorkersWithValue:(NSNumber *)value callback:(void (^)(id error))callback;
-
-@end
-
-@interface WXDebugger (WXWorkerDomain)
-
-@property (nonatomic, readonly, strong) WXWorkerDomain *workerDomain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.m
deleted file mode 100644
index 9e4d902..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/DerivedSources/WXWorkerDomain.m
+++ /dev/null
@@ -1,119 +0,0 @@
-//
-//  WXWorkerDomain.m
-//  PonyDebuggerDerivedSources
-//
-//  Generated on 8/23/12
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXObject.h"
-#import "WXWorkerDomain.h"
-#import "WXObject.h"
-
-
-@interface WXWorkerDomain ()
-//Commands
-
-@end
-
-@implementation WXWorkerDomain
-
-@dynamic delegate;
-
-+ (NSString *)domainName;
-{
-    return @"Worker";
-}
-
-// Events
-- (void)workerCreatedWithWorkerId:(NSNumber *)workerId url:(NSString *)url inspectorConnected:(NSNumber *)inspectorConnected;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:3];
-
-    if (workerId != nil) {
-        [params setObject:[workerId WX_JSONObject] forKey:@"workerId"];
-    }
-    if (url != nil) {
-        [params setObject:[url WX_JSONObject] forKey:@"url"];
-    }
-    if (inspectorConnected != nil) {
-        [params setObject:[inspectorConnected WX_JSONObject] forKey:@"inspectorConnected"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Worker.workerCreated" parameters:params];
-}
-- (void)workerTerminatedWithWorkerId:(NSNumber *)workerId;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:1];
-
-    if (workerId != nil) {
-        [params setObject:[workerId WX_JSONObject] forKey:@"workerId"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Worker.workerTerminated" parameters:params];
-}
-- (void)dispatchMessageFromWorkerWithWorkerId:(NSNumber *)workerId message:(NSDictionary *)message;
-{
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithCapacity:2];
-
-    if (workerId != nil) {
-        [params setObject:[workerId WX_JSONObject] forKey:@"workerId"];
-    }
-    if (message != nil) {
-        [params setObject:[message WX_JSONObject] forKey:@"message"];
-    }
-    
-    [self.debuggingServer sendEventWithName:@"Worker.dispatchMessageFromWorker" parameters:params];
-}
-- (void)disconnectedFromWorker;
-{
-    [self.debuggingServer sendEventWithName:@"Worker.disconnectedFromWorker" parameters:nil];
-}
-
-
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"] && [self.delegate respondsToSelector:@selector(domain:enableWithCallback:)]) {
-        [self.delegate domain:self enableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disable"] && [self.delegate respondsToSelector:@selector(domain:disableWithCallback:)]) {
-        [self.delegate domain:self disableWithCallback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"sendMessageToWorker"] && [self.delegate respondsToSelector:@selector(domain:sendMessageToWorkerWithWorkerId:message:callback:)]) {
-        [self.delegate domain:self sendMessageToWorkerWithWorkerId:[params objectForKey:@"workerId"] message:[params objectForKey:@"message"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"connectToWorker"] && [self.delegate respondsToSelector:@selector(domain:connectToWorkerWithWorkerId:callback:)]) {
-        [self.delegate domain:self connectToWorkerWithWorkerId:[params objectForKey:@"workerId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"disconnectFromWorker"] && [self.delegate respondsToSelector:@selector(domain:disconnectFromWorkerWithWorkerId:callback:)]) {
-        [self.delegate domain:self disconnectFromWorkerWithWorkerId:[params objectForKey:@"workerId"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else if ([methodName isEqualToString:@"setAutoconnectToWorkers"] && [self.delegate respondsToSelector:@selector(domain:setAutoconnectToWorkersWithValue:callback:)]) {
-        [self.delegate domain:self setAutoconnectToWorkersWithValue:[params objectForKey:@"value"] callback:^(id error) {
-            responseCallback(nil, error);
-        }];
-    } else {
-        [super handleMethodWithName:methodName parameters:params responseCallback:responseCallback];
-    }
-}
-
-@end
-
-
-@implementation WXDebugger (WXWorkerDomain)
-
-- (WXWorkerDomain *)workerDomain;
-{
-    return [self domainForName:@"Worker"];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.h
deleted file mode 100644
index 41c7030..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-//  NSArray+WXRuntimePropertyDescriptor.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-02-02.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-
-@class WXRuntimeRemoteObject;
-@class WXRuntimePropertyDescriptor;
-
-@interface NSArray (WXRuntimePropertyDescriptor)
-
-- (id)WX_valueForKey:(NSString *)key;
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.m
deleted file mode 100644
index 9a1bf2d..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WXRuntimePropertyDescriptor.m
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-//  NSArray+WXRuntimePropertyDescriptor.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-02-02.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "NSArray+WXRuntimePropertyDescriptor.h"
-#import "NSObject+WXRuntimePropertyDescriptor.h"
-
-#import "WXContainerIndex.h"
-#import "WXRuntimeTypes.h"
-#import "WXRuntimeDomainController.h"
-
-
-#pragma mark - Implementation
-
-@implementation NSArray (WXRuntimePropertyDescriptor)
-
-/**
- * valueForKey behaves differently for NSArray/NSSet, so define our own behaviour to actually grab the 
- * array's value for a key.
- */
-- (id)WX_valueForKey:(NSString *)key;
-{
-    if ([key isEqualToString:@"class"]) {
-        return NSStringFromClass([self class]);
-    } else if ([key isEqualToString:@"count"]) {
-        return @(self.count);
-    }
-
-    return nil;
-}
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-{
-    NSMutableArray *properties = [[NSMutableArray alloc] initWithCapacity:self.count];
-    
-    for (NSInteger index = 0; index < self.count; ++index) {
-        NSString *name = [NSString stringWithFormat:@"%ld", (long)index];
-        
-        WXContainerIndex *containerIndex = [[WXContainerIndex alloc] initWithName:name index:index];
-        [properties addObject:containerIndex];
-    }
-
-    [properties addObject:@"class"];
-    [properties addObject:@"count"];
-
-    return properties;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-{
-    WXRuntimePropertyDescriptor *descriptor = [super WX_propertyDescriptorForPropertyObject:property];
-    if (!descriptor) {
-        if ([property isKindOfClass:[WXContainerIndex class]]) {
-            descriptor = [self WX_propertyDescriptorForArrayContainerIndex:(WXContainerIndex *)property];
-        }
-    }
-    
-    return descriptor;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForArrayContainerIndex:(WXContainerIndex *)containerIndex;
-{
-    WXRuntimePropertyDescriptor *descriptor = [[WXRuntimePropertyDescriptor alloc] init];
-    
-    id propertyValue = [self objectAtIndex:containerIndex.index];
-    
-    WXRuntimeRemoteObject *remoteValueObject = [[WXRuntimeRemoteObject alloc] init];
-    
-    NSDictionary *propertyTypeDetails = WXRemoteObjectPropertyTypeDetailsForObject(propertyValue);
-    remoteValueObject.type = [propertyTypeDetails objectForKey:@"type"];
-    remoteValueObject.subtype = [propertyTypeDetails objectForKey:@"subtype"];
-    remoteValueObject.classNameString = NSStringFromClass([propertyValue class]);
-    if ([remoteValueObject.type isEqualToString:@"object"] && !remoteValueObject.subtype) {
-        remoteValueObject.objectId = [[WXRuntimeDomainController defaultInstance] registerAndGetKeyForObject:propertyValue];
-        remoteValueObject.objectDescription = remoteValueObject.classNameString;
-    } else {
-        remoteValueObject.value = propertyValue;
-    }
-    
-    descriptor.name = containerIndex.name;
-    descriptor.value = remoteValueObject;
-    descriptor.writable = [NSNumber numberWithBool:NO];
-    descriptor.configurable = [NSNumber numberWithBool:NO];
-    descriptor.enumerable = [NSNumber numberWithBool:YES];
-    descriptor.wasThrown = [NSNumber numberWithBool:NO];
-    
-    return descriptor;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.h
deleted file mode 100644
index db4efd5..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-//  NSArray+WX_JSONObject.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/6/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface NSArray (WX_JSONObject)
-
-- (NSArray *)WX_JSONObject;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.m
deleted file mode 100644
index e9ce35f..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSArray+WX_JSONObject.m
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-//  NSArray+WX_JSONObject.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/6/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "NSArray+WX_JSONObject.h"
-
-@implementation NSArray (WX_JSONObject)
-
-- (NSArray *)WX_JSONObject;
-{
-    NSMutableArray *ret = [[NSMutableArray alloc] initWithCapacity:self.count];
-    
-    for (id obj in self) {
-        [ret addObject:[obj WX_JSONObject]];
-    }
-    
-    return ret;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.h
deleted file mode 100644
index 02eea2a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.h
+++ /dev/null
@@ -1,9 +0,0 @@
-//
-// Created by Simone Civetta on 01/08/14.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface NSData (WXDebugger)
-+ (NSData *)emptyDataOfLength:(NSUInteger)length;
-@end
\ No newline at end of file
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.m
deleted file mode 100644
index 34ffffb..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSData+WXDebugger.m
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// Created by Simone Civetta on 01/08/14.
-//
-
-#import "NSData+WXDebugger.h"
-
-
-@implementation NSData (WXDebugger)
-
-+ (NSData *)emptyDataOfLength:(NSUInteger)length
-{
-    NSMutableData *theData = [NSMutableData dataWithCapacity:length];
-    for (unsigned int i = 0 ; i < length/4 ; ++i) {
-        u_int32_t randomBits = 0;
-        [theData appendBytes:(void*)&randomBits length:4];
-    }
-    return theData;
-}
-
-@end
\ No newline at end of file
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.h
deleted file mode 100644
index c7a0c99..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-//  NSDate+WXDebugger.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-01-30.
-//
-//
-
-#import <Foundation/Foundation.h>
-
-@interface NSDate (WXDebugger)
-
-+ (NSNumber *)WX_timestamp;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.m
deleted file mode 100644
index aa31bf5..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WXDebugger.m
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-//  NSDate+WXDebugger.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-01-30.
-//
-//
-
-#import "NSDate+WXDebugger.h"
-
-@implementation NSDate (WXDebugger)
-
-+ (NSNumber *)WX_timestamp;
-{
-    return [NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.h
deleted file mode 100644
index bf4814a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-//  NSDate+WX_JSONObject.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/9/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface NSDate (WX_JSONObject)
-
-- (NSString *)WX_JSONObject;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.m
deleted file mode 100644
index 8b95a1f..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDate+WX_JSONObject.m
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-//  NSDate+WX_JSONObject.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/9/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "NSDate+WX_JSONObject.h"
-
-@implementation NSDate (WX_JSONObject)
-
-- (NSString *)WX_JSONObject;
-{
-    return self.description;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.h
deleted file mode 100644
index 550aa15..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1,22 +0,0 @@
-//
-//  NSDictionary+WXRuntimePropertyDescriptor.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-02-02.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-
-@class WXRuntimeRemoteObject;
-@class WXRuntimePropertyDescriptor;
-
-@interface NSDictionary (WXRuntimePropertyDescriptor)
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.m
deleted file mode 100644
index 8cfa318..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSDictionary+WXRuntimePropertyDescriptor.m
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-//  NSDictionary+WXRuntimePropertyDescriptor.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-02-02.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "NSDictionary+WXRuntimePropertyDescriptor.h"
-#import "NSObject+WXRuntimePropertyDescriptor.h"
-
-#import "WXRuntimeTypes.h"
-
-
-#pragma mark - Private Classes
-
-@interface _WXDictionaryPropertyKey : NSObject
-
-- (id)initWithKey:(id <NSCopying>)key stringRepresentation:(NSString *)stringKey;
-
-@property (nonatomic, copy) id <NSCopying> key;
-@property (nonatomic, copy) NSString *stringKey;
-
-@end
-
-
-#pragma mark - Implementation
-
-@implementation NSDictionary (WXRuntimePropertyDescriptor)
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-{
-    NSMutableArray *properties = [[NSMutableArray alloc] initWithCapacity:self.count];
-    
-    [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-        NSString *stringKey = [NSString stringWithFormat:@"%@", key];
-        
-        _WXDictionaryPropertyKey *containerIndex = [[_WXDictionaryPropertyKey alloc] initWithKey:key stringRepresentation:stringKey];
-        [properties addObject:containerIndex];
-    }];
-    
-    return properties;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-{
-    WXRuntimePropertyDescriptor *descriptor = [super WX_propertyDescriptorForPropertyObject:property];
-    if (!descriptor) {
-        if ([property isKindOfClass:[_WXDictionaryPropertyKey class]]) {
-            descriptor = [self WX_propertyDescriptorForDictionaryContainerKey:(_WXDictionaryPropertyKey *)property];
-        }
-    }
-    
-    return descriptor;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForDictionaryContainerKey:(_WXDictionaryPropertyKey *)containerKey;
-{
-    WXRuntimePropertyDescriptor *descriptor = [[WXRuntimePropertyDescriptor alloc] init];
-    
-    id propertyValue = [self objectForKey:containerKey.key];
-    
-    descriptor.name = containerKey.stringKey;
-    descriptor.value = [self WX_propertyDescriptorValueForObject:propertyValue];
-    descriptor.writable = [NSNumber numberWithBool:NO];
-    descriptor.configurable = [NSNumber numberWithBool:NO];
-    descriptor.enumerable = [NSNumber numberWithBool:YES];
-    descriptor.wasThrown = [NSNumber numberWithBool:NO];
-    
-    return descriptor;
-}
-
-@end
-
-
-#pragma mark - _WXDictionaryPropertyKey
-
-@implementation _WXDictionaryPropertyKey
-
-@synthesize stringKey = _stringKey;
-@synthesize key = _key;
-
-- (id)initWithKey:(id<NSCopying>)key stringRepresentation:(NSString *)stringKey;
-{
-    if (!(self = [super self])) {
-        return nil;
-    }
-    
-    self.key = key;
-    self.stringKey = stringKey;
-    
-    return self;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.h
deleted file mode 100644
index e80c07d..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-//  NSError+WX_JSONObject.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/9/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface NSError (WX_JSONObject)
-
-- (NSString *)WX_JSONObject;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.m
deleted file mode 100644
index ba0915c..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSError+WX_JSONObject.m
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-//  NSError+WX_JSONObject.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/9/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "NSError+WX_JSONObject.h"
-
-@implementation NSError (WX_JSONObject)
-
-- (NSString *)WX_JSONObject;
-{
-    return self.description;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.h
deleted file mode 100644
index 6894f7a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-//  NSManagedObject+WXRuntimePropertyDescriptor.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/7/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <CoreData/CoreData.h>
-
-
-@class WXRuntimeRemoteObject;
-@class WXRuntimePropertyDescriptor;
-
-
-@interface NSManagedObject (WXRuntimePropertyDescriptor)
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-
-- (WXRuntimeRemoteObject *)WX_propertyDescriptorValueForPropertyDescription:(NSPropertyDescription *)property;
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyDescription:(NSPropertyDescription *)property;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.m
deleted file mode 100644
index 4f23cd7..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSManagedObject+WXRuntimePropertyDescriptor.m
+++ /dev/null
@@ -1,105 +0,0 @@
-//
-//  NSManagedObject+WXRuntimePropertyDescriptor.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/7/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <objc/runtime.h>
-
-#import "WXDefinitions.h"
-#import "WXRuntimeDomainController.h"
-#import "WXRuntimeTypes.h"
-#import "NSManagedObject+WXRuntimePropertyDescriptor.h"
-#import "NSObject+WXRuntimePropertyDescriptor.h"
-
-
-@implementation NSManagedObject (WXRuntimePropertyDescriptor)
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-{
-    NSMutableArray *properties = (NSMutableArray *)[super WX_propertiesForPropertyDescriptors];
-    if (properties) {
-        // NSObject's implementation will catch the @property definitions, so replace those with the
-        // NSPropertyDescription instance.
-        for (NSPropertyDescription *propertyDescription in self.entity.properties) {
-            if ([properties containsObject:propertyDescription.name]) {
-                [properties removeObject:propertyDescription.name];
-            }
-        }
-
-        return [properties arrayByAddingObjectsFromArray:self.entity.properties];
-    }
-    
-    return self.entity.properties;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-{
-    WXRuntimePropertyDescriptor *descriptor = [super WX_propertyDescriptorForPropertyObject:property];
-    if (!descriptor) {
-        if ([property isKindOfClass:[NSPropertyDescription class]]) {
-            descriptor = [self WX_propertyDescriptorForPropertyDescription:(NSPropertyDescription *)property];
-        }
-    }
-    
-    return descriptor;
-}
-
-- (WXRuntimeRemoteObject *)WX_propertyDescriptorValueForPropertyDescription:(NSPropertyDescription *)property;
-{
-    id value = [self valueForKey:property.name];
-    
-    WXRuntimeRemoteObject *remoteValueObject = [self WX_propertyDescriptorValueForObject:value];
-
-    NSDictionary *propertyTypeDetails = WXRemoteObjectPropertyTypeDetailsForPropertyDescription(property);
-    remoteValueObject.type = [propertyTypeDetails objectForKey:@"type"];
-    remoteValueObject.subtype = [propertyTypeDetails objectForKey:@"subtype"];
-    
-    if ([property isKindOfClass:[NSAttributeDescription class]]) {
-        remoteValueObject.classNameString = ((NSAttributeDescription *)property).attributeValueClassName;
-    } else if ([property isKindOfClass:[NSRelationshipDescription class]]) {
-        NSRelationshipDescription *relationshipProperty = (NSRelationshipDescription *)property;
-        remoteValueObject.classNameString = relationshipProperty.destinationEntity.name;
-        
-        if ([relationshipProperty isToMany]) {
-            remoteValueObject.objectDescription = [NSString stringWithFormat:@"%@<%@> <count = %@>", [value class], remoteValueObject.classNameString, @([value count])];
-        } else {
-            remoteValueObject.objectDescription = remoteValueObject.classNameString;
-        }
-    }
-    
-    // Core Data doesn't seem to do [NSNumber numberWithBool:] when initializing boolean NSNumbers, so do it manually.
-    if ([remoteValueObject.type isEqualToString:@"boolean"]) {
-        remoteValueObject.value = [NSNumber numberWithBool:[value boolValue]];
-    }
-    
-    if (!value) {
-        value = [NSNull null];
-        remoteValueObject.type = @"object";
-        remoteValueObject.subtype = @"null";
-    }
-    
-    return remoteValueObject;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyDescription:(NSPropertyDescription *)property;
-{
-    WXRuntimePropertyDescriptor *descriptor = [[WXRuntimePropertyDescriptor alloc] init];
-
-    descriptor.name = property.name;
-    descriptor.value = [self WX_propertyDescriptorValueForPropertyDescription:property];
-    descriptor.writable = [NSNumber numberWithBool:NO];
-    descriptor.configurable = [NSNumber numberWithBool:NO];
-    descriptor.wasThrown = [NSNumber numberWithBool:NO];
-    descriptor.enumerable = [NSNumber numberWithBool:YES];
-    
-    return descriptor;
-}
-
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.h
deleted file mode 100644
index f8c60b0..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-//  NSObject+WXRuntimePropertyDescriptor.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/7/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-#import <CoreData/CoreData.h>
-#import <objc/runtime.h>
-
-
-@class WXRuntimeRemoteObject;
-@class WXRuntimePropertyDescriptor;
-
-
-@interface NSObject (WXRuntimePropertyDescriptor)
-
-+ (WXRuntimeRemoteObject *)WX_remoteObjectRepresentationForObject:(id)object;
-
-- (id)WX_valueForKey:(NSString *)key;
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-- (NSArray *)WX_propertyDescriptors;
-
-- (WXRuntimeRemoteObject *)WX_propertyDescriptorValueForSelector:(SEL)selector;
-- (WXRuntimeRemoteObject *)WX_propertyDescriptorValueForObject:(id)object;
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForSelector:(SEL)selector;
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyName:(NSString *)propertyName property:(objc_property_t)property;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.m
deleted file mode 100644
index 4b7d69d..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSObject+WXRuntimePropertyDescriptor.m
+++ /dev/null
@@ -1,213 +0,0 @@
-//
-//  NSObject+WXRuntimePropertyDescriptor.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/7/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "NSObject+WXRuntimePropertyDescriptor.h"
-
-#import "WXDefinitions.h"
-#import "WXRuntimeDomainController.h"
-#import "WXRuntimeTypes.h"
-
-
-#pragma mark - Definitions
-
-NSDictionary *WXExtractPropertyAttributes(objc_property_t property);
-
-
-#pragma mark - Implementation
-
-@implementation NSObject (WXRuntimePropertyDescriptor)
-
-#pragma mark - Class Methods
-
-+ (WXRuntimeRemoteObject *)WX_remoteObjectRepresentationForObject:(id)object;
-{
-    id propertyValue = object;
-    if ([propertyValue class] == propertyValue) {
-        propertyValue = NSStringFromClass(propertyValue);
-    }
-    
-    NSDictionary *propertyTypeDetails = WXRemoteObjectPropertyTypeDetailsForObject(propertyValue);
-    
-    WXRuntimeRemoteObject *remoteValueObject = [[WXRuntimeRemoteObject alloc] init];
-    remoteValueObject.type = [propertyTypeDetails objectForKey:@"type"];
-    remoteValueObject.subtype = [propertyTypeDetails objectForKey:@"subtype"];
-    remoteValueObject.classNameString = NSStringFromClass([propertyValue class]);
-
-    if ([remoteValueObject.type isEqualToString:@"object"]) {
-        if (propertyValue) {
-            if (!remoteValueObject.subtype) {
-                remoteValueObject.objectId = [[WXRuntimeDomainController defaultInstance] registerAndGetKeyForObject:propertyValue];
-            } else if ([remoteValueObject.subtype isEqualToString:@"array"]) {
-                remoteValueObject.objectId = [[WXRuntimeDomainController defaultInstance] registerAndGetKeyForObject:propertyValue];
-                remoteValueObject.objectDescription = [NSString stringWithFormat:@"%@ <count = %@>", [propertyValue class], @([propertyValue count])];
-            } else if ([remoteValueObject.subtype isEqualToString:@"date"]) {
-                NSDate *date = propertyValue;
-                remoteValueObject.value = [date description];
-                remoteValueObject.objectDescription = @"";
-            } else if ([remoteValueObject.subtype isEqualToString:@"regexp"]) {
-                NSRegularExpression *regEx = propertyValue;
-                remoteValueObject.value = regEx.pattern;
-                remoteValueObject.objectDescription = @"";
-            }
-            
-            if (!remoteValueObject.objectDescription) {
-                remoteValueObject.objectDescription = [NSString stringWithFormat:@"%@ %@", [propertyValue class], [propertyValue description]];
-            }
-        }
-    } else {
-        remoteValueObject.value = propertyValue;
-    }
-    
-    if (!propertyValue) {
-        remoteValueObject.value = [NSNull null];
-        remoteValueObject.type = @"object";
-        remoteValueObject.subtype = @"null";
-    }
-    
-    return remoteValueObject;
-}
-
-#pragma mark - Instance Methods
-
-- (id)WX_valueForKey:(NSString *)key;
-{
-    return [self valueForKey:key];
-}
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-{
-    NSMutableArray *array = [[NSMutableArray alloc] init];
-    [array addObject:@"class"];
-
-    unsigned int outCount, i;
-    objc_property_t *properties = class_copyPropertyList([self class], &outCount);
-    for (i = 0; i < outCount; i++) {
-    	objc_property_t property = properties[i];
-    	const char *propName = property_getName(property);
-    	if (propName) {
-    		NSString *propertyName = [NSString stringWithCString:propName encoding:NSASCIIStringEncoding];
-            [array addObject:propertyName];
-    	}
-    }
-    
-    free(properties);
-
-    return array;
-}
-
-- (NSArray *)WX_propertyDescriptors;
-{
-    NSArray *properties = [self WX_propertiesForPropertyDescriptors];
-    NSMutableArray *descriptors = [[NSMutableArray alloc] initWithCapacity:properties.count];
-    for (NSObject *property in properties) {
-        WXRuntimePropertyDescriptor *descriptor = [self WX_propertyDescriptorForPropertyObject:property];
-        if (descriptor) {
-            [descriptors addObject:descriptor];
-        }
-    }
-    
-    return descriptors;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-{
-    WXRuntimePropertyDescriptor *descriptor = nil;
-    if ([property isKindOfClass:[NSString class]]) {
-        NSString *propertyName = (NSString *)property;
-        
-        objc_property_t propertyDefinition = class_getProperty([self class], [propertyName cStringUsingEncoding:NSASCIIStringEncoding]);
-        if (propertyDefinition != NULL) {
-            descriptor = [self WX_propertyDescriptorForPropertyName:propertyName property:propertyDefinition];
-        } else {
-            SEL selector = NSSelectorFromString(propertyName);
-            if (selector != nil) {
-                descriptor = [self WX_propertyDescriptorForSelector:selector];
-            }
-        }
-    }
-    
-    return descriptor;
-}
-
-- (WXRuntimeRemoteObject *)WX_propertyDescriptorValueForSelector:(SEL)selector;
-{
-    id value = [self WX_valueForKey:NSStringFromSelector(selector)];
-
-    WXRuntimeRemoteObject *remoteValueObject = [self WX_propertyDescriptorValueForObject:value];
-    
-    // Determine the real class name.
-    static const int retValueBufferSize = 32;
-    char retVal[retValueBufferSize];
-    
-    Method method = class_getInstanceMethod([self class], selector);
-    method_getReturnType(method, retVal, retValueBufferSize);
-    NSString *encodedReturnType = [[NSString alloc] initWithBytes:retVal length:retValueBufferSize encoding:NSASCIIStringEncoding];
-    NSString *returnType = WXReturnTypeStringForEncodedType(encodedReturnType);
-    
-    if ([returnType isEqualToString:@"id"]) {
-        remoteValueObject.classNameString = NSStringFromClass([value class]);
-    } else {
-        remoteValueObject.classNameString = returnType;
-    }
-    
-    return remoteValueObject;
-}
-
-- (WXRuntimeRemoteObject *)WX_propertyDescriptorValueForObject:(id)object;
-{
-    WXRuntimeRemoteObject *remoteValueObject = [[self class] WX_remoteObjectRepresentationForObject:object];
-    return remoteValueObject;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForSelector:(SEL)selector;
-{
-    if (![self respondsToSelector:selector]) {
-        return nil;
-    }
-    
-    WXRuntimePropertyDescriptor *descriptor = [[WXRuntimePropertyDescriptor alloc] init];
-    
-    descriptor.name = NSStringFromSelector(selector);
-    descriptor.value = [self WX_propertyDescriptorValueForSelector:selector];
-    descriptor.writable = [NSNumber numberWithBool:NO];
-    descriptor.configurable = [NSNumber numberWithBool:NO];
-    descriptor.enumerable = [NSNumber numberWithBool:NO];
-    descriptor.wasThrown = [NSNumber numberWithBool:NO];
-    
-    return descriptor;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyName:(NSString *)propertyName property:(objc_property_t)property
-{
-    id object = nil;
-    @try {
-        object = [self valueForKey:propertyName];
-    } @catch (NSException *exception) {
-        // valueForKey won't work for certain types (like selectors, pointers, blocks).
-        // TODO: Make introspection for primitive types work.
-        object = @"<WXDebugger: unsupported type>";
-    }
-
-    WXRuntimePropertyDescriptor *descriptor = [[WXRuntimePropertyDescriptor alloc] init];
-
-    descriptor.name = propertyName;
-    descriptor.value = [self WX_propertyDescriptorValueForObject:object];
-    descriptor.writable = [NSNumber numberWithBool:NO];
-    descriptor.configurable = [NSNumber numberWithBool:NO];
-    descriptor.enumerable = [NSNumber numberWithBool:YES];
-    descriptor.wasThrown = [NSNumber numberWithBool:NO];
-    
-    return descriptor;
-}
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.h
deleted file mode 100644
index bd61264..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-//  NSOrderedSet+WXRuntimePropertyDescriptor.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-02-03.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-#import <Foundation/Foundation.h>
-
-@class WXRuntimeRemoteObject;
-@class WXRuntimePropertyDescriptor;
-
-@interface NSOrderedSet (WXRuntimePropertyDescriptor)
-
-- (id)WX_valueForKey:(NSString *)key;
-- (id)WX_objectAtIndex:(NSUInteger)index;
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.m
deleted file mode 100644
index a844d6b..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSOrderedSet+WXRuntimePropertyDescriptor.m
+++ /dev/null
@@ -1,105 +0,0 @@
-//
-//  NSOrderedSet+WXRuntimePropertyDescriptor.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-02-03.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "NSOrderedSet+WXRuntimePropertyDescriptor.h"
-#import "NSObject+WXRuntimePropertyDescriptor.h"
-
-#import "WXContainerIndex.h"
-#import "WXRuntimeTypes.h"
-#import "WXRuntimeDomainController.h"
-
-
-#pragma mark - Implementation
-
-@implementation NSOrderedSet (WXRuntimePropertyDescriptor)
-
-/**
- * Since this set has order, just grab the object at the index.
- */
-- (id)WX_objectAtIndex:(NSUInteger)index;
-{
-    return [self objectAtIndex:index];
-}
-
-/**
- * valueForKey behaves differently for NSArray/NSSet, so define our own behaviour to actually grab the 
- * array's value for a key.
- */
-- (id)WX_valueForKey:(NSString *)key;
-{
-    if ([key isEqualToString:@"class"]) {
-        return NSStringFromClass([self class]);
-    } else if ([key isEqualToString:@"count"]) {
-        return @(self.count);
-    }
-
-    return nil;
-}
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-{
-    NSMutableArray *properties = [[NSMutableArray alloc] initWithCapacity:self.count];
-    
-    for (NSInteger index = 0; index < self.count; ++index) {
-        NSString *name = [NSString stringWithFormat:@"%ld", (long)index];
-        
-        WXContainerIndex *containerIndex = [[WXContainerIndex alloc] initWithName:name index:index];
-        [properties addObject:containerIndex];
-    }
-
-    [properties addObject:@"class"];
-    [properties addObject:@"count"];
-
-    return properties;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-{
-    WXRuntimePropertyDescriptor *descriptor = [super WX_propertyDescriptorForPropertyObject:property];
-    if (!descriptor) {
-        if ([property isKindOfClass:[WXContainerIndex class]]) {
-            descriptor = [self WX_propertyDescriptorForSetContainerIndex:(WXContainerIndex *)property];
-        }
-    }
-    
-    return descriptor;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForSetContainerIndex:(WXContainerIndex *)containerIndex;
-{
-    WXRuntimePropertyDescriptor *descriptor = [[WXRuntimePropertyDescriptor alloc] init];
-    
-    id propertyValue = [self WX_objectAtIndex:containerIndex.index];
-    
-    WXRuntimeRemoteObject *remoteValueObject = [[WXRuntimeRemoteObject alloc] init];
-    
-    NSDictionary *propertyTypeDetails = WXRemoteObjectPropertyTypeDetailsForObject(propertyValue);
-    remoteValueObject.type = [propertyTypeDetails objectForKey:@"type"];
-    remoteValueObject.subtype = [propertyTypeDetails objectForKey:@"subtype"];
-    remoteValueObject.classNameString = NSStringFromClass([propertyValue class]);
-    if ([remoteValueObject.type isEqualToString:@"object"] && !remoteValueObject.subtype) {
-        remoteValueObject.objectId = [[WXRuntimeDomainController defaultInstance] registerAndGetKeyForObject:propertyValue];
-        remoteValueObject.objectDescription = remoteValueObject.classNameString;
-    } else {
-        remoteValueObject.value = propertyValue;
-    }
-    
-    descriptor.name = containerIndex.name;
-    descriptor.value = remoteValueObject;
-    descriptor.writable = [NSNumber numberWithBool:NO];
-    descriptor.configurable = [NSNumber numberWithBool:NO];
-    descriptor.enumerable = [NSNumber numberWithBool:YES];
-    descriptor.wasThrown = [NSNumber numberWithBool:NO];
-    
-    return descriptor;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.h
deleted file mode 100644
index f2a2167..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-//  NSSet+WXRuntimePropertyDescriptor.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-02-03.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-#import <Foundation/Foundation.h>
-
-@class WXRuntimeRemoteObject;
-@class WXRuntimePropertyDescriptor;
-
-@interface NSSet (WXRuntimePropertyDescriptor)
-
-- (id)WX_valueForKey:(NSString *)key;
-- (id)WX_objectAtIndex:(NSUInteger)index;
-- (NSArray *)WX_sortedArrayRepresentation;
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.m
deleted file mode 100644
index 4a24e6f..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/NSSet+WXRuntimePropertyDescriptor.m
+++ /dev/null
@@ -1,119 +0,0 @@
-//
-//  NSSet+WXRuntimePropertyDescriptor.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-02-03.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "NSSet+WXRuntimePropertyDescriptor.h"
-#import "NSObject+WXRuntimePropertyDescriptor.h"
-
-#import "WXContainerIndex.h"
-#import "WXRuntimeTypes.h"
-#import "WXRuntimeDomainController.h"
-
-
-#pragma mark - Implementation
-
-@implementation NSSet (WXRuntimePropertyDescriptor)
-
-- (id)WX_objectAtIndex:(NSUInteger)index;
-{
-    return [[self WX_sortedArrayRepresentation] objectAtIndex:index];
-}
-
-/**
- * Use this to get a consistent array ordering. Just sort by pointer value, since this won't change, and is 
- * cheap to access.
- */
-- (NSArray *)WX_sortedArrayRepresentation;
-{
-    return [[self allObjects] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
-        if ((int)obj1 > (int)obj2) {
-            return NSOrderedDescending;
-        } else if ((int)obj1 < (int)obj2) {
-            return NSOrderedAscending;
-        }
-
-        return NSOrderedSame;
-    }];
-}
-
-/**
- * valueForKey behaves differently for NSArray/NSSet, so define our own behaviour to actually grab the 
- * array's value for a key.
- */
-- (id)WX_valueForKey:(NSString *)key;
-{
-    if ([key isEqualToString:@"class"]) {
-        return NSStringFromClass([self class]);
-    } else if ([key isEqualToString:@"count"]) {
-        return @(self.count);
-    }
-
-    return nil;
-}
-
-- (NSArray *)WX_propertiesForPropertyDescriptors;
-{
-    NSMutableArray *properties = [[NSMutableArray alloc] initWithCapacity:self.count];
-    
-    for (NSInteger index = 0; index < self.count; ++index) {
-        NSString *name = [NSString stringWithFormat:@"%ld", (long)index];
-        
-        WXContainerIndex *containerIndex = [[WXContainerIndex alloc] initWithName:name index:index];
-        [properties addObject:containerIndex];
-    }
-
-    [properties addObject:@"class"];
-    [properties addObject:@"count"];
-
-    return properties;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForPropertyObject:(NSObject *)property;
-{
-    WXRuntimePropertyDescriptor *descriptor = [super WX_propertyDescriptorForPropertyObject:property];
-    if (!descriptor) {
-        if ([property isKindOfClass:[WXContainerIndex class]]) {
-            descriptor = [self WX_propertyDescriptorForSetContainerIndex:(WXContainerIndex *)property];
-        }
-    }
-    
-    return descriptor;
-}
-
-- (WXRuntimePropertyDescriptor *)WX_propertyDescriptorForSetContainerIndex:(WXContainerIndex *)containerIndex;
-{
-    WXRuntimePropertyDescriptor *descriptor = [[WXRuntimePropertyDescriptor alloc] init];
-    
-    id propertyValue = [self WX_objectAtIndex:containerIndex.index];
-    
-    WXRuntimeRemoteObject *remoteValueObject = [[WXRuntimeRemoteObject alloc] init];
-    
-    NSDictionary *propertyTypeDetails = WXRemoteObjectPropertyTypeDetailsForObject(propertyValue);
-    remoteValueObject.type = [propertyTypeDetails objectForKey:@"type"];
-    remoteValueObject.subtype = [propertyTypeDetails objectForKey:@"subtype"];
-    remoteValueObject.classNameString = NSStringFromClass([propertyValue class]);
-    if ([remoteValueObject.type isEqualToString:@"object"] && !remoteValueObject.subtype) {
-        remoteValueObject.objectId = [[WXRuntimeDomainController defaultInstance] registerAndGetKeyForObject:propertyValue];
-        remoteValueObject.objectDescription = remoteValueObject.classNameString;
-    } else {
-        remoteValueObject.value = propertyValue;
-    }
-    
-    descriptor.name = containerIndex.name;
-    descriptor.value = remoteValueObject;
-    descriptor.writable = [NSNumber numberWithBool:NO];
-    descriptor.configurable = [NSNumber numberWithBool:NO];
-    descriptor.enumerable = [NSNumber numberWithBool:YES];
-    descriptor.wasThrown = [NSNumber numberWithBool:NO];
-    
-    return descriptor;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.h
deleted file mode 100644
index 20e827a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXPonyDebugger.h"
-#import "WXCSSDomain.h"
-
-@interface WXCSSDomainController : WXDomainController<WXCSSCommandDelegate>
-
-+ (WXCSSDomainController *)defaultInstance;
-
-@property (nonatomic, strong) WXCSSDomain *domain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.m
deleted file mode 100644
index fd93fb9..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXCSSDomainController.m
+++ /dev/null
@@ -1,395 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXCSSDomainController.h"
-#import "WXDOMDomainController.h"
-#import "WXCSSTypes.h"
-#import <WeexSDK/WeexSDK.h>
-
-@implementation WXCSSDomainController
-@dynamic domain;
-
-+ (WXCSSDomainController *)defaultInstance {
-    static WXCSSDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXCSSDomainController alloc] init];
-    });
-    return defaultInstance;
-}
-
-+ (Class)domainClass {
-    return [WXCSSDomain class];
-}
-
-#pragma mark - private method
-- (WXDOMNode *)p_getNodeFromNodeId:(NSNumber *)nodeId rootNode:(WXDOMNode *)rootNode{
-    if (!rootNode) {
-        return nil;
-    }
-    if ([nodeId longValue] == [rootNode.nodeId longValue]) {
-        return rootNode;
-    }
-    if (rootNode.children.count > 0) {
-        for (WXDOMNode *node in rootNode.children) {
-            if ([node.nodeId longValue] == [nodeId longValue]) {
-                return node;
-            }else {
-                WXDOMNode *returnNode = [self p_getNodeFromNodeId:nodeId rootNode:node];
-                if (returnNode) {
-                    return returnNode;
-                }
-            }
-        }
-    }
-    return nil;
-}
-
-- (NSArray *)p_formateFrame:(NSString *)frameStr {
-    NSCharacterSet *characterSet1 = [NSCharacterSet characterSetWithCharactersInString:@"{},"];
-    NSArray *array = [frameStr componentsSeparatedByCharactersInSet:characterSet1];
-    NSMutableArray *position = [NSMutableArray array];
-    for(NSString *string in array)
-    {
-        NSString *removeFrame = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
-        if ([removeFrame length] > 0) {
-            [position addObject:removeFrame];
-        }
-    }
-    return position;
-}
-
-#pragma mark - WXCSSCommandDelegate
-- (void)domain:(WXCSSDomain *)domain getMatchedStylesForNodeWithNodeId:(NSNumber *)nodeId includePseudo:(NSNumber *)includePseudo includeInherited:(NSNumber *)includeInherited callback:(void (^)(NSArray *matchedCSSRules, NSArray *pseudoElements, NSArray *inherited, id error))callback {
-    NSArray *inherited = @[];
-    NSArray *pseudoElements = @[];
-
-    if ([WXDebugger isVDom]) {
-        NSInteger transformNodeId = nodeId.integerValue;
-        if (transformNodeId > 2) {
-            transformNodeId -= 2;
-        }
-        NSString *nodeKey = [NSString stringWithFormat:@"%ld",(long)transformNodeId];
-        NSString *nodeName = nil;
-        
-        /********actual********/
-        UIView *selectedView = [[[WXDOMDomainController defaultInstance] getObjectsForComponentRefs] objectForKey:[NSString stringWithFormat:@"%ld",(long)nodeId.integerValue]];
-        NSArray *actualAttrs = [[WXDOMDomainController defaultInstance] attributesArrayForObject:selectedView];
-        
-        WXCSSSelectorListData *selectorData = [[WXCSSSelectorListData alloc] init];
-        //assembling object of cssStyle
-        WXCSSCSSStyle *style = [[WXCSSCSSStyle alloc] init];
-        NSMutableArray *cssProperties = [NSMutableArray array];
-        NSMutableString *cssText = [[NSMutableString alloc] init];
-        for (int i = 0; i < actualAttrs.count; i++) {
-            if (i & 1) {
-                if (![actualAttrs[i-1] isEqualToString:@"frame"]) {
-                    WXCSSCSSProperty *cssProperty = [[WXCSSCSSProperty alloc] init];
-                    [cssText appendFormat:@"%@;",actualAttrs[i]];
-                    cssProperty.name = actualAttrs[i-1];
-                    cssProperty.value = actualAttrs[i];
-                    [cssProperties addObject:[cssProperty WX_JSONObject]];
-                }else {
-                    NSArray *names = @[@"width",@"height",@"top",@"left"];
-                    NSArray *position = [self p_formateFrame:actualAttrs[i]];
-                    if (position.count == 4) {
-                        NSDictionary *property = @{@"left":position[0],
-                                                   @"top":position[1],
-                                                   @"width":position[2],
-                                                   @"height":position[3]};
-                        for (int i = 0; i < property.count; i++) {
-                            WXCSSCSSProperty *cssProperty = [[WXCSSCSSProperty alloc] init];
-                            cssProperty.name = names[i];
-                            cssProperty.value = [NSString stringWithFormat:@"%@px",[self _toPixelFromPoint:property[names[i]]]];
-                            [cssText appendString:[NSString stringWithFormat:@"%@:%@;",cssProperty.name,cssProperty.value]];
-                            [cssProperties addObject:[cssProperty WX_JSONObject]];
-                        }
-                    }
-                }
-            }else {
-                if (![actualAttrs[i] isEqualToString:@"frame"]) {
-                    [cssText appendFormat:@"%@:",actualAttrs[i]];
-                    if ([actualAttrs[i] isEqualToString:@"class"]) {
-                        nodeName = actualAttrs[i+1];
-                    }
-                }
-            }
-        }
-        selectorData.text = nodeName ? : @"";
-        selectorData.selectors = @[@{@"text":nodeName ? : @""},@{@"text":@"actual value"}];
-        style.shorthandEntries = @[];
-        style.cssText = cssText;
-        style.cssProperties = [NSArray arrayWithArray:cssProperties];
-        WXCSSCSSRule *rule = [[WXCSSCSSRule alloc] init];
-        rule.media = @[];
-        rule.origin = @"inspector";
-        rule.selectorList = selectorData;
-        rule.style = style;
-        /********vdom********/
-        WXCSSSelectorListData *vdomSelectorData = [[WXCSSSelectorListData alloc] init];
-        vdomSelectorData.text = nodeName ? : @"";
-        vdomSelectorData.selectors = @[@{@"text":nodeName ? : @""},@{@"text":@"vdom value"}];
-        //assembling object of cssStyle
-        WXCSSCSSStyle *vdomStyle = [[WXCSSCSSStyle alloc] init];
-        NSMutableArray *vdomCssProperties = [NSMutableArray array];
-        NSMutableString *vdomCssText = [[NSMutableString alloc] init];
-        
-        WXPerformBlockOnComponentThread(^{
-            __block WXComponent *component = [[WXDOMDomainController defaultInstance] _getComponentFromRef:nodeKey];
-            WXPerformBlockOnMainThread(^{
-                if (component) {
-                    NSDictionary *vdomStyles = component.styles;
-                    if (vdomStyles.allKeys > 0) {
-                        for (NSString *key in vdomStyles.allKeys) {
-                            WXCSSCSSProperty *cssProperty = [[WXCSSCSSProperty alloc] init];
-                            cssProperty.name = key;
-                            if ([[vdomStyles objectForKey:key] isKindOfClass:[NSString class]]) {
-                                cssProperty.value = [vdomStyles objectForKey:key];
-                            }else {
-                                cssProperty.value = [NSString stringWithFormat:@"%@",[vdomStyles objectForKey:key]];
-                            }
-                            [vdomCssText appendString:[NSString stringWithFormat:@"%@:%@;",cssProperty.name,cssProperty.value]];
-                            [vdomCssProperties addObject:[cssProperty WX_JSONObject]];
-                        }
-                    }
-                }
-                
-                vdomStyle.shorthandEntries = @[];
-                vdomStyle.cssText = vdomCssText;
-                vdomStyle.cssProperties = [NSArray arrayWithArray:vdomCssProperties];
-                
-                WXCSSCSSRule *vdomRule = [[WXCSSCSSRule alloc] init];
-                vdomRule.media = @[];
-                vdomRule.origin = @"inspector";
-                vdomRule.selectorList = vdomSelectorData;
-                vdomRule.style = vdomStyle;
-                
-                
-                if ([rule WX_JSONObject] && [vdomRule WX_JSONObject]) {
-                    NSDictionary *ruleMatch = @{@"matchingSelectors":@[[NSNumber numberWithInteger:0]],@"rule":[rule WX_JSONObject]};
-                    NSDictionary *vdomRuleMatch = @{@"matchingSelectors":@[[NSNumber numberWithInteger:0]],@"rule":[vdomRule WX_JSONObject]};
-                    NSArray *matchCSSRules = @[ruleMatch, vdomRuleMatch];
-                    callback(matchCSSRules,pseudoElements,inherited,nil);
-                }else {
-                    callback(nil,pseudoElements,inherited,nil);
-                }
-            });
-        });
-    } else {
-        //assembling object of rule
-        WXDOMNode *rootDomNode = [WXDOMDomainController defaultInstance].rootDomNode;
-        WXDOMNode *node = [self p_getNodeFromNodeId:nodeId rootNode:rootDomNode];
-        if (!node) {
-            rootDomNode = [WXDOMDomainController defaultInstance].rootNode;
-            node = [self p_getNodeFromNodeId:nodeId rootNode:rootDomNode];
-            if (!node) {
-                callback(nil,pseudoElements,inherited,nil);
-                return;
-            }
-        }
-        WXCSSSelectorListData *selectorData = [[WXCSSSelectorListData alloc] init];
-        selectorData.text = node.nodeName;
-        selectorData.selectors = @[@{@"text":node.nodeName}];
-        
-        //assembling object of cssStyle
-        WXCSSCSSStyle *style = [[WXCSSCSSStyle alloc] init];
-        NSMutableArray *cssProperties = [NSMutableArray array];
-        NSMutableString *cssText = [[NSMutableString alloc] init];
-        for (int i = 0; i < node.attributes.count; i++) {
-            if (i & 1) {
-                if (![node.attributes[i-1] isEqualToString:@"frame"]) {
-                    WXCSSCSSProperty *cssProperty = [[WXCSSCSSProperty alloc] init];
-                    [cssText appendFormat:@"%@;",node.attributes[i]];
-                    cssProperty.name = node.attributes[i-1];
-                    cssProperty.value = node.attributes[i];
-                    [cssProperties addObject:[cssProperty WX_JSONObject]];
-                }else {
-                    NSArray *names = @[@"width",@"height",@"top",@"left"];
-                    NSArray *position = [self p_formateFrame:node.attributes[i]];
-                    if (position.count == 4) {
-                        NSDictionary *property = @{@"left":position[0],
-                                                   @"top":position[1],
-                                                   @"width":position[2],
-                                                   @"height":position[3]};
-                        for (int i = 0; i < property.count; i++) {
-                            WXCSSCSSProperty *cssProperty = [[WXCSSCSSProperty alloc] init];
-                            cssProperty.name = names[i];
-                            cssProperty.value = property[names[i]];
-                            [cssText appendString:[NSString stringWithFormat:@"%@:%@;",cssProperty.name,cssProperty.value]];
-                            [cssProperties addObject:[cssProperty WX_JSONObject]];
-                        }
-                    }
-                }
-            }else {
-                if (![node.attributes[i] isEqualToString:@"frame"]) {
-                    [cssText appendFormat:@"%@:",node.attributes[i]];
-                }
-            }
-        }
-        style.shorthandEntries = @[];
-        style.cssText = cssText;
-        style.cssProperties = [NSArray arrayWithArray:cssProperties];
-        
-        WXCSSCSSRule *rule = [[WXCSSCSSRule alloc] init];
-        rule.media = @[];
-        rule.origin = @"inspector";
-        rule.selectorList = selectorData;
-        rule.style = style;
-        if ([rule WX_JSONObject]) {
-            NSDictionary *ruleMatch = @{@"matchingSelectors":@[[NSNumber numberWithInteger:0]],@"rule":[rule WX_JSONObject]};
-            NSArray *matchCSSRules = @[ruleMatch];
-            callback(matchCSSRules,pseudoElements,inherited,nil);
-        }else {
-            callback(nil,pseudoElements,inherited,nil);
-        }
-    }
-}
-
-- (void)domain:(WXCSSDomain *)domain getInlineStylesForNodeWithNodeId:(NSNumber *)nodeId callback:(void (^)(WXCSSCSSStyle *inlineStyle, WXCSSCSSStyle *attributesStyle, id error))callback {
-    WXCSSCSSStyle *inlineStyle = [[WXCSSCSSStyle alloc] init];
-    inlineStyle.styleSheetId = @"22222.2";
-    inlineStyle.cssProperties = @[];
-    inlineStyle.cssText = @"";
-    inlineStyle.shorthandEntries = @[];
-    WXCSSSourceRange *range = [[WXCSSSourceRange alloc] init];
-    range.startLine = [NSNumber numberWithInt:0];
-    range.endLine = [NSNumber numberWithInt:0];
-    range.startColumn = [NSNumber numberWithInt:0];
-    range.endColumn = [NSNumber numberWithInt:0];
-    inlineStyle.range = range;
-    callback(inlineStyle,nil,nil);
-}
-
-- (void)domain:(WXCSSDomain *)domain getComputedStyleForNodeWithNodeId:(NSNumber *)nodeId callback:(void (^)(NSArray *computedStyle, id error))callback {
-    /*
-     WXDOMNode *rootDomNode = [WXDOMDomainController defaultInstance].rootDomNode;
-     WXDOMNode *node = [self p_getNodeFromNodeId:nodeId rootNode:rootDomNode];
-     
-     __block NSArray *position;
-     [node.attributes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-     if ([obj isEqualToString:@"frame"]) {
-     *stop = YES;
-     position = [self p_formateFrame:node.attributes[idx + 1]];
-     }
-     }];
-     */
-    if ([WXDebugger isVDom]) {
-        UIView *selectedView = [[[WXDOMDomainController defaultInstance] getObjectsForComponentRefs] objectForKey:[NSString stringWithFormat:@"%ld",(long)nodeId.integerValue]];
-        NSArray *actualAttrs = [[WXDOMDomainController defaultInstance] attributesArrayForObject:selectedView];
-        __block NSArray *position;
-        [actualAttrs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-            if ([obj isEqualToString:@"frame"]) {
-                *stop = YES;
-                position = [self p_formateFrame:actualAttrs[idx + 1]];
-            }
-        }];
-        
-        NSString *width = @"";
-        NSString *height = @"";
-        NSString *top = @"";
-        NSString *left = @"";
-        if (position.count == 4) {
-            left = [self _toPixelFromPoint:position[0]];
-            top = [self _toPixelFromPoint:position[1]];
-            width = [self _toPixelFromPoint:position[2]];
-            height = [self _toPixelFromPoint:position[3]];
-        }
-        NSMutableArray *computedStyles = [[NSMutableArray alloc] init];
-        NSArray *layout = @[@{@"name":@"width",@"value":width},
-                            @{@"name":@"height",@"value":height},
-                            @{@"name":@"padding-top",@"value":@"0px"},
-                            @{@"name":@"padding-left",@"value":@"0px"},
-                            @{@"name":@"padding-right",@"value":@"0px"},
-                            @{@"name":@"padding-bottom",@"value":@""},
-                            @{@"name":@"border-top-width",@"value":@""},
-                            @{@"name":@"border-left-width",@"value":@""},
-                            @{@"name":@"border-right-width",@"value":@""},
-                            @{@"name":@"border-bottom-width",@"value":@""},
-                            @{@"name":@"margin-bottom",@"value":@"0px"},
-                            @{@"name":@"margin-left",@"value":@"0px"},
-                            @{@"name":@"margin-right",@"value":@"0px"},
-                            @{@"name":@"margin-top",@"value":@"0px"},
-                            @{@"name":@"top",@"value":top},
-                            @{@"name":@"right",@"value":@"0px"},
-                            @{@"name":@"left",@"value":left},
-                            @{@"name":@"bottom",@"value":@"0px"}];
-        for (int i = 0; i < layout.count; i++) {
-            WXCSSCSSComputedStyleProperty *computedStyleProperty = [[WXCSSCSSComputedStyleProperty alloc] init];
-            computedStyleProperty.name = layout[i][@"name"];
-            computedStyleProperty.value = layout[i][@"value"];
-            [computedStyles addObject:[computedStyleProperty WX_JSONObject]];
-        }
-        
-        callback(computedStyles,nil);
-    } else {
-        WXDOMNode *rootDomNode = [WXDOMDomainController defaultInstance].rootDomNode;
-        WXDOMNode *node = [self p_getNodeFromNodeId:nodeId rootNode:rootDomNode];
-        
-        __block NSArray *position;
-        [node.attributes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-            if ([obj isEqualToString:@"frame"]) {
-                *stop = YES;
-                position = [self p_formateFrame:node.attributes[idx + 1]];
-            }
-        }];
-        NSString *width = @"";
-        NSString *height = @"";
-        NSString *top = @"";
-        NSString *left = @"";
-        if (position.count == 4) {
-            width = position[2];
-            height = position[3];
-            top = position[1];
-            left = position[0];
-        }
-        NSMutableArray *computedStyles = [[NSMutableArray alloc] init];
-        NSArray *layout = @[@{@"name":@"width",@"value":width},
-                            @{@"name":@"height",@"value":height},
-                            @{@"name":@"padding-top",@"value":@"0px"},
-                            @{@"name":@"padding-left",@"value":@"0px"},
-                            @{@"name":@"padding-right",@"value":@"0px"},
-                            @{@"name":@"padding-bottom",@"value":@""},
-                            @{@"name":@"border-top-width",@"value":@""},
-                            @{@"name":@"border-left-width",@"value":@""},
-                            @{@"name":@"border-right-width",@"value":@""},
-                            @{@"name":@"border-bottom-width",@"value":@""},
-                            @{@"name":@"margin-bottom",@"value":@"0px"},
-                            @{@"name":@"margin-left",@"value":@"0px"},
-                            @{@"name":@"margin-right",@"value":@"0px"},
-                            @{@"name":@"margin-top",@"value":@"0px"},
-                            @{@"name":@"top",@"value":top},
-                            @{@"name":@"right",@"value":@"0px"},
-                            @{@"name":@"left",@"value":left},
-                            @{@"name":@"bottom",@"value":@"0px"}];
-        for (int i = 0; i < layout.count; i++) {
-            WXCSSCSSComputedStyleProperty *computedStyleProperty = [[WXCSSCSSComputedStyleProperty alloc] init];
-            computedStyleProperty.name = layout[i][@"name"];
-            computedStyleProperty.value = layout[i][@"value"];
-            [computedStyles addObject:[computedStyleProperty WX_JSONObject]];
-        }
-        
-        callback(computedStyles,nil);
-    }
-}
-
-- (void)domain:(WXCSSDomain *)domain getSupportedCSSPropertiesWithCallback:(void (^)(NSArray *cssProperties, id error))callback {
-    WXCSSCSSPropertyInfo *cssPropertyInfo = [[WXCSSCSSPropertyInfo alloc] init];
-    cssPropertyInfo.name = @"width";
-    cssPropertyInfo.longhands = @[];
-    NSArray *cssProperties = @[cssPropertyInfo];
-    callback(cssProperties,nil);
-}
-
-#pragma mark - utility
-
-- (NSString *)_toPixelFromPoint:(NSString *)point
-{
-    return [NSString stringWithFormat:@"%ld",(long)([point floatValue] * 2)];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.h
deleted file mode 100644
index e6098ce..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.h
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-//  WXConsoleDomainController.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-01-30.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXPonyDebugger.h"
-#import "WXConsoleDomain.h"
-
-@interface WXConsoleDomainController : WXDomainController
-
-@property (nonatomic, strong) WXConsoleDomain *domain;
-
-+ (WXConsoleDomainController *)defaultInstance;
-
-- (void)logWithArguments:(NSArray *)args severity:(NSString *)severity;
-- (void)clear;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.m
deleted file mode 100644
index 83234e3..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXConsoleDomainController.m
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-//  WXConsoleDomainController.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-01-30.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXConsoleDomainController.h"
-#import "WXRuntimeDomainController.h"
-#import "WXDefinitions.h"
-#import "WXRuntimeTypes.h"
-#import "WXConsoleDomain.h"
-#import "WXConsoleTypes.h"
-#import "NSObject+WXRuntimePropertyDescriptor.h"
-
-
-@interface WXConsoleDomainController () <WXConsoleCommandDelegate>
-
-// Keep track of any keys coming in from the logging functions to release later.
-@property (nonatomic, strong) NSMutableSet *loggedObjectKeys;
-
-@end
-
-
-@implementation WXConsoleDomainController
-
-@dynamic domain;
-
-#pragma mark - Statics
-
-+ (WXConsoleDomainController *)defaultInstance;
-{
-    static WXConsoleDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXConsoleDomainController alloc] init];
-    });
-    
-    return defaultInstance;
-}
-
-+ (Class)domainClass;
-{
-    return [WXConsoleDomain class];
-}
-
-#pragma mark - WXConsoleCommandDelegate
-
-// Clears console messages collected in the browser.
-- (void)domain:(WXConsoleDomain *)domain clearMessagesWithCallback:(void (^)(id error))callback;
-{
-    callback(nil);
-
-    // Clearing the console will release all references logged at the current time.
-    [[WXRuntimeDomainController defaultInstance] clearObjectReferencesByKey:self.loggedObjectKeys.allObjects];
-    [self.loggedObjectKeys removeAllObjects];
-}
-
-
-#pragma mark - Public Methods
-
-- (void)logWithArguments:(NSArray *)args severity:(NSString *)severity
-{
-    // Construct the message by creating the runtime objects for each argument provided.
-    NSMutableString *text = [[NSMutableString alloc] init];
-    NSMutableArray *parameters = [[NSMutableArray alloc] init];
-    for (NSObject *object in args) {
-        WXRuntimeRemoteObject *remoteObject = [NSObject WX_remoteObjectRepresentationForObject:object];
-        if ([remoteObject.subtype isEqualToString:@"array"]) {
-            remoteObject.subtype = nil;
-        }
-        [text appendFormat:@"%@ ", object];
-        [parameters addObject:remoteObject];
-
-        if (remoteObject.objectId) {
-            [self.loggedObjectKeys addObject:remoteObject.objectId];
-        }
-    }
-
-    [text deleteCharactersInRange:NSMakeRange(text.length - 1, 1)];
-
-    WXConsoleConsoleMessage *consoleMessage = [[WXConsoleConsoleMessage alloc] init];
-    NSArray *severityOptions = @[@"debug", @"log", @"warning", @"info", @"error"];
-    if ([severityOptions containsObject:severity]) {
-        consoleMessage.level = severity;
-    } else {
-        consoleMessage.level = @"log";
-    }
-
-    consoleMessage.source = @"console-api";
-    consoleMessage.stackTrace = [[NSArray alloc] init];
-    consoleMessage.parameters = parameters;
-    consoleMessage.repeatCount = [NSNumber numberWithInteger:1];
-    consoleMessage.text = text;
-
-    [self.domain messageAddedWithMessage:consoleMessage];
-}
-
-- (void)clear;
-{
-    [self.domain messagesCleared];
-
-    // Clearing the console will release all references logged at the current time.
-    [[WXRuntimeDomainController defaultInstance] clearObjectReferencesByKey:self.loggedObjectKeys.allObjects];
-    [self.loggedObjectKeys removeAllObjects];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.h
deleted file mode 100644
index f661a21..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.h
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-//  WXContainerIndex.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-04-28.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-
-
-#pragma mark - Public Interface
-
-@interface WXContainerIndex : NSObject
-
-- (id)initWithName:(NSString *)name index:(NSInteger)index;
-
-@property (nonatomic, copy) NSString *name;
-@property (nonatomic, assign) NSInteger index;
-
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.m
deleted file mode 100644
index c66b821..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXContainerIndex.m
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-//  WXContainerIndex.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 2013-04-28.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXContainerIndex.h"
-
-
-#pragma mark - Implementation
-
-@implementation WXContainerIndex
-
-@synthesize name = _name;
-@synthesize index = _index;
-
-- (id)initWithName:(NSString *)name index:(NSInteger)index;
-{
-    if (!(self = [super self])) {
-        return nil;
-    }
-    
-    self.name = name;
-    self.index = index;
-    
-    return self;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.h
deleted file mode 100644
index d57afb1..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.h
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-//  WXDOMDomainController.h
-//  PonyDebugger
-//
-//  Created by Ryan Olson on 2012-09-19.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXPonyDebugger.h"
-#import "WXDOMDomain.h"
-#import "WXDOMTypes.h"
-#import <UIKit/UIKit.h>
-
-@interface WXDOMDomainController : WXDomainController <WXDOMCommandDelegate>
-
-@property (nonatomic, strong) WXDOMDomain *domain;
-
-@property (nonatomic, strong) WXDOMNode *rootDomNode;
-
-+ (WXDOMDomainController *)defaultInstance;
-//+ (void)startMonitoringUIViewChanges;
-+ (void)startMonitoringWeexComponentChanges;
-
-// The key paths will be reflected as attributes of the DOM node
-// Note that support is currently limited to CGPoint, CGSize, CGRect, and numeric types (including BOOL).
-// ex @[@"frame", @"bounds", @"alpha", @"hidden"]
-@property (nonatomic, strong) NSArray *viewKeyPathsToDisplay;
-
-// These should only be used by the swizzled UIView observing methods
-- (void)removeView:(UIView *)view;
-- (void)addView:(UIView *)view;
-- (void)stopTrackingAllViews;
-
-- (WXDOMNode *)rootNode;
-- (WXDOMNode *)rootComponentNode;
-- (void)removeWXComponentRef:(NSString *)ref withInstanceId:(NSString *)instanceId;
-- (void)addWXComponentRef:(NSString *)ref withInstanceId:(NSString *)instanceId;
-- (void)removeInstanceDicWithInstance:(NSString *)instanceId;
-
-- (id)_getComponentFromRef:(NSString *)subRef;
-- (NSDictionary *)getObjectsForComponentRefs;
-- (NSArray *)attributesArrayForObject:(id)object;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.m
deleted file mode 100644
index 861cefe..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDOMDomainController.m
+++ /dev/null
@@ -1,1719 +0,0 @@
-//
-//  WXDOMDomainController.m
-//  PonyDebugger
-//
-//  Created by Ryan Olson on 2012-09-19.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDOMDomainController.h"
-#import "WXInspectorDomainController.h"
-#import "WXRuntimeTypes.h"
-#import "WXPageDomainController.h"
-#import "WXPageDomainUtility.h"
-
-#import <WeexSDK/WeexSDK.h>
-
-#import <objc/runtime.h>
-#import <QuartzCore/QuartzCore.h>
-
-#pragma mark - Definitions
-
-// Constants defined in the DOM Level 2 Core: http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247
-static const int kWXDOMNodeTypeElement = 1;
-static const int kWXDOMNodeTypeDocument = 9;
-
-static NSString *const kWXDOMAttributeParsingRegex = @"[\"'](.*)[\"']";
-
-#pragma mark - Private Interface
-
-@interface WXDOMDomainController ()
-
-// Use mirrored dictionaries to map between objets and node ids with fast lookup in both directions
-@property (nonatomic, strong) NSMutableDictionary *objectsForNodeIds;
-@property (nonatomic, strong) NSMutableDictionary *nodeIdsForObjects;
-@property (nonatomic, assign) NSUInteger nodeIdCounter;
-
-@property (nonatomic, strong) UIView *viewToHighlight;
-@property (nonatomic, strong) UIView *highlightOverlay;
-
-@property (nonatomic, assign) CGPoint lastPanPoint;
-@property (nonatomic, assign) CGRect originalPinchFrame;
-@property (nonatomic, assign) CGPoint originalPinchLocation;
-
-@property (nonatomic, strong) UIView *inspectModeOverlay;
-
-@property (nonatomic, strong) WXComponent *rootComponent;
-@property (nonatomic, strong) NSMutableDictionary *instanceIdForRoot;
-@property (nonatomic, strong) NSMutableDictionary *instancesDic;
-
-
-@property (nonatomic, readwrite,strong) NSMutableDictionary *objectsForComponentRefs;
-@property (nonatomic, readwrite,strong) NSMutableDictionary *componentForRefs;
-
-@property (nonatomic, strong) NSMutableDictionary *kvoObserverRecode;
-@end
-
-#pragma mark - Implementation
-
-@implementation WXDOMDomainController
-
-@dynamic domain;
-@synthesize rootDomNode;
-
-#pragma mark - NSObject
-
-- (id)init;
-{
-    if (self = [super init]) {
-        
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowHidden:) name:UIWindowDidBecomeHiddenNotification object:nil];
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowShown:) name:UIWindowDidBecomeVisibleNotification object:nil];
-        
-        UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleMovePanGesure:)];
-        panGR.maximumNumberOfTouches = 1;
-        UIPinchGestureRecognizer *pinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handleResizePinchGesture:)];
-        
-        self.highlightOverlay = [[UIView alloc] initWithFrame:CGRectZero];
-        self.highlightOverlay.layer.borderWidth = 1.0;
-        
-        [self.highlightOverlay addGestureRecognizer:panGR];
-        [self.highlightOverlay addGestureRecognizer:pinchGR];
-        
-        UITapGestureRecognizer *inspectTapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleInspectTapGesture:)];
-        UIPanGestureRecognizer *inspectPanGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleInspectPanGesture:)];
-        inspectPanGR.maximumNumberOfTouches = 1;
-        
-        self.inspectModeOverlay = [[UIView alloc] initWithFrame:CGRectZero];
-        self.inspectModeOverlay.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
-        self.inspectModeOverlay.backgroundColor = [UIColor clearColor];
-        
-        [self.inspectModeOverlay addGestureRecognizer:inspectTapGR];
-        [self.inspectModeOverlay addGestureRecognizer:inspectPanGR];
-    }
-    return self;
-}
-
-- (void)dealloc;
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-    self.objectsForComponentRefs = nil;
-    self.nodeIdsForObjects = nil;
-    self.kvoObserverRecode = nil;
-    self.componentForRefs = nil;
-    self.instanceIdForRoot = nil;
-    self.instancesDic = nil;
-}
-
-#pragma mark - Class Methods
-
-+ (WXDOMDomainController *)defaultInstance;
-{
-    static WXDOMDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXDOMDomainController alloc] init];
-    });
-    return defaultInstance;
-}
-
-+ (void)startMonitoringWeexComponentChanges
-{
-    static dispatch_once_t onceWeexToken;
-    dispatch_once(&onceWeexToken, ^{
-        Method original, swizzle;
-        Class WXBridgeMgrClass = [WXBridgeManager class];
-        
-        original = class_getInstanceMethod(WXBridgeMgrClass, @selector(fireEvent:ref:type:params:domChanges:));
-        swizzle = class_getInstanceMethod(WXBridgeMgrClass, sel_registerName("devtool_swizzled_fireEvent:ref:type:params:domChanges:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(WXBridgeMgrClass, @selector(destroyInstance:));
-        swizzle = class_getInstanceMethod(WXBridgeMgrClass, sel_registerName("devtool_swizzled_destroyInstance:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        Class WXComponentMgr = [WXComponentManager class];
-        original = class_getInstanceMethod(WXComponentMgr, @selector(removeComponent:));
-        swizzle = class_getInstanceMethod(WXComponentMgr, sel_registerName("devtool_swizzled_removeComponent:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(WXComponentMgr, @selector(moveComponent:toSuper:atIndex:));
-        swizzle = class_getInstanceMethod(WXComponentMgr, sel_registerName("devtool_swizzled_moveComponent:toSuper:atIndex:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        Class WXSDKInstanceClass = [WXSDKInstance class];
-        original = class_getInstanceMethod(WXSDKInstanceClass, @selector(creatFinish));
-        swizzle = class_getInstanceMethod(WXSDKInstanceClass, sel_registerName("devtool_swizzled_creatFinish"));
-        method_exchangeImplementations(original, swizzle);
-        
-        Class viewClass = [UIView class];
-        original = class_getInstanceMethod(viewClass, @selector(addSubview:));
-        swizzle = class_getInstanceMethod(viewClass, sel_registerName("devtool_swizzled_addSubview:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(viewClass, @selector(insertSubview:atIndex:));
-        swizzle = class_getInstanceMethod(viewClass, sel_registerName("devtool_swizzled_insertSubview:atIndex:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(viewClass, @selector(removeFromSuperview));
-        swizzle = class_getInstanceMethod(viewClass, sel_registerName("devtool_swizzled_removeFromSuperview"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(viewClass, @selector(bringSubviewToFront:));
-        swizzle = class_getInstanceMethod(viewClass, sel_registerName("devtool_swizzled_bringSubviewToFront:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(viewClass, @selector(sendSubviewToBack:));
-        swizzle = class_getInstanceMethod(viewClass, sel_registerName("devtool_swizzled_sendSubviewToBack:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(viewClass, @selector(insertSubview:aboveSubview:));
-        swizzle = class_getInstanceMethod(viewClass, sel_registerName("devtool_swizzled_insertSubview:aboveSubview:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(viewClass, @selector(insertSubview:belowSubview:));
-        swizzle = class_getInstanceMethod(viewClass, sel_registerName("devtool_swizzled_insertSubview:belowSubview:"));
-        method_exchangeImplementations(original, swizzle);
-        
-        original = class_getInstanceMethod(viewClass, @selector(exchangeSubviewAtIndex:withSubviewAtIndex:));
-        swizzle = class_getInstanceMethod(viewClass, sel_registerName("devtool_swizzled_exchangeSubviewAtIndex:withSubviewAtIndex:"));
-        method_exchangeImplementations(original, swizzle);
-        
-    });
-}
-
-
-+ (Class)domainClass;
-{
-    return [WXDOMDomain class];
-}
-
-#pragma mark - Setter Overrides
-
-- (void)setViewKeyPathsToDisplay:(NSArray *)viewKeyPathsToDisplay;
-{
-    if (![_viewKeyPathsToDisplay isEqualToArray:viewKeyPathsToDisplay]) {
-        // Stop tracking all the views to remove KVO
-        [self stopTrackingAllViews];
-        
-        // Now that the observers have been removed, it's safe to change the keyPaths array
-        _viewKeyPathsToDisplay = viewKeyPathsToDisplay;
-        
-        // Refresh the DOM tree to see the new attributes
-        [self.domain documentUpdated];
-    }
-}
-
-/*
-- (WXComponent *)_getParentComponentFormSubRef:(NSString *)subRef
-{
-    WXComponent *rootComponent = self.rootComponent ? :[self _getRootComponent];
-    WXComponent *theRefComponent = [self getComponentWithRef:subRef fromParentComponent:rootComponent];
-    if (theRefComponent) {
-        return theRefComponent.supercomponent;
-    }
-    return nil;
-}
-
-- (WXComponent *)getComponentWithRef:(NSString *)ref fromParentComponent:(WXComponent *)parentComponent
-{
-    if (!parentComponent) {
-        return nil;
-    }
-    if ([ref isEqualToString:parentComponent.ref]) {
-        return parentComponent;
-    }
-    if (parentComponent.subcomponents.count > 0) {
-        for (WXComponent *component in parentComponent.subcomponents) {
-            if ([ref isEqualToString:component.ref]) {
-                return component;
-            }else {
-                WXComponent *returnComponent = [self getComponentWithRef:ref fromParentComponent:component];
-                if (returnComponent) {
-                    return returnComponent;
-                }
-            }
-        }
-    }
-    return nil;
-}
-*/
-#pragma mark - WXDOMCommandDelegate
-
-- (void)domain:(WXDOMDomain *)domain getDocumentWithCallback:(void (^)(WXDOMNode *root, id error))callback;
-{
-    if ([WXDebugger isVDom]) {
-        __weak typeof(self) weakSelf = self;
-        WXPerformBlockOnComponentThread(^{
-            WXDOMNode *rootNode = [[WXDOMNode alloc] init];
-            rootNode.nodeId = [NSNumber numberWithInt:1];
-            rootNode.nodeType = @(kWXDOMNodeTypeDocument);
-            rootNode.nodeName = @"#document";
-            rootNode.children = @[ [weakSelf rootVirElementWithInstance:nil] ];
-            self.rootDomNode = rootNode;
-            callback(rootNode, nil);
-        });
-    } else {
-        self.kvoObserverRecode = [[NSMutableDictionary alloc] init];
-        [self stopTrackingAllViews];
-        self.objectsForNodeIds = [[NSMutableDictionary alloc] init];
-        self.nodeIdsForObjects = [[NSMutableDictionary alloc] init];
-        self.nodeIdCounter = 3;
-        callback([self rootNode], nil);
-    }
-}
-
-- (void)domain:(WXDOMDomain *)domain highlightNodeWithNodeId:(NSNumber *)nodeId highlightConfig:(WXDOMHighlightConfig *)highlightConfig callback:(void (^)(id))callback;
-{
-    NSInteger transformNodeId = nodeId.integerValue;
-    NSString *nodeKey = [NSString stringWithFormat:@"%ld",(long)transformNodeId];
-    __block id objectForNodeId;
-    if ([WXDebugger isVDom]) {
-        __weak typeof(self) weakSelf = self;
-        WXPerformBlockOnComponentThread(^{
-            objectForNodeId = [weakSelf.objectsForComponentRefs objectForKey:nodeKey];
-            WXPerformBlockOnMainThread(^{
-                __strong typeof(self) strongSelf = weakSelf;
-                if ([objectForNodeId isKindOfClass:[UIView class]]) {
-                    [strongSelf configureHighlightOverlayWithConfig:highlightConfig];
-                    [strongSelf revealHighlightOverlayForView:objectForNodeId allowInteractions:YES];
-                }
-                callback(nil);
-            });
-        });
-    } else {
-        objectForNodeId = [self.objectsForNodeIds objectForKey:nodeId];
-        if ([objectForNodeId isKindOfClass:[UIView class]]) {
-            [self configureHighlightOverlayWithConfig:highlightConfig];
-            [self revealHighlightOverlayForView:objectForNodeId allowInteractions:YES];
-        }
-        
-        callback(nil);
-    }
-}
-
-- (void)domain:(WXDOMDomain *)domain hideHighlightWithCallback:(void (^)(id))callback;
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-       WXPerformBlockOnMainThread(^{
-           [weakSelf.highlightOverlay removeFromSuperview];
-           weakSelf.viewToHighlight = nil;
-           callback(nil);
-       });
-    });
-}
-
-- (void)domain:(WXDOMDomain *)domain removeNodeWithNodeId:(NSNumber *)nodeId callback:(void (^)(id))callback;
-{
-    UIView *view = [self.objectsForNodeIds objectForKey:nodeId];
-    [view removeFromSuperview];
-    
-    callback(nil);
-}
-
-- (void)domain:(WXDOMDomain *)domain setAttributesAsTextWithNodeId:(NSNumber *)nodeId text:(NSString *)text name:(NSString *)name callback:(void (^)(id))callback;
-{
-    // The "class" attribute cannot be edited. Bail early
-    if ([name isEqualToString:@"class"]) {
-        callback(nil);
-        return;
-    }
-    
-    id nodeObject = [self.objectsForNodeIds objectForKey:nodeId];
-    const char *typeEncoding = [self typeEncodingForKeyPath:name onObject:nodeObject];
-    
-    // Try to parse out the value
-    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:kWXDOMAttributeParsingRegex options:0 error:NULL];
-    NSTextCheckingResult *firstMatch = [regex firstMatchInString:text options:0 range:NSMakeRange(0, [text length])];
-    if (firstMatch) {
-        NSString *valueString = [text substringWithRange:[firstMatch rangeAtIndex:1]];
-        
-        // Note: this is by no means complete...
-        // Allow BOOLs to be set with YES/NO
-        if (typeEncoding && !strcmp(typeEncoding, @encode(BOOL)) && ([valueString isEqualToString:@"YES"] || [valueString isEqualToString:@"NO"])) {
-            BOOL boolValue = [valueString isEqualToString:@"YES"];
-            [nodeObject setValue:[NSNumber numberWithBool:boolValue] forKeyPath:name];
-        } else if (typeEncoding && !strcmp(typeEncoding, @encode(CGPoint))) {
-            CGPoint point = CGPointFromString(valueString);
-            [nodeObject setValue:[NSValue valueWithCGPoint:point] forKeyPath:name];
-        } else if (typeEncoding && !strcmp(typeEncoding, @encode(CGSize))) {
-            CGSize size = CGSizeFromString(valueString);
-            [nodeObject setValue:[NSValue valueWithCGSize:size] forKeyPath:name];
-        } else if (typeEncoding && !strcmp(typeEncoding, @encode(CGRect))) {
-            CGRect rect = CGRectFromString(valueString);
-            [nodeObject setValue:[NSValue valueWithCGRect:rect] forKeyPath:name];
-        } else if (typeEncoding && !strcmp(typeEncoding, @encode(id))) {
-            // Only support editing for string objects (due to the trivial mapping between the string and its description)
-            id currentValue = [nodeObject valueForKeyPath:name];
-            if ([currentValue isKindOfClass:[NSString class]]) {
-                [nodeObject setValue:valueString forKeyPath:name];
-            }
-        } else {
-            NSNumber *number = @([valueString doubleValue]);
-            [nodeObject setValue:number forKeyPath:name];
-        }
-    }
-    
-    callback(nil);
-}
-
-- (void)domain:(WXDOMDomain *)domain setInspectModeEnabledWithEnabled:(NSNumber *)enabled highlightConfig:(WXDOMHighlightConfig *)highlightConfig callback:(void (^)(id))callback;
-{
-    if ([enabled boolValue]) {
-        [self configureHighlightOverlayWithConfig:highlightConfig];
-        UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
-        self.inspectModeOverlay.frame = keyWindow.frame;
-        [keyWindow addSubview:self.inspectModeOverlay];
-    } else {
-        [self.inspectModeOverlay removeFromSuperview];
-    }
-    
-    callback(nil);
-}
-
-- (void)domain:(WXDOMDomain *)domain requestNodeWithObjectId:(NSString *)objectId callback:(void (^)(NSNumber *, id))callback;
-{
-    callback(@([objectId intValue]), nil);
-}
-
-- (void)domain:(WXDOMDomain *)domain getBoxModelNodeId:(NSString *)nodeId callback:(void (^)(WXDOMBoxModel *boxModel, id error))callback
-{
-    __block UIView *objectForNodeId;
-    if ([WXDebugger isVDom]) {
-        __weak typeof(self) weakSelf = self;
-        WXPerformBlockOnComponentThread(^{
-            NSString *nodeIdStr = [NSString stringWithFormat:@"%ld",(long)[nodeId integerValue]];
-            objectForNodeId = [self.objectsForComponentRefs objectForKey:nodeIdStr];
-            WXPerformBlockOnMainThread(^{
-                [weakSelf _getBoxModelNode:objectForNodeId callback:^(WXDOMBoxModel *boxModel, id error) {
-                    callback(boxModel,nil);
-                }];
-            });
-        });
-    } else {
-        objectForNodeId = [self.objectsForNodeIds objectForKey:nodeId];
-        [self _getBoxModelNode:objectForNodeId callback:^(WXDOMBoxModel *boxModel, id error) {
-            callback(boxModel,nil);
-        }];
-    }
-}
-
-- (void)domain:(WXDOMDomain *)domain getNodeForLocationX:(NSNumber *)locationX locationY:(NSNumber *)locationY callback:(void (^)(NSNumber *nodeId, id error))callback
-{
-    UIView *selectView;
-    UIView *rootView;
-    NSNumber *nodeId = nil;
-    CGPoint point = CGPointMake(locationX.floatValue, locationY.floatValue);
-    rootView = [WXPageDomainUtility getCurrentKeyController].view;
-    selectView = [self p_point:point withRootView:rootView];
-    if ([WXDebugger isVDom]) {
-        if (selectView.wx_ref) {
-            nodeId = [self _getRealNodeIdWithComponentRef:selectView.wx_ref];
-        }
-        callback(nodeId, nil);
-    } else {
-        nodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:selectView]];
-        callback(nodeId, nil);
-    }
-}
-
-
-- (UIView *)p_point:(CGPoint)point withRootView:(UIView *)rootView;
-{
-    if (!rootView || (!CGRectEqualToRect(rootView.frame, CGRectZero) && !CGRectContainsPoint([self changeRectFromView:rootView], point))) {
-        return nil;
-    }
-    if (rootView.subviews.count > 0) {
-        UIView *tempView;
-        for (UIView *subView in [rootView.subviews reverseObjectEnumerator]) {
-            if (CGRectEqualToRect(subView.frame, CGRectZero) || CGRectContainsPoint([self changeRectFromView:subView], point)) {
-                UIView *returnView = [self p_point:point withRootView:subView];
-                if (!returnView) {
-                    tempView = subView;
-                }else {
-                    return returnView;
-                }
-            }
-        }
-        return tempView;
-    }
-    return nil;
-}
-
-- (CGRect)changeRectFromView:(UIView *)view
-{
-    UIView *toView = [WXPageDomainUtility getCurrentKeyController].view;
-    if ([view isEqual:toView]) {
-        return view.frame;
-    }
-    return [view.superview convertRect:view.frame toView:toView];
-}
-
-#pragma mark - Gesture Moving and Resizing
-
-- (void)handleMovePanGesure:(UIPanGestureRecognizer *)panGR;
-{
-    switch (panGR.state) {
-        case UIGestureRecognizerStateBegan:
-            self.lastPanPoint = [panGR locationInView:self.viewToHighlight.superview];
-            break;
-            
-        default: {
-            // Convert to superview coordinates for a consistent basis
-            CGPoint newPanPoint = [panGR locationInView:self.viewToHighlight.superview];
-            CGFloat deltaX = newPanPoint.x - self.lastPanPoint.x;
-            CGFloat deltaY = newPanPoint.y - self.lastPanPoint.y;
-            
-            CGRect frame = self.viewToHighlight.frame;
-            frame.origin.x += deltaX;
-            frame.origin.y += deltaY;
-            self.viewToHighlight.frame = frame;
-            
-            self.lastPanPoint = newPanPoint;
-            break;
-        }
-    }
-}
-
-- (void)handleResizePinchGesture:(UIPinchGestureRecognizer *)pinchGR;
-{
-    switch (pinchGR.state) {
-        case UIGestureRecognizerStateBegan:
-            self.originalPinchFrame = self.viewToHighlight.frame;
-            self.originalPinchLocation = [pinchGR locationInView:self.viewToHighlight.superview];
-            break;
-        
-        case UIGestureRecognizerStateChanged: {
-            // Scale the frame by the pinch amount
-            CGFloat scale = [pinchGR scale];
-            CGRect newFrame = self.originalPinchFrame;
-            CGFloat scaleByFactor = (scale - 1.0) / 1.0;
-            scaleByFactor /= 3.0;
-            
-            newFrame.size.width *= 1.0 + scaleByFactor;
-            newFrame.size.height *= 1.0 + scaleByFactor;
-            
-            // Translate the center by the difference between the current centroid and the original centroid
-            CGPoint location = [pinchGR locationInView:self.viewToHighlight.superview];
-            CGPoint center = CGPointMake(floor(CGRectGetMidX(self.originalPinchFrame)), floor(CGRectGetMidY(self.originalPinchFrame)));
-            center.x += location.x - self.originalPinchLocation.x;
-            center.y += location.y - self.originalPinchLocation.y;
-            
-            newFrame.origin.x = center.x - newFrame.size.width / 2.0;
-            newFrame.origin.y = center.y - newFrame.size.height / 2.0;
-            self.viewToHighlight.frame = newFrame;
-            break;
-        }
-        
-        case UIGestureRecognizerStateEnded:
-        case UIGestureRecognizerStateCancelled:
-            self.viewToHighlight.frame = CGRectIntegral(self.viewToHighlight.frame);
-            break;
-            
-        default:
-            break;
-    }
-}
-
-#pragma mark - Inspect Mode
-
-- (void)handleInspectTapGesture:(UITapGestureRecognizer *)tapGR;
-{
-    switch (tapGR.state) {
-        case UIGestureRecognizerStateRecognized:
-            [self inspectViewAtPoint:[tapGR locationInView:nil]];
-            break;
-            
-        default:
-            break;
-    }
-    
-}
-
-- (void)handleInspectPanGesture:(UIPanGestureRecognizer *)panGR;
-{
-    switch (panGR.state) {
-        case UIGestureRecognizerStateBegan:
-        case UIGestureRecognizerStateChanged: {
-            // As the user drags, highlight the view that we would inspect
-            CGPoint panPoint = [panGR locationInView:nil];
-            UIView *chosenView = [self chooseViewAtPoint:panPoint givenStartingView:[[UIApplication sharedApplication] keyWindow]];
-            [self revealHighlightOverlayForView:chosenView allowInteractions:NO];
-            break;
-        }
-        case UIGestureRecognizerStateCancelled:
-        case UIGestureRecognizerStateFailed:
-        case UIGestureRecognizerStateEnded:
-            // When the user finishes dragging, send the inspect command
-            [self inspectViewAtPoint:[panGR locationInView:nil]];
-            break;
-            
-        default:
-            break;
-    }
-}
-
-- (void)inspectViewAtPoint:(CGPoint)point;
-{
-    WXInspectorDomain *inspectorDomain = [[WXInspectorDomainController defaultInstance] domain];
-    WXRuntimeRemoteObject *remoteObject = [[WXRuntimeRemoteObject alloc] init];
-    
-    UIView *chosenView = [self chooseViewAtPoint:point givenStartingView:[[UIApplication sharedApplication] keyWindow]];
-    NSNumber *chosenNodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:chosenView]];
-    
-    remoteObject.type = @"object";
-    remoteObject.subtype = @"node";
-    remoteObject.objectId = [chosenNodeId stringValue];
-    
-    [inspectorDomain inspectWithObject:remoteObject hints:nil];
-    [self.inspectModeOverlay removeFromSuperview];
-}
-
-- (UIView *)chooseViewAtPoint:(CGPoint)point givenStartingView:(UIView *)startingView;
-{
-    // Look into the subviews (topmost first) to see if there's a view there that we should select
-    for (UIView *subview in [startingView.subviews reverseObjectEnumerator]) {
-        CGRect subviewFrameInWindowCoordinates = [startingView convertRect:subview.frame toView:nil];
-        if (![self shouldIgnoreView:subview] && !subview.hidden && subview.alpha > 0.0 && CGRectContainsPoint(subviewFrameInWindowCoordinates, point)) {
-            // We've found a promising looking subview. Recurse to check it out
-            return [self chooseViewAtPoint:point givenStartingView:subview];
-        }
-    }
-    
-    // We didn't find anything in the subviews, so just return the starting view
-    return startingView;
-}
-
-#pragma mark - Highlight Overlay
-
-- (void)configureHighlightOverlayWithConfig:(WXDOMHighlightConfig *)highlightConfig;
-{
-    WXDOMRGBA *contentColor = [highlightConfig valueForKey:@"contentColor"];
-    NSNumber *r = [contentColor valueForKey:@"r"];
-    NSNumber *g = [contentColor valueForKey:@"g"];
-    NSNumber *b = [contentColor valueForKey:@"b"];
-    NSNumber *a = [contentColor valueForKey:@"a"];
-    
-    self.highlightOverlay.backgroundColor = [UIColor colorWithRed:[r floatValue] / 255.0 green:[g floatValue] / 255.0 blue:[b floatValue] / 255.0 alpha:[a floatValue]];
-    
-    WXDOMRGBA *borderColor = [highlightConfig valueForKey:@"borderColor"];
-    r = [borderColor valueForKey:@"r"];
-    g = [borderColor valueForKey:@"g"];
-    b = [borderColor valueForKey:@"b"];
-    a = [borderColor valueForKey:@"a"];
-    
-    self.highlightOverlay.layer.borderColor = [[UIColor colorWithRed:[r floatValue] / 255.0 green:[g floatValue] / 255.0 blue:[b floatValue] / 255.0 alpha:[a floatValue]] CGColor];
-}
-
-- (void)revealHighlightOverlayForView:(UIView *)view allowInteractions:(BOOL)interactionEnabled;
-{
-    // Add a highlight overlay directly to the window if this is a window, otherwise to the view's window
-    self.viewToHighlight = view;
-    
-    UIWindow *window = self.viewToHighlight.window;
-    CGRect highlightFrame = CGRectZero;
-    
-    if (!window && [self.viewToHighlight isKindOfClass:[UIWindow class]]) {
-        window = (UIWindow *)self.viewToHighlight;
-        highlightFrame = window.bounds;
-    } else {
-        highlightFrame = [window convertRect:self.viewToHighlight.frame fromView:self.viewToHighlight.superview];
-    }
-    
-    self.highlightOverlay.frame = highlightFrame;
-    self.highlightOverlay.userInteractionEnabled = interactionEnabled;
-    
-    // Make sure the highlight goes behind the inspect overlay if it's on screen
-    if (self.inspectModeOverlay.superview == window) {
-        [window insertSubview:self.highlightOverlay belowSubview:self.inspectModeOverlay];
-    } else {
-        [window addSubview:self.highlightOverlay];
-    }
-}
-
-#pragma mark - View Hierarchy Changes
-
-- (void)windowHidden:(NSNotification *)windowNotification;
-{
-    [self removeView:windowNotification.object];
-}
-
-- (void)windowShown:(NSNotification *)windowNotification;
-{
-    [self addView:windowNotification.object];
-}
-
-- (void)removeView:(UIView *)view
-{
-    // Bail early if we're ignoring this view or if the document hasn't been requested yet
-    if ([self shouldIgnoreView:view] || !self.objectsForNodeIds) {
-        return;
-    }
-    
-    NSNumber *nodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:view]];
-
-    // Only proceed if this is a node we know about
-    if ([self.objectsForNodeIds objectForKey:nodeId]) {
-        
-        NSNumber *parentNodeId = nil;
-        
-        if (view.superview) {
-            parentNodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:view.superview]];
-        } else if ([view isKindOfClass:[UIWindow class]]) {
-            // Windows are always children of the root element node
-            parentNodeId = @(1);
-        } else {
-            // Windows are always children of the root element node
-            parentNodeId = @(1);
-        }
-        [self.domain childNodeRemovedWithParentNodeId:parentNodeId nodeId:nodeId];
-        [self stopTrackingView:view];
-    }
-}
-
-- (void)addView:(UIView *)view;
-{
-    // Bail early if we're ignoring this view or if the document hasn't been requested yet
-    if ([self shouldIgnoreView:view] || !self.objectsForNodeIds) {
-        return;
-    }
-
-    // Only proceed if we know about this view's superview (corresponding to the parent node)
-    NSNumber *parentNodeId = nil;
-    if (view.superview) {
-        parentNodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:view.superview]];
-    }
-    
-    if ([self.objectsForNodeIds objectForKey:parentNodeId]) {
-        
-        WXDOMNode *node = [self nodeForView:view];
-
-        // Find the sibling view to insert the node in the right place
-        // We're actually looking for the next view in the subviews array. Index 0 holds the back-most view.
-        // We essentialy dispay the subviews array backwards.
-        NSNumber *previousNodeId = nil;
-        NSUInteger indexOfView = [view.superview.subviews indexOfObject:view];
-        
-        // If this is the last subview in the array, it has no previous node.
-        if (indexOfView + 1 < [view.superview.subviews count] - 1) {
-            indexOfView = indexOfView > 0 ? indexOfView - 1 : 0;
-            UIView *aheadSibling = [view.superview.subviews objectAtIndex:indexOfView + 1];
-            previousNodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:aheadSibling]];
-        }
-        
-        [self.domain childNodeInsertedWithParentNodeId:parentNodeId previousNodeId:previousNodeId node:node];
-    } else if ([view isKindOfClass:[UIWindow class]]) {
-        
-        WXDOMNode *node = [self nodeForView:view];
-        
-        // Look at the other windows to find where to place this window
-        NSNumber *previousNodeId = nil;
-        NSArray *windows = [[UIApplication sharedApplication] windows];
-        NSUInteger indexOfWindow = [windows indexOfObject:view];
-        
-        if (indexOfWindow > 0 && indexOfWindow < windows.count) {
-            UIWindow *previousWindow = [windows objectAtIndex:indexOfWindow - 1];
-            previousNodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:previousWindow]];
-        }
-        
-        // Note that windows are always children of the root element node (id 1)
-        [self.domain childNodeInsertedWithParentNodeId:@(1) previousNodeId:previousNodeId node:node];
-    }
-}
-
-- (void)startTrackingView:(UIView *)view withNodeId:(NSNumber *)nodeId;
-{
-    NSAssert(view != self.highlightOverlay, @"The highlight overlay should not be tracked. We update its frame in the KVO observe method, so tracking it will lead to infinite recursion");
-    
-    if (nodeId) {
-        [self.nodeIdsForObjects setObject:nodeId forKey:[NSValue valueWithNonretainedObject:view]];
-        [self.objectsForNodeIds setObject:view forKey:nodeId];
-        
-        // Use KVO to keep the displayed properties fresh
-//        for (NSString *keyPath in self.viewKeyPathsToDisplay) {
-//            [view addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];
-//        }
-        
-        NSNumber *record = [self.kvoObserverRecode objectForKey:[NSValue valueWithNonretainedObject:view]];
-        if (record) {
-            [self.kvoObserverRecode setObject:[NSNumber numberWithInteger:record.integerValue + 1] forKey:[NSValue valueWithNonretainedObject:view]];
-        }else {
-            [self.kvoObserverRecode setObject:[NSNumber numberWithInteger:1] forKey:[NSValue valueWithNonretainedObject:view]];
-        }
-    }
-}
-
-- (void)stopTrackingComponent:(WXComponent *)component withInstanceId:(NSString *)instanceId
-{
-    if (!component.ref && !self.instancesDic[instanceId]) {
-        return;
-    }
-    
-    for (WXComponent *subComponent in component.subcomponents) {
-        [self stopTrackingComponent:subComponent withInstanceId:instanceId];
-    }
-    
-    [self.objectsForComponentRefs removeObjectForKey:component.ref];
-}
-
-- (void)stopTrackingView:(UIView *)view;
-{
-    NSValue *viewKey = [NSValue valueWithNonretainedObject:view];
-    NSNumber *nodeId = [self.nodeIdsForObjects objectForKey:viewKey];
-    
-    // Bail early if we weren't tracking this view
-    if (!nodeId) {
-        return;
-    }
-    
-    
-    // Recurse to get any nested views
-    for (UIView *subview in view.subviews) {
-        [self stopTrackingView:subview];
-    }
-    
-    // Remove the highlight if necessary
-    if (view == self.viewToHighlight) {
-        [self.highlightOverlay removeFromSuperview];
-        self.viewToHighlight = nil;
-    }
-    
-    NSInteger kvoCount = [[self.kvoObserverRecode objectForKey:[NSValue valueWithNonretainedObject:view]] integerValue];
-    if (kvoCount <= 0) {
-        return;
-    }else {
-        for (NSInteger i = 0; i < kvoCount; i++) {
-            // Unregister from KVO
-//            for (NSString *keyPath in self.viewKeyPathsToDisplay) {
-//                [view removeObserver:self forKeyPath:keyPath];
-//            }
-        }
-        [self.kvoObserverRecode removeObjectForKey:[NSValue valueWithNonretainedObject:view]];
-    }
-    
-    // Important that this comes last, so we don't get KVO observations for objects we don't konw about
-    [self.nodeIdsForObjects removeObjectForKey:viewKey];
-    [self.objectsForNodeIds removeObjectForKey:nodeId];
-}
-
-- (void)stopTrackingAllViews;
-{
-    for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
-        [self stopTrackingView:window];
-    }
-}
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
-{
-    // Make sure this is a node we know about and a key path we're observing
-    NSNumber *nodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:object]];
-    
-    if ([self.objectsForNodeIds objectForKey:nodeId] && [self.viewKeyPathsToDisplay containsObject:keyPath]) {
-        // Update the attributes on the DOM node
-        NSString *newValue = [self stringForValue:[change objectForKey:NSKeyValueChangeNewKey] atKeyPath:keyPath onObject:object];
-        [self.domain attributeModifiedWithNodeId:nodeId name:keyPath value:newValue];
-    }
-    
-    // If this is the view we're highlighting, update appropriately
-    if (object == self.viewToHighlight && [keyPath isEqualToString:@"frame"]) {
-        CGRect updatedFrame = [[change objectForKey:NSKeyValueChangeNewKey] CGRectValue];
-        self.highlightOverlay.frame = [self.viewToHighlight.superview convertRect:updatedFrame toView:nil];
-    }
-    
-    // Note that we do not call [super observeValueForKeyPath:...] because super doesn't implement the method
-}
-
-- (BOOL)shouldIgnoreView:(UIView *)view;
-{
-    return view == nil || view == self.highlightOverlay || view == self.inspectModeOverlay;
-}
-
-- (NSNumber *)getAndIncrementNodeIdCount;
-{
-    return @(self.nodeIdCounter++);
-}
-
-#pragma mark - Node Generation
-- (WXDOMNode *)rootVirElementWithInstance:(NSString *)instance
-{
-    [self initObjectsForComponentRefs];
-    NSString *instanceStr = instance ? :[self _weexInstanceId];
-    NSString *instanceFormatStr = [NSString stringWithFormat:@"instance:%@",instanceStr];
-    NSNumber *instanceId = [NSNumber numberWithInteger:INT32_MAX - [instanceStr integerValue]] ? : [NSNumber numberWithInteger:0];
-    
-    //add a instance element
-    WXDOMNode *instanceNode = [[WXDOMNode alloc] init];
-    instanceNode.nodeId = instanceId;
-    instanceNode.nodeType = @(kWXDOMNodeTypeElement);
-    instanceNode.nodeName = instanceFormatStr;
-    instanceNode.children = @[ [self rootComponentNodeWithInstance:instance] ];
-    
-    self.instanceIdForRoot = nil;
-    self.instanceIdForRoot = [[NSMutableDictionary alloc] init];
-    [self.instanceIdForRoot setObject:instanceStr forKey:@"instanceNode"];
-    [self.instanceIdForRoot setObject:instanceId forKey:instanceStr];
-    //update rootDomNode
-    self.rootDomNode = instanceNode;
-    
-    return instanceNode;
-}
-
-- (WXDOMNode *)rootComponentNodeWithInstance:(NSString *)instance
-{
-    self.rootComponent = [self _getRootComponentWithInstance:instance];
-    WXDOMNode *rootVirElement = [[WXDOMNode alloc] init];
-    rootVirElement.nodeId = [NSNumber numberWithInt:2];
-    rootVirElement.nodeType = @(kWXDOMNodeTypeElement);
-    rootVirElement.nodeName = self.rootComponent.type;
-    rootVirElement.children = [self virtualNodes];
-    return rootVirElement;
-    
-}
-
-- (NSArray *)virtualNodes
-{
-    NSMutableArray *domNodes = [NSMutableArray array];
-    if (!self.componentForRefs) {
-        self.componentForRefs = [[NSMutableDictionary alloc] init];
-    }
-    NSArray *subcomponentAry = [NSArray arrayWithArray:self.rootComponent.subcomponents];
-    for (id component in subcomponentAry) {
-        WXComponent *transComponent = (WXComponent *)component;
-        [self.componentForRefs setObject:transComponent forKey:transComponent.ref];
-        WXDOMNode *elementNode = [self nodeForComponent:transComponent];
-        [domNodes addObject:elementNode];
-    }
-    return domNodes;
-}
-
-- (WXDOMNode *)nodeForComponent:(WXComponent *)component
-{
-    // Build the child nodes by recursing on this component's subcomponents
-    NSMutableArray *childComponents = [[NSMutableArray alloc] initWithCapacity:component.subcomponents.count];
-    for (WXComponent *subComponent in component.subcomponents) {
-        [self.componentForRefs setObject:subComponent forKey:subComponent.ref];
-        WXDOMNode *childComponent = [self nodeForComponent:subComponent];
-        if (childComponent) {
-            [childComponents addObject:childComponent];
-        }
-    }
-    WXDOMNode *virtualNode = [self elementVirNodeForComponent:component withChildComponet:childComponents];
-    
-    return virtualNode;
-}
-
--(WXDOMNode *)elementVirNodeForComponent:(WXComponent *)component withChildComponet:(NSArray *)children
-{
-    WXDOMNode *elementNode = [[WXDOMNode alloc] init];
-    elementNode.nodeType = @(kWXDOMNodeTypeElement);
-    elementNode.nodeName = component.type;
-    elementNode.children = children;
-    elementNode.childNodeCount = @([children count]);
-    elementNode.nodeId = [NSNumber numberWithFloat:[component.ref integerValue] + 2];
-    NSString *ref = [NSString stringWithFormat:@"%ld",(long)([component.ref integerValue] + 2)];
-    elementNode.attributes = [self attributesArrayForObject:[self.objectsForComponentRefs objectForKey:ref]];
-    return elementNode;
-}
-#pragma mark - WeexSDKMethod
-- (NSString *)_weexInstanceId
-{
-    NSArray *instanceIds = [[WXSDKManager bridgeMgr] getInstanceIdStack];
-    if (instanceIds.count > 0) {
-        return [instanceIds firstObject];
-    }
-    return @"";
-}
-
-- (WXComponent *)_getRootComponentWithInstance:(NSString *)instance
-{
-    NSString *instanceId = instance ? :[self _weexInstanceId];
-    WXSDKInstance *currentInstance = [WXSDKManager instanceForID:instanceId];
-    [currentInstance.rootView setWx_ref:@"_rootParent"];
-    return currentInstance.rootView.wx_component;
-}
-
-- (id)_getComponentFromRef:(NSString *)subRef
-{
-    NSString *instanceId = [self _weexInstanceId];
-    WXSDKInstance *currentInstance = [WXSDKManager instanceForID:instanceId];
-    WXComponent *currentComponent = [currentInstance componentForRef:subRef];
-    return currentComponent;
-}
-
-- (NSNumber *)_getRealNodeIdWithComponentRef:(NSString *)ref
-{
-    NSNumber *nodeId = nil;
-    if ([ref isEqualToString:@"_root"]) {
-        nodeId = @(2);
-    } else {
-        nodeId = [NSNumber numberWithInteger:[ref integerValue] + 2];
-    }
-    return nodeId;
-}
-
-
-- (void)initObjectsForComponentRefs
-{
-    self.objectsForComponentRefs = [[NSMutableDictionary alloc] init];
-    NSArray *windows = [[UIApplication sharedApplication] windows];
-    for (UIView *parentView in windows) {
-        [self childrenForParent:parentView];
-    }
-}
-
-- (UIView *)childrenForParent:(UIView *)parentView
-{
-    if ([self shouldIgnoreView:parentView]) {
-        return nil;
-    }
-    
-    // Build the child nodes by recursing on this view's subviews
-    for (UIView *subview in [parentView.subviews reverseObjectEnumerator]) {
-        [self childrenForParent:subview];
-    }
-    if ([parentView isKindOfClass:[UIView class]]) {
-        NSValue *value = nil;
-        @try {
-            value = [parentView valueForKeyPath:@"wx_ref"];
-            if (value) {
-                NSString *key = [self stringForValue:value atKeyPath:@"wx_ref" onObject:parentView];
-                if ([key isEqualToString:@"_root"]) {
-                    [self.objectsForComponentRefs setObject:parentView forKey:@"2"];
-                }else {
-                    NSString *newKey = [NSString stringWithFormat:@"%ld",(long)([key integerValue] + 2)];
-                   [self.objectsForComponentRefs setObject:parentView forKey:newKey];
-                }
-            }
-        } @catch (NSException *exception) {
-            
-        }
-    }
-    return parentView;
-}
-
-
-
-- (WXDOMNode *)rootComponentNode
-{
-    return self.rootDomNode;
-}
-
-- (NSDictionary *)getObjectsForComponentRefs
-{
-    return self.objectsForComponentRefs;
-}
-
-- (WXDOMNode *)rootNode;
-{
-    WXDOMNode *rootNode = [[WXDOMNode alloc] init];
-    rootNode.nodeId = [NSNumber numberWithInt:1];//[self getAndIncrementNodeIdCount];
-    rootNode.nodeType = @(kWXDOMNodeTypeDocument);
-    rootNode.nodeName = @"#document";
-    rootNode.children = @[ [self rootElement] ];
-    self.rootDomNode = rootNode;
-    return rootNode;
-}
-
-- (WXDOMNode *)rootElement;
-{
-    WXDOMNode *rootElement = [[WXDOMNode alloc] init];
-    rootElement.nodeId = [NSNumber numberWithInt:2];//[self getAndIncrementNodeIdCount];
-    rootElement.nodeType = @(kWXDOMNodeTypeElement);
-    rootElement.nodeName = @"iosml";
-    rootElement.children = [self windowNodes];
-    
-    return rootElement;
-}
-
-- (NSArray *)windowNodes;
-{
-    NSArray *windows = [[UIApplication sharedApplication] windows];
-    NSMutableArray *windowNodes = [NSMutableArray arrayWithCapacity:[windows count]];
-    
-    for (id window in windows) {
-        WXDOMNode *windowNode = [self nodeForView:window];
-        if (windowNode) {
-            [windowNodes addObject:windowNode];
-        }
-    }
-    
-    return windowNodes;
-}
-
-- (WXDOMNode *)nodeForView:(UIView *)view;
-{
-    // Don't generate nodes for views we want to ignore
-    if ([self shouldIgnoreView:view]) {
-        return nil;
-    }
-    
-    // Build the child nodes by recursing on this view's subviews
-    NSMutableArray *childNodes = [[NSMutableArray alloc] initWithCapacity:[view.subviews count]];
-    for (UIView *subview in [view.subviews reverseObjectEnumerator]) {
-        WXDOMNode *childNode = [self nodeForView:subview];
-        if (childNode) {
-            [childNodes addObject:childNode];
-        }
-    }
-    
-    WXDOMNode *viewNode = [self elementNodeForObject:view withChildNodes:childNodes];
-    [self startTrackingView:view withNodeId:viewNode.nodeId];
-    
-    return viewNode;
-}
-
-- (WXDOMNode *)elementNodeForObject:(id)object withChildNodes:(NSArray *)children;
-{
-    WXDOMNode *elementNode = [[WXDOMNode alloc] init];
-    elementNode.nodeType = @(kWXDOMNodeTypeElement);
-    
-    if ([object isKindOfClass:[UIWindow class]]) {
-        elementNode.nodeName = @"window";
-    } else if ([object isKindOfClass:[UIView class]]) {
-        elementNode.nodeName = @"view";
-    } else {
-        elementNode.nodeName = @"object";
-    }
-    
-    elementNode.children = children;
-    elementNode.childNodeCount = @([elementNode.children count]);
-    
-    NSNumber *nodeId = [self.nodeIdsForObjects objectForKey:[NSValue valueWithNonretainedObject:object]];
-    if (nodeId) {
-        elementNode.nodeId = nodeId;
-    }else {
-        elementNode.nodeId = [self getAndIncrementNodeIdCount];
-    }
-    elementNode.attributes = [self attributesArrayForObject:object];
-    
-    return elementNode;
-}
-
-- (void)removeWXComponentRef:(NSString *)ref withInstanceId:(NSString *)instanceId
-{
-    
-    if (!self.objectsForComponentRefs) {
-        return;
-    }
-    WXComponent *corrComponent = [self _getComponentFromRef:ref];
-    NSNumber *parentNodeId = nil;
-    NSNumber *corrNodeId = [self _getRealNodeIdWithComponentRef:corrComponent.ref];
-    
-    if (corrComponent.supercomponent) {
-        parentNodeId = [self _getRealNodeIdWithComponentRef:corrComponent.supercomponent.ref];
-    } else if ([corrComponent.ref isEqualToString:@"_root"]) {
-        // Document are always children of the root element node
-        parentNodeId = @(1);
-        corrNodeId = [self.instanceIdForRoot objectForKey:instanceId];
-        if (corrNodeId) {
-            [self.objectsForComponentRefs removeAllObjects];
-            [self.instanceIdForRoot removeAllObjects];
-        } else {
-            return;
-        }
-    }
-    [self.domain childNodeRemovedWithParentNodeId:parentNodeId nodeId:corrNodeId];
-}
-
-- (void)moveWXComponentRef:(NSString *)ref toSuper:(NSString *)superRef atIndex:(NSInteger)index
-{
-    if (!self.objectsForComponentRefs) {
-        return;
-    }
-    WXComponent *corrComponent = [self _getComponentFromRef:ref];
-    WXComponent *parentComponent = [self _getComponentFromRef:superRef];
-    NSNumber *parentNodeId = [self _getRealNodeIdWithComponentRef:parentComponent.ref];
-    WXComponent *previousComponent = nil;
-    NSNumber *previousNodeId = nil;
-    if (!corrComponent || !parentComponent) {
-        return;
-    }
-    if ([self.objectsForComponentRefs objectForKey:[NSString stringWithFormat:@"%ld",(long)parentNodeId.integerValue]]) {
-        WXDOMNode *node = [self nodeForComponent:corrComponent];
-        if (index < [parentComponent.subcomponents count] - 1) {
-            NSInteger previousIndex = index - 1;
-            if (previousIndex < 0) {
-                previousNodeId = @(-1);
-            }else {
-                previousComponent = [parentComponent.subcomponents objectAtIndex:previousIndex];
-                previousNodeId = [self _getRealNodeIdWithComponentRef:previousComponent.ref];
-            }
-        }
-        [self.domain childNodeInsertedWithParentNodeId:parentNodeId previousNodeId:previousNodeId node:node];
-    }
-}
-
-- (void)addWXComponentRef:(NSString *)ref withInstanceId:(NSString *)instanceId
-{
-    if (!self.objectsForComponentRefs) {
-        return;
-    }
-    WXComponent *corrComponent = [self _getComponentFromRef:ref];
-    if (!corrComponent) {
-        return;
-    }
-    WXComponent *parentComponent = corrComponent.supercomponent;
-    WXComponent *previousComponent = nil;
-    NSNumber *parentNodeId = [self _getRealNodeIdWithComponentRef:parentComponent.ref];
-    NSNumber *previousNodeId = nil;
-    if (parentComponent && [self.objectsForComponentRefs objectForKey:[NSString stringWithFormat:@"%ld",(long)parentNodeId.integerValue]]) {
-        WXDOMNode *node = [self nodeForComponent:corrComponent];
-        NSUInteger indexOfComponent = [parentComponent.subcomponents indexOfObject:corrComponent];
-        if (indexOfComponent < [parentComponent.subcomponents count]) {
-            NSInteger index = indexOfComponent - 1;
-            if (index < 0) {
-                previousNodeId = @(-1);
-            }else {
-                previousComponent = [parentComponent.subcomponents objectAtIndex:index];
-                if (!previousComponent) {
-                    return;
-                }
-                previousNodeId = [self _getRealNodeIdWithComponentRef:previousComponent.ref];
-            }
-        }
-        [self.domain childNodeInsertedWithParentNodeId:parentNodeId previousNodeId:previousNodeId node:node];
-    } else if ([corrComponent.ref isEqualToString:@"_root"]) {
-        NSString *showInstance = [self.instanceIdForRoot objectForKey:@"instanceNode"];
-        if (showInstance && ![showInstance isEqualToString:instanceId]) {
-            [self removeWXComponentRef:@"_root" withInstanceId:showInstance];
-        }
-        if ([self.instanceIdForRoot objectForKey:instanceId]) {
-            return;
-        }
-        WXDOMNode *node = [self rootVirElementWithInstance:instanceId];
-        [self.domain childNodeInsertedWithParentNodeId:@(1) previousNodeId:previousNodeId node:node];
-    }
-}
-
-- (void)removeInstanceDicWithInstance:(NSString *)instanceId
-{
-    if (self.instancesDic[instanceId]) {
-        [self.instancesDic removeObjectForKey:instanceId];
-    }
-}
-
-- (void)addVDomTreeWithView:(UIView *)view
-{
-    NSString *ref = view.wx_ref;
-    if (ref) {
-        NSMutableDictionary *viewRefs = self.objectsForComponentRefs;
-        NSNumber *nodeId = [self _getRealNodeIdWithComponentRef:ref];
-        NSString *nodeIdKey = [NSString stringWithFormat:@"%ld",(long)[nodeId integerValue]];
-        if (![viewRefs objectForKey:nodeIdKey]) {
-            NSArray *attributes = [self attributesArrayForObject:view];
-            for (int i = 0; i < attributes.count; i++) {
-                if (i % 2 == 0) {
-                    NSString *newValue = attributes[i + 1];
-                    [self.domain attributeModifiedWithNodeId:nodeId name:attributes[i] value:newValue];
-                }
-            }
-        }
-        [viewRefs setObject:view forKey:[NSString stringWithFormat:@"%ld",(long)[nodeId integerValue]]];
-        
-        if (self.componentForRefs.count <= 0 && !self.rootComponent) {
-            return;
-        }else if(![self.componentForRefs objectForKey:ref]){
-            WXComponent *component = [self _getComponentFromRef:ref];
-            if (component) {
-                [self.componentForRefs setObject:component forKey:ref];
-                [self addWXComponentRef:ref withInstanceId:nil];
-            }
-        }
-    }
-}
-
-- (void)removeVDomTreeWithView:(UIView *)view
-{
-    NSString *ref = view.wx_ref;
-    if (ref) {
-        NSNumber *nodeId = [self _getRealNodeIdWithComponentRef:ref];
-        NSMutableDictionary *viewRefs =  self.objectsForComponentRefs;
-        ref = [NSString stringWithFormat:@"%ld",(long)[nodeId integerValue]];
-        if ([viewRefs objectForKey:ref] && [viewRefs objectForKey:ref] == view) {
-            [viewRefs removeObjectForKey:ref];
-            NSArray *attributes = @[@"class", @"frame", @"hidden", @"alpha", @"opaque"];
-            for (NSString *key in attributes) {
-                [self.domain attributeRemovedWithNodeId:nodeId name:key];
-            }
-            [self.objectsForComponentRefs removeObjectForKey:ref];
-        }
-//        if (self.componentForRefs.count > 0) {
-//            if ([self.componentForRefs objectForKey:ref]) {
-//                [self removeWXComponentRef:ref withInstanceId:nil];
-//            }
-//        }
-    }
-}
-
-- (void)removeVDomTreeWithRef:(NSString *)ref
-{
-    if (ref) {
-        NSNumber *nodeId = [self _getRealNodeIdWithComponentRef:ref];
-        NSMutableDictionary *viewRefs =  self.objectsForComponentRefs;
-        ref = [NSString stringWithFormat:@"%ld",(long)[nodeId integerValue]];
-        if ([viewRefs objectForKey:ref]) {
-            [viewRefs removeObjectForKey:ref];
-            NSArray *attributes = @[@"class", @"frame", @"hidden", @"alpha", @"opaque"];
-            for (NSString *key in attributes) {
-                [self.domain attributeRemovedWithNodeId:nodeId name:key];
-            }
-            [self.objectsForComponentRefs removeObjectForKey:ref];
-        }
-        //        if (self.componentForRefs.count > 0) {
-        //            if ([self.componentForRefs objectForKey:ref]) {
-        //                [self removeWXComponentRef:ref withInstanceId:nil];
-        //            }
-        //        }
-    }
-}
-
-- (BOOL)diffWithRootComponent
-{
-    WXComponent *newRootComponent = [self _getRootComponentWithInstance:nil];
-    if (self.rootComponent.subcomponents.count != newRootComponent.subcomponents.count) {
-        return YES;
-    }
-    return NO;
-}
-
-#pragma mark - Attribute Generation
-- (NSDictionary *)attributesDicForObject:(id)object
-{
-    // No attributes for a nil object
-    if (!object) {
-        return nil;
-    }
-    
-    NSString *className = [[object class] description];
-    
-    // Thanks to http://petersteinberger.com/blog/2012/pimping-recursivedescription/
-    SEL viewDelSEL = NSSelectorFromString([NSString stringWithFormat:@"%@wDelegate", @"_vie"]);
-    if ([object respondsToSelector:viewDelSEL]) {
-        
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-        UIViewController *vc = [object performSelector:viewDelSEL];
-#pragma clang diagnostic pop
-        
-        if (vc) {
-            className = [className stringByAppendingFormat:@" (%@)", [vc class]];
-        }
-    }
-    NSMutableDictionary *attributesDic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"class", className, nil];
-    
-    if ([object isKindOfClass:[UIView class]]) {
-        // Get strings for all the key paths in viewKeyPathsToDisplay
-        for (NSString *keyPath in self.viewKeyPathsToDisplay) {
-            
-            NSValue *value = nil;
-            
-            @try {
-                value = [object valueForKeyPath:keyPath];
-            } @catch (NSException *exception) {
-                // Continue if valueForKeyPath fails (ie KVC non-compliance)
-                continue;
-            }
-            
-            NSString *stringValue = [self stringForValue:value atKeyPath:keyPath onObject:object];
-            if (stringValue) {
-                [attributesDic setObject:stringValue forKey:keyPath];
-            }
-        }
-    }
-    
-    return attributesDic;
-}
-
-
-- (NSArray *)attributesArrayForObject:(id)object;
-{
-    // No attributes for a nil object
-    if (!object) {
-        return nil;
-    }
-    
-    NSString *className = [[object class] description];
-    
-    // Thanks to http://petersteinberger.com/blog/2012/pimping-recursivedescription/
-    SEL viewDelSEL = NSSelectorFromString([NSString stringWithFormat:@"%@wDelegate", @"_vie"]);
-    if ([object respondsToSelector:viewDelSEL]) {
-        
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-        UIViewController *vc = [object performSelector:viewDelSEL];
-#pragma clang diagnostic pop
-        
-        if (vc) {
-            className = [className stringByAppendingFormat:@" (%@)", [vc class]];
-        }
-    }
-    
-    NSMutableArray *attributes = [NSMutableArray arrayWithArray:@[ @"class", className ]];
-    
-    if ([object isKindOfClass:[UIView class]]) {
-        // Get strings for all the key paths in viewKeyPathsToDisplay
-        for (NSString *keyPath in self.viewKeyPathsToDisplay) {
-            
-            NSValue *value = nil;
-            
-            @try {
-                value = [object valueForKeyPath:keyPath];
-            } @catch (NSException *exception) {
-                // Continue if valueForKeyPath fails (ie KVC non-compliance)
-                continue;
-            }
-            
-            NSString *stringValue = [self stringForValue:value atKeyPath:keyPath onObject:object];
-            if (stringValue) {
-                [attributes addObjectsFromArray:@[ keyPath, stringValue ]];
-            }
-        }
-    }
-    
-    return attributes;
-}
-
-- (NSString *)stringForValue:(id)value atKeyPath:(NSString *)keyPath onObject:(id)object;
-{
-    NSString *stringValue = nil;
-    const char *typeEncoding = [self typeEncodingForKeyPath:keyPath onObject:object];
-    
-    if (typeEncoding) {
-        // Special structs
-        if (!strcmp(typeEncoding,@encode(BOOL))) {
-            stringValue = [(id)value boolValue] ? @"YES" : @"NO";
-        } else if (!strcmp(typeEncoding,@encode(CGPoint))) {
-            stringValue = NSStringFromCGPoint([value CGPointValue]);
-        } else if (!strcmp(typeEncoding,@encode(CGSize))) {
-            stringValue = NSStringFromCGSize([value CGSizeValue]);
-        } else if (!strcmp(typeEncoding,@encode(CGRect))) {
-            stringValue = NSStringFromCGRect([value CGRectValue]);
-        }
-    }
-    
-    // Boxed numeric primitives
-    if (!stringValue && [value isKindOfClass:[NSNumber class]]) {
-        stringValue = [(NSNumber *)value stringValue];
-        
-    // Object types
-    } else if (!stringValue && typeEncoding && !strcmp(typeEncoding, @encode(id))) {
-        stringValue = [value description];
-    }
-    
-    return stringValue;
-}
-
-- (const char *)typeEncodingForKeyPath:(NSString *)keyPath onObject:(id)object;
-{
-    const char *encoding = NULL;
-    NSString *lastKeyPathComponent = nil;
-    id targetObject = nil;
-    
-    // Separate the key path components
-    NSArray *keyPathComponents = [keyPath componentsSeparatedByString:@"."];
-    
-    if ([keyPathComponents count] > 1) {
-        // Drill down to find the targetObject.key piece that we're interested in.
-        NSMutableArray *mutableComponents = [keyPathComponents mutableCopy];
-        lastKeyPathComponent = [mutableComponents lastObject];
-        [mutableComponents removeLastObject];
-        
-        NSString *targetKeyPath = [mutableComponents componentsJoinedByString:@"."];
-        @try {
-            targetObject = [object valueForKeyPath:targetKeyPath];
-        } @catch (NSException *exception) {
-            // Silently fail for KVC non-compliance
-        }
-    } else {
-        // This is the simple case with no dots. Use the full key and original target object
-        lastKeyPathComponent = keyPath;
-        targetObject = object;
-    }
-    
-    // Look for a matching set* method to infer the type
-    NSString *selectorString = [NSString stringWithFormat:@"set%@:", [lastKeyPathComponent stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[lastKeyPathComponent substringToIndex:1] uppercaseString]]];
-    NSMethodSignature *methodSignature = [targetObject methodSignatureForSelector:NSSelectorFromString(selectorString)];
-    if (methodSignature) {
-        // We don't care about arg0 (self) or arg1 (_cmd)
-        encoding = [methodSignature getArgumentTypeAtIndex:2];
-    }
-    
-    // If we didn't find a setter, look for the getter
-    // We could be more exhasutive here with KVC conventions, but these two will cover the majority of cases
-    if (!encoding) {
-        NSMethodSignature *getterSignature = [targetObject methodSignatureForSelector:NSSelectorFromString(lastKeyPathComponent)];
-        encoding = [getterSignature methodReturnType];
-    }
-    
-    return encoding;
-}
-
-
-#pragma mark - private method
-- (void)_getBoxModelNode:(UIView *)objectForNodeId callback:(void (^)(WXDOMBoxModel *boxModel, id error))callback
-{
-    CGFloat scale = [WXPageDomainController defaultInstance].domain.screenScaleFactor;
-    UIView *view = [WXPageDomainUtility getCurrentKeyController].view;
-    CGRect changeRect = [objectForNodeId.superview convertRect:objectForNodeId.frame toView:view];
-    NSNumber *width = [NSNumber numberWithInteger:objectForNodeId.frame.size.width / scale];
-    NSNumber *height = [NSNumber numberWithInteger:objectForNodeId.frame.size.height / scale];
-    CGFloat left = changeRect.origin.x;
-    CGFloat top = changeRect.origin.y;
-    CGFloat right = left + objectForNodeId.frame.size.width;
-    CGFloat bottom = top + objectForNodeId.frame.size.height;
-    
-    CGFloat paddingLeft = 0;
-    CGFloat paddingRight = 0;
-    CGFloat paddingTop = 0;
-    CGFloat paddingBottom = 0;
-    
-    //    UIEdgeInsets marginView = [objectForNodeId layoutMargins];
-    CGFloat marginLeft = 0;//marginView.left * scale;
-    CGFloat marginRight = 0;//marginView.right * scale;
-    CGFloat marginTop = 0;//marginView.top * scale;
-    CGFloat marginBottom = 0;//marginView.bottom * scale;
-    
-    CGFloat borderLeftWidth = 0;
-    CGFloat borderRightWidth = 0;
-    CGFloat borderTopWidth = 0;
-    CGFloat borderBottomWidth = 0;
-    
-    NSArray *content = @[@(left + borderLeftWidth + paddingLeft),
-                         @(top + borderTopWidth + paddingTop),
-                         @(right - borderRightWidth - paddingRight),
-                         @(top + borderTopWidth + paddingTop),
-                         @(right - borderRightWidth - paddingRight),
-                         @(bottom - borderBottomWidth - paddingBottom),
-                         @(left + borderLeftWidth + paddingLeft),
-                         @(bottom - borderBottomWidth - paddingBottom)];
-    NSArray *padding = @[@(left + borderLeftWidth),
-                         @(top + borderTopWidth),
-                         @(right - borderRightWidth),
-                         @(top + borderTopWidth),
-                         @(right - borderRightWidth),
-                         @(bottom - borderBottomWidth),
-                         @(left + borderLeftWidth),
-                         @(bottom - borderBottomWidth)];
-    NSArray *border = @[@(left),
-                        @(top),
-                        @(right),
-                        @(top),
-                        @(right),
-                        @(bottom),
-                        @(left),
-                        @(bottom)];
-    NSArray *margin = @[@(left - marginLeft),
-                        @(top - marginTop),
-                        @(right + marginRight),
-                        @(top - marginTop),
-                        @(right + marginRight),
-                        @(bottom + marginBottom),
-                        @(left - marginLeft),
-                        @(bottom + marginBottom)];
-    
-    WXDOMBoxModel *model = [[WXDOMBoxModel alloc] init];
-    model.width = width;
-    model.height = height;
-    model.content = content;
-    model.padding = padding;
-    model.margin = margin;
-    model.border = border;
-    callback(model, nil);
-}
-
-
-@end
-
-@implementation WXBridgeManager (hackery)
-
-- (void)devtool_swizzled_fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges
-{
-    [self devtool_swizzled_fireEvent:instanceId ref:ref type:type params:params domChanges:domChanges];
-    WXPerformBlockOnComponentThread(^{
-        WXSDKInstance *currentInstance = [WXSDKManager instanceForID:instanceId];
-        if ([ref isEqualToString:@"_root"]) {
-            switch (currentInstance.state) {
-                case WeexInstanceAppear:{
-                    [[WXDOMDomainController defaultInstance] addWXComponentRef:ref withInstanceId:instanceId];
-                }
-                    break;
-                case WeexInstanceDisappear: {
-                    [[WXDOMDomainController defaultInstance].componentForRefs removeAllObjects];
-                    [[WXDOMDomainController defaultInstance] removeWXComponentRef:ref withInstanceId:instanceId];
-                }
-                    break;
-                default:
-                    break;
-            }
-        } 
-    });
-}
-
-- (void)devtool_swizzled_destroyInstance:(NSString *)instance
-{
-    [self devtool_swizzled_destroyInstance:instance];
-    WXPerformBlockOnComponentThread(^{
-        [[WXDOMDomainController defaultInstance] removeWXComponentRef:@"_root" withInstanceId:instance];
-        [[WXDOMDomainController defaultInstance] removeInstanceDicWithInstance:instance];
-    });
-}
-
-@end
-
-@implementation WXSDKInstance (hackery)
-
-- (void)devtool_swizzled_creatFinish
-{
-    [self devtool_swizzled_creatFinish];
-    WXPerformBlockOnComponentThread(^{
-        [[WXDOMDomainController defaultInstance] removeWXComponentRef:@"_root" withInstanceId:self.instanceId];
-        [[WXDOMDomainController defaultInstance] addWXComponentRef:@"_root" withInstanceId:self.instanceId];
-    });
-}
-
-@end
-
-@implementation WXComponentManager (Hackery)
-
-- (void)devtool_swizzled_removeComponent:(NSString *)ref
-{
-    [self devtool_swizzled_removeComponent:ref];
-    WXPerformBlockOnComponentThread(^{
-       [[WXDOMDomainController defaultInstance] removeWXComponentRef:ref withInstanceId:nil];
-    });
-}
-
-- (void)devtool_swizzled_moveComponent:(NSString *)ref toSuper:(NSString *)superRef atIndex:(NSInteger)index
-{
-    [self devtool_swizzled_moveComponent:ref toSuper:superRef atIndex:index];
-    WXPerformBlockOnComponentThread(^{
-        [[WXDOMDomainController defaultInstance] removeWXComponentRef:ref withInstanceId:nil];
-        [[WXDOMDomainController defaultInstance] moveWXComponentRef:ref toSuper:superRef atIndex:index];
-    });
-}
-
-@end
-
-@implementation UIView (Hackery)
-
-// There is a different set of view add/remove observation methods that could've been swizzled instead of the ones below.
-// Choosing the set below seems safer becuase the UIView implementations of the other methods are documented to be no-ops.
-// Custom UIView subclasses may override and not make calls to super for those methods, which would cause us to miss changes in the view hierarchy.
-
-- (void)devtool_swizzled_addSubview:(UIView *)view
-{
-    if (![WXDebugger isVDom]) {
-        [[WXDOMDomainController defaultInstance] removeView:view];
-        [self devtool_swizzled_addSubview:view];
-        [[WXDOMDomainController defaultInstance] addView:view];
-    } else {
-        [self devtool_swizzled_addSubview:view];
-        WXPerformBlockOnComponentThread(^{
-           [[WXDOMDomainController defaultInstance] addVDomTreeWithView:view];
-        });
-    }
-}
-
-- (void)devtool_swizzled_insertSubview:(UIView *)view atIndex:(NSInteger)index;
-{
-    if (![WXDebugger isVDom]) {
-        [[WXDOMDomainController  defaultInstance] removeView:view];
-        [self devtool_swizzled_insertSubview:view atIndex:index];
-        [[WXDOMDomainController defaultInstance] addView:view];
-    } else {
-        [self devtool_swizzled_insertSubview:view atIndex:index];
-        WXPerformBlockOnComponentThread(^{
-            [[WXDOMDomainController defaultInstance] addVDomTreeWithView:view];
-        });
-    }
-}
-
-- (void)devtool_swizzled_removeFromSuperview
-{
-    if (![WXDebugger isVDom]) {
-        [[WXDOMDomainController defaultInstance] removeView:self];
-        [self devtool_swizzled_removeFromSuperview];
-    } else {
-        NSString *refString = [self.wx_ref copy];
-        [self devtool_swizzled_removeFromSuperview];
-        WXPerformBlockOnComponentThread(^{
-           [[WXDOMDomainController defaultInstance] removeVDomTreeWithRef:refString];
-        });
-    }
-}
-
-
-- (void)devtool_swizzled_bringSubviewToFront:(UIView *)view;
-{
-    if (![WXDebugger isVDom]) {
-        [[WXDOMDomainController  defaultInstance] removeView:view];
-        [self devtool_swizzled_bringSubviewToFront:view];
-        [[WXDOMDomainController defaultInstance] addView:view];
-    }else {
-        [self devtool_swizzled_bringSubviewToFront:view];
-    }
-}
-
-- (void)devtool_swizzled_sendSubviewToBack:(UIView *)view;
-{
-    if (![WXDebugger isVDom]) {
-        [[WXDOMDomainController  defaultInstance] removeView:view];
-        [self devtool_swizzled_sendSubviewToBack:view];
-        [[WXDOMDomainController defaultInstance] addView:view];
-    }else {
-        [self devtool_swizzled_sendSubviewToBack:view];
-    }
-}
-
-- (void)devtool_swizzled_insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
-{
-    if (![WXDebugger isVDom]) {
-        [[WXDOMDomainController  defaultInstance] removeView:view];
-        [self devtool_swizzled_insertSubview:view aboveSubview:siblingSubview];
-        [[WXDOMDomainController defaultInstance] addView:view];
-    }else {
-        [self devtool_swizzled_insertSubview:view aboveSubview:siblingSubview];
-    }
-}
-
-- (void)devtool_swizzled_insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
-{
-    if (![WXDebugger isVDom]) {
-        [[WXDOMDomainController  defaultInstance] removeView:view];
-        [self devtool_swizzled_insertSubview:view belowSubview:siblingSubview];
-        [[WXDOMDomainController defaultInstance] addView:view];
-    }else {
-        [self devtool_swizzled_insertSubview:view belowSubview:siblingSubview];
-    }
-}
-
-- (void)devtool_swizzled_exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
-{
-    if (![WXDebugger isVDom]) {
-        // Guard against calls with out-of-bounds indices.
-        // exchangeSubviewAtIndex:withSubviewAtIndex: doesn't crash in this case, so neither should we.
-        if (index1 >= 0 && index1 < [[self subviews] count]) {
-            [[WXDOMDomainController defaultInstance] removeView:[[self subviews] objectAtIndex:index1]];
-        }
-        if (index2 >= 0 && index2 < [[self subviews] count]) {
-            [[WXDOMDomainController defaultInstance] removeView:[[self subviews] objectAtIndex:index2]];
-        }
-        
-        [self devtool_swizzled_exchangeSubviewAtIndex:index1 withSubviewAtIndex:index2];
-        
-        if (index1 >= 0 && index1 < [[self subviews] count]) {
-            [[WXDOMDomainController defaultInstance] addView:[[self subviews] objectAtIndex:index1]];
-        }
-        if (index2 >= 0 && index2 < [[self subviews] count]) {
-            [[WXDOMDomainController defaultInstance] addView:[[self subviews] objectAtIndex:index2]];
-        }
-    }else {
-        [self devtool_swizzled_exchangeSubviewAtIndex:index1 withSubviewAtIndex:index2];
-    }
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.h
deleted file mode 100644
index c7a7a33..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXDevTool.h"
-#import "WXPonyDebugger.h"
-#import "WXDebugDomain.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@interface WXDebugDomainController : WXDomainController <WXCommandDelegate>
-
-@property (nonatomic, strong) WXDebugDomain *domain;
-
-+ (WXDebugDomainController *)defaultInstance;
-
-- (void)registerDevice;
-
-- (void)debugDomainRegisterCallNative:(WXJSCallNative)callNativeBlock;
-
-- (void)debugDomainRegisterCallAddElement:(WXJSCallAddElement)callAddElement;
-
-- (void)debugDomainRegisterCallCreateBody:(WXJSCallCreateBody)callCreateBody ;
-
-- (void)debugDomainRegisterCallRemoveElement:(WXJSCallRemoveElement)callRemoveElement ;
-
-- (void)debugDomainRegisterCallMoveElement:(WXJSCallMoveElement)callMoveElement;
-
-- (void)debugDomainRegisterCallUpdateAttrs:(WXJSCallUpdateAttrs)callUpdateAttrs;
-
-- (void)debugDomainRegisterCallUpdateStyle:(WXJSCallUpdateStyle)callUpdateStyle;
-
-- (void)debugDomainRegisterCallAddEvent:(WXJSCallAddEvent)callAddEvent;
-
-- (void)debugDomainRegisterCallRemoveEvent:(WXJSCallRemoveEvent)callRemoveEvent;
-    
-- (void)debugDomainRegisterCallCreateFinish:(WXJSCallCreateFinish)callCreateFinish;
-
-- (void)debugDomainRegisterCallNativeModule:(WXJSCallNativeModule)callNativeModuleBlock;
-
-- (void)debugDomainRegisterCallNativeComponent:(WXJSCallNativeComponent)callNativeComponentBlock;
-
-- (void)clearGarbage;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.m
deleted file mode 100644
index 8b7e3cf..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugDomainController.m
+++ /dev/null
@@ -1,416 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXDebugDomainController.h"
-#import "WXDevToolType.h"
-#import "WXDeviceInfo.h"
-#import "WXDebuggerUtility.h"
-#import "WXMonitorHandler.h"
-#import <WeexSDK/WeexSDK.h>
-
-#define SYNCRETURN @"WxDebug.syncReturn"
-
-@implementation WXDebugDomainController {
-    NSThread    *_bridgeThread;
-    WXJSCallNative  _nativeCallBlock;
-    WXJSCallAddElement _callAddElementBlock;
-    WXJSCallCreateBody _callCreateBodyBlock;
-    WXJSCallRemoveElement _callRemoveElementBlock;
-    WXJSCallMoveElement _callMoveElementBlock;
-    WXJSCallUpdateAttrs _callUpdateAttrsBlock;
-    WXJSCallUpdateStyle _callUpdateStyleBlock;
-    WXJSCallAddEvent _callAddEventBlock;
-    WXJSCallRemoveEvent _callRemoveEventBlock;
-    WXJSCallCreateFinish _callCreateFinishBlock;
-    WXJSCallNativeModule _nativeModuleBlock;
-    WXJSCallNativeComponent _nativeComponentBlock;
-}
-
-@dynamic domain;
-
-+ (WXDebugDomainController *)defaultInstance {
-    static WXDebugDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXDebugDomainController alloc] init];
-    });
-    return defaultInstance;
-}
-
-- (id)init;
-{
-    self = [super init];
-    if (!self) {
-        return nil;
-    }
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationIsDebug:) name:@"WXDevtoolDebug" object:nil];
-    
-    return self;
-}
-
-+ (Class)domainClass {
-    return [WXDebugDomain class];
-}
-
-+ (NSDictionary *)getLogLevelMap {
-    NSDictionary *logLevelEnumToString =
-    @{
-      @"all":@(WXLogLevelDebug),
-      @"error":@(WXLogLevelError),
-      @"warn":@(WXLogLevelWarning),
-      @"info":@(WXLogLevelInfo),
-      @"log":@(WXLogLevelLog),
-      @"debug":@(WXLogLevelDebug),
-      @"off":@(WXLogLevelOff)
-      };
-    return logLevelEnumToString;
-}
-
-- (void)registerDevice {
-    NSString *deviceID = [WXDeviceInfo getDeviceID];
-    NSString *machine = [WXDeviceInfo deviceName] ? : @"";
-    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"] ?: [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
-    NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys:
-                                       deviceID, @"deviceId",
-                                       @"iOS", @"platform",
-                                       machine, @"model",
-                                       [WXSDKEngine SDKEngineVersion],@"weexVersion",
-                                       [WXDevTool WXDevtoolVersion],@"devtoolVersion",
-                                       [WXDebugger isVDom] ? @"vdom" : @"native",@"elementMode",
-                                       appName, @"name",
-                                       [WXLog logLevelString] ?: @"error",@"logLevel",
-                                       [NSNumber numberWithBool:[WXDevToolType isDebug]],@"remoteDebug",
-                                       [WXDebugger isNetwork], @"network",
-                                       nil];
-    [self _registerDeviceWithParams:parameters];
-}
-
-- (void)debugDomainRegisterCallNative:(WXJSCallNative)callNativeBlock {
-    [self _initBridgeThread];
-    _nativeCallBlock = callNativeBlock;
-}
-
-- (void)debugDomainRegisterCallAddElement:(WXJSCallAddElement)callAddElement {
-    _callAddElementBlock = callAddElement;
-}
-
-- (void)debugDomainRegisterCallCreateBody:(WXJSCallCreateBody)callCreateBody {
-    _callCreateBodyBlock = callCreateBody;
-}
-
-- (void)debugDomainRegisterCallRemoveElement:(WXJSCallRemoveElement)callRemoveElement {
-    _callRemoveElementBlock = callRemoveElement;
-}
-
-- (void)debugDomainRegisterCallMoveElement:(WXJSCallMoveElement)callMoveElement {
-    _callMoveElementBlock = callMoveElement;
-}
-
-- (void)debugDomainRegisterCallUpdateAttrs:(WXJSCallUpdateAttrs)callUpdateAttrs {
-    _callUpdateAttrsBlock = callUpdateAttrs;
-}
-
-- (void)debugDomainRegisterCallUpdateStyle:(WXJSCallUpdateStyle)callUpdateStyle {
-    _callUpdateStyleBlock = callUpdateStyle;
-}
-
-- (void)debugDomainRegisterCallAddEvent:(WXJSCallAddEvent)callAddEvent {
-    _callAddEventBlock = callAddEvent;
-}
-
-- (void)debugDomainRegisterCallRemoveEvent:(WXJSCallRemoveEvent)callRemoveEvent {
-    _callRemoveEventBlock = callRemoveEvent;
-}
-    
-- (void)debugDomainRegisterCallCreateFinish:(WXJSCallCreateFinish)callCreateFinish {
-    _callCreateFinishBlock = callCreateFinish;
-}
-
-- (void)debugDomainRegisterCallNativeModule:(WXJSCallNativeModule)callNativeModuleBlock {
-    _nativeModuleBlock = callNativeModuleBlock;
-}
-
-- (void)debugDomainRegisterCallNativeComponent:(WXJSCallNativeComponent)callNativeComponentBlock {
-    _nativeComponentBlock = callNativeComponentBlock;
-}
-
-- (void)clearGarbage {
-    _nativeCallBlock = nil;
-    _callAddElementBlock = nil;
-    _nativeModuleBlock = nil;
-    _nativeComponentBlock = nil;
-}
-
-#pragma mark - private methods
-- (void)_initBridgeThread {
-    _bridgeThread = [NSThread currentThread];
-}
-
-- (void)_executeBridgeThead:(dispatch_block_t)block
-{
-    if([NSThread currentThread] == _bridgeThread) {
-        block();
-    } else if (_bridgeThread){
-        [self performSelector:@selector(_executeBridgeThead:)
-                     onThread:_bridgeThread
-                   withObject:[block copy]
-                waitUntilDone:NO];
-    }
-}
-
-- (void)_registerDeviceWithParams:(id)params {
-    NSDictionary *obj = [[NSDictionary alloc] initWithObjectsAndKeys:
-                         @"WxDebug.registerDevice", @"method",
-                         [params WX_JSONObject], @"params",
-                         [NSNumber numberWithInt:0],@"id",
-                         nil];
-    
-    NSData *data = [NSJSONSerialization dataWithJSONObject:obj options:0 error:nil];
-    NSString *encodedData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-    [[WXDebugger defaultInstance] sendDebugMessage:encodedData onBridgeThread:_bridgeThread ? YES : NO];
-}
-
-#pragma mark - notification
-
-- (void)notificationIsDebug:(NSNotification *)notification {
-    if ([notification.object boolValue]) {
-        _bridgeThread = nil;
-    }
-}
-
-#pragma mark - WXCommandDelegate
-- (void)domain:(WXDynamicDebuggerDomain *)domain enableWithCallback:(void (^)(id error))callback {
-    dispatch_async(dispatch_get_main_queue(), ^{
-        [WXDevToolType setDebug:YES];
-        [WXSDKEngine restart];
-    });
-    [self performSelector:@selector(enableWithCallback:) withObject:callback afterDelay:1];
-}
-
--(void)enableWithCallback:(void (^)(id error))callback{
-    [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshInstance" object:nil];
-    callback(nil);
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain disableWithCallback:(void (^)(id error))callback {
-    dispatch_async(dispatch_get_main_queue(), ^{
-        [WXDevToolType setDebug:NO];
-        [WXSDKEngine restart];
-        [self clearGarbage];
-    });
-    [self performSelector:@selector(disableWithCallback:) withObject:callback afterDelay:1];
-}
-
--(void)disableWithCallback:(void (^)(id error))callback{
-    [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshInstance" object:nil];
-    callback(nil);
-}
-
-- (void)domain:(WXDebugDomain *)domain sendLogLevel:(NSString *)level withCallback:(void (^)(id error))callback {
-    NSDictionary *logLevelMap = [WXDebugDomainController getLogLevelMap];
-    WXLogLevel wxLogLevel = [[logLevelMap objectForKey:level] integerValue];
-    [WXLog setLogLevel:wxLogLevel];
-    callback(nil);
-}
-
-- (void)domain:(WXDebugDomain *)domain setInspectorMode:(NSString *)mode withCallback:(void (^)(id error))callback {
-    if ([mode isEqualToString:@"native"]) {
-        [WXDebugger setVDom:NO];
-    } else if ([mode isEqualToString:@"vdom"]) {
-        [WXDebugger setVDom:YES];
-    }
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain refreshCallback:(void (^)(id error))callback {
-    dispatch_async(dispatch_get_main_queue(), ^{
-        [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshInstance" object:nil];
-    });
-    callback(nil);
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain reloadCallback:(void (^)(id error))callback {
-    dispatch_async(dispatch_get_main_queue(), ^{
-        [WXSDKEngine restart];
-        [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshInstance" object:nil];
-    });
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain enableNetwork:(BOOL)enable networkCallback:(void (^)(id error))callback {
-    WXDebugger *debugger = [WXDebugger defaultInstance];
-    if (enable) {
-        [debugger enableNetworkTrafficDebugging];
-        [debugger forwardAllNetworkTraffic];
-    }
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callNative:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-    [self _executeBridgeThead:^{
-        NSString *instanceId = jsModule[@"instance"];
-        NSArray *methods = jsModule[@"tasks"];
-        NSString *callbackId = jsModule[@"callback"];
-        
-        // params parse
-        if(!methods || methods.count <= 0){
-            return;
-        }
-        //call native
-        WXLogInfo(@"Calling native... instancdId:%@, methods:%@, callbackId:%@", instanceId, [WXUtility JSONString:methods], callbackId);
-        if(_nativeCallBlock){
-            _nativeCallBlock(instanceId, methods, callbackId);
-        }
-        callback(nil);
-    }];
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callAddElement:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-    [self _executeBridgeThead:^{
-        NSString *instanceId = jsModule[@"instance"] ? : @"";
-        NSDictionary *componentData = jsModule[@"dom"] ? : [NSDictionary dictionary];
-        NSString *parentRef = jsModule[@"ref"] ? : @"";
-        NSNumber *index = jsModule[@"index"] ? : [NSNumber numberWithInteger:0];
-        NSInteger insertIndex = index.integerValue;
-        
-        WXLogDebug(@"callAddElement...%@, %@, %@, %ld", instanceId, parentRef, componentData, (long)insertIndex);
-        _callAddElementBlock(instanceId, parentRef, componentData, insertIndex);
-        callback(nil);
-    }];
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callCreateBody:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callRemoveElement:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-    
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callMoveElement:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-    
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callUpdateAttrs:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-    
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callUpdateStyle:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-    
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callAddEvent:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-    
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain callRemoveEvent:(NSDictionary *)jsModule callBack:(void (^)(id error))callback {
-    
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain syncCall:(NSDictionary *)data callBack:(void (^)(NSDictionary *result, id error))callback; {
-    [self _executeBridgeThead:^{
-        NSArray *args = [data objectForKey:@"args"];
-        NSString *method = [data objectForKey:@"method"];
-        NSString *syncId = [data objectForKey:@"syncId"];
-        NSMutableDictionary *result = [[NSMutableDictionary alloc] init];
-        [result setObject:SYNCRETURN forKey:@"method"];
-        NSError *error = nil;
-        if ([method isEqualToString:@"callNativeModule"]) {
-            NSString *instanceIdString = args[0] ? : @"";
-            NSString *moduleNameString = args[1] ? : @"";
-            NSString *methodNameString = args[2] ? : @"";
-            NSArray *argsArray = args[3] ? : [NSArray array];
-            NSDictionary *optionsDic = [args[4] isKindOfClass:[NSDictionary class]]? args[4]: [NSDictionary dictionary];
-            
-            WXLog(@"callNativeModule...%@,%@,%@,%@", instanceIdString, moduleNameString, methodNameString, argsArray);
-            if(_nativeModuleBlock){
-                NSInvocation *invocation = _nativeModuleBlock(instanceIdString, moduleNameString, methodNameString, argsArray, optionsDic);
-                id object = [WXDebuggerUtility switchInvocationReture:invocation];
-                NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
-                [params setObject:syncId forKey:@"syncId"];
-                if (object) {
-                    [params setObject:object forKey:@"ret"];
-                }else {
-                    error = [[NSError alloc] init];
-                }
-                [result setObject:params forKey:@"params"];
-            }else{
-                error = [NSError errorWithDomain:(NSErrorDomain)@"callNativeModule error" code:500 userInfo:nil];
-            }
-        }else if ([method isEqualToString:@"callNativeComponent"]) {
-            NSString *instanceIdString = args[0] ? : @"";
-            NSString *componentNameString = args[1] ? : @"";
-            NSString *methodNameString = args[2] ? : @"";
-            NSArray *argsArray = args[3] ? : [NSArray array];
-            NSDictionary *optionsDic = args[4] ? : [NSDictionary dictionary];
-            
-            WXLog(@"callNativeComponent...%@,%@,%@,%@", instanceIdString, componentNameString, methodNameString, argsArray);
-            
-            _nativeComponentBlock(instanceIdString, componentNameString, methodNameString, argsArray, optionsDic);
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
-            [result setObject:params forKey:@"params"];
-        }else if([method isEqualToString:@"extendCallNative"]) {
-            id value = [NSDictionary new];
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-            Class propertyClass = NSClassFromString(@"WXExtendCallNativeManager");
-            SEL sel =NSSelectorFromString(@"sendExtendCallNativeEvent:");
-            if(propertyClass && [propertyClass respondsToSelector:sel]){
-                value = [propertyClass performSelector:sel withObject:data[@"value"]];
-            }
-#pragma clang diagnostic pop
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
-            [params setObject:value forKey:@"ret"];
-            [result setObject:params forKey:@"params"];
-        } else if([method isEqualToString:@"btoa"]) {
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
-            NSData *nsdata = [data[@"value"]
-                              dataUsingEncoding:NSUTF8StringEncoding];
-            NSString *base64Encoded = [nsdata base64EncodedStringWithOptions:0];
-            [params setObject:base64Encoded forKey:@"ret"];
-            [result setObject:params forKey:@"params"];
-        } else if([method isEqualToString:@"atob"]) {
-            NSData *nsdataFromBase64String = [[NSData alloc]
-                                              initWithBase64EncodedString:data[@"value"] options:0];
-            NSString *base64Decoded = [[NSString alloc]
-                                       initWithData:nsdataFromBase64String encoding:NSUTF8StringEncoding];
-            NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
-            [params setObject:base64Decoded forKey:@"ret"];
-            [result setObject:params forKey:@"params"];
-        }
-        callback(result, error);
-    }];
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain enablePerformanceMonitor:(BOOL)enable monitorCallback:(void (^)(id error))callback {
-    [WXAnalyzerCenter setOpen: enable];
-    if (enable) {
-        [WXAnalyzerCenter addWxAnalyzer:[WXMonitorHandler sharedInstance]];
-        if ([WXDebugTool isDebug]) {
-            [WXDebugTool setDebug:false];
-        }
-    }else {
-        [WXAnalyzerCenter rmWxAnalyzer:[WXMonitorHandler sharedInstance]];
-        [WXMonitorHandler resetMonitorData];
-    }
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain sendPerformanceData:(BOOL)enable sendCallback:(void (^)(id error))callback {
-    NSMutableDictionary *params = nil;
-    NSError *error = nil;
-    if ([WXMonitorHandler sharedInstance]) {
-        params = [WXMonitorHandler sharedInstance].monitorDictionary;
-    }else {
-        error = [NSError errorWithDomain:(NSErrorDomain)@"sendPerformanceData error" code:500 userInfo:nil];
-    }
-    if ([WXDebugger defaultInstance].isConnected) {
-        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-        [dict setObject:@"WxDebug.sendPerformanceData" forKey:@"method"];
-        [dict setObject:params forKey:@"params"];
-        [[WXDebugger defaultInstance] sendDebugMessage:[WXUtility JSONString:dict] onBridgeThread:false];
-    }
-    callback(error);
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugger.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugger.h
deleted file mode 100644
index 9c29697..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugger.h
+++ /dev/null
@@ -1,121 +0,0 @@
-//
-//  WXDebugger.h
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 11/5/11.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-#import <CoreData/CoreData.h>
-#import <WeexSDK/WeexSDK.h>
-
-#pragma mark - Preprocessor
-
-// Remote logging definitions. Use preprocessor hackery to make this work nicely.
-#ifdef DEBUG
-#define WXDevLog(...)                  _WXLog(@"log", ##__VA_ARGS__)
-#define WXLogD(...)                 _WXLog(@"debug", ##__VA_ARGS__)
-#define WXLogW(...)                 _WXLog(@"warning", ##__VA_ARGS__)
-#define WXLogI(...)                 _WXLog(@"info", ##__VA_ARGS__)
-#define WXLogE(...)                 _WXLog(@"error", ##__VA_ARGS__)
-#define WXLogObjects(...)           _WXLogObjects(@"log", ##__VA_ARGS__)
-#define _WXLog(sev, ...)            _WXLogObjectsImpl(sev, @[[NSString stringWithFormat:__VA_ARGS__]]);
-#define _WXLogObjects(sev, ...)     _WXLogObjectsImpl(sev, @[__VA_ARGS__]);
-#else
-#define WXDevLog(...)
-#define WXLogD(...)
-#define WXLogW(...)
-#define WXLogI(...)
-#define WXLogE(...)
-#define WXLogObjects(...)
-#define _WXLog(sev, ...)
-#define _WXLogObjects(sev, ...)
-#endif
-
-
-
-#pragma mark - Definitions
-
-@class SRWebSocket;
-@class WXDomainController;
-@protocol WXPrettyStringPrinting;
-
-
-extern void _WXLogObjectsImpl(NSString *severity, NSArray *arguments);
-extern NSString *const kWXNetworkObserverEnabledStateChangedNotification;
-
-
-#pragma mark - Public Interface
-
-@interface WXDebugger : NSObject <WXBridgeProtocol>
-
-+ (WXDebugger *)defaultInstance;
-+ (id) allocWithZone:(struct _NSZone *)zone;
-
-- (void) coutLogWithLevel:(NSString *)level arguments:(NSArray *)arguments;
-
-- (id)domainForName:(NSString *)name;
-- (void)sendEventWithName:(NSString *)string parameters:(id)params;
-- (void)sendDebugMessage:(NSString *)message onBridgeThread:(BOOL)isBridgeThread;
-
-#pragma mark Connect/Disconnect
-- (void)autoConnect;
-- (void)autoConnectToBonjourServiceNamed:(NSString*)serviceName;
-- (void)connectToURL:(NSURL *)url;
-- (BOOL)isConnected;
-- (void)disconnect;
-
-#pragma mark Network Debugging
-- (void)enableNetworkTrafficDebugging;
-- (void)disEnableNetworkTrafficDebugging;
-- (void)forwardAllNetworkTraffic;
-- (void)cancleAllNetworkTraffic;
-- (void)forwardNetworkTrafficFromDelegateClass:(Class)cls;
-+ (void)registerPrettyStringPrinter:(id<WXPrettyStringPrinting>)prettyStringPrinter;
-+ (void)unregisterPrettyStringPrinter:(id<WXPrettyStringPrinting>)prettyStringPrinter;
-+ (BOOL)isNetwork;
-
-#pragma mark Core Data Debugging
-- (void)enableCoreDataDebugging;
-- (void)addManagedObjectContext:(NSManagedObjectContext *)context;
-- (void)addManagedObjectContext:(NSManagedObjectContext *)context withName:(NSString *)name;
-- (void)removeManagedObjectContext:(NSManagedObjectContext *)context;
-
-#pragma mark View Hierarchy Debugging
-- (void)enableViewHierarchyDebugging;
-- (void)setDisplayedViewAttributeKeyPaths:(NSArray *)keyPaths;
-+ (void)setVDom:(BOOL)isVDom;
-+ (BOOL)isVDom;
-
-#pragma mark Remote Logging
-- (void)enableRemoteLogging;
-- (void)clearConsole;
-
-#pragma mark Remote Debugging
-- (void)enableRemoteDebugger;
-- (void)remoteDebuggertest;
-
-#pragma mark Timeline
-- (void)enableTimeline;
-
-#pragma mark CSSStyle
-- (void)enableCSSStyle;
-
-#pragma mark openDevTool Debug
-- (void)enableDevToolDebug;
-
-#pragma mark - listenning on server
-//- (void)serverStartWithHost:(NSString *)host port:(NSUInteger)port;
-
-#pragma mark -local enable
-+ (void)setEnabled:(BOOL)enabled;
-+ (BOOL)isEnabled;
-
-+ (void)setRenderFinishEnabled:(BOOL)renderFinishEnabled;
-+ (BOOL)renderFinishEnabled;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugger.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugger.m
deleted file mode 100644
index af5019b..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebugger.m
+++ /dev/null
@@ -1,850 +0,0 @@
-//
-//  WXDebugger.m
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 11/5/11.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <UIKit/UIKit.h>
-#import <SocketRocket/SRWebSocket.h>
-#import "WXDebugger.h"
-#import "WXDynamicDebuggerDomain.h"
-#import "WXNetworkDomain.h"
-#import "WXDebugDomain.h"
-#import "WXPrettyStringPrinter.h"
-#import "WXDomainController.h"
-
-#import "WXNetworkDomainController.h"
-#import "WXRuntimeDomainController.h"
-#import "WXPageDomainController.h"
-#import "WXIndexedDBDomainController.h"
-#import "WXDOMDomainController.h"
-#import "WXInspectorDomainController.h"
-#import "WXConsoleDomainController.h"
-#import "WXSourceDebuggerDomainController.h"
-#import "WXTimelineDomainController.h"
-#import "WXCSSDomainController.h"
-#import "WXDebugDomainController.h"
-#import "WXDevToolType.h"
-
-#import <WeexSDK/WeexSDK.h>
-#import "WXDebuggerUtility.h"
-
-#import <objc/runtime.h>
-#import <objc/message.h>
-#import <sys/utsname.h>
-
-static NSString *const WXBonjourServiceType = @"_ponyd._tcp";
-static BOOL WXIsVDom = NO;
-static BOOL WXIsNetwork = NO;
-
-NSString *const kWXNetworkObserverEnabledStateChangedNotification = @"kWXNetworkObserverEnabledStateChangedNotification";
-static NSString *const kWXNetworkObserverEnabledDefaultsKey = @"com.taobao.WXNetworkObserver.enableOnLaunch";
-static NSString *const kWXPerfomanceRenderFinishEnabledDefaultsKey = @"com.taobao.WXPerfomance.renderFinish";
-
-static JSContext *_jsContext;
-void _WXLogObjectsImpl(NSString *severity, NSArray *arguments)
-{
-    [[WXConsoleDomainController defaultInstance] logWithArguments:arguments severity:severity];
-}
-
-
-@interface WXDebugger () <SRWebSocketDelegate, NSNetServiceBrowserDelegate, NSNetServiceDelegate>
-
-- (void)_resolveService:(NSNetService*)service;
-- (void)_addController:(WXDomainController *)controller;
-- (NSString *)_domainNameForController:(WXDomainController *)controller;
-- (BOOL)_isTrackingDomainController:(WXDomainController *)controller;
-
-@end
-
-
-@implementation WXDebugger {
-    NSString *_bonjourServiceName;
-    NSNetServiceBrowser *_bonjourBrowser;
-    NSMutableArray *_bonjourServices;
-    NSNetService *_currentService;
-    NSMutableDictionary *_domains;
-    NSMutableDictionary *_controllers;
-    __strong SRWebSocket *_socket;
-    NSMutableArray  *_msgAry;
-    NSMutableArray  *_debugAry;
-    BOOL _isConnect;
-    NSThread    *_bridgeThread;
-    NSThread    *_inspectThread;
-    NSString    *_registerData;
-    NSString * _instanceID;
-    NSURL *_syncHttpUrl;
-}
-
-+ (WXDebugger *)defaultInstance;
-{
-    static dispatch_once_t onceToken;
-    static WXDebugger *defaultInstance = nil;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[super allocWithZone:NULL] init];
-    });
-    
-    return defaultInstance;
-}
-
-+ (id) allocWithZone:(struct _NSZone *)zone {
-    return [self defaultInstance];
-}
-
-- (id)init;
-{
-    self = [super init];
-    if (!self) {
-        return nil;
-    }
-    _isConnect = NO;
-    _jsContext = [[JSContext alloc] init];
-    _domains = [[NSMutableDictionary alloc] init];
-    _controllers = [[NSMutableDictionary alloc] init];
-    
-    return self;
-}
-
-- (NSString *)instanceId {
-    return _instanceID;
-}
-
-- (void)setWeexInstanceId:(NSString *)instanceId {
-    _instanceID = instanceId;
-}
-
-- (void) coutLogWithLevel:(NSString *)level arguments:(NSArray *)arguments {
-    
-    [[WXConsoleDomainController defaultInstance] logWithArguments:arguments severity:level];
-}
-
-#pragma mark - SRWebSocketDelegate
-
-- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
-{
-    _isConnect = YES;
-    
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl registerDevice];
-}
-
-- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(NSString *)message;
-{
-    NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:[message dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
-    NSString *fullMethodName = [obj objectForKey:@"method"];
-    NSInteger dotPosition = [fullMethodName rangeOfString:@"."].location;
-    NSString *domainName = [fullMethodName substringToIndex:dotPosition];
-    NSString *methodName = [fullMethodName substringFromIndex:dotPosition + 1];
-    NSString *objectID = [obj objectForKey:@"id"];
-    WXResponseCallback responseCallback = ^(NSDictionary *result, id error) {
-        NSMutableDictionary *response = [[NSMutableDictionary alloc] initWithCapacity:2];
-        [response setValue:objectID forKey:@"id"];
-        if (result) {
-            NSMutableDictionary *newResult = [[NSMutableDictionary alloc] initWithCapacity:result.count];
-            [result enumerateKeysAndObjectsUsingBlock:^(id key, id val, BOOL *stop) {
-                [newResult setObject:[val WX_JSONObjectCopy] forKey:key];
-            }];
-            [response setObject:newResult forKey:@"result"];
-        }else {
-            NSMutableDictionary *newResult = [[NSMutableDictionary alloc] init];
-            [response setObject:newResult forKey:@"result"];
-        }
-        NSData *data = [NSJSONSerialization dataWithJSONObject:response options:0 error:nil];
-        NSString *encodedData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-        [webSocket send:encodedData];
-    };
-    
-    if ([domainName isEqualToString:@"Overlay"]) {
-        domainName = @"DOM";
-    }
-
-    WXDynamicDebuggerDomain *domain = [self domainForName:domainName];
-
-    if (domain) {
-        [domain handleMethodWithName:methodName parameters:[obj objectForKey:@"params"] responseCallback:[responseCallback copy]];
-    } else {
-        responseCallback(nil, [NSString stringWithFormat:@"unknown domain %@", domainName]);
-    }
-}
-
-- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
-{
-    NSLog(@"Debugger closed");
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl clearGarbage];
-    _socket.delegate = nil;
-    _socket = nil;
-    _isConnect = NO;
-    [self _addOvertimeMonitor];
-}
-
-- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
-{
-    NSLog(@"Debugger failed with web socket error: %@", [error localizedDescription]);
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl clearGarbage];
-    _socket.delegate = nil;
-    _socket = nil;
-}
-
-#pragma mark - timer
-- (void)_addOvertimeMonitor
-{
-    NSTimer *timer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(_webSocketOvertime) userInfo:nil repeats:NO];
-    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
-}
-- (void)_webSocketOvertime
-{
-    if ([WXDevToolType isDebug]) {
-        [WXDevToolType setDebug:NO];
-        [WXSDKEngine restart];
-        [[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshInstance" object:nil];
-    }
-}
-
-#pragma mark - NSNetServiceBrowserDelegate
-
-- (void)netServiceBrowser:(NSNetServiceBrowser*)netServiceBrowser didFindService:(NSNetService*)service moreComing:(BOOL)moreComing;
-{
-    const NSStringCompareOptions compareOptions = NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch;
-    if (_bonjourServiceName != nil && [_bonjourServiceName compare:service.name options:compareOptions] != NSOrderedSame) {
-        return;
-    }
-    
-    NSLog(@"Found ponyd bonjour service: %@", service);
-    [_bonjourServices addObject:service];
-    
-    if (!_currentService) {
-        [self _resolveService:service];
-    }
-}
-
-- (void)netServiceBrowser:(NSNetServiceBrowser*)netServiceBrowser didRemoveService:(NSNetService*)service moreComing:(BOOL)moreComing;
-{
-    if ([service isEqual:_currentService]) {
-        [_currentService stop];
-        _currentService.delegate = nil;
-        _currentService = nil;
-    }
-    
-    NSUInteger serviceIndex = [_bonjourServices indexOfObject:service];
-    if (NSNotFound != serviceIndex) {
-        [_bonjourServices removeObjectAtIndex:serviceIndex];
-        NSLog(@"Removed ponyd bonjour service: %@", service);
-        
-        // Try next one
-        if (!_currentService && _bonjourServices.count){
-            NSNetService* nextService = [_bonjourServices objectAtIndex:(serviceIndex % _bonjourServices.count)];
-            [self _resolveService:nextService];
-        }
-    }
-}
-
-#pragma mark - NSNetServiceDelegate
-
-- (void)netService:(NSNetService *)service didNotResolve:(NSDictionary *)errorDict;
-{
-    NSAssert([service isEqual:_currentService], @"Did not resolve incorrect service!");
-    _currentService.delegate = nil;
-    _currentService = nil;
-    
-    // Try next one, we may retry the same one if there's only 1 service in _bonjourServices
-    NSUInteger serviceIndex = [_bonjourServices indexOfObject:service];
-    if (NSNotFound != serviceIndex) {
-        if (_bonjourServices.count){
-            NSNetService* nextService = [_bonjourServices objectAtIndex:((serviceIndex + 1) % _bonjourServices.count)];
-            [self _resolveService:nextService];
-        }
-    }
-}
-
-
-- (void)netServiceDidResolveAddress:(NSNetService *)service;
-{
-    NSAssert([service isEqual:_currentService], @"Resolved incorrect service!");
-
-    [self connectToURL:[NSURL URLWithString:[NSString stringWithFormat:@"ws://%@:%ld/device", [service hostName], (long)[service port]]]];
-}
-
-#pragma mark - Public Methods
-
-- (id)domainForName:(NSString *)name;
-{
-    return [_domains valueForKey:name];
-}
-
-- (void)sendEventWithName:(NSString *)methodName parameters:(id)params;
-{
-    NSDictionary *obj = [[NSDictionary alloc] initWithObjectsAndKeys:methodName, @"method", [params WX_JSONObject], @"params",nil];
-
-    NSData *data = [NSJSONSerialization dataWithJSONObject:obj options:0 error:nil];
-    NSString *encodedData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-    
-    __weak typeof(self) weakSelf = self;
-    dispatch_async(dispatch_get_main_queue(), ^{
-        [_msgAry addObject:encodedData];
-        [weakSelf _executionMsgAry];
-    });
-}
-
-#pragma mark Connect / Disconnect
-
-/**
- * Connect to any ponyd service found via Bonjour.
- */
-- (void)autoConnect;
-{
-    [self autoConnectToBonjourServiceNamed:nil];
-}
-
-/**
- * Only connect to the specified Bonjour service name, this makes things easier in a teamwork
- * environment where multiple instances of ponyd may run on the same network.
- */
-- (void)autoConnectToBonjourServiceNamed:(NSString*)serviceName;
-{
-    if (_bonjourBrowser) {
-        return;
-    }
-    
-    _bonjourServiceName = serviceName;
-    _bonjourServices = [NSMutableArray array];
-    _bonjourBrowser = [[NSNetServiceBrowser alloc] init];
-    [_bonjourBrowser setDelegate:self];
-    
-    if (_bonjourServiceName) {
-        NSLog(@"Waiting for ponyd bonjour service '%@'...", _bonjourServiceName);
-    } else {
-        NSLog(@"Waiting for ponyd bonjour service...");
-    }
-    [_bonjourBrowser searchForServicesOfType:WXBonjourServiceType inDomain:@""];
-}
-
-- (void)connectToURL:(NSURL *)url;
-{
-    NSLog(@"Connecting to %@", url);
-    if (_socket && _isConnect) {
-        return;
-    }
-    _msgAry = nil;
-    _msgAry = [NSMutableArray array];
-    _debugAry = nil;
-    _debugAry = [NSMutableArray array];
-    if (![WXDevToolType isDebug]) {
-        _bridgeThread = nil;
-    }
-    _registerData = nil;
-    _isConnect = NO;
-    
-    [_socket close];
-    _socket.delegate = nil;
-    
-    _socket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:url]];
-    _socket.delegate = self;
-    [_socket open];
-    
-    NSString *urlStr = url.absoluteString;
-    NSString *httpStr = [urlStr stringByReplacingOccurrencesOfString:@"ws" withString:@"http"];
-    NSString *finalUrlStr = [httpStr stringByReplacingOccurrencesOfString:@"debugProxy/native" withString:@"syncCallJS"];
-    _syncHttpUrl = [NSURL URLWithString:finalUrlStr];
-}
-
-- (BOOL)isConnected;
-{
-    return _socket && _socket.readyState == SR_OPEN;
-}
-
-- (void)disconnect;
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl clearGarbage];
-    _msgAry = nil;
-    _debugAry = nil;
-    [_bonjourBrowser stop];
-    _bonjourBrowser.delegate = nil;
-    _bonjourBrowser = nil;
-    _bonjourServiceName = nil;
-    _bonjourServices = nil;
-    [_currentService stop];
-    _currentService.delegate = nil;
-    _currentService = nil;
-    
-    [_socket close];
-    _socket.delegate = nil;
-    _socket = nil;
-}
-
-#pragma mark - set get method
-+ (void)setVDom:(BOOL)isVDom {
-    WXIsVDom = isVDom;
-}
-
-+ (BOOL)isVDom {
-    return WXIsVDom;
-}
-
-#pragma mark - Public Interface
-
-#pragma mark Network Debugging
-
-- (void)enableNetworkTrafficDebugging;
-{
-    [self _addController:[WXNetworkDomainController defaultInstance]];
-    WXIsNetwork = YES;
-}
-
-- (void)disEnableNetworkTrafficDebugging
-{
-    [self _removeController:[WXNetworkDomainController defaultInstance]];
-    WXIsNetwork = NO;
-}
-
-- (void)forwardAllNetworkTraffic;
-{
-    static BOOL swizzled = NO;
-    if (swizzled) {
-        return;
-    }
-    
-    swizzled = YES;
-    [WXNetworkDomainController registerPrettyStringPrinter:[[WXJSONPrettyStringPrinter alloc] init]];
-    [WXNetworkDomainController injectIntoAllNSURLConnectionDelegateClasses];
-    [WXNetworkDomainController swizzleNSURLSessionClasses];
-}
-
-- (void)cancleAllNetworkTraffic
-{
-    
-}
-
-- (void)forwardNetworkTrafficFromDelegateClass:(Class)cls;
-{
-    [WXNetworkDomainController injectIntoDelegateClass:cls];
-}
-
-+ (void)registerPrettyStringPrinter:(id<WXPrettyStringPrinting>)prettyStringPrinter;
-{
-    [WXNetworkDomainController registerPrettyStringPrinter:prettyStringPrinter];
-}
-
-+ (void)unregisterPrettyStringPrinter:(id<WXPrettyStringPrinting>)prettyStringPrinter;
-{
-    [WXNetworkDomainController unregisterPrettyStringPrinter:prettyStringPrinter];
-}
-
-+ (BOOL)isNetwork {
-    return WXIsNetwork;
-}
-
-#pragma mark Core Data Debugging
-
-- (void)enableCoreDataDebugging;
-{
-    [self _addController:[WXRuntimeDomainController defaultInstance]];
-    [self _addController:[WXPageDomainController defaultInstance]];
-    [self _addController:[WXIndexedDBDomainController defaultInstance]];
-}
-
-- (void)addManagedObjectContext:(NSManagedObjectContext *)context;
-{
-    [[WXIndexedDBDomainController defaultInstance] addManagedObjectContext:context];
-}
-
-- (void)addManagedObjectContext:(NSManagedObjectContext *)context withName:(NSString *)name;
-{
-    [[WXIndexedDBDomainController defaultInstance] addManagedObjectContext:context withName:name];
-}
-
-- (void)removeManagedObjectContext:(NSManagedObjectContext *)context;
-{
-    [[WXIndexedDBDomainController defaultInstance] removeManagedObjectContext:context];
-}
-
-#pragma mark View Hierarchy Debugging
-
-- (void)enableViewHierarchyDebugging;
-{
-    [self _addController:[WXDOMDomainController defaultInstance]];
-    [self _addController:[WXInspectorDomainController defaultInstance]];
-    
-    // Choosing frame, alpha, and hidden as the default key paths to display
-    [[WXDOMDomainController defaultInstance] setViewKeyPathsToDisplay:@[@"frame", @"alpha", @"hidden"]];
-    
-    [WXDOMDomainController startMonitoringWeexComponentChanges];
-}
-
-- (void)setDisplayedViewAttributeKeyPaths:(NSArray *)keyPaths;
-{
-    [[WXDOMDomainController defaultInstance] setViewKeyPathsToDisplay:keyPaths];
-}
-
-#pragma mark Remote Logging
-
-- (void)enableRemoteLogging;
-{
-    [self _addController:[WXConsoleDomainController defaultInstance]];
-}
-
-- (void)clearConsole;
-{
-    [[WXConsoleDomainController defaultInstance] clear];
-}
-
-#pragma mark Remote Debugging
-- (void)enableRemoteDebugger {
-    [self _addController:[WXRuntimeDomainController defaultInstance]];
-    [self _addController:[WXPageDomainController defaultInstance]];
-    [self _addController:[WXSourceDebuggerDomainController defaultInstance]];
-}
-
-- (void)remoteDebuggertest {
-    [[WXSourceDebuggerDomainController defaultInstance] remoteDebuggerControllerTest];
-}
-
-#pragma mark - Timeline
-- (void)enableTimeline {
-    [self _addController:[WXTimelineDomainController defaultInstance]];
-}
-
-#pragma mark CSSStyle
-- (void)enableCSSStyle {
-    [self _addController:[WXCSSDomainController defaultInstance]];
-}
-
-#pragma mark - DevToolDebug
-- (void)enableDevToolDebug {
-    [self _addController:[WXDebugDomainController defaultInstance]];
-}
-
-#pragma mark - WXBridgeProtocol
-- (void)executeJSFramework:(NSString *)frameworkScript {
-    NSDictionary *WXEnvironment = @{@"WXEnvironment":[WXUtility getEnvironment]};
-    NSDictionary *args = @{@"source":frameworkScript, @"env":WXEnvironment};
-    [self callJSMethod:@"WxDebug.initJSRuntime" params:args];
-}
-
-- (void)executeJavascript:(NSString *)script
-{
-    NSDictionary *args = @{@"source":script};
-    [self callJSMethod:@"WxDebug.importScript" params:args];
-}
-
-- (JSValue*)executeJavascript:(NSString *)script withSourceURL:(NSURL*)sourceURL
-{
-    NSLog(@"absolute string: %@", sourceURL.absoluteString);
-    NSLog(@"path: %@", sourceURL.path);
-    return [self callJSMethod:@"importScript" args: @[_instanceID, script, @{@"bundleUrl": sourceURL.absoluteString}]];
-}
-
-- (void)setJSContext:(JSContext *)context
-{
-    _jsContext = context;
-}
-
-- (JSContext *)javaScriptContext
-{
-    return _jsContext;
-}
-
-- (void)registerCallNative:(WXJSCallNative)callNative
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallNative:callNative];
-}
-
-- (void)registerCallAddElement:(WXJSCallAddElement)callAddElement
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallAddElement:callAddElement];
-}
-
-- (void)registerCallCreateBody:(WXJSCallCreateBody)callCreateBody
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallCreateBody:callCreateBody];
-}
-
-- (void)registerCallRemoveElement:(WXJSCallRemoveElement)callRemoveElement
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallRemoveElement:callRemoveElement];
-}
-
-- (void)registerCallMoveElement:(WXJSCallMoveElement)callMoveElement
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallMoveElement:callMoveElement];
-}
-
-- (void)registerCallUpdateAttrs:(WXJSCallUpdateAttrs)callUpdateAttrs
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallUpdateAttrs:callUpdateAttrs];
-}
-
-- (void)registerCallUpdateStyle:(WXJSCallUpdateStyle)callUpdateStyle
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallUpdateStyle:callUpdateStyle];
-}
-
-- (void)registerCallAddEvent:(WXJSCallAddEvent)callAddEvent
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallAddEvent:callAddEvent];
-}
-
-- (void)registerCallRemoveEvent:(WXJSCallRemoveEvent)callRemoveEvent
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallRemoveEvent:callRemoveEvent];
-}
-    
-- (void)registerCallCreateFinish:(WXJSCallCreateFinish)callCreateFinish
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallCreateFinish:callCreateFinish];
-}
-
-- (void)registerCallNativeModule:(WXJSCallNativeModule)callNativeModuleBlock
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallNativeModule:callNativeModuleBlock];
-}
-    
-- (void)registerCallNativeComponent:(WXJSCallNativeComponent)callNativeComponentBlock
-{
-    WXDebugDomainController *debugDomainCrl = [WXDebugDomainController defaultInstance];
-    [debugDomainCrl debugDomainRegisterCallNativeComponent:callNativeComponentBlock];
-}
-
-- (JSValue*) exception
-{
-    return nil;
-}
-
-- (void)resetEnvironment
-{
-    [self _initEnvironment];
-}
-    
-- (JSValue *)callJSMethod:(NSString *)method args:(NSArray *)args {
-    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
-    NSString *nonullMethod = method? [method isEqualToString:@"callJS"] ? @"__WEEX_CALL_JAVASCRIPT__" : method : @"";
-    NSArray *nonullArgs = args ? : [NSArray array];
-    [params setObject:nonullMethod forKey:@"method"];
-    [params setObject:nonullArgs forKey:@"args"];
-    
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    [dict setObject:@"WxDebug.callJS" forKey:@"method"];
-    [dict setObject:params forKey:@"params"];
-    
-    NSString *argsStr = [args componentsJoinedByString:@""];
-    if ([argsStr containsString:@"componentHook"]) {
-        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_syncHttpUrl];
-        NSData *data =  [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
-        [request setHTTPMethod:@"POST"];
-        [request setHTTPBody:data];
-        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
-    
-        __block NSArray *receivedData = nil;
-        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
-        dispatch_semaphore_t signal = dispatch_semaphore_create(0);
-        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nonnull response, NSData * _Nullable data, NSError * _Nullable connectionError) {
-            NSError *error = nil;
-            receivedData = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
-            dispatch_semaphore_signal(signal);
-        }];
-        dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);
-        return [JSValue valueWithObject:receivedData inContext:[JSContext new]];
-    }
-    else
-    {
-        [_debugAry addObject:[WXUtility JSONString:dict]];
-        [self _executionDebugAry];
-    }
-    return nil;
-}
-
-#pragma mark - RPC to chrome
-
-- (void)callJSMethod:(NSString *)method params:(NSDictionary*)params {
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    [dict setObject:method forKey:@"method"];
-    [dict setObject:params forKey:@"params"];
-    [_debugAry addObject:[WXUtility JSONString:dict]];
-    [self _executionDebugAry];
-}
-
-#pragma mark - notification
-
-- (void)notificationIsDebug:(NSNotification *)notification {
-    if ([notification.object boolValue]) {
-        _bridgeThread = nil;
-    }
-}
-
-#pragma mark - Private Methods
-
-- (void)_executionDebugAry {
-    if (!_isConnect) return;
-    
-    NSArray *templateContainers = [NSArray arrayWithArray:_debugAry];
-    for (NSString *msg in templateContainers) {
-        [_socket send:msg];
-    }
-    [_debugAry removeAllObjects];
-}
-
-- (void)_executionMsgAry {
-    if (!_isConnect) return;
-    
-    NSArray *templateContainers = [NSArray arrayWithArray:_msgAry];
-    for (NSString *msg in templateContainers) {
-        [_socket send:msg];
-    }
-    [_msgAry removeAllObjects];
-}
-
-- (void)sendDebugMessage:(NSString *)message onBridgeThread:(BOOL)isBridgeThread; {
-    _registerData = message;
-    if (isBridgeThread) {
-        [_debugAry insertObject:message atIndex:0];
-        [self _executionDebugAry];
-    }else {
-        [_socket send:message];
-    }
-}
-
-- (void)_resolveService:(NSNetService*)service;
-{
-    NSLog(@"Resolving %@", service);
-    _currentService = service;
-    _currentService.delegate = self;
-    [_currentService resolveWithTimeout:10.f];
-}
-
-- (void)_initEnvironment
-{
-    [self callJSMethod:@"setEnvironment" args:@[[WXUtility getEnvironment]]];
-}
-
-- (NSString *)_domainNameForController:(WXDomainController *)controller;
-{
-    Class cls = [[controller class] domainClass];
-    return [cls domainName];
-}
-
-- (void)_addController:(WXDomainController *)controller;
-{
-    NSString *domainName = [self _domainNameForController:controller];
-    if ([_domains objectForKey:domainName]) {
-        return;
-    }
-    
-    Class cls = [[controller class] domainClass];
-    WXDynamicDebuggerDomain *domain = [(WXDynamicDebuggerDomain *)[cls alloc] initWithDebuggingServer:self];
-    [_domains setObject:domain forKey:domainName];
-    
-    controller.domain = domain;
-    domain.delegate = controller;
-}
-
-- (void)_removeController:(WXDomainController *)controller
-{
-    NSString *domainName = [self _domainNameForController:controller];
-    if ([_domains objectForKey:domainName]) {
-        [_domains removeObjectForKey:domainName];
-    }
-}
-
-- (BOOL)_isTrackingDomainController:(WXDomainController *)controller;
-{
-    NSString *domainName = [self _domainNameForController:controller];
-    if ([_domains objectForKey:domainName]) {
-        return YES;
-    }
-    
-    return NO;
-}
-
-/*
-#pragma mark - server
-- (void)serverStartWithHost:(NSString *)host port:(NSUInteger)port {
-    if (!_server) {
-        _server = [PSWebSocketServer serverWithHost:host port:port];
-        _server.delegate = self;
-        [_server start];
-    }
-}
-
-#pragma mark - PSWebSocketServerDelegate
-
-- (void)serverDidStart:(PSWebSocketServer *)server {
-    NSLog(@"Server did start…");
-}
-- (void)serverDidStop:(PSWebSocketServer *)server {
-    NSLog(@"Server did stop…");
-}
-- (BOOL)server:(PSWebSocketServer *)server acceptWebSocketWithRequest:(NSURLRequest *)request {
-    NSLog(@"Server should accept request: %@", request);
-    return YES;
-}
-- (void)server:(PSWebSocketServer *)server webSocket:(PSWebSocket *)webSocket didReceiveMessage:(id)message {
-    NSLog(@"Server websocket did receive message: %@", message);
-}
-- (void)server:(PSWebSocketServer *)server webSocketDidOpen:(PSWebSocket *)webSocket {
-    NSLog(@"Server websocket did open");
-}
-- (void)server:(PSWebSocketServer *)server webSocket:(PSWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean {
-    NSLog(@"Server websocket did close with code: %@, reason: %@, wasClean: %@", @(code), reason, @(wasClean));
-}
-- (void)server:(PSWebSocketServer *)server webSocket:(PSWebSocket *)webSocket didFailWithError:(NSError *)error {
-    NSLog(@"Server websocket did fail with error: %@", error);
-}
-*/
-
-#pragma mark - local enable
-+ (void)setEnabled:(BOOL)enabled
-{
-    BOOL previouslyEnabled = [self isEnabled];
-    
-    [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:kWXNetworkObserverEnabledDefaultsKey];
-    
-    if (enabled) {
-        // Inject if needed. This injection is protected with a dispatch_once, so we're ok calling it multiple times.
-        // By doing the injection lazily, we keep the impact of the tool lower when this feature isn't enabled.
-        WXDebugger *debugger = [WXDebugger defaultInstance];
-        [debugger enableNetworkTrafficDebugging];
-        [debugger forwardAllNetworkTraffic];
-    }
-    
-    if (previouslyEnabled != enabled) {
-        [[NSNotificationCenter defaultCenter] postNotificationName:kWXNetworkObserverEnabledStateChangedNotification object:self];
-    }
-}
-
-+ (BOOL)isEnabled
-{
-    return [[[NSUserDefaults standardUserDefaults] objectForKey:kWXNetworkObserverEnabledDefaultsKey] boolValue];
-}
-
-
-+ (void)setRenderFinishEnabled:(BOOL)renderFinishEnabled
-{
-    NSUserDefaults *uDefault = [NSUserDefaults standardUserDefaults];
-    [uDefault setBool:renderFinishEnabled forKey:kWXPerfomanceRenderFinishEnabledDefaultsKey];
-    [uDefault synchronize];
-}
-
-+ (BOOL)renderFinishEnabled
-{
-    return [[[NSUserDefaults standardUserDefaults] objectForKey:kWXPerfomanceRenderFinishEnabledDefaultsKey] boolValue];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.h
deleted file mode 100644
index cad4303..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-//  WXDebuggerUtility.h
-//  Pods
-//
-//  Created by yangshengtao on 16/12/30.
-//
-//
-
-#import <Foundation/Foundation.h>
-
-@interface WXDebuggerUtility : NSObject
-
-+ (id)switchInvocationReture:(NSInvocation *)invocation;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.m
deleted file mode 100644
index 68c8c3a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDebuggerUtility.m
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-//  WXDebuggerUtility.m
-//  Pods
-//
-//  Created by yangshengtao on 16/12/30.
-//
-//
-
-#import "WXDebuggerUtility.h"
-#import <UIKit/UIKit.h>
-#import <objc/runtime.h>
-
-@implementation WXDebuggerUtility
-
-+ (id)switchInvocationReture:(NSInvocation *)invocation {
-    if (!invocation) {
-        return nil;
-    }
-    
-    const char * returnType = [invocation.methodSignature methodReturnType];
-    
-    id returnValue;
-    switch (returnType[0] == _C_CONST ? returnType[1] : returnType[0]) {
-        case _C_ID: {
-            // 1.id
-            void *value;
-            [invocation getReturnValue:&value];
-            id object = (__bridge id)value;
-            
-            returnValue = object;
-            break;
-        }
-        
-#define WXDEVTOOL_ID_RET_CASE(typeString, type) \
-case typeString: {                      \
-type value;                         \
-[invocation getReturnValue:&value];  \
-returnValue = @(value); \
-break; \
-}
-        // 2.number
-        WXDEVTOOL_ID_RET_CASE(_C_CHR, char)
-        WXDEVTOOL_ID_RET_CASE(_C_UCHR, unsigned char)
-        WXDEVTOOL_ID_RET_CASE(_C_SHT, short)
-        WXDEVTOOL_ID_RET_CASE(_C_USHT, unsigned short)
-        WXDEVTOOL_ID_RET_CASE(_C_INT, int)
-        WXDEVTOOL_ID_RET_CASE(_C_UINT, unsigned int)
-        WXDEVTOOL_ID_RET_CASE(_C_LNG, long)
-        WXDEVTOOL_ID_RET_CASE(_C_ULNG, unsigned long)
-        WXDEVTOOL_ID_RET_CASE(_C_LNG_LNG, long long)
-        WXDEVTOOL_ID_RET_CASE(_C_ULNG_LNG, unsigned long long)
-        WXDEVTOOL_ID_RET_CASE(_C_FLT, float)
-        WXDEVTOOL_ID_RET_CASE(_C_DBL, double)
-        WXDEVTOOL_ID_RET_CASE(_C_BOOL, BOOL)
-        
-        case _C_STRUCT_B: {
-            NSString *typeString = [NSString stringWithUTF8String:returnType];
-            if ([typeString rangeOfString:@"NSRange"].location != NSNotFound) {
-                NSRange range;
-                [invocation getReturnValue:&range];
-                returnValue = NSStringFromRange(range);
-                break;
-            }
-            
-#define WXDEVTOOL_STRUCT_FUNCTION(_type)  NSStringFrom ## _type
-#define WXDEVTOOL_STRUCT_RET_CASE(_type)                             \
-            if ([typeString rangeOfString:@#_type].location != NSNotFound) {   \
-                _type value;                                                   \
-                [invocation getReturnValue:&value];                            \
-                returnValue = WXDEVTOOL_STRUCT_FUNCTION(_type)(value); \
-                break;                                                         \
-            }
-            // 4.struct
-            WXDEVTOOL_STRUCT_RET_CASE(CGRect)
-            WXDEVTOOL_STRUCT_RET_CASE(CGPoint)
-            WXDEVTOOL_STRUCT_RET_CASE(CGSize)
-        }
-        case _C_CHARPTR:
-        case _C_PTR:
-        case _C_VOID:
-        case _C_CLASS: {
-            returnValue = nil;
-            break;
-        }
-    }
-    
-    return returnValue;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.h
deleted file mode 100644
index 49bcfe6..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-//  WXDefinitions.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/7/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <CoreData/CoreData.h>
-#import <objc/runtime.h>
-
-extern NSString *const WXDebuggerErrorDomain;
-extern const NSInteger WXDebuggerUnimplementedDomainMethodErrorCode;
-extern const NSInteger WXDebuggerRequiredAttributeMissingCode;
-
-NSString *WXReturnTypeStringForEncodedType(NSString *string);
-
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForObject(id object);
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForValue(NSValue *value);
-
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForPropertyDescription(NSPropertyDescription *description);
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForAttributeDescription(NSAttributeDescription *description);
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForRelationshipDescription(NSRelationshipDescription *description);
-
-NSDictionary *WXExtractPropertyAttributes(objc_property_t property);
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.m
deleted file mode 100644
index 8be738c..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDefinitions.m
+++ /dev/null
@@ -1,195 +0,0 @@
-//
-//  WXDefinitions.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/7/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDefinitions.h"
-
-
-NSString *const WXDebuggerErrorDomain = @"WXErrorDomain";
-const NSInteger WXDebuggerUnimplementedDomainMethodErrorCode = 100;
-const NSInteger WXDebuggerRequiredAttributeMissingCode = 101;
-
-NSString *WXReturnTypeStringForEncodedType(NSString *string)
-{
-    const char *type = [string cStringUsingEncoding:NSASCIIStringEncoding];
-    
-    if (strcmp(type, @encode(id)) == 0) {
-        return @"id";
-    } else if (strcmp(type, @encode(BOOL)) == 0) {
-        return @"BOOL";
-    } else if (strcmp(type, @encode(NSInteger)) == 0) {
-        return @"NSInteger";
-    } else if (strcmp(type, @encode(NSUInteger)) == 0) {
-        return @"NSUInteger";
-    } else if (strcmp(type, @encode(NSTimeInterval)) == 0) {
-        return @"NSTimeInterval";
-    } else if (strcmp(type, @encode(char)) == 0) {
-        return @"char";
-    } else if (strcmp(type, @encode(int)) == 0) {
-        return @"int";
-    } else if (strcmp(type, @encode(short)) == 0) {
-        return @"short";
-    } else if (strcmp(type, @encode(float)) == 0) {
-        return @"float";
-    } else if (strcmp(type, @encode(double)) == 0) {
-        return @"double";
-    }
-    
-    return @"unknown";
-}
-
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForObject(id object)
-{
-    NSString *type = nil;
-    if (!object) {
-        type = @"undefined";
-    } else if ([object isKindOfClass:[NSNumber class]]) {
-        NSNumber *number = object;
-        if (strcmp(number.objCType, @encode(BOOL)) == 0) {
-            type = @"boolean";
-        } else {
-            type = @"number";
-        }
-    } else if ([object isKindOfClass:[NSString class]]) {
-        type = @"string";
-    } else if ([object isKindOfClass:NSClassFromString(@"NSBlock")]) {
-        type = @"function";
-    }
-    
-    if (type) {
-        return [NSDictionary dictionaryWithObject:type forKey:@"type"];
-    }
-    
-    type = @"object";
-    NSString *subtype = nil;
-    
-    if ([object isEqual:[NSNull null]]) {
-        subtype = @"null";
-    } else if ([object isKindOfClass:[NSArray class]] || [object isKindOfClass:[NSSet class]]) {
-        subtype = @"array";
-    } else if ([object isKindOfClass:[NSDate class]]) {
-        subtype = @"date";
-    } else if ([object isKindOfClass:[NSRegularExpression class]]) {
-        subtype = @"regexp";
-    }
-
-    if (subtype) {
-        return [NSDictionary dictionaryWithObjectsAndKeys:
-            type, @"type",
-            subtype, @"subtype",
-            nil];
-    }
-    
-    return [NSDictionary dictionaryWithObject:type forKey:@"type"];
-}
-
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForPropertyDescription(NSPropertyDescription *description)
-{
-    if ([description isKindOfClass:[NSAttributeDescription class]]) {
-        return WXRemoteObjectPropertyTypeDetailsForAttributeDescription((NSAttributeDescription *)description);
-    } else if ([description isKindOfClass:[NSRelationshipDescription class]]) {
-        return WXRemoteObjectPropertyTypeDetailsForRelationshipDescription((NSRelationshipDescription *)description);
-    }
-    
-    return nil;
-}
-
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForAttributeDescription(NSAttributeDescription *description)
-{
-    NSString *type = @"undefined";
-    NSString *subtype = nil;
-    
-    switch (description.attributeType) {
-        case NSInteger16AttributeType:
-        case NSInteger32AttributeType:
-        case NSInteger64AttributeType:
-        case NSDecimalAttributeType:
-        case NSDoubleAttributeType:
-        case NSFloatAttributeType:
-            type = @"number";
-            break;
-            
-        case NSStringAttributeType:
-            type = @"string";
-            break;
-            
-        case NSBooleanAttributeType:
-            type = @"boolean";
-            break;
-            
-        case NSTransformableAttributeType:
-            type = @"object";
-            break;
-            
-        case NSDateAttributeType:
-            type = @"object";
-            subtype = @"date";
-            break;
-            
-        case NSUndefinedAttributeType:
-        case NSBinaryDataAttributeType:
-        case NSObjectIDAttributeType:
-            default:
-            // Undefined.
-            break;
-    }
-    
-    if (!subtype) {
-        return [NSDictionary dictionaryWithObject:type forKey:@"type"];
-    }
-    
-    return [NSDictionary dictionaryWithObjectsAndKeys:
-        type, @"type",
-        subtype, @"subtype",
-        nil];
-}
-
-NSDictionary *WXRemoteObjectPropertyTypeDetailsForRelationshipDescription(NSRelationshipDescription *description)
-{
-    // All relationships are objects.  It's an array if it's a to many relationship.
-    if ([description isToMany]) {
-        return [NSDictionary dictionaryWithObjectsAndKeys:
-            @"object", @"type",
-            @"array", @"subtype",
-            nil];
-    }
-    
-    return [NSDictionary dictionaryWithObject:@"object" forKey:@"type"];
-}
-
-NSDictionary *WXExtractPropertyAttributes(objc_property_t property)
-{
-    NSString *attributesString = [NSString stringWithCString:property_getAttributes(property) encoding:NSASCIIStringEncoding];
-    NSArray *components = [attributesString componentsSeparatedByString:@","];
-
-    // Find the custom getter.
-    NSString *customGetter = nil;
-    NSString *returnEncodeString = nil;
-    for (NSString *component in components) {
-        if ([component hasPrefix:@"G"]) {
-            customGetter = [component substringFromIndex:1];
-        } else if ([component hasPrefix:@"T"]) {
-            returnEncodeString = [component substringFromIndex:1];
-        }
-    }
-
-    if (!customGetter) {
-        customGetter = [NSString stringWithCString:property_getName(property) encoding:NSASCIIStringEncoding];
-    }
-
-    if (!returnEncodeString) {
-        return nil;
-    }
-
-    return @{
-        @"getter": customGetter,
-        @"return": returnEncodeString
-    };
-}
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.h
deleted file mode 100644
index fb112e7..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXDevToolType : NSObject
-
-/**
- *  set debug status
- *  @param isDebug  : YES:open debug model and inspect model;
- *                    default is NO,if isDebug is NO, open inspect only;
- **/
-+ (void)setDebug:(BOOL)isDebug;
-
-
-/**
- *  get debug status
- **/
-+ (BOOL)isDebug;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.m
deleted file mode 100644
index 9157f3a..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDevToolType.m
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXDevToolType.h"
-#import <WeexSDK/WeexSDK.h>
-
-@implementation WXDevToolType
-
-+ (void)setDebug:(BOOL)isDebug {
-    [WXDebugTool setDevToolDebug:isDebug];
-    //notify debug status
-    [[NSNotificationCenter defaultCenter] postNotificationName:@"WXDevtoolDebug" object:@(isDebug)];
-}
-
-+ (BOOL)isDebug {
-    return [WXDebugTool isDevToolDebug];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.h
deleted file mode 100644
index 8303222..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXDeviceInfo : NSObject
-
-+ (NSString *)getDeviceID;
-
-+ (NSString *)deviceName;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.m
deleted file mode 100644
index 05caaf2..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDeviceInfo.m
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXDeviceInfo.h"
-#import <UIKit/UIKit.h>
-#import <Security/Security.h>
-
-#define KEY_PASSWORD  @"com.taobao.Weex.123456"
-#define KEY_USERNAME_PASSWORD  @"com.taobao.Weex.weex123456"
-
-@implementation WXDeviceInfo
-
-+ (NSString *)getDeviceID {
-    NSMutableDictionary *usernamepasswordKVPairs = (NSMutableDictionary *)[self load:KEY_USERNAME_PASSWORD];
-    NSString *deviceID = [usernamepasswordKVPairs objectForKey:KEY_PASSWORD];
-    if (!deviceID) {
-        CFUUIDRef uuid = CFUUIDCreate(NULL);
-        deviceID = CFBridgingRelease(CFUUIDCreateString(NULL, uuid));
-        assert(deviceID);
-        CFRelease(uuid);
-        NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionary];
-        [usernamepasswordKVPairs setObject:deviceID forKey:KEY_PASSWORD];
-        [self save:KEY_USERNAME_PASSWORD data:usernamepasswordKVPairs];
-    }
-    return deviceID;
-}
-
-+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service {
-    return [NSMutableDictionary dictionaryWithObjectsAndKeys:
-            (id)kSecClassGenericPassword,(id)kSecClass,
-            service, (id)kSecAttrService,
-            service, (id)kSecAttrAccount,
-            (id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible,
-            nil];
-}
-
-+ (void)save:(NSString *)service data:(id)data {
-    //Get search dictionary
-    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
-    //Delete old item before add new item
-    SecItemDelete((CFDictionaryRef)keychainQuery);
-    //Add new object to search dictionary(Attention:the data format)
-    [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData];
-    //Add item to keychain with the search dictionary
-    SecItemAdd((CFDictionaryRef)keychainQuery, NULL);
-}
-
-+ (id)load:(NSString *)service {
-    id ret = nil;
-    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
-    //Configure the search setting
-    //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue
-    [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData];
-    [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit];
-    CFDataRef keyData = NULL;
-    if (SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {
-        @try {
-            ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];
-        } @catch (NSException *e) {
-            NSLog(@"Unarchive of %@ failed: %@", service, e);
-        } @finally {
-        }
-    }
-    if (keyData)
-        CFRelease(keyData);
-    return ret;
-}
-
-+ (void)delete:(NSString *)service {
-    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
-    SecItemDelete((CFDictionaryRef)keychainQuery);
-}
-
-+ (NSString *)deviceName {
-    NSString *machine = [[UIDevice currentDevice] model];
-    NSString *systemVer = [[UIDevice currentDevice] systemVersion] ? : @"";
-    NSString *model = [NSString stringWithFormat:@"%@:%@",machine,systemVer];
-    return model;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDomainController.h
deleted file mode 100644
index 7435647..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDomainController.h
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-//  WXDomainController.h
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 2/27/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-#import "WXDynamicDebuggerDomain.h"
-
-@interface WXDomainController : NSObject <WXCommandDelegate>
-
-@property (nonatomic, readonly) BOOL enabled;
-@property (nonatomic, strong) WXDynamicDebuggerDomain *domain;
-
-+ (NSString *)domainName;
-
-// Abstract... Override this
-+ (Class)domainClass;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDomainController.m
deleted file mode 100644
index 2a380c3..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDomainController.m
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-//  WXDomainController.m
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 2/27/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDomainController.h"
-
-@interface WXDomainController ()
-
-@property (nonatomic, readwrite) BOOL enabled;
-
-@end
-
-@implementation WXDomainController
-
-@synthesize enabled = _enabled;
-@synthesize domain = _domain;
-
-+ (NSString *)domainName;
-{
-    return [[self domainClass] domainName];
-}
-
-+ (Class)domainClass;
-{
-    NSAssert(NO, @"Abstract Method");
-    return Nil;
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain disableWithCallback:(void (^)(id error))callback;
-{
-    self.enabled = NO;
-    callback(nil);
-}
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain enableWithCallback:(void (^)(id error))callback;
-{
-    self.enabled = YES;
-    callback(nil);
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.h
deleted file mode 100644
index afb23f3..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.h
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-//  WXDebuggerDomain.h
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 11/5/11.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-
-
-// Must call this to send the response
-typedef void (^WXResponseCallback)(NSDictionary *result, id error);
-
-@protocol WXCommandDelegate;
-@class WXDebugger;
-
-
-@interface WXDynamicDebuggerDomain : NSObject
-
-@property (nonatomic, assign, readonly) WXDebugger * debuggingServer;
-@property (nonatomic, assign) id <WXCommandDelegate> delegate;
-
-+ (NSString *)domainName;
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-- (id)initWithDebuggingServer:(WXDebugger *)debuggingServer;
-
-@end
-
-
-@protocol WXCommandDelegate <NSObject>
-
-- (void)domain:(WXDynamicDebuggerDomain *)domain enableWithCallback:(void (^)(id error))callback;
-- (void)domain:(WXDynamicDebuggerDomain *)domain disableWithCallback:(void (^)(id error))callback;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.m
deleted file mode 100644
index 84c43f8..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXDynamicDebuggerDomain.m
+++ /dev/null
@@ -1,87 +0,0 @@
-//
-//  WXDebuggerDomain.m
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 11/5/11.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <objc/message.h>
-
-#import "WXDynamicDebuggerDomain.h"
-#import "WXDebugger.h"
-#import "WXDefinitions.h"
-
-
-@interface WXDynamicDebuggerDomain ()
-
-@property (nonatomic, readwrite) BOOL enabled;
-
-- (void)_enableWithResultHandler:(WXResponseCallback)resultHandler;
-- (void)_disableWithResultHandler:(WXResponseCallback)resultHandler;
-
-@end
-
-
-@implementation WXDynamicDebuggerDomain
-
-@synthesize debuggingServer = _debuggingServer;
-@synthesize enabled = _enabled;
-@synthesize delegate = _delegate;
-
-#pragma mark - Statics
-
-+ (NSString *)domainName;
-{
-    NSAssert(NO, @"Abstract Method");
-    return nil;
-}
-
-#pragma mark - Initialization
-
-- (id)initWithDebuggingServer:(WXDebugger *)debuggingServer;
-{
-    self = [super init];
-    if (!self) {
-        return nil;
-    }
-    
-    _debuggingServer = debuggingServer;
-    
-    return self;
-}
-
-#pragma mark - Public Methods
-
-- (void)handleMethodWithName:(NSString *)methodName parameters:(NSDictionary *)params responseCallback:(WXResponseCallback)responseCallback;
-{
-    if ([methodName isEqualToString:@"enable"]) {
-        [self _enableWithResultHandler:responseCallback];
-    } else if ([methodName isEqualToString:@"disable"]) {
-        [self _disableWithResultHandler:responseCallback];
-    } else {
-        NSString *errorMessage = [[NSString alloc] initWithFormat:@"Unknown or unimplemented method name: %@.%@", [self.class domainName], methodName];
-        NSError *error = [NSError errorWithDomain:WXDebuggerErrorDomain code:WXDebuggerUnimplementedDomainMethodErrorCode userInfo:[NSDictionary dictionaryWithObject:errorMessage forKey:NSLocalizedDescriptionKey]];
-        responseCallback(nil, error);
-    }
-}
-
-#pragma mark - Private Methods
-
-- (void)_enableWithResultHandler:(WXResponseCallback)resultHandler;
-{
-    self.enabled = YES;
-    NSLog(@"enabling %@", self);
-    resultHandler(nil, nil);
-}
-
-- (void)_disableWithResultHandler:(WXResponseCallback)resultHandler;
-{
-    self.enabled = NO;
-    resultHandler(nil, nil);
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.h
deleted file mode 100644
index ba5ffb6..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.h
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-//  WXDatabaseDomainController.h
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 2/29/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDomainController.h"
-#import "WXIndexedDBDomain.h"
-#import "WXIndexedDBTypes.h"
-
-@class NSManagedObjectContext;
-
-@interface WXIndexedDBDomainController : WXDomainController <WXIndexedDBCommandDelegate>
-
-@property (nonatomic, strong) WXIndexedDBDomain *domain;
-
-+ (WXIndexedDBDomainController *)defaultInstance;
-
-- (void)addManagedObjectContext:(NSManagedObjectContext *)context;
-- (void)addManagedObjectContext:(NSManagedObjectContext *)context withName:(NSString *)name;
-
-- (void)removeManagedObjectContext:(NSManagedObjectContext *)context;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.m
deleted file mode 100644
index 3bd0680..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXIndexedDBDomainController.m
+++ /dev/null
@@ -1,267 +0,0 @@
-//
-//  WXDatabaseDomainController.m
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 2/29/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXIndexedDBDomainController.h"
-#import "WXRuntimeDomainController.h"
-#import "WXIndexedDBTypes.h"
-#import "WXRuntimeTypes.h"
-
-#import <CoreData/CoreData.h>
-
-
-static NSString *const WXManagedObjectContextNameUserInfoKey = @"WXManagedObjectContextName";
-
-
-@interface WXIndexedDBDomainController ()
-
-@property (nonatomic, strong) NSMutableArray *managedObjectContexts;
-@property (nonatomic, strong) NSNumber *rootFrameRequestID;
-
-- (NSManagedObjectContext *)_managedObjectContextForName:(NSString *)name;
-- (NSString *)_databaseNameForManagedObjectContext:(NSManagedObjectContext *)context;
-- (void)_broadcastDatabaseNames;
-- (void)_broadcastDatabase:(NSManagedObjectContext *)context requestID:(NSNumber *)requestID;
-
-@end
-
-
-@implementation WXIndexedDBDomainController
-
-@dynamic domain;
-
-@synthesize managedObjectContexts = _managedObjectContexts;
-@synthesize rootFrameRequestID = _rootFrameRequestID;
-
-#pragma mark - Statics
-
-+ (WXIndexedDBDomainController *)defaultInstance;
-{
-    static WXIndexedDBDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXIndexedDBDomainController alloc] init];
-    });
-    
-    return defaultInstance;
-}
-
-+ (Class)domainClass;
-{
-    return [WXIndexedDBDomain class];
-}
-
-#pragma mark - Initialization
-
-- (id)init;
-{
-    self = [super init];
-    if (self) {
-        self.managedObjectContexts = [[NSMutableArray alloc] init];
-    }
-    
-    return self;
-}
-
-- (void)dealloc;
-{
-    self.managedObjectContexts = nil;
-    self.rootFrameRequestID = nil;
-}
-
-#pragma mark - WXIndexedDBCommandDelegate
-
-- (void)domain:(WXIndexedDBDomain *)domain requestDatabaseNamesForFrameWithRequestId:(NSNumber *)requestId frameId:(NSString *)frameId callback:(void (^)(id))callback;
-{
-    callback(nil);
-    
-    self.rootFrameRequestID = requestId;
-    [self _broadcastDatabaseNames];
-}
-
-- (void)domain:(WXIndexedDBDomain *)domain requestDatabaseWithRequestId:(NSNumber *)requestId frameId:(NSString *)frameId databaseName:(NSString *)databaseName callback:(void (^)(id))callback;
-{
-    callback(nil);
-    
-    [self _broadcastDatabase:[self _managedObjectContextForName:databaseName] requestID:requestId];
-}
-
-- (void)domain:(WXIndexedDBDomain *)domain requestDataWithRequestId:(NSNumber *)requestId frameId:(NSString *)frameId databaseName:(NSString *)databaseName objectStoreName:(NSString *)objectStoreName indexName:(NSString *)indexName skipCount:(NSNumber *)skipCount pageSize:(NSNumber *)pageSize keyRange:(WXIndexedDBKeyRange *)keyRange callback:(void (^)(id))callback;
-{
-    callback(nil);
-    
-    NSManagedObjectContext *context = [self _managedObjectContextForName:databaseName];
-    
-    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:objectStoreName];
-
-    // Don't show subentities if it's not an abstract entity.
-    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:objectStoreName inManagedObjectContext:context];
-    if (![entityDescription isAbstract]) {
-        fetchRequest.includesSubentities = NO;
-    }
-
-    NSInteger totalCount = [context countForFetchRequest:fetchRequest error:NULL];
-    
-    fetchRequest.fetchOffset = [skipCount integerValue];
-    fetchRequest.fetchLimit = [pageSize integerValue];
-    
-    NSArray *results = [context executeFetchRequest:fetchRequest error:NULL];
-    NSMutableArray *dataEntries = [[NSMutableArray alloc] initWithCapacity:results.count];
-    
-    for (NSManagedObject *object in results) {
-        WXIndexedDBDataEntry *dataEntry = [[WXIndexedDBDataEntry alloc] init];
-        
-        WXIndexedDBKey *primaryKey = [[WXIndexedDBKey alloc] init];
-        primaryKey.type = @"string";
-        primaryKey.string = [[object.objectID URIRepresentation] absoluteString];
-        dataEntry.primaryKey = primaryKey;
-        
-        if (indexName.length > 0) {
-            WXIndexedDBKey *key = [[WXIndexedDBKey alloc] init];
-            key.type = @"string";
-            key.string = [object valueForKey:indexName];
-            dataEntry.key = key;
-        } else {
-            dataEntry.key = primaryKey;
-        }
-        
-        WXRuntimeRemoteObject *remoteObject = [[WXRuntimeRemoteObject alloc] init];
-        remoteObject.objectId = [[WXRuntimeDomainController defaultInstance] registerAndGetKeyForObject:object];
-        remoteObject.type = @"object";
-        remoteObject.classNameString = remoteObject.objectDescription = objectStoreName;
-        
-        dataEntry.value = remoteObject;
-        
-        [dataEntries addObject:dataEntry];
-    }
-    
-    NSNumber *hasMore = [NSNumber numberWithBool:YES];
-    if (fetchRequest.fetchOffset + results.count >= totalCount) {
-        hasMore = [NSNumber numberWithBool:NO];
-    }
-    
-    [self.domain objectStoreDataLoadedWithRequestId:requestId objectStoreDataEntries:dataEntries hasMore:hasMore];
-}
-
-#pragma mark - Public Methods
-
-- (void)addManagedObjectContext:(NSManagedObjectContext *)context;
-{
-    NSString *name = [self _databaseNameForManagedObjectContext:context];
-    [self addManagedObjectContext:context withName:name];
-}
-
-- (void)addManagedObjectContext:(NSManagedObjectContext *)context withName:(NSString *)name;
-{
-    [context.userInfo setObject:name forKey:WXManagedObjectContextNameUserInfoKey];
-    [_managedObjectContexts addObject:context];
-    
-    [self _broadcastDatabaseNames];
-}
-
-- (void)removeManagedObjectContext:(NSManagedObjectContext *)context;
-{
-    [self.managedObjectContexts removeObject:context];
-    
-    [self _broadcastDatabaseNames];
-}
-
-#pragma mark - Private Methods
-
-- (NSManagedObjectContext *)_managedObjectContextForName:(NSString *)name;
-{
-    for (NSManagedObjectContext *context in self.managedObjectContexts) {
-        if ([[context.userInfo objectForKey:WXManagedObjectContextNameUserInfoKey] isEqualToString:name]) {
-            return context;
-        }
-    }
-    
-    return nil;
-}
-
-- (NSString *)_databaseNameForManagedObjectContext:(NSManagedObjectContext *)context;
-{
-    NSMutableArray *paths = [[NSMutableArray alloc] init];
-    for (NSPersistentStore *store in context.persistentStoreCoordinator.persistentStores) {
-        NSURL *url = [context.persistentStoreCoordinator URLForPersistentStore:store];
-        NSString *pathString = [url.lastPathComponent stringByDeletingPathExtension];
-        if (pathString) {
-            [paths addObject:pathString];
-        }
-    }
-    
-    return [paths componentsJoinedByString:@":"];
-}
-
-- (void)_broadcastDatabaseNames;
-{
-    NSMutableArray *dbNames = [[NSMutableArray alloc] initWithCapacity:_managedObjectContexts.count];
-
-    WXIndexedDBSecurityOriginWithDatabaseNames *databaseNames =  [[WXIndexedDBSecurityOriginWithDatabaseNames alloc] init];
-    
-    databaseNames.databaseNames = dbNames;
-    [self.managedObjectContexts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-        NSManagedObjectContext *context = obj;
-        [dbNames addObject:[context.userInfo objectForKey:WXManagedObjectContextNameUserInfoKey]];
-    }];
-    
-    databaseNames.securityOrigin = [[NSBundle mainBundle] bundleIdentifier];
-    
-    [self.domain databaseNamesLoadedWithRequestId:_rootFrameRequestID securityOriginWithDatabaseNames:databaseNames];
-}
-
-- (void)_broadcastDatabase:(NSManagedObjectContext *)context requestID:(NSNumber *)requestID;
-{
-    NSMutableArray *objectStores = [[NSMutableArray alloc] init];
-    
-    for (NSEntityDescription *entity in context.persistentStoreCoordinator.managedObjectModel.entities) {
-        WXIndexedDBObjectStore *objectStore = [[WXIndexedDBObjectStore alloc] init];
-        
-        WXIndexedDBKeyPath *keyPath = [[WXIndexedDBKeyPath alloc] init];
-        keyPath.type = @"string";
-        keyPath.string = @"objectID";
-        
-        objectStore.keyPath = keyPath;
-        
-        NSMutableArray *indexes = [[NSMutableArray alloc] init];
-        for (NSAttributeDescription *property in [[entity attributesByName] allValues]) {
-            if ([property isIndexed]) {
-                WXIndexedDBObjectStoreIndex *index = [[WXIndexedDBObjectStoreIndex alloc] init];
-                index.name = property.name;
-                
-                WXIndexedDBKeyPath *guidKeyPath = [[WXIndexedDBKeyPath alloc] init];
-                guidKeyPath.type = @"string";
-                guidKeyPath.string = property.name;
-                
-                index.keyPath = guidKeyPath;
-                index.unique = [NSNumber numberWithBool:NO];
-                index.multiEntry = [NSNumber numberWithBool:NO];
-                
-                [indexes addObject:index];
-            }
-        }
-        objectStore.indexes = indexes;
-        
-        objectStore.autoIncrement = [NSNumber numberWithBool:NO];
-        objectStore.name = entity.name;
-        
-        [objectStores addObject:objectStore];
-    }
-       
-    WXIndexedDBDatabaseWithObjectStores *db = [[WXIndexedDBDatabaseWithObjectStores alloc] init];
-    
-    db.name = [self _databaseNameForManagedObjectContext:context];
-    db.version = @"N/A";
-    db.objectStores = objectStores;
-    
-    [self.domain databaseLoadedWithRequestId:requestID databaseWithObjectStores:db];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.h
deleted file mode 100644
index 83c280e..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.h
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-//  WXInspectorDomainController.h
-//  PonyDebugger
-//
-//  Created by Ryan Olson on 2012-10-27.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXPonyDebugger.h"
-#import "WXInspectorDomain.h"
-
-@interface WXInspectorDomainController : WXDomainController
-
-@property (nonatomic, strong) WXInspectorDomain *domain;
-
-+ (instancetype)defaultInstance;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.m
deleted file mode 100644
index 6f5aca7..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXInspectorDomainController.m
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-//  WXInspectorDomainController.m
-//  PonyDebugger
-//
-//  Created by Ryan Olson on 2012-10-27.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXInspectorDomainController.h"
-#import "WXInspectorDomain.h"
-
-@implementation WXInspectorDomainController
-
-@dynamic domain;
-
-#pragma mark - Class Methods
-
-+ (instancetype)defaultInstance;
-{
-    static WXInspectorDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXInspectorDomainController alloc] init];
-    });
-    return defaultInstance;
-}
-
-+ (Class)domainClass;
-{
-    return [WXInspectorDomain class];
-}
-
-#pragma mark - WXInspectorCommandDelegate
-- (void)domain:(WXInspectorDomain *)domain enableWithCallback:(void (^)(id error))callback {
-    callback(nil);
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.h
deleted file mode 100644
index 7237480..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.h
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-//  WXAFNetworkDomainController.h
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 2/27/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDomainController.h"
-#import "WXNetworkTypes.h"
-#import "WXNetworkDomain.h"
-
-
-@protocol WXPrettyStringPrinting;
-
-@interface WXNetworkDomainController : WXDomainController <WXNetworkCommandDelegate>
-
-@property (nonatomic, strong) WXNetworkDomain *domain;
-
-+ (WXNetworkDomainController *)defaultInstance;
-+ (void)injectIntoAllNSURLConnectionDelegateClasses;
-+ (void)swizzleNSURLSessionClasses;
-+ (void)injectIntoDelegateClass:(Class)cls;
-
-+ (void)registerPrettyStringPrinter:(id<WXPrettyStringPrinting>)prettyStringPrinter;
-+ (void)unregisterPrettyStringPrinter:(id<WXPrettyStringPrinting>)prettyStringPrinter;
-
-- (NSCache *)getNetWorkResponseCache;
-
-@end
-
-
-@interface WXNetworkDomainController (NSURLConnectionHelpers)
-
-- (void)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response;
-- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
-
-- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
-
-- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
-- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
-
-@end
-
-
-@interface WXNetworkDomainController (NSURLSessionTaskHelpers)
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request;
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response;
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data;
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error;
-#ifdef __IPHONE_10_0
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics;
-#endif
-@end
-
-
-@interface WXNetworkRequest (WXNetworkHelpers)
-
-- (id)initWithURLRequest:(NSURLRequest *)request;
-+ (WXNetworkRequest *)networkRequestWithURLRequest:(NSURLRequest *)request;
-
-@end
-
-
-@interface WXNetworkResponse (WXNetworkHelpers)
-
-- (id)initWithURLResponse:(NSURLResponse *)response request:(NSURLRequest *)request;
-+ (WXNetworkResponse *)networkResponseWithURLResponse:(NSURLResponse *)response request:(NSURLRequest *)request;
-
-@end
-
-
-@interface NSURLResponse (WXNetworkHelpers)
-
-- (NSString *)WX_responseType;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.m
deleted file mode 100644
index e51df6e..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXNetworkDomainController.m
+++ /dev/null
@@ -1,1450 +0,0 @@
-//
-//  WXAFNetworkDomainController.m
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 2/27/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXNetworkDomainController.h"
-#import "WXPrettyStringPrinter.h"
-#import "NSDate+WXDebugger.h"
-#import "NSData+WXDebugger.h"
-
-#import <objc/runtime.h>
-#import <objc/message.h>
-#import <dispatch/queue.h>
-
-#import "WXNetworkRecorder.h"
-#import "WXTracingUtility.h"
-#import "WXDebugger.h"
-static NSString *seed = nil;
-static NSInteger sequenceNumber = 0;
-// For reference from the private class dump
-//@interface __NSCFURLSessionConnection : NSObject
-//
-//- (void)_redirectRequest:(id)arg1 redirectResponse:(id)arg2 completion:(void (^)(id arg))arg3;
-//- (void)_conditionalRequirementsChanged:(BOOL)arg1;
-//- (void)_connectionIsWaiting;
-//- (void)_willSendRequestForEstablishedConnection:(id)arg1 completion:(void (^)(NSURLRequest *arg3))arg2;
-//- (void)_didReceiveConnectionCacheKey:(struct HTTPConnectionCacheKey *)arg1;
-//- (void)_didFinishWithError:(id)arg1;
-//- (void)_didSendBodyData:(struct UploadProgressInfo)arg1;
-//- (void)_didReceiveData:(id)arg1;
-//- (void)_didReceiveResponse:(id)arg1 sniff:(BOOL)arg2;
-//
-//@end
-
-@interface __NSCFURLSessionConnection_Swizzles : NSObject
-
-@property(copy) NSURLSessionTask *task; // @synthesize task=_task;
-
-@end
-
-@implementation __NSCFURLSessionConnection_Swizzles
-
-@dynamic task;
-
-- (void)WX__redirectRequest:(NSURLRequest *)arg1 redirectResponse:(NSURLResponse *)arg2 completion:(id)arg3;
-{
-    [[WXNetworkDomainController defaultInstance] URLSession:[self.task valueForKey:@"session"] task:self.task willPerformHTTPRedirection:(id)arg2 newRequest:arg1];
-    
-    [self WX__redirectRequest:arg1 redirectResponse:arg2 completion:arg3];
-}
-
-- (void)WX__didReceiveData:(id)arg1;
-{
-    [[WXNetworkDomainController defaultInstance] URLSession:[self.task valueForKey:@"session"] dataTask:(id)self.task didReceiveData:arg1];
-    
-    [self WX__didReceiveData:arg1];
-}
-
-- (void)WX__didReceiveResponse:(NSURLResponse *)response sniff:(BOOL)sniff;
-{
-    // This can be called multiple times for the same request. Make sure it doesn't
-    [[WXNetworkDomainController defaultInstance] URLSession:[self.task valueForKey:@"session"] dataTask:(id)self.task didReceiveResponse:response];
-
-    [self WX__didReceiveResponse:response sniff:sniff];
-}
-
-- (void)WX__didFinishWithError:(NSError *)arg1;
-{
-    [[WXNetworkDomainController defaultInstance] URLSession:[self.task valueForKey:@"session"] task:self.task didCompleteWithError:arg1];
-    [self WX__didFinishWithError:arg1];
-}
-
-@end
-
-
-@interface NSURLSessionTask (PrivateStuff)
-
-- (NSTimeInterval)startTime;
-
-@end
-
-@interface _WXRequestState : NSObject
-
-@property (nonatomic, copy) NSURLRequest *request;
-@property (nonatomic, copy) NSURLResponse *response;
-@property (nonatomic, strong) NSMutableData *dataAccumulator;
-@property (nonatomic, copy) NSString *requestID;
-
-@end
-
-
-@interface WXNetworkDomainController ()
-
-- (void)setResponse:(NSData *)responseBody forRequestID:(NSString *)requestID response:(NSURLResponse *)response request:(NSURLRequest *)request;
-- (void)performBlock:(dispatch_block_t)block;
-
-@end
-
-
-@implementation WXNetworkDomainController {
-    NSCache *_responseCache;
-    NSMutableDictionary *_connectionStates;
-    dispatch_queue_t _queue;
-}
-
-@dynamic domain;
-
-#pragma mark - Statics
-
-+ (WXNetworkDomainController *)defaultInstance;
-{
-    static WXNetworkDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXNetworkDomainController alloc] init];
-    });
-    return defaultInstance;
-}
-
-+ (NSString *)nextRequestID;
-{
-    
-    
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        CFUUIDRef uuid = CFUUIDCreate(CFAllocatorGetDefault());
-        seed = (__bridge NSString *)CFUUIDCreateString(CFAllocatorGetDefault(), uuid);
-        CFRelease(uuid);
-    });
-    
-    return [[NSString alloc] initWithFormat:@"%@-%ld", seed, (long)(++sequenceNumber)];
-}
-
-+ (NSString *)currentRequestID;
-{
-    return [[NSString alloc] initWithFormat:@"%@-%ld", seed, (long)(sequenceNumber)];
-}
-
-
-+ (Class)domainClass;
-{
-    return [WXNetworkDomain class];
-}
-
-#pragma mark Pretty String Printing registration and usage
-
-// This is replaced atomically to avoid having to lock when looking up the printers instead of being mutable.
-static NSArray *prettyStringPrinters = nil;
-
-+ (NSArray*)_currentPrettyStringPrinters;
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        // Always register the default to differentiate text vs binary data
-        id<WXPrettyStringPrinting> textPrettyStringPrinter = [[WXTextPrettyStringPrinter alloc] init];
-        prettyStringPrinters = [[NSArray alloc] initWithObjects:textPrettyStringPrinter, nil];
-    });
-    return prettyStringPrinters;
-}
-
-+ (void)registerPrettyStringPrinter:(id<WXPrettyStringPrinting>)prettyStringPrinter;
-{
-    @synchronized(prettyStringPrinters) {
-        NSMutableArray *newPrinters = [[WXNetworkDomainController _currentPrettyStringPrinters] mutableCopy];
-        [newPrinters addObject:prettyStringPrinter];
-        prettyStringPrinters = newPrinters;
-    }
-}
-
-+ (void)unregisterPrettyStringPrinter:(id<WXPrettyStringPrinting>)prettyStringPrinter;
-{
-    @synchronized(prettyStringPrinters) {
-        NSMutableArray *newPrinters = [[WXNetworkDomainController _currentPrettyStringPrinters] mutableCopy];
-        [newPrinters removeObjectIdenticalTo:prettyStringPrinter];
-        prettyStringPrinters = newPrinters;
-    }
-}
-
-+ (id<WXPrettyStringPrinting>)prettyStringPrinterForRequest:(NSURLRequest *)request;
-{
-    for(id<WXPrettyStringPrinting> prettyStringPrinter in [[WXNetworkDomainController _currentPrettyStringPrinters] reverseObjectEnumerator]) {
-        if ([prettyStringPrinter canPrettyStringPrintRequest:request]) {
-            return prettyStringPrinter;
-        }
-    }
-    return nil;
-}
-
-+ (id<WXPrettyStringPrinting>)prettyStringPrinterForResponse:(NSURLResponse *)response withRequest:(NSURLRequest *)request;
-{
-    for(id<WXPrettyStringPrinting> prettyStringPrinter in [[WXNetworkDomainController _currentPrettyStringPrinters] reverseObjectEnumerator]) {
-        if ([prettyStringPrinter canPrettyStringPrintResponse:response withRequest:request]) {
-            return prettyStringPrinter;
-        }
-    }
-    return nil;
-}
-
-#pragma mark Delegate Injection Convenience Methods
-
-+ (SEL)swizzledSelectorForSelector:(SEL)selector;
-{
-    return NSSelectorFromString([NSString stringWithFormat:@"_pd_swizzle_%x_%@", arc4random(), NSStringFromSelector(selector)]);
-}
-
-/// All swizzled delegate methods should make use of this guard.
-/// This will prevent duplicated sniffing when the original implementation calls up to a superclass implementation which we've also swizzled.
-/// The superclass implementation (and implementations in classes above that) will be executed without inteference if called from the original implementation.
-+ (void)sniffWithoutDuplicationForObject:(NSObject *)object selector:(SEL)selector sniffingBlock:(void (^)(void))sniffingBlock originalImplementationBlock:(void (^)(void))originalImplementationBlock
-{
-    const void *key = selector;
-
-    // Don't run the sniffing block if we're inside a nested call
-    if (!objc_getAssociatedObject(object, key)) {
-        sniffingBlock();
-    }
-
-    // Mark that we're calling through to the original so we can detect nested calls
-    objc_setAssociatedObject(object, key, @YES, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-    originalImplementationBlock();
-    objc_setAssociatedObject(object, key, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-+ (BOOL)instanceRespondsButDoesNotImplementSelector:(SEL)selector class:(Class)cls;
-{
-    if ([cls instancesRespondToSelector:selector]) {
-        unsigned int numMethods = 0;
-        Method *methods = class_copyMethodList(cls, &numMethods);
-        
-        BOOL implementsSelector = NO;
-        for (int index = 0; index < numMethods; index++) {
-            SEL methodSelector = method_getName(methods[index]);
-            if (selector == methodSelector) {
-                implementsSelector = YES;
-                break;
-            }
-        }
-        
-        free(methods);
-        
-        if (!implementsSelector) {
-            return YES;
-        }
-    }
-    
-    return NO;
-}
-
-+ (void)replaceImplementationOfSelector:(SEL)selector withSelector:(SEL)swizzledSelector forClass:(Class)cls withMethodDescription:(struct objc_method_description)methodDescription implementationBlock:(id)implementationBlock undefinedBlock:(id)undefinedBlock;
-{
-    if ([self instanceRespondsButDoesNotImplementSelector:selector class:cls]) {
-        return;
-    }
-
-#ifdef __IPHONE_6_0
-    IMP implementation = imp_implementationWithBlock((id)([cls instancesRespondToSelector:selector] ? implementationBlock : undefinedBlock));
-#else
-    IMP implementation = imp_implementationWithBlock((__bridge void *)([cls instancesRespondToSelector:selector] ? implementationBlock : undefinedBlock));
-#endif
-    
-    Method oldMethod = class_getInstanceMethod(cls, selector);
-    if (oldMethod) {
-        class_addMethod(cls, swizzledSelector, implementation, methodDescription.types);
-         
-        Method newMethod = class_getInstanceMethod(cls, swizzledSelector);
-        
-        method_exchangeImplementations(oldMethod, newMethod);
-    } else {
-        class_addMethod(cls, selector, implementation, methodDescription.types);
-    }
-}
-
-#pragma mark - Delegate Injection
-
-+ (void)swizzleNSURLSessionClasses;
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        [self _swizzleNSURLSessionClasses];
-    });
-}
-
-+ (void)_swizzleNSURLSessionClasses;
-{
-    // On iOS 8 we want to swizzle __NSCFURLSessionConnection. On 9 we want to swizzle its subclass, __NSCFURLLocalSessionConnection
-    Class cfURLSessionConnectionClass = NSClassFromString(@"__NSCFURLLocalSessionConnection");
-    
-    if (cfURLSessionConnectionClass == nil) {
-        cfURLSessionConnectionClass = NSClassFromString(@"__NSCFURLSessionConnection");
-
-    }
-    if (!cfURLSessionConnectionClass) {
-        WXDevLog(@"Could not find __NSCFURLSessionConnection or __NSCFURLLocalSessionConnection");
-        return;
-    }
-    
-    unsigned int outCount = 0;
-    Method *methods = class_copyMethodList([__NSCFURLSessionConnection_Swizzles class], &outCount);
-    
-    for (int i = 0; i < outCount; i++) {
-        Method m = methods[i];
-        SEL sourceMethod = method_getName(m);
-        const char *encoding = method_getTypeEncoding(m);
-        NSString *sourceMethodName = NSStringFromSelector(sourceMethod);
-        NSAssert([sourceMethodName hasPrefix:@"WX_"], @"Expecting swizzle methods only");
-        NSString *originalMethodName = [sourceMethodName substringFromIndex:3];
-        SEL originalMethod = NSSelectorFromString(originalMethodName);
-        NSAssert(originalMethod, @"Must find selector");
-        
-        IMP sourceImp = method_getImplementation(m);
-        
-        IMP originalImp = class_getMethodImplementation(cfURLSessionConnectionClass, originalMethod);
-        
-        NSAssert(originalImp, @"Must find imp");
-
-        BOOL success = class_addMethod(cfURLSessionConnectionClass, sourceMethod, originalImp, encoding);
-        if (!success) {
-            NSAssert(success, @"Should be successful");
-        }
-        IMP replacedImp = class_replaceMethod(cfURLSessionConnectionClass, originalMethod, sourceImp, encoding);
-        if (!replacedImp) {
-            NSAssert(replacedImp, @"Expected originam method to have been replaced");
-        }
-    }
-    
-    if (methods) {
-        free(methods);
-    }
-}
-
-+ (void)injectIntoAllNSURLConnectionDelegateClasses;
-{
-    // Only allow swizzling once.
-    static BOOL swizzled = NO;
-    if (swizzled) {
-        return;
-    }
-    
-    swizzled = YES;
-    
-    // Swizzle any classes that implement one of these selectors.
-    const SEL selectors[] = {
-        @selector(connectionDidFinishLoading:),
-        @selector(connection:didReceiveResponse:),
-        @selector(URLSession:dataTask:didReceiveResponse:completionHandler:),
-        @selector(URLSession:task:didCompleteWithError:),
-        @selector(URLSession:downloadTask:didFinishDownloadingToURL:),
-        @selector(URLSession:task:didFinishCollectingMetrics:)
-    };
-    
-    const int numSelectors = sizeof(selectors) / sizeof(SEL);
-
-    Class *classes = NULL;
-    int numClasses = objc_getClassList(NULL, 0);
-    
-    if (numClasses > 0) {
-        classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
-        numClasses = objc_getClassList(classes, numClasses);
-        for (NSInteger classIndex = 0; classIndex < numClasses; ++classIndex) {
-            Class class = classes[classIndex];
-            
-            if (class_getClassMethod(class, @selector(isSubclassOfClass:)) == NULL) {
-                continue;
-            }
-            
-            //Temporarily filter classes beginning FBSDK
-            if([NSStringFromClass(class) rangeOfString:@"FBSDK"].location != NSNotFound) {
-                continue;
-            }
-            
-            //Temporarily filter classes beginning ANManager
-            if([NSStringFromClass(class) rangeOfString:@"ANManager"].location != NSNotFound) {
-                continue;
-            }
-            
-            if (![class isSubclassOfClass:[NSObject class]]) {
-                continue;
-            }
-            
-            if ([class isSubclassOfClass:[WXNetworkDomainController class]]) {
-                continue;
-            }
-            
-            for (int selectorIndex = 0; selectorIndex < numSelectors; ++selectorIndex) {
-                if ([class instancesRespondToSelector:selectors[selectorIndex]]) {
-                    [self injectIntoDelegateClass:class];
-                    break;
-                }
-            }
-        }
-        
-        free(classes);
-    }
-    [self injectIntoNSURLSessionTaskResume];
-    [self injectIntoNSURLConnectionAsynchronousClassMethod];
-    [self injectIntoNSURLConnectionSynchronousClassMethod];
-}
-
-+ (void)injectIntoNSURLSessionTaskResume
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        // In iOS 7 resume lives in __NSCFLocalSessionTask
-        // In iOS 8 resume lives in NSURLSessionTask
-        // In iOS 9 resume lives in __NSCFURLSessionTask
-        Class class = Nil;
-        if (![[NSProcessInfo processInfo] respondsToSelector:@selector(operatingSystemVersion)]) {
-            class = NSClassFromString([@[@"__", @"NSC", @"FLocalS", @"ession", @"Task"] componentsJoinedByString:@""]);
-        } else if ([[NSProcessInfo processInfo] operatingSystemVersion].majorVersion < 9) {
-            class = [NSURLSessionTask class];
-        } else {
-            class = NSClassFromString([@[@"__", @"NSC", @"FURLS", @"ession", @"Task"] componentsJoinedByString:@""]);
-        }
-        SEL selector = @selector(resume);
-        SEL swizzledSelector = [WXTracingUtility swizzledSelectorForSelector:selector];
-        
-        Method originalResume = class_getInstanceMethod(class, selector);
-        
-        void (^swizzleBlock)(NSURLSessionTask *) = ^(NSURLSessionTask *slf) {
-            [[WXNetworkDomainController defaultInstance] URLSessionTaskWillResume:slf];
-            ((void(*)(id, SEL))objc_msgSend)(slf, swizzledSelector);
-        };
-        
-        IMP implementation = imp_implementationWithBlock(swizzleBlock);
-        class_addMethod(class, swizzledSelector, implementation, method_getTypeEncoding(originalResume));
-        Method newResume = class_getInstanceMethod(class, swizzledSelector);
-        method_exchangeImplementations(originalResume, newResume);
-    });
-}
-
-+ (void)injectIntoDelegateClass:(Class)cls;
-{
-    // Connections
-    [self injectWillSendRequestIntoDelegateClass:cls];
-    [self injectDidReceiveDataIntoDelegateClass:cls];
-    [self injectDidReceiveResponseIntoDelegateClass:cls];
-    [self injectDidFinishLoadingIntoDelegateClass:cls];
-    [self injectDidFailWithErrorIntoDelegateClass:cls];
-    [self injectDidFinishCollectingMetrics:cls];
-}
-
-+ (void)injectWillSendRequestIntoDelegateClass:(Class)cls;
-{
-    SEL selector = @selector(connection:willSendRequest:redirectResponse:);
-    SEL swizzledSelector = [self swizzledSelectorForSelector:selector];
-    
-    Protocol *protocol = @protocol(NSURLConnectionDataDelegate);
-    if (!protocol) {
-        protocol = @protocol(NSURLConnectionDelegate);
-    }
-    
-    if (![cls conformsToProtocol:protocol]) {
-        return;
-    }
-    
-    struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES);
-    
-    typedef NSURLRequest *(^NSURLConnectionWillSendRequestBlock)(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSURLRequest *request, NSURLResponse *response);
-    
-    NSURLConnectionWillSendRequestBlock undefinedBlock = ^NSURLRequest *(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSURLRequest *request, NSURLResponse *response) {
-        [[WXNetworkDomainController defaultInstance] connection:connection willSendRequest:request redirectResponse:response];
-        return request;
-    };
-    
-    NSURLConnectionWillSendRequestBlock implementationBlock = ^NSURLRequest *(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSURLRequest *request, NSURLResponse *response) {
-        __block NSURLRequest *returnValue = nil;
-        [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{
-            undefinedBlock(slf, connection, request, response);
-        } originalImplementationBlock:^{
-            returnValue = ((id(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, connection, request, response);
-        }];
-        return returnValue;
-    };
-    
-    [self replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock];
-}
-
-+ (void)injectDidReceiveResponseIntoDelegateClass:(Class)cls;
-{
-    SEL selector = @selector(connection:didReceiveResponse:);
-    SEL swizzledSelector = [self swizzledSelectorForSelector:selector];
-    
-    Protocol *protocol = @protocol(NSURLConnectionDataDelegate);
-    if (!protocol) {
-        protocol = @protocol(NSURLConnectionDelegate);
-    }
-    
-    if (![cls conformsToProtocol:protocol]) {
-        return;
-    }
-    
-    struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES);
-    
-    typedef void (^NSURLConnectionDidReceiveResponseBlock)(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSURLResponse *response);
-    
-    NSURLConnectionDidReceiveResponseBlock undefinedBlock = ^(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSURLResponse *response) {
-        [[WXNetworkDomainController defaultInstance] connection:connection didReceiveResponse:response];
-    };
-    
-    NSURLConnectionDidReceiveResponseBlock implementationBlock = ^(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSURLResponse *response) {
-        [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{
-            undefinedBlock(slf, connection, response);
-        } originalImplementationBlock:^{
-            ((void(*)(id, SEL, id, id))objc_msgSend)(slf, swizzledSelector, connection, response);
-        }];
-    };
-    
-    [self replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock];
-}
-
-+ (void)injectDidReceiveDataIntoDelegateClass:(Class)cls;
-{
-    SEL selector = @selector(connection:didReceiveData:);
-    SEL swizzledSelector = [self swizzledSelectorForSelector:selector];
-    
-    Protocol *protocol = @protocol(NSURLConnectionDataDelegate);
-    if (!protocol) {
-        protocol = @protocol(NSURLConnectionDelegate);
-    }
-    
-    if (![cls conformsToProtocol:protocol]) {
-        return;
-    }
-    
-    struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES);
-    
-    typedef void (^NSURLConnectionDidReceiveDataBlock)(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSData *data);
-    
-    NSURLConnectionDidReceiveDataBlock undefinedBlock = ^(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSData *data) {
-        [[WXNetworkDomainController defaultInstance] connection:connection didReceiveData:data];
-    };
-    
-    NSURLConnectionDidReceiveDataBlock implementationBlock = ^(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSData *data) {
-        [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{
-            undefinedBlock(slf, connection, data);
-        } originalImplementationBlock:^{
-            ((void(*)(id, SEL, id, id))objc_msgSend)(slf, swizzledSelector, connection, data);
-        }];
-    };
-    
-    [self replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock];
-}
-
-+ (void)injectDidFinishLoadingIntoDelegateClass:(Class)cls;
-{
-    SEL selector = @selector(connectionDidFinishLoading:);
-    SEL swizzledSelector = [self swizzledSelectorForSelector:selector];
-    
-    Protocol *protocol = @protocol(NSURLConnectionDataDelegate);
-    if (!protocol) {
-        protocol = @protocol(NSURLConnectionDelegate);
-    }
-    
-    if (![cls conformsToProtocol:protocol]) {
-        return;
-    }
-    
-    struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES);
-    
-    typedef void (^NSURLConnectionDidFinishLoadingBlock)(id <NSURLConnectionDelegate> slf, NSURLConnection *connection);
-    
-    NSURLConnectionDidFinishLoadingBlock undefinedBlock = ^(id <NSURLConnectionDelegate> slf, NSURLConnection *connection) {
-        [[WXNetworkDomainController defaultInstance] connectionDidFinishLoading:connection];
-    };
-    
-    NSURLConnectionDidFinishLoadingBlock implementationBlock = ^(id <NSURLConnectionDelegate> slf, NSURLConnection *connection) {
-        [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{
-            undefinedBlock(slf, connection);
-        } originalImplementationBlock:^{
-            ((void(*)(id, SEL, id))objc_msgSend)(slf, swizzledSelector, connection);
-        }];
-    };
-    
-    [self replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock];
-}
-
-+ (void)injectDidFailWithErrorIntoDelegateClass:(Class)cls;
-{
-    SEL selector = @selector(connection:didFailWithError:);
-    SEL swizzledSelector = [self swizzledSelectorForSelector:selector];
-    
-    Protocol *protocol = @protocol(NSURLConnectionDelegate);
-    
-    if (![cls conformsToProtocol:protocol]) {
-        return;
-    }
-    
-    struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES);
-    
-    typedef void (^NSURLConnectionDidFailWithErrorBlock)(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSError *error);
-    
-    NSURLConnectionDidFailWithErrorBlock undefinedBlock = ^(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSError *error) {
-        [[WXNetworkDomainController defaultInstance] connection:connection didFailWithError:error];
-    };
-    
-    NSURLConnectionDidFailWithErrorBlock implementationBlock = ^(id <NSURLConnectionDelegate> slf, NSURLConnection *connection, NSError *error) {
-        [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{
-            undefinedBlock(slf, connection, error);
-        } originalImplementationBlock:^{
-            ((void(*)(id, SEL, id, id))objc_msgSend)(slf, swizzledSelector, connection, error);
-        }];
-    };
-    
-    [self replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock];
-}
-
-+(void)injectDidFinishCollectingMetrics:(Class)cls
-{
-    NSLog(@"injectDidFinishCollectingMetrics");
-    SEL selector = @selector(URLSession:task:didFinishCollectingMetrics:);
-    SEL swizzledSelector = [self swizzledSelectorForSelector:selector];
-    
-    Protocol *protocol = @protocol(NSURLSessionTaskDelegate);
-    
-    if (![cls conformsToProtocol:protocol]) {
-        return;
-    }
-    
-    struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES);
-    
-    typedef void (^NSURLConnectionDidFinishCollectingMetricsBlock)(id <NSURLSessionTaskDelegate> slf, NSURLSession *session, NSURLSessionTask* task, NSURLSessionTaskMetrics *metrics);
-    
-    NSURLConnectionDidFinishCollectingMetricsBlock undefinedBlock = ^(id <NSURLSessionTaskDelegate> slf, NSURLSession *session, NSURLSessionTask* task, NSURLSessionTaskMetrics *metrics) {
-        [[WXNetworkDomainController defaultInstance] URLSession:session task:task didFinishCollectingMetrics:metrics];
-    };
-    
-    NSURLConnectionDidFinishCollectingMetricsBlock implementationBlock = ^(id <NSURLSessionTaskDelegate> slf, NSURLSession *session, NSURLSessionTask* task, NSURLSessionTaskMetrics *metrics) {
-        [self sniffWithoutDuplicationForObject:session selector:selector sniffingBlock:^{
-            undefinedBlock(slf, session, task,metrics);
-        } originalImplementationBlock:^{
-            ((void(*)(id, SEL, id, id,id))objc_msgSend)(slf, swizzledSelector, session, task,metrics);
-        }];
-    };
-    
-    [self replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock];
-}
-
-
-- (void)URLSessionTaskWillResume:(NSURLSessionTask *)task
-{
-    // Since resume can be called multiple times on the same task, only treat the first resume as
-    // the equivalent to connection:willSendRequest:...
-    [self performBlock:^{
-        NSString *requestID =[self requestStateForTask:task].requestID;
-        _WXRequestState *requestState = [self requestStateForTask:task];
-        if (!requestState.request) {
-            requestState.request = task.currentRequest;
-            
-            [[WXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:task.currentRequest redirectResponse:nil];
-        }
-    }];
-}
-
-+ (void)injectIntoNSURLConnectionAsynchronousClassMethod
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        Class class = objc_getMetaClass(class_getName([NSURLConnection class]));
-        SEL selector = @selector(sendAsynchronousRequest:queue:completionHandler:);
-        SEL swizzledSelector = [WXTracingUtility swizzledSelectorForSelector:selector];
-        
-        typedef void (^NSURLConnectionAsyncCompletion)(NSURLResponse* response, NSData* data, NSError* connectionError);
-        
-        void (^asyncSwizzleBlock)(Class, NSURLRequest *, NSOperationQueue *, NSURLConnectionAsyncCompletion) = ^(Class slf, NSURLRequest *request, NSOperationQueue *queue, NSURLConnectionAsyncCompletion completion) {
-            if ([WXDebugger isEnabled]) {
-                NSString *requestID = [self nextRequestID];
-                [[WXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:request redirectResponse:nil];
-                NSString *mechanism = [self mechansimFromClassMethod:selector onClass:class];
-                [[WXNetworkRecorder defaultRecorder] recordMechanism:mechanism forRequestID:requestID];
-                NSURLConnectionAsyncCompletion completionWrapper = ^(NSURLResponse *response, NSData *data, NSError *connectionError) {
-                    [[WXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:response];
-                    [[WXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:[data length]];
-                    if (connectionError) {
-                        [[WXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:connectionError];
-                    } else {
-                        [[WXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:data];
-                    }
-                    
-                    // Call through to the original completion handler
-                    if (completion) {
-                        completion(response, data, connectionError);
-                    }
-                };
-                ((void(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, request, queue, completionWrapper);
-            } else {
-                ((void(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, request, queue, completion);
-            }
-        };
-        
-        [WXTracingUtility replaceImplementationOfKnownSelector:selector onClass:class withBlock:asyncSwizzleBlock swizzledSelector:swizzledSelector];
-    });
-}
-
-+ (void)injectIntoNSURLConnectionSynchronousClassMethod
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        Class class = objc_getMetaClass(class_getName([NSURLConnection class]));
-        SEL selector = @selector(sendSynchronousRequest:returningResponse:error:);
-        SEL swizzledSelector = [WXTracingUtility swizzledSelectorForSelector:selector];
-        
-        NSData *(^syncSwizzleBlock)(Class, NSURLRequest *, NSURLResponse **, NSError **) = ^NSData *(Class slf, NSURLRequest *request, NSURLResponse **response, NSError **error) {
-            NSData *data = nil;
-            if ([WXDebugger isEnabled]) {
-                NSString *requestID = [self nextRequestID];
-                [[WXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:request redirectResponse:nil];
-                NSString *mechanism = [self mechansimFromClassMethod:selector onClass:class];
-                [[WXNetworkRecorder defaultRecorder] recordMechanism:mechanism forRequestID:requestID];
-                NSError *temporaryError = nil;
-                NSURLResponse *temporaryResponse = nil;
-                data = ((id(*)(id, SEL, id, NSURLResponse **, NSError **))objc_msgSend)(slf, swizzledSelector, request, &temporaryResponse, &temporaryError);
-                [[WXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:temporaryResponse];
-                [[WXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:[data length]];
-                if (temporaryError) {
-                    [[WXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:temporaryError];
-                } else {
-                    [[WXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:data];
-                }
-                if (error) {
-                    *error = temporaryError;
-                }
-                if (response) {
-                    *response = temporaryResponse;
-                }
-            } else {
-                data = ((id(*)(id, SEL, id, NSURLResponse **, NSError **))objc_msgSend)(slf, swizzledSelector, request, response, error);
-            }
-            
-            return data;
-        };
-        
-        [WXTracingUtility replaceImplementationOfKnownSelector:selector onClass:class withBlock:syncSwizzleBlock swizzledSelector:swizzledSelector];
-    });
-}
-
-+ (NSString *)mechansimFromClassMethod:(SEL)selector onClass:(Class)class
-{
-    return [NSString stringWithFormat:@"+[%@ %@]", NSStringFromClass(class), NSStringFromSelector(selector)];
-}
-#pragma mark - Initialization
-
-- (id)init;
-{
-    self = [super init];
-    if (!self) {
-        return nil;
-    }
-
-    _connectionStates = [[NSMutableDictionary alloc] init];
-    _responseCache = [[NSCache alloc] init];
-    _queue = dispatch_queue_create("com.squareup.ponydebugger.WXNetworkDomainController", DISPATCH_QUEUE_SERIAL);
-    
-    return self;
-}
-
-- (void)dealloc;
-{
-    if (_queue) {
-//        dispatch_release(_queue);
-        _queue = nil;
-    }
-}
-
-#pragma mark - WXNetworkCommandDelegate
-
-- (void)domain:(WXNetworkDomain *)domain canClearBrowserCacheWithCallback:(void (^)(NSNumber *, id))callback;
-{
-    callback([NSNumber numberWithBool:NO], nil);
-}
-
-- (void)domain:(WXNetworkDomain *)domain canClearBrowserCookiesWithCallback:(void (^)(NSNumber *, id))callback
-{
-    callback([NSNumber numberWithBool:NO], nil);
-}
-
-- (void)domain:(WXNetworkDomain *)domain clearBrowserCacheWithCallback:(void (^)(id))callback;
-{
-    [[NSURLCache sharedURLCache] removeAllCachedResponses];
-    callback(nil);
-}
-
-- (void)domain:(WXNetworkDomain *)domain getResponseBodyWithRequestId:(NSString *)requestId callback:(void (^)(NSString *, NSNumber *, id))callback;
-{
-    NSDictionary *response = [_responseCache objectForKey:requestId];
-    callback([response objectForKey:@"body"], [response objectForKey:@"base64Encoded"], nil);
-}
-
-#pragma mark - public Methods
-- (NSCache *)getNetWorkResponseCache {
-    return _responseCache;
-}
-
-#pragma mark - Private Methods
-
-- (void)setResponse:(NSData *)responseBody forRequestID:(NSString *)requestID response:(NSURLResponse *)response request:(NSURLRequest *)request;
-{
-    id<WXPrettyStringPrinting> prettyStringPrinter = [WXNetworkDomainController prettyStringPrinterForResponse:response withRequest:request];
-    
-    NSString *encodedBody;
-    BOOL isBinary;
-    if (!prettyStringPrinter) {
-#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
-        encodedBody = [responseBody base64EncodedStringWithOptions:0];
-#else
-        encodedBody = responseBody.base64Encoding;
-#endif
-        isBinary = YES;
-    } else {
-        encodedBody = [prettyStringPrinter prettyStringForData:responseBody forResponse:response request:request];
-        isBinary = NO;
-    }
-
-    NSDictionary *responseDict = [NSDictionary dictionaryWithObjectsAndKeys:
-        encodedBody, @"body",
-        [NSNumber numberWithBool:isBinary], @"base64Encoded",
-        nil];
-
-    [_responseCache setObject:responseDict forKey:requestID cost:[responseBody length]];
-}
-
-- (void)performBlock:(dispatch_block_t)block;
-{
-    dispatch_async(_queue, block);
-}
-
-#pragma mark - Private Methods (Connections)
-
-- (_WXRequestState *)requestStateForConnection:(NSURLConnection *)connection;
-{
-    NSValue *key = [NSValue valueWithNonretainedObject:connection];
-    _WXRequestState *state = [_connectionStates objectForKey:key];
-    if (!state) {
-        state = [[_WXRequestState alloc] init];
-        state.requestID = [[self class] nextRequestID];
-        [_connectionStates setObject:state forKey:key];
-    }
-
-    return state;
-}
-
-- (NSString *)requestIDForConnection:(NSURLConnection *)connection;
-{
-    return [self requestStateForConnection:connection].requestID;
-}
-
-- (void)setResponse:(NSURLResponse *)response forConnection:(NSURLConnection *)connection;
-{
-    [self requestStateForConnection:connection].response = response;
-}
-
-- (NSURLResponse *)responseForConnection:(NSURLConnection *)connection;
-{
-    return [self requestStateForConnection:connection].response;
-}
-
-- (void)setRequest:(NSURLRequest *)request forConnection:(NSURLConnection *)connection;
-{
-    [self requestStateForConnection:connection].request = request;
-}
-
-- (NSURLRequest *)requestForConnection:(NSURLConnection *)connection;
-{
-    return [self requestStateForConnection:connection].request;
-}
-
-- (void)setAccumulatedData:(NSMutableData *)data forConnection:(NSURLConnection *)connection;
-{
-    _WXRequestState *requestState = [self requestStateForConnection:connection];
-    requestState.dataAccumulator = data;
-}
-
-- (void)addAccumulatedData:(NSData *)data forConnection:(NSURLConnection *)connection;
-{
-    NSMutableData *dataAccumulator = [self requestStateForConnection:connection].dataAccumulator;
-    
-    [dataAccumulator appendData:data];
-}
-
-- (NSData *)accumulatedDataForConnection:(NSURLConnection *)connection;
-{
-    return [self requestStateForConnection:connection].dataAccumulator;
-}
-
-// This removes storing the accumulated request/response from the dictionary so we can release connection
-- (void)connectionFinished:(NSURLConnection *)connection;
-{
-    NSValue *key = [NSValue valueWithNonretainedObject:connection];
-    [_connectionStates removeObjectForKey:key];
-}
-
-#pragma mark - Private Methods (Tasks)
-
-- (_WXRequestState *)requestStateForTask:(NSURLSessionTask *)task;
-{
-    NSValue *key = [NSValue valueWithNonretainedObject:task];
-    _WXRequestState *state = [_connectionStates objectForKey:key];
-    if (!state) {
-        state = [[_WXRequestState alloc] init];
-        state.requestID = [[self class] nextRequestID];
-        [_connectionStates setObject:state forKey:key];
-    }
-
-    return state;
-}
-
-- (_WXRequestState *)requestStateForMetricsTask:(NSURLSessionTask *)task;
-{
-    NSValue *key = [NSValue valueWithNonretainedObject:task];
-    _WXRequestState *state = [_connectionStates objectForKey:key];
-    if (!state) {
-        state = [[_WXRequestState alloc] init];
-        state.requestID = [[self class] currentRequestID];
-        [_connectionStates setObject:state forKey:key];
-    }
-    
-    return state;
-}
-
-- (NSString *)requestIDForTask:(NSURLSessionTask *)task;
-{
-    return [self requestStateForTask:task].requestID;
-}
-
-- (NSString *)requestIDForMetricsTask:(NSURLSessionTask *)task;
-{
-    return [self requestStateForMetricsTask:task].requestID;
-}
-
-- (void)setResponse:(NSURLResponse *)response forTask:(NSURLSessionTask *)task;
-{
-    [self requestStateForTask:task].response = response;
-}
-
-- (NSURLResponse *)responseForTask:(NSURLSessionTask *)task
-{
-    return [self requestStateForTask:task].response;
-}
-
-- (void)setRequest:(NSURLRequest *)request forTask:(NSURLSessionTask *)task;
-{
-    [self requestStateForTask:task].request = request;
-}
-
-- (NSURLRequest *)requestForTask:(NSURLSessionTask *)task;
-{
-    return [self requestStateForTask:task].request;
-}
-
-- (void)setAccumulatedData:(NSMutableData *)data forTask:(NSURLSessionTask *)task;
-{
-    _WXRequestState *requestState = [self requestStateForTask:task];
-    requestState.dataAccumulator = data;
-}
-
-- (void)addAccumulatedData:(NSData *)data forTask:(NSURLSessionTask *)task;
-{
-    NSMutableData *dataAccumulator = [self requestStateForTask:task].dataAccumulator;
-
-    [dataAccumulator appendData:data];
-}
-
-- (NSData *)accumulatedDataForTask:(NSURLSessionTask *)task;
-{
-    return [self requestStateForTask:task].dataAccumulator;
-}
-
-// This removes storing the accumulated request/response from the dictionary so we can release task
-- (void)taskFinished:(NSURLSessionTask *)task;
-{
-    NSValue *key = [NSValue valueWithNonretainedObject:task];
-    [_connectionStates removeObjectForKey:key];
-}
-
-@end
-
-
-@implementation WXNetworkDomainController (NSURLConnectionHelpers)
-
-- (void)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response;
-{
-    [self performBlock:^{
-        [self setRequest:request forConnection:connection];
-        WXNetworkRequest *networkRequest = [WXNetworkRequest networkRequestWithURLRequest:request];
-        WXNetworkResponse *networkRedirectResponse = response ? [[WXNetworkResponse alloc] initWithURLResponse:response request:request] : nil;
-        
-        [self.domain requestWillBeSentWithRequestId:[self requestIDForConnection:connection]
-                                            frameId:@"3888.3"
-                                           loaderId:@"11111"
-                                        documentURL:[request.URL absoluteString]
-                                            request:networkRequest
-                                          timestamp:[NSDate WX_timestamp]
-                                          initiator:nil
-                                   redirectResponse:networkRedirectResponse];
-        if ([WXDebugger isEnabled]) {
-            NSString *requestID = [self requestIDForConnection:connection];
-            [[WXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:request redirectResponse:nil];
-        }
-    }];
-}
-
-- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
-{
-    [self performBlock:^{
-        
-        if ([response respondsToSelector:@selector(copyWithZone:)]) {
-            
-            // If the request wasn't generated yet, then willSendRequest was not called. This appears to be an inconsistency in documentation
-            // and behavior.
-            NSURLRequest *request = [self requestForConnection:connection];
-            if (!request && [connection respondsToSelector:@selector(currentRequest)]) {
-            
-                NSLog(@"PonyDebugger Warning: -[WXNetworkDomainController connection:willSendRequest:redirectResponse:] not called, request timestamp may be inaccurate. See Known Issues in the README for more information.");
-
-                request = connection.currentRequest;
-                [self setRequest:request forConnection:connection];
-
-                WXNetworkRequest *networkRequest = [WXNetworkRequest networkRequestWithURLRequest:request];
-                [self.domain requestWillBeSentWithRequestId:[self requestIDForConnection:connection]
-                                                    frameId:@"3888.3"
-                                                   loaderId:@"11111"
-                                                documentURL:[request.URL absoluteString]
-                                                    request:networkRequest
-                                                  timestamp:[NSDate WX_timestamp]
-                                                  initiator:nil
-                                           redirectResponse:nil];
-            }
-        
-            [self setResponse:response forConnection:connection];
-            
-            NSMutableData *dataAccumulator = nil;
-            if (response.expectedContentLength < 0) {
-                dataAccumulator = [[NSMutableData alloc] init];
-            } else {
-                dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)response.expectedContentLength];
-            }
-            
-            [self setAccumulatedData:dataAccumulator forConnection:connection];
-            
-            NSString *requestID = [self requestIDForConnection:connection];
-            WXNetworkResponse *networkResponse = [WXNetworkResponse networkResponseWithURLResponse:response request:[self requestForConnection:connection]];
-            
-            [self.domain responseReceivedWithRequestId:requestID
-                                               frameId:@"3888.3"
-                                              loaderId:@"11111"
-                                             timestamp:[NSDate WX_timestamp]
-                                                  type:response.WX_responseType
-                                              response:networkResponse];
-            
-            if([WXDebugger isEnabled]){
-                [[WXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:response];
-            }
-        }
-        
-    }];
-}
-
-- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
-{
-    // Just to be safe since we're doing this async
-    data = [data copy];
-    [self performBlock:^{
-        [self addAccumulatedData:data forConnection:connection];
-
-        if ([self accumulatedDataForConnection:connection] == nil) return;
-        
-        NSNumber *length = [NSNumber numberWithInteger:data.length];
-        NSString *requestID = [self requestIDForConnection:connection];
-        
-        [self.domain dataReceivedWithRequestId:requestID
-                                     timestamp:[NSDate WX_timestamp]
-                                    dataLength:length
-                             encodedDataLength:length];
-        
-        if([WXDebugger isEnabled]){
-            [[WXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:[data length]];
-        }
-    }];
-}
-
-- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
-{
-    [self performBlock:^{
-        NSURLResponse *response = [self responseForConnection:connection];
-        NSString *requestID = [self requestIDForConnection:connection];
-
-        NSData *accumulatedData = [self accumulatedDataForConnection:connection];
-
-        [self setResponse:accumulatedData
-             forRequestID:requestID
-                 response:response
-                  request:[self requestForConnection:connection]];
-        
-        [self.domain loadingFinishedWithRequestId:requestID
-                                        timestamp:[NSDate WX_timestamp]];
-        
-        [self connectionFinished:connection];
-        if([WXDebugger isEnabled]){
-            [[WXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:accumulatedData];
-        }
-    }];
-}
-
-- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
-{
-    [self performBlock:^{
-        [self.domain loadingFailedWithRequestId:[self requestIDForConnection:connection]
-                                      timestamp:[NSDate WX_timestamp]
-                                      errorText:[error localizedDescription]
-                                       canceled:[NSNumber numberWithBool:NO]];
-        
-        [self connectionFinished:connection];
-        if([WXDebugger isEnabled]){
-            NSString *requestID = [self requestIDForConnection:connection];
-            [[WXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:error];
-        }
-    }];
-}
-@end
-
-
-@implementation WXNetworkDomainController (NSURLSessionTaskHelpers)
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request
-{
-    [self performBlock:^{
-        NSMutableURLRequest *newRequest = [request mutableCopy];
-        [session.configuration.HTTPAdditionalHeaders enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-            if (![newRequest valueForHTTPHeaderField:key]) {
-                [newRequest setValue:obj forHTTPHeaderField:key];
-            }
-        }];
-
-        [self setRequest:newRequest forTask:task];
-        WXNetworkRequest *networkRequest = [WXNetworkRequest networkRequestWithURLRequest:request];
-        WXNetworkResponse *networkRedirectResponse = response ? [[WXNetworkResponse alloc] initWithURLResponse:response request:request] : nil;
-        
-        
-        NSDate *startDate = nil;
-        if ([task respondsToSelector:@selector(startTime)]) {
-            startDate = [NSDate dateWithTimeIntervalSinceReferenceDate:[task startTime]];
-        } else {
-            static dispatch_once_t onceToken;
-            dispatch_once(&onceToken, ^{
-                NSLog(@"PonyDebugger Warning: Some requests' timestamps may be inaccurate. See Known Issues in the README for more information.");
-            });
-            
-            startDate = [NSDate date];
-        }
-        
-        [self.domain requestWillBeSentWithRequestId:[self requestIDForTask:task]
-                                            frameId:@"3888.3"
-                                           loaderId:@"11111"
-                                        documentURL:[request.URL absoluteString]
-                                            request:networkRequest
-                                          timestamp:@(startDate.timeIntervalSince1970)
-                                          initiator:nil
-                                   redirectResponse:networkRedirectResponse];
-        if([WXDebugger isEnabled]){
-            [[WXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:[self requestIDForTask:task] request:request redirectResponse:response];
-        }
-    }];
-}
-
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response;
-{
-    if ([response respondsToSelector:@selector(copyWithZone:)]) {
-
-        // willSendRequest does not exist in NSURLSession. Here's a workaround.
-        NSURLRequest *request = [self requestForTask:dataTask];
-        if (!request && [dataTask respondsToSelector:@selector(currentRequest)]) {
-
-            /// We need to set headers from the session configuration
-            NSMutableURLRequest *request = [dataTask.currentRequest mutableCopy];
-            
-            /// FOr some reason, the currentRequest doesn't always keep the HTTPBody around.
-            if (request.HTTPBody == nil && dataTask.originalRequest.HTTPBody) {
-                request.HTTPBody = dataTask.originalRequest.HTTPBody;
-            }
-            
-            [session.configuration.HTTPAdditionalHeaders enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-                if (![request valueForHTTPHeaderField:key]) {
-                    [request setValue:obj forHTTPHeaderField:key];
-                }
-            }];
-
-            [self setRequest:request forTask:dataTask];
-
-            NSDate *startDate = nil;
-            if ([dataTask respondsToSelector:@selector(startTime)]) {
-                startDate = [NSDate dateWithTimeIntervalSinceReferenceDate:[dataTask startTime]];
-            } else {
-                static dispatch_once_t onceToken;
-                dispatch_once(&onceToken, ^{
-                    NSLog(@"PonyDebugger Warning: Some requests' timestamps may be inaccurate. See Known Issues in the README for more information.");
-                });
-                
-                startDate = [NSDate date];
-            }
-            
-            WXNetworkRequest *networkRequest = [WXNetworkRequest networkRequestWithURLRequest:request];
-            [self.domain requestWillBeSentWithRequestId:[self requestIDForTask:dataTask]
-                                                frameId:@"3888.3"
-                                               loaderId:@"11111"
-                                            documentURL:[request.URL absoluteString]
-                                                request:networkRequest
-                                              timestamp:@(startDate.timeIntervalSince1970)
-                                              initiator:nil
-                                       redirectResponse:nil];
-        }
-
-        [self setResponse:response forTask:dataTask];
-
-        NSMutableData *dataAccumulator = nil;
-        if (response.expectedContentLength < 0) {
-            dataAccumulator = [[NSMutableData alloc] init];
-        } else {
-            dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)response.expectedContentLength];
-        }
-
-        [self setAccumulatedData:dataAccumulator forTask:dataTask];
-
-        NSString *requestID = [self requestIDForTask:dataTask];
-        WXNetworkResponse *networkResponse = [WXNetworkResponse networkResponseWithURLResponse:response request:[self requestForTask:dataTask]];
-
-        [self.domain responseReceivedWithRequestId:requestID
-                                           frameId:@"3888.3"
-                                          loaderId:@"11111"
-                                         timestamp:[NSDate WX_timestamp]
-                                              type:response.WX_responseType
-                                          response:networkResponse];
-        if([WXDebugger isEnabled]){
-            NSString *requestMechanism = [NSString stringWithFormat:@"NSURLSessionDataTask (delegate: %@)", NSStringFromSelector(_cmd)];
-            [[WXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism forRequestID:requestID];
-            
-            [[WXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:response];
-        }
-    }
-}
-
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
-{
-    // Just to be safe since we're doing this async
-    data = [data copy];
-    [self performBlock:^{
-        [self addAccumulatedData:data forTask:dataTask];
-
-        if ([self accumulatedDataForTask:dataTask] == nil) return;
-
-        NSNumber *length = [NSNumber numberWithInteger:data.length];
-        NSString *requestID = [self requestIDForTask:dataTask];
-
-        [self.domain dataReceivedWithRequestId:requestID
-                                     timestamp:[NSDate WX_timestamp]
-                                    dataLength:length
-                             encodedDataLength:length];
-        if([WXDebugger isEnabled]){
-            [[WXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:data.length];
-        }
-    }];
-}
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error;
-{
-    [self performBlock:^{
-        NSURLResponse *response = [self responseForTask:task];
-        NSString *requestID = [self requestIDForTask:task];
-
-        NSData *accumulatedData = [self accumulatedDataForTask:task];
-
-        if (error) {
-            [self.domain loadingFailedWithRequestId:[self requestIDForTask:task]
-                                          timestamp:[NSDate WX_timestamp]
-                                          errorText:[error localizedDescription]
-                                           canceled:[NSNumber numberWithBool:NO]];
-        } else {
-            [self setResponse:accumulatedData
-                 forRequestID:requestID
-                     response:response
-                      request:[self requestForTask:task]];
-        }
-        
-//        [self.domain loadingFinishedWithRequestId:requestID timestamp:[NSDate WX_timestamp]];
-        [self taskFinished:task];
-        
-        if([WXDebugger isEnabled]){
-            if (error) {
-                [[WXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:error];
-            } else {
-                [[WXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:accumulatedData];
-            }
-        }
-    }];
-}
-
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics
-{
-    NSLog(@"injectDidFinishCollectingMetrics excute");
-    __weak typeof(self) weakSelf = self;
-    [self performBlock:^{
-        if(metrics && metrics.transactionMetrics && [metrics.transactionMetrics count]>0){
-            for (NSURLSessionTaskTransactionMetrics *transactionMetrics in metrics.transactionMetrics) {
-                [weakSelf parseMetrics:task transactionMetrics:transactionMetrics];
-            }
-        }
-//        [self.domain loadingFinishedWithRequestId:[self requestStateForMetricsTask:task].requestID timestamp:[NSDate WX_timestamp]];
-        
-    }];
-}
-
--(void)parseMetrics:(NSURLSessionTask *)task transactionMetrics:(NSURLSessionTaskTransactionMetrics *)transactionMetrics
-{
-    NSString *requestID = [self requestStateForMetricsTask:task].requestID;
-    NSURLRequest *request = [self requestForTask:task];
-    WXNetworkResponse *networkResponse = [WXNetworkResponse networkResponseWithURLResponse:transactionMetrics.response request:request];
-    
-    WXNetworkResourceTiming *timeline = [[WXNetworkResourceTiming alloc] init];
-    timeline.requestTime = [NSNumber numberWithDouble:transactionMetrics.requestStartDate.timeIntervalSince1970];//[NSDate WX_timestamp];
-    timeline.proxyStart = [NSNumber numberWithInt:0];
-    timeline.proxyEnd = [NSNumber numberWithInt:5];
-    timeline.dnsStart = [NSNumber numberWithInt:10];
-    timeline.dnsEnd = [NSNumber numberWithInt:20];
-    timeline.connectStart =  [NSNumber numberWithDouble:transactionMetrics.connectStartDate.timeIntervalSince1970];
-    timeline.connectEnd =  [NSNumber numberWithDouble:transactionMetrics.connectEndDate.timeIntervalSince1970];
-    timeline.sslStart = [NSNumber numberWithDouble:transactionMetrics.secureConnectionStartDate.timeIntervalSince1970];
-    timeline.sslEnd = [NSNumber numberWithDouble:transactionMetrics.secureConnectionEndDate.timeIntervalSince1970];
-    timeline.sendStart = [NSNumber numberWithDouble:transactionMetrics.requestStartDate.timeIntervalSince1970];
-    timeline.sendEnd =  [NSNumber numberWithDouble:transactionMetrics.requestEndDate.timeIntervalSince1970];
-    timeline.receiveHeadersEnd = [NSNumber numberWithDouble:transactionMetrics.responseEndDate.timeIntervalSince1970];
-    networkResponse.timing = timeline;
-    
-    [self.domain responseReceivedWithRequestId:requestID
-                                       frameId:@"3888.3"
-                                      loaderId:@"11111"
-                                     timestamp:[NSDate WX_timestamp]
-                                          type:transactionMetrics.response.WX_responseType
-                                      response:networkResponse];
-}
-@end
-
-
-@implementation WXNetworkRequest (WXNetworkHelpers)
-
-- (id)initWithURLRequest:(NSURLRequest *)request
-{
-    self = [super init];
-    if (!self) {
-        return nil;
-    }
-    
-    self.url = [request.URL absoluteString];
-    self.method = request.HTTPMethod;
-    self.headers = request.allHTTPHeaderFields;
-    
-    
-    NSData *body = request.HTTPBody;
-    
-    // pretty print and redact sensitive fields
-    id<WXPrettyStringPrinting> prettyStringPrinter = [WXNetworkDomainController prettyStringPrinterForRequest:request];
-    if (prettyStringPrinter) {
-        self.postData = [prettyStringPrinter prettyStringForData:body forRequest:request];
-    } else {
-        // If the data isn't UTF-8 it will just be nil;
-        self.postData = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
-    }
-
-    return self;
-}
-
-+ (WXNetworkRequest *)networkRequestWithURLRequest:(NSURLRequest *)request;
-{
-    return [[[self class] alloc] initWithURLRequest:request];
-}
-
-@end
-
-
-@implementation WXNetworkResponse (WXNetworkHelpers)
-
-- (id)initWithURLResponse:(NSURLResponse *)response request:(NSURLRequest *)request
-{
-    self = [super init];
-    if (!self) {
-        return nil;
-    }
-    
-    self.url = [response.URL absoluteString];
-
-    // Set statusText if this was a HTTP Response
-    self.statusText = @"";
-
-    self.mimeType = response.MIMEType;
-    self.requestHeaders = request.allHTTPHeaderFields;
-    
-    if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
-        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
-        self.status = [NSNumber numberWithInteger:httpResponse.statusCode];
-        self.statusText = [NSHTTPURLResponse localizedStringForStatusCode:httpResponse.statusCode];
-        self.headers = httpResponse.allHeaderFields;
-    }
-
-    return self;
-}
-
-+ (WXNetworkResponse *)networkResponseWithURLResponse:(NSURLResponse *)response request:(NSURLRequest *)request;
-{
-    return [[[self class] alloc] initWithURLResponse:response request:request];
-}
-
-@end
-
-
-@implementation NSURLResponse (WXNetworkHelpers)
-
-- (NSString *)WX_responseType;
-{
-    NSString *MIMEType = self.MIMEType;
-    NSString *contentType = [MIMEType lowercaseString];
-    NSString *type = @"Other";
-    
-    if ([contentType rangeOfString:@"image"].length != 0) {
-        type = @"Image";
-    } else if ([contentType rangeOfString:@"json"].length != 0) {
-        type = @"XHR";
-    } else if ([contentType rangeOfString:@"javascript"].length != 0) {
-        type = @"Script";
-    } else if ([contentType rangeOfString:@"css"].length != 0) {
-        type = @"Stylesheet";
-    }
-
-    return type;
-}
-
-@end
-
-
-@implementation _WXRequestState
-
-@synthesize request = _request;
-@synthesize response = _response;
-@synthesize requestID = _requestID;
-@synthesize dataAccumulator = _dataAccumulator;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXObject.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXObject.h
deleted file mode 100644
index 899f3c1..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXObject.h
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-//  WXObject.h
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 11/6/11.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <Foundation/Foundation.h>
-#import "WXDefinitions.h"
-
-
-@interface NSObject (WX_JSONObject)
-
-- (id)WX_JSONObjectCopy;
-- (id)WX_JSONObject;
-
-@end
-
-
-/**
- * Subclasses must implement the copying and mutable copying protocols
- */
-@interface WXObject : NSObject <NSCopying>
-
-@property (nonatomic, copy, readonly) NSDictionary *store;
-
-+ (NSDictionary *)keysToEncode;
-
-- (id)WX_JSONObject;
-
-- (BOOL)validate:(NSError **)error;
-- (id)valueForKey:(NSString *)key;
-- (void)setValue:(id)value forKey:(NSString *)key;
-
-@end
-
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXObject.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXObject.m
deleted file mode 100644
index c28e945..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXObject.m
+++ /dev/null
@@ -1,135 +0,0 @@
-//
-//  WXObject.m
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 11/6/11.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import <objc/runtime.h>
-
-#import "WXObject.h"
-#import "WXDefinitions.h"
-
-
-@implementation NSObject (WX_JSONObject)
-
-- (id)WX_JSONObject;
-{
-    return self;
-}
-
-- (id)WX_JSONObjectCopy;
-{
-    return [[self WX_JSONObject] copy];
-}
-
-@end
-
-
-@implementation WXObject
-
-@synthesize store = _store;
-
-+ (NSDictionary *)keysToEncode;
-{
-    return [[NSDictionary alloc] init];
-}
-
-- (id)init;
-{
-    self = [super init];
-    if (!self) {
-        return nil;
-    }
-    
-    _store = [[NSMutableDictionary alloc] init];
-
-    return self;
-}
-
-- (id)initWithStore:(NSDictionary *)store;
-{
-    self = [super init];
-    if (!self) {
-        return nil;
-    }
-
-    assert(store);
-    _store = [store mutableCopy];
-
-    return self;
-}
-
-- (id)copyWithZone:(NSZone *)zone;
-{
-    return [[[self class] alloc] initWithStore:_store];
-}
-
-#pragma mark - NSObject
-
-- (BOOL)validate:(NSError **)error;
-{
-    return YES;
-}
-
-- (id)valueForKey:(NSString *)key;
-{
-	return [_store valueForKey:[[[self class] keysToEncode] objectForKey:key]];
-}
-
-- (void)setValue:(id)value forKey:(NSString *)key;
-{
-    [_store setValue:value forKey:[[[self class] keysToEncode] objectForKey:key]];
-}
-
-+ (BOOL)resolveInstanceMethod:(SEL)sel;
-{
-    NSString *selName = NSStringFromSelector(sel);
-    if ([selName hasPrefix:@"set"] && selName.length > 4) {
-        NSString *propertyName = [NSString stringWithFormat:@"%@%@", [[selName substringWithRange:NSMakeRange(3, 1)] lowercaseString],
-                                  [selName substringWithRange:NSMakeRange(4, selName.length - 5)]];
-                                 
-#ifdef __IPHONE_6_0 
-        class_addMethod([self class], sel, imp_implementationWithBlock((id)(^(id slf, id value) {
-#else
-        class_addMethod([self class], sel, imp_implementationWithBlock((__bridge void *)(^(id slf, id value) {
-#endif
-
-            [slf setValue:value forKey:propertyName];
-            
-        })), "v@:@");
-        
-        return YES;
-    } else if (![selName hasPrefix:@"_"] && [selName rangeOfString:@":"].length == 0) {
-    
-#ifdef __IPHONE_6_0
-        class_addMethod([self class], sel, imp_implementationWithBlock((id)^id(id slf) {
-#else
-        class_addMethod([self class], sel, imp_implementationWithBlock((__bridge void *)^id(id slf) {
-#endif
-
-            id val = [slf valueForKey:selName];
-            return val;
-        }), "@@:");
-        
-        return YES;
-    }
-    
-    return [super resolveInstanceMethod:sel];
-}
-
-- (id)WX_JSONObject;
-{
-    NSMutableDictionary *ret = [[NSMutableDictionary alloc] initWithCapacity:_store.count];
-    [_store enumerateKeysAndObjectsWithOptions:0 usingBlock:^(id key, id obj, BOOL *stop) {
-        [ret setObject:[obj WX_JSONObject] forKey:key];
-    }];
-    
-    return ret;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.h
deleted file mode 100644
index bc92c90..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.h
+++ /dev/null
@@ -1,22 +0,0 @@
-//
-//  WXPageDomainController.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/6/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXPonyDebugger.h"
-#import "WXPageDomain.h"
-
-
-@interface WXPageDomainController : WXDomainController
-
-+ (WXPageDomainController *)defaultInstance;
-
-@property (nonatomic, strong) WXPageDomain *domain;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.m
deleted file mode 100644
index e8f2431..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPageDomainController.m
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-//  WXPageDomainController.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/6/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXPageDomainController.h"
-#import "WXRuntimeDomainController.h"
-#import "WXPageDomain.h"
-#import "WXPageTypes.h"
-
-
-@interface WXPageDomainController () <WXPageCommandDelegate>
-@end
-
-
-@implementation WXPageDomainController
-
-@dynamic domain;
-
-#pragma mark - Statics
-
-+ (WXPageDomainController *)defaultInstance;
-{
-    static WXPageDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXPageDomainController alloc] init];
-    });
-    
-    return defaultInstance;
-}
-
-+ (Class)domainClass;
-{
-    return [WXPageDomain class];
-}
-
-
-#pragma mark - WXPageCommandDelegate
-- (void)domain:(WXPageDomain *)domain enableWithCallback:(void (^)(id error))callback {
-    callback(nil);
-//    [self.domain workerRegistrationUpdated];
-//    [self.domain workerVersionUpdated];
-}
-
-- (void)domain:(WXPageDomain *)domain canOverrideDeviceMetricsWithCallback:(void (^)(NSNumber *result, id error))callback {
-    callback([NSNumber numberWithBool:YES],nil);
-}
-
-- (void)domain:(WXPageDomain *)domain canOverrideGeolocationWithCallback:(void (^)(NSNumber *result, id error))callback {
-    callback([NSNumber numberWithBool:YES],nil);
-}
-
-- (void)domain:(WXPageDomain *)domain canOverrideDeviceOrientationWithCallback:(void (^)(NSNumber *result, id error))callback {
-    callback([NSNumber numberWithBool:YES],nil);
-}
-
-- (void)domain:(WXPageDomain *)domain getResourceTreeWithCallback:(void (^)(WXPageFrameResourceTree *, id))callback;
-{
-    NSString *localPath = [NSString stringWithFormat:@"%@/bundlejs/index.js",[NSBundle mainBundle].bundlePath];
-    
-    WXPageFrame *frame = [[WXPageFrame alloc] init];
-    frame.identifier = @"3888.3";
-    frame.name = @"Root";
-    frame.securityOrigin = [NSBundle mainBundle].bundlePath;//[[NSBundle mainBundle] bundleIdentifier];
-    frame.url = localPath;//localPath;
-    frame.loaderId = @"11111";
-    frame.mimeType = @"application/javascript";
-    
-    WXFrameResource *resource = [[WXFrameResource alloc] init];
-    resource.url = @"index.js";
-    resource.mimeType = @"application/javascript";
-    resource.type = @"Script";
-    
-    WXPageFrameResourceTree *resourceTree = [[WXPageFrameResourceTree alloc] init];
-    resourceTree.frame = frame;
-    resourceTree.resources = @[resource];
-    
-    callback(resourceTree, nil);
-}
-
-- (void)domain:(WXPageDomain *)domain startScreencastWithcallback:(void (^)(id error))callback
-{
-    callback(nil);
-}
-
-- (void)domain:(WXPageDomain *)domain stopScreencastWithcallback:(void (^)(id error))callback
-{
-    callback(nil);
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPonyDebugger.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPonyDebugger.h
deleted file mode 100644
index 7e513a4..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPonyDebugger.h
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-//  PonyDebugger.h
-//  PonyDebugger
-//
-//  Created by Mike Lewis on 2/27/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXDefinitions.h"
-#import "WXDebugger.h"
-#import "WXNetworkDomainController.h"
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.h
deleted file mode 100644
index 13e6d42..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-//  WXPrettyStringPrinter.h
-//  PonyDebugger
-//
-//  Created by Dave Apgar on 2/28/13.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-
-#import <Foundation/Foundation.h>
-
-@protocol WXPrettyStringPrinting <NSObject>
-
-- (BOOL)canPrettyStringPrintRequest:(NSURLRequest *)request;
-- (BOOL)canPrettyStringPrintResponse:(NSURLResponse *)response withRequest:(NSURLRequest *)request;
-
-- (NSString *)prettyStringForData:(NSData *)data forRequest:(NSURLRequest *)request;
-- (NSString *)prettyStringForData:(NSData *)data forResponse:(NSURLResponse *)response request:(NSURLRequest *)request;
-
-@end
-
-@interface WXTextPrettyStringPrinter : NSObject <WXPrettyStringPrinting>
-
-@end
-
-@interface WXJSONPrettyStringPrinter : NSObject <WXPrettyStringPrinting>
-
-@property (nonatomic, strong, readonly) NSSet *redactedFields;
-
-- (id)initWithRedactedFields:(NSArray *)redactedFields;
-- (void)addRedactedField:(NSString *)field;
-
-@end
\ No newline at end of file
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.m
deleted file mode 100644
index 8c6b55d..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXPrettyStringPrinter.m
+++ /dev/null
@@ -1,146 +0,0 @@
-//
-//  WXPrettyStringPrinter.m
-//  PonyDebugger
-//
-//  Created by Dave Apgar on 2/28/13.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXPrettyStringPrinter.h"
-
-
-@implementation WXTextPrettyStringPrinter
-
-#pragma mark - WXPrettyStringPrinting
-
-// Handle any non-binary, but don't make it pretty
-- (BOOL)canPrettyStringPrintContentType:(NSString *)contentType;
-{
-    return
-    ([contentType rangeOfString:@"json"].location != NSNotFound)
-    || ([contentType rangeOfString:@"text"].location != NSNotFound)
-    || ([contentType rangeOfString:@"xml"].location != NSNotFound)
-    || ([contentType rangeOfString:@"javascript"].location != NSNotFound);
-}
-
-- (BOOL)canPrettyStringPrintRequest:(NSURLRequest *)request;
-{
-    NSString *contentType = [request valueForHTTPHeaderField:@"Content-Type"];
-    return [self canPrettyStringPrintContentType:contentType];
-}
-
-- (BOOL)canPrettyStringPrintResponse:(NSURLResponse *)response withRequest:(NSURLRequest *)request;
-{
-    return [self canPrettyStringPrintContentType:response.MIMEType];
-}
-
-- (NSString*)prettyStringForData:(NSData *)data;
-{
-    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-}
-
-- (NSString *)prettyStringForData:(NSData *)data forRequest:(NSURLRequest *)request;
-{
-    return [self prettyStringForData:data];
-}
-
-- (NSString *)prettyStringForData:(NSData *)data forResponse:(NSURLResponse *)response request:(NSURLRequest *)request;
-{
-    return [self prettyStringForData:data];
-}
-
-@end
-
-
-@implementation WXJSONPrettyStringPrinter {
-    NSMutableSet *_redactedFields;
-}
-
-@synthesize redactedFields = _redactedFields;
-
-#pragma mark - Initialization
-
-- (id)init;
-{
-    self = [super init];
-    if (self) {
-        _redactedFields = [[NSMutableSet alloc] initWithObjects:@"password", nil];
-    }
-    return self;
-}
-
-- (id)initWithRedactedFields:(NSArray *)redactedFields;
-{
-    self = [self init];
-    for (NSString *field in redactedFields) {
-        [_redactedFields addObject:field];
-    }
-    return self;
-}
-
-#pragma mark - WXPrettyStringPrinting
-
-- (BOOL)canPrettyStringPrintContentType:(NSString *)contentType;
-{
-    if ([contentType rangeOfString:@"json"].location != NSNotFound) {
-        return YES;
-    }
-    return NO;
-}
-
-- (BOOL)canPrettyStringPrintRequest:(NSURLRequest *)request;
-{
-    NSString *mimeType = [request valueForHTTPHeaderField:@"Content-Type"];
-    return [self canPrettyStringPrintContentType:mimeType];
-}
-
-- (BOOL)canPrettyStringPrintResponse:(NSURLResponse *)response withRequest:(NSURLRequest *)request;
-{
-    return [self canPrettyStringPrintContentType:response.MIMEType];
-}
-
-- (NSString *)prettyStringForData:(NSData *)data;
-{
-    if (!data) {
-        return nil;
-    }
-
-    NSData *prettyData = data;
-    NSMutableDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
-
-    if (jsonObject) {
-        if ([jsonObject isKindOfClass:[NSDictionary class]]) {
-            jsonObject = [jsonObject mutableCopy];
-            for (NSString *redactedField in _redactedFields) {
-                if ([jsonObject objectForKey:redactedField]) {
-                    [jsonObject setObject:@"REDACTED" forKey:redactedField];
-                }
-            }
-        }
-        prettyData = [NSJSONSerialization dataWithJSONObject:jsonObject options:NSJSONWritingPrettyPrinted error:NULL];
-    }
-
-    return [[NSString alloc] initWithData:prettyData encoding:NSUTF8StringEncoding];
-}
-
-- (NSString *)prettyStringForData:(NSData *)data forRequest:(NSURLRequest *)request;
-{
-    return [self prettyStringForData:data];
-}
-
-- (NSString *)prettyStringForData:(NSData *)data forResponse:(NSURLResponse *)response request:(NSURLRequest *)request;
-{
-    return [self prettyStringForData:data];
-}
-
-#pragma mark - Accessors/Mutators
-
-- (void)addRedactedField:(NSString *)field;
-{
-    [_redactedFields addObject:field];
-}
-
-@end
\ No newline at end of file
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.h
deleted file mode 100644
index 522881b..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.h
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-//  WXRuntimeDomainController.h
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/7/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXPonyDebugger.h"
-#import "WXRuntimeDomain.h"
-
-
-@interface WXRuntimeDomainController : WXDomainController
-
-+ (WXRuntimeDomainController *)defaultInstance;
-
-@property (nonatomic, strong) WXRuntimeDomain *domain;
-
-- (NSString *)registerAndGetKeyForObject:(id)object;
-- (void)clearObjectReferencesByKey:(NSArray *)objectKeys;
-- (void)clearAllObjectReferences;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.m
deleted file mode 100644
index 7c47dd4..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXRuntimeDomainController.m
+++ /dev/null
@@ -1,177 +0,0 @@
-//
-//  WXRuntimeDomainController.m
-//  PonyDebugger
-//
-//  Created by Wen-Hao Lue on 8/7/12.
-//
-//  Licensed to Square, Inc. under one or more contributor license agreements.
-//  See the LICENSE file distributed with this work for the terms under
-//  which Square, Inc. licenses this file to you.
-//
-
-#import "WXRuntimeDomainController.h"
-#import "WXRuntimeTypes.h"
-
-#import "NSObject+WXRuntimePropertyDescriptor.h"
-#import "NSManagedObject+WXRuntimePropertyDescriptor.h"
-#import "NSArray+WXRuntimePropertyDescriptor.h"
-#import "NSSet+WXRuntimePropertyDescriptor.h"
-#import "NSOrderedSet+WXRuntimePropertyDescriptor.h"
-#import "NSDictionary+WXRuntimePropertyDescriptor.h"
-
-
-@interface WXRuntimeDomainController () <WXRuntimeCommandDelegate>
-
-// Dictionary where key is a unique objectId, and value is a reference of the value.
-@property (nonatomic, strong) NSMutableDictionary *objectReferences;
-
-// Values are arrays of object references.
-@property (nonatomic, strong) NSMutableDictionary *objectGroups;
-
-+ (NSString *)_generateUUID;
-
-- (void)_releaseObjectID:(NSString *)objectID;
-- (void)_releaseObjectGroup:(NSString *)objectGroup;
-
-@end
-
-
-@implementation WXRuntimeDomainController
-
-@dynamic domain;
-
-@synthesize objectReferences = _objectReferences;
-@synthesize objectGroups = _objectGroups;
-
-#pragma mark - Statics
-
-+ (WXRuntimeDomainController *)defaultInstance;
-{
-    static WXRuntimeDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXRuntimeDomainController alloc] init];
-    });
-    
-    return defaultInstance;
-}
-
-+ (Class)domainClass;
-{
-    return [WXRuntimeDomain class];
-}
-
-+ (NSString *)_generateUUID;
-{
-	CFUUIDRef UUIDRef = CFUUIDCreate(nil);
-    NSString *newGuid = (__bridge_transfer NSString *) CFUUIDCreateString(nil, UUIDRef);
-    CFRelease(UUIDRef);
-    return newGuid;
-}
-
-#pragma mark - Initialization
-
-- (id)init;
-{
-    if (!(self = [super init])) {
-        return nil;
-    }
-    
-    self.objectReferences = [[NSMutableDictionary alloc] init];
-    self.objectGroups = [[NSMutableDictionary alloc] init];
-    
-    return self;
-}
-
-- (void)dealloc;
-{
-    self.objectReferences = nil;
-    self.objectGroups = nil;
-}
-
-#pragma mark - WXRuntimeCommandDelegate
-
-- (void)domain:(WXRuntimeDomain *)domain getPropertiesWithObjectId:(NSString *)objectId ownProperties:(NSNumber *)ownProperties callback:(void (^)(NSArray *result, id error))callback;
-{
-    NSObject *object = [self.objectReferences objectForKey:objectId];
-    if (!object) {
-        NSString *errorMessage = [NSString stringWithFormat:@"Object with objectID '%@' does not exist.", objectId];
-        NSError *error = [NSError errorWithDomain:WXDebuggerErrorDomain code:100 userInfo:[NSDictionary dictionaryWithObject:errorMessage forKey:NSLocalizedDescriptionKey]];
-        
-        callback(nil, error);
-        return;
-    }
-    
-    NSArray *properties = [object WX_propertyDescriptors];
-    callback(properties, nil);
-}
-
-- (void)domain:(WXRuntimeDomain *)domain releaseObjectWithObjectId:(NSString *)objectId callback:(void (^)(id error))callback;
-{
-    callback(nil);
-    
-    [self _releaseObjectID:objectId];
-}
-
-- (void)domain:(WXRuntimeDomain *)domain releaseObjectGroupWithObjectGroup:(NSString *)objectGroup callback:(void (^)(id error))callback;
-{
-    callback(nil);
-    
-    [self _releaseObjectGroup:objectGroup];
-}
-
-#pragma mark - Public Methods
-
-/**
- * Registers and returns a string associated with the object to retain.
- */
-- (NSString *)registerAndGetKeyForObject:(id)object;
-{
-    NSString *key = [WXRuntimeDomainController _generateUUID];
-    
-    [self.objectReferences setObject:object forKey:key];
-    
-    return key;
-}
-
-/**
- * Clears object references given the string returned by registerAndGetKeyForObject:
- */
-- (void)clearObjectReferencesByKey:(NSArray *)objectKeys;
-{
-    [self.objectReferences removeObjectsForKeys:objectKeys];
-}
-
-/**
- * Clears all object references.
- */
-- (void)clearAllObjectReferences;
-{
-    [self.objectReferences removeAllObjects];
-    [self.objectGroups removeAllObjects];
-}
-
-#pragma mark - Private Methods
-
-- (void)_releaseObjectID:(NSString *)objectID;
-{
-    if (![self.objectReferences objectForKey:objectID]) {
-        return;
-    }
-    
-    [self.objectReferences removeObjectForKey:objectID];
-}
-
-- (void)_releaseObjectGroup:(NSString *)objectGroup;
-{
-    NSArray *objectIDs = [self.objectGroups objectForKey:objectGroup];
-    if (objectIDs) {
-        for (NSString *objectID in objectIDs) {
-            [self _releaseObjectID:objectID];
-        }
-        
-        [self.objectGroups removeObjectForKey:objectGroup];
-    }
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.h
deleted file mode 100644
index fdd7000..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXPonyDebugger.h"
-#import "WXDebuggerDomain.h"
-#import "WXDynamicDebuggerDomain.h"
-
-@interface WXSourceDebuggerDomainController : WXDomainController <WXDebuggerCommandDelegate>
-
-@property (nonatomic, strong) WXDebuggerDomain *domain;
-
-+ (WXSourceDebuggerDomainController *)defaultInstance;
-
-- (void)remoteDebuggerControllerTest;
-
-- (void)getScriptSourceTreeWithId:(NSString *)scriptId
-                              url:(NSString *)url
-                  isContentScript:(NSNumber *)isContentScript
-                     sourceMapURL:(NSString *)sourceMapURL;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.m
deleted file mode 100644
index 75894fb..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/PonyDebugger/WXSourceDebuggerDomainController.m
+++ /dev/null
@@ -1,225 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXSourceDebuggerDomainController.h"
-
-@implementation WXSourceDebuggerDomainController
-@dynamic domain;
-
-+ (WXSourceDebuggerDomainController *)defaultInstance {
-    static WXSourceDebuggerDomainController *defaultInstance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultInstance = [[WXSourceDebuggerDomainController alloc] init];
-    });
-    return defaultInstance;
-}
-
-- (void)remoteDebuggerControllerTest {
-    [self.domain globalObjectCleared];
-}
-
-- (void)getScriptSourceTreeWithId:(NSString *)scriptId
-                              url:(NSString *)url
-                  isContentScript:(NSNumber *)isContentScript
-                     sourceMapURL:(NSString *)sourceMapURL {
-    [self.domain scriptParsedWithScriptId:scriptId url:url startLine:[NSNumber numberWithInt:0] startColumn:[NSNumber numberWithInt:0] endLine:[NSNumber numberWithInt:0] endColumn:[NSNumber numberWithInt:0] isContentScript:isContentScript sourceMapURL:sourceMapURL];
-}
-
-+ (Class)domainClass {
-    return [WXDebuggerDomain class];
-}
-
-#pragma mark - WXDebuggerCommandDelegate
-- (void)domain:(WXDebuggerDomain *)domain causesRecompilationWithCallback:(void (^)(NSNumber *result, id error))callback {
-    callback([NSNumber numberWithBool:YES],nil);
-}
-
-// Tells whether debugger supports separate script compilation and execution.
-// Callback Param result: True if debugger supports separate script compilation and execution.
-- (void)domain:(WXDebuggerDomain *)domain supportsSeparateScriptCompilationAndExecutionWithCallback:(void (^)(NSNumber *result, id error))callback {
-    callback([NSNumber numberWithBool:YES],nil);
-}
-
-// Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received.
-- (void)domain:(WXDebuggerDomain *)domain enableWithCallback:(void (^)(id error))callback {
-    callback(nil);
-//    [self.domain scriptParsedWithScriptId:@"100"
-//                                      url:@"index.js"
-//                                startLine:[NSNumber numberWithInteger:0]
-//                              startColumn:nil
-//                                  endLine:nil
-//                                endColumn:nil
-//                          isContentScript:[NSNumber numberWithInteger:1]
-//                             sourceMapURL:[[NSURL URLWithString:@"http://30.10.216.186:12580/examples/build/index.js"] absoluteString]];
-}
-
-// Disables debugger for given page.
-- (void)domain:(WXDebuggerDomain *)domain disableWithCallback:(void (^)(id error))callback {
-    
-}
-
-// Activates / deactivates all breakpoints on the page.
-// Param active: New value for breakpoints active state.
-- (void)domain:(WXDebuggerDomain *)domain setBreakpointsActiveWithActive:(NSNumber *)active callback:(void (^)(id error))callback {
-    
-}
-
-// Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in <code>locations</code> property. Further matching script parsing will result in subsequent <code>breakpointResolved</code> events issued. This logical breakpoint will survive page reloads.
-// Param lineNumber: Line number to set breakpoint at.
-// Param url: URL of the resources to set breakpoint on.
-// Param urlRegex: Regex pattern for the URLs of the resources to set breakpoints on. Either <code>url</code> or <code>urlRegex</code> must be specified.
-// Param columnNumber: Offset in the line to set breakpoint at.
-// Param condition: Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
-// Callback Param breakpointId: Id of the created breakpoint for further reference.
-// Callback Param locations: List of the locations this breakpoint resolved into upon addition.
-- (void)domain:(WXDebuggerDomain *)domain setBreakpointByUrlWithLineNumber:(NSNumber *)lineNumber url:(NSString *)url urlRegex:(NSString *)urlRegex columnNumber:(NSNumber *)columnNumber condition:(NSString *)condition callback:(void (^)(NSString *breakpointId, NSArray *locations, id error))callback {
-    
-}
-
-// Sets JavaScript breakpoint at a given location.
-// Param location: Location to set breakpoint in.
-// Param condition: Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
-// Callback Param breakpointId: Id of the created breakpoint for further reference.
-// Callback Param actualLocation: Location this breakpoint resolved into.
-- (void)domain:(WXDebuggerDomain *)domain setBreakpointWithLocation:(WXDebuggerLocation *)location condition:(NSString *)condition callback:(void (^)(NSString *breakpointId, WXDebuggerLocation *actualLocation, id error))callback {
-    
-}
-
-// Removes JavaScript breakpoint.
-- (void)domain:(WXDebuggerDomain *)domain removeBreakpointWithBreakpointId:(NSString *)breakpointId callback:(void (^)(id error))callback {
-    
-}
-
-// Continues execution until specific location is reached.
-// Param location: Location to continue to.
-- (void)domain:(WXDebuggerDomain *)domain continueToLocationWithLocation:(WXDebuggerLocation *)location callback:(void (^)(id error))callback {
-    
-}
-
-// Steps over the statement.
-- (void)domain:(WXDebuggerDomain *)domain stepOverWithCallback:(void (^)(id error))callback {
-    
-}
-
-// Steps into the function call.
-- (void)domain:(WXDebuggerDomain *)domain stepIntoWithCallback:(void (^)(id error))callback {
-    
-}
-
-// Steps out of the function call.
-- (void)domain:(WXDebuggerDomain *)domain stepOutWithCallback:(void (^)(id error))callback {
-    
-}
-
-// Stops on the next JavaScript statement.
-- (void)domain:(WXDebuggerDomain *)domain pauseWithCallback:(void (^)(id error))callback {
-    
-}
-
-// Resumes JavaScript execution.
-- (void)domain:(WXDebuggerDomain *)domain resumeWithCallback:(void (^)(id error))callback {
-    
-}
-
-// Searches for given string in script content.
-// Param scriptId: Id of the script to search in.
-// Param query: String to search for.
-// Param caseSensitive: If true, search is case sensitive.
-// Param isRegex: If true, treats string parameter as regex.
-// Callback Param result: List of search matches.
-- (void)domain:(WXDebuggerDomain *)domain searchInContentWithScriptId:(NSString *)scriptId query:(NSString *)query caseSensitive:(NSNumber *)caseSensitive isRegex:(NSNumber *)isRegex callback:(void (^)(NSArray *result, id error))callback {
-    
-}
-
-// Tells whether <code>setScriptSource</code> is supported.
-// Callback Param result: True if <code>setScriptSource</code> is supported.
-- (void)domain:(WXDebuggerDomain *)domain canSetScriptSourceWithCallback:(void (^)(NSNumber *result, id error))callback {
-    callback([NSNumber numberWithBool:YES],nil);
-}
-
-// Edits JavaScript source live.
-// Param scriptId: Id of the script to edit.
-// Param scriptSource: New content of the script.
-// Param preview:  If true the change will not actually be applied. Preview mode may be used to get result description without actually modifying the code.
-// Callback Param callFrames: New stack trace in case editing has happened while VM was stopped.
-// Callback Param result: VM-specific description of the changes applied.
-- (void)domain:(WXDebuggerDomain *)domain setScriptSourceWithScriptId:(NSString *)scriptId scriptSource:(NSString *)scriptSource preview:(NSNumber *)preview callback:(void (^)(NSArray *callFrames, NSDictionary *result, id error))callback {
-    
-}
-
-// Restarts particular call frame from the beginning.
-// Param callFrameId: Call frame identifier to evaluate on.
-// Callback Param callFrames: New stack trace.
-// Callback Param result: VM-specific description.
-- (void)domain:(WXDebuggerDomain *)domain restartFrameWithCallFrameId:(NSString *)callFrameId callback:(void (^)(NSArray *callFrames, NSDictionary *result, id error))callback {
-    
-}
-
-// Returns source for the script with given id.
-// Param scriptId: Id of the script to get source for.
-// Callback Param scriptSource: Script source.
-- (void)domain:(WXDebuggerDomain *)domain getScriptSourceWithScriptId:(NSString *)scriptId callback:(void (^)(NSString *scriptSource, id error))callback {
-    NSCache *responseCache = [[WXNetworkDomainController defaultInstance] getNetWorkResponseCache];
-    NSDictionary *response = [responseCache objectForKey:scriptId];
-    callback([response objectForKey:@"body"], nil);
-}
-
-// Returns detailed informtation on given function.
-// Param functionId: Id of the function to get location for.
-// Callback Param details: Information about the function.
-- (void)domain:(WXDebuggerDomain *)domain getFunctionDetailsWithFunctionId:(NSString *)functionId callback:(void (^)(WXDebuggerFunctionDetails *details, id error))callback {
-    
-}
-
-// Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is <code>none</code>.
-// Param state: Pause on exceptions mode.
-- (void)domain:(WXDebuggerDomain *)domain setPauseOnExceptionsWithState:(NSString *)state callback:(void (^)(id error))callback {
-    
-}
-
-// Evaluates expression on a given call frame.
-// Param callFrameId: Call frame identifier to evaluate on.
-// Param expression: Expression to evaluate.
-// Param objectGroup: String object group name to put result into (allows rapid releasing resulting object handles using <code>releaseObjectGroup</code>).
-// Param includeCommandLineAPI: Specifies whether command line API should be available to the evaluated expression, defaults to false.
-// Param doNotPauseOnExceptionsAndMuteConsole: Specifies whether evaluation should stop on exceptions and mute console. Overrides setPauseOnException state.
-// Param returnByValue: Whether the result is expected to be a JSON object that should be sent by value.
-// Callback Param result: Object wrapper for the evaluation result.
-// Callback Param wasThrown: True if the result was thrown during the evaluation.
-- (void)domain:(WXDebuggerDomain *)domain evaluateOnCallFrameWithCallFrameId:(NSString *)callFrameId expression:(NSString *)expression objectGroup:(NSString *)objectGroup includeCommandLineAPI:(NSNumber *)includeCommandLineAPI doNotPauseOnExceptionsAndMuteConsole:(NSNumber *)doNotPauseOnExceptionsAndMuteConsole returnByValue:(NSNumber *)returnByValue callback:(void (^)(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error))callback {
-    
-}
-
-// Compiles expression.
-// Param expression: Expression to compile.
-// Param sourceURL: Source url to be set for the script.
-// Callback Param scriptId: Id of the script.
-// Callback Param syntaxErrorMessage: Syntax error message if compilation failed.
-- (void)domain:(WXDebuggerDomain *)domain compileScriptWithExpression:(NSString *)expression sourceURL:(NSString *)sourceURL callback:(void (^)(NSString *scriptId, NSString *syntaxErrorMessage, id error))callback {
-    
-}
-
-// Runs script with given id in a given context.
-// Param scriptId: Id of the script to run.
-// Param contextId: Specifies in which isolated context to perform script run. Each content script lives in an isolated context and this parameter may be used to specify one of those contexts. If the parameter is omitted or 0 the evaluation will be performed in the context of the inspected page.
-// Param objectGroup: Symbolic group name that can be used to release multiple objects.
-// Param doNotPauseOnExceptionsAndMuteConsole: Specifies whether script run should stop on exceptions and mute console. Overrides setPauseOnException state.
-// Callback Param result: Run result.
-// Callback Param wasThrown: True if the result was thrown during the script run.
-- (void)domain:(WXDebuggerDomain *)domain runScriptWithScriptId:(NSString *)scriptId contextId:(NSNumber *)contextId objectGroup:(NSString *)objectGroup doNotPauseOnExceptionsAndMuteConsole:(NSNumber *)doNotPauseOnExceptionsAndMuteConsole callback:(void (^)(WXRuntimeRemoteObject *result, NSNumber *wasThrown, id error))callback {
-    
-}
-
-// Sets overlay message.
-// Param message: Overlay message to display when paused in debugger.
-- (void)domain:(WXDebuggerDomain *)domain setOverlayMessageWithMessage:(NSString *)message callback:(void (^)(id error))callback {
-    
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXHeader/WXDevTool.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXHeader/WXDevTool.h
deleted file mode 100644
index de05bf5..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXHeader/WXDevTool.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXDevTool : NSObject
-
-/**
- *  set debug status
- *  @param isDebug  : YES:open debug model and inspect model;
- *                    default is NO,if isDebug is NO, open inspect only;
- **/
-+ (void)setDebug:(BOOL)isDebug;
-
-
-/**
- *  get debug status
- **/
-+ (BOOL)isDebug;
-
-
-/**
- *  launch weex debug
- *  @param url  : ws://ip:port/debugProxy/native, ip and port is your devtool server address
- *                eg:@"ws://30.30.29.242:8088/debugProxy/native"
- **/
-+ (void)launchDevToolDebugWithUrl:(NSString *)url;
-
-/**
- * @abstract Returns the version of SDK
- *
- **/
-+ (NSString*)WXDevtoolVersion;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXHeader/WXDevTool.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXHeader/WXDevTool.m
deleted file mode 100644
index 013aba1..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXHeader/WXDevTool.m
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import "WXDevTool.h"
-#import "WXDebugger.h"
-#import "WXDevToolType.h"
-#import <WeexSDK/WeexSDK.h>
-
-#define WXDevtool_VERSION @"0.20.0"
-
-@implementation WXDevTool
-
-+ (void)setDebug:(BOOL)isDebug {
-    [WXDevToolType setDebug:isDebug];
-}
-
-+ (BOOL)isDebug {
-    return [WXDevToolType isDebug];
-}
-
-#pragma mark weex devtool
-+ (void)launchDevToolDebugWithUrl:(NSString *)url {
-    WXDebugger *debugger = [[WXDebugger alloc] init];
-    //    [debugger serverStartWithHost:@"localhost" port:9009];
-    // Enable Network debugging, and automatically track network traffic that comes through any classes that implement either NSURLConnectionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate or NSURLSessionDataDelegate methods.
-//    [debugger enableNetworkTrafficDebugging];
-//    [debugger forwardAllNetworkTraffic];
-    // Enable Core Data debugging, and broadcast the main managed object context.
-    //     [debugger enableCoreDataDebugging];
-    //     [debugger addManagedObjectContext:self.managedObjectContext withName:@"PonyDebugger Test App MOC"];
-    
-    // Enable View Hierarchy debugging. This will swizzle UIView methods to monitor changes in the hierarchy
-    // Choose a few UIView key paths to display as attributes of the dom nodes
-    [debugger enableViewHierarchyDebugging];
-    [debugger setDisplayedViewAttributeKeyPaths:@[@"frame", @"hidden", @"alpha", @"opaque", @"accessibilityLabel", @"text"]];
-    
-    // Enable remote logging to the DevTools Console via WXLog()/WXLogObjects().
-    [debugger enableRemoteLogging];
-    
-    // Enable remote logging to the DevTools source.
-    [debugger enableRemoteDebugger];
-    //    [debugger remoteDebuggertest];
-    
-    [debugger enableTimeline];
-    
-    [debugger enableCSSStyle];
-
-    [debugger enableDevToolDebug];
-    [WXSDKEngine connectDevToolServer:url];
-}
-
-+ (NSString*)WXDevtoolVersion
-{
-    return WXDevtool_VERSION;
-}
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.h
deleted file mode 100644
index 00f7e47..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-#import <Foundation/Foundation.h>
-#import <WeexSDK/WXAnalyzerProtocol.h>
-
-@interface WXMonitorHandler : NSObject <WXAnalyzerProtocol>
-
-@property(nonatomic, strong) NSMutableDictionary<NSString *,NSMutableArray*> *monitorDictionary;
-
-+ (instancetype)sharedInstance;
-+ (void)resetMonitorData;
-
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.m
deleted file mode 100644
index e5fede0..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXMonitor/WXMonitorHandler.m
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
- */
-
-
-#import "WXMonitorHandler.h"
-#import <WeexSDK/WXUtility.h>
-
-@implementation WXMonitorHandler
-
-static WXMonitorHandler* _sharedInstance;
-
-+ (instancetype)sharedInstance {
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        _sharedInstance = [[self alloc] init];
-        _sharedInstance.monitorDictionary = [NSMutableDictionary new];
-    });
-    return _sharedInstance;
-}
-
-+ (void) resetMonitorData {
-    [WXMonitorHandler.sharedInstance.monitorDictionary removeAllObjects];
-}
-
-- (void)transfer:(NSDictionary *)value {
-    if (![value isKindOfClass:NSDictionary.class]) {
-        return;
-    }
-    NSString* group = value[@"group"];
-    NSString* instanceId = value[@"module"];
-    if ([group isEqualToString:@"wxapm"]) {
-        if (instanceId && [instanceId isKindOfClass:NSString.class]) {
-            NSMutableArray *array = WXMonitorHandler.sharedInstance.monitorDictionary[instanceId];
-            if (!array) {
-                array = [NSMutableArray new];
-                [WXMonitorHandler.sharedInstance.monitorDictionary setObject:array forKey:instanceId];
-            }
-            NSMutableDictionary *directory = [value mutableCopy];
-            [directory removeObjectsForKeys:@[@"group",@"module"]];
-            [array addObject:directory];
-            [WXMonitorHandler.sharedInstance.monitorDictionary setObject:array forKey:instanceId];
-        }
-    }
-    
-}
-
-@end
-
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.h
deleted file mode 100755
index d7dd5d2..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.h
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-//  WXNetworkRecorder.h
-//  Flipboard
-//
-//  Created by Ryan Olson on 2/4/15.
-//  Copyright (c) 2015 Flipboard. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-// Notifications posted when the record is updated
-extern NSString *const kWXNetworkRecorderNewTransactionNotification;
-extern NSString *const kWXNetworkRecorderTransactionUpdatedNotification;
-extern NSString *const kWXNetworkRecorderUserInfoTransactionKey;
-extern NSString *const kWXNetworkRecorderTransactionsClearedNotification;
-extern NSString *const kWXNetworkRecorderSearchbarDisableNotification;
-
-@class WXNetworkTransaction;
-
-@interface WXNetworkRecorder : NSObject
-
-/// In general, it only makes sense to have one recorder for the entire application.
-+ (instancetype)defaultRecorder;
-
-/// Defaults to 25 MB if never set. Values set here are presisted across launches of the app.
-@property (nonatomic, assign) NSUInteger responseCacheByteLimit;
-
-/// If NO, the recorder not cache will not cache response for content types with an "image", "video", or "audio" prefix.
-@property (nonatomic, assign) BOOL shouldCacheMediaResponses;
-
-// Accessing recorded network activity
-
-/// Array of WXNetworkTransaction objects ordered by start time with the newest first.
-- (NSArray *)networkTransactions;
-
-/// The full response data IFF it hasn't been purged due to memory pressure.
-- (NSData *)cachedResponseBodyForTransaction:(WXNetworkTransaction *)transaction;
-
-/// Dumps all network transactions and cached response bodies.
-- (void)clearRecordedActivity;
-
-
-// Recording network activity
-
-/// Call when app is about to send HTTP request.
-- (void)recordRequestWillBeSentWithRequestID:(NSString *)requestID request:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;
-
-/// Call when HTTP response is available.
-- (void)recordResponseReceivedWithRequestID:(NSString *)requestID response:(NSURLResponse *)response;
-
-/// Call when data chunk is received over the network.
-- (void)recordDataReceivedWithRequestID:(NSString *)requestID dataLength:(int64_t)dataLength;
-
-/// Call when HTTP request has finished loading.
-- (void)recordLoadingFinishedWithRequestID:(NSString *)requestID responseBody:(NSData *)responseBody;
-
-/// Call when HTTP request has failed to load.
-- (void)recordLoadingFailedWithRequestID:(NSString *)requestID error:(NSError *)error;
-
-/// Call to set the request mechanism anytime after recordRequestWillBeSent... has been called.
-/// This string can be set to anything useful about the API used to make the request.
-- (void)recordMechanism:(NSString *)mechanism forRequestID:(NSString *)requestID;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.m
deleted file mode 100755
index 334f722..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkRecorder.m
+++ /dev/null
@@ -1,263 +0,0 @@
-//
-//  WXNetworkRecorder.m
-//  Flipboard
-//
-//  Created by Ryan Olson on 2/4/15.
-//  Copyright (c) 2015 Flipboard. All rights reserved.
-//
-
-#import "WXNetworkRecorder.h"
-#import "WXNetworkTransaction.h"
-#import "WXTracingUtility.h"
-#import "WXResources.h"
-
-NSString *const kWXNetworkRecorderNewTransactionNotification = @"kWXNetworkRecorderNewTransactionNotification";
-NSString *const kWXNetworkRecorderTransactionUpdatedNotification = @"kWXNetworkRecorderTransactionUpdatedNotification";
-NSString *const kWXNetworkRecorderUserInfoTransactionKey = @"transaction";
-NSString *const kWXNetworkRecorderTransactionsClearedNotification = @"kWXNetworkRecorderTransactionsClearedNotification";
-NSString *const kWXNetworkRecorderSearchbarDisableNotification = @"kWXNetworkRecorderSearchbarDisableNotification";
-
-NSString *const kWXNetworkRecorderResponseCacheLimitDefaultsKey = @"com.flex.responseCacheLimit";
-
-@interface WXNetworkRecorder ()
-
-@property (nonatomic, strong) NSCache *responseCache;
-@property (nonatomic, strong) NSMutableArray *orderedTransactions;
-@property (nonatomic, strong) NSMutableDictionary *networkTransactionsForRequestIdentifiers;
-@property (nonatomic, strong) dispatch_queue_t queue;
-
-@end
-
-@implementation WXNetworkRecorder
-
-- (instancetype)init
-{
-    self = [super init];
-    if (self) {
-        self.responseCache = [[NSCache alloc] init];
-        NSUInteger responseCacheLimit = [[[NSUserDefaults standardUserDefaults] objectForKey:kWXNetworkRecorderResponseCacheLimitDefaultsKey] unsignedIntegerValue];
-        if (responseCacheLimit) {
-            [self.responseCache setTotalCostLimit:responseCacheLimit];
-        } else {
-            // Default to 25 MB max. The cache will purge earlier if there is memory pressure.
-            [self.responseCache setTotalCostLimit:25 * 1024 * 1024];
-        }
-        self.orderedTransactions = [NSMutableArray array];
-        self.networkTransactionsForRequestIdentifiers = [NSMutableDictionary dictionary];
-
-        // Serial queue used because we use mutable objects that are not thread safe
-        self.queue = dispatch_queue_create("com.flex.WXNetworkRecorder", DISPATCH_QUEUE_SERIAL);
-    }
-    return self;
-}
-
-+ (instancetype)defaultRecorder
-{
-    static WXNetworkRecorder *defaultRecorder = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultRecorder = [[[self class] alloc] init];
-    });
-    return defaultRecorder;
-}
-
-#pragma mark - Public Data Access
-
-- (NSUInteger)responseCacheByteLimit
-{
-    return [self.responseCache totalCostLimit];
-}
-
-- (void)setResponseCacheByteLimit:(NSUInteger)responseCacheByteLimit
-{
-    [self.responseCache setTotalCostLimit:responseCacheByteLimit];
-    [[NSUserDefaults standardUserDefaults] setObject:@(responseCacheByteLimit) forKey:kWXNetworkRecorderResponseCacheLimitDefaultsKey];
-}
-
-- (NSArray *)networkTransactions
-{
-    __block NSArray *transactions = nil;
-    dispatch_sync(self.queue, ^{
-        transactions = [self.orderedTransactions copy];
-    });
-    return transactions;
-}
-
-- (NSData *)cachedResponseBodyForTransaction:(WXNetworkTransaction *)transaction
-{
-    return [self.responseCache objectForKey:transaction.requestID];
-}
-
-- (void)clearRecordedActivity
-{
-    dispatch_async(self.queue, ^{
-        [self.responseCache removeAllObjects];
-        [self.orderedTransactions removeAllObjects];
-        [self.networkTransactionsForRequestIdentifiers removeAllObjects];
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:kWXNetworkRecorderTransactionsClearedNotification object:self];
-        });
-    });
-}
-
-#pragma mark - Network Events
-
-- (void)recordRequestWillBeSentWithRequestID:(NSString *)requestID request:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
-{
-    NSDate *startDate = [NSDate date];
-
-    if (redirectResponse) {
-        [self recordResponseReceivedWithRequestID:requestID response:redirectResponse];
-        [self recordLoadingFinishedWithRequestID:requestID responseBody:nil];
-    }
-
-    dispatch_async(self.queue, ^{
-        WXNetworkTransaction *transaction = [[WXNetworkTransaction alloc] init];
-        transaction.requestID = requestID;
-        transaction.request = request;
-        transaction.startTime = startDate;
-
-        [self.orderedTransactions insertObject:transaction atIndex:0];
-        [self.networkTransactionsForRequestIdentifiers setObject:transaction forKey:requestID];
-        transaction.transactionState = WXNetworkTransactionStateAwaitingResponse;
-
-        [self postNewTransactionNotificationWithTransaction:transaction];
-    });
-}
-
-- (void)recordResponseReceivedWithRequestID:(NSString *)requestID response:(NSURLResponse *)response
-{
-    NSDate *responseDate = [NSDate date];
-
-    dispatch_async(self.queue, ^{
-        WXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID];
-        if (!transaction) {
-            return;
-        }
-        transaction.response = response;
-        transaction.transactionState = WXNetworkTransactionStateReceivingData;
-        transaction.latency = -[transaction.startTime timeIntervalSinceDate:responseDate];
-
-        [self postUpdateNotificationForTransaction:transaction];
-    });
-}
-
-- (void)recordDataReceivedWithRequestID:(NSString *)requestID dataLength:(int64_t)dataLength
-{
-    dispatch_async(self.queue, ^{
-        WXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID];
-        if (!transaction) {
-            return;
-        }
-        transaction.receivedDataLength += dataLength;
-
-        [self postUpdateNotificationForTransaction:transaction];
-    });
-}
-
-- (void)recordLoadingFinishedWithRequestID:(NSString *)requestID responseBody:(NSData *)responseBody
-{
-    NSDate *finishedDate = [NSDate date];
-
-    dispatch_async(self.queue, ^{
-        WXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID];
-        if (!transaction) {
-            return;
-        }
-        transaction.transactionState = WXNetworkTransactionStateFinished;
-        transaction.duration = -[transaction.startTime timeIntervalSinceDate:finishedDate];
-
-        BOOL shouldCache = [responseBody length] > 0;
-        if (!self.shouldCacheMediaResponses) {
-            NSArray *ignoredMIMETypePrefixes = @[ @"audio", @"image", @"video" ];
-            for (NSString *ignoredPrefix in ignoredMIMETypePrefixes) {
-                shouldCache = shouldCache && ![transaction.response.MIMEType hasPrefix:ignoredPrefix];
-            }
-        }
-        
-        if (shouldCache) {
-            [self.responseCache setObject:responseBody forKey:requestID cost:[responseBody length]];
-        }
-
-        NSString *mimeType = transaction.response.MIMEType;
-        if ([mimeType hasPrefix:@"image/"] && [responseBody length] > 0) {
-            // Thumbnail image previews on a separate background queue
-            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-                NSInteger maxPixelDimension = [[UIScreen mainScreen] scale] * 32.0;
-                transaction.responseThumbnail = [WXTracingUtility thumbnailedImageWithMaxPixelDimension:maxPixelDimension fromImageData:responseBody];
-                [self postUpdateNotificationForTransaction:transaction];
-            });
-        } else if ([mimeType isEqual:@"application/json"]) {
-            transaction.responseThumbnail = [WXResources jsonIcon];
-        } else if ([mimeType isEqual:@"text/plain"]){
-            transaction.responseThumbnail = [WXResources textPlainIcon];
-        } else if ([mimeType isEqual:@"text/html"]) {
-            transaction.responseThumbnail = [WXResources htmlIcon];
-        } else if ([mimeType isEqual:@"application/x-plist"]) {
-            transaction.responseThumbnail = [WXResources plistIcon];
-        } else if ([mimeType isEqual:@"application/octet-stream"] || [mimeType isEqual:@"application/binary"]) {
-            transaction.responseThumbnail = [WXResources binaryIcon];
-        } else if ([mimeType rangeOfString:@"javascript"].length > 0) {
-            transaction.responseThumbnail = [WXResources jsIcon];
-        } else if ([mimeType rangeOfString:@"xml"].length > 0) {
-            transaction.responseThumbnail = [WXResources xmlIcon];
-        } else if ([mimeType hasPrefix:@"audio"]) {
-            transaction.responseThumbnail = [WXResources audioIcon];
-        } else if ([mimeType hasPrefix:@"video"]) {
-            transaction.responseThumbnail = [WXResources videoIcon];
-        } else if ([mimeType hasPrefix:@"text"]) {
-            transaction.responseThumbnail = [WXResources textIcon];
-        }
-        
-        [self postUpdateNotificationForTransaction:transaction];
-    });
-}
-
-- (void)recordLoadingFailedWithRequestID:(NSString *)requestID error:(NSError *)error
-{
-    dispatch_async(self.queue, ^{
-        WXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID];
-        if (!transaction) {
-            return;
-        }
-        transaction.transactionState = WXNetworkTransactionStateFailed;
-        transaction.duration = -[transaction.startTime timeIntervalSinceNow];
-        transaction.error = error;
-
-        [self postUpdateNotificationForTransaction:transaction];
-    });
-}
-
-- (void)recordMechanism:(NSString *)mechanism forRequestID:(NSString *)requestID
-{
-    dispatch_async(self.queue, ^{
-        WXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID];
-        if (!transaction) {
-            return;
-        }
-        transaction.requestMechanism = mechanism;
-
-        [self postUpdateNotificationForTransaction:transaction];
-    });
-}
-
-#pragma mark Notification Posting
-
-- (void)postNewTransactionNotificationWithTransaction:(WXNetworkTransaction *)transaction
-{
-    dispatch_async(dispatch_get_main_queue(), ^{
-        NSDictionary *userInfo = @{ kWXNetworkRecorderUserInfoTransactionKey : transaction };
-        [[NSNotificationCenter defaultCenter] postNotificationName:kWXNetworkRecorderNewTransactionNotification object:self userInfo:userInfo];
-    });
-}
-
-- (void)postUpdateNotificationForTransaction:(WXNetworkTransaction *)transaction
-{
-    dispatch_async(dispatch_get_main_queue(), ^{
-        NSDictionary *userInfo = @{ kWXNetworkRecorderUserInfoTransactionKey : transaction };
-        [[NSNotificationCenter defaultCenter] postNotificationName:kWXNetworkRecorderTransactionUpdatedNotification object:self userInfo:userInfo];
-    });
-}
-
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.h
deleted file mode 100755
index ded1518..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-//  WXNetworkTransaction.h
-//  Flipboard
-//
-//  Created by Ryan Olson on 2/8/15.
-//  Copyright (c) 2015 Flipboard. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import "UIKit/UIKit.h"
-
-typedef NS_ENUM(NSInteger, WXNetworkTransactionState) {
-    WXNetworkTransactionStateUnstarted,
-    WXNetworkTransactionStateAwaitingResponse,
-    WXNetworkTransactionStateReceivingData,
-    WXNetworkTransactionStateFinished,
-    WXNetworkTransactionStateFailed
-};
-
-@interface WXNetworkTransaction : NSObject
-
-@property (nonatomic, copy) NSString *requestID;
-
-@property (nonatomic, strong) NSURLRequest *request;
-@property (nonatomic, strong) NSURLResponse *response;
-@property (nonatomic, copy) NSString *requestMechanism;
-@property (nonatomic, assign) WXNetworkTransactionState transactionState;
-@property (nonatomic, strong) NSError *error;
-
-@property (nonatomic, strong) NSDate *startTime;
-@property (nonatomic, assign) NSTimeInterval latency;
-@property (nonatomic, assign) NSTimeInterval duration;
-
-@property (nonatomic, assign) int64_t receivedDataLength;
-
-/// Only applicable for image downloads. A small thumbnail to preview the full response.
-@property (nonatomic, strong) UIImage *responseThumbnail;
-
-/// Populated lazily. Handles both normal HTTPBody data and HTTPBodyStreams.
-@property (nonatomic, strong, readonly) NSData *cachedRequestBody;
-
-+ (NSString *)readableStringFromTransactionState:(WXNetworkTransactionState)state;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.m
deleted file mode 100755
index 8822040..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXNetworkTransaction.m
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-//  WXNetworkTransaction.m
-//  Flipboard
-//
-//  Created by Ryan Olson on 2/8/15.
-//  Copyright (c) 2015 Flipboard. All rights reserved.
-//
-
-#import "WXNetworkTransaction.h"
-
-@interface WXNetworkTransaction ()
-
-@property (nonatomic, strong, readwrite) NSData *cachedRequestBody;
-
-@end
-
-@implementation WXNetworkTransaction
-
-- (NSString *)description
-{
-    NSString *description = [super description];
-
-    description = [description stringByAppendingFormat:@" id = %@;", self.requestID];
-    description = [description stringByAppendingFormat:@" url = %@;", self.request.URL];
-    description = [description stringByAppendingFormat:@" duration = %f;", self.duration];
-    description = [description stringByAppendingFormat:@" receivedDataLength = %lld", self.receivedDataLength];
-
-    return description;
-}
-
-- (NSData *)cachedRequestBody {
-    if (!_cachedRequestBody) {
-        if (self.request.HTTPBody != nil) {
-            _cachedRequestBody = self.request.HTTPBody;
-        } else if ([self.request.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) {
-            NSInputStream *bodyStream = [self.request.HTTPBodyStream copy];
-            const NSUInteger bufferSize = 1024;
-            uint8_t buffer[bufferSize];
-            NSMutableData *data = [NSMutableData data];
-            [bodyStream open];
-            NSInteger readBytes = 0;
-            do {
-                readBytes = [bodyStream read:buffer maxLength:bufferSize];
-                [data appendBytes:buffer length:readBytes];
-            } while (readBytes > 0);
-            [bodyStream close];
-            _cachedRequestBody = data;
-        }
-    }
-    return _cachedRequestBody;
-}
-
-+ (NSString *)readableStringFromTransactionState:(WXNetworkTransactionState)state
-{
-    NSString *readableString = nil;
-    switch (state) {
-        case WXNetworkTransactionStateUnstarted:
-            readableString = @"Unstarted";
-            break;
-
-        case WXNetworkTransactionStateAwaitingResponse:
-            readableString = @"Awaiting Response";
-            break;
-
-        case WXNetworkTransactionStateReceivingData:
-            readableString = @"Receiving Data";
-            break;
-
-        case WXNetworkTransactionStateFinished:
-            readableString = @"Finished";
-            break;
-
-        case WXNetworkTransactionStateFailed:
-            readableString = @"Failed";
-            break;
-    }
-    return readableString;
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.h
deleted file mode 100755
index f5b1f4c..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-//  WXResources.h
-//  FLEX
-//
-//  Created by Ryan Olson on 6/8/14.
-//  Copyright (c) 2014 Flipboard. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-@interface WXResources : NSObject
-
-+ (UIImage *)closeIcon;
-+ (UIImage *)dragHandle;
-+ (UIImage *)globeIcon;
-+ (UIImage *)hierarchyIndentPattern;
-+ (UIImage *)listIcon;
-+ (UIImage *)moveIcon;
-+ (UIImage *)selectIcon;
-
-+ (UIImage *)jsonIcon;
-+ (UIImage *)textPlainIcon;
-+ (UIImage *)htmlIcon;
-+ (UIImage *)audioIcon;
-+ (UIImage *)jsIcon;
-+ (UIImage *)plistIcon;
-+ (UIImage *)textIcon;
-+ (UIImage *)videoIcon;
-+ (UIImage *)xmlIcon;
-+ (UIImage *)binaryIcon;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.m
deleted file mode 100755
index b8d0af9..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXResources.m
+++ /dev/null
@@ -1,167 +0,0 @@
-//
-//  WXResources.m
-//  FLEX
-//
-//  Created by Ryan Olson on 6/8/14.
-//  Copyright (c) 2014 Flipboard. All rights reserved.
-//
-
-#import "WXResources.h"
-
-static const u_int8_t FLEXCloseIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3b, 0xd6, 0x95, 0x4a, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x00, 0xb8, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0x9d, 0x92, 0xb1, 0x0d, 0x02, 0x31, 0x10, 0x04, 0x0d, 0x1f, 0x50, 0x01, 0x0d, 0x90, 0x53, 0xdb, 0x8b, 0x2a, 0x48, 0x48, 0x09, 0x49, 0xc8, 0x89, 0xc8, 0xe9, 0xe3, 0x0b, 0xa0, 0x0e, 0xd8, 0xb1, 0x6c, 0xc4, 0x9f, 0xd6, 0x7e, 0xc4, 0x49, 0x2b, 0xdb, 0x77, 0xb7, 0x7b, 0x6b, 0xcb, 0x43, 0x4a, 0xe9, 0x20, 0xdc, 0x84, 0xad, 0xf0, 0x10, 0x7a, 0xb1, 0x52, 0xf1, 0x28, 0x5c, 0x85, 0x17, 0x8d, 0xcf, 0xb2, 0xe1, 0x70, 0x11, 0x68, 0x70, 0x41, 0x9e, 0x3a, 0x7d, 0x00, 0x5e, 0x56, 0xaa, 0x89, 0x96, 0x40, 0x24, 0xd2, 0x87, 0x83, 0x3c, 0xe9, 0x5b, 0x31, 0x0a, 0x38, 0xe2, 0xcc, 0x61, 0xab, 0x61, 0x2d, 0xf1, 0x9e, 0x30, 0xc3, 0x73, 0x38, 0x81, 0x49, 0x95, 0xa5, 0x2b, 0x15, 0xba, 0xbf, 0x42, 0x25, 0xcf, 0xac, 0x7e, 0x18, 0x61, 0x83, 0xd5, 0x38, 0x91, 0x33, 0xf9, 0x6e, 0x38, 0xeb, 0x3f, 0x4d, 0x76, 0xc4, 0xe8, 0xc0, 0x5a, 0x77, 0x44, 0x1a, 0x17, 0x5f, 0xbb, 0x45, 0x24, 0x4f, 0x74, 0xeb, 0xfc, 0x94, 0x7a, 0x2f, 0x56, 0x67, 0xcd, 0x09, 0xe4, 0x1f, 0xf6, 0xf7, 0xdf, 0x1e, 0xca, 0xd4, 0xbd, 0xd6, 0xb3, 0x30, 0x96, 0xb3, 0x16, 0x1b, 0x77, 0x65, 0x37, 0xc2, 0x4e, 0x38, 0xbd, 0x01, 0xa7, 0x78, 0x6a, 0x4b, 0x16, 0xe1, 0xee, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXCloseIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x30, 0xae, 0xa2, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x01, 0x1d, 0x49, 0x44, 0x41, 0x54, 0x48, 0x0d, 0xc5, 0x97, 0x6b, 0x0e, 0x02, 0x21, 0x0c, 0x84, 0x89, 0x3f, 0xf4, 0xe8, 0x7b, 0x23, 0xe3, 0x8d, 0x38, 0x86, 0x32, 0xc4, 0x6e, 0xd8, 0x86, 0x47, 0x3b, 0x25, 0xd9, 0x4d, 0x2a, 0xb0, 0xb6, 0xf3, 0xb5, 0xd0, 0x18, 0x4c, 0x29, 0xa5, 0x67, 0xb1, 0xa3, 0x58, 0xfe, 0x1b, 0xe6, 0x78, 0xb7, 0xeb, 0x19, 0xea, 0x03, 0xf4, 0x55, 0xf6, 0x2e, 0xeb, 0xd7, 0x06, 0x32, 0x34, 0xa0, 0xa5, 0xf5, 0xc1, 0xac, 0x95, 0xea, 0x2f, 0xb0, 0x8e, 0xc2, 0x47, 0x50, 0x68, 0xe7, 0x19, 0x38, 0x02, 0x9f, 0x41, 0x4f, 0x30, 0xca, 0xc6, 0x62, 0x64, 0xde, 0xca, 0x57, 0x50, 0x70, 0xc0, 0xac, 0x8d, 0xd4, 0x3b, 0x87, 0x36, 0x11, 0x2b, 0xdc, 0x02, 0x85, 0xd6, 0xd9, 0xbc, 0xd6, 0x00, 0xf8, 0x8d, 0x1e, 0x5a, 0x83, 0x0e, 0x2c, 0x99, 0x44, 0x62, 0x6b, 0x21, 0x8c, 0x00, 0x13, 0xd3, 0xdd, 0x35, 0x8f, 0x90, 0xc7, 0xb7, 0x0b, 0xd3, 0x2f, 0x2d, 0x82, 0x9f, 0x12, 0x04, 0x6b, 0x9b, 0x50, 0xcf, 0xad, 0x4d, 0x79, 0xe1, 0x5b, 0xe0, 0x1a, 0xd4, 0xae, 0x29, 0xa8, 0x64, 0xc0, 0xc2, 0x43, 0x50, 0x16, 0xbe, 0x05, 0xda, 0xc2, 0x57, 0xe7, 0x89, 0x6d, 0x86, 0x0f, 0x76, 0x69, 0xf9, 0x3c, 0x96, 0x1e, 0x37, 0x3a, 0x78, 0xcf, 0x79, 0xcb, 0x56, 0x7b, 0xa1, 0xd2, 0xd5, 0x21, 0x38, 0x0b, 0x0d, 0xc1, 0x2d, 0xd0, 0xed, 0x3f, 0x20, 0x16, 0xa8, 0x6c, 0xa5, 0xc7, 0x77, 0xda, 0xa6, 0x8c, 0x10, 0x13, 0x73, 0x49, 0x22, 0x22, 0x40, 0xc7, 0xd2, 0x81, 0x4d, 0xea, 0x6e, 0x0d, 0x5c, 0x43, 0x70, 0x66, 0xd2, 0x8d, 0xbd, 0x51, 0xce, 0xb4, 0xe1, 0x74, 0xa7, 0x56, 0x78, 0xbd, 0xfa, 0x1c, 0x9b, 0xa0, 0x92, 0x89, 0x05, 0x0e, 0xe6, 0xf0, 0x5e, 0x8d, 0xca, 0xad, 0x95, 0x0a, 0x54, 0xc6, 0x15, 0x3c, 0xc3, 0x11, 0x1f, 0x91, 0xed, 0x15, 0x98, 0x1e, 0x67, 0xf0, 0x0a, 0x3e, 0x3a, 0x60, 0xb6, 0x52, 0x2b, 0x1c, 0xcc, 0x7b, 0xfe, 0xb4, 0xfd, 0x00, 0xb3, 0x4a, 0x9f, 0x54, 0x63, 0x5e, 0xe3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXDragHandle[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x26, 0x08, 0x06, 0x00, 0x00, 0x00, 0xfd, 0x5c, 0x0a, 0xf0, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9e, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x38, 0x32, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x36, 0x36, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x8a, 0x6f, 0x99, 0x54, 0x00, 0x00, 0x00, 0x4b, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0x63, 0x60, 0x60, 0x60, 0xd8, 0x0a, 0xc4, 0xff, 0x09, 0xe0, 0xad, 0x4c, 0x40, 0x05, 0xc4, 0x00, 0x90, 0x41, 0x34, 0x00, 0xa3, 0x6e, 0xa4, 0x4e, 0xa0, 0x8e, 0x86, 0xe3, 0x68, 0x38, 0x22, 0xe7, 0xf5, 0x81, 0xce, 0xd7, 0x9b, 0x80, 0xd1, 0xf1, 0x97, 0x00, 0xde, 0xc4, 0x02, 0x54, 0xc0, 0x0a, 0xc4, 0x84, 0xca, 0x20, 0x56, 0x46, 0xa0, 0x22, 0x10, 0x20, 0xa4, 0xf0, 0x1f, 0x44, 0x19, 0x91, 0xe4, 0xc8, 0x73, 0x23, 0x00, 0x28, 0x34, 0x66, 0xcc, 0x96, 0x10, 0xe2, 0x94, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXDragHandle2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x6d, 0x54, 0x97, 0x97, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9e, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x38, 0x32, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x36, 0x36, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x8a, 0x6f, 0x99, 0x54, 0x00, 0x00, 0x00, 0x7c, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0xd5, 0xc1, 0x09, 0xc0, 0x30, 0x0c, 0x43, 0x51, 0xd3, 0xed, 0xba, 0xff, 0x08, 0x19, 0xa4, 0x8d, 0x0f, 0xe9, 0x5d, 0x8d, 0x74, 0xca, 0x0f, 0xf8, 0x68, 0x61, 0x93, 0x07, 0xae, 0xaa, 0xba, 0x67, 0x8d, 0x59, 0xcf, 0x66, 0x75, 0x46, 0x67, 0x59, 0xc2, 0xd6, 0x30, 0xe3, 0xea, 0x44, 0xf7, 0xb3, 0xaf, 0xec, 0x1e, 0xf0, 0xc4, 0x3c, 0xfb, 0xa7, 0x38, 0x50, 0xe3, 0xf0, 0x38, 0x8a, 0x38, 0xfc, 0x7d, 0x0a, 0xbe, 0x13, 0x70, 0x1c, 0x9a, 0xc0, 0xc2, 0x38, 0xc4, 0x61, 0x80, 0x95, 0x1c, 0x89, 0x43, 0x1c, 0xca, 0x68, 0x02, 0x0d, 0x38, 0xc4, 0x61, 0x80, 0x95, 0x1c, 0x89, 0x43, 0x1c, 0xca, 0x68, 0x02, 0x0d, 0x38, 0xc4, 0x61, 0x80, 0x95, 0x1c, 0x89, 0x43, 0x1c, 0xca, 0x68, 0x02, 0x0d, 0x38, 0xdc, 0x73, 0xf8, 0x02, 0x86, 0x61, 0x32, 0xdb, 0x80, 0xa1, 0x94, 0xde, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXGlobeIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0xce, 0x8e, 0x57, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x01, 0x4f, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0xad, 0x94, 0x3f, 0x4a, 0x03, 0x41, 0x14, 0x87, 0x93, 0xb4, 0x42, 0x7a, 0x2d, 0x2c, 0xed, 0x85, 0x14, 0x16, 0x41, 0x42, 0x4e, 0x10, 0xb0, 0x13, 0x3c, 0x88, 0x20, 0xa9, 0xbc, 0x82, 0x60, 0x95, 0x5a, 0x2b, 0x0b, 0x6f, 0x90, 0x52, 0x4c, 0xbc, 0x41, 0x0a, 0x0b, 0x15, 0x0b, 0x0f, 0x10, 0x02, 0xf1, 0xfb, 0x96, 0x79, 0xc3, 0xc4, 0x6c, 0xd0, 0x48, 0x7e, 0xf0, 0xed, 0xbe, 0x79, 0xff, 0xf6, 0xcd, 0x6c, 0x36, 0x8d, 0x46, 0xbd, 0xba, 0xb8, 0x87, 0x30, 0x85, 0x79, 0x42, 0x5b, 0x9f, 0xb1, 0x5f, 0xd5, 0x26, 0x63, 0x04, 0x33, 0x78, 0x80, 0x77, 0xb8, 0x80, 0x65, 0xb2, 0xf5, 0x19, 0x33, 0xc7, 0xdc, 0x5a, 0x9d, 0xe0, 0x7d, 0x85, 0x1b, 0x38, 0x82, 0x4f, 0x38, 0x06, 0x65, 0x23, 0x6d, 0x7d, 0xc6, 0xcc, 0x31, 0xd7, 0x9a, 0x15, 0xd9, 0xdd, 0xc0, 0x20, 0x79, 0x2f, 0xb9, 0x9b, 0x1c, 0xb2, 0x91, 0xd2, 0x67, 0x4c, 0x99, 0x6b, 0xcd, 0xca, 0x64, 0x8e, 0x5a, 0x16, 0xbe, 0xb0, 0x3e, 0x85, 0x50, 0x34, 0xd2, 0x67, 0x2c, 0x64, 0x8d, 0xb5, 0x95, 0x3c, 0xbc, 0x19, 0x5c, 0x83, 0x05, 0xdb, 0xf2, 0x45, 0x4d, 0xb7, 0xc5, 0xa5, 0x0f, 0x77, 0x70, 0x05, 0x4d, 0xe8, 0xc1, 0x38, 0xd9, 0xae, 0x45, 0x85, 0x6d, 0xac, 0x57, 0xac, 0x6f, 0xb1, 0xfb, 0x2d, 0x2e, 0x1d, 0x78, 0x86, 0xd0, 0x01, 0xc6, 0x5b, 0x2c, 0x6a, 0xee, 0xbe, 0x49, 0x73, 0x42, 0xd6, 0x76, 0x36, 0x35, 0x32, 0x79, 0x93, 0x7c, 0x48, 0xd9, 0x68, 0xc2, 0xda, 0x61, 0xaa, 0xa7, 0x6f, 0x7b, 0x2e, 0x6b, 0xf9, 0x4e, 0xe4, 0x68, 0x67, 0x10, 0x67, 0x70, 0x8e, 0x7d, 0x5f, 0xac, 0x7f, 0x9e, 0x91, 0x31, 0x73, 0x22, 0xdf, 0xda, 0xc7, 0x68, 0x54, 0x8d, 0x86, 0x43, 0x39, 0xfa, 0x7e, 0x65, 0xd5, 0x5f, 0x8c, 0x95, 0x67, 0x98, 0xcf, 0x38, 0x5e, 0xff, 0x5e, 0xaa, 0x3b, 0xe4, 0xfe, 0x01, 0x3e, 0x24, 0xe4, 0x56, 0x94, 0x3e, 0x63, 0xe6, 0x28, 0x6b, 0xfc, 0xe9, 0xe4, 0xef, 0x6f, 0xc4, 0xe2, 0x09, 0xd6, 0xf6, 0xfe, 0x07, 0xdf, 0x94, 0x9c, 0xac, 0x9d, 0x7d, 0x22, 0x76, 0xdc, 0xc9, 0x47, 0x1b, 0xa3, 0x39, 0x99, 0xdb, 0x74, 0xdf, 0xff, 0xfe, 0x1b, 0x89, 0x66, 0xde, 0x3d, 0xbc, 0x21, 0xb8, 0xff, 0x39, 0x2c, 0x92, 0xad, 0x2f, 0x1f, 0x2c, 0x76, 0xd6, 0x37, 0xcc, 0x0f, 0x82, 0x53, 0x11, 0x25, 0x5b, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXGlobeIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x08, 0x06, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x98, 0x98, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x03, 0x7e, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xcd, 0x98, 0x3d, 0x6b, 0x54, 0x51, 0x10, 0x86, 0x8d, 0xb1, 0xf3, 0x83, 0xac, 0x60, 0x61, 0x20, 0x58, 0x88, 0x1f, 0xa8, 0x9d, 0x85, 0x85, 0x58, 0x2e, 0x04, 0x4c, 0x61, 0x6a, 0x05, 0x7f, 0x84, 0x56, 0x0a, 0xd9, 0x3f, 0xa0, 0x90, 0xfc, 0x80, 0xfc, 0x00, 0x3b, 0x85, 0xa4, 0x31, 0x92, 0x46, 0x04, 0x2d, 0x6c, 0x44, 0xc5, 0x0f, 0x62, 0x96, 0x14, 0xa6, 0x52, 0x51, 0x23, 0x04, 0x62, 0x8c, 0xef, 0xb3, 0x39, 0x6f, 0x98, 0x7b, 0x72, 0x37, 0x7b, 0x57, 0x76, 0x13, 0x07, 0xde, 0xcc, 0x9c, 0x99, 0x79, 0x67, 0x86, 0x7b, 0xef, 0x39, 0x7b, 0x6f, 0x06, 0xf6, 0x75, 0x2f, 0x35, 0x51, 0xae, 0x0a, 0x75, 0xe1, 0x82, 0x70, 0x5a, 0x38, 0x28, 0x20, 0xbf, 0x84, 0x0f, 0xc2, 0x6b, 0x61, 0x4e, 0x98, 0x15, 0xbe, 0x09, 0x7d, 0x91, 0x71, 0x55, 0x9d, 0x17, 0xd6, 0x84, 0x8d, 0x8a, 0x20, 0x17, 0x0e, 0xdc, 0x9e, 0xc9, 0x65, 0x55, 0x7a, 0x26, 0x54, 0x1d, 0xa2, 0x5d, 0x1e, 0x35, 0xa8, 0xf5, 0xcf, 0x32, 0x28, 0xe6, 0xa4, 0x90, 0x37, 0xf8, 0x93, 0x7c, 0xeb, 0xd2, 0x13, 0xc2, 0xb9, 0x90, 0x83, 0x8d, 0x8f, 0x18, 0x3c, 0xe7, 0xc6, 0x1a, 0xd4, 0xa4, 0x76, 0x57, 0x32, 0xa4, 0xec, 0xc7, 0x42, 0x2c, 0xb4, 0xaa, 0xf5, 0x94, 0xd0, 0x4c, 0xfe, 0xdb, 0xd2, 0x16, 0xe7, 0x79, 0x4d, 0x0c, 0x5f, 0x53, 0x80, 0x03, 0xd7, 0x39, 0x68, 0x6a, 0xd3, 0xa3, 0x92, 0x90, 0xf8, 0x56, 0x88, 0x05, 0x1e, 0x6a, 0x7d, 0x42, 0xb8, 0x95, 0xfc, 0xaf, 0xa4, 0x0f, 0x08, 0x16, 0xe7, 0x7a, 0x4d, 0x8c, 0x1c, 0xfc, 0x70, 0xe0, 0x52, 0xc3, 0x79, 0x68, 0x7a, 0x74, 0x1c, 0x8a, 0x4b, 0x19, 0xaf, 0x0c, 0x97, 0xbc, 0x21, 0x0c, 0x24, 0x2c, 0x48, 0x53, 0x8c, 0x5d, 0x16, 0xc5, 0x8d, 0xa2, 0x8f, 0x1c, 0xfc, 0x70, 0xcc, 0xa7, 0x56, 0xbc, 0x8d, 0xf4, 0xda, 0xf1, 0xf6, 0x4d, 0x2a, 0xc1, 0xc5, 0x21, 0x5e, 0x17, 0x2c, 0xa3, 0x32, 0x88, 0x2d, 0x0a, 0xfb, 0xed, 0x4c, 0xda, 0x9c, 0xe8, 0x26, 0x87, 0x5c, 0x62, 0x70, 0x2d, 0x37, 0x64, 0xc4, 0xa1, 0xe8, 0x59, 0x2a, 0xec, 0x00, 0x17, 0x46, 0x37, 0xb2, 0xac, 0xe9, 0x14, 0xbf, 0x93, 0xf9, 0x59, 0x9a, 0x97, 0x87, 0xee, 0xa6, 0x18, 0xdc, 0x28, 0xd4, 0x36, 0x07, 0x5d, 0xba, 0xfb, 0x7a, 0xb1, 0xb5, 0x63, 0x93, 0x6e, 0x6c, 0x7a, 0x17, 0x84, 0x83, 0xcb, 0x05, 0xd6, 0x83, 0x6d, 0x5f, 0xbf, 0x74, 0xec, 0x55, 0x38, 0x3c, 0xe7, 0xc3, 0x10, 0xf7, 0x0b, 0xa3, 0x6e, 0x2e, 0x6e, 0xa6, 0xf8, 0x83, 0x92, 0x18, 0x2e, 0x0f, 0x5c, 0x16, 0x86, 0x43, 0x9c, 0x1a, 0xb9, 0xd0, 0xcb, 0x5c, 0x66, 0x68, 0x3d, 0x9c, 0x35, 0xe9, 0x2b, 0x2c, 0x24, 0x04, 0xef, 0xb5, 0xac, 0xe2, 0x9f, 0x33, 0x69, 0xc9, 0x56, 0xed, 0x56, 0xcc, 0x71, 0x8d, 0xc8, 0xa7, 0x17, 0x3d, 0x11, 0x66, 0xa8, 0xb1, 0x13, 0xc6, 0x04, 0x9f, 0x29, 0xcf, 0x65, 0x2f, 0x0b, 0xb9, 0x9c, 0x4d, 0x8e, 0x77, 0x79, 0xa0, 0xc2, 0xda, 0x1c, 0xd7, 0x88, 0x14, 0x7a, 0xbd, 0x48, 0x0e, 0x66, 0x18, 0x63, 0xa0, 0x7a, 0x72, 0xa0, 0x1e, 0x05, 0x3b, 0x9a, 0x27, 0xd3, 0xe2, 0x63, 0x74, 0x56, 0xb4, 0xcd, 0x71, 0x8d, 0x9c, 0xc6, 0x81, 0x69, 0xa9, 0x33, 0xd0, 0x88, 0x57, 0xd2, 0x2f, 0x83, 0x1d, 0xcd, 0x23, 0x69, 0xf1, 0x35, 0x3a, 0x2b, 0xda, 0xe6, 0xb8, 0x46, 0x4e, 0x8b, 0x3d, 0x47, 0x18, 0x68, 0x38, 0x64, 0x7c, 0x0e, 0x76, 0x34, 0x0f, 0xa7, 0xc5, 0xcf, 0xe8, 0xac, 0x68, 0xaf, 0xa4, 0x3c, 0xd7, 0xc8, 0x69, 0xb1, 0xe7, 0x30, 0x47, 0x3a, 0x4d, 0x0e, 0xe5, 0x59, 0x7b, 0xb4, 0x5e, 0xe1, 0x0a, 0xf9, 0x29, 0xdf, 0xa3, 0x19, 0x0a, 0x6d, 0x37, 0x18, 0x28, 0xee, 0xaa, 0xf3, 0x5a, 0xfb, 0x87, 0x30, 0xea, 0x2f, 0x89, 0x76, 0xac, 0x4d, 0x3c, 0x85, 0x4b, 0xb9, 0x70, 0x10, 0x6a, 0xc4, 0x9a, 0xb6, 0xe9, 0x69, 0x59, 0x66, 0xa0, 0xc2, 0x3d, 0x74, 0x24, 0xd3, 0x7e, 0x76, 0xfe, 0xe5, 0xd6, 0xfa, 0xd9, 0x71, 0x8d, 0xac, 0x74, 0xf1, 0x19, 0x66, 0xa0, 0xa5, 0x90, 0x71, 0x31, 0xd8, 0xd1, 0xfc, 0x91, 0x16, 0x47, 0xa3, 0xb3, 0xa2, 0xcd, 0xc1, 0x8b, 0x7c, 0xdf, 0x54, 0xdb, 0xfe, 0xc6, 0x9e, 0x4b, 0x0c, 0xf4, 0x24, 0xa4, 0x5c, 0x0b, 0x76, 0x34, 0x17, 0xd2, 0xe2, 0x54, 0x74, 0x56, 0xb4, 0xcd, 0xf9, 0xd4, 0x26, 0x3f, 0xf6, 0x9c, 0x63, 0xa0, 0x19, 0xe1, 0x77, 0x4a, 0xbe, 0x24, 0x7d, 0x3c, 0xd9, 0x51, 0xed, 0x74, 0xda, 0xc6, 0xbc, 0x32, 0xdb, 0x27, 0xb4, 0x6b, 0xc4, 0x1c, 0x7a, 0xd1, 0x13, 0x61, 0x86, 0x59, 0x06, 0xe2, 0xbb, 0xe9, 0xa9, 0x80, 0xf0, 0xa0, 0xc5, 0x77, 0xe5, 0x96, 0x53, 0x7f, 0xde, 0x27, 0x83, 0x97, 0xf8, 0x6e, 0xc5, 0x1c, 0xd7, 0x88, 0x7c, 0x7a, 0xd1, 0x13, 0x61, 0x86, 0xad, 0x6f, 0xb8, 0x71, 0x2d, 0xfc, 0xab, 0xbb, 0x1e, 0x6c, 0xfb, 0xfa, 0xa5, 0x63, 0x2f, 0x66, 0x28, 0x08, 0x2f, 0x49, 0xfd, 0x6a, 0xdc, 0xa9, 0x2e, 0xbd, 0xb7, 0x09, 0xaf, 0x91, 0x91, 0xd8, 0xc8, 0x32, 0xa6, 0x53, 0x7c, 0xd7, 0x5e, 0x61, 0xe9, 0xcf, 0x0b, 0xb7, 0x87, 0xe2, 0x45, 0x9c, 0x17, 0x72, 0xcb, 0xa8, 0x0c, 0x62, 0x8b, 0x02, 0xcf, 0x5e, 0x14, 0x73, 0xa2, 0x8f, 0x1c, 0x72, 0x89, 0xc1, 0xb5, 0x50, 0x93, 0xda, 0xe6, 0xd0, 0xb3, 0xad, 0x0c, 0x2a, 0xc2, 0xa7, 0x89, 0x93, 0x21, 0x36, 0x04, 0x9f, 0xaa, 0x6c, 0x7f, 0x62, 0xbb, 0xf6, 0x19, 0xa4, 0x5e, 0xad, 0x8f, 0xb7, 0xff, 0xe6, 0x43, 0x91, 0x81, 0x90, 0x21, 0x21, 0x5e, 0x29, 0xae, 0xca, 0xaa, 0x30, 0x25, 0x34, 0x05, 0xd6, 0xf1, 0x78, 0x60, 0x0d, 0x2c, 0xc4, 0x58, 0x37, 0x05, 0x38, 0x70, 0x9d, 0x83, 0xa6, 0x36, 0x3d, 0xba, 0x12, 0x6e, 0x5f, 0x7c, 0xa6, 0x5c, 0xd0, 0xf7, 0x9f, 0x2d, 0x3b, 0x21, 0xec, 0xca, 0x3f, 0x1b, 0xe2, 0xe4, 0xec, 0xbe, 0x5e, 0x1c, 0x09, 0xd4, 0xa0, 0x56, 0xcf, 0x84, 0x83, 0x6b, 0x5e, 0x58, 0x13, 0x7c, 0xb5, 0x3a, 0x69, 0x72, 0xe1, 0x6c, 0x3b, 0xf4, 0xe4, 0x2b, 0x15, 0x1f, 0xdb, 0xa5, 0xc1, 0x36, 0xce, 0x9a, 0xfc, 0x7c, 0xa9, 0xd4, 0x05, 0xde, 0x65, 0xca, 0xfe, 0xa5, 0xf7, 0x46, 0xfe, 0x39, 0x61, 0x46, 0xd8, 0xfa, 0x39, 0x90, 0xdd, 0x51, 0xfe, 0x02, 0x89, 0x7c, 0xcc, 0xd6, 0x15, 0x10, 0x0a, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXHierarchyIndentPattern[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0xf9, 0x3c, 0x0f, 0xcd, 0x00, 0x00, 0x0a, 0x41, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0x9d, 0x96, 0x77, 0x54, 0x53, 0xd9, 0x16, 0x87, 0xcf, 0xbd, 0x37, 0xbd, 0xd0, 0x12, 0x22, 0x20, 0x25, 0xf4, 0x1a, 0x7a, 0x09, 0x20, 0xd2, 0x3b, 0x48, 0x15, 0x04, 0x51, 0x89, 0x49, 0x80, 0x50, 0x02, 0x86, 0x84, 0x26, 0x76, 0x44, 0x05, 0x46, 0x14, 0x11, 0x29, 0x56, 0x64, 0x54, 0xc0, 0x01, 0x47, 0x87, 0x22, 0x63, 0x45, 0x14, 0x0b, 0x83, 0x82, 0x62, 0xd7, 0x09, 0xf2, 0x10, 0x50, 0xc6, 0xc1, 0x51, 0x44, 0x45, 0xe5, 0xdd, 0x8c, 0x6b, 0x09, 0xef, 0xad, 0x35, 0xf3, 0xde, 0x9a, 0xfd, 0xc7, 0x59, 0xdf, 0xd9, 0xe7, 0xb7, 0xd7, 0xd9, 0x67, 0xef, 0x7d, 0xd7, 0xba, 0x00, 0x50, 0xfc, 0x82, 0x04, 0xc2, 0x74, 0x58, 0x01, 0x80, 0x34, 0xa1, 0x58, 0x14, 0xee, 0xeb, 0xc1, 0x5c, 0x12, 0x13, 0xcb, 0xc4, 0xf7, 0x02, 0x18, 0x10, 0x01, 0x0e, 0x58, 0x01, 0xc0, 0xe1, 0x66, 0x66, 0x04, 0x47, 0xf8, 0x44, 0x02, 0xd4, 0xfc, 0xbd, 0x3d, 0x99, 0x99, 0xa8, 0x48, 0xc6, 0xb3, 0xf6, 0xee, 0x2e, 0x80, 0x64, 0xbb, 0xdb, 0x2c, 0xbf, 0x50, 0x26, 0x73, 0xd6, 0xff, 0x7f, 0x91, 0x22, 0x37, 0x43, 0x24, 0x06, 0x00, 0x0a, 0x45, 0xd5, 0x36, 0x3c, 0x7e, 0x26, 0x17, 0xe5, 0x02, 0x94, 0x53, 0xb3, 0xc5, 0x19, 0x32, 0xff, 0x04, 0xca, 0xf4, 0x95, 0x29, 0x32, 0x86, 0x31, 0x32, 0x16, 0xa1, 0x09, 0xa2, 0xac, 0x22, 0xe3, 0xc4, 0xaf, 0x6c, 0xf6, 0xa7, 0xe6, 0x2b, 0xbb, 0xc9, 0x98, 0x97, 0x26, 0xe4, 0xa1, 0x1a, 0x59, 0xce, 0x19, 0xbc, 0x34, 0x9e, 0x8c, 0xbb, 0x50, 0xde, 0x9a, 0x25, 0xe1, 0xa3, 0x8c, 0x04, 0xa1, 0x5c, 0x98, 0x25, 0xe0, 0x67, 0xa3, 0x7c, 0x07, 0x65, 0xbd, 0x54, 0x49, 0x9a, 0x00, 0xe5, 0xf7, 0x28, 0xd3, 0xd3, 0xf8, 0x9c, 0x4c, 0x00, 0x30, 0x14, 0x99, 0x5f, 0xcc, 0xe7, 0x26, 0xa1, 0x6c, 0x89, 0x32, 0x45, 0x14, 0x19, 0xee, 0x89, 0xf2, 0x02, 0x00, 0x08, 0x94, 0xc4, 0x39, 0xbc, 0x72, 0x0e, 0x8b, 0xf9, 0x39, 0x68, 0x9e, 0x00, 0x78, 0xa6, 0x67, 0xe4, 0x8a, 0x04, 0x89, 0x49, 0x62, 0xa6, 0x11, 0xd7, 0x98, 0x69, 0xe5, 0xe8, 0xc8, 0x66, 0xfa, 0xf1, 0xb3, 0x53, 0xf9, 0x62, 0x31, 0x2b, 0x94, 0xc3, 0x4d, 0xe1, 0x88, 0x78, 0x4c, 0xcf, 0xf4, 0xb4, 0x0c, 0x8e, 0x30, 0x17, 0x80, 0xaf, 0x6f, 0x96, 0x45, 0x01, 0x25, 0x59, 0x6d, 0x99, 0x68, 0x91, 0xed, 0xad, 0x1c, 0xed, 0xed, 0x59, 0xd6, 0xe6, 0x68, 0xf9, 0xbf, 0xd9, 0xdf, 0x1e, 0x7e, 0x53, 0xfd, 0x3d, 0xc8, 0x7a, 0xfb, 0x55, 0xf1, 0x26, 0xec, 0xcf, 0x9e, 0x41, 0x8c, 0x9e, 0x59, 0xdf, 0x6c, 0xec, 0xac, 0x2f, 0xbd, 0x16, 0x00, 0xf6, 0x24, 0x5a, 0x9b, 0x1d, 0xb3, 0xbe, 0x95, 0x55, 0x00, 0xb4, 0x6d, 0x06, 0x40, 0xe5, 0xe1, 0xac, 0x4f, 0xef, 0x20, 0x00, 0xf2, 0x05, 0x00, 0xb4, 0xde, 0x9c, 0xf3, 0x1e, 0x86, 0x6c, 0x5e, 0x92, 0xc4, 0xe2, 0x0c, 0x27, 0x0b, 0x8b, 0xec, 0xec, 0x6c, 0x73, 0x01, 0x9f, 0x6b, 0x2e, 0x2b, 0xe8, 0x37, 0xfb, 0x9f, 0x82, 0x6f, 0xca, 0xbf, 0x86, 0x39, 0xf7, 0x99, 0xcb, 0xee, 0xfb, 0x56, 0x3b, 0xa6, 0x17, 0x3f, 0x81, 0x23, 0x49, 0x15, 0x33, 0x65, 0x45, 0xe5, 0xa6, 0xa7, 0xa6, 0x4b, 0x44, 0xcc, 0xcc, 0x0c, 0x0e, 0x97, 0xcf, 0x64, 0xfd, 0xf7, 0x10, 0xff, 0xe3, 0xc0, 0x39, 0x69, 0xcd, 0xc9, 0xc3, 0x2c, 0x9c, 0x9f, 0xc0, 0x17, 0xf1, 0x85, 0xe8, 0x55, 0x51, 0xe8, 0x94, 0x09, 0x84, 0x89, 0x68, 0xbb, 0x85, 0x3c, 0x81, 0x58, 0x90, 0x2e, 0x64, 0x0a, 0x84, 0x7f, 0xd5, 0xe1, 0x7f, 0x18, 0x36, 0x27, 0x07, 0x19, 0x7e, 0x9d, 0x6b, 0x14, 0x68, 0x75, 0x5f, 0x00, 0x7d, 0x85, 0x39, 0x50, 0xb8, 0x49, 0x07, 0xc8, 0x6f, 0x3d, 0x00, 0x43, 0x23, 0x03, 0x24, 0x6e, 0x3f, 0x7a, 0x02, 0x7d, 0xeb, 0x5b, 0x10, 0x31, 0x0a, 0xc8, 0xbe, 0xbc, 0x68, 0xad, 0x91, 0xaf, 0x73, 0x8f, 0x32, 0x7a, 0xfe, 0xe7, 0xfa, 0x1f, 0x0b, 0x5c, 0x8a, 0x6e, 0xe1, 0x4c, 0x41, 0x22, 0x53, 0xe6, 0xf6, 0x0c, 0x8f, 0x64, 0x72, 0x25, 0xa2, 0x2c, 0x19, 0xa3, 0xdf, 0x84, 0x6c, 0xc1, 0x02, 0x12, 0x90, 0x07, 0x74, 0xa0, 0x0a, 0x34, 0x81, 0x2e, 0x30, 0x02, 0x2c, 0x60, 0x0d, 0x1c, 0x80, 0x33, 0x70, 0x03, 0xde, 0x20, 0x00, 0x84, 0x80, 0x48, 0x10, 0x03, 0x96, 0x03, 0x2e, 0x48, 0x02, 0x69, 0x40, 0x04, 0xb2, 0x41, 0x3e, 0xd8, 0x00, 0x0a, 0x41, 0x31, 0xd8, 0x01, 0x76, 0x83, 0x6a, 0x70, 0x00, 0xd4, 0x81, 0x7a, 0xd0, 0x04, 0x4e, 0x82, 0x36, 0x70, 0x06, 0x5c, 0x04, 0x57, 0xc0, 0x0d, 0x70, 0x0b, 0x0c, 0x80, 0x47, 0x40, 0x0a, 0x86, 0xc1, 0x4b, 0x30, 0x01, 0xde, 0x81, 0x69, 0x08, 0x82, 0xf0, 0x10, 0x15, 0xa2, 0x41, 0xaa, 0x90, 0x16, 0xa4, 0x0f, 0x99, 0x42, 0xd6, 0x10, 0x1b, 0x5a, 0x08, 0x79, 0x43, 0x41, 0x50, 0x38, 0x14, 0x03, 0xc5, 0x43, 0x89, 0x90, 0x10, 0x92, 0x40, 0xf9, 0xd0, 0x26, 0xa8, 0x18, 0x2a, 0x83, 0xaa, 0xa1, 0x43, 0x50, 0x3d, 0xf4, 0x23, 0x74, 0x1a, 0xba, 0x08, 0x5d, 0x83, 0xfa, 0xa0, 0x07, 0xd0, 0x20, 0x34, 0x06, 0xfd, 0x01, 0x7d, 0x84, 0x11, 0x98, 0x02, 0xd3, 0x61, 0x0d, 0xd8, 0x00, 0xb6, 0x80, 0xd9, 0xb0, 0x3b, 0x1c, 0x08, 0x47, 0xc2, 0xcb, 0xe0, 0x44, 0x78, 0x15, 0x9c, 0x07, 0x17, 0xc0, 0xdb, 0xe1, 0x4a, 0xb8, 0x16, 0x3e, 0x0e, 0xb7, 0xc2, 0x17, 0xe1, 0x1b, 0xf0, 0x00, 0x2c, 0x85, 0x5f, 0xc2, 0x93, 0x08, 0x40, 0xc8, 0x08, 0x03, 0xd1, 0x46, 0x58, 0x08, 0x1b, 0xf1, 0x44, 0x42, 0x90, 0x58, 0x24, 0x01, 0x11, 0x21, 0x6b, 0x91, 0x22, 0xa4, 0x02, 0xa9, 0x45, 0x9a, 0x90, 0x0e, 0xa4, 0x1b, 0xb9, 0x8d, 0x48, 0x91, 0x71, 0xe4, 0x03, 0x06, 0x87, 0xa1, 0x61, 0x98, 0x18, 0x16, 0xc6, 0x19, 0xe3, 0x87, 0x59, 0x8c, 0xe1, 0x62, 0x56, 0x61, 0xd6, 0x62, 0x4a, 0x30, 0xd5, 0x98, 0x63, 0x98, 0x56, 0x4c, 0x17, 0xe6, 0x36, 0x66, 0x10, 0x33, 0x81, 0xf9, 0x82, 0xa5, 0x62, 0xd5, 0xb1, 0xa6, 0x58, 0x27, 0xac, 0x3f, 0x76, 0x09, 0x36, 0x11, 0x9b, 0x8d, 0x2d, 0xc4, 0x56, 0x60, 0x8f, 0x60, 0x5b, 0xb0, 0x97, 0xb1, 0x03, 0xd8, 0x61, 0xec, 0x3b, 0x1c, 0x0e, 0xc7, 0xc0, 0x19, 0xe2, 0x1c, 0x70, 0x7e, 0xb8, 0x18, 0x5c, 0x32, 0x6e, 0x35, 0xae, 0x04, 0xb7, 0x0f, 0xd7, 0x8c, 0xbb, 0x80, 0xeb, 0xc3, 0x0d, 0xe1, 0x26, 0xf1, 0x78, 0xbc, 0x2a, 0xde, 0x14, 0xef, 0x82, 0x0f, 0xc1, 0x73, 0xf0, 0x62, 0x7c, 0x21, 0xbe, 0x0a, 0x7f, 0x1c, 0x7f, 0x1e, 0xdf, 0x8f, 0x1f, 0xc6, 0xbf, 0x27, 0x90, 0x09, 0x5a, 0x04, 0x6b, 0x82, 0x0f, 0x21, 0x96, 0x20, 0x24, 0x6c, 0x24, 0x54, 0x10, 0x1a, 0x08, 0xe7, 0x08, 0xfd, 0x84, 0x11, 0xc2, 0x34, 0x51, 0x81, 0xa8, 0x4f, 0x74, 0x22, 0x86, 0x10, 0x79, 0xc4, 0x5c, 0x62, 0x29, 0xb1, 0x8e, 0xd8, 0x41, 0xbc, 0x49, 0x1c, 0x26, 0x4e, 0x93, 0x14, 0x49, 0x86, 0x24, 0x17, 0x52, 0x24, 0x29, 0x99, 0xb4, 0x81, 0x54, 0x49, 0x6a, 0x22, 0x5d, 0x26, 0x3d, 0x26, 0xbd, 0x21, 0x93, 0xc9, 0x3a, 0x64, 0x47, 0x72, 0x18, 0x59, 0x40, 0x5e, 0x4f, 0xae, 0x24, 0x9f, 0x20, 0x5f, 0x25, 0x0f, 0x92, 0x3f, 0x50, 0x94, 0x28, 0x26, 0x14, 0x4f, 0x4a, 0x1c, 0x45, 0x42, 0xd9, 0x4e, 0x39, 0x4a, 0xb9, 0x40, 0x79, 0x40, 0x79, 0x43, 0xa5, 0x52, 0x0d, 0xa8, 0x6e, 0xd4, 0x58, 0xaa, 0x98, 0xba, 0x9d, 0x5a, 0x4f, 0xbd, 0x44, 0x7d, 0x4a, 0x7d, 0x2f, 0x47, 0x93, 0x33, 0x97, 0xf3, 0x97, 0xe3, 0xc9, 0xad, 0x93, 0xab, 0x91, 0x6b, 0x95, 0xeb, 0x97, 0x7b, 0x25, 0x4f, 0x94, 0xd7, 0x97, 0x77, 0x97, 0x5f, 0x2e, 0x9f, 0x27, 0x5f, 0x21, 0x7f, 0x4a, 0xfe, 0xa6, 0xfc, 0xb8, 0x02, 0x51, 0xc1, 0x40, 0xc1, 0x53, 0x81, 0xa3, 0xb0, 0x56, 0xa1, 0x46, 0xe1, 0xb4, 0xc2, 0x3d, 0x85, 0x49, 0x45, 0x9a, 0xa2, 0x95, 0x62, 0x88, 0x62, 0x9a, 0x62, 0x89, 0x62, 0x83, 0xe2, 0x35, 0xc5, 0x51, 0x25, 0xbc, 0x92, 0x81, 0x92, 0xb7, 0x12, 0x4f, 0xa9, 0x40, 0xe9, 0xb0, 0xd2, 0x25, 0xa5, 0x21, 0x1a, 0x42, 0xd3, 0xa5, 0x79, 0xd2, 0xb8, 0xb4, 0x4d, 0xb4, 0x3a, 0xda, 0x65, 0xda, 0x30, 0x1d, 0x47, 0x37, 0xa4, 0xfb, 0xd3, 0x93, 0xe9, 0xc5, 0xf4, 0x1f, 0xe8, 0xbd, 0xf4, 0x09, 0x65, 0x25, 0x65, 0x5b, 0xe5, 0x28, 0xe5, 0x1c, 0xe5, 0x1a, 0xe5, 0xb3, 0xca, 0x52, 0x06, 0xc2, 0x30, 0x60, 0xf8, 0x33, 0x52, 0x19, 0xa5, 0x8c, 0x93, 0x8c, 0xbb, 0x8c, 0x8f, 0xf3, 0x34, 0xe6, 0xb9, 0xcf, 0xe3, 0xcf, 0xdb, 0x36, 0xaf, 0x69, 0x5e, 0xff, 0xbc, 0x29, 0x95, 0xf9, 0x2a, 0x6e, 0x2a, 0x7c, 0x95, 0x22, 0x95, 0x66, 0x95, 0x01, 0x95, 0x8f, 0xaa, 0x4c, 0x55, 0x6f, 0xd5, 0x14, 0xd5, 0x9d, 0xaa, 0x6d, 0xaa, 0x4f, 0xd4, 0x30, 0x6a, 0x26, 0x6a, 0x61, 0x6a, 0xd9, 0x6a, 0xfb, 0xd5, 0x2e, 0xab, 0x8d, 0xcf, 0xa7, 0xcf, 0x77, 0x9e, 0xcf, 0x9d, 0x5f, 0x34, 0xff, 0xe4, 0xfc, 0x87, 0xea, 0xb0, 0xba, 0x89, 0x7a, 0xb8, 0xfa, 0x6a, 0xf5, 0xc3, 0xea, 0x3d, 0xea, 0x93, 0x1a, 0x9a, 0x1a, 0xbe, 0x1a, 0x19, 0x1a, 0x55, 0x1a, 0x97, 0x34, 0xc6, 0x35, 0x19, 0x9a, 0x6e, 0x9a, 0xc9, 0x9a, 0xe5, 0x9a, 0xe7, 0x34, 0xc7, 0xb4, 0x68, 0x5a, 0x0b, 0xb5, 0x04, 0x5a, 0xe5, 0x5a, 0xe7, 0xb5, 0x5e, 0x30, 0x95, 0x99, 0xee, 0xcc, 0x54, 0x66, 0x25, 0xb3, 0x8b, 0x39, 0xa1, 0xad, 0xae, 0xed, 0xa7, 0x2d, 0xd1, 0x3e, 0xa4, 0xdd, 0xab, 0x3d, 0xad, 0x63, 0xa8, 0xb3, 0x58, 0x67, 0xa3, 0x4e, 0xb3, 0xce, 0x13, 0x5d, 0x92, 0x2e, 0x5b, 0x37, 0x41, 0xb7, 0x5c, 0xb7, 0x53, 0x77, 0x42, 0x4f, 0x4b, 0x2f, 0x58, 0x2f, 0x5f, 0xaf, 0x51, 0xef, 0xa1, 0x3e, 0x51, 0x9f, 0xad, 0x9f, 0xa4, 0xbf, 0x47, 0xbf, 0x5b, 0x7f, 0xca, 0xc0, 0xd0, 0x20, 0xda, 0x60, 0x8b, 0x41, 0x9b, 0xc1, 0xa8, 0xa1, 0x8a, 0xa1, 0xbf, 0x61, 0x9e, 0x61, 0xa3, 0xe1, 0x63, 0x23, 0xaa, 0x91, 0xab, 0xd1, 0x2a, 0xa3, 0x5a, 0xa3, 0x3b, 0xc6, 0x38, 0x63, 0xb6, 0x71, 0x8a, 0xf1, 0x3e, 0xe3, 0x5b, 0x26, 0xb0, 0x89, 0x9d, 0x49, 0x92, 0x49, 0x8d, 0xc9, 0x4d, 0x53, 0xd8, 0xd4, 0xde, 0x54, 0x60, 0xba, 0xcf, 0xb4, 0xcf, 0x0c, 0x6b, 0xe6, 0x68, 0x26, 0x34, 0xab, 0x35, 0xbb, 0xc7, 0xa2, 0xb0, 0xdc, 0x59, 0x59, 0xac, 0x46, 0xd6, 0xa0, 0x39, 0xc3, 0x3c, 0xc8, 0x7c, 0xa3, 0x79, 0x9b, 0xf9, 0x2b, 0x0b, 0x3d, 0x8b, 0x58, 0x8b, 0x9d, 0x16, 0xdd, 0x16, 0x5f, 0x2c, 0xed, 0x2c, 0x53, 0x2d, 0xeb, 0x2c, 0x1f, 0x59, 0x29, 0x59, 0x05, 0x58, 0x6d, 0xb4, 0xea, 0xb0, 0xfa, 0xc3, 0xda, 0xc4, 0x9a, 0x6b, 0x5d, 0x63, 0x7d, 0xc7, 0x86, 0x6a, 0xe3, 0x63, 0xb3, 0xce, 0xa6, 0xdd, 0xe6, 0xb5, 0xad, 0xa9, 0x2d, 0xdf, 0x76, 0xbf, 0xed, 0x7d, 0x3b, 0x9a, 0x5d, 0xb0, 0xdd, 0x16, 0xbb, 0x4e, 0xbb, 0xcf, 0xf6, 0x0e, 0xf6, 0x22, 0xfb, 0x26, 0xfb, 0x31, 0x07, 0x3d, 0x87, 0x78, 0x87, 0xbd, 0x0e, 0xf7, 0xd8, 0x74, 0x76, 0x28, 0xbb, 0x84, 0x7d, 0xd5, 0x11, 0xeb, 0xe8, 0xe1, 0xb8, 0xce, 0xf1, 0x8c, 0xe3, 0x07, 0x27, 0x7b, 0x27, 0xb1, 0xd3, 0x49, 0xa7, 0xdf, 0x9d, 0x59, 0xce, 0x29, 0xce, 0x0d, 0xce, 0xa3, 0x0b, 0x0c, 0x17, 0xf0, 0x17, 0xd4, 0x2d, 0x18, 0x72, 0xd1, 0x71, 0xe1, 0xb8, 0x1c, 0x72, 0x91, 0x2e, 0x64, 0x2e, 0x8c, 0x5f, 0x78, 0x70, 0xa1, 0xd4, 0x55, 0xdb, 0x95, 0xe3, 0x5a, 0xeb, 0xfa, 0xcc, 0x4d, 0xd7, 0x8d, 0xe7, 0x76, 0xc4, 0x6d, 0xc4, 0xdd, 0xd8, 0x3d, 0xd9, 0xfd, 0xb8, 0xfb, 0x2b, 0x0f, 0x4b, 0x0f, 0x91, 0x47, 0x8b, 0xc7, 0x94, 0xa7, 0x93, 0xe7, 0x1a, 0xcf, 0x0b, 0x5e, 0x88, 0x97, 0xaf, 0x57, 0x91, 0x57, 0xaf, 0xb7, 0x92, 0xf7, 0x62, 0xef, 0x6a, 0xef, 0xa7, 0x3e, 0x3a, 0x3e, 0x89, 0x3e, 0x8d, 0x3e, 0x13, 0xbe, 0x76, 0xbe, 0xab, 0x7d, 0x2f, 0xf8, 0x61, 0xfd, 0x02, 0xfd, 0x76, 0xfa, 0xdd, 0xf3, 0xd7, 0xf0, 0xe7, 0xfa, 0xd7, 0xfb, 0x4f, 0x04, 0x38, 0x04, 0xac, 0x09, 0xe8, 0x0a, 0xa4, 0x04, 0x46, 0x04, 0x56, 0x07, 0x3e, 0x0b, 0x32, 0x09, 0x12, 0x05, 0x75, 0x04, 0xc3, 0xc1, 0x01, 0xc1, 0xbb, 0x82, 0x1f, 0x2f, 0xd2, 0x5f, 0x24, 0x5c, 0xd4, 0x16, 0x02, 0x42, 0xfc, 0x43, 0x76, 0x85, 0x3c, 0x09, 0x35, 0x0c, 0x5d, 0x15, 0xfa, 0x73, 0x18, 0x2e, 0x2c, 0x34, 0xac, 0x26, 0xec, 0x79, 0xb8, 0x55, 0x78, 0x7e, 0x78, 0x77, 0x04, 0x2d, 0x62, 0x45, 0x44, 0x43, 0xc4, 0xbb, 0x48, 0x8f, 0xc8, 0xd2, 0xc8, 0x47, 0x8b, 0x8d, 0x16, 0x4b, 0x16, 0x77, 0x46, 0xc9, 0x47, 0xc5, 0x45, 0xd5, 0x47, 0x4d, 0x45, 0x7b, 0x45, 0x97, 0x45, 0x4b, 0x97, 0x58, 0x2c, 0x59, 0xb3, 0xe4, 0x46, 0x8c, 0x5a, 0x8c, 0x20, 0xa6, 0x3d, 0x16, 0x1f, 0x1b, 0x15, 0x7b, 0x24, 0x76, 0x72, 0xa9, 0xf7, 0xd2, 0xdd, 0x4b, 0x87, 0xe3, 0xec, 0xe2, 0x0a, 0xe3, 0xee, 0x2e, 0x33, 0x5c, 0x96, 0xb3, 0xec, 0xda, 0x72, 0xb5, 0xe5, 0xa9, 0xcb, 0xcf, 0xae, 0x90, 0x5f, 0xc1, 0x59, 0x71, 0x2a, 0x1e, 0x1b, 0x1f, 0x1d, 0xdf, 0x10, 0xff, 0x89, 0x13, 0xc2, 0xa9, 0xe5, 0x4c, 0xae, 0xf4, 0x5f, 0xb9, 0x77, 0xe5, 0x04, 0xd7, 0x93, 0xbb, 0x87, 0xfb, 0x92, 0xe7, 0xc6, 0x2b, 0xe7, 0x8d, 0xf1, 0x5d, 0xf8, 0x65, 0xfc, 0x91, 0x04, 0x97, 0x84, 0xb2, 0x84, 0xd1, 0x44, 0x97, 0xc4, 0x5d, 0x89, 0x63, 0x49, 0xae, 0x49, 0x15, 0x49, 0xe3, 0x02, 0x4f, 0x41, 0xb5, 0xe0, 0x75, 0xb2, 0x5f, 0xf2, 0x81, 0xe4, 0xa9, 0x94, 0x90, 0x94, 0xa3, 0x29, 0x33, 0xa9, 0xd1, 0xa9, 0xcd, 0x69, 0x84, 0xb4, 0xf8, 0xb4, 0xd3, 0x42, 0x25, 0x61, 0x8a, 0xb0, 0x2b, 0x5d, 0x33, 0x3d, 0x27, 0xbd, 0x2f, 0xc3, 0x34, 0xa3, 0x30, 0x43, 0xba, 0xca, 0x69, 0xd5, 0xee, 0x55, 0x13, 0xa2, 0x40, 0xd1, 0x91, 0x4c, 0x28, 0x73, 0x59, 0x66, 0xbb, 0x98, 0x8e, 0xfe, 0x4c, 0xf5, 0x48, 0x8c, 0x24, 0x9b, 0x25, 0x83, 0x59, 0x0b, 0xb3, 0x6a, 0xb2, 0xde, 0x67, 0x47, 0x65, 0x9f, 0xca, 0x51, 0xcc, 0x11, 0xe6, 0xf4, 0xe4, 0x9a, 0xe4, 0x6e, 0xcb, 0x1d, 0xc9, 0xf3, 0xc9, 0xfb, 0x7e, 0x35, 0x66, 0x35, 0x77, 0x75, 0x67, 0xbe, 0x76, 0xfe, 0x86, 0xfc, 0xc1, 0x35, 0xee, 0x6b, 0x0e, 0xad, 0x85, 0xd6, 0xae, 0x5c, 0xdb, 0xb9, 0x4e, 0x77, 0x5d, 0xc1, 0xba, 0xe1, 0xf5, 0xbe, 0xeb, 0x8f, 0x6d, 0x20, 0x6d, 0x48, 0xd9, 0xf0, 0xcb, 0x46, 0xcb, 0x8d, 0x65, 0x1b, 0xdf, 0x6e, 0x8a, 0xde, 0xd4, 0x51, 0xa0, 0x51, 0xb0, 0xbe, 0x60, 0x68, 0xb3, 0xef, 0xe6, 0xc6, 0x42, 0xb9, 0x42, 0x51, 0xe1, 0xbd, 0x2d, 0xce, 0x5b, 0x0e, 0x6c, 0xc5, 0x6c, 0x15, 0x6c, 0xed, 0xdd, 0x66, 0xb3, 0xad, 0x6a, 0xdb, 0x97, 0x22, 0x5e, 0xd1, 0xf5, 0x62, 0xcb, 0xe2, 0x8a, 0xe2, 0x4f, 0x25, 0xdc, 0x92, 0xeb, 0xdf, 0x59, 0x7d, 0x57, 0xf9, 0xdd, 0xcc, 0xf6, 0x84, 0xed, 0xbd, 0xa5, 0xf6, 0xa5, 0xfb, 0x77, 0xe0, 0x76, 0x08, 0x77, 0xdc, 0xdd, 0xe9, 0xba, 0xf3, 0x58, 0x99, 0x62, 0x59, 0x5e, 0xd9, 0xd0, 0xae, 0xe0, 0x5d, 0xad, 0xe5, 0xcc, 0xf2, 0xa2, 0xf2, 0xb7, 0xbb, 0x57, 0xec, 0xbe, 0x56, 0x61, 0x5b, 0x71, 0x60, 0x0f, 0x69, 0x8f, 0x64, 0x8f, 0xb4, 0x32, 0xa8, 0xb2, 0xbd, 0x4a, 0xaf, 0x6a, 0x47, 0xd5, 0xa7, 0xea, 0xa4, 0xea, 0x81, 0x1a, 0x8f, 0x9a, 0xe6, 0xbd, 0xea, 0x7b, 0xb7, 0xed, 0x9d, 0xda, 0xc7, 0xdb, 0xd7, 0xbf, 0xdf, 0x6d, 0x7f, 0xd3, 0x01, 0x8d, 0x03, 0xc5, 0x07, 0x3e, 0x1e, 0x14, 0x1c, 0xbc, 0x7f, 0xc8, 0xf7, 0x50, 0x6b, 0xad, 0x41, 0x6d, 0xc5, 0x61, 0xdc, 0xe1, 0xac, 0xc3, 0xcf, 0xeb, 0xa2, 0xea, 0xba, 0xbf, 0x67, 0x7f, 0x5f, 0x7f, 0x44, 0xed, 0x48, 0xf1, 0x91, 0xcf, 0x47, 0x85, 0x47, 0xa5, 0xc7, 0xc2, 0x8f, 0x75, 0xd5, 0x3b, 0xd4, 0xd7, 0x37, 0xa8, 0x37, 0x94, 0x36, 0xc2, 0x8d, 0x92, 0xc6, 0xb1, 0xe3, 0x71, 0xc7, 0x6f, 0xfd, 0xe0, 0xf5, 0x43, 0x7b, 0x13, 0xab, 0xe9, 0x50, 0x33, 0xa3, 0xb9, 0xf8, 0x04, 0x38, 0x21, 0x39, 0xf1, 0xe2, 0xc7, 0xf8, 0x1f, 0xef, 0x9e, 0x0c, 0x3c, 0xd9, 0x79, 0x8a, 0x7d, 0xaa, 0xe9, 0x27, 0xfd, 0x9f, 0xf6, 0xb6, 0xd0, 0x5a, 0x8a, 0x5a, 0xa1, 0xd6, 0xdc, 0xd6, 0x89, 0xb6, 0xa4, 0x36, 0x69, 0x7b, 0x4c, 0x7b, 0xdf, 0xe9, 0x80, 0xd3, 0x9d, 0x1d, 0xce, 0x1d, 0x2d, 0x3f, 0x9b, 0xff, 0x7c, 0xf4, 0x8c, 0xf6, 0x99, 0x9a, 0xb3, 0xca, 0x67, 0x4b, 0xcf, 0x91, 0xce, 0x15, 0x9c, 0x9b, 0x39, 0x9f, 0x77, 0x7e, 0xf2, 0x42, 0xc6, 0x85, 0xf1, 0x8b, 0x89, 0x17, 0x87, 0x3a, 0x57, 0x74, 0x3e, 0xba, 0xb4, 0xe4, 0xd2, 0x9d, 0xae, 0xb0, 0xae, 0xde, 0xcb, 0x81, 0x97, 0xaf, 0x5e, 0xf1, 0xb9, 0x72, 0xa9, 0xdb, 0xbd, 0xfb, 0xfc, 0x55, 0x97, 0xab, 0x67, 0xae, 0x39, 0x5d, 0x3b, 0x7d, 0x9d, 0x7d, 0xbd, 0xed, 0x86, 0xfd, 0x8d, 0xd6, 0x1e, 0xbb, 0x9e, 0x96, 0x5f, 0xec, 0x7e, 0x69, 0xe9, 0xb5, 0xef, 0x6d, 0xbd, 0xe9, 0x70, 0xb3, 0xfd, 0x96, 0xe3, 0xad, 0x8e, 0xbe, 0x05, 0x7d, 0xe7, 0xfa, 0x5d, 0xfb, 0x2f, 0xde, 0xf6, 0xba, 0x7d, 0xe5, 0x8e, 0xff, 0x9d, 0x1b, 0x03, 0x8b, 0x06, 0xfa, 0xee, 0x2e, 0xbe, 0x7b, 0xff, 0x5e, 0xdc, 0x3d, 0xe9, 0x7d, 0xde, 0xfd, 0xd1, 0x07, 0xa9, 0x0f, 0x5e, 0x3f, 0xcc, 0x7a, 0x38, 0xfd, 0x68, 0xfd, 0x63, 0xec, 0xe3, 0xa2, 0x27, 0x0a, 0x4f, 0x2a, 0x9e, 0xaa, 0x3f, 0xad, 0xfd, 0xd5, 0xf8, 0xd7, 0x66, 0xa9, 0xbd, 0xf4, 0xec, 0xa0, 0xd7, 0x60, 0xcf, 0xb3, 0x88, 0x67, 0x8f, 0x86, 0xb8, 0x43, 0x2f, 0xff, 0x95, 0xf9, 0xaf, 0x4f, 0xc3, 0x05, 0xcf, 0xa9, 0xcf, 0x2b, 0x46, 0xb4, 0x46, 0xea, 0x47, 0xad, 0x47, 0xcf, 0x8c, 0xf9, 0x8c, 0xdd, 0x7a, 0xb1, 0xf4, 0xc5, 0xf0, 0xcb, 0x8c, 0x97, 0xd3, 0xe3, 0x85, 0xbf, 0x29, 0xfe, 0xb6, 0xf7, 0x95, 0xd1, 0xab, 0x9f, 0x7e, 0x77, 0xfb, 0xbd, 0x67, 0x62, 0xc9, 0xc4, 0xf0, 0x6b, 0xd1, 0xeb, 0x99, 0x3f, 0x4a, 0xde, 0xa8, 0xbe, 0x39, 0xfa, 0xd6, 0xf6, 0x6d, 0xe7, 0x64, 0xe8, 0xe4, 0xd3, 0x77, 0x69, 0xef, 0xa6, 0xa7, 0x8a, 0xde, 0xab, 0xbe, 0x3f, 0xf6, 0x81, 0xfd, 0xa1, 0xfb, 0x63, 0xf4, 0xc7, 0x91, 0xe9, 0xec, 0x4f, 0xf8, 0x4f, 0x95, 0x9f, 0x8d, 0x3f, 0x77, 0x7c, 0x09, 0xfc, 0xf2, 0x78, 0x26, 0x6d, 0x66, 0xe6, 0xdf, 0xf7, 0x84, 0xf3, 0xfb, 0x32, 0x3a, 0x59, 0x7e, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa4, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x34, 0x2d, 0x30, 0x35, 0x2d, 0x30, 0x32, 0x54, 0x31, 0x31, 0x3a, 0x30, 0x35, 0x3a, 0x35, 0x35, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc0, 0x10, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x10, 0x49, 0x44, 0x41, 0x54, 0x08, 0x1d, 0x63, 0x60, 0x60, 0x60, 0xf8, 0x0f, 0xc4, 0x70, 0x00, 0x00, 0x0d, 0x04, 0x01, 0x00, 0x65, 0x59, 0x09, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXHierarchyIndentPattern2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0xe3, 0x00, 0xef, 0x43, 0x00, 0x00, 0x0a, 0x41, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0x9d, 0x96, 0x77, 0x54, 0x53, 0xd9, 0x16, 0x87, 0xcf, 0xbd, 0x37, 0xbd, 0xd0, 0x12, 0x22, 0x20, 0x25, 0xf4, 0x1a, 0x7a, 0x09, 0x20, 0xd2, 0x3b, 0x48, 0x15, 0x04, 0x51, 0x89, 0x49, 0x80, 0x50, 0x02, 0x86, 0x84, 0x26, 0x76, 0x44, 0x05, 0x46, 0x14, 0x11, 0x29, 0x56, 0x64, 0x54, 0xc0, 0x01, 0x47, 0x87, 0x22, 0x63, 0x45, 0x14, 0x0b, 0x83, 0x82, 0x62, 0xd7, 0x09, 0xf2, 0x10, 0x50, 0xc6, 0xc1, 0x51, 0x44, 0x45, 0xe5, 0xdd, 0x8c, 0x6b, 0x09, 0xef, 0xad, 0x35, 0xf3, 0xde, 0x9a, 0xfd, 0xc7, 0x59, 0xdf, 0xd9, 0xe7, 0xb7, 0xd7, 0xd9, 0x67, 0xef, 0x7d, 0xd7, 0xba, 0x00, 0x50, 0xfc, 0x82, 0x04, 0xc2, 0x74, 0x58, 0x01, 0x80, 0x34, 0xa1, 0x58, 0x14, 0xee, 0xeb, 0xc1, 0x5c, 0x12, 0x13, 0xcb, 0xc4, 0xf7, 0x02, 0x18, 0x10, 0x01, 0x0e, 0x58, 0x01, 0xc0, 0xe1, 0x66, 0x66, 0x04, 0x47, 0xf8, 0x44, 0x02, 0xd4, 0xfc, 0xbd, 0x3d, 0x99, 0x99, 0xa8, 0x48, 0xc6, 0xb3, 0xf6, 0xee, 0x2e, 0x80, 0x64, 0xbb, 0xdb, 0x2c, 0xbf, 0x50, 0x26, 0x73, 0xd6, 0xff, 0x7f, 0x91, 0x22, 0x37, 0x43, 0x24, 0x06, 0x00, 0x0a, 0x45, 0xd5, 0x36, 0x3c, 0x7e, 0x26, 0x17, 0xe5, 0x02, 0x94, 0x53, 0xb3, 0xc5, 0x19, 0x32, 0xff, 0x04, 0xca, 0xf4, 0x95, 0x29, 0x32, 0x86, 0x31, 0x32, 0x16, 0xa1, 0x09, 0xa2, 0xac, 0x22, 0xe3, 0xc4, 0xaf, 0x6c, 0xf6, 0xa7, 0xe6, 0x2b, 0xbb, 0xc9, 0x98, 0x97, 0x26, 0xe4, 0xa1, 0x1a, 0x59, 0xce, 0x19, 0xbc, 0x34, 0x9e, 0x8c, 0xbb, 0x50, 0xde, 0x9a, 0x25, 0xe1, 0xa3, 0x8c, 0x04, 0xa1, 0x5c, 0x98, 0x25, 0xe0, 0x67, 0xa3, 0x7c, 0x07, 0x65, 0xbd, 0x54, 0x49, 0x9a, 0x00, 0xe5, 0xf7, 0x28, 0xd3, 0xd3, 0xf8, 0x9c, 0x4c, 0x00, 0x30, 0x14, 0x99, 0x5f, 0xcc, 0xe7, 0x26, 0xa1, 0x6c, 0x89, 0x32, 0x45, 0x14, 0x19, 0xee, 0x89, 0xf2, 0x02, 0x00, 0x08, 0x94, 0xc4, 0x39, 0xbc, 0x72, 0x0e, 0x8b, 0xf9, 0x39, 0x68, 0x9e, 0x00, 0x78, 0xa6, 0x67, 0xe4, 0x8a, 0x04, 0x89, 0x49, 0x62, 0xa6, 0x11, 0xd7, 0x98, 0x69, 0xe5, 0xe8, 0xc8, 0x66, 0xfa, 0xf1, 0xb3, 0x53, 0xf9, 0x62, 0x31, 0x2b, 0x94, 0xc3, 0x4d, 0xe1, 0x88, 0x78, 0x4c, 0xcf, 0xf4, 0xb4, 0x0c, 0x8e, 0x30, 0x17, 0x80, 0xaf, 0x6f, 0x96, 0x45, 0x01, 0x25, 0x59, 0x6d, 0x99, 0x68, 0x91, 0xed, 0xad, 0x1c, 0xed, 0xed, 0x59, 0xd6, 0xe6, 0x68, 0xf9, 0xbf, 0xd9, 0xdf, 0x1e, 0x7e, 0x53, 0xfd, 0x3d, 0xc8, 0x7a, 0xfb, 0x55, 0xf1, 0x26, 0xec, 0xcf, 0x9e, 0x41, 0x8c, 0x9e, 0x59, 0xdf, 0x6c, 0xec, 0xac, 0x2f, 0xbd, 0x16, 0x00, 0xf6, 0x24, 0x5a, 0x9b, 0x1d, 0xb3, 0xbe, 0x95, 0x55, 0x00, 0xb4, 0x6d, 0x06, 0x40, 0xe5, 0xe1, 0xac, 0x4f, 0xef, 0x20, 0x00, 0xf2, 0x05, 0x00, 0xb4, 0xde, 0x9c, 0xf3, 0x1e, 0x86, 0x6c, 0x5e, 0x92, 0xc4, 0xe2, 0x0c, 0x27, 0x0b, 0x8b, 0xec, 0xec, 0x6c, 0x73, 0x01, 0x9f, 0x6b, 0x2e, 0x2b, 0xe8, 0x37, 0xfb, 0x9f, 0x82, 0x6f, 0xca, 0xbf, 0x86, 0x39, 0xf7, 0x99, 0xcb, 0xee, 0xfb, 0x56, 0x3b, 0xa6, 0x17, 0x3f, 0x81, 0x23, 0x49, 0x15, 0x33, 0x65, 0x45, 0xe5, 0xa6, 0xa7, 0xa6, 0x4b, 0x44, 0xcc, 0xcc, 0x0c, 0x0e, 0x97, 0xcf, 0x64, 0xfd, 0xf7, 0x10, 0xff, 0xe3, 0xc0, 0x39, 0x69, 0xcd, 0xc9, 0xc3, 0x2c, 0x9c, 0x9f, 0xc0, 0x17, 0xf1, 0x85, 0xe8, 0x55, 0x51, 0xe8, 0x94, 0x09, 0x84, 0x89, 0x68, 0xbb, 0x85, 0x3c, 0x81, 0x58, 0x90, 0x2e, 0x64, 0x0a, 0x84, 0x7f, 0xd5, 0xe1, 0x7f, 0x18, 0x36, 0x27, 0x07, 0x19, 0x7e, 0x9d, 0x6b, 0x14, 0x68, 0x75, 0x5f, 0x00, 0x7d, 0x85, 0x39, 0x50, 0xb8, 0x49, 0x07, 0xc8, 0x6f, 0x3d, 0x00, 0x43, 0x23, 0x03, 0x24, 0x6e, 0x3f, 0x7a, 0x02, 0x7d, 0xeb, 0x5b, 0x10, 0x31, 0x0a, 0xc8, 0xbe, 0xbc, 0x68, 0xad, 0x91, 0xaf, 0x73, 0x8f, 0x32, 0x7a, 0xfe, 0xe7, 0xfa, 0x1f, 0x0b, 0x5c, 0x8a, 0x6e, 0xe1, 0x4c, 0x41, 0x22, 0x53, 0xe6, 0xf6, 0x0c, 0x8f, 0x64, 0x72, 0x25, 0xa2, 0x2c, 0x19, 0xa3, 0xdf, 0x84, 0x6c, 0xc1, 0x02, 0x12, 0x90, 0x07, 0x74, 0xa0, 0x0a, 0x34, 0x81, 0x2e, 0x30, 0x02, 0x2c, 0x60, 0x0d, 0x1c, 0x80, 0x33, 0x70, 0x03, 0xde, 0x20, 0x00, 0x84, 0x80, 0x48, 0x10, 0x03, 0x96, 0x03, 0x2e, 0x48, 0x02, 0x69, 0x40, 0x04, 0xb2, 0x41, 0x3e, 0xd8, 0x00, 0x0a, 0x41, 0x31, 0xd8, 0x01, 0x76, 0x83, 0x6a, 0x70, 0x00, 0xd4, 0x81, 0x7a, 0xd0, 0x04, 0x4e, 0x82, 0x36, 0x70, 0x06, 0x5c, 0x04, 0x57, 0xc0, 0x0d, 0x70, 0x0b, 0x0c, 0x80, 0x47, 0x40, 0x0a, 0x86, 0xc1, 0x4b, 0x30, 0x01, 0xde, 0x81, 0x69, 0x08, 0x82, 0xf0, 0x10, 0x15, 0xa2, 0x41, 0xaa, 0x90, 0x16, 0xa4, 0x0f, 0x99, 0x42, 0xd6, 0x10, 0x1b, 0x5a, 0x08, 0x79, 0x43, 0x41, 0x50, 0x38, 0x14, 0x03, 0xc5, 0x43, 0x89, 0x90, 0x10, 0x92, 0x40, 0xf9, 0xd0, 0x26, 0xa8, 0x18, 0x2a, 0x83, 0xaa, 0xa1, 0x43, 0x50, 0x3d, 0xf4, 0x23, 0x74, 0x1a, 0xba, 0x08, 0x5d, 0x83, 0xfa, 0xa0, 0x07, 0xd0, 0x20, 0x34, 0x06, 0xfd, 0x01, 0x7d, 0x84, 0x11, 0x98, 0x02, 0xd3, 0x61, 0x0d, 0xd8, 0x00, 0xb6, 0x80, 0xd9, 0xb0, 0x3b, 0x1c, 0x08, 0x47, 0xc2, 0xcb, 0xe0, 0x44, 0x78, 0x15, 0x9c, 0x07, 0x17, 0xc0, 0xdb, 0xe1, 0x4a, 0xb8, 0x16, 0x3e, 0x0e, 0xb7, 0xc2, 0x17, 0xe1, 0x1b, 0xf0, 0x00, 0x2c, 0x85, 0x5f, 0xc2, 0x93, 0x08, 0x40, 0xc8, 0x08, 0x03, 0xd1, 0x46, 0x58, 0x08, 0x1b, 0xf1, 0x44, 0x42, 0x90, 0x58, 0x24, 0x01, 0x11, 0x21, 0x6b, 0x91, 0x22, 0xa4, 0x02, 0xa9, 0x45, 0x9a, 0x90, 0x0e, 0xa4, 0x1b, 0xb9, 0x8d, 0x48, 0x91, 0x71, 0xe4, 0x03, 0x06, 0x87, 0xa1, 0x61, 0x98, 0x18, 0x16, 0xc6, 0x19, 0xe3, 0x87, 0x59, 0x8c, 0xe1, 0x62, 0x56, 0x61, 0xd6, 0x62, 0x4a, 0x30, 0xd5, 0x98, 0x63, 0x98, 0x56, 0x4c, 0x17, 0xe6, 0x36, 0x66, 0x10, 0x33, 0x81, 0xf9, 0x82, 0xa5, 0x62, 0xd5, 0xb1, 0xa6, 0x58, 0x27, 0xac, 0x3f, 0x76, 0x09, 0x36, 0x11, 0x9b, 0x8d, 0x2d, 0xc4, 0x56, 0x60, 0x8f, 0x60, 0x5b, 0xb0, 0x97, 0xb1, 0x03, 0xd8, 0x61, 0xec, 0x3b, 0x1c, 0x0e, 0xc7, 0xc0, 0x19, 0xe2, 0x1c, 0x70, 0x7e, 0xb8, 0x18, 0x5c, 0x32, 0x6e, 0x35, 0xae, 0x04, 0xb7, 0x0f, 0xd7, 0x8c, 0xbb, 0x80, 0xeb, 0xc3, 0x0d, 0xe1, 0x26, 0xf1, 0x78, 0xbc, 0x2a, 0xde, 0x14, 0xef, 0x82, 0x0f, 0xc1, 0x73, 0xf0, 0x62, 0x7c, 0x21, 0xbe, 0x0a, 0x7f, 0x1c, 0x7f, 0x1e, 0xdf, 0x8f, 0x1f, 0xc6, 0xbf, 0x27, 0x90, 0x09, 0x5a, 0x04, 0x6b, 0x82, 0x0f, 0x21, 0x96, 0x20, 0x24, 0x6c, 0x24, 0x54, 0x10, 0x1a, 0x08, 0xe7, 0x08, 0xfd, 0x84, 0x11, 0xc2, 0x34, 0x51, 0x81, 0xa8, 0x4f, 0x74, 0x22, 0x86, 0x10, 0x79, 0xc4, 0x5c, 0x62, 0x29, 0xb1, 0x8e, 0xd8, 0x41, 0xbc, 0x49, 0x1c, 0x26, 0x4e, 0x93, 0x14, 0x49, 0x86, 0x24, 0x17, 0x52, 0x24, 0x29, 0x99, 0xb4, 0x81, 0x54, 0x49, 0x6a, 0x22, 0x5d, 0x26, 0x3d, 0x26, 0xbd, 0x21, 0x93, 0xc9, 0x3a, 0x64, 0x47, 0x72, 0x18, 0x59, 0x40, 0x5e, 0x4f, 0xae, 0x24, 0x9f, 0x20, 0x5f, 0x25, 0x0f, 0x92, 0x3f, 0x50, 0x94, 0x28, 0x26, 0x14, 0x4f, 0x4a, 0x1c, 0x45, 0x42, 0xd9, 0x4e, 0x39, 0x4a, 0xb9, 0x40, 0x79, 0x40, 0x79, 0x43, 0xa5, 0x52, 0x0d, 0xa8, 0x6e, 0xd4, 0x58, 0xaa, 0x98, 0xba, 0x9d, 0x5a, 0x4f, 0xbd, 0x44, 0x7d, 0x4a, 0x7d, 0x2f, 0x47, 0x93, 0x33, 0x97, 0xf3, 0x97, 0xe3, 0xc9, 0xad, 0x93, 0xab, 0x91, 0x6b, 0x95, 0xeb, 0x97, 0x7b, 0x25, 0x4f, 0x94, 0xd7, 0x97, 0x77, 0x97, 0x5f, 0x2e, 0x9f, 0x27, 0x5f, 0x21, 0x7f, 0x4a, 0xfe, 0xa6, 0xfc, 0xb8, 0x02, 0x51, 0xc1, 0x40, 0xc1, 0x53, 0x81, 0xa3, 0xb0, 0x56, 0xa1, 0x46, 0xe1, 0xb4, 0xc2, 0x3d, 0x85, 0x49, 0x45, 0x9a, 0xa2, 0x95, 0x62, 0x88, 0x62, 0x9a, 0x62, 0x89, 0x62, 0x83, 0xe2, 0x35, 0xc5, 0x51, 0x25, 0xbc, 0x92, 0x81, 0x92, 0xb7, 0x12, 0x4f, 0xa9, 0x40, 0xe9, 0xb0, 0xd2, 0x25, 0xa5, 0x21, 0x1a, 0x42, 0xd3, 0xa5, 0x79, 0xd2, 0xb8, 0xb4, 0x4d, 0xb4, 0x3a, 0xda, 0x65, 0xda, 0x30, 0x1d, 0x47, 0x37, 0xa4, 0xfb, 0xd3, 0x93, 0xe9, 0xc5, 0xf4, 0x1f, 0xe8, 0xbd, 0xf4, 0x09, 0x65, 0x25, 0x65, 0x5b, 0xe5, 0x28, 0xe5, 0x1c, 0xe5, 0x1a, 0xe5, 0xb3, 0xca, 0x52, 0x06, 0xc2, 0x30, 0x60, 0xf8, 0x33, 0x52, 0x19, 0xa5, 0x8c, 0x93, 0x8c, 0xbb, 0x8c, 0x8f, 0xf3, 0x34, 0xe6, 0xb9, 0xcf, 0xe3, 0xcf, 0xdb, 0x36, 0xaf, 0x69, 0x5e, 0xff, 0xbc, 0x29, 0x95, 0xf9, 0x2a, 0x6e, 0x2a, 0x7c, 0x95, 0x22, 0x95, 0x66, 0x95, 0x01, 0x95, 0x8f, 0xaa, 0x4c, 0x55, 0x6f, 0xd5, 0x14, 0xd5, 0x9d, 0xaa, 0x6d, 0xaa, 0x4f, 0xd4, 0x30, 0x6a, 0x26, 0x6a, 0x61, 0x6a, 0xd9, 0x6a, 0xfb, 0xd5, 0x2e, 0xab, 0x8d, 0xcf, 0xa7, 0xcf, 0x77, 0x9e, 0xcf, 0x9d, 0x5f, 0x34, 0xff, 0xe4, 0xfc, 0x87, 0xea, 0xb0, 0xba, 0x89, 0x7a, 0xb8, 0xfa, 0x6a, 0xf5, 0xc3, 0xea, 0x3d, 0xea, 0x93, 0x1a, 0x9a, 0x1a, 0xbe, 0x1a, 0x19, 0x1a, 0x55, 0x1a, 0x97, 0x34, 0xc6, 0x35, 0x19, 0x9a, 0x6e, 0x9a, 0xc9, 0x9a, 0xe5, 0x9a, 0xe7, 0x34, 0xc7, 0xb4, 0x68, 0x5a, 0x0b, 0xb5, 0x04, 0x5a, 0xe5, 0x5a, 0xe7, 0xb5, 0x5e, 0x30, 0x95, 0x99, 0xee, 0xcc, 0x54, 0x66, 0x25, 0xb3, 0x8b, 0x39, 0xa1, 0xad, 0xae, 0xed, 0xa7, 0x2d, 0xd1, 0x3e, 0xa4, 0xdd, 0xab, 0x3d, 0xad, 0x63, 0xa8, 0xb3, 0x58, 0x67, 0xa3, 0x4e, 0xb3, 0xce, 0x13, 0x5d, 0x92, 0x2e, 0x5b, 0x37, 0x41, 0xb7, 0x5c, 0xb7, 0x53, 0x77, 0x42, 0x4f, 0x4b, 0x2f, 0x58, 0x2f, 0x5f, 0xaf, 0x51, 0xef, 0xa1, 0x3e, 0x51, 0x9f, 0xad, 0x9f, 0xa4, 0xbf, 0x47, 0xbf, 0x5b, 0x7f, 0xca, 0xc0, 0xd0, 0x20, 0xda, 0x60, 0x8b, 0x41, 0x9b, 0xc1, 0xa8, 0xa1, 0x8a, 0xa1, 0xbf, 0x61, 0x9e, 0x61, 0xa3, 0xe1, 0x63, 0x23, 0xaa, 0x91, 0xab, 0xd1, 0x2a, 0xa3, 0x5a, 0xa3, 0x3b, 0xc6, 0x38, 0x63, 0xb6, 0x71, 0x8a, 0xf1, 0x3e, 0xe3, 0x5b, 0x26, 0xb0, 0x89, 0x9d, 0x49, 0x92, 0x49, 0x8d, 0xc9, 0x4d, 0x53, 0xd8, 0xd4, 0xde, 0x54, 0x60, 0xba, 0xcf, 0xb4, 0xcf, 0x0c, 0x6b, 0xe6, 0x68, 0x26, 0x34, 0xab, 0x35, 0xbb, 0xc7, 0xa2, 0xb0, 0xdc, 0x59, 0x59, 0xac, 0x46, 0xd6, 0xa0, 0x39, 0xc3, 0x3c, 0xc8, 0x7c, 0xa3, 0x79, 0x9b, 0xf9, 0x2b, 0x0b, 0x3d, 0x8b, 0x58, 0x8b, 0x9d, 0x16, 0xdd, 0x16, 0x5f, 0x2c, 0xed, 0x2c, 0x53, 0x2d, 0xeb, 0x2c, 0x1f, 0x59, 0x29, 0x59, 0x05, 0x58, 0x6d, 0xb4, 0xea, 0xb0, 0xfa, 0xc3, 0xda, 0xc4, 0x9a, 0x6b, 0x5d, 0x63, 0x7d, 0xc7, 0x86, 0x6a, 0xe3, 0x63, 0xb3, 0xce, 0xa6, 0xdd, 0xe6, 0xb5, 0xad, 0xa9, 0x2d, 0xdf, 0x76, 0xbf, 0xed, 0x7d, 0x3b, 0x9a, 0x5d, 0xb0, 0xdd, 0x16, 0xbb, 0x4e, 0xbb, 0xcf, 0xf6, 0x0e, 0xf6, 0x22, 0xfb, 0x26, 0xfb, 0x31, 0x07, 0x3d, 0x87, 0x78, 0x87, 0xbd, 0x0e, 0xf7, 0xd8, 0x74, 0x76, 0x28, 0xbb, 0x84, 0x7d, 0xd5, 0x11, 0xeb, 0xe8, 0xe1, 0xb8, 0xce, 0xf1, 0x8c, 0xe3, 0x07, 0x27, 0x7b, 0x27, 0xb1, 0xd3, 0x49, 0xa7, 0xdf, 0x9d, 0x59, 0xce, 0x29, 0xce, 0x0d, 0xce, 0xa3, 0x0b, 0x0c, 0x17, 0xf0, 0x17, 0xd4, 0x2d, 0x18, 0x72, 0xd1, 0x71, 0xe1, 0xb8, 0x1c, 0x72, 0x91, 0x2e, 0x64, 0x2e, 0x8c, 0x5f, 0x78, 0x70, 0xa1, 0xd4, 0x55, 0xdb, 0x95, 0xe3, 0x5a, 0xeb, 0xfa, 0xcc, 0x4d, 0xd7, 0x8d, 0xe7, 0x76, 0xc4, 0x6d, 0xc4, 0xdd, 0xd8, 0x3d, 0xd9, 0xfd, 0xb8, 0xfb, 0x2b, 0x0f, 0x4b, 0x0f, 0x91, 0x47, 0x8b, 0xc7, 0x94, 0xa7, 0x93, 0xe7, 0x1a, 0xcf, 0x0b, 0x5e, 0x88, 0x97, 0xaf, 0x57, 0x91, 0x57, 0xaf, 0xb7, 0x92, 0xf7, 0x62, 0xef, 0x6a, 0xef, 0xa7, 0x3e, 0x3a, 0x3e, 0x89, 0x3e, 0x8d, 0x3e, 0x13, 0xbe, 0x76, 0xbe, 0xab, 0x7d, 0x2f, 0xf8, 0x61, 0xfd, 0x02, 0xfd, 0x76, 0xfa, 0xdd, 0xf3, 0xd7, 0xf0, 0xe7, 0xfa, 0xd7, 0xfb, 0x4f, 0x04, 0x38, 0x04, 0xac, 0x09, 0xe8, 0x0a, 0xa4, 0x04, 0x46, 0x04, 0x56, 0x07, 0x3e, 0x0b, 0x32, 0x09, 0x12, 0x05, 0x75, 0x04, 0xc3, 0xc1, 0x01, 0xc1, 0xbb, 0x82, 0x1f, 0x2f, 0xd2, 0x5f, 0x24, 0x5c, 0xd4, 0x16, 0x02, 0x42, 0xfc, 0x43, 0x76, 0x85, 0x3c, 0x09, 0x35, 0x0c, 0x5d, 0x15, 0xfa, 0x73, 0x18, 0x2e, 0x2c, 0x34, 0xac, 0x26, 0xec, 0x79, 0xb8, 0x55, 0x78, 0x7e, 0x78, 0x77, 0x04, 0x2d, 0x62, 0x45, 0x44, 0x43, 0xc4, 0xbb, 0x48, 0x8f, 0xc8, 0xd2, 0xc8, 0x47, 0x8b, 0x8d, 0x16, 0x4b, 0x16, 0x77, 0x46, 0xc9, 0x47, 0xc5, 0x45, 0xd5, 0x47, 0x4d, 0x45, 0x7b, 0x45, 0x97, 0x45, 0x4b, 0x97, 0x58, 0x2c, 0x59, 0xb3, 0xe4, 0x46, 0x8c, 0x5a, 0x8c, 0x20, 0xa6, 0x3d, 0x16, 0x1f, 0x1b, 0x15, 0x7b, 0x24, 0x76, 0x72, 0xa9, 0xf7, 0xd2, 0xdd, 0x4b, 0x87, 0xe3, 0xec, 0xe2, 0x0a, 0xe3, 0xee, 0x2e, 0x33, 0x5c, 0x96, 0xb3, 0xec, 0xda, 0x72, 0xb5, 0xe5, 0xa9, 0xcb, 0xcf, 0xae, 0x90, 0x5f, 0xc1, 0x59, 0x71, 0x2a, 0x1e, 0x1b, 0x1f, 0x1d, 0xdf, 0x10, 0xff, 0x89, 0x13, 0xc2, 0xa9, 0xe5, 0x4c, 0xae, 0xf4, 0x5f, 0xb9, 0x77, 0xe5, 0x04, 0xd7, 0x93, 0xbb, 0x87, 0xfb, 0x92, 0xe7, 0xc6, 0x2b, 0xe7, 0x8d, 0xf1, 0x5d, 0xf8, 0x65, 0xfc, 0x91, 0x04, 0x97, 0x84, 0xb2, 0x84, 0xd1, 0x44, 0x97, 0xc4, 0x5d, 0x89, 0x63, 0x49, 0xae, 0x49, 0x15, 0x49, 0xe3, 0x02, 0x4f, 0x41, 0xb5, 0xe0, 0x75, 0xb2, 0x5f, 0xf2, 0x81, 0xe4, 0xa9, 0x94, 0x90, 0x94, 0xa3, 0x29, 0x33, 0xa9, 0xd1, 0xa9, 0xcd, 0x69, 0x84, 0xb4, 0xf8, 0xb4, 0xd3, 0x42, 0x25, 0x61, 0x8a, 0xb0, 0x2b, 0x5d, 0x33, 0x3d, 0x27, 0xbd, 0x2f, 0xc3, 0x34, 0xa3, 0x30, 0x43, 0xba, 0xca, 0x69, 0xd5, 0xee, 0x55, 0x13, 0xa2, 0x40, 0xd1, 0x91, 0x4c, 0x28, 0x73, 0x59, 0x66, 0xbb, 0x98, 0x8e, 0xfe, 0x4c, 0xf5, 0x48, 0x8c, 0x24, 0x9b, 0x25, 0x83, 0x59, 0x0b, 0xb3, 0x6a, 0xb2, 0xde, 0x67, 0x47, 0x65, 0x9f, 0xca, 0x51, 0xcc, 0x11, 0xe6, 0xf4, 0xe4, 0x9a, 0xe4, 0x6e, 0xcb, 0x1d, 0xc9, 0xf3, 0xc9, 0xfb, 0x7e, 0x35, 0x66, 0x35, 0x77, 0x75, 0x67, 0xbe, 0x76, 0xfe, 0x86, 0xfc, 0xc1, 0x35, 0xee, 0x6b, 0x0e, 0xad, 0x85, 0xd6, 0xae, 0x5c, 0xdb, 0xb9, 0x4e, 0x77, 0x5d, 0xc1, 0xba, 0xe1, 0xf5, 0xbe, 0xeb, 0x8f, 0x6d, 0x20, 0x6d, 0x48, 0xd9, 0xf0, 0xcb, 0x46, 0xcb, 0x8d, 0x65, 0x1b, 0xdf, 0x6e, 0x8a, 0xde, 0xd4, 0x51, 0xa0, 0x51, 0xb0, 0xbe, 0x60, 0x68, 0xb3, 0xef, 0xe6, 0xc6, 0x42, 0xb9, 0x42, 0x51, 0xe1, 0xbd, 0x2d, 0xce, 0x5b, 0x0e, 0x6c, 0xc5, 0x6c, 0x15, 0x6c, 0xed, 0xdd, 0x66, 0xb3, 0xad, 0x6a, 0xdb, 0x97, 0x22, 0x5e, 0xd1, 0xf5, 0x62, 0xcb, 0xe2, 0x8a, 0xe2, 0x4f, 0x25, 0xdc, 0x92, 0xeb, 0xdf, 0x59, 0x7d, 0x57, 0xf9, 0xdd, 0xcc, 0xf6, 0x84, 0xed, 0xbd, 0xa5, 0xf6, 0xa5, 0xfb, 0x77, 0xe0, 0x76, 0x08, 0x77, 0xdc, 0xdd, 0xe9, 0xba, 0xf3, 0x58, 0x99, 0x62, 0x59, 0x5e, 0xd9, 0xd0, 0xae, 0xe0, 0x5d, 0xad, 0xe5, 0xcc, 0xf2, 0xa2, 0xf2, 0xb7, 0xbb, 0x57, 0xec, 0xbe, 0x56, 0x61, 0x5b, 0x71, 0x60, 0x0f, 0x69, 0x8f, 0x64, 0x8f, 0xb4, 0x32, 0xa8, 0xb2, 0xbd, 0x4a, 0xaf, 0x6a, 0x47, 0xd5, 0xa7, 0xea, 0xa4, 0xea, 0x81, 0x1a, 0x8f, 0x9a, 0xe6, 0xbd, 0xea, 0x7b, 0xb7, 0xed, 0x9d, 0xda, 0xc7, 0xdb, 0xd7, 0xbf, 0xdf, 0x6d, 0x7f, 0xd3, 0x01, 0x8d, 0x03, 0xc5, 0x07, 0x3e, 0x1e, 0x14, 0x1c, 0xbc, 0x7f, 0xc8, 0xf7, 0x50, 0x6b, 0xad, 0x41, 0x6d, 0xc5, 0x61, 0xdc, 0xe1, 0xac, 0xc3, 0xcf, 0xeb, 0xa2, 0xea, 0xba, 0xbf, 0x67, 0x7f, 0x5f, 0x7f, 0x44, 0xed, 0x48, 0xf1, 0x91, 0xcf, 0x47, 0x85, 0x47, 0xa5, 0xc7, 0xc2, 0x8f, 0x75, 0xd5, 0x3b, 0xd4, 0xd7, 0x37, 0xa8, 0x37, 0x94, 0x36, 0xc2, 0x8d, 0x92, 0xc6, 0xb1, 0xe3, 0x71, 0xc7, 0x6f, 0xfd, 0xe0, 0xf5, 0x43, 0x7b, 0x13, 0xab, 0xe9, 0x50, 0x33, 0xa3, 0xb9, 0xf8, 0x04, 0x38, 0x21, 0x39, 0xf1, 0xe2, 0xc7, 0xf8, 0x1f, 0xef, 0x9e, 0x0c, 0x3c, 0xd9, 0x79, 0x8a, 0x7d, 0xaa, 0xe9, 0x27, 0xfd, 0x9f, 0xf6, 0xb6, 0xd0, 0x5a, 0x8a, 0x5a, 0xa1, 0xd6, 0xdc, 0xd6, 0x89, 0xb6, 0xa4, 0x36, 0x69, 0x7b, 0x4c, 0x7b, 0xdf, 0xe9, 0x80, 0xd3, 0x9d, 0x1d, 0xce, 0x1d, 0x2d, 0x3f, 0x9b, 0xff, 0x7c, 0xf4, 0x8c, 0xf6, 0x99, 0x9a, 0xb3, 0xca, 0x67, 0x4b, 0xcf, 0x91, 0xce, 0x15, 0x9c, 0x9b, 0x39, 0x9f, 0x77, 0x7e, 0xf2, 0x42, 0xc6, 0x85, 0xf1, 0x8b, 0x89, 0x17, 0x87, 0x3a, 0x57, 0x74, 0x3e, 0xba, 0xb4, 0xe4, 0xd2, 0x9d, 0xae, 0xb0, 0xae, 0xde, 0xcb, 0x81, 0x97, 0xaf, 0x5e, 0xf1, 0xb9, 0x72, 0xa9, 0xdb, 0xbd, 0xfb, 0xfc, 0x55, 0x97, 0xab, 0x67, 0xae, 0x39, 0x5d, 0x3b, 0x7d, 0x9d, 0x7d, 0xbd, 0xed, 0x86, 0xfd, 0x8d, 0xd6, 0x1e, 0xbb, 0x9e, 0x96, 0x5f, 0xec, 0x7e, 0x69, 0xe9, 0xb5, 0xef, 0x6d, 0xbd, 0xe9, 0x70, 0xb3, 0xfd, 0x96, 0xe3, 0xad, 0x8e, 0xbe, 0x05, 0x7d, 0xe7, 0xfa, 0x5d, 0xfb, 0x2f, 0xde, 0xf6, 0xba, 0x7d, 0xe5, 0x8e, 0xff, 0x9d, 0x1b, 0x03, 0x8b, 0x06, 0xfa, 0xee, 0x2e, 0xbe, 0x7b, 0xff, 0x5e, 0xdc, 0x3d, 0xe9, 0x7d, 0xde, 0xfd, 0xd1, 0x07, 0xa9, 0x0f, 0x5e, 0x3f, 0xcc, 0x7a, 0x38, 0xfd, 0x68, 0xfd, 0x63, 0xec, 0xe3, 0xa2, 0x27, 0x0a, 0x4f, 0x2a, 0x9e, 0xaa, 0x3f, 0xad, 0xfd, 0xd5, 0xf8, 0xd7, 0x66, 0xa9, 0xbd, 0xf4, 0xec, 0xa0, 0xd7, 0x60, 0xcf, 0xb3, 0x88, 0x67, 0x8f, 0x86, 0xb8, 0x43, 0x2f, 0xff, 0x95, 0xf9, 0xaf, 0x4f, 0xc3, 0x05, 0xcf, 0xa9, 0xcf, 0x2b, 0x46, 0xb4, 0x46, 0xea, 0x47, 0xad, 0x47, 0xcf, 0x8c, 0xf9, 0x8c, 0xdd, 0x7a, 0xb1, 0xf4, 0xc5, 0xf0, 0xcb, 0x8c, 0x97, 0xd3, 0xe3, 0x85, 0xbf, 0x29, 0xfe, 0xb6, 0xf7, 0x95, 0xd1, 0xab, 0x9f, 0x7e, 0x77, 0xfb, 0xbd, 0x67, 0x62, 0xc9, 0xc4, 0xf0, 0x6b, 0xd1, 0xeb, 0x99, 0x3f, 0x4a, 0xde, 0xa8, 0xbe, 0x39, 0xfa, 0xd6, 0xf6, 0x6d, 0xe7, 0x64, 0xe8, 0xe4, 0xd3, 0x77, 0x69, 0xef, 0xa6, 0xa7, 0x8a, 0xde, 0xab, 0xbe, 0x3f, 0xf6, 0x81, 0xfd, 0xa1, 0xfb, 0x63, 0xf4, 0xc7, 0x91, 0xe9, 0xec, 0x4f, 0xf8, 0x4f, 0x95, 0x9f, 0x8d, 0x3f, 0x77, 0x7c, 0x09, 0xfc, 0xf2, 0x78, 0x26, 0x6d, 0x66, 0xe6, 0xdf, 0xf7, 0x84, 0xf3, 0xfb, 0x32, 0x3a, 0x59, 0x7e, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa4, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x34, 0x2d, 0x30, 0x35, 0x2d, 0x30, 0x32, 0x54, 0x31, 0x31, 0x3a, 0x30, 0x35, 0x3a, 0x30, 0x36, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x90, 0x7a, 0xe1, 0x8d, 0x00, 0x00, 0x00, 0x12, 0x49, 0x44, 0x41, 0x54, 0x08, 0x1d, 0x63, 0x60, 0x60, 0x60, 0xf8, 0x0f, 0xc5, 0x40, 0x0a, 0x13, 0x00, 0x00, 0x35, 0xeb, 0x01, 0xff, 0x0f, 0x5e, 0xbc, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXListIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x06, 0x00, 0x00, 0x00, 0xe4, 0x98, 0xef, 0x55, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x00, 0x65, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0x63, 0x60, 0x60, 0x60, 0x68, 0x05, 0xe2, 0x9f, 0x40, 0xfc, 0x9f, 0x42, 0x0c, 0x32, 0xa3, 0x95, 0x11, 0x48, 0x7c, 0x06, 0x62, 0x1e, 0x20, 0xa6, 0x06, 0xf8, 0xc2, 0x0c, 0x34, 0x05, 0x64, 0x98, 0x39, 0x10, 0x83, 0xd8, 0x94, 0x80, 0x5f, 0x40, 0xcd, 0xfd, 0x94, 0x18, 0x30, 0x84, 0xf5, 0x36, 0x03, 0xdd, 0xfe, 0x0d, 0x88, 0xff, 0x52, 0x88, 0x41, 0x66, 0x34, 0xd3, 0x24, 0x96, 0xf9, 0x81, 0x26, 0x53, 0x23, 0x96, 0x7f, 0x03, 0xcd, 0x99, 0x04, 0x72, 0x21, 0x08, 0x80, 0x68, 0x18, 0x1b, 0x2c, 0x40, 0x06, 0x01, 0xcb, 0x18, 0x64, 0x68, 0xa5, 0xb7, 0x96, 0x11, 0x16, 0xcb, 0x00, 0xa6, 0x38, 0x45, 0xd2, 0xe0, 0x92, 0x71, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXListIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x5e, 0xdd, 0x5c, 0xdd, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x00, 0x94, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x96, 0xc1, 0x09, 0x80, 0x30, 0x14, 0x43, 0xbf, 0x0a, 0x6e, 0xe0, 0xc1, 0x5d, 0x1c, 0xb0, 0x13, 0x38, 0xa2, 0x8e, 0xa1, 0x89, 0x87, 0xd2, 0x7a, 0xfc, 0x5e, 0x22, 0x44, 0x08, 0xf4, 0x0b, 0xc2, 0x23, 0x8d, 0x4d, 0x23, 0x22, 0x66, 0xa8, 0x40, 0x07, 0x74, 0x89, 0x88, 0x2c, 0x64, 0x22, 0xdb, 0xb3, 0x50, 0x01, 0x7b, 0x73, 0x94, 0x01, 0x80, 0xa4, 0x5d, 0x49, 0x2a, 0xf8, 0x9c, 0xa3, 0x20, 0x54, 0x87, 0x34, 0x61, 0x5a, 0xa0, 0xad, 0x7b, 0xab, 0x33, 0xec, 0x44, 0x61, 0x10, 0xa5, 0x7f, 0x12, 0x1d, 0xbf, 0x4c, 0x62, 0x07, 0xec, 0x40, 0xce, 0x01, 0xf9, 0x63, 0x86, 0x67, 0xe0, 0xbb, 0x03, 0x55, 0x66, 0x77, 0x71, 0x2e, 0x74, 0xcd, 0x57, 0xee, 0xe2, 0x64, 0xbe, 0x79, 0x05, 0xac, 0x17, 0xd6, 0xc6, 0x50, 0x2f, 0xed, 0x80, 0x1d, 0xf8, 0xa5, 0x03, 0xee, 0x62, 0x6c, 0x5b, 0xb6, 0xdb, 0xdd, 0xc5, 0x9f, 0x33, 0xef, 0x2e, 0x4e, 0xe6, 0xaf, 0x76, 0xf1, 0x0d, 0xa7, 0xae, 0x59, 0xeb, 0x22, 0xc6, 0xba, 0x58, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXMoveIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x17, 0xa5, 0x96, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x01, 0x2f, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0xb5, 0x95, 0x31, 0x4e, 0x03, 0x41, 0x0c, 0x45, 0x87, 0x40, 0xfa, 0x88, 0x13, 0xa4, 0xa1, 0xe2, 0x0e, 0x88, 0x94, 0xd4, 0x1c, 0x21, 0x1d, 0x07, 0x80, 0x33, 0x40, 0x49, 0x41, 0xc7, 0x11, 0xe8, 0x22, 0xa1, 0x54, 0x41, 0x94, 0xf4, 0x14, 0x11, 0x12, 0xe4, 0x04, 0x5c, 0x00, 0x09, 0x78, 0x4f, 0x9a, 0x41, 0x93, 0xdd, 0xcd, 0x32, 0xcb, 0x86, 0x2f, 0x7d, 0xd9, 0xe3, 0xb1, 0x7f, 0x2c, 0xaf, 0x47, 0x09, 0xa1, 0x0c, 0xfb, 0xa4, 0xcd, 0xa0, 0x76, 0x2b, 0x18, 0xa2, 0xb2, 0x80, 0x5f, 0xd1, 0x7a, 0xee, 0x8d, 0x5b, 0x14, 0x14, 0x4c, 0xf4, 0xdc, 0x0b, 0xe7, 0x54, 0x27, 0xb1, 0xdc, 0x1a, 0xdf, 0x88, 0xdd, 0x8d, 0x37, 0x21, 0x1c, 0x70, 0x77, 0x06, 0x5f, 0xa1, 0x79, 0x23, 0xb8, 0x82, 0x4f, 0x70, 0x1c, 0xed, 0x3b, 0xf6, 0xcf, 0xb8, 0xa1, 0xd2, 0x4e, 0xb5, 0xbf, 0x62, 0xd0, 0x90, 0x61, 0x87, 0x5d, 0x50, 0xcb, 0xaf, 0x8a, 0x3a, 0xab, 0xeb, 0x2e, 0x8a, 0x31, 0x7f, 0x6d, 0xc6, 0x49, 0xd4, 0x35, 0xf1, 0xab, 0x5e, 0xc2, 0x14, 0xc3, 0x2d, 0x82, 0xf9, 0xd6, 0x59, 0xaf, 0x4e, 0xd8, 0x81, 0x2e, 0xf4, 0x1d, 0x3c, 0x86, 0x62, 0x05, 0xef, 0x75, 0x32, 0x1c, 0xe1, 0x1f, 0xc2, 0x67, 0xf8, 0x98, 0xc5, 0x75, 0x4f, 0xe0, 0x58, 0x07, 0x3c, 0xc0, 0x53, 0x1d, 0x5f, 0x4a, 0xbe, 0x2e, 0x7d, 0xfd, 0xd9, 0xbf, 0x75, 0x6a, 0xb7, 0x69, 0xa6, 0x76, 0x39, 0x37, 0x50, 0x41, 0xdb, 0x4a, 0x99, 0x6f, 0xdd, 0xcf, 0x4c, 0xf7, 0x62, 0xf1, 0x07, 0x76, 0x0a, 0x97, 0x70, 0x12, 0x63, 0xa5, 0xe6, 0x93, 0xc4, 0x0b, 0x78, 0xd5, 0x56, 0x50, 0xdb, 0x3b, 0x92, 0xdb, 0x3a, 0xad, 0xe5, 0x37, 0xad, 0xcf, 0x4b, 0xdb, 0x2f, 0x36, 0xdc, 0x75, 0xca, 0xb7, 0x03, 0x57, 0xcb, 0x99, 0xbd, 0x41, 0xe7, 0xa6, 0xf5, 0x6c, 0xbc, 0xd6, 0x21, 0xb1, 0x22, 0xf8, 0x52, 0x14, 0xab, 0x72, 0xed, 0x05, 0x15, 0x29, 0x55, 0x92, 0xfc, 0xaa, 0xb9, 0xa8, 0xe7, 0xde, 0x18, 0xa2, 0xb0, 0x80, 0x0a, 0x6b, 0x3d, 0x6f, 0x05, 0x9d, 0xfe, 0xa3, 0xbe, 0x01, 0xe4, 0xf1, 0x5c, 0xce, 0x72, 0x04, 0x22, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXMoveIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0xc3, 0xc9, 0x5b, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x02, 0x26, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xdd, 0x99, 0x3b, 0x4e, 0x03, 0x31, 0x14, 0x45, 0x13, 0x84, 0x44, 0x56, 0x00, 0x0b, 0xa0, 0xa5, 0x46, 0x84, 0x0e, 0xaa, 0x6c, 0x01, 0x04, 0x3b, 0x48, 0x07, 0x0b, 0x08, 0x3d, 0xbb, 0xe0, 0xbb, 0x8b, 0x74, 0x04, 0x7a, 0x7a, 0xd2, 0x42, 0x47, 0x47, 0x81, 0x04, 0xf7, 0x84, 0x38, 0x7a, 0x71, 0x66, 0x3c, 0x33, 0x61, 0x26, 0x36, 0x5c, 0xe9, 0xc6, 0x9f, 0x67, 0xbf, 0x77, 0xe5, 0xdf, 0xd8, 0x4a, 0xab, 0x55, 0x3f, 0xfa, 0x72, 0x09, 0x93, 0x46, 0x4f, 0xea, 0x3e, 0xa7, 0x24, 0x9f, 0x24, 0x76, 0xa4, 0xea, 0x5d, 0xfc, 0x9a, 0x92, 0x3c, 0x75, 0x49, 0x61, 0x53, 0x6a, 0xc6, 0xa2, 0x13, 0xe9, 0x52, 0xea, 0xb0, 0x25, 0x81, 0x8e, 0x54, 0x8c, 0x44, 0x27, 0xce, 0x4f, 0xb1, 0xd1, 0x26, 0x3a, 0xee, 0xa4, 0xc0, 0x17, 0xe7, 0x97, 0x69, 0x13, 0x15, 0x03, 0x45, 0xf7, 0x45, 0xe5, 0x95, 0x69, 0x1b, 0x05, 0xc7, 0x8a, 0x9a, 0x27, 0x2a, 0xaf, 0x9e, 0x3e, 0x2b, 0xc5, 0xbe, 0xa2, 0x7d, 0x88, 0x79, 0x82, 0xf2, 0xea, 0xe9, 0x43, 0xdf, 0xca, 0x68, 0x57, 0xee, 0xf1, 0xd3, 0xe1, 0x54, 0x49, 0xd6, 0x6e, 0xbe, 0xf4, 0xfc, 0x9d, 0x7b, 0x65, 0x8a, 0x6f, 0xe2, 0x55, 0x46, 0x7d, 0xb0, 0x6a, 0x59, 0xa1, 0x79, 0x4e, 0x19, 0x49, 0x8b, 0xda, 0xfc, 0xaf, 0x59, 0xaf, 0x29, 0xe7, 0xff, 0x95, 0xd0, 0xae, 0x46, 0x9a, 0x35, 0xd9, 0x14, 0xf0, 0x4d, 0x8c, 0x20, 0x8a, 0x46, 0x94, 0xe3, 0x64, 0x28, 0x66, 0x6d, 0x9c, 0xa0, 0xe3, 0x0a, 0x46, 0x7c, 0x13, 0x23, 0x78, 0x74, 0x85, 0x84, 0x0e, 0xd4, 0xf9, 0x46, 0xdc, 0x10, 0x9b, 0x06, 0x31, 0x88, 0x35, 0xa8, 0x12, 0x88, 0xef, 0xf2, 0xad, 0x68, 0xcf, 0xc2, 0xb3, 0x92, 0x0e, 0x6c, 0x1f, 0xf2, 0x65, 0x80, 0x6f, 0xdb, 0x8f, 0xd8, 0x0b, 0x77, 0x03, 0x7f, 0x44, 0xdd, 0x34, 0x1c, 0x95, 0x89, 0xd0, 0x50, 0x1b, 0x62, 0x0f, 0xc5, 0xb9, 0xe5, 0x66, 0x85, 0x72, 0x77, 0x7c, 0x12, 0xf7, 0xc4, 0xd8, 0x40, 0x03, 0x5a, 0x16, 0xee, 0xb3, 0x3d, 0x55, 0xda, 0x4b, 0xaf, 0x9d, 0x8a, 0x98, 0x79, 0x34, 0xa1, 0x6d, 0x82, 0xbe, 0x7e, 0x79, 0x3e, 0xc4, 0x14, 0x14, 0x8a, 0x8d, 0xb6, 0xbe, 0x9d, 0xfa, 0x89, 0xea, 0xd4, 0x7f, 0xfe, 0xc4, 0xd4, 0xbb, 0x41, 0x64, 0xe1, 0x8e, 0xc5, 0xac, 0x69, 0x58, 0xe5, 0xf1, 0xe4, 0xe2, 0xa3, 0x65, 0xb6, 0x99, 0xec, 0xd4, 0x3f, 0xcb, 0xb0, 0x2b, 0x3e, 0x8a, 0xb1, 0x81, 0x06, 0xb4, 0xa0, 0x69, 0x02, 0x2b, 0x94, 0x0a, 0xee, 0x8a, 0x07, 0xe2, 0x3d, 0x85, 0x48, 0x20, 0x36, 0x1a, 0xd0, 0x32, 0x83, 0x2f, 0x14, 0x03, 0xb7, 0x70, 0x0e, 0xdd, 0x0b, 0x0a, 0x2b, 0x06, 0x31, 0x89, 0x8d, 0x86, 0x4a, 0xe0, 0xa2, 0x40, 0xa7, 0xa6, 0xd7, 0x28, 0x31, 0x82, 0x97, 0x92, 0xf5, 0x02, 0xd9, 0x7c, 0x77, 0xc7, 0xe2, 0x76, 0x41, 0xbb, 0xdf, 0x98, 0x99, 0xe2, 0x43, 0xf1, 0x21, 0xe4, 0xa4, 0x1d, 0x32, 0x2e, 0x61, 0x63, 0xc7, 0x5a, 0xd4, 0xe6, 0x3f, 0x6b, 0x8d, 0xda, 0x40, 0xc9, 0xe4, 0xff, 0x8c, 0xd0, 0xa2, 0x35, 0x9a, 0x37, 0xa2, 0x27, 0x32, 0x6c, 0xe5, 0x19, 0x4d, 0x7d, 0xd6, 0x26, 0x7c, 0x95, 0xfd, 0xda, 0xb4, 0x69, 0x34, 0xdb, 0x95, 0x77, 0x76, 0xaa, 0xfb, 0x8a, 0x94, 0x4d, 0xe9, 0x43, 0xdf, 0x95, 0x82, 0xe3, 0xa4, 0xac, 0x40, 0xd7, 0x2e, 0x78, 0x04, 0x35, 0xa9, 0x7e, 0x50, 0x41, 0x2c, 0x6d, 0xa3, 0xc2, 0x7f, 0x5f, 0xb9, 0xd1, 0xb3, 0x29, 0x6d, 0xa2, 0xa3, 0x23, 0x05, 0x23, 0xd1, 0x0a, 0xb3, 0x79, 0x6c, 0xb4, 0x49, 0x02, 0x3c, 0xc4, 0x5e, 0x44, 0x2b, 0x90, 0x3c, 0x75, 0x73, 0x8f, 0x34, 0x95, 0xa3, 0x83, 0xbb, 0xa3, 0x7d, 0x77, 0x25, 0xf9, 0x67, 0x83, 0x1b, 0xa5, 0x9e, 0x32, 0xc9, 0xff, 0x7d, 0xe3, 0xc4, 0xf2, 0x58, 0x84, 0xb5, 0xe2, 0x1b, 0xb0, 0x4b, 0x43, 0x5f, 0xe1, 0x68, 0x89, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXSelectIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x11, 0x08, 0x06, 0x00, 0x00, 0x00, 0xed, 0xc8, 0x9d, 0x9f, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x00, 0xf4, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0x95, 0x92, 0xc1, 0x0a, 0x01, 0x61, 0x14, 0x85, 0x27, 0x45, 0x64, 0xa3, 0x94, 0x2c, 0xac, 0xa4, 0x44, 0x51, 0x16, 0xd6, 0xf6, 0xca, 0xc6, 0x23, 0x78, 0x02, 0x25, 0x2f, 0x61, 0xc9, 0xc6, 0xde, 0x0b, 0xd8, 0x51, 0xbc, 0x82, 0xc8, 0x4e, 0xa1, 0xa4, 0xac, 0x94, 0x6c, 0x88, 0x14, 0xdf, 0xd5, 0xdc, 0xfa, 0x1b, 0x33, 0x98, 0x53, 0xdf, 0xdc, 0xeb, 0xfe, 0xe7, 0x5c, 0x63, 0x8c, 0x65, 0x59, 0x56, 0x17, 0x72, 0xe0, 0x4b, 0x01, 0xdb, 0xbd, 0xa4, 0xf6, 0x20, 0xee, 0x27, 0x5d, 0xc5, 0xfc, 0xb4, 0x39, 0x51, 0x9b, 0x10, 0x84, 0x9f, 0x8a, 0xe0, 0xb8, 0x82, 0x86, 0xa5, 0xae, 0xa0, 0x06, 0x3f, 0x35, 0xc6, 0x61, 0x06, 0xb5, 0x9f, 0x32, 0x2f, 0x7c, 0x4b, 0xcb, 0xed, 0xa9, 0xd9, 0x59, 0x1f, 0x9c, 0xf5, 0x21, 0xe1, 0xb6, 0x20, 0xfb, 0x25, 0xa8, 0x8b, 0xce, 0x78, 0xda, 0x10, 0x72, 0x2e, 0xd8, 0xfe, 0x11, 0x96, 0x25, 0x1b, 0xa8, 0xeb, 0xdf, 0x21, 0x4b, 0x46, 0x72, 0xf9, 0x43, 0x49, 0x3c, 0x61, 0xd3, 0x27, 0x4f, 0x51, 0x6f, 0xcb, 0xab, 0xae, 0xf1, 0x14, 0xcd, 0x90, 0xf4, 0x51, 0xb8, 0x81, 0x57, 0x68, 0xc6, 0x59, 0x0c, 0x5c, 0x35, 0x61, 0xea, 0x15, 0xbc, 0x70, 0x56, 0x76, 0x4d, 0x31, 0x6c, 0x39, 0x82, 0xf2, 0x26, 0xed, 0x8d, 0xd9, 0x81, 0x3e, 0x05, 0x1f, 0xca, 0x33, 0xd1, 0x6f, 0x5c, 0xd0, 0xa7, 0x21, 0x03, 0x47, 0x63, 0x3e, 0xa7, 0x97, 0x9f, 0xf5, 0xa1, 0x1d, 0x93, 0x01, 0xc8, 0xab, 0xa8, 0xaa, 0xd0, 0xdc, 0x41, 0x97, 0x0e, 0xf5, 0xc0, 0xac, 0x25, 0xf3, 0x83, 0xd1, 0x37, 0xe8, 0x35, 0x28, 0xd5, 0x97, 0x3a, 0xb8, 0xdf, 0xe1, 0x17, 0xaf, 0x54, 0x62, 0xf7, 0x88, 0x7e, 0xaa, 0x27, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXSelectIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x22, 0x08, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x7d, 0xb9, 0x49, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x02, 0x01, 0x49, 0x44, 0x41, 0x54, 0x48, 0x0d, 0xbd, 0x96, 0xcf, 0x2b, 0x05, 0x51, 0x14, 0xc7, 0x1f, 0x3d, 0xf2, 0x33, 0x0b, 0x85, 0x52, 0xb6, 0x42, 0xc4, 0x42, 0xd6, 0x96, 0x8a, 0x12, 0x0b, 0xca, 0x1f, 0x41, 0x42, 0xb1, 0x61, 0x85, 0x35, 0x29, 0x85, 0x94, 0x8d, 0x62, 0x69, 0x23, 0x24, 0x29, 0x65, 0x4b, 0x51, 0x16, 0x44, 0x84, 0x2c, 0x94, 0x84, 0xfc, 0xf6, 0x39, 0xf5, 0x4e, 0x6e, 0xd3, 0x1b, 0xef, 0xde, 0x37, 0x33, 0x4e, 0x7d, 0x3b, 0x77, 0xe6, 0x9e, 0x73, 0x3e, 0x77, 0xee, 0xcc, 0xdc, 0x7b, 0x63, 0xb1, 0x58, 0x6c, 0x0a, 0x55, 0xa1, 0x7f, 0xb1, 0xcc, 0x04, 0xe5, 0x10, 0x3f, 0x8d, 0x8a, 0xff, 0x83, 0xda, 0x02, 0xe4, 0x3b, 0xa1, 0x7b, 0x7c, 0x1f, 0xca, 0x42, 0x91, 0x59, 0x2e, 0x95, 0x5f, 0x90, 0x42, 0xc5, 0x9f, 0xa0, 0x36, 0x14, 0x99, 0xad, 0x53, 0xd9, 0x04, 0x6a, 0x7b, 0x8b, 0xfb, 0xb5, 0x51, 0x50, 0x7b, 0x7d, 0x80, 0x02, 0xfe, 0x40, 0xb3, 0xa8, 0x04, 0x85, 0x66, 0x95, 0x54, 0xd2, 0xa7, 0xf2, 0xf3, 0x0f, 0xc4, 0x0c, 0xa2, 0xec, 0xb0, 0xa8, 0x67, 0x16, 0x50, 0x19, 0xcc, 0x29, 0xea, 0x08, 0x03, 0x3a, 0x63, 0x09, 0xd4, 0x19, 0xd8, 0x21, 0xbe, 0x21, 0x08, 0x58, 0xbe, 0x4a, 0x2d, 0x66, 0xeb, 0x3f, 0xc9, 0x59, 0x40, 0x65, 0xe9, 0x80, 0xf3, 0x49, 0x7a, 0x45, 0xb6, 0x30, 0x33, 0xee, 0x91, 0xbc, 0x11, 0x94, 0x83, 0x9c, 0x6c, 0x93, 0x68, 0xb3, 0x90, 0x6b, 0xfb, 0x9c, 0xfc, 0x2e, 0x17, 0x62, 0x7f, 0x40, 0xa0, 0x0e, 0x70, 0x8f, 0x3a, 0x8d, 0x36, 0xe0, 0xea, 0x90, 0x80, 0x02, 0xfe, 0x42, 0x4b, 0xa8, 0x1c, 0xfd, 0x69, 0x17, 0xf4, 0xea, 0x48, 0xc3, 0xf0, 0x4f, 0xd4, 0x1b, 0x45, 0x79, 0x7e, 0x54, 0x59, 0x55, 0xc2, 0x00, 0x79, 0x6b, 0x5c, 0x52, 0xb7, 0x47, 0xb7, 0x27, 0x13, 0x2e, 0xeb, 0x6a, 0x14, 0x56, 0x44, 0xd1, 0xe7, 0x64, 0x85, 0x0b, 0xb9, 0xf9, 0x86, 0xbc, 0x23, 0x0c, 0x72, 0x7d, 0x4c, 0x3d, 0x59, 0x3e, 0x7d, 0x6d, 0x9b, 0x9e, 0x20, 0x00, 0x33, 0x77, 0x95, 0x5a, 0x05, 0xbe, 0xa4, 0x44, 0xc7, 0x50, 0x08, 0x40, 0xd9, 0x65, 0x64, 0xb1, 0xb7, 0x32, 0xd9, 0x03, 0xcd, 0x51, 0xba, 0xb6, 0xef, 0xc8, 0x6f, 0xb6, 0x22, 0x19, 0x41, 0x57, 0x69, 0x42, 0xe5, 0xf4, 0x50, 0x63, 0xd4, 0xb1, 0x6e, 0xce, 0xa7, 0x09, 0x94, 0xd9, 0x90, 0x6f, 0xc0, 0xf9, 0x5c, 0xd4, 0x19, 0x00, 0x28, 0xd0, 0x39, 0xe4, 0x64, 0xf2, 0xdf, 0xbc, 0x23, 0xd7, 0xf7, 0x67, 0xc6, 0xcb, 0xda, 0xec, 0x64, 0xbb, 0x44, 0x9b, 0x05, 0xbc, 0xed, 0x0d, 0xfa, 0xff, 0xda, 0xb8, 0x65, 0xbf, 0x6c, 0x75, 0x21, 0x0e, 0xfb, 0x00, 0x65, 0x61, 0x1e, 0x47, 0xb2, 0x52, 0x89, 0xd6, 0x90, 0x77, 0x30, 0x7a, 0x2d, 0x7b, 0x65, 0x1d, 0xb2, 0xb2, 0x7a, 0xa2, 0x34, 0x51, 0xbd, 0x1c, 0xa6, 0xda, 0x3d, 0xd9, 0xf2, 0x63, 0x1f, 0x24, 0x89, 0xd5, 0x1c, 0xd9, 0x10, 0x4a, 0x3d, 0x39, 0x49, 0x2f, 0x33, 0xb8, 0x7b, 0x8d, 0x34, 0xf1, 0x88, 0xb6, 0xdf, 0x12, 0x55, 0x41, 0xdf, 0xad, 0x11, 0xab, 0x39, 0xea, 0xf7, 0xe9, 0xb3, 0x3a, 0x11, 0x2c, 0x26, 0x8a, 0xac, 0xe0, 0x53, 0x2d, 0x51, 0x4d, 0xc4, 0xc8, 0x7f, 0xa8, 0x10, 0xaf, 0x9f, 0xa0, 0x2f, 0xa5, 0xc9, 0x91, 0x70, 0x20, 0x65, 0xd4, 0x6f, 0x40, 0x37, 0x4d, 0x2f, 0x48, 0xaf, 0x6f, 0x7e, 0xc3, 0xc2, 0x6d, 0x8d, 0xf9, 0x40, 0x65, 0xca, 0x23, 0x31, 0x79, 0xf7, 0xcb, 0x48, 0x9f, 0x4c, 0xbd, 0xd5, 0x94, 0xa6, 0x3b, 0xa2, 0x38, 0x89, 0x93, 0x48, 0x9e, 0x4a, 0xa6, 0x52, 0x60, 0xf1, 0x1f, 0x65, 0x5c, 0x9e, 0x8b, 0x0f, 0xbf, 0xa0, 0x23, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXJSONIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, 0x32, 0x32, 0x3a, 0x30, 0x32, 0x3a, 0x32, 0x33, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x03, 0x64, 0xa2, 0xe8, 0x00, 0x00, 0x06, 0x37, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x7b, 0x48, 0x57, 0x57, 0x1c, 0x3f, 0xc7, 0x47, 0x3e, 0xf2, 0x31, 0xc9, 0x50, 0xdb, 0x56, 0x13, 0x73, 0x59, 0x3e, 0x57, 0x46, 0x66, 0xe2, 0x28, 0x1b, 0x51, 0x6a, 0x2a, 0xb1, 0xcd, 0x6a, 0x43, 0xaa, 0x8d, 0x06, 0xe5, 0xa0, 0xac, 0x86, 0x8c, 0xcd, 0xbf, 0x4c, 0xb3, 0x65, 0x81, 0xb4, 0xd2, 0xa6, 0x11, 0xe8, 0x60, 0xb4, 0x2d, 0x96, 0x2e, 0xb6, 0x08, 0x35, 0x62, 0x15, 0x3e, 0x96, 0xda, 0x16, 0xe1, 0x7c, 0xe2, 0x62, 0x51, 0x12, 0xe5, 0x2f, 0xcd, 0xf7, 0xdd, 0xe7, 0xfe, 0xce, 0xe5, 0x78, 0xfb, 0xa9, 0xf7, 0xfe, 0x7e, 0xbf, 0x7b, 0xf6, 0x08, 0x7e, 0x87, 0xb8, 0x7c, 0xcf, 0xf7, 0x7c, 0xce, 0xf7, 0x7d, 0xbe, 0xe7, 0xf4, 0x93, 0x4a, 0x92, 0x44, 0x5e, 0xe4, 0xe1, 0xf4, 0x22, 0x1b, 0x2f, 0xdb, 0xee, 0x70, 0xe0, 0xbf, 0xce, 0xa0, 0x23, 0x03, 0x8e, 0x0c, 0x18, 0x8c, 0x80, 0xa3, 0x84, 0x0c, 0x06, 0xd0, 0xf0, 0x76, 0x17, 0xc3, 0x12, 0x14, 0x01, 0xb5, 0xbf, 0x93, 0xeb, 0x7f, 0x48, 0xa3, 0xe3, 0xf2, 0x34, 0x29, 0x9c, 0xbe, 0xb9, 0xd4, 0x52, 0xf0, 0xe7, 0xdf, 0x2a, 0x37, 0x66, 0xd0, 0x4b, 0xf4, 0x9d, 0x38, 0x32, 0xcf, 0xcb, 0x12, 0x60, 0xdf, 0x5c, 0x8c, 0x03, 0x39, 0x55, 0x52, 0x45, 0xfd, 0xd4, 0x8d, 0xee, 0xe5, 0x3e, 0x83, 0x03, 0x25, 0x3f, 0x73, 0x80, 0xf4, 0xc5, 0x8f, 0xf4, 0xa7, 0x4f, 0x68, 0x68, 0xa0, 0x7d, 0x36, 0x3f, 0xb7, 0x4b, 0xc0, 0x19, 0x68, 0xe8, 0x24, 0x6a, 0xeb, 0x9f, 0x13, 0x3f, 0xcb, 0xe4, 0xd1, 0x53, 0x29, 0xf7, 0x1b, 0xee, 0xcf, 0x2c, 0x20, 0xeb, 0xd8, 0x02, 0x32, 0x00, 0x07, 0xf8, 0x28, 0xc8, 0x74, 0x7a, 0x2b, 0x82, 0xcc, 0xf3, 0xe6, 0x8c, 0x29, 0xe2, 0xd7, 0xc3, 0x4e, 0x4f, 0x86, 0xc8, 0xc7, 0xe7, 0xa4, 0xdb, 0x7d, 0xb2, 0xe9, 0x0d, 0x1d, 0x53, 0x4b, 0x46, 0x28, 0x01, 0x0e, 0x98, 0x9e, 0x29, 0xb1, 0xf4, 0xf5, 0xa4, 0x1f, 0x25, 0xcd, 0x6a, 0x4c, 0xf0, 0x7c, 0x79, 0x69, 0x6b, 0x3c, 0xbd, 0x6d, 0x8e, 0xbd, 0x69, 0x18, 0xbb, 0xe8, 0xac, 0x68, 0xab, 0x17, 0x04, 0x94, 0x10, 0xd7, 0xe5, 0x31, 0x87, 0x93, 0xb3, 0x12, 0xee, 0xae, 0xb3, 0x2e, 0xd9, 0xb7, 0x20, 0xd2, 0x01, 0xfb, 0x2c, 0x30, 0xb8, 0xcb, 0xe1, 0x00, 0x21, 0x8f, 0x06, 0x95, 0x20, 0xba, 0x3a, 0xeb, 0x47, 0x53, 0x8d, 0x79, 0x3c, 0xa4, 0x8f, 0xd7, 0x45, 0x18, 0xcd, 0xc0, 0xfd, 0x27, 0xa4, 0xe6, 0x96, 0xa2, 0x65, 0x49, 0x90, 0xae, 0x3a, 0xb2, 0x64, 0xc1, 0x14, 0xa6, 0xac, 0x76, 0x8a, 0xb6, 0x9b, 0x32, 0xe4, 0x40, 0xf1, 0x25, 0xb2, 0xea, 0x33, 0xe9, 0xfe, 0x63, 0xb9, 0x0b, 0x79, 0xcc, 0xa1, 0x39, 0xc9, 0xfa, 0x5d, 0x25, 0x36, 0x98, 0x6c, 0x8c, 0x56, 0x60, 0x05, 0x3f, 0x4c, 0xae, 0xcb, 0x97, 0x7a, 0xfb, 0xed, 0x36, 0x5e, 0xde, 0x68, 0xc8, 0x81, 0xe6, 0x6e, 0x69, 0xc0, 0xdc, 0x43, 0xfd, 0xbd, 0x69, 0xd9, 0x07, 0x34, 0x6e, 0xb1, 0xbe, 0x29, 0x94, 0x92, 0xb2, 0x0f, 0xe9, 0xa6, 0x18, 0xc5, 0x87, 0x5b, 0x3d, 0xd2, 0xa3, 0xa7, 0xfa, 0xbb, 0x34, 0x10, 0x86, 0x1c, 0x48, 0x8f, 0xa5, 0xe1, 0xaf, 0xc8, 0xa6, 0xf4, 0x9b, 0xa4, 0xf7, 0xbf, 0x9c, 0xfc, 0xae, 0x41, 0x43, 0x91, 0xb2, 0x34, 0x3c, 0x46, 0x36, 0x16, 0x4a, 0x97, 0x5a, 0xe4, 0xa4, 0xb9, 0xb9, 0xd2, 0xf7, 0x12, 0xe8, 0x02, 0x3f, 0xfd, 0x5d, 0x1a, 0x08, 0x43, 0x0e, 0xbc, 0xbd, 0x8a, 0xd4, 0x7e, 0x4a, 0x23, 0x5f, 0x55, 0xc2, 0x79, 0xa6, 0x4e, 0xb9, 0xd1, 0x34, 0xf4, 0x5d, 0x6f, 0x27, 0xbf, 0xfd, 0xa9, 0xc0, 0x4a, 0x77, 0xd1, 0x92, 0x2c, 0x1a, 0xe0, 0xab, 0x01, 0xd7, 0x5f, 0x32, 0xe4, 0x00, 0xc4, 0xcf, 0x71, 0x21, 0x49, 0x11, 0x8a, 0x1a, 0x6b, 0xaa, 0x59, 0x8d, 0xd9, 0x14, 0xa3, 0x6f, 0x9f, 0x2e, 0xc2, 0xa8, 0x03, 0xb2, 0x0f, 0x56, 0x74, 0xcf, 0x19, 0xed, 0x50, 0xb7, 0xd4, 0x19, 0x01, 0xd6, 0x30, 0x05, 0x38, 0x60, 0x8d, 0x9a, 0x7f, 0x0e, 0xe3, 0x70, 0x40, 0x15, 0x5b, 0xd3, 0x33, 0x32, 0xa9, 0x77, 0x8c, 0x85, 0xdc, 0xbe, 0x2a, 0x9d, 0x44, 0xc0, 0x73, 0x7a, 0xbe, 0x0f, 0xba, 0x90, 0x6c, 0xf8, 0xe0, 0x88, 0x94, 0x7d, 0x8e, 0xac, 0x5b, 0x86, 0xde, 0x4a, 0xc2, 0x54, 0x37, 0x2e, 0xd3, 0xf7, 0x7d, 0x23, 0x19, 0x78, 0x46, 0xca, 0x6a, 0x15, 0x17, 0xcd, 0xbb, 0xd4, 0x96, 0xd8, 0x49, 0x0b, 0x70, 0x20, 0x71, 0x29, 0x71, 0x71, 0xa6, 0xe3, 0x13, 0xb2, 0x65, 0x5f, 0xff, 0x22, 0xe1, 0x5f, 0x6e, 0x9a, 0xd3, 0x74, 0x07, 0x76, 0x95, 0x4d, 0xaa, 0x6d, 0x4c, 0x0a, 0x57, 0xcf, 0xec, 0xa7, 0x05, 0x9c, 0x81, 0xd7, 0x03, 0x49, 0xd1, 0x56, 0x8a, 0x5b, 0xc9, 0x7a, 0x2b, 0xde, 0x78, 0x8d, 0x1e, 0x7e, 0xd7, 0x06, 0xbc, 0x86, 0x64, 0x2a, 0xea, 0xe7, 0xf5, 0xbf, 0x1e, 0x93, 0xe6, 0x6e, 0xc2, 0x7e, 0x95, 0x58, 0xf6, 0xf2, 0x0c, 0x25, 0x74, 0xa1, 0x49, 0x31, 0x03, 0x37, 0xd7, 0xea, 0xc5, 0x04, 0x6f, 0x0a, 0x21, 0x43, 0x98, 0x03, 0x42, 0xac, 0xb1, 0x43, 0x88, 0x80, 0x12, 0xb2, 0x43, 0xab, 0xc0, 0x2d, 0x0e, 0x07, 0x04, 0x06, 0xd3, 0x2e, 0x51, 0x8e, 0x0c, 0xd8, 0x15, 0x36, 0x81, 0x9b, 0x6c, 0xcb, 0xc0, 0x57, 0xe6, 0x21, 0x50, 0xbd, 0x71, 0x51, 0x36, 0xb4, 0xd1, 0x91, 0x91, 0x11, 0x4f, 0x4f, 0x4f, 0x67, 0x67, 0xe7, 0xa1, 0xa1, 0x21, 0x17, 0x17, 0x01, 0x57, 0xb8, 0x71, 0xeb, 0x21, 0xc1, 0x36, 0x3b, 0x7c, 0x7d, 0x7d, 0x3d, 0x3c, 0x3c, 0xfe, 0x3f, 0xd6, 0xc3, 0x01, 0x1b, 0x32, 0x00, 0xf4, 0xe4, 0xa4, 0xfc, 0x9e, 0x71, 0x72, 0xd2, 0x2f, 0x3c, 0x20, 0xad, 0x81, 0x41, 0x9a, 0xc1, 0xa1, 0x6f, 0xca, 0xb5, 0x6b, 0xd7, 0xd6, 0xae, 0x5d, 0xbb, 0xca, 0x3c, 0x56, 0x9b, 0xc7, 0xb1, 0x63, 0xc7, 0x2c, 0xb4, 0x56, 0x57, 0x57, 0x67, 0x65, 0x65, 0x05, 0x04, 0x04, 0xa0, 0xc6, 0x56, 0xae, 0x5c, 0x19, 0x15, 0x15, 0xb5, 0x79, 0xf3, 0x66, 0x35, 0xe6, 0xde, 0xbd, 0x7b, 0x3b, 0x76, 0xec, 0x08, 0x0b, 0x0b, 0xf3, 0xf2, 0xf2, 0x8a, 0x89, 0x89, 0x39, 0x74, 0xe8, 0xd0, 0xe0, 0xa0, 0xf2, 0x7b, 0xd8, 0xd9, 0xb3, 0x67, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2, 0xe2, 0xea, 0xeb, 0xeb, 0x33, 0x33, 0x33, 0xfd, 0xfc, 0xfc, 0x16, 0x2e, 0x5c, 0x58, 0x5a, 0x5a, 0xaa, 0xde, 0xae, 0x45, 0xe3, 0x2d, 0xa4, 0x3d, 0xf2, 0xf3, 0xf3, 0x2d, 0xf6, 0x6f, 0xdb, 0xb6, 0x4d, 0xbd, 0xe5, 0xca, 0x95, 0x2b, 0x0c, 0xb0, 0x61, 0xc3, 0x86, 0xf5, 0xeb, 0xd7, 0x53, 0xf3, 0x2b, 0x07, 0xb6, 0x72, 0x4c, 0x73, 0x73, 0xb3, 0x8f, 0x8f, 0x8f, 0x85, 0x90, 0xe0, 0xe0, 0xe0, 0xfe, 0xfe, 0x7e, 0x60, 0x52, 0x52, 0x52, 0xd8, 0x12, 0x4c, 0xe7, 0x18, 0x08, 0xb9, 0x73, 0xe7, 0x0e, 0x97, 0xa0, 0x41, 0x10, 0x8d, 0x35, 0xb6, 0x84, 0x23, 0x7b, 0xf9, 0xf2, 0xe5, 0x0b, 0xe6, 0xb1, 0x65, 0xcb, 0x16, 0xe8, 0xb0, 0x70, 0xe0, 0xe0, 0xc1, 0x83, 0x60, 0x86, 0x87, 0x87, 0x33, 0x7c, 0x77, 0x77, 0xf7, 0xce, 0x9d, 0x3b, 0x91, 0x10, 0x36, 0x1d, 0x1b, 0x1b, 0x8b, 0x88, 0x90, 0xff, 0xdb, 0x1f, 0x14, 0x14, 0x74, 0xf2, 0xe4, 0xc9, 0x8e, 0x8e, 0x8e, 0xbc, 0xbc, 0x3c, 0x1c, 0x24, 0x2e, 0xe7, 0xc1, 0x83, 0x07, 0xc8, 0x2b, 0xa6, 0xee, 0xee, 0xee, 0xe5, 0xe5, 0xe5, 0xc8, 0x83, 0xbf, 0xbf, 0x3f, 0xa6, 0x47, 0x8f, 0x1e, 0x65, 0x12, 0xb4, 0xbf, 0xfa, 0x0e, 0xa8, 0xf7, 0xe7, 0xe6, 0xe6, 0x72, 0xc5, 0x9c, 0x7f, 0xfe, 0xfc, 0x79, 0x30, 0x31, 0x50, 0x39, 0xd9, 0xd9, 0xd9, 0x15, 0x15, 0x15, 0x5d, 0x5d, 0x5d, 0x7c, 0xb5, 0xad, 0xad, 0x8d, 0xad, 0x16, 0x17, 0x17, 0x73, 0xe6, 0xf6, 0xed, 0xdb, 0xc1, 0x84, 0xc5, 0xe3, 0xe3, 0xe3, 0x60, 0x66, 0x64, 0x64, 0x60, 0x9a, 0x9c, 0x9c, 0xcc, 0x00, 0xa9, 0xa9, 0xa9, 0x98, 0xee, 0xdb, 0xb7, 0x8f, 0xe3, 0x35, 0x08, 0xfd, 0x33, 0xc0, 0xd4, 0x6b, 0x7c, 0xd3, 0xd3, 0xd3, 0x13, 0x12, 0x12, 0x00, 0x80, 0xad, 0x25, 0x25, 0x25, 0x08, 0x7f, 0x48, 0x48, 0xc8, 0x9e, 0x3d, 0x7b, 0xd8, 0x96, 0xbb, 0x77, 0xef, 0x32, 0x22, 0x2d, 0x2d, 0x8d, 0x0b, 0x61, 0xf4, 0xf0, 0xf0, 0x70, 0x4f, 0x4f, 0x0f, 0x67, 0xae, 0x58, 0xb1, 0x82, 0xd1, 0x8b, 0x16, 0x2d, 0x02, 0x81, 0x55, 0xbe, 0xa4, 0x41, 0x08, 0x70, 0x00, 0x5d, 0x15, 0x35, 0xd6, 0xda, 0xda, 0x8a, 0xa3, 0x99, 0x98, 0x98, 0xe8, 0xea, 0xea, 0x8a, 0x80, 0x9d, 0x3a, 0x75, 0x0a, 0xb5, 0x04, 0xc5, 0xa8, 0x1c, 0xa6, 0xbe, 0xb1, 0xb1, 0x91, 0xdb, 0xc1, 0x68, 0x14, 0x7a, 0x60, 0xe0, 0xd4, 0x1f, 0xfa, 0x78, 0xd7, 0x62, 0xa7, 0x88, 0x83, 0xb5, 0x09, 0x01, 0x0e, 0xa0, 0x36, 0xd0, 0x37, 0x70, 0x54, 0x8e, 0x1c, 0x39, 0x72, 0xf5, 0xea, 0xd5, 0xce, 0xce, 0x4e, 0xd4, 0x06, 0x7c, 0xa8, 0xab, 0xab, 0x83, 0x6e, 0xd4, 0x95, 0xb7, 0xb7, 0xfc, 0x37, 0x33, 0x24, 0xa7, 0xaf, 0xaf, 0x0f, 0x44, 0x4b, 0x4b, 0x4b, 0x55, 0x55, 0x15, 0x08, 0xb4, 0xa3, 0xb9, 0x73, 0xe7, 0x82, 0x00, 0x18, 0x5f, 0xd6, 0xa3, 0x39, 0xc1, 0x98, 0x98, 0xea, 0x0c, 0xe0, 0xac, 0x1f, 0x33, 0x9e, 0x81, 0xbd, 0x7b, 0xf7, 0x42, 0x87, 0x9b, 0x9b, 0x1b, 0xaa, 0xb6, 0xb2, 0xb2, 0xf2, 0xc0, 0x81, 0x03, 0x98, 0x22, 0x9c, 0xa8, 0x28, 0x26, 0xf9, 0xf4, 0xe9, 0xd3, 0xcc, 0x08, 0xe4, 0x2a, 0x3a, 0x3a, 0x9a, 0xd1, 0xb8, 0xd1, 0x6f, 0xdc, 0xb8, 0x01, 0xc0, 0xfe, 0xfd, 0xfb, 0x39, 0x07, 0x87, 0xb8, 0xa8, 0xa8, 0x88, 0xa5, 0x02, 0x79, 0x28, 0x2c, 0x2c, 0xd4, 0xb5, 0xcd, 0xb6, 0x9b, 0x78, 0xc6, 0xba, 0x44, 0x8b, 0x84, 0x32, 0x18, 0x77, 0xfc, 0xf8, 0x71, 0x66, 0x0a, 0xda, 0x48, 0x41, 0x41, 0x41, 0x64, 0x64, 0x24, 0x9b, 0xee, 0xde, 0xbd, 0x1b, 0x18, 0x38, 0xdf, 0xdb, 0xdb, 0x8b, 0x4a, 0x03, 0x13, 0xe5, 0x7e, 0xe2, 0xc4, 0x09, 0xf4, 0x7e, 0xd0, 0xf0, 0x04, 0x63, 0x62, 0x62, 0x02, 0xb5, 0x07, 0x39, 0xb0, 0x1e, 0xa2, 0x46, 0x47, 0x47, 0xf1, 0xb5, 0xaa, 0x96, 0x74, 0x5d, 0x54, 0x03, 0x58, 0xbb, 0xc8, 0xc9, 0xc9, 0x51, 0x33, 0x4d, 0x26, 0x13, 0x9a, 0x23, 0xfa, 0x49, 0x7b, 0x7b, 0xfb, 0xcd, 0x9b, 0x37, 0xf1, 0xc5, 0xab, 0x49, 0x0d, 0xe0, 0xf4, 0xc3, 0x87, 0x0f, 0x91, 0x96, 0x81, 0x81, 0x01, 0xce, 0x31, 0x4e, 0xe8, 0x67, 0xe0, 0xe2, 0xc5, 0x8b, 0x4d, 0x4d, 0x4d, 0xb8, 0x65, 0x1b, 0x1a, 0x1a, 0x6a, 0x6a, 0x6a, 0x10, 0xb3, 0x35, 0x6b, 0xd6, 0xb0, 0xd0, 0xb2, 0x2f, 0x2e, 0x57, 0x0c, 0xd0, 0xa1, 0xa1, 0xa1, 0x6a, 0xfe, 0x74, 0x1a, 0x99, 0xc1, 0x98, 0xce, 0x37, 0xc4, 0xd1, 0x8d, 0x81, 0xc5, 0xa3, 0x80, 0xdf, 0x50, 0xba, 0x1b, 0xff, 0x1d, 0x80, 0xfe, 0x63, 0x0e, 0x37, 0x25, 0xfa, 0x09, 0x1a, 0x36, 0xae, 0xfa, 0xd8, 0xd8, 0xd8, 0xe5, 0xcb, 0x97, 0x1b, 0x0a, 0x98, 0xe8, 0xcd, 0xfa, 0x0e, 0x88, 0xd6, 0x28, 0x58, 0x9e, 0x80, 0x7b, 0x40, 0xb0, 0x45, 0x36, 0x8a, 0x73, 0x38, 0x60, 0x63, 0xc0, 0x84, 0xc3, 0x1d, 0x19, 0x10, 0x1e, 0x52, 0x1b, 0x05, 0x3a, 0x32, 0x60, 0x63, 0xc0, 0x84, 0xc3, 0x5f, 0xf8, 0x0c, 0xfc, 0x0d, 0x80, 0x98, 0xbd, 0xed, 0xf7, 0x50, 0xda, 0x08, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXTextPlainIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, 0x32, 0x32, 0x3a, 0x30, 0x32, 0x3a, 0x34, 0x33, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x04, 0xa5, 0xd6, 0xff, 0x00, 0x00, 0x05, 0x7b, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x5b, 0x48, 0x23, 0x57, 0x18, 0xce, 0x24, 0x31, 0xf1, 0x52, 0xad, 0x31, 0x78, 0xdf, 0xd6, 0x2a, 0xb6, 0x52, 0xad, 0x28, 0x8a, 0xe8, 0x82, 0x62, 0xe9, 0x45, 0xa5, 0x45, 0xf0, 0x82, 0x58, 0x41, 0xb4, 0xed, 0x83, 0x0f, 0xe2, 0x83, 0x6f, 0x8a, 0x20, 0xb8, 0x3e, 0x28, 0x05, 0x45, 0x7d, 0x12, 0x84, 0x82, 0x8a, 0x88, 0x22, 0x0a, 0xbe, 0x54, 0xb4, 0xc2, 0x3e, 0xe9, 0x82, 0x37, 0x50, 0x1a, 0x45, 0x2a, 0x5e, 0x8a, 0xdd, 0x20, 0x58, 0x35, 0xb1, 0x8a, 0x49, 0x4c, 0xd2, 0x2f, 0x7b, 0xe2, 0x38, 0x3b, 0xc6, 0x89, 0x33, 0x39, 0xac, 0x2b, 0x9d, 0xf3, 0x30, 0xfc, 0xe7, 0xfc, 0xdf, 0x7f, 0xff, 0xcf, 0x3f, 0x93, 0x30, 0x4e, 0xa7, 0x53, 0xf1, 0x94, 0x97, 0xf2, 0x29, 0x3b, 0xef, 0xf2, 0x5d, 0x0e, 0xe0, 0xb1, 0x2b, 0x28, 0x57, 0x40, 0xae, 0x80, 0x8f, 0x19, 0x90, 0x5b, 0xc8, 0xc7, 0x04, 0xfa, 0x2c, 0x2e, 0x57, 0xc0, 0xe7, 0x14, 0xfa, 0xa8, 0x40, 0xae, 0x80, 0x8f, 0x09, 0xf4, 0x59, 0x5c, 0xed, 0xb3, 0x06, 0x97, 0x02, 0xa7, 0x43, 0xf1, 0x7a, 0xc3, 0x61, 0x32, 0x3a, 0x9d, 0x0e, 0x2f, 0x9f, 0x86, 0x8c, 0x92, 0xf9, 0x30, 0x86, 0x89, 0x49, 0x55, 0x32, 0x94, 0x6a, 0x4f, 0x27, 0x80, 0xfd, 0x57, 0xf6, 0xdf, 0x5e, 0x58, 0x1e, 0x9e, 0x8b, 0xef, 0x5e, 0x68, 0xe3, 0x9f, 0xab, 0x1e, 0x8e, 0x17, 0x40, 0xd2, 0xc9, 0x83, 0xf9, 0xc8, 0x4b, 0xe2, 0x79, 0x1e, 0x98, 0x8d, 0xe2, 0xf0, 0x3c, 0x71, 0xee, 0x96, 0x4e, 0x05, 0x6c, 0x57, 0x6e, 0x9d, 0xfe, 0x21, 0x4c, 0xa0, 0x8e, 0xc1, 0xc6, 0xf2, 0xaf, 0xf3, 0xe2, 0x1f, 0xb7, 0x97, 0x41, 0x7a, 0xa5, 0xf6, 0x03, 0x17, 0xe0, 0xf2, 0xd4, 0x79, 0x65, 0x76, 0x1d, 0x5e, 0x8b, 0xa8, 0x96, 0x4b, 0x50, 0x60, 0xd1, 0x09, 0xc0, 0x6e, 0x71, 0xfb, 0xfa, 0xc5, 0xf7, 0xea, 0xec, 0x9f, 0xfc, 0x60, 0x6f, 0x73, 0xc6, 0xfe, 0xb2, 0xc7, 0xed, 0x66, 0xf6, 0x8f, 0x7e, 0x9f, 0x17, 0xba, 0x1a, 0xe6, 0xd5, 0xaf, 0xb6, 0xb5, 0x71, 0x1b, 0x88, 0xeb, 0x1b, 0xbc, 0x80, 0x67, 0x0f, 0x64, 0xd1, 0x69, 0xa1, 0x6b, 0xab, 0xdb, 0x9c, 0x4a, 0xe3, 0x4a, 0xff, 0x7d, 0x4b, 0xe5, 0x0a, 0xcd, 0xb5, 0xec, 0x37, 0x78, 0xb2, 0xf5, 0xe5, 0x49, 0x29, 0x80, 0x9b, 0x96, 0x60, 0x5d, 0xf4, 0xe8, 0x93, 0x5a, 0xeb, 0x0e, 0x8f, 0x0d, 0xd8, 0x23, 0x4c, 0xd4, 0x21, 0x9d, 0x00, 0x74, 0x1f, 0xb9, 0x3d, 0x0b, 0x89, 0x12, 0xaa, 0x80, 0x3e, 0xc1, 0x6d, 0x2e, 0xf4, 0x99, 0x10, 0x4c, 0x54, 0x00, 0x74, 0xee, 0x40, 0xd2, 0x37, 0x6a, 0xcb, 0x85, 0x42, 0xa9, 0x52, 0x7c, 0x22, 0x38, 0x1c, 0x9f, 0xa5, 0x29, 0x9f, 0xff, 0xac, 0xb9, 0xb6, 0x3a, 0x93, 0xbe, 0xa6, 0x63, 0x17, 0xa1, 0xd2, 0x51, 0xa4, 0x0d, 0x56, 0x64, 0x55, 0x7b, 0x57, 0xa5, 0xd2, 0x28, 0x32, 0x7e, 0xf0, 0x0e, 0x13, 0x55, 0x01, 0x3a, 0x2d, 0x24, 0xca, 0x24, 0x5d, 0xb0, 0x1c, 0x00, 0xdd, 0x7c, 0x8a, 0xd7, 0xf6, 0xe4, 0x2b, 0x40, 0xf9, 0x4a, 0x59, 0xce, 0x15, 0x27, 0x7f, 0x39, 0x90, 0x47, 0xd3, 0x6b, 0xd7, 0x93, 0x2c, 0xd3, 0xdf, 0x0e, 0xa3, 0x81, 0xc1, 0xe0, 0xd4, 0x7d, 0xac, 0xc4, 0x75, 0xa7, 0xbb, 0x18, 0x8a, 0xff, 0x8d, 0xfe, 0xf9, 0xd2, 0xfe, 0xfb, 0x2f, 0x56, 0x81, 0x2f, 0x6a, 0x7c, 0x4b, 0x7f, 0xdb, 0xac, 0xf9, 0xf4, 0x4b, 0x3a, 0xdf, 0xa1, 0x24, 0x11, 0x34, 0x5b, 0xc8, 0x68, 0x70, 0x08, 0x78, 0x0f, 0x7b, 0xe0, 0x1a, 0xff, 0xb8, 0xad, 0x0c, 0x95, 0x52, 0xd0, 0x0c, 0xe0, 0xb3, 0xaf, 0x54, 0xfa, 0x78, 0x21, 0x85, 0xe0, 0x02, 0x43, 0xc5, 0x6f, 0x56, 0x09, 0xcd, 0x16, 0x62, 0x95, 0xbe, 0x4b, 0x42, 0x28, 0x61, 0xef, 0xd2, 0x0f, 0xc9, 0xb6, 0xe4, 0x00, 0x24, 0xa7, 0x8e, 0x92, 0xa0, 0x5c, 0x01, 0x4a, 0x89, 0x94, 0xac, 0xe6, 0xff, 0x5d, 0x81, 0xeb, 0x37, 0xcb, 0xe1, 0x90, 0xfe, 0x6e, 0x5a, 0x5d, 0x5d, 0x6d, 0x6f, 0x6f, 0x3f, 0x3a, 0x3a, 0x92, 0x5c, 0x01, 0x05, 0x3e, 0x25, 0x24, 0xac, 0x9d, 0x9d, 0x9d, 0xb0, 0xb0, 0x30, 0x62, 0x35, 0x34, 0x34, 0x54, 0x82, 0x06, 0x22, 0x52, 0x55, 0x55, 0x05, 0x25, 0xc3, 0xc3, 0xc3, 0x92, 0x35, 0x48, 0x6c, 0xa1, 0xe0, 0xe0, 0xe0, 0xa4, 0xa4, 0xa4, 0x98, 0x98, 0x18, 0x98, 0xbf, 0xb8, 0xb8, 0x90, 0x9c, 0x3f, 0xe8, 0x51, 0xa9, 0x54, 0x91, 0x91, 0x91, 0x92, 0x35, 0x48, 0xac, 0x00, 0x49, 0xd8, 0xca, 0xca, 0x0a, 0x0c, 0xfb, 0xf9, 0xf9, 0x09, 0xe7, 0x0f, 0x3d, 0x26, 0x00, 0xb0, 0x5a, 0xad, 0x02, 0x5c, 0xaf, 0x2c, 0x0f, 0x15, 0x68, 0x6d, 0x6d, 0xcd, 0xce, 0xce, 0x2e, 0x28, 0x28, 0x58, 0x5a, 0x5a, 0xca, 0xc9, 0xc9, 0x09, 0x0c, 0x0c, 0x4c, 0x4d, 0x4d, 0xed, 0xea, 0xea, 0x12, 0xd5, 0xeb, 0x5b, 0x5b, 0x5b, 0xb5, 0xb5, 0xb5, 0x59, 0x59, 0x59, 0xc8, 0x31, 0x34, 0xa4, 0xa7, 0xa7, 0x4f, 0x4f, 0x4f, 0x73, 0xd3, 0x3c, 0x37, 0x37, 0x97, 0x9f, 0x9f, 0x0f, 0x43, 0xb9, 0xb9, 0xb9, 0xbd, 0xbd, 0xbd, 0x5c, 0xd6, 0xe9, 0xe9, 0x69, 0x49, 0x49, 0x09, 0x58, 0xf5, 0xf5, 0xf5, 0x93, 0x93, 0x93, 0xb0, 0x1e, 0x14, 0x14, 0x54, 0x54, 0x54, 0x64, 0x34, 0x1a, 0xb9, 0x30, 0x37, 0x7d, 0x37, 0xc4, 0xf8, 0xf8, 0x78, 0xc2, 0x83, 0x18, 0x57, 0xa0, 0xba, 0xba, 0x9a, 0x07, 0x16, 0xa8, 0x00, 0x22, 0x87, 0x2c, 0xc3, 0x30, 0x88, 0x21, 0x22, 0x22, 0x02, 0xb4, 0x56, 0xab, 0xdd, 0xdf, 0xdf, 0x67, 0x35, 0x34, 0x37, 0x37, 0xb3, 0xca, 0x11, 0x2a, 0x7b, 0x0e, 0x82, 0xa8, 0x05, 0x17, 0xc1, 0xab, 0xd5, 0xb7, 0xbf, 0x58, 0x2a, 0x2b, 0x2b, 0xb9, 0x30, 0x42, 0x7b, 0x68, 0xa1, 0xdd, 0xdd, 0x5d, 0xd2, 0x94, 0x3a, 0x9d, 0x6e, 0x60, 0x60, 0x60, 0x63, 0x63, 0xa3, 0xb4, 0xb4, 0x94, 0x18, 0x9b, 0x9f, 0x9f, 0xe7, 0xaa, 0x10, 0x08, 0x60, 0x6a, 0x6a, 0xaa, 0xbb, 0xbb, 0xfb, 0xf0, 0xf0, 0x10, 0x78, 0x8b, 0xc5, 0x42, 0x62, 0xe0, 0x5e, 0xd6, 0xf3, 0xf3, 0xf3, 0x99, 0x99, 0x19, 0xa2, 0x99, 0x17, 0x00, 0x44, 0x46, 0x46, 0x46, 0x88, 0xc5, 0xc2, 0xc2, 0x42, 0x58, 0xa9, 0xab, 0xab, 0xc3, 0x16, 0x09, 0xe5, 0x5a, 0x27, 0xb4, 0x87, 0x00, 0xc0, 0x48, 0x48, 0x48, 0x80, 0x00, 0x2a, 0x48, 0x40, 0xc7, 0xc7, 0xc7, 0xb8, 0x6a, 0x38, 0x69, 0x6a, 0x6a, 0xe2, 0xaa, 0x10, 0x08, 0x00, 0x30, 0x44, 0xdb, 0xd1, 0xd1, 0xd1, 0xd8, 0xd8, 0xd8, 0xd6, 0xd6, 0x96, 0x96, 0x96, 0x06, 0xf1, 0xce, 0xce, 0x4e, 0xae, 0x38, 0x68, 0x28, 0xc4, 0xf9, 0xdd, 0x00, 0xd6, 0xd7, 0xd7, 0x71, 0x8e, 0xb5, 0xbc, 0xbc, 0x0c, 0x18, 0xa6, 0x2d, 0xd9, 0x9a, 0x4c, 0x26, 0x9e, 0x86, 0xdb, 0x02, 0x11, 0x04, 0xf7, 0x89, 0x1e, 0x25, 0x5b, 0xbd, 0x5e, 0x9f, 0x92, 0x92, 0x82, 0x52, 0x20, 0xa3, 0x5c, 0xc0, 0x7d, 0xb4, 0xcd, 0x66, 0x2b, 0x2e, 0x2e, 0x9e, 0x9d, 0x9d, 0x05, 0x40, 0xa3, 0xd1, 0xa0, 0x91, 0x50, 0x04, 0xd0, 0x76, 0xbb, 0xfd, 0x3e, 0x91, 0xfb, 0xce, 0x33, 0x33, 0x33, 0xc1, 0x8a, 0x8b, 0x8b, 0x23, 0x80, 0xab, 0xab, 0xab, 0x90, 0x90, 0x10, 0x2e, 0xd8, 0xc3, 0x25, 0x66, 0xd9, 0x0b, 0x0b, 0x0b, 0x84, 0xc6, 0xad, 0xda, 0xdc, 0xdc, 0x04, 0xcd, 0x5e, 0x0f, 0x16, 0xe3, 0x91, 0x40, 0x03, 0x10, 0xef, 0x27, 0x26, 0x26, 0x90, 0xb3, 0xcb, 0xcb, 0xcb, 0xb2, 0xb2, 0x32, 0x8f, 0x48, 0xaf, 0x87, 0x08, 0x1e, 0x18, 0xf2, 0xf4, 0x08, 0x16, 0x0a, 0x60, 0x74, 0x74, 0x74, 0x6c, 0x6c, 0x6c, 0x6f, 0x6f, 0xaf, 0xa1, 0xa1, 0x01, 0xef, 0x5c, 0xc8, 0xa3, 0x23, 0x59, 0x2d, 0x38, 0x61, 0x33, 0xca, 0xa5, 0x01, 0xc0, 0x08, 0xc2, 0x33, 0x3c, 0x3c, 0x1c, 0x2d, 0xee, 0xef, 0xef, 0x8f, 0x41, 0x79, 0x72, 0x72, 0x82, 0x13, 0x54, 0x9f, 0x15, 0x07, 0x0d, 0x29, 0x32, 0xd9, 0xb8, 0x34, 0x01, 0xb0, 0x48, 0x42, 0xb0, 0x03, 0x90, 0x3d, 0x67, 0xf5, 0x08, 0xdd, 0x81, 0x5b, 0xd0, 0x1b, 0xaa, 0xa6, 0xa6, 0x06, 0xf2, 0x58, 0x66, 0xb3, 0x39, 0x36, 0x36, 0x96, 0xc7, 0xc5, 0x16, 0x93, 0x97, 0x00, 0x06, 0x07, 0x07, 0x09, 0x37, 0x23, 0x23, 0xa3, 0xa2, 0xa2, 0x82, 0x05, 0xe3, 0x8d, 0x31, 0x34, 0x34, 0x04, 0x0c, 0x2a, 0x13, 0x10, 0x10, 0xc0, 0xd3, 0x80, 0x66, 0xeb, 0xef, 0xef, 0x07, 0xf7, 0xe0, 0xe0, 0x00, 0xf3, 0x83, 0x70, 0x13, 0x13, 0x13, 0xcf, 0xce, 0xce, 0xa2, 0xa3, 0xa3, 0xc9, 0x16, 0xd3, 0x05, 0xd6, 0x89, 0x15, 0xf2, 0x14, 0xaa, 0x40, 0x4b, 0x4b, 0x4b, 0x5e, 0x5e, 0x5e, 0x54, 0x54, 0x14, 0x66, 0x62, 0x4f, 0x4f, 0x0f, 0xeb, 0x16, 0x74, 0x91, 0x3b, 0xcd, 0xf3, 0x80, 0x2d, 0x34, 0x06, 0x2e, 0x8a, 0x86, 0xc9, 0xb3, 0xb6, 0xb6, 0x06, 0x5f, 0xd1, 0xc1, 0x7d, 0x7d, 0x7d, 0xe8, 0x5d, 0x48, 0x91, 0x4a, 0x42, 0x50, 0xa9, 0xe4, 0x9b, 0x66, 0xc5, 0xc1, 0x45, 0x30, 0x44, 0x39, 0x86, 0x2f, 0xd2, 0xcf, 0xdd, 0xc2, 0xef, 0xb7, 0xec, 0x72, 0xa3, 0x61, 0x69, 0x32, 0x85, 0x16, 0x17, 0x17, 0xd9, 0x13, 0x09, 0x04, 0x1a, 0xcc, 0x60, 0x30, 0xdc, 0x9d, 0x1b, 0x12, 0x54, 0x09, 0x88, 0xf0, 0xa7, 0x10, 0xec, 0xe1, 0xe5, 0x87, 0x27, 0xa2, 0x1c, 0x1f, 0x1f, 0xdf, 0xde, 0xde, 0x2e, 0x2f, 0x2f, 0xc7, 0x0b, 0xe5, 0xad, 0xa0, 0x1f, 0xb6, 0x41, 0x8e, 0x93, 0x93, 0x93, 0x1f, 0x86, 0xf5, 0x01, 0xc5, 0x0b, 0x0e, 0x6f, 0x2e, 0x9e, 0x32, 0x74, 0x0e, 0x0f, 0xf3, 0x5e, 0x6d, 0xf9, 0x15, 0xc0, 0x47, 0x08, 0xbe, 0x2e, 0xf1, 0x9a, 0x24, 0x61, 0xa0, 0x71, 0x31, 0xd1, 0x79, 0x21, 0xbd, 0x57, 0x5b, 0xf9, 0x7f, 0xa1, 0xc7, 0x2e, 0x07, 0x7f, 0x96, 0x3d, 0xb6, 0x3f, 0xa2, 0xed, 0xcb, 0x01, 0x88, 0x4e, 0x19, 0x65, 0x01, 0xb9, 0x02, 0x94, 0x13, 0x2a, 0x5a, 0x9d, 0x5c, 0x01, 0xd1, 0x29, 0xa3, 0x2c, 0xf0, 0x1f, 0x15, 0xdc, 0xd7, 0x70, 0xbb, 0x15, 0xe8, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXHTMLIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, 0x32, 0x33, 0x3a, 0x30, 0x32, 0x3a, 0x39, 0x35, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x3c, 0x50, 0x22, 0x3f, 0x00, 0x00, 0x05, 0xe7, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x6b, 0x4c, 0x5b, 0x55, 0x1c, 0xa7, 0xa5, 0xe5, 0xe5, 0x78, 0xb5, 0x94, 0xf2, 0x4a, 0x00, 0x91, 0x47, 0xd8, 0x32, 0x51, 0x24, 0x7c, 0x70, 0x20, 0xf2, 0x34, 0x31, 0x13, 0x1f, 0x0c, 0x30, 0x2c, 0xbc, 0x24, 0xca, 0xc6, 0x07, 0x1e, 0x09, 0x1f, 0xf8, 0x60, 0x42, 0x4c, 0xd0, 0x84, 0x98, 0x98, 0xf1, 0xc5, 0x69, 0x54, 0x60, 0x3a, 0x82, 0x3a, 0x5d, 0x98, 0x24, 0xdb, 0x88, 0x01, 0x24, 0x3a, 0x32, 0xca, 0x63, 0x4c, 0x26, 0x8f, 0x05, 0x48, 0x86, 0x06, 0x28, 0x14, 0x4a, 0x5b, 0x1e, 0x85, 0xb6, 0xf8, 0x83, 0xa3, 0xd7, 0x6b, 0xcb, 0x6e, 0x6f, 0x7b, 0xe9, 0x08, 0xc9, 0x3d, 0x69, 0x2e, 0xff, 0xf3, 0x3b, 0xff, 0xf7, 0xff, 0x7f, 0xce, 0x69, 0x2f, 0x82, 0xdd, 0xdd, 0x5d, 0xa7, 0xe3, 0x3c, 0x84, 0xc7, 0xd9, 0xf9, 0x3d, 0xdf, 0xf9, 0x00, 0x8e, 0xba, 0x82, 0x7c, 0x05, 0xf8, 0x0a, 0x70, 0xcc, 0x00, 0xdf, 0x42, 0x1c, 0x13, 0xc8, 0x59, 0x9c, 0xaf, 0x00, 0xe7, 0x14, 0x72, 0x54, 0xc0, 0x57, 0x80, 0x63, 0x02, 0x39, 0x8b, 0xf3, 0x15, 0x38, 0x28, 0x85, 0xab, 0x86, 0x15, 0x4b, 0x78, 0xdd, 0xa4, 0x33, 0x39, 0x99, 0x2c, 0x71, 0x8e, 0xc8, 0x21, 0x57, 0xe0, 0xc1, 0xc6, 0x68, 0xed, 0xec, 0xc5, 0x94, 0xfb, 0xcf, 0x5b, 0xba, 0x35, 0xa0, 0xbd, 0x93, 0x3c, 0xfa, 0xec, 0x67, 0x0b, 0x97, 0x34, 0x46, 0xb5, 0xe5, 0xaa, 0xdd, 0x88, 0xe0, 0x50, 0x7e, 0x0f, 0x20, 0xb5, 0xb7, 0x57, 0x7f, 0x6a, 0x5e, 0xb8, 0xac, 0xd0, 0xf6, 0xc3, 0x15, 0x57, 0xa1, 0xdb, 0xc4, 0x0b, 0x0b, 0x66, 0x3e, 0xf5, 0xac, 0x75, 0x95, 0x4e, 0xe6, 0x02, 0x74, 0x77, 0xf6, 0x78, 0x53, 0x9a, 0x57, 0x1c, 0x50, 0xfe, 0x8c, 0x5b, 0xb4, 0x19, 0x8f, 0x1d, 0x53, 0x91, 0x1d, 0x32, 0x74, 0x91, 0x35, 0xa3, 0xba, 0x7d, 0xa9, 0xf5, 0xeb, 0xc5, 0x2f, 0xfe, 0xd2, 0xcf, 0xd1, 0x71, 0x06, 0x7a, 0xd3, 0xb8, 0x71, 0x55, 0xd9, 0x8c, 0xcf, 0x19, 0xef, 0x94, 0x12, 0xf9, 0x85, 0x54, 0x9f, 0x2c, 0x06, 0x66, 0xab, 0x4b, 0xf6, 0x07, 0xf0, 0x70, 0x73, 0xa2, 0x65, 0xf1, 0xf2, 0x75, 0xd5, 0x77, 0x70, 0x88, 0x6e, 0xc6, 0xdf, 0x25, 0xe0, 0x9c, 0x5f, 0x01, 0x1d, 0x21, 0x74, 0x8c, 0xfb, 0xc9, 0x37, 0xfc, 0xf2, 0x6e, 0xae, 0xdc, 0xd8, 0x32, 0x6d, 0x12, 0xe4, 0xd7, 0xb5, 0x5e, 0x7c, 0xc2, 0xdc, 0x9e, 0x2e, 0x94, 0xbf, 0x7b, 0x4e, 0x56, 0x70, 0x42, 0xe8, 0x69, 0x29, 0x65, 0x15, 0xb1, 0xb9, 0x85, 0x76, 0x9d, 0x76, 0x7b, 0xd4, 0x5d, 0xcd, 0x8b, 0x9f, 0xc2, 0x36, 0x5d, 0xbb, 0x58, 0x28, 0x4e, 0xf5, 0x79, 0x25, 0xd7, 0xef, 0x7c, 0x8a, 0x4f, 0x86, 0xf0, 0xf1, 0xbf, 0x93, 0xb4, 0xc6, 0xb5, 0x0e, 0xd5, 0xb5, 0xf6, 0xa5, 0x2b, 0x0f, 0xd6, 0x47, 0xe9, 0xe2, 0x27, 0x9c, 0x3d, 0x11, 0x43, 0x91, 0xfc, 0xbd, 0x50, 0xd7, 0x70, 0x3a, 0x6e, 0x95, 0xb6, 0x39, 0x80, 0xe2, 0xa9, 0x9c, 0x5f, 0xd4, 0x3f, 0xd3, 0xf5, 0x46, 0x7b, 0xc4, 0xe6, 0xca, 0xce, 0xbf, 0x2e, 0xcd, 0x93, 0x88, 0xa4, 0x74, 0x9c, 0x99, 0xfe, 0x63, 0xe3, 0x3e, 0xc2, 0x40, 0x30, 0x1a, 0xc3, 0x7f, 0x7b, 0x5a, 0x20, 0x10, 0x7c, 0x14, 0x76, 0x29, 0x4f, 0x56, 0xc8, 0x2c, 0x4b, 0x5f, 0xb5, 0xf9, 0x14, 0x5a, 0x35, 0xa8, 0x28, 0xf9, 0x2c, 0xc9, 0xd9, 0x8e, 0x93, 0x3d, 0xb7, 0x4e, 0xdd, 0x29, 0x95, 0x5f, 0xb4, 0xc9, 0x7b, 0x68, 0x88, 0xf5, 0x38, 0xfd, 0x41, 0xe8, 0xc7, 0x03, 0xcf, 0x4d, 0x7c, 0x12, 0xf1, 0x79, 0xb8, 0x5b, 0x04, 0xd1, 0x89, 0x13, 0x45, 0x65, 0x58, 0xa6, 0xf4, 0xb3, 0x21, 0xec, 0xdf, 0x03, 0xd0, 0xde, 0xad, 0xbe, 0x85, 0x6e, 0x79, 0xdb, 0xbf, 0x38, 0xc9, 0xeb, 0x65, 0x36, 0xc6, 0xcc, 0x78, 0xf4, 0xbb, 0x5b, 0x9d, 0xaa, 0xeb, 0xdf, 0x2e, 0x5d, 0x99, 0xdd, 0x9a, 0x36, 0x5b, 0x62, 0x3f, 0xb5, 0x39, 0x80, 0x7c, 0x59, 0x91, 0x6a, 0x67, 0x99, 0x9c, 0x39, 0x3b, 0xa6, 0x9d, 0x9b, 0x2b, 0x1d, 0xf8, 0x84, 0xb8, 0x86, 0xe6, 0xcb, 0x0a, 0xd1, 0xc4, 0xfe, 0xe2, 0x00, 0x36, 0xb6, 0xff, 0xed, 0x9f, 0xef, 0x35, 0x86, 0x35, 0x3a, 0x7f, 0xa2, 0xd7, 0x8b, 0x67, 0x6c, 0xcc, 0x85, 0xcd, 0x7b, 0x00, 0xf6, 0xcc, 0x4e, 0x7d, 0xca, 0x03, 0x91, 0x40, 0x84, 0x33, 0x31, 0xdf, 0xbf, 0xe8, 0x25, 0xef, 0xf4, 0x03, 0xf7, 0xb1, 0xce, 0xa4, 0xbd, 0xa1, 0xfa, 0xa1, 0x5d, 0xd9, 0xf2, 0xfb, 0xfa, 0x3d, 0x4a, 0x0a, 0x84, 0x8b, 0xd0, 0xe5, 0x35, 0x69, 0x4e, 0x89, 0xbc, 0x1c, 0x7d, 0x45, 0xc7, 0xd9, 0xd0, 0xf6, 0x04, 0x40, 0xe9, 0x1d, 0xdb, 0xb8, 0x87, 0xcb, 0xab, 0x73, 0xe5, 0xc7, 0x6d, 0xd3, 0x36, 0x05, 0x82, 0x08, 0x75, 0x0b, 0xef, 0x3d, 0x3d, 0x42, 0x47, 0x40, 0x8f, 0xe8, 0x14, 0x05, 0x93, 0xd9, 0x66, 0x67, 0xae, 0x4c, 0xec, 0x5f, 0x20, 0x7f, 0xa7, 0xc0, 0xbf, 0xd4, 0x4f, 0x24, 0x33, 0xe3, 0x67, 0x39, 0xe5, 0x14, 0x00, 0xb1, 0xb1, 0xbc, 0xa3, 0xbc, 0xaa, 0xfc, 0xea, 0x1b, 0xe5, 0x97, 0xcb, 0x3b, 0x4b, 0x04, 0x61, 0xbe, 0x89, 0x09, 0xcf, 0xa9, 0xa7, 0xe2, 0x4a, 0x02, 0xca, 0xcf, 0x4a, 0xde, 0x12, 0x0b, 0xc4, 0x2c, 0x7d, 0x3d, 0x98, 0x0d, 0x1b, 0xff, 0x50, 0x86, 0xde, 0xa4, 0xbf, 0xb6, 0xd4, 0xf6, 0xea, 0x58, 0x72, 0xd8, 0x5d, 0xef, 0x68, 0x85, 0xdc, 0x52, 0x67, 0xb7, 0xfa, 0x36, 0x96, 0x22, 0x06, 0x24, 0x17, 0x1e, 0x16, 0xe2, 0x7b, 0x91, 0x25, 0x83, 0x7d, 0x88, 0x93, 0x7d, 0x62, 0x0c, 0x52, 0x77, 0x35, 0xbf, 0x55, 0x4e, 0x97, 0x59, 0x32, 0x00, 0xff, 0xf0, 0xd1, 0xfb, 0x7f, 0xea, 0x1f, 0x59, 0x2e, 0x71, 0x41, 0x0e, 0xa1, 0x85, 0x0e, 0xae, 0xec, 0x93, 0x42, 0x6d, 0xbe, 0xc8, 0x9e, 0x94, 0x63, 0x6c, 0xed, 0xf0, 0x01, 0xb0, 0xcd, 0x94, 0xa3, 0xf8, 0xf8, 0x0a, 0x38, 0x2a, 0xb3, 0x6c, 0xf5, 0xf2, 0x15, 0x60, 0x9b, 0x29, 0x47, 0xf1, 0x1d, 0xfb, 0x0a, 0xb0, 0xfa, 0x3a, 0x8d, 0x9b, 0xd2, 0x68, 0x34, 0x0a, 0xf7, 0x87, 0xa3, 0x32, 0xb9, 0xaf, 0xd7, 0x60, 0x30, 0xe0, 0xaf, 0x4d, 0x86, 0xac, 0x57, 0x60, 0x7c, 0x7c, 0x5c, 0x2a, 0x95, 0x8a, 0xc5, 0x62, 0x99, 0x8c, 0xe9, 0x0b, 0x23, 0x6c, 0xf7, 0xf4, 0xf4, 0xcc, 0xcf, 0xcf, 0xdb, 0x17, 0xe1, 0xf4, 0xf4, 0x34, 0xb1, 0x02, 0x43, 0x20, 0xd8, 0x2b, 0xb1, 0x1e, 0x80, 0x97, 0x97, 0x57, 0x48, 0x48, 0x08, 0x34, 0x6a, 0x34, 0x1a, 0x06, 0xbd, 0x5d, 0x5d, 0x5d, 0xa9, 0xa9, 0xa9, 0x65, 0x65, 0x65, 0x0c, 0x3c, 0x0c, 0x4b, 0x9e, 0x9e, 0x9e, 0xd1, 0xd1, 0xd1, 0x41, 0x41, 0x41, 0xe0, 0x59, 0x5f, 0x5f, 0x67, 0xe0, 0x34, 0x5f, 0x62, 0xf3, 0x45, 0x6a, 0x68, 0x68, 0x08, 0x62, 0x22, 0x91, 0x88, 0x81, 0xb9, 0xa5, 0xa5, 0x05, 0x3c, 0x09, 0x09, 0x09, 0x0c, 0x3c, 0x56, 0x97, 0x06, 0x07, 0x07, 0xa1, 0x04, 0x45, 0xb0, 0xca, 0x49, 0x31, 0x58, 0xaf, 0x00, 0x34, 0x52, 0xa3, 0xad, 0xad, 0x2d, 0x32, 0x32, 0x12, 0xd9, 0xca, 0xce, 0xce, 0x56, 0x2a, 0x95, 0x14, 0x8e, 0x36, 0x9b, 0x98, 0x98, 0xc0, 0x54, 0xab, 0xd5, 0xf6, 0xee, 0x8f, 0x81, 0x81, 0x01, 0xd2, 0xd0, 0xd8, 0x3c, 0x39, 0x39, 0x39, 0x89, 0x89, 0x89, 0x8d, 0x8d, 0x8d, 0xe9, 0xe9, 0xe9, 0x90, 0xad, 0xac, 0xac, 0xac, 0xad, 0xad, 0x95, 0x48, 0x24, 0x59, 0x59, 0x59, 0xfd, 0xfd, 0x7b, 0x6f, 0xf2, 0x38, 0x0d, 0x2a, 0x14, 0x06, 0x82, 0x54, 0x00, 0x66, 0x9c, 0x9d, 0x9d, 0x29, 0x63, 0x75, 0x75, 0x75, 0x44, 0x64, 0x78, 0x78, 0x98, 0x02, 0xe9, 0x44, 0x43, 0x43, 0x03, 0x18, 0x96, 0x97, 0x99, 0xde, 0x32, 0x44, 0x45, 0x45, 0xd1, 0xed, 0x3a, 0xbc, 0x02, 0x19, 0x19, 0x19, 0xc8, 0x74, 0x4d, 0x4d, 0x0d, 0x1c, 0xed, 0xec, 0xec, 0x24, 0xee, 0x62, 0x87, 0x24, 0x25, 0x25, 0xc9, 0xe5, 0x72, 0x4c, 0x5d, 0x5d, 0x5d, 0x51, 0x22, 0x8c, 0xb8, 0xb8, 0x38, 0xb4, 0x13, 0x10, 0xec, 0xc8, 0xf6, 0xf6, 0x76, 0x10, 0x38, 0x5b, 0xc6, 0xc6, 0xc6, 0xd2, 0xd2, 0xd2, 0x40, 0x27, 0x27, 0x27, 0x4f, 0x4d, 0x4d, 0x01, 0xc1, 0x53, 0xaf, 0xd7, 0x03, 0xb1, 0x7f, 0xd0, 0x13, 0xf0, 0x38, 0x9a, 0xaa, 0x00, 0x32, 0x04, 0x1e, 0x85, 0x42, 0x41, 0xec, 0xad, 0xae, 0xae, 0x52, 0x22, 0x0c, 0x7b, 0x60, 0x64, 0x64, 0xef, 0xf7, 0x71, 0x4c, 0x4c, 0x0c, 0x98, 0xab, 0xab, 0xab, 0x41, 0xd7, 0xd7, 0xd7, 0x83, 0x0e, 0x0c, 0x0c, 0x04, 0xbd, 0xb0, 0xb0, 0x40, 0x29, 0x71, 0x6c, 0x05, 0xb0, 0x89, 0xe3, 0xe3, 0xe3, 0x61, 0x92, 0x1c, 0x4a, 0x20, 0xb6, 0xb7, 0xff, 0xf7, 0x5b, 0x1e, 0x08, 0xc3, 0xf0, 0xf0, 0xf0, 0xc0, 0x2a, 0xde, 0xbd, 0xe1, 0x49, 0xa7, 0x4d, 0x26, 0x4e, 0xff, 0x34, 0xb0, 0x6d, 0x13, 0x13, 0xff, 0x88, 0x13, 0x66, 0xbe, 0xa2, 0x1f, 0x80, 0xe8, 0x74, 0x3a, 0x33, 0xdc, 0xd1, 0x53, 0x56, 0x01, 0xa0, 0xc4, 0x74, 0x3f, 0xa8, 0x29, 0x45, 0x60, 0xd5, 0xdb, 0xdb, 0x1b, 0x4f, 0xf4, 0xf4, 0xec, 0xec, 0x2c, 0xda, 0xba, 0xbb, 0xbb, 0xbb, 0xa2, 0xa2, 0xa2, 0xb5, 0xb5, 0x15, 0x20, 0x61, 0xa3, 0x33, 0xd3, 0x69, 0x4a, 0x33, 0x4e, 0x2d, 0x1c, 0x59, 0x64, 0x4a, 0xa7, 0x29, 0x86, 0x83, 0x09, 0xe8, 0x62, 0x1e, 0x33, 0x33, 0x33, 0xbe, 0xbe, 0xbe, 0x44, 0x38, 0x36, 0x36, 0x56, 0xad, 0x56, 0x93, 0xde, 0x05, 0x02, 0x02, 0xb7, 0x1b, 0x11, 0x9f, 0x9c, 0x9c, 0x24, 0x3c, 0x28, 0x85, 0xbb, 0xbb, 0x3b, 0xa1, 0x33, 0x33, 0x33, 0x37, 0x37, 0x37, 0x03, 0x02, 0xfe, 0x79, 0x5d, 0x57, 0x55, 0x55, 0x45, 0x0e, 0x00, 0xec, 0xf5, 0xbe, 0xbe, 0x3e, 0x72, 0x6d, 0x61, 0x6f, 0x40, 0x49, 0x70, 0x70, 0x30, 0x11, 0xa1, 0x3f, 0x21, 0xce, 0xec, 0x1b, 0x56, 0xad, 0x57, 0x00, 0x3d, 0x8a, 0xee, 0x27, 0x7a, 0xc9, 0x5d, 0x86, 0x8b, 0x86, 0x4c, 0xc9, 0x8d, 0x43, 0x68, 0x1c, 0x88, 0x4d, 0x4d, 0x4d, 0x38, 0xe6, 0xc1, 0x8f, 0x0a, 0xc0, 0x2d, 0xdc, 0xca, 0xcd, 0xcd, 0xcd, 0xb0, 0x41, 0xc4, 0xd1, 0x78, 0x88, 0x0d, 0xf7, 0x3a, 0xf8, 0x81, 0x80, 0x0d, 0xcc, 0xa0, 0xc9, 0xd1, 0x4c, 0x3f, 0xa0, 0x89, 0x42, 0x3c, 0x0f, 0xec, 0x55, 0x6a, 0x95, 0x10, 0x87, 0xfc, 0x56, 0x02, 0xee, 0xce, 0xcd, 0xcd, 0xa1, 0x62, 0xc4, 0x39, 0x33, 0x63, 0x8e, 0x98, 0x1e, 0x72, 0x00, 0x8e, 0x70, 0x91, 0x59, 0xa7, 0xf5, 0x16, 0x62, 0x96, 0x3f, 0xf2, 0x55, 0x3e, 0x80, 0xa3, 0x2e, 0x01, 0x5f, 0x01, 0xbe, 0x02, 0x1c, 0x33, 0xc0, 0xb7, 0x10, 0xc7, 0x04, 0x72, 0x16, 0xe7, 0x2b, 0xc0, 0x39, 0x85, 0x1c, 0x15, 0x1c, 0xfb, 0x0a, 0xfc, 0x0d, 0x0a, 0x08, 0x48, 0x44, 0xec, 0xf6, 0xcb, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXAudioIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x32, 0x39, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xa6, 0xa8, 0x92, 0xdf, 0x00, 0x00, 0x09, 0x77, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x99, 0x57, 0x4c, 0x94, 0x4b, 0x14, 0xc7, 0xd9, 0xa2, 0xd2, 0x44, 0x40, 0x2c, 0x14, 0x51, 0xc0, 0xa8, 0xd8, 0x30, 0x8a, 0x77, 0xc5, 0xcb, 0xb5, 0xbc, 0x20, 0xf6, 0x68, 0xa2, 0x89, 0x3d, 0x24, 0xbe, 0x58, 0x5e, 0x7c, 0xd0, 0x18, 0xbd, 0x46, 0xe3, 0x8b, 0x4f, 0x1a, 0x8d, 0x31, 0xea, 0x83, 0x35, 0x6a, 0x2c, 0xb9, 0x24, 0x46, 0x0d, 0x8a, 0x41, 0x54, 0x04, 0x0d, 0x08, 0x42, 0x58, 0x69, 0xa2, 0xec, 0x52, 0xa4, 0x08, 0xb2, 0x74, 0x41, 0x81, 0xfb, 0x93, 0xb9, 0x99, 0x7c, 0x77, 0x29, 0xba, 0x1f, 0x4d, 0x93, 0xfd, 0xb2, 0xd9, 0x9c, 0x99, 0x39, 0x33, 0xdf, 0xf9, 0x9f, 0x36, 0x73, 0xe6, 0xd3, 0xb4, 0xb7, 0xb7, 0x3b, 0xfc, 0xce, 0x8f, 0xf6, 0x77, 0x16, 0xfe, 0xbb, 0xec, 0x76, 0x00, 0x83, 0x6d, 0x41, 0xbb, 0x05, 0x6c, 0xb4, 0x40, 0x65, 0x65, 0x65, 0x7e, 0x7e, 0xfe, 0xb7, 0x6f, 0xdf, 0x6c, 0x9c, 0xd7, 0x2d, 0xbb, 0xa6, 0x6f, 0xb3, 0x50, 0x71, 0x71, 0x71, 0xb5, 0xc5, 0xa2, 0xd7, 0xe9, 0xbc, 0xc7, 0x7a, 0xbb, 0x7b, 0xb8, 0x2b, 0x5f, 0xcb, 0x8b, 0x34, 0x1a, 0x4d, 0x5d, 0x5d, 0xdd, 0xf3, 0xe7, 0xcf, 0x1b, 0x1b, 0x1b, 0x97, 0x2e, 0x5d, 0xea, 0xea, 0xea, 0xaa, 0x64, 0x50, 0x47, 0xf7, 0x25, 0x80, 0x9c, 0x9c, 0x9c, 0x4c, 0xa3, 0xd1, 0xa1, 0x5d, 0xd3, 0xdc, 0xd2, 0xac, 0xd7, 0xeb, 0x02, 0x03, 0x02, 0xa6, 0x4f, 0x9f, 0xee, 0xec, 0xec, 0x2c, 0x24, 0x43, 0xf4, 0xf2, 0xf2, 0x72, 0x3f, 0x3f, 0x3f, 0xad, 0x56, 0xfb, 0xf0, 0xe1, 0xc3, 0xcf, 0x9f, 0x3f, 0xaf, 0x5f, 0xbf, 0x5e, 0x8e, 0xaa, 0x93, 0x9e, 0x59, 0xba, 0x23, 0x47, 0x8e, 0xa8, 0x9e, 0xac, 0x9c, 0xd8, 0xd0, 0xd0, 0x90, 0x9a, 0x9a, 0x86, 0x9a, 0x1f, 0x3f, 0x8e, 0x8d, 0x7f, 0x12, 0x57, 0x55, 0x59, 0xd9, 0xd4, 0xd8, 0x44, 0xa7, 0x97, 0xd7, 0x28, 0x27, 0x27, 0x47, 0x38, 0xf5, 0x7a, 0x3d, 0x42, 0xbf, 0x79, 0xf3, 0xc6, 0xdb, 0xdb, 0x7b, 0xda, 0xb4, 0x69, 0xa0, 0xcd, 0xcd, 0xcd, 0x9d, 0x31, 0x63, 0x86, 0x72, 0x11, 0x15, 0x74, 0x9f, 0x01, 0x30, 0x9b, 0xcd, 0x38, 0x46, 0x7c, 0x7c, 0x7c, 0x74, 0xf4, 0x3f, 0xc8, 0xf1, 0xb9, 0xba, 0xda, 0x64, 0x36, 0xe1, 0xeb, 0xad, 0xad, 0xad, 0x63, 0xc6, 0x8c, 0x71, 0x72, 0x72, 0x42, 0xfd, 0x82, 0x78, 0xf5, 0xea, 0xd5, 0xf8, 0xf1, 0xe3, 0x27, 0x4c, 0x98, 0xf0, 0xe2, 0xc5, 0x8b, 0xa1, 0x43, 0x87, 0xfa, 0xf8, 0xf8, 0xa8, 0x90, 0x5b, 0x4e, 0xe9, 0x33, 0x00, 0x65, 0x65, 0x65, 0xb5, 0xb5, 0x75, 0x0f, 0x1e, 0xdc, 0xd7, 0x68, 0x1c, 0xc6, 0x8e, 0x1d, 0xeb, 0xe2, 0xe2, 0x82, 0xca, 0x09, 0x09, 0x8b, 0xa5, 0x1a, 0x0c, 0xe3, 0xc6, 0x8d, 0x1b, 0x36, 0x6c, 0x98, 0xd1, 0x68, 0x0c, 0x08, 0x08, 0xc0, 0x85, 0xc0, 0x30, 0x67, 0xce, 0x1c, 0x7a, 0x9e, 0x3d, 0x7b, 0x36, 0x75, 0xea, 0x54, 0x47, 0xc7, 0xef, 0x26, 0x52, 0xf7, 0xf4, 0x59, 0x1a, 0x45, 0x2c, 0x44, 0x47, 0x14, 0x6f, 0x6f, 0x1f, 0x4f, 0x4f, 0x4f, 0x0f, 0x0f, 0x8f, 0x11, 0x23, 0x46, 0xb8, 0xbb, 0xbb, 0x17, 0x14, 0x14, 0x20, 0x6e, 0x42, 0x42, 0x02, 0xee, 0x0e, 0x0c, 0x5c, 0x28, 0x38, 0x38, 0x18, 0x6c, 0xa9, 0xa9, 0xa9, 0xb3, 0x66, 0xcd, 0xa2, 0x93, 0x51, 0x75, 0xa2, 0x8b, 0x59, 0x7d, 0x03, 0xa0, 0xa9, 0xa9, 0x29, 0x3b, 0x3b, 0x1b, 0xe9, 0x3d, 0x3c, 0xdc, 0xbd, 0xbc, 0xbc, 0x46, 0x8e, 0x1c, 0x29, 0x31, 0xd0, 0x24, 0x6f, 0x26, 0x25, 0x25, 0xbe, 0x7e, 0xfd, 0x1a, 0x6f, 0x01, 0xd5, 0xbb, 0x77, 0xef, 0x16, 0x2e, 0x5c, 0x98, 0x96, 0x96, 0x56, 0x5f, 0x5f, 0x3f, 0x7f, 0xfe, 0xfc, 0xcc, 0xcc, 0x4c, 0xe2, 0x5b, 0x35, 0x86, 0xbe, 0x01, 0x40, 0x76, 0x7f, 0xff, 0xfe, 0xbd, 0x4e, 0xa7, 0x77, 0x77, 0xf7, 0x70, 0x73, 0x73, 0x43, 0xf1, 0xc2, 0x02, 0xd0, 0xc3, 0x87, 0x0f, 0x87, 0xce, 0xcb, 0x7b, 0xf7, 0xf2, 0xe5, 0x4b, 0xc2, 0x60, 0xf2, 0xe4, 0xc9, 0x26, 0x93, 0x89, 0x90, 0x20, 0x0c, 0x92, 0x92, 0x92, 0xa6, 0x4c, 0x99, 0x82, 0x11, 0x80, 0x34, 0xc8, 0x00, 0x4a, 0x4a, 0x3e, 0xf2, 0x23, 0x64, 0x51, 0x3c, 0xd9, 0x1d, 0xb9, 0x79, 0x80, 0x21, 0x09, 0x9d, 0x4e, 0x47, 0xda, 0x49, 0x4c, 0x4c, 0x1c, 0x32, 0x64, 0x08, 0x59, 0x08, 0xad, 0x13, 0x03, 0x44, 0xc8, 0xd7, 0xaf, 0x5f, 0xf1, 0xa8, 0xbc, 0xbc, 0x3c, 0xe2, 0x44, 0x1d, 0x86, 0x3e, 0xb0, 0x00, 0xef, 0x36, 0x99, 0x0a, 0xb0, 0x40, 0x5d, 0x5d, 0x2d, 0x79, 0x86, 0x26, 0x18, 0x04, 0x0c, 0x30, 0xe0, 0x33, 0x18, 0x61, 0xd4, 0xa8, 0x51, 0x44, 0x79, 0x46, 0x46, 0x06, 0xa2, 0xa3, 0xf5, 0xaa, 0xaa, 0x2a, 0x8c, 0x80, 0x77, 0x7d, 0xf8, 0xf0, 0x81, 0x20, 0xa6, 0x59, 0x5b, 0x5b, 0x3b, 0x38, 0x00, 0x2c, 0x16, 0x4b, 0x4c, 0xcc, 0xc3, 0x94, 0x94, 0x94, 0xaa, 0xaa, 0x4a, 0x93, 0xc9, 0x4c, 0x98, 0xea, 0xf5, 0x43, 0xd8, 0x71, 0x9b, 0x9b, 0x9b, 0x09, 0x6b, 0x81, 0x44, 0xfc, 0xe3, 0x48, 0xa4, 0x5a, 0xbc, 0x85, 0x7e, 0x68, 0xbc, 0x2e, 0x28, 0x28, 0xa8, 0xb0, 0xb0, 0x10, 0x84, 0xc4, 0x34, 0xf0, 0x06, 0x01, 0x00, 0x81, 0x6b, 0x36, 0x97, 0x14, 0x14, 0x98, 0xd8, 0xb0, 0xf0, 0x9f, 0x8c, 0x8c, 0x74, 0x12, 0x28, 0xe2, 0xd2, 0x24, 0xcd, 0xe3, 0xdc, 0x6d, 0x6d, 0x6d, 0x68, 0x9a, 0x07, 0x1a, 0x77, 0xa2, 0x1f, 0xa8, 0x9f, 0x3e, 0x7d, 0x22, 0x9a, 0x2b, 0x2a, 0x2a, 0x60, 0x26, 0x7c, 0xd9, 0xfb, 0xb0, 0x5b, 0x69, 0x69, 0xe9, 0x40, 0x03, 0xa8, 0xa9, 0xa9, 0x49, 0x4f, 0x37, 0x56, 0x56, 0x56, 0x39, 0x38, 0x68, 0x5a, 0x5b, 0xbf, 0x7b, 0xff, 0xdb, 0xb7, 0x6f, 0x11, 0xc8, 0xc7, 0xc7, 0x1b, 0x47, 0x9f, 0x39, 0x73, 0x66, 0x64, 0x64, 0x24, 0xbb, 0x01, 0x62, 0xb1, 0x5b, 0x91, 0xf2, 0xc9, 0x51, 0x10, 0xd5, 0xd5, 0xd5, 0x64, 0x52, 0xd2, 0x14, 0xbb, 0x1e, 0xa3, 0x3c, 0x98, 0x8b, 0xa8, 0x50, 0x9d, 0x88, 0xd4, 0xc7, 0x00, 0xdb, 0x56, 0x43, 0x43, 0x3d, 0xa2, 0x18, 0x0c, 0x86, 0xc6, 0xc6, 0x26, 0xd2, 0x0b, 0x61, 0x90, 0x9c, 0x9c, 0x82, 0x63, 0xb4, 0xb4, 0xb4, 0x20, 0x37, 0x7e, 0x42, 0xaa, 0xc1, 0x97, 0x90, 0x1b, 0x48, 0xf8, 0x09, 0xc6, 0xe1, 0x34, 0x61, 0x36, 0x17, 0x62, 0x2e, 0x3c, 0x07, 0x5f, 0x42, 0x74, 0x2c, 0xc0, 0x22, 0x8c, 0xaa, 0xb3, 0x80, 0xca, 0x69, 0xbc, 0xcc, 0xd5, 0xd5, 0x05, 0xd3, 0x07, 0x05, 0x05, 0xea, 0x74, 0xd0, 0xae, 0x44, 0x2a, 0xe1, 0x88, 0x7c, 0x48, 0x8c, 0xe8, 0x29, 0x29, 0xaf, 0xbf, 0x7c, 0xf9, 0xc2, 0xfe, 0x80, 0xac, 0xe8, 0x1e, 0x35, 0xf3, 0x20, 0x25, 0xcd, 0xb2, 0xf2, 0x52, 0xa0, 0x8a, 0x70, 0x1f, 0x3d, 0x7a, 0x34, 0xd8, 0xf0, 0x31, 0xa6, 0x0c, 0x34, 0x00, 0x5e, 0x89, 0xe8, 0x1a, 0x4d, 0x9b, 0xb3, 0xb3, 0xcb, 0x82, 0x05, 0x0b, 0xee, 0xdd, 0xbb, 0xb7, 0x6b, 0xd7, 0xae, 0xe6, 0xe6, 0x96, 0xec, 0xec, 0x9c, 0xe0, 0xe0, 0x29, 0xf1, 0xf1, 0x4f, 0xb0, 0x8f, 0x88, 0x0d, 0x24, 0x43, 0xcd, 0x3c, 0x10, 0x88, 0x5b, 0x5e, 0x56, 0x86, 0xfb, 0xe1, 0x63, 0x44, 0x08, 0x61, 0x00, 0x2a, 0x10, 0x62, 0x2b, 0x75, 0x00, 0xd4, 0xbb, 0x10, 0xef, 0x43, 0xf1, 0x45, 0x45, 0x85, 0xc8, 0xf5, 0xe7, 0x9f, 0xe1, 0xf8, 0x74, 0x71, 0xf1, 0x47, 0xb2, 0x26, 0x82, 0x92, 0x16, 0x03, 0x02, 0x82, 0xb2, 0xb2, 0xb2, 0xf1, 0x6c, 0xfc, 0x07, 0xad, 0x23, 0x6b, 0x07, 0x84, 0x76, 0xdc, 0x06, 0x7f, 0x03, 0x1a, 0x04, 0xa2, 0x33, 0xca, 0x3a, 0xc4, 0x37, 0x48, 0x06, 0x01, 0xc0, 0xa4, 0x49, 0x93, 0xd2, 0xde, 0xa4, 0x7f, 0x2c, 0xa9, 0x68, 0x6b, 0xd3, 0x86, 0x86, 0xce, 0x4d, 0x4c, 0x4c, 0x40, 0xe7, 0x1d, 0x19, 0xe6, 0x93, 0x9f, 0x9f, 0x2f, 0x25, 0x01, 0xc9, 0x91, 0x2d, 0x8c, 0xdd, 0x4a, 0x60, 0x60, 0x8b, 0x00, 0x09, 0x7e, 0x65, 0xa9, 0xb1, 0x60, 0x04, 0x29, 0x31, 0x66, 0x81, 0x4d, 0x36, 0x6d, 0x22, 0x7a, 0x65, 0x01, 0xd4, 0xe6, 0xe4, 0xe8, 0x94, 0x90, 0xf0, 0x9c, 0xfd, 0x28, 0x34, 0xd4, 0x80, 0x7c, 0x89, 0x89, 0x2f, 0xc8, 0x8f, 0x15, 0x15, 0xe5, 0x9c, 0xe1, 0xfe, 0x30, 0x18, 0xd8, 0x9e, 0xc0, 0x40, 0x30, 0xf0, 0x10, 0x1b, 0x04, 0x37, 0x0f, 0x04, 0xa7, 0x20, 0xbc, 0xcb, 0x26, 0x41, 0xbb, 0x63, 0xee, 0x15, 0x00, 0x16, 0x0d, 0x0b, 0x33, 0x64, 0x65, 0x19, 0x39, 0x48, 0xa0, 0xd7, 0xad, 0x5b, 0xa3, 0x38, 0x2f, 0xc4, 0xc6, 0x3e, 0x4a, 0x4e, 0x4e, 0xbe, 0x7f, 0xff, 0x7e, 0x6d, 0x4d, 0x4d, 0x44, 0xc4, 0x12, 0xdc, 0x89, 0x1c, 0x8f, 0xc4, 0xf8, 0x18, 0x0f, 0x6c, 0x18, 0x41, 0xab, 0xd5, 0xf1, 0xdf, 0x9d, 0x4c, 0x36, 0xf5, 0xf7, 0x0a, 0x00, 0x6e, 0x4d, 0x1e, 0x5c, 0xbe, 0x2c, 0x32, 0x37, 0x2f, 0x27, 0x24, 0x64, 0xc6, 0xaa, 0x55, 0xcb, 0x0f, 0x1e, 0xfc, 0xdb, 0xd1, 0xd1, 0xc9, 0xd7, 0xd7, 0xd7, 0xc7, 0xc7, 0x97, 0xda, 0x17, 0x7d, 0x87, 0x87, 0xff, 0x85, 0xfa, 0x39, 0xc0, 0x61, 0x17, 0x72, 0x14, 0xff, 0x6c, 0x6a, 0xe4, 0x4d, 0xdc, 0xc6, 0x26, 0x41, 0xbb, 0x63, 0x56, 0x5f, 0xd0, 0x20, 0x3d, 0x5a, 0x44, 0x44, 0x7f, 0x7f, 0x7f, 0x9d, 0x4e, 0x63, 0x34, 0x66, 0xb2, 0x5f, 0x79, 0x7a, 0x8e, 0x1c, 0xee, 0xe6, 0xa6, 0xd5, 0x68, 0xe7, 0xcd, 0x33, 0x40, 0x37, 0x35, 0x35, 0xe2, 0xdc, 0x41, 0x41, 0x13, 0x21, 0x38, 0xb1, 0x71, 0x1a, 0x25, 0x76, 0x57, 0xad, 0x5c, 0xe5, 0xef, 0x3f, 0x8e, 0x13, 0x91, 0x6a, 0xbf, 0x57, 0x82, 0x51, 0x59, 0xd4, 0x23, 0x3d, 0xab, 0xe0, 0xf4, 0x00, 0xc0, 0x2b, 0x68, 0xb2, 0x0d, 0xf3, 0x20, 0x13, 0xea, 0x9f, 0x38, 0x71, 0x22, 0x99, 0x91, 0x14, 0x44, 0x0c, 0xe0, 0x36, 0xf8, 0x4f, 0x6b, 0x6b, 0x3b, 0x2d, 0x0e, 0x11, 0x1c, 0xef, 0x28, 0x16, 0x28, 0x7a, 0xc2, 0xc2, 0xe6, 0x75, 0xf8, 0x12, 0x65, 0x90, 0x46, 0x29, 0x90, 0xad, 0x74, 0xaf, 0x00, 0x20, 0x01, 0xe9, 0x05, 0x00, 0x88, 0x08, 0x01, 0x18, 0x12, 0x0e, 0x18, 0xc0, 0x43, 0x7e, 0xe4, 0xf8, 0x80, 0x9f, 0xd0, 0x0f, 0x8c, 0xfc, 0xfc, 0xf7, 0xf5, 0x0d, 0xf5, 0xe4, 0x4d, 0xac, 0x86, 0x11, 0x42, 0x43, 0x43, 0x39, 0x9f, 0x02, 0x12, 0x7a, 0x70, 0x00, 0x08, 0x3d, 0x21, 0x28, 0x0f, 0x30, 0x04, 0x12, 0xfe, 0x69, 0x22, 0x90, 0xc8, 0xf1, 0x82, 0x87, 0x4e, 0x80, 0x61, 0x2b, 0x40, 0x82, 0x04, 0x0c, 0x88, 0x2e, 0x8e, 0x46, 0xbd, 0x97, 0x9e, 0x57, 0xa8, 0xb4, 0x80, 0xad, 0x86, 0xee, 0x3f, 0xfe, 0x5e, 0x65, 0xa1, 0xfe, 0x13, 0xeb, 0xe7, 0x57, 0xb6, 0x03, 0xf8, 0x79, 0x5d, 0xf5, 0x0f, 0xa7, 0xdd, 0x02, 0xfd, 0xa3, 0xd7, 0x9f, 0x5f, 0xd5, 0x6e, 0x81, 0x1f, 0xe9, 0x4a, 0x6c, 0x11, 0x6c, 0x67, 0x9d, 0x19, 0xb9, 0x5d, 0x3c, 0x7a, 0xf4, 0x28, 0xe7, 0x8b, 0xce, 0x43, 0x36, 0xf4, 0x74, 0xec, 0x45, 0xfd, 0xf5, 0x77, 0xe0, 0xc0, 0x01, 0x79, 0xe0, 0xd9, 0xb1, 0x63, 0x87, 0xd5, 0x6b, 0x36, 0x6c, 0xd8, 0x80, 0xa0, 0x57, 0xaf, 0x5e, 0xb5, 0xea, 0xb7, 0xa9, 0xd9, 0xbf, 0x2e, 0x44, 0xa1, 0x48, 0x8d, 0xcf, 0x85, 0x05, 0x82, 0xb2, 0x0d, 0x5b, 0xe9, 0x95, 0x32, 0x1a, 0x78, 0x14, 0xc7, 0x56, 0xfd, 0xb6, 0x35, 0x7b, 0x86, 0x2b, 0x4e, 0x07, 0x3d, 0xf3, 0xfc, 0x70, 0xf4, 0xc4, 0x89, 0x13, 0xc8, 0xb4, 0x79, 0xf3, 0xe6, 0xce, 0x9c, 0x9c, 0x32, 0x3a, 0x77, 0xda, 0xd4, 0xd3, 0x85, 0x05, 0xb8, 0xae, 0xda, 0xb6, 0x6d, 0xdb, 0xdc, 0xb9, 0x73, 0xd1, 0x10, 0x67, 0x77, 0x2e, 0xc1, 0xef, 0xde, 0xbd, 0x2b, 0xb5, 0x72, 0xec, 0xd8, 0xb1, 0x79, 0x1d, 0x0f, 0x55, 0x0b, 0x9d, 0xe7, 0xcf, 0x9f, 0x0f, 0xa3, 0xa8, 0x31, 0x18, 0xa8, 0x60, 0x24, 0x0f, 0xc4, 0xad, 0x5b, 0xb7, 0xb6, 0x6c, 0xd9, 0x12, 0x11, 0x11, 0xc1, 0x17, 0xa0, 0xce, 0xba, 0x8f, 0x8d, 0x8d, 0xe5, 0x82, 0x9a, 0x59, 0xe1, 0xe1, 0xe1, 0x27, 0x4f, 0x9e, 0x54, 0x4e, 0x14, 0x74, 0x49, 0x49, 0x49, 0x54, 0x54, 0x14, 0x47, 0x6e, 0xca, 0x6e, 0x04, 0xd8, 0xb7, 0x6f, 0x5f, 0xb7, 0x15, 0x5c, 0x67, 0xb8, 0x88, 0xc7, 0x2a, 0x9c, 0xc9, 0xc0, 0xc0, 0xb5, 0x07, 0x34, 0x67, 0x2f, 0x2a, 0x12, 0xc1, 0x29, 0x3f, 0x0a, 0xdd, 0xbe, 0x7d, 0x9b, 0x9e, 0x25, 0x4b, 0x96, 0x88, 0x57, 0x1e, 0x3f, 0x7e, 0x5c, 0x2e, 0xb5, 0x7d, 0xfb, 0x76, 0xd1, 0x29, 0xfe, 0xc5, 0x79, 0x53, 0x69, 0x81, 0xfd, 0xfb, 0xf7, 0x4b, 0x06, 0x94, 0x25, 0x27, 0x0a, 0x82, 0xe0, 0xa6, 0xcc, 0x97, 0x0c, 0x82, 0xe0, 0xcb, 0x08, 0xb7, 0x91, 0x56, 0x9c, 0x34, 0xff, 0xbb, 0xf0, 0x50, 0x0e, 0x44, 0x47, 0x47, 0x23, 0x0d, 0x57, 0xc7, 0x74, 0x52, 0xbf, 0x0a, 0x0c, 0x32, 0xd4, 0xb8, 0xcd, 0x0c, 0x0c, 0x0c, 0x64, 0x51, 0x01, 0x80, 0x1c, 0x32, 0x7b, 0xf6, 0x6c, 0x9a, 0x12, 0x80, 0x34, 0x17, 0xda, 0xbd, 0x78, 0xf1, 0xe2, 0xe2, 0xc5, 0x8b, 0x85, 0x04, 0x9b, 0x36, 0x6d, 0x92, 0x6f, 0xa1, 0x54, 0x88, 0x89, 0x89, 0x59, 0xb3, 0x66, 0x0d, 0x43, 0x56, 0x00, 0x38, 0x90, 0xf3, 0x69, 0x90, 0x7e, 0x6a, 0xbd, 0x33, 0x67, 0xce, 0xf0, 0x6d, 0xe1, 0xf0, 0xe1, 0xc3, 0x5c, 0x1c, 0xd1, 0xb3, 0x71, 0xe3, 0x46, 0xb9, 0x82, 0x24, 0xba, 0xb8, 0xd8, 0x62, 0xdd, 0xb8, 0xb8, 0x38, 0x24, 0xa6, 0xfc, 0xa3, 0xfe, 0x60, 0x21, 0x08, 0x6c, 0x2a, 0xe4, 0xe0, 0xfa, 0x96, 0x4e, 0x68, 0xa1, 0x57, 0xe0, 0x59, 0x45, 0xe1, 0xa5, 0x4b, 0x97, 0x18, 0xa5, 0x9f, 0xcf, 0x47, 0x1c, 0x98, 0xf1, 0x04, 0xee, 0x49, 0xb9, 0xd6, 0x15, 0xd3, 0xc5, 0x3f, 0x8e, 0xc1, 0xc5, 0xe3, 0xd3, 0xa7, 0x4f, 0x95, 0x9d, 0x82, 0xc6, 0x81, 0xf9, 0x12, 0x05, 0xbd, 0x77, 0xef, 0xde, 0x9d, 0x3b, 0x77, 0x42, 0xe0, 0x84, 0xc0, 0xb8, 0x7e, 0xfd, 0x3a, 0x9a, 0xe5, 0x58, 0x2e, 0xd3, 0x9a, 0xe0, 0xb7, 0x06, 0x80, 0x02, 0x56, 0xae, 0x5c, 0xf9, 0xe8, 0xd1, 0x23, 0x86, 0x29, 0x4a, 0x90, 0x12, 0x23, 0x40, 0x33, 0x53, 0x4c, 0xf8, 0xe1, 0x3f, 0x75, 0x3d, 0x3c, 0xcb, 0x96, 0x2d, 0x43, 0x7a, 0xc1, 0xbc, 0x62, 0xc5, 0x0a, 0x74, 0xf9, 0xc3, 0x89, 0x82, 0x41, 0x4c, 0x87, 0x5e, 0xbd, 0x7a, 0xb5, 0x9c, 0x02, 0x0d, 0x00, 0x51, 0x5b, 0x93, 0xd6, 0x64, 0x3f, 0x84, 0x75, 0x10, 0x5f, 0xbb, 0x76, 0x4d, 0x48, 0x7f, 0xe7, 0xce, 0x1d, 0xae, 0x6e, 0x28, 0x08, 0xd7, 0xae, 0x5d, 0xab, 0x9c, 0x00, 0x2d, 0x74, 0xc0, 0x75, 0x83, 0xe8, 0x27, 0x3c, 0x94, 0x0c, 0x68, 0x97, 0x26, 0xd7, 0x2a, 0xb2, 0x53, 0x49, 0xcb, 0xce, 0xee, 0x08, 0x0c, 0x2e, 0x86, 0xb8, 0xc7, 0x96, 0x3c, 0x82, 0x46, 0x9b, 0x9d, 0xef, 0xbf, 0xac, 0x01, 0x60, 0x41, 0xa6, 0x51, 0x34, 0xe1, 0x48, 0x94, 0x7c, 0xa4, 0x39, 0xae, 0x12, 0xe8, 0xc1, 0xe7, 0xe4, 0x72, 0x22, 0x2a, 0xf8, 0x48, 0x4a, 0x27, 0x6e, 0x20, 0xa6, 0x48, 0x06, 0x3e, 0xbd, 0xc0, 0xc9, 0x28, 0xdf, 0x63, 0x20, 0x78, 0x37, 0x0e, 0x29, 0xe7, 0x0a, 0x02, 0x66, 0xf6, 0x66, 0x72, 0x34, 0x4d, 0x25, 0x4d, 0x93, 0x2b, 0x47, 0xb2, 0x1f, 0xc4, 0xe9, 0xd3, 0xa7, 0x8b, 0x8a, 0x8a, 0x20, 0xd2, 0xd3, 0xd3, 0x51, 0x3f, 0x04, 0xe9, 0x88, 0xdb, 0x6c, 0x88, 0xff, 0x3d, 0xcc, 0x57, 0x3e, 0x97, 0x2f, 0x5f, 0x16, 0xc3, 0x84, 0xe6, 0xba, 0x75, 0xeb, 0xa8, 0xd0, 0x45, 0x93, 0xea, 0xf6, 0xca, 0x95, 0x2b, 0x82, 0x93, 0xfd, 0x5f, 0x74, 0xf2, 0xd9, 0x5d, 0x10, 0xfc, 0xe3, 0x6f, 0x37, 0x6f, 0xde, 0x84, 0x81, 0x28, 0x97, 0xaf, 0x21, 0x0f, 0x4a, 0x06, 0xf4, 0x77, 0xe8, 0xd0, 0x21, 0x18, 0xb0, 0xad, 0x08, 0x4a, 0x39, 0x24, 0xa6, 0x9f, 0x3d, 0x7b, 0x56, 0xac, 0x7f, 0xee, 0xdc, 0x39, 0x31, 0x44, 0xfd, 0x19, 0x12, 0x12, 0x22, 0x68, 0xcc, 0xce, 0x57, 0x36, 0xc1, 0xa0, 0xfc, 0xb7, 0xce, 0x42, 0x28, 0x66, 0xf7, 0xee, 0xdd, 0x42, 0xc7, 0xcc, 0xe4, 0x2b, 0xe2, 0xa9, 0x53, 0xa7, 0x48, 0x6a, 0x58, 0xe3, 0xc2, 0x85, 0x0b, 0x62, 0x26, 0xce, 0x43, 0x0a, 0x17, 0xeb, 0x2e, 0x5a, 0xb4, 0x68, 0xcf, 0x9e, 0x3d, 0xd0, 0xec, 0x18, 0xe8, 0x49, 0x30, 0xf0, 0x26, 0xbe, 0x7c, 0x09, 0x06, 0x5c, 0x82, 0x4c, 0x2f, 0xaa, 0x64, 0x09, 0x40, 0x22, 0x14, 0x3c, 0xfc, 0x93, 0xa9, 0x25, 0x00, 0x16, 0xb9, 0x71, 0xe3, 0x86, 0xf2, 0xba, 0x17, 0xab, 0xf2, 0xa1, 0x56, 0x29, 0xb7, 0xa4, 0xbb, 0xae, 0x89, 0x31, 0x2e, 0xc1, 0x84, 0x82, 0x3b, 0xe7, 0x63, 0xf9, 0x4a, 0x34, 0x0d, 0x2a, 0x09, 0x55, 0xf6, 0x4b, 0x82, 0x0b, 0x39, 0x76, 0x1f, 0x62, 0x4e, 0xe4, 0x2b, 0xd9, 0xff, 0xf3, 0x04, 0x89, 0x9f, 0x45, 0x48, 0x62, 0xc2, 0xa9, 0xba, 0x9c, 0xd8, 0x35, 0x80, 0x2e, 0x59, 0x7f, 0xcd, 0x4e, 0xeb, 0x20, 0xfe, 0x35, 0xa5, 0xec, 0x41, 0x2a, 0x3b, 0x80, 0x1e, 0x94, 0x33, 0x20, 0x43, 0x76, 0x0b, 0x0c, 0x88, 0x9a, 0x7b, 0x78, 0x89, 0xdd, 0x02, 0x3d, 0x28, 0x67, 0x40, 0x86, 0xec, 0x16, 0x18, 0x10, 0x35, 0xf7, 0xf0, 0x12, 0xbb, 0x05, 0x7a, 0x50, 0xce, 0x80, 0x0c, 0xfd, 0x0b, 0xbe, 0x35, 0x47, 0x3f, 0x08, 0xc9, 0x3b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXJSIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x38, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x0e, 0x0a, 0xaa, 0x03, 0x00, 0x00, 0x05, 0x39, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x7d, 0x48, 0x5b, 0x57, 0x14, 0xcf, 0x8b, 0x2f, 0x31, 0xd1, 0x1a, 0x4d, 0xb4, 0x06, 0xc7, 0xfc, 0x88, 0x55, 0x59, 0x97, 0x5a, 0xf1, 0xb3, 0x43, 0x83, 0xba, 0x32, 0x97, 0x0d, 0x3a, 0x0b, 0x2b, 0x08, 0x75, 0x65, 0x82, 0x8c, 0xc1, 0xdc, 0x1f, 0xab, 0x48, 0xdd, 0x64, 0x62, 0x19, 0x6e, 0x73, 0xc2, 0xa6, 0x83, 0x6e, 0x38, 0x46, 0xff, 0x28, 0xc3, 0x75, 0x6b, 0x51, 0x36, 0x54, 0x56, 0x23, 0x88, 0x3a, 0x3b, 0xa1, 0x22, 0xd4, 0xd8, 0xc9, 0x28, 0x9b, 0x1f, 0x0c, 0xad, 0x4c, 0xa3, 0xb5, 0x89, 0x71, 0xd1, 0x7c, 0xb8, 0x63, 0x9f, 0xbc, 0x3c, 0x93, 0x98, 0x9b, 0xbc, 0x7b, 0xcd, 0x10, 0xde, 0x23, 0x84, 0x73, 0xcf, 0xfb, 0xdd, 0x73, 0x7e, 0xbf, 0x73, 0xee, 0xbb, 0x2f, 0xb9, 0xd4, 0xce, 0xce, 0x8e, 0xe8, 0x28, 0x5f, 0xe2, 0xa3, 0x4c, 0x7e, 0x97, 0xbb, 0x20, 0xe0, 0xff, 0xee, 0xa0, 0xd0, 0x01, 0xa1, 0x03, 0x98, 0x15, 0x10, 0x96, 0x10, 0x66, 0x01, 0xb1, 0xa7, 0xd3, 0xd8, 0x11, 0xf6, 0x02, 0xac, 0x8f, 0x19, 0xcc, 0x13, 0xbf, 0xba, 0xec, 0xdb, 0x30, 0x56, 0x16, 0xe9, 0xa3, 0x5f, 0x78, 0xc9, 0x23, 0xf2, 0xfc, 0x17, 0x57, 0x18, 0x8f, 0x34, 0xfe, 0x99, 0xf8, 0x73, 0x97, 0x68, 0xe5, 0x71, 0x0f, 0x00, 0xbf, 0x21, 0x19, 0x01, 0xb3, 0x1f, 0xbf, 0xb3, 0x74, 0xeb, 0x1b, 0x96, 0x41, 0x58, 0x64, 0x94, 0xb7, 0x80, 0xc5, 0x1b, 0x9f, 0xb3, 0x80, 0x85, 0x6f, 0x3f, 0xc9, 0xfc, 0xee, 0xae, 0x5c, 0xf3, 0x1c, 0xeb, 0xe1, 0x6d, 0x10, 0x78, 0x06, 0x2c, 0xc6, 0x31, 0x2e, 0xfb, 0x40, 0xa8, 0xd8, 0xd7, 0x57, 0xe7, 0x5a, 0x2f, 0x07, 0x82, 0x44, 0x62, 0x08, 0x74, 0xc0, 0x32, 0x39, 0xc6, 0xa6, 0x49, 0xfd, 0xe0, 0x4b, 0xa5, 0xee, 0x55, 0x5a, 0x19, 0xc7, 0x7a, 0x58, 0x23, 0xf7, 0x97, 0x3f, 0x1d, 0xe6, 0xf5, 0xbf, 0xae, 0xbe, 0x65, 0x7d, 0x68, 0x04, 0x27, 0x77, 0x16, 0x8b, 0xe1, 0x61, 0x10, 0xe8, 0x80, 0x63, 0xc3, 0xcc, 0x24, 0xa6, 0x15, 0x31, 0x09, 0x6f, 0xbc, 0x27, 0x4b, 0xce, 0xa0, 0x15, 0x2a, 0x6f, 0x2a, 0xb2, 0xc4, 0xb4, 0x63, 0xda, 0xbc, 0xf8, 0xf3, 0x55, 0xcc, 0x2d, 0x87, 0xd5, 0xe2, 0x8d, 0xe1, 0xe1, 0x21, 0x20, 0x80, 0xcd, 0x2a, 0x0e, 0x97, 0xb3, 0xf6, 0x41, 0x46, 0x20, 0x98, 0x83, 0xe6, 0xfa, 0xf4, 0x93, 0x14, 0xe0, 0x33, 0xc1, 0x61, 0x3b, 0x05, 0x01, 0x22, 0x91, 0x63, 0x7d, 0x95, 0x29, 0x33, 0x45, 0x4b, 0x90, 0xf5, 0x16, 0x4b, 0xdc, 0x18, 0x87, 0x79, 0x0d, 0x89, 0x47, 0x02, 0x70, 0x3b, 0xb0, 0xbd, 0xf2, 0x68, 0x75, 0xf0, 0x27, 0x26, 0x4d, 0xc4, 0x89, 0xe7, 0x91, 0xf9, 0xe4, 0xa9, 0x6e, 0xcc, 0xd2, 0xcd, 0xaf, 0x90, 0x78, 0x24, 0x00, 0x4b, 0xc0, 0xc2, 0xf5, 0x4f, 0xef, 0x97, 0x9f, 0xdc, 0x5e, 0x59, 0x82, 0x34, 0x61, 0x32, 0x79, 0xe2, 0xdb, 0x1f, 0x22, 0xf3, 0x45, 0x9d, 0x3e, 0xa3, 0x2a, 0x7d, 0x8d, 0x81, 0xfd, 0xfd, 0xf5, 0xd5, 0xa9, 0x8b, 0xf9, 0x5b, 0x0b, 0xb3, 0xc8, 0x59, 0x7e, 0x00, 0x58, 0x02, 0x36, 0xa6, 0xee, 0x31, 0x7b, 0xa8, 0x44, 0x75, 0x3c, 0xe3, 0xb3, 0xce, 0xa8, 0x6c, 0x9d, 0x9f, 0x4c, 0x7b, 0xb7, 0x28, 0x71, 0x46, 0xeb, 0xf7, 0xb1, 0x2f, 0x96, 0x33, 0x43, 0xcb, 0xef, 0x13, 0xf6, 0x27, 0x7b, 0x2b, 0x10, 0x3d, 0xd7, 0x17, 0x02, 0x4b, 0x40, 0xac, 0xbe, 0x22, 0x32, 0x23, 0x13, 0xc2, 0xda, 0xd7, 0x56, 0xfe, 0xb8, 0x7c, 0xc1, 0x74, 0xe7, 0x07, 0x5f, 0x29, 0xf6, 0xf9, 0x5c, 0x5b, 0xff, 0x3e, 0x78, 0x53, 0xb7, 0x3a, 0xd4, 0x03, 0x5e, 0xb1, 0x34, 0x5c, 0xfd, 0x7a, 0x75, 0xb8, 0xfa, 0xd9, 0x7d, 0x88, 0x60, 0x07, 0x70, 0x2a, 0x81, 0x73, 0xb9, 0xb6, 0x6d, 0xf7, 0x2f, 0x64, 0xdd, 0x3d, 0x25, 0x82, 0xcf, 0xd4, 0xa5, 0x42, 0x64, 0xa8, 0xc7, 0xbf, 0xf5, 0x33, 0x60, 0xf8, 0x36, 0x19, 0x6e, 0x23, 0xf1, 0x48, 0x00, 0x56, 0x07, 0xa0, 0x58, 0x94, 0x24, 0x5c, 0xa9, 0x7b, 0x85, 0xa9, 0x9a, 0x6d, 0x71, 0x0e, 0x59, 0x3e, 0xdb, 0x82, 0x1b, 0xa3, 0x3a, 0x7b, 0x1e, 0x89, 0x47, 0x02, 0x70, 0x05, 0x40, 0x02, 0x4a, 0x22, 0x45, 0xa6, 0xf1, 0x09, 0xa0, 0x68, 0x9e, 0x13, 0xb9, 0xd1, 0x08, 0x08, 0xe0, 0x86, 0x0b, 0xbd, 0x2d, 0x08, 0xe0, 0xd4, 0xdc, 0x69, 0x35, 0x8b, 0x5c, 0x4e, 0x8e, 0xc3, 0x87, 0xe9, 0x34, 0x3f, 0xf6, 0xe1, 0xc5, 0x70, 0x11, 0xf8, 0x3f, 0x20, 0x8d, 0x55, 0x33, 0x04, 0x9c, 0x9b, 0x56, 0xf8, 0xb9, 0x1f, 0x53, 0xf8, 0x72, 0x64, 0xc6, 0x69, 0xf9, 0x09, 0xad, 0x07, 0x2b, 0x53, 0xff, 0x8f, 0x4e, 0xcb, 0x93, 0x47, 0x37, 0xaf, 0x31, 0x7e, 0x69, 0x6c, 0xbc, 0x07, 0x80, 0xdf, 0x90, 0x80, 0x80, 0xe8, 0x33, 0x67, 0x29, 0x9a, 0xde, 0x71, 0x38, 0x80, 0xc1, 0x3f, 0x3f, 0xdf, 0x80, 0x4f, 0xd2, 0xbb, 0x1f, 0x25, 0x7a, 0x09, 0x78, 0x78, 0xe5, 0x22, 0x97, 0x62, 0x4c, 0xa1, 0x9e, 0x3b, 0xe4, 0x6d, 0x13, 0x78, 0x06, 0xe4, 0x9a, 0x93, 0xa9, 0x0d, 0xd7, 0xe0, 0xad, 0x14, 0x38, 0x89, 0xa8, 0x53, 0x79, 0x9a, 0xf7, 0xdb, 0x03, 0xc7, 0xfb, 0x41, 0x52, 0xf0, 0xa6, 0xf0, 0x73, 0x3b, 0xf0, 0x5b, 0xdb, 0xcb, 0x8b, 0x1b, 0x0f, 0xee, 0x31, 0xa7, 0x12, 0x91, 0xe9, 0x99, 0x3e, 0x96, 0x90, 0xe1, 0x16, 0x13, 0x4d, 0x1a, 0x97, 0xa0, 0xc8, 0xd1, 0x89, 0x28, 0x02, 0xb5, 0x83, 0x80, 0xc4, 0x04, 0x04, 0x2e, 0x95, 0x2c, 0x92, 0x4c, 0x19, 0xc8, 0x72, 0x0a, 0x2a, 0x9a, 0x20, 0x20, 0xa8, 0x72, 0x1d, 0x02, 0x58, 0xe8, 0xc0, 0x21, 0x14, 0x35, 0xa8, 0x90, 0x84, 0x3b, 0x70, 0xfd, 0xe9, 0x15, 0x14, 0x03, 0x4c, 0x30, 0xc9, 0x6d, 0x74, 0x6b, 0x6b, 0x2b, 0x22, 0x22, 0x22, 0x2c, 0x2c, 0x6c, 0x73, 0x73, 0x93, 0xa6, 0x09, 0xbc, 0xe3, 0x03, 0xd1, 0x46, 0x38, 0x4d, 0x74, 0x74, 0xb4, 0x5c, 0x2e, 0x0f, 0x19, 0x7b, 0x50, 0x48, 0xb2, 0x03, 0x10, 0xce, 0xe5, 0x72, 0xc1, 0xb7, 0x58, 0x8c, 0x5e, 0x99, 0x80, 0x0c, 0x04, 0x86, 0x6c, 0x02, 0x81, 0x0e, 0x8c, 0x8e, 0x8e, 0x36, 0x35, 0x35, 0xc1, 0xb2, 0x61, 0x93, 0x55, 0x54, 0x54, 0xd4, 0xd5, 0xd5, 0xb1, 0x43, 0x30, 0x7a, 0x7b, 0x7b, 0xbb, 0xba, 0xba, 0xfa, 0xfb, 0xfb, 0x2d, 0x16, 0x8b, 0x56, 0xab, 0x85, 0xc5, 0x96, 0x94, 0x94, 0xd4, 0xd7, 0xd7, 0xc7, 0xc5, 0xf0, 0xb3, 0xc9, 0x08, 0x18, 0x1e, 0x1e, 0xe6, 0xa6, 0x4f, 0x4b, 0x4b, 0xe3, 0x0e, 0x07, 0x07, 0x07, 0xcb, 0xcb, 0x77, 0xcf, 0x51, 0xf4, 0x7a, 0xbd, 0xd3, 0xe9, 0x84, 0x21, 0xfc, 0x00, 0xb3, 0xdb, 0xed, 0x5c, 0x0c, 0x6f, 0x9b, 0x80, 0x80, 0xda, 0xda, 0xda, 0xfc, 0xfc, 0x7c, 0xab, 0xd5, 0x0a, 0x24, 0x3a, 0x3b, 0x3b, 0xbb, 0xbb, 0xbb, 0x3d, 0xd8, 0x18, 0x0c, 0x06, 0xf0, 0x40, 0xe1, 0xa1, 0x03, 0x60, 0xcc, 0xcf, 0xcf, 0x37, 0x37, 0x37, 0x83, 0x12, 0x0f, 0x18, 0xbf, 0x21, 0x01, 0x01, 0xf0, 0xd4, 0x96, 0x95, 0x95, 0x31, 0xe9, 0xc7, 0xc7, 0xc7, 0xbd, 0x79, 0x14, 0x14, 0x14, 0x80, 0x73, 0x7a, 0x7a, 0x3a, 0x2b, 0x2b, 0xab, 0xa4, 0xa4, 0x24, 0x3b, 0x3b, 0xbb, 0xb1, 0xb1, 0x51, 0xa3, 0xd1, 0x78, 0x23, 0xf9, 0x78, 0x90, 0x07, 0x2f, 0x41, 0x01, 0x1a, 0x1a, 0x1a, 0x80, 0x44, 0x65, 0x65, 0x25, 0x77, 0x16, 0xac, 0x16, 0x9d, 0x6e, 0xdf, 0xa1, 0x1d, 0x45, 0x51, 0x35, 0x35, 0x35, 0x5c, 0x0c, 0x6f, 0x1b, 0xbd, 0x5d, 0xf0, 0xa9, 0xca, 0xfe, 0x39, 0xb0, 0xab, 0x0e, 0x0c, 0x0c, 0x18, 0x8d, 0xc6, 0xfa, 0xfa, 0xfa, 0xe2, 0xe2, 0x62, 0x89, 0x44, 0x02, 0x74, 0x3b, 0x3a, 0x3a, 0xe6, 0xe6, 0xdc, 0x67, 0x44, 0xfb, 0x67, 0x04, 0x31, 0x0a, 0x85, 0x80, 0xb6, 0xb6, 0x36, 0xd8, 0x73, 0x60, 0x9b, 0x6a, 0x6d, 0x6d, 0x1d, 0x19, 0x19, 0x99, 0x99, 0x99, 0x91, 0xc9, 0x64, 0xa0, 0x61, 0x68, 0x68, 0x28, 0x08, 0xa6, 0x07, 0x40, 0x09, 0x3c, 0x03, 0x07, 0x44, 0x76, 0xbb, 0xa1, 0xd2, 0x26, 0x93, 0xa9, 0xb4, 0xb4, 0x14, 0x96, 0x4d, 0x6e, 0x6e, 0xee, 0xe4, 0xe4, 0xa4, 0xcd, 0x66, 0x83, 0x97, 0x00, 0x3c, 0xfa, 0x6e, 0x10, 0x5f, 0x8b, 0xb0, 0x00, 0x60, 0xe6, 0xcd, 0x44, 0xa1, 0x50, 0xc0, 0xa2, 0x87, 0x85, 0xd4, 0xde, 0xbe, 0xf7, 0x3f, 0x38, 0x2e, 0x2e, 0xae, 0xa5, 0xa5, 0x25, 0x33, 0x73, 0xf7, 0x60, 0x18, 0xf3, 0x22, 0x2c, 0x00, 0xb6, 0x48, 0x20, 0x94, 0x90, 0x90, 0xc0, 0xa5, 0x05, 0x4f, 0x76, 0x75, 0x75, 0x75, 0x4a, 0x4a, 0xca, 0xec, 0xec, 0xec, 0xda, 0xda, 0x9a, 0x4a, 0xa5, 0x4a, 0x4e, 0x4e, 0x96, 0x4a, 0x09, 0x9c, 0x2b, 0x42, 0x16, 0x02, 0x02, 0x7a, 0x7a, 0x7a, 0x26, 0x26, 0x26, 0xd4, 0x6a, 0x35, 0xec, 0xa1, 0xcc, 0xcb, 0xb5, 0xa8, 0xa8, 0x88, 0x2b, 0xe0, 0xd8, 0xd3, 0x0b, 0x3c, 0xe9, 0xe9, 0xe9, 0x5c, 0x3f, 0x19, 0x9b, 0xf7, 0xfe, 0xc5, 0x4e, 0x64, 0xde, 0xb2, 0x2c, 0x9b, 0xaa, 0xaa, 0x2a, 0xf6, 0x56, 0x08, 0x0c, 0x02, 0x3f, 0xe6, 0x96, 0x97, 0x97, 0x61, 0x3f, 0x81, 0xc5, 0xa3, 0x54, 0x2a, 0xf3, 0xf2, 0xf2, 0x72, 0x72, 0x72, 0x58, 0x31, 0x21, 0x30, 0x08, 0x08, 0x08, 0x01, 0x4b, 0x3f, 0x29, 0x42, 0xf1, 0x1e, 0xf0, 0x93, 0x1e, 0xff, 0x96, 0x20, 0x00, 0xbf, 0x86, 0x78, 0x11, 0x84, 0x0e, 0xe0, 0xd5, 0x0f, 0x7f, 0xb6, 0xd0, 0x01, 0xfc, 0x1a, 0xe2, 0x45, 0x38, 0xf2, 0x1d, 0xf8, 0x0f, 0x1c, 0x65, 0x73, 0xb3, 0xdd, 0xbe, 0x50, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXPlistIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x33, 0x35, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc8, 0x4f, 0xd5, 0xc2, 0x00, 0x00, 0x06, 0xa8, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x7b, 0x4c, 0x53, 0x57, 0x18, 0xb7, 0xef, 0x77, 0x91, 0x87, 0x82, 0x20, 0x68, 0x01, 0xd1, 0xf8, 0x20, 0x6e, 0x09, 0xd1, 0x44, 0xc1, 0xcc, 0xa0, 0xce, 0x4c, 0x0d, 0xfc, 0xb7, 0x11, 0xa6, 0x93, 0xb0, 0x65, 0x53, 0x18, 0x31, 0x41, 0xcd, 0x4c, 0x4c, 0x96, 0x25, 0xfe, 0xb3, 0xa0, 0x46, 0x8c, 0x61, 0x03, 0x5f, 0x7f, 0xb0, 0x31, 0x46, 0x74, 0x31, 0x6e, 0xcb, 0x62, 0x80, 0x6c, 0x73, 0x8a, 0x12, 0xc5, 0xa0, 0x19, 0xbe, 0x98, 0x48, 0x43, 0x71, 0x56, 0x94, 0xd2, 0x07, 0xa5, 0x94, 0xb6, 0xfb, 0xe1, 0x71, 0xb7, 0x87, 0xdb, 0xf6, 0xda, 0x7b, 0x5b, 0x75, 0x66, 0xbd, 0x69, 0x9a, 0xef, 0x7c, 0x8f, 0xdf, 0xf9, 0x5e, 0xe7, 0x3b, 0xed, 0x15, 0xf9, 0x7c, 0xbe, 0x69, 0xaf, 0xf3, 0x23, 0x7e, 0x9d, 0x9d, 0x9f, 0xf4, 0x3d, 0x16, 0xc0, 0xab, 0xae, 0x60, 0xac, 0x02, 0xb1, 0x0a, 0x44, 0x98, 0x81, 0x58, 0x0b, 0x45, 0x98, 0xc0, 0x88, 0xcd, 0x63, 0x15, 0x88, 0x38, 0x85, 0x11, 0x02, 0xc4, 0x2a, 0x10, 0x61, 0x02, 0x23, 0x36, 0x8f, 0x55, 0x20, 0x58, 0x0a, 0x87, 0xdc, 0xde, 0x40, 0xb6, 0xcd, 0xe3, 0xf3, 0x04, 0x72, 0x23, 0xe6, 0x44, 0xb9, 0x02, 0x5d, 0xd6, 0xf1, 0x0f, 0xba, 0x1f, 0xcf, 0x6b, 0x37, 0x05, 0x3a, 0xf6, 0xfb, 0xe3, 0xb1, 0xcc, 0x36, 0xd3, 0x97, 0x7f, 0x59, 0x87, 0x83, 0x85, 0x17, 0xa8, 0x1f, 0x26, 0x47, 0x14, 0x95, 0xff, 0x03, 0x48, 0xed, 0x0f, 0x0f, 0x46, 0x0f, 0xf5, 0xd9, 0xfe, 0x78, 0x32, 0x86, 0x8d, 0x95, 0x12, 0x91, 0x73, 0x7d, 0x06, 0xcb, 0x83, 0x9f, 0xcc, 0xce, 0x0d, 0x9d, 0x66, 0x30, 0xd5, 0x12, 0xf1, 0xfb, 0xb3, 0x35, 0x9f, 0x1a, 0x74, 0x0b, 0xb5, 0x32, 0x96, 0x8e, 0x80, 0xa5, 0x54, 0x80, 0x0d, 0x6d, 0xf2, 0xc4, 0xed, 0x3d, 0x6a, 0xb4, 0x1f, 0xb9, 0x6f, 0x33, 0x3a, 0x27, 0x68, 0x3e, 0x07, 0x3d, 0xea, 0xf1, 0x7e, 0xdd, 0x6f, 0xc3, 0xa7, 0x70, 0x86, 0xaa, 0xca, 0xa0, 0x7b, 0x67, 0xa6, 0x4a, 0xc4, 0xa1, 0xfd, 0x3c, 0x91, 0xf0, 0x00, 0xfe, 0xb4, 0xbb, 0x6b, 0xfb, 0x6c, 0x8d, 0x03, 0x0e, 0x38, 0x44, 0xef, 0x32, 0x4b, 0x29, 0xdd, 0x9a, 0xae, 0xa1, 0x39, 0x84, 0xce, 0xd5, 0xcb, 0x4b, 0x67, 0x6b, 0x4f, 0x3d, 0x18, 0x75, 0xfe, 0xab, 0xdf, 0xfa, 0xc8, 0x89, 0x4f, 0xb6, 0x46, 0x56, 0x31, 0x57, 0xb7, 0x35, 0x5d, 0xab, 0x97, 0x0a, 0x09, 0x84, 0x77, 0x0b, 0xc1, 0xd9, 0x9f, 0xcd, 0x4e, 0x74, 0x0b, 0xf6, 0xa6, 0xbd, 0x94, 0x89, 0x45, 0x1b, 0x92, 0x55, 0x65, 0xe9, 0xda, 0xf5, 0x33, 0x55, 0x12, 0x5a, 0x30, 0x95, 0xb6, 0x4c, 0xf8, 0xbe, 0x35, 0x39, 0x8e, 0x1a, 0x6d, 0xd7, 0x46, 0xc6, 0x69, 0x89, 0x4e, 0x2a, 0x46, 0x0c, 0x95, 0x06, 0x5d, 0xb6, 0x9a, 0x5f, 0x4e, 0x79, 0x07, 0xb0, 0xbe, 0xd3, 0xfc, 0x8b, 0x79, 0x8a, 0xeb, 0x8b, 0xf5, 0x72, 0xf8, 0x5d, 0x9a, 0xa6, 0x99, 0x21, 0xe7, 0x31, 0x12, 0xae, 0x59, 0xdd, 0x08, 0x03, 0xc1, 0x58, 0xa8, 0x33, 0x2d, 0x12, 0x89, 0xea, 0x73, 0x13, 0xca, 0xd3, 0xb5, 0x74, 0x6c, 0xdc, 0x34, 0xbf, 0x70, 0x81, 0x35, 0x34, 0xee, 0x6f, 0x98, 0xe2, 0x59, 0xea, 0xcf, 0xb2, 0xe3, 0xf2, 0xe2, 0xe4, 0xdc, 0x7b, 0x04, 0x95, 0xbe, 0xa1, 0x97, 0x1d, 0x59, 0x9c, 0x50, 0xb3, 0x30, 0x1e, 0x4d, 0xf5, 0xc5, 0xdd, 0x91, 0xbb, 0x76, 0x37, 0xd4, 0x30, 0x51, 0xcc, 0x2e, 0x3f, 0x7e, 0x50, 0x43, 0x16, 0x93, 0x77, 0x00, 0xb4, 0xfd, 0x8f, 0x0f, 0x9d, 0xe2, 0x69, 0xa2, 0x8f, 0xe6, 0x68, 0xd7, 0x24, 0x29, 0x05, 0xf4, 0xaf, 0xd3, 0xeb, 0xfb, 0x7e, 0x70, 0x14, 0x33, 0x80, 0x78, 0x4f, 0x23, 0x87, 0x4f, 0xf3, 0x0e, 0xe0, 0xc3, 0x0c, 0xad, 0xd9, 0xe5, 0x21, 0x33, 0xc7, 0xed, 0xf5, 0x9d, 0x7a, 0xe0, 0xc0, 0x67, 0xae, 0x5a, 0x5a, 0x9e, 0x81, 0x83, 0xa8, 0x49, 0x55, 0x70, 0xf4, 0xbf, 0xdf, 0x2b, 0xd2, 0x3f, 0xdf, 0x98, 0x1c, 0x23, 0x54, 0xff, 0x40, 0x5c, 0x90, 0xa8, 0x5c, 0x33, 0x43, 0xe9, 0xd7, 0x0b, 0x83, 0xe2, 0x7d, 0x06, 0x80, 0xc9, 0x9a, 0xfa, 0xcc, 0x2e, 0x52, 0xb1, 0x08, 0x33, 0x11, 0x11, 0xbe, 0x1d, 0xe2, 0x1c, 0x5b, 0x27, 0x7c, 0x4d, 0x83, 0x8e, 0x06, 0xa3, 0xfd, 0xaa, 0xc5, 0xc5, 0x58, 0x81, 0x90, 0x8b, 0x45, 0xef, 0xa5, 0x69, 0xaa, 0x0c, 0x7a, 0xf4, 0x15, 0xcd, 0x0f, 0x87, 0x16, 0x12, 0x00, 0x83, 0x7b, 0x75, 0x64, 0x1c, 0xe3, 0xa8, 0x79, 0xd0, 0x31, 0xee, 0x9d, 0xf2, 0x76, 0x2c, 0x4b, 0x23, 0xeb, 0x7d, 0x2b, 0x95, 0x51, 0x23, 0x44, 0x87, 0x65, 0xbc, 0xb0, 0xe3, 0x21, 0x6b, 0xe6, 0x26, 0x2b, 0x24, 0x9f, 0xcc, 0xd5, 0x7d, 0x3c, 0x47, 0x97, 0xcc, 0x67, 0x00, 0xd0, 0xc8, 0x11, 0x05, 0x40, 0x80, 0xfe, 0x76, 0x79, 0xbf, 0xea, 0xb7, 0xd5, 0xf5, 0xdb, 0xd0, 0x5a, 0x84, 0xc3, 0x7d, 0x13, 0x13, 0x9d, 0x37, 0xe3, 0x14, 0xb8, 0xc5, 0xde, 0x4d, 0xd3, 0xc8, 0x05, 0x9c, 0x1e, 0x2a, 0x02, 0xde, 0x67, 0x80, 0xb2, 0x7d, 0x46, 0xa6, 0x28, 0xc4, 0x9f, 0xe7, 0xc4, 0x61, 0x1c, 0x7d, 0x37, 0xe8, 0x38, 0xd4, 0x67, 0x65, 0x0d, 0x78, 0x96, 0xbe, 0x44, 0x24, 0x2a, 0x4a, 0x51, 0xc3, 0xf5, 0xfc, 0x04, 0x05, 0x4b, 0x24, 0x70, 0x89, 0xc9, 0x15, 0xdd, 0xe7, 0xb7, 0xc7, 0x63, 0x25, 0x5d, 0x8f, 0x02, 0x31, 0xc1, 0xaf, 0xee, 0x19, 0xbe, 0x3f, 0x3a, 0x11, 0x28, 0x8a, 0x84, 0x13, 0x85, 0x16, 0x12, 0x98, 0xb9, 0x28, 0x99, 0xf1, 0xb8, 0x3b, 0xa3, 0xb4, 0x63, 0x94, 0x61, 0x62, 0x01, 0x44, 0x39, 0xa1, 0xbc, 0xe1, 0x62, 0x15, 0xe0, 0x9d, 0xb2, 0x28, 0x1b, 0xc4, 0x2a, 0x10, 0xe5, 0x84, 0xf2, 0x86, 0xfb, 0x7f, 0x57, 0x60, 0xe2, 0xe9, 0xe3, 0xf5, 0x86, 0xfc, 0x0b, 0x02, 0xf9, 0x81, 0x03, 0x07, 0x4e, 0x9f, 0x3e, 0xcd, 0x3b, 0xb1, 0xe1, 0x1b, 0x08, 0xbb, 0xc6, 0x7b, 0x7b, 0x7b, 0x13, 0x12, 0x12, 0xc8, 0x2e, 0xd3, 0xa7, 0x4f, 0x0f, 0x05, 0x72, 0xfb, 0xf6, 0x6d, 0xe8, 0x64, 0x66, 0x66, 0x86, 0x52, 0xe0, 0xe0, 0xbb, 0xdd, 0xee, 0xf6, 0xf6, 0xf6, 0xc1, 0xc1, 0x41, 0x0e, 0x1d, 0x88, 0x04, 0xb6, 0x90, 0x4e, 0xa7, 0x9b, 0x3f, 0x7f, 0x7e, 0x6a, 0xea, 0xe4, 0x6f, 0x66, 0x87, 0xc3, 0x11, 0x2a, 0x5f, 0x72, 0xb9, 0x5c, 0xa1, 0x50, 0xa4, 0xa5, 0xa5, 0x85, 0x52, 0xe0, 0xe0, 0x9f, 0x3b, 0x77, 0x6e, 0xf5, 0xea, 0xd5, 0xe5, 0xe5, 0xe5, 0x1c, 0x3a, 0x93, 0x22, 0xee, 0xf8, 0xb8, 0xa5, 0x57, 0xae, 0x5c, 0x01, 0x82, 0x4c, 0x26, 0xe3, 0x50, 0x43, 0x22, 0x39, 0xa4, 0xb4, 0xc8, 0xe3, 0xf1, 0xd0, 0xcb, 0x93, 0x27, 0x4f, 0x02, 0x3c, 0x2f, 0x2f, 0x8f, 0x66, 0x06, 0xd2, 0x41, 0x2a, 0xb0, 0x77, 0xef, 0xde, 0x65, 0xcb, 0x96, 0xad, 0x5d, 0xbb, 0xb6, 0xb3, 0xb3, 0x73, 0xf9, 0xf2, 0xe5, 0x6a, 0xb5, 0x7a, 0xc9, 0x92, 0x25, 0x35, 0x35, 0x35, 0x1c, 0xbd, 0x8e, 0x9d, 0x02, 0x9f, 0xcd, 0x9b, 0x37, 0x03, 0x67, 0xc5, 0x8a, 0x15, 0x2b, 0x57, 0xae, 0xb4, 0x58, 0x2c, 0x2c, 0x85, 0xb3, 0x67, 0xcf, 0x6e, 0xd9, 0xb2, 0x25, 0x39, 0x39, 0x19, 0xf8, 0xf0, 0x32, 0x37, 0x37, 0x77, 0xd3, 0xa6, 0x4d, 0x8c, 0xce, 0xcd, 0x9b, 0x37, 0x6f, 0xdd, 0xba, 0x85, 0xa5, 0xcd, 0x66, 0xfb, 0xf5, 0xe9, 0x03, 0x67, 0x70, 0xa2, 0x18, 0x05, 0x3f, 0x11, 0x18, 0x93, 0xc1, 0x60, 0x20, 0x62, 0x8d, 0x66, 0xca, 0xfb, 0xa9, 0xd2, 0xd2, 0x52, 0x96, 0x32, 0x47, 0x05, 0xb0, 0xb1, 0x54, 0xea, 0xff, 0xb3, 0xd1, 0xd7, 0xd7, 0x47, 0xdb, 0xb6, 0xb6, 0xb6, 0x92, 0x2d, 0xd6, 0xad, 0x5b, 0x57, 0x58, 0x58, 0x88, 0xb7, 0x29, 0x58, 0x2e, 0x58, 0xb0, 0x80, 0xe8, 0x74, 0x75, 0x75, 0xf9, 0xfd, 0xa3, 0xa8, 0x7d, 0xfb, 0xf6, 0xd1, 0x20, 0x84, 0x0e, 0xd2, 0x42, 0xf7, 0xee, 0xdd, 0x43, 0x62, 0x60, 0x18, 0x1f, 0x1f, 0x5f, 0x5f, 0x5f, 0x7f, 0xfd, 0xfa, 0xf5, 0xe2, 0xe2, 0x62, 0x82, 0x83, 0x8d, 0x69, 0x08, 0x8e, 0x00, 0xa0, 0x76, 0xe3, 0xc6, 0x8d, 0xe6, 0xe6, 0x66, 0x62, 0xc8, 0x0a, 0x60, 0xe7, 0xce, 0x9d, 0xe0, 0x2f, 0x5a, 0xb4, 0x88, 0xa0, 0x41, 0x5a, 0x56, 0x56, 0x86, 0x82, 0x90, 0xa5, 0xd9, 0x6c, 0xce, 0xcf, 0xcf, 0x27, 0x3e, 0xe0, 0x08, 0xcd, 0x7b, 0xfa, 0x2c, 0x5d, 0xba, 0x14, 0xa7, 0x82, 0x28, 0xd0, 0xdf, 0x41, 0x02, 0x80, 0x18, 0x73, 0x03, 0x1b, 0x6c, 0xdb, 0xb6, 0x8d, 0xa8, 0x0e, 0x0d, 0x0d, 0x49, 0x24, 0x93, 0xaf, 0x1b, 0x76, 0xef, 0xde, 0x4d, 0x1b, 0x73, 0x07, 0x00, 0x4d, 0xa7, 0xf3, 0xd9, 0x2b, 0x30, 0x56, 0x00, 0x2d, 0x2d, 0x2d, 0x24, 0x30, 0x74, 0x4e, 0x65, 0x65, 0xe5, 0xf1, 0xe3, 0xc7, 0x91, 0x35, 0x1a, 0x19, 0xb4, 0xf0, 0x33, 0x40, 0xa0, 0xf1, 0xbd, 0x6a, 0xd5, 0x2a, 0x42, 0x27, 0x26, 0x26, 0x22, 0x5b, 0xa0, 0x07, 0x06, 0x06, 0x18, 0x69, 0x24, 0x44, 0x51, 0x51, 0x11, 0x0e, 0x06, 0x10, 0x50, 0xde, 0xc3, 0x87, 0x0f, 0x23, 0xfd, 0x59, 0x59, 0x59, 0xdb, 0xb7, 0x6f, 0x17, 0x80, 0x19, 0xe4, 0x10, 0x33, 0x28, 0x17, 0x2e, 0x5c, 0x20, 0xf4, 0xf0, 0xf0, 0x70, 0x4f, 0x4f, 0x0f, 0x68, 0xe6, 0x78, 0x30, 0x3a, 0xc2, 0x08, 0x1c, 0x0f, 0xf4, 0x43, 0x77, 0x77, 0xf7, 0xae, 0x5d, 0xbb, 0x0a, 0x0a, 0x0a, 0xc8, 0x1c, 0xab, 0xab, 0xab, 0x43, 0xa1, 0x18, 0x40, 0xb1, 0x78, 0xd2, 0x37, 0xbb, 0xdd, 0xce, 0x70, 0x82, 0x13, 0xac, 0xc2, 0x91, 0x25, 0x69, 0xa1, 0xa4, 0xa4, 0xa4, 0xa6, 0xa6, 0x26, 0x14, 0xb7, 0xa4, 0xa4, 0x84, 0x18, 0x9f, 0x3f, 0x7f, 0x9e, 0xd1, 0xc7, 0x7c, 0xbc, 0x7c, 0xf9, 0x32, 0xf8, 0xd8, 0x1e, 0x34, 0x46, 0x04, 0x23, 0x22, 0x04, 0x38, 0x38, 0xca, 0xc4, 0x10, 0x17, 0x1f, 0x3d, 0x4f, 0xf7, 0xef, 0xdf, 0x0f, 0xf0, 0x8e, 0x8e, 0x0e, 0xa2, 0x69, 0x34, 0x1a, 0x95, 0xca, 0xc9, 0xf7, 0x59, 0xc7, 0x8e, 0x1d, 0x63, 0x40, 0xce, 0x9c, 0x39, 0x03, 0x0e, 0x5a, 0x17, 0x0e, 0x8c, 0x8d, 0x8d, 0xb5, 0xb5, 0xb5, 0xa1, 0xa5, 0xd1, 0x57, 0x8c, 0x02, 0x21, 0xb8, 0xce, 0x00, 0xd9, 0x9b, 0xf9, 0xc6, 0x58, 0x24, 0x36, 0x56, 0xab, 0x35, 0xe8, 0xdd, 0x84, 0xc9, 0xcb, 0xa0, 0x63, 0x32, 0x32, 0x86, 0x0c, 0x91, 0x9d, 0x9d, 0xed, 0x72, 0xb9, 0xa0, 0x53, 0x51, 0x51, 0x01, 0x26, 0x0e, 0xe8, 0x8e, 0x1d, 0x3b, 0x1a, 0x1b, 0x1b, 0xab, 0xab, 0xab, 0xb1, 0x44, 0xca, 0xd1, 0x51, 0x0c, 0x02, 0xb9, 0xc5, 0x09, 0x5f, 0xa5, 0x52, 0x11, 0x10, 0x7a, 0x0b, 0xa2, 0xc9, 0x15, 0xc0, 0x9e, 0x3d, 0x7b, 0x30, 0x0d, 0x52, 0x52, 0x52, 0x70, 0x1b, 0x1c, 0x3c, 0x78, 0x10, 0xf7, 0x00, 0xb1, 0x41, 0x00, 0x19, 0x19, 0x19, 0x04, 0x91, 0xfe, 0xc6, 0x4c, 0x64, 0xb6, 0xc7, 0x0d, 0x40, 0x8b, 0x08, 0x9d, 0x93, 0x93, 0x83, 0x5c, 0x42, 0x07, 0xc8, 0x18, 0x9d, 0xf4, 0x98, 0x46, 0x41, 0x1a, 0x1a, 0x1a, 0x18, 0x73, 0x42, 0xd4, 0xd6, 0xd6, 0xe2, 0xca, 0x87, 0x2d, 0x62, 0xc3, 0x90, 0xc5, 0xad, 0x6c, 0x32, 0x99, 0x58, 0x3a, 0x5c, 0x01, 0x5c, 0xbc, 0x78, 0x91, 0xa5, 0x1d, 0xad, 0x25, 0x5a, 0x0b, 0x4d, 0x85, 0x1e, 0xbb, 0x73, 0xe7, 0xce, 0xa5, 0x4b, 0x97, 0xf0, 0x4d, 0x2a, 0x13, 0x88, 0x8f, 0xac, 0xf5, 0xf7, 0xf7, 0x23, 0x65, 0x81, 0x22, 0xc2, 0x61, 0x07, 0x80, 0x2b, 0x13, 0x8d, 0x88, 0xb1, 0x83, 0xb8, 0xab, 0xaa, 0xaa, 0x4e, 0x9c, 0x38, 0xc1, 0x61, 0x1c, 0x0a, 0xf4, 0x65, 0xf2, 0xd9, 0x01, 0xe0, 0xe6, 0x62, 0x95, 0x3e, 0xf0, 0xdc, 0xbc, 0x4c, 0xff, 0x9e, 0xbb, 0x97, 0xff, 0xb6, 0x27, 0x7e, 0x63, 0x42, 0xe3, 0xd7, 0x25, 0x33, 0x3d, 0xf4, 0x7a, 0xfd, 0xc6, 0x8d, 0x1b, 0x59, 0x21, 0xfd, 0xa7, 0x96, 0xb1, 0x37, 0x73, 0xaf, 0xba, 0x1c, 0x5c, 0x37, 0xf1, 0xab, 0xf6, 0x2d, 0xac, 0xfd, 0x63, 0x01, 0x84, 0x95, 0xa6, 0x17, 0xa8, 0x14, 0xab, 0xc0, 0x0b, 0x4c, 0x6e, 0x58, 0xd0, 0xb1, 0x0a, 0x84, 0x95, 0xa6, 0x17, 0xa8, 0xf4, 0x0f, 0x7b, 0x3c, 0x70, 0xd0, 0xa5, 0xfc, 0x34, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXTextIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x33, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xd4, 0x6c, 0xf8, 0x31, 0x00, 0x00, 0x05, 0x4f, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x5b, 0x2c, 0x6c, 0x57, 0x18, 0x9e, 0x61, 0xce, 0x5c, 0x5c, 0xe2, 0x5a, 0xd7, 0x10, 0x97, 0x53, 0xd7, 0xba, 0x3d, 0xd0, 0x3e, 0x20, 0x2a, 0x82, 0x88, 0x22, 0x1e, 0x08, 0xaa, 0x24, 0x08, 0x21, 0x12, 0x11, 0x91, 0xf4, 0xa9, 0x69, 0x1a, 0xf5, 0x26, 0x22, 0xc1, 0x83, 0x04, 0x91, 0xa6, 0x09, 0x5e, 0x2a, 0x8d, 0x34, 0x91, 0xa0, 0xe1, 0xd4, 0x83, 0x07, 0xd2, 0x70, 0x8a, 0xe8, 0x11, 0xe2, 0x1a, 0x8a, 0xc1, 0x30, 0x86, 0x41, 0xbf, 0xb1, 0xcc, 0xea, 0x9c, 0x33, 0xec, 0xd9, 0x33, 0xb3, 0x9c, 0x46, 0xb2, 0x57, 0x64, 0xe7, 0x5f, 0xff, 0xff, 0xfd, 0xf7, 0xb5, 0xd6, 0xac, 0xbd, 0x89, 0xef, 0xee, 0xee, 0x44, 0x2f, 0x79, 0xd8, 0xbc, 0xe4, 0xe0, 0x75, 0xb1, 0x0b, 0x09, 0xfc, 0xdf, 0x1d, 0x14, 0x3a, 0x20, 0x74, 0xc0, 0xca, 0x0a, 0x08, 0x4b, 0xc8, 0xca, 0x02, 0x5a, 0xad, 0x2e, 0x74, 0xc0, 0xea, 0x12, 0x5a, 0x69, 0x40, 0xe8, 0x80, 0x95, 0x05, 0xb4, 0x5a, 0x5d, 0x62, 0xb5, 0x05, 0x9d, 0x01, 0xad, 0xe8, 0x6e, 0x4a, 0xa5, 0x7c, 0xa7, 0x51, 0xdf, 0x9a, 0xba, 0x1a, 0xda, 0x88, 0xc5, 0xaf, 0x65, 0x8a, 0x24, 0x07, 0x67, 0x89, 0x48, 0xcc, 0xc4, 0x35, 0x9b, 0x04, 0x7e, 0x3d, 0xf9, 0x27, 0xff, 0xdd, 0x9f, 0xfc, 0x03, 0xfa, 0x25, 0x38, 0x26, 0xd7, 0xe9, 0x13, 0xfe, 0x78, 0x0e, 0x24, 0x9b, 0x3d, 0xb0, 0xae, 0x51, 0x73, 0xf8, 0x30, 0x16, 0xad, 0x99, 0x89, 0x37, 0xb6, 0x40, 0x39, 0x6c, 0x3a, 0x70, 0x7e, 0x7b, 0x43, 0x2c, 0xba, 0x49, 0xa4, 0x9e, 0xaf, 0xa4, 0xa0, 0x8f, 0xb5, 0xd7, 0xbb, 0xd7, 0x1a, 0xc2, 0xf4, 0x91, 0xca, 0x9c, 0x6d, 0x5f, 0x81, 0xde, 0xbb, 0xd6, 0x1c, 0x69, 0xaf, 0x41, 0x5c, 0xdc, 0xde, 0x12, 0x91, 0xf5, 0x4f, 0x36, 0x1d, 0x50, 0xeb, 0x03, 0xaa, 0x76, 0xf7, 0x7d, 0x1b, 0xfe, 0x05, 0xfe, 0xbe, 0xf7, 0x09, 0xa6, 0xc1, 0xfd, 0xe0, 0x1d, 0x4c, 0x98, 0x95, 0xee, 0xbe, 0x84, 0xa9, 0xbe, 0x7b, 0x48, 0x98, 0x62, 0x2c, 0x26, 0x18, 0x25, 0x70, 0xf7, 0x50, 0x51, 0x99, 0x0d, 0x97, 0x41, 0xb9, 0xf8, 0x41, 0x7a, 0xa9, 0x4f, 0xd8, 0xe2, 0xb8, 0xa9, 0x22, 0x97, 0x3f, 0x0a, 0x32, 0x49, 0xa8, 0xf5, 0x4b, 0x88, 0x86, 0xf8, 0xa8, 0x8a, 0x42, 0x9f, 0x1e, 0xed, 0xd8, 0xa3, 0x30, 0xb3, 0x98, 0x6c, 0x12, 0x08, 0x95, 0xdb, 0x13, 0xaf, 0x81, 0x32, 0x05, 0x87, 0xfb, 0x68, 0x85, 0x23, 0x91, 0x86, 0xc8, 0xed, 0x38, 0x60, 0x66, 0x89, 0xd8, 0x6c, 0xe2, 0x6f, 0x5c, 0xbd, 0x4f, 0x6e, 0xb4, 0x38, 0xda, 0xbf, 0x72, 0x72, 0xe7, 0x70, 0xff, 0xa5, 0xa3, 0xcb, 0x8f, 0xbe, 0xaf, 0x51, 0xfe, 0xaf, 0x5d, 0xbd, 0x38, 0x60, 0x66, 0x89, 0xd8, 0x24, 0xe0, 0x6a, 0x2b, 0xf9, 0xce, 0x2b, 0xd0, 0xa4, 0x63, 0x85, 0xd8, 0xe6, 0x5b, 0xcf, 0x00, 0x93, 0x30, 0xb3, 0x00, 0x6c, 0x96, 0x90, 0x59, 0x2e, 0xd9, 0x82, 0x85, 0x04, 0xd8, 0xd6, 0xd3, 0x7c, 0x6b, 0x2f, 0xbe, 0x03, 0x6c, 0x36, 0x31, 0x2d, 0xdc, 0xd1, 0x8d, 0xf6, 0xaf, 0x4b, 0x15, 0xa6, 0x7f, 0x6b, 0x2e, 0x28, 0x73, 0x55, 0x73, 0xf1, 0xe6, 0x5c, 0x29, 0x16, 0x89, 0xc3, 0xe5, 0xf6, 0xd8, 0xee, 0x94, 0xcf, 0x84, 0x10, 0x33, 0xfc, 0x36, 0xfa, 0xf3, 0xf1, 0x5e, 0xe9, 0xfa, 0x5b, 0x8e, 0x1b, 0x35, 0xee, 0xd2, 0x3f, 0x05, 0x7c, 0x56, 0xe4, 0xe2, 0xc9, 0x24, 0x74, 0x62, 0x84, 0xe5, 0x12, 0xfa, 0x43, 0x75, 0xc2, 0x11, 0x3d, 0xfc, 0x41, 0xfa, 0x46, 0xa5, 0x64, 0x18, 0x3d, 0x4c, 0xb1, 0x4c, 0xa0, 0xc4, 0xd5, 0x2b, 0x4a, 0xe1, 0xc0, 0x11, 0x1f, 0xa4, 0xc0, 0x70, 0x00, 0x2c, 0x10, 0xb1, 0x5c, 0x42, 0x16, 0xb8, 0xb7, 0x5e, 0x85, 0x65, 0x07, 0xac, 0x8f, 0xc6, 0x02, 0x0b, 0x42, 0x02, 0x16, 0x14, 0x8d, 0xa9, 0x8a, 0xd0, 0x01, 0xa6, 0xe5, 0xb4, 0xc0, 0x98, 0xd0, 0x01, 0x0b, 0x8a, 0xc6, 0x54, 0x85, 0x6f, 0x07, 0xb4, 0x5a, 0xed, 0xe4, 0xe4, 0xe4, 0xee, 0xee, 0x2e, 0x53, 0xef, 0xef, 0x19, 0xdb, 0xd8, 0xd8, 0x98, 0x9a, 0x9a, 0x32, 0xfb, 0x6a, 0x03, 0x05, 0x3e, 0x63, 0x74, 0x74, 0x14, 0xde, 0xb2, 0xb2, 0xb2, 0xf8, 0x80, 0x2d, 0xc3, 0xc4, 0xc7, 0xc7, 0xc3, 0xc5, 0xec, 0xec, 0xac, 0x59, 0xea, 0x7c, 0x3b, 0x70, 0x70, 0x70, 0x00, 0xeb, 0xe4, 0xf9, 0x5e, 0xdd, 0xd8, 0x4d, 0x2c, 0x73, 0xc1, 0x2b, 0x81, 0xa5, 0xa5, 0xa5, 0xe5, 0xe5, 0x65, 0x84, 0x7a, 0x76, 0x76, 0xf6, 0xfb, 0xfd, 0x40, 0x9d, 0xb0, 0xa8, 0x0c, 0x83, 0x3f, 0x3d, 0x3d, 0x6d, 0x6c, 0x6c, 0x8c, 0x89, 0x89, 0x71, 0x70, 0x70, 0x88, 0x8c, 0x8c, 0x6c, 0x6e, 0x6e, 0x3e, 0x3f, 0x3f, 0xa7, 0x80, 0xfa, 0xfa, 0xfa, 0xcf, 0xef, 0x47, 0x45, 0x45, 0x05, 0x0a, 0x5c, 0x54, 0x54, 0x84, 0x59, 0x62, 0x62, 0xe2, 0xe0, 0xe0, 0x20, 0x30, 0x2a, 0x95, 0x6a, 0x7a, 0x7a, 0xfa, 0xf2, 0xf2, 0x12, 0xf4, 0xc2, 0xc2, 0x02, 0x71, 0xb1, 0xb3, 0xb3, 0x43, 0xd5, 0xb9, 0x08, 0x93, 0xfd, 0x9a, 0x9b, 0x9b, 0x7b, 0x54, 0xbf, 0xa5, 0xa5, 0x85, 0xea, 0x62, 0x6f, 0xf8, 0xf9, 0xf9, 0x11, 0x98, 0x9b, 0x9b, 0x1b, 0x21, 0x22, 0x22, 0x22, 0x90, 0x03, 0x30, 0x48, 0xd5, 0xde, 0xfe, 0xe1, 0xbb, 0x8b, 0x4c, 0x26, 0x53, 0x2a, 0x95, 0x36, 0xfa, 0x0f, 0x44, 0x25, 0x25, 0x25, 0x00, 0xe4, 0xe4, 0xe4, 0x18, 0xbb, 0xb0, 0xb3, 0xb3, 0xbb, 0xba, 0xba, 0xa2, 0x2e, 0x9e, 0x22, 0x44, 0x4f, 0x09, 0x28, 0x7f, 0x7f, 0x7f, 0x3f, 0x29, 0x29, 0xc9, 0xd3, 0x53, 0x77, 0x89, 0x87, 0xfb, 0x4f, 0xef, 0x47, 0x6c, 0x6c, 0xec, 0xd8, 0xd8, 0x18, 0xc5, 0xe4, 0xe5, 0xe5, 0x41, 0x9a, 0x96, 0x96, 0xb6, 0xb5, 0xb5, 0x05, 0xe6, 0xfc, 0xfc, 0xbc, 0xaf, 0xaf, 0xee, 0x2b, 0x62, 0x53, 0x53, 0x13, 0xc1, 0xa0, 0x81, 0x65, 0x65, 0x65, 0xe0, 0x24, 0x24, 0x24, 0x1c, 0x1f, 0x1f, 0x87, 0x87, 0x87, 0x4b, 0xa5, 0xd2, 0xde, 0xde, 0xde, 0xa3, 0xa3, 0x23, 0x00, 0x3a, 0x3a, 0x3a, 0xc2, 0xc2, 0xc2, 0x24, 0x12, 0xdd, 0xbb, 0x8e, 0x8f, 0x8f, 0x0f, 0x71, 0x51, 0x58, 0x58, 0x48, 0xed, 0x73, 0x10, 0xa6, 0x13, 0x20, 0xca, 0xfd, 0xfd, 0xfd, 0xb0, 0x8e, 0x7d, 0x66, 0x6c, 0x4b, 0xad, 0x56, 0xdb, 0xda, 0xda, 0x42, 0xda, 0xde, 0xde, 0xfe, 0x9b, 0x7e, 0x60, 0xa9, 0x80, 0x13, 0x1d, 0x1d, 0x4d, 0xf1, 0xe8, 0x43, 0x66, 0x66, 0x26, 0x98, 0x5e, 0x5e, 0xba, 0x1b, 0x75, 0x5f, 0x5f, 0x1f, 0x15, 0x11, 0x22, 0x20, 0x20, 0x00, 0x7c, 0x9c, 0x16, 0x1f, 0xf0, 0xb9, 0xa7, 0x0c, 0x5e, 0xf0, 0x56, 0x57, 0x57, 0x6f, 0x6e, 0x74, 0x1f, 0x6b, 0x1b, 0x1a, 0x1a, 0xf0, 0x34, 0x1c, 0x17, 0x17, 0xff, 0xbd, 0x58, 0x22, 0xc9, 0xa1, 0xa1, 0xa1, 0xc0, 0xc0, 0xc0, 0xbd, 0xbd, 0xbd, 0x94, 0x94, 0x94, 0xf2, 0xf2, 0x72, 0x43, 0xa4, 0xc5, 0x34, 0xdf, 0x04, 0xc8, 0xaa, 0xc5, 0x6e, 0x33, 0xf6, 0x84, 0xa6, 0x13, 0x66, 0x4f, 0x4f, 0x4f, 0x54, 0x54, 0x14, 0x05, 0x20, 0xe2, 0x90, 0x90, 0x10, 0x3a, 0x05, 0xd1, 0xd6, 0xd6, 0x76, 0x78, 0x78, 0x28, 0x97, 0xcb, 0xb1, 0x4d, 0x3b, 0x3b, 0x3b, 0xeb, 0xea, 0xea, 0x0c, 0xa5, 0x1c, 0x2e, 0x0c, 0x61, 0x1f, 0xd2, 0xdc, 0x0d, 0xa2, 0xd2, 0x91, 0x91, 0x11, 0x68, 0x22, 0xa6, 0xb5, 0xb5, 0x35, 0x1c, 0x17, 0xe3, 0xe3, 0xe3, 0xb5, 0xb5, 0xb5, 0x58, 0x57, 0x04, 0x10, 0x1a, 0x1a, 0x0a, 0x69, 0x7a, 0x7a, 0x3a, 0xd9, 0xb5, 0x60, 0x2e, 0x2e, 0x2e, 0x56, 0x57, 0x57, 0xb7, 0xb6, 0xb6, 0x52, 0x0b, 0xdd, 0xdd, 0xdd, 0xc0, 0xe0, 0xe4, 0x81, 0xc8, 0xd9, 0xd9, 0x19, 0xe1, 0x0e, 0x0f, 0x0f, 0x53, 0x29, 0x88, 0xb8, 0xb8, 0x38, 0x00, 0xaa, 0xaa, 0xaa, 0xb0, 0xd8, 0xd6, 0xd7, 0xd7, 0xbb, 0xba, 0xba, 0x4a, 0x4b, 0x4b, 0x91, 0xb0, 0x21, 0xc6, 0x98, 0xe6, 0xbb, 0x07, 0x56, 0x56, 0x56, 0x60, 0x1d, 0x03, 0x8e, 0x15, 0x8a, 0x87, 0x2f, 0xb8, 0x88, 0x98, 0x58, 0xc4, 0x8f, 0xb4, 0x58, 0xac, 0xfb, 0x9f, 0x17, 0x44, 0xa9, 0xa9, 0xa9, 0x64, 0x07, 0x63, 0x5a, 0x50, 0x50, 0x40, 0x00, 0xd8, 0xdf, 0x3a, 0x65, 0x91, 0x28, 0x3f, 0x3f, 0x1f, 0x9b, 0xd8, 0xdb, 0xdb, 0x9b, 0x4c, 0x33, 0x32, 0x32, 0x68, 0x4c, 0xc5, 0xc5, 0xc5, 0x84, 0x49, 0x8f, 0x2c, 0x4c, 0x67, 0x66, 0x66, 0x28, 0xe0, 0x51, 0x82, 0x6f, 0x02, 0x50, 0xc6, 0x59, 0xe1, 0xe8, 0xa8, 0xfb, 0xbc, 0x8c, 0x1c, 0x70, 0x68, 0x54, 0x56, 0x56, 0x6e, 0x6f, 0x6f, 0x53, 0xa3, 0x13, 0x13, 0x13, 0x38, 0x9a, 0x48, 0x04, 0x00, 0xe0, 0x9c, 0xa9, 0xa9, 0xa9, 0x21, 0x87, 0x0c, 0x30, 0xf8, 0x09, 0x27, 0xa2, 0xdc, 0xdc, 0x5c, 0x24, 0xe0, 0xe1, 0xe1, 0x81, 0x29, 0x72, 0xce, 0xce, 0xce, 0xa6, 0x16, 0x50, 0xf5, 0xe4, 0xe4, 0x64, 0x02, 0x73, 0x72, 0x72, 0x42, 0x21, 0x06, 0x06, 0x06, 0xa8, 0xf4, 0x29, 0xc2, 0xbc, 0x77, 0x62, 0x58, 0xd9, 0xdc, 0xdc, 0x74, 0x71, 0x71, 0x21, 0x99, 0x10, 0x67, 0x86, 0x4f, 0xfc, 0x9c, 0xe1, 0x4a, 0x13, 0x14, 0x14, 0x64, 0x58, 0x45, 0x43, 0x80, 0x49, 0x1a, 0xdb, 0x0c, 0xcb, 0xc6, 0xdf, 0xdf, 0x9f, 0xb4, 0xd4, 0x24, 0xde, 0xbc, 0x04, 0x4c, 0x9a, 0xfb, 0xf8, 0x00, 0x5e, 0x57, 0x89, 0x8f, 0x1f, 0x16, 0x7f, 0x8f, 0x42, 0x02, 0xfc, 0x6b, 0xf5, 0x3c, 0x48, 0xa1, 0x03, 0xcf, 0x53, 0x57, 0xfe, 0x56, 0x85, 0x0e, 0xf0, 0xaf, 0xd5, 0xf3, 0x20, 0x85, 0x0e, 0x3c, 0x4f, 0x5d, 0xf9, 0x5b, 0x15, 0x3a, 0xc0, 0xbf, 0x56, 0xcf, 0x83, 0xfc, 0x17, 0xab, 0x70, 0xa9, 0x05, 0xf0, 0x5c, 0xd1, 0x77, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXVideoIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x37, 0x39, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xcc, 0x4b, 0x33, 0xb9, 0x00, 0x00, 0x09, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x7b, 0x4c, 0x54, 0xd9, 0x19, 0x9f, 0x99, 0x7b, 0x67, 0x18, 0x9e, 0x83, 0xc0, 0xcc, 0x30, 0x83, 0x2c, 0xa2, 0x80, 0x3c, 0x15, 0x96, 0xe2, 0xae, 0x8f, 0xd4, 0xf5, 0x11, 0x13, 0xb7, 0xb6, 0x31, 0xa6, 0xd5, 0x08, 0x6a, 0xb4, 0xba, 0x3e, 0x6a, 0x1a, 0x13, 0x63, 0xac, 0x35, 0x21, 0x9a, 0xfe, 0x63, 0x62, 0x8d, 0xb1, 0x35, 0x46, 0x8d, 0xd1, 0xac, 0xa6, 0x35, 0xd1, 0xa6, 0x66, 0xdd, 0x9a, 0xad, 0x31, 0x0d, 0x6e, 0xa3, 0x8d, 0x6f, 0x08, 0x6f, 0x99, 0x05, 0x11, 0x81, 0x85, 0x79, 0xc0, 0xbc, 0x98, 0xc7, 0xbd, 0x33, 0xf7, 0x4e, 0x7f, 0x77, 0xce, 0xee, 0x75, 0x32, 0x28, 0x8f, 0x19, 0x08, 0x6b, 0x32, 0x07, 0xb8, 0x7c, 0xe7, 0x9c, 0xef, 0x3b, 0xe7, 0xfb, 0x7d, 0xdf, 0x77, 0xce, 0x77, 0xee, 0xb9, 0xd2, 0x40, 0x20, 0x20, 0xf9, 0x90, 0x8b, 0xec, 0x43, 0x56, 0x5e, 0xd0, 0x3d, 0x06, 0x60, 0xa6, 0x3d, 0x18, 0xf3, 0x40, 0xcc, 0x03, 0x51, 0x5a, 0x60, 0x86, 0x43, 0xe8, 0xd9, 0xb3, 0x67, 0x83, 0x83, 0x83, 0xd1, 0x60, 0x98, 0x19, 0x00, 0x0c, 0xc3, 0xb4, 0xb6, 0x77, 0x9d, 0xf9, 0xeb, 0xc5, 0x23, 0x7f, 0xfc, 0xc3, 0xed, 0xdb, 0x5f, 0x45, 0x03, 0x80, 0x8e, 0x46, 0x78, 0xb2, 0xb2, 0x83, 0x83, 0x16, 0xe3, 0x90, 0xcd, 0x60, 0xe8, 0xf9, 0xde, 0x62, 0x4d, 0x4e, 0x4e, 0xee, 0x1d, 0xb4, 0xf5, 0xf5, 0x7e, 0xff, 0xe2, 0xc5, 0x8b, 0xc9, 0x8e, 0x13, 0xca, 0x1f, 0x15, 0x80, 0xbb, 0x77, 0xef, 0x32, 0x5e, 0x6f, 0x5c, 0x42, 0xb2, 0xcb, 0xed, 0x95, 0x4a, 0xa5, 0x18, 0x97, 0xa6, 0x69, 0xa5, 0x52, 0x91, 0x9c, 0x94, 0xa4, 0xce, 0x48, 0xcb, 0xd4, 0x6a, 0x92, 0x92, 0x92, 0xd0, 0xd8, 0xdf, 0x6f, 0x6c, 0x6c, 0xed, 0xec, 0x37, 0x59, 0x19, 0x2f, 0x23, 0x95, 0xd1, 0x1f, 0x65, 0xeb, 0xca, 0xb4, 0x6a, 0x9e, 0x93, 0x98, 0x4c, 0x96, 0x21, 0xab, 0xfd, 0xf1, 0xe3, 0xc7, 0x0e, 0x87, 0x23, 0x25, 0x25, 0x25, 0x54, 0xad, 0x89, 0xd3, 0x51, 0x01, 0x18, 0x1a, 0x1a, 0xea, 0xea, 0xfc, 0x4e, 0x9d, 0x53, 0x2e, 0x97, 0xcb, 0xe7, 0xcc, 0xce, 0xc0, 0xa1, 0x84, 0x65, 0x39, 0x37, 0xe3, 0xb3, 0xd8, 0x6c, 0xcd, 0x86, 0x01, 0x9b, 0xfd, 0x89, 0x67, 0xc4, 0xe9, 0xb0, 0x19, 0xfb, 0x8c, 0xb6, 0xb4, 0x0c, 0x5d, 0x41, 0x5e, 0xee, 0xec, 0xac, 0xcc, 0xa4, 0xe4, 0x44, 0xc0, 0x18, 0x30, 0x5a, 0xad, 0x56, 0x67, 0xf7, 0xeb, 0x3e, 0xa9, 0x4c, 0x3e, 0x38, 0x68, 0xec, 0xea, 0xea, 0xaa, 0xa8, 0xa8, 0x98, 0xb8, 0xd2, 0xa1, 0x9c, 0x51, 0x01, 0x50, 0x05, 0x8b, 0x5e, 0xa7, 0xcb, 0xc9, 0xd6, 0xe6, 0xe7, 0xea, 0x29, 0x19, 0xdc, 0x00, 0x3f, 0x08, 0x0f, 0x9e, 0x97, 0x70, 0x5c, 0x80, 0xf1, 0xb1, 0x76, 0xa7, 0xbb, 0x7f, 0xc0, 0xdc, 0xfa, 0xb2, 0xeb, 0xf5, 0xab, 0xae, 0xde, 0xbe, 0x3e, 0xf4, 0x26, 0x26, 0x26, 0x3b, 0x9c, 0xae, 0xef, 0xda, 0x5b, 0xf4, 0x9a, 0xa4, 0x3f, 0x1d, 0xaf, 0x8d, 0x53, 0x50, 0x5a, 0xad, 0x36, 0x54, 0xa7, 0x49, 0xd1, 0x51, 0x01, 0xa8, 0xab, 0xab, 0x63, 0x3d, 0x9e, 0xf8, 0xb4, 0x5c, 0x4d, 0xba, 0xca, 0x6e, 0x77, 0xd0, 0x32, 0x4a, 0x4a, 0x41, 0x7b, 0x19, 0x0d, 0x24, 0x40, 0x23, 0x91, 0xc4, 0xc9, 0xa9, 0xcc, 0x8c, 0x94, 0x2c, 0xad, 0x6a, 0x51, 0x79, 0x01, 0xc3, 0xfa, 0x7b, 0x7a, 0x07, 0x9a, 0x5a, 0x0d, 0xf7, 0x1f, 0xd4, 0x1b, 0xda, 0x1b, 0xaa, 0x7f, 0xfd, 0xf9, 0x6f, 0xb7, 0x57, 0xc3, 0x75, 0x93, 0x52, 0x77, 0x34, 0x73, 0x54, 0x00, 0x1a, 0x1a, 0x1a, 0x1c, 0x56, 0x2b, 0x9d, 0xf2, 0x51, 0x6e, 0x4e, 0xae, 0xd5, 0xee, 0xa2, 0x64, 0x28, 0xd0, 0x5f, 0x22, 0x10, 0xf8, 0x93, 0x0a, 0x0f, 0x50, 0x14, 0x25, 0x21, 0xf4, 0x6c, 0x9d, 0x7a, 0xb6, 0x5e, 0xf3, 0xf3, 0x25, 0x95, 0x4f, 0xea, 0x5f, 0xb6, 0xb7, 0xb5, 0x3e, 0x7b, 0xd1, 0xb4, 0xe4, 0xd3, 0xca, 0xd1, 0x3a, 0x4d, 0xaa, 0x25, 0x2a, 0x00, 0x1e, 0x8f, 0x47, 0x4a, 0xd1, 0x0c, 0xcb, 0xf5, 0xf4, 0x9b, 0x38, 0xde, 0x27, 0xa7, 0x69, 0xb9, 0x9c, 0xa2, 0x69, 0x4a, 0x4e, 0x09, 0x4f, 0xc1, 0x17, 0x14, 0x01, 0x22, 0x38, 0xe6, 0x47, 0x54, 0x52, 0x84, 0xd8, 0xa7, 0x1f, 0x17, 0x16, 0xe4, 0xcd, 0xfe, 0xe6, 0xde, 0xa3, 0xaf, 0xbf, 0xf9, 0x0f, 0xcd, 0x3b, 0xf7, 0xed, 0xdb, 0x97, 0x95, 0x95, 0x35, 0x29, 0xbd, 0x45, 0xe6, 0xa8, 0x00, 0x64, 0x66, 0x66, 0x42, 0x43, 0x9b, 0xd5, 0xf2, 0x8f, 0x7f, 0xfe, 0xab, 0xb4, 0xa4, 0x38, 0x0b, 0xb1, 0x92, 0x9c, 0xa8, 0x4a, 0x49, 0x50, 0x25, 0x27, 0xc4, 0xc7, 0x2b, 0x04, 0x00, 0xf8, 0x09, 0x16, 0xc1, 0x1d, 0x32, 0xf8, 0x41, 0x08, 0x2c, 0x50, 0x41, 0x5a, 0xb6, 0xf8, 0x93, 0x8a, 0x53, 0xa7, 0xeb, 0x92, 0x65, 0xce, 0xa6, 0xa6, 0xa6, 0x99, 0x01, 0x70, 0xf2, 0xe4, 0x49, 0xa4, 0xa4, 0x53, 0xa7, 0xff, 0xd2, 0xd3, 0xd1, 0xa8, 0xd5, 0xaa, 0x0b, 0x8b, 0xe7, 0x27, 0x26, 0xd0, 0x71, 0x71, 0x4a, 0xa8, 0xe8, 0xf7, 0x07, 0xa4, 0xd2, 0x80, 0xa0, 0x2e, 0x60, 0xc8, 0xa4, 0x3c, 0x4f, 0xd0, 0x70, 0xa8, 0x52, 0x94, 0x54, 0xc6, 0x07, 0x38, 0xce, 0xef, 0xf3, 0xb1, 0x0a, 0x05, 0x9d, 0xae, 0x4a, 0x17, 0x82, 0x2c, 0xd2, 0x12, 0x95, 0x07, 0x0a, 0x0a, 0x0a, 0x30, 0x6f, 0xda, 0xac, 0x59, 0x99, 0x5a, 0xb5, 0x32, 0x4e, 0x9e, 0xa8, 0xa4, 0x52, 0x92, 0xe2, 0x3b, 0x0d, 0x2f, 0x47, 0x1c, 0xc3, 0x89, 0x49, 0x49, 0x64, 0x3f, 0x12, 0x00, 0x08, 0x19, 0x22, 0xe8, 0x08, 0x81, 0x90, 0xb8, 0xdd, 0x6e, 0x8d, 0x36, 0xb3, 0xb0, 0xa8, 0x94, 0xe3, 0x78, 0xaf, 0xcb, 0x5b, 0xf7, 0xfc, 0xf1, 0x2f, 0xd6, 0xfd, 0x52, 0xe8, 0x88, 0xa8, 0x44, 0x05, 0x80, 0xcc, 0x18, 0x90, 0x04, 0x54, 0xaa, 0xd4, 0x00, 0xcf, 0xf9, 0x18, 0x6c, 0x9b, 0x72, 0x1f, 0xeb, 0x5b, 0xbe, 0x7c, 0x79, 0x5a, 0x5a, 0x3a, 0x72, 0x1c, 0xb4, 0x86, 0xe6, 0x34, 0x25, 0xc3, 0x53, 0x22, 0x81, 0x43, 0x64, 0xf1, 0x4a, 0x65, 0x6f, 0x7f, 0x7f, 0x73, 0x6b, 0x1b, 0x03, 0xfb, 0xe3, 0x97, 0xf5, 0x19, 0x4d, 0xc6, 0x68, 0x5e, 0x6b, 0xa7, 0x00, 0x00, 0x76, 0xcf, 0x0c, 0xb5, 0x9a, 0xe7, 0x39, 0xb7, 0x87, 0x89, 0x53, 0xca, 0x19, 0x96, 0x0d, 0x48, 0xa9, 0xcb, 0x97, 0x2e, 0x74, 0xb4, 0x37, 0x05, 0xfd, 0x20, 0xc5, 0x82, 0x86, 0xa2, 0x00, 0x33, 0x3c, 0x6c, 0x59, 0xf7, 0xab, 0xdf, 0xfc, 0x6c, 0xd1, 0x12, 0x96, 0xf5, 0xb3, 0x00, 0xcb, 0xf8, 0x59, 0x24, 0x0a, 0xbb, 0x23, 0x1a, 0x00, 0x53, 0x70, 0x98, 0xc3, 0x8e, 0xa3, 0xd5, 0x68, 0xfc, 0x7e, 0x0e, 0xeb, 0xc1, 0xeb, 0x15, 0xdc, 0xe0, 0x74, 0xba, 0xe5, 0x0a, 0x79, 0x4d, 0xcd, 0xe6, 0x3d, 0xbb, 0xbf, 0x58, 0xb7, 0xee, 0x73, 0x43, 0xc7, 0x4b, 0xb3, 0xd9, 0x58, 0x55, 0x55, 0x69, 0x36, 0x19, 0x5f, 0xf7, 0xf4, 0xb0, 0x1c, 0x0f, 0x3c, 0x5e, 0x2f, 0xcb, 0xb0, 0x3e, 0x9e, 0x27, 0x77, 0x0a, 0x91, 0x5f, 0x2c, 0x4c, 0x01, 0x00, 0xb9, 0x9c, 0xd6, 0x68, 0xb5, 0x7e, 0xbf, 0x1f, 0x1e, 0xf0, 0x7a, 0xa0, 0x16, 0xeb, 0x74, 0x8e, 0x28, 0xe4, 0xf2, 0xfc, 0xfc, 0xfc, 0xd2, 0x92, 0x12, 0xbd, 0x5e, 0xf7, 0xaa, 0xfb, 0xd5, 0x67, 0x9f, 0x2d, 0x37, 0x18, 0x0c, 0x26, 0x8b, 0xd9, 0xef, 0xe7, 0x3d, 0x6e, 0xaf, 0x00, 0x80, 0x65, 0xbd, 0x8c, 0x8f, 0xf7, 0x73, 0x11, 0x45, 0xfe, 0x5b, 0xa1, 0x29, 0x08, 0x21, 0x8a, 0xa6, 0x34, 0x6a, 0x35, 0xc7, 0x75, 0xc2, 0x01, 0x0c, 0x93, 0x80, 0xf0, 0xc0, 0xd9, 0xce, 0x64, 0xb6, 0x7c, 0xfb, 0x6d, 0x9d, 0x5e, 0x9f, 0xdd, 0xd2, 0xda, 0x1c, 0x17, 0x17, 0x67, 0xe8, 0x30, 0x48, 0xa4, 0x92, 0x8a, 0xf2, 0x72, 0x97, 0xdb, 0xed, 0x72, 0x7b, 0x58, 0x9f, 0x1f, 0xda, 0xc3, 0x09, 0x7e, 0xde, 0xff, 0x56, 0x97, 0x88, 0xa8, 0x29, 0x00, 0x40, 0x53, 0x74, 0x7a, 0x3a, 0xb6, 0xc2, 0x60, 0xfa, 0x52, 0x20, 0x97, 0xd1, 0xd0, 0xaf, 0xec, 0xe3, 0xa5, 0x76, 0xbb, 0xb5, 0xcf, 0xcc, 0xa4, 0xeb, 0x8a, 0x0e, 0xd7, 0xfe, 0x19, 0x51, 0x8e, 0x83, 0x2a, 0x96, 0xad, 0x5a, 0xa3, 0x19, 0x71, 0xb9, 0x20, 0x82, 0xbd, 0x15, 0x8d, 0x3c, 0xcf, 0xc3, 0x75, 0x08, 0xbf, 0x88, 0x94, 0x17, 0x84, 0xa6, 0x00, 0x00, 0x96, 0xaf, 0x5e, 0xa7, 0x4d, 0x49, 0x55, 0x69, 0x35, 0x50, 0x2f, 0xdd, 0xed, 0x1c, 0x52, 0xa9, 0x52, 0x32, 0x34, 0x6a, 0xa4, 0x01, 0x21, 0x7f, 0x61, 0xdf, 0xa7, 0x29, 0x09, 0x94, 0x0d, 0xf0, 0xd8, 0x8b, 0xc0, 0x3c, 0x64, 0x36, 0xa5, 0xce, 0x52, 0xcd, 0x52, 0xa5, 0x3a, 0xdd, 0x01, 0x5a, 0xae, 0x28, 0x2a, 0x2a, 0x8a, 0xf8, 0x2c, 0x1d, 0x2d, 0x00, 0x28, 0x85, 0xbd, 0x25, 0x5e, 0x19, 0xff, 0xdf, 0xff, 0x3d, 0xf1, 0x30, 0xfc, 0x90, 0xc3, 0x23, 0xa1, 0xdd, 0x43, 0x76, 0x37, 0x6d, 0xb4, 0x8f, 0xb0, 0x32, 0xf4, 0x06, 0x01, 0x08, 0x89, 0x80, 0xc7, 0x5e, 0x8b, 0xe5, 0x8a, 0x7f, 0x52, 0xc9, 0x88, 0xc3, 0x6e, 0x32, 0xdb, 0xe8, 0x04, 0x4b, 0x7b, 0x5b, 0xdb, 0xc1, 0xdf, 0x7f, 0xb1, 0x64, 0xd1, 0x02, 0x8d, 0x46, 0x13, 0xb1, 0x07, 0x04, 0x3f, 0x46, 0x26, 0xec, 0xf3, 0xf9, 0x90, 0x92, 0x46, 0x46, 0x46, 0xcc, 0x66, 0x4b, 0x43, 0x63, 0xd3, 0xc9, 0x93, 0xa7, 0xcc, 0x96, 0x21, 0xe4, 0x54, 0xa4, 0x58, 0xc1, 0xee, 0x38, 0x2d, 0x08, 0x23, 0x23, 0x0f, 0x08, 0xc3, 0x07, 0xa9, 0xe0, 0x3f, 0xa1, 0xc6, 0x23, 0x85, 0xc1, 0x1b, 0xc5, 0x85, 0x05, 0x7f, 0xff, 0xdb, 0x97, 0x19, 0x19, 0x6a, 0x9c, 0x49, 0x11, 0x60, 0x42, 0xcf, 0xe4, 0x4b, 0x84, 0x62, 0x64, 0x22, 0x44, 0x30, 0xc7, 0x71, 0x0a, 0x85, 0x1c, 0x47, 0xb3, 0xdf, 0xed, 0xdd, 0x69, 0x32, 0x99, 0x84, 0xa0, 0x41, 0xce, 0x22, 0x56, 0x79, 0x8f, 0x65, 0xd0, 0x8f, 0x13, 0x2a, 0xf8, 0xf2, 0xf2, 0xf3, 0x81, 0xd0, 0xeb, 0xf5, 0x46, 0xac, 0x3d, 0xd4, 0x88, 0xdc, 0x03, 0x10, 0x86, 0x9e, 0xc0, 0x80, 0x02, 0x02, 0x56, 0x14, 0x54, 0x9f, 0x64, 0x01, 0xfe, 0x1f, 0x30, 0x4f, 0x52, 0x50, 0x64, 0x8f, 0x0a, 0x80, 0x38, 0xca, 0x0c, 0x12, 0x53, 0x90, 0xc8, 0x66, 0x50, 0x7b, 0x4c, 0x1d, 0x03, 0x30, 0xb3, 0xf6, 0x8f, 0x79, 0x60, 0xa6, 0xed, 0x1f, 0xf3, 0xc0, 0x87, 0xec, 0x01, 0x9c, 0x21, 0x4f, 0x9f, 0x3e, 0x7d, 0xeb, 0xd6, 0xad, 0xb1, 0x41, 0x20, 0xcd, 0x05, 0xcf, 0x9b, 0xd1, 0x1e, 0x9b, 0xdf, 0x3b, 0x0b, 0x92, 0x68, 0x64, 0xa5, 0xa3, 0xa3, 0x03, 0x83, 0xce, 0x9d, 0x3b, 0x77, 0x0c, 0xf1, 0xa3, 0x47, 0x8f, 0x8a, 0x37, 0x0e, 0xb8, 0xfc, 0x19, 0x83, 0x33, 0xe2, 0xae, 0xc8, 0xf3, 0x80, 0x42, 0xa1, 0xc0, 0x9b, 0xca, 0xd8, 0xf7, 0x39, 0x39, 0x39, 0x39, 0xf3, 0xe6, 0xcd, 0x4b, 0x4b, 0x4b, 0x03, 0x54, 0x5c, 0x41, 0xbf, 0xd7, 0x8a, 0xd1, 0x74, 0x44, 0x0c, 0x1d, 0x82, 0x38, 0x90, 0x4e, 0x44, 0x1c, 0x91, 0x06, 0x0d, 0xb7, 0x6c, 0xd9, 0x32, 0x11, 0xe6, 0xc9, 0xf2, 0x84, 0x7b, 0xe0, 0xc8, 0x91, 0x23, 0x9f, 0x04, 0xcb, 0x9a, 0x35, 0x6b, 0xda, 0xda, 0xda, 0x9e, 0x3f, 0x7f, 0xbe, 0x6a, 0xd5, 0x2a, 0x34, 0x2c, 0x5d, 0xba, 0xf4, 0xda, 0xb5, 0x6b, 0xa2, 0xa5, 0xb6, 0x6d, 0xdb, 0x46, 0x1a, 0x97, 0x2d, 0x5b, 0x66, 0xb3, 0xd9, 0xc4, 0x76, 0x91, 0xb8, 0x71, 0xe3, 0xc6, 0xd6, 0xad, 0x5b, 0x31, 0xc8, 0xf1, 0xe3, 0xc7, 0x47, 0xdb, 0x1e, 0x2d, 0x07, 0x0f, 0x1e, 0x5c, 0xb8, 0x70, 0x21, 0x3e, 0x20, 0x94, 0x94, 0x94, 0x1c, 0x3e, 0x7c, 0xd8, 0xe5, 0x72, 0x89, 0xb2, 0x20, 0xfa, 0xfb, 0xfb, 0x77, 0xec, 0xd8, 0x51, 0x58, 0x58, 0x08, 0x86, 0xf2, 0xf2, 0xf2, 0xd1, 0x0c, 0x6f, 0x99, 0xc3, 0x10, 0xeb, 0x74, 0x3a, 0xb1, 0xef, 0xea, 0xd5, 0xab, 0x67, 0xcf, 0x9e, 0x15, 0xab, 0x1b, 0x36, 0x6c, 0x20, 0xcc, 0x4e, 0xa7, 0x33, 0xf4, 0x00, 0xdc, 0xdd, 0xdd, 0x1d, 0x36, 0xc8, 0xae, 0x5d, 0xbb, 0x44, 0x29, 0x10, 0xe4, 0x94, 0x2a, 0x7a, 0x60, 0x60, 0x60, 0x20, 0x3b, 0x3b, 0x9b, 0x30, 0xe0, 0x5d, 0x94, 0x10, 0xc5, 0xc5, 0xc5, 0xc0, 0x40, 0xc6, 0xc1, 0x37, 0x9b, 0xd1, 0xef, 0x68, 0xb9, 0xb9, 0xb9, 0x16, 0x8b, 0x25, 0x6c, 0x22, 0x54, 0x85, 0x23, 0x71, 0x68, 0xe9, 0xec, 0xec, 0x2c, 0x2d, 0x2d, 0xc5, 0xa0, 0xbb, 0x77, 0xef, 0x46, 0x84, 0xe0, 0xa6, 0x64, 0xf3, 0xe6, 0xcd, 0xa8, 0x6e, 0xda, 0xb4, 0x29, 0x54, 0xbe, 0xb9, 0xb9, 0x19, 0x36, 0x26, 0x73, 0x87, 0x01, 0xb8, 0x7d, 0xfb, 0x36, 0x69, 0x87, 0x73, 0xae, 0x5c, 0xb9, 0xb2, 0x62, 0xc5, 0x0a, 0x52, 0xad, 0xa9, 0xa9, 0x21, 0x13, 0xad, 0x5f, 0xbf, 0x1e, 0x2d, 0xab, 0x57, 0xaf, 0xee, 0xeb, 0xeb, 0x43, 0x0b, 0xae, 0xb8, 0xc9, 0x42, 0x3a, 0x74, 0xe8, 0x10, 0xaa, 0x98, 0x94, 0x28, 0x00, 0x53, 0x9e, 0x3b, 0x77, 0x0e, 0xfa, 0x1c, 0x3b, 0x76, 0x2c, 0x3e, 0x3e, 0x1e, 0x22, 0xd5, 0xd5, 0xd5, 0xa1, 0xaa, 0x12, 0x3a, 0x1c, 0x00, 0x5a, 0x2f, 0x5e, 0xbc, 0x08, 0x6e, 0x7c, 0x32, 0x01, 0x8d, 0xf3, 0x3a, 0x16, 0x22, 0x4c, 0x88, 0x3d, 0x27, 0x4c, 0x18, 0x57, 0xd3, 0x44, 0xb3, 0x30, 0x00, 0x44, 0x3f, 0xbc, 0x25, 0x42, 0x96, 0x88, 0x60, 0x04, 0x70, 0x12, 0x00, 0x90, 0x22, 0xfb, 0xd2, 0x99, 0x33, 0x67, 0xfe, 0xfd, 0x63, 0xd9, 0xb9, 0x73, 0x27, 0x18, 0x16, 0x2c, 0x58, 0x00, 0x7e, 0x5c, 0xf4, 0x92, 0x61, 0xb1, 0x72, 0xc4, 0x19, 0x21, 0x8b, 0x46, 0xa5, 0x52, 0x89, 0x1d, 0x59, 0x6c, 0x24, 0xc4, 0x3b, 0x00, 0x20, 0x42, 0xf0, 0x05, 0x0e, 0x02, 0xf5, 0xf5, 0xf5, 0x77, 0xee, 0xdc, 0x01, 0xb1, 0x76, 0xed, 0xda, 0x30, 0x31, 0x54, 0xdf, 0x07, 0x00, 0x81, 0x0b, 0x91, 0xed, 0xdb, 0xb7, 0x8b, 0x22, 0xfb, 0xf7, 0xef, 0x47, 0x0b, 0x01, 0x20, 0xea, 0x87, 0x96, 0xb0, 0x92, 0x97, 0x97, 0x07, 0x91, 0x9b, 0x37, 0x6f, 0x92, 0x76, 0x7c, 0x77, 0x12, 0x47, 0x10, 0x1b, 0xe1, 0x10, 0xb1, 0x91, 0x10, 0xef, 0x78, 0xa5, 0xc4, 0xba, 0x41, 0xbc, 0x9e, 0x3f, 0x7f, 0xfe, 0xf2, 0xe5, 0xcb, 0x3d, 0x3d, 0x3d, 0x18, 0xee, 0xc0, 0x81, 0x03, 0x61, 0x93, 0x8d, 0x51, 0x85, 0x38, 0x7a, 0xe1, 0x16, 0x91, 0x27, 0x94, 0xd6, 0xeb, 0xf5, 0xa4, 0xfd, 0xd2, 0xa5, 0x4b, 0x65, 0x65, 0x65, 0x22, 0x0f, 0xdc, 0x42, 0xae, 0x8a, 0xc5, 0x45, 0x88, 0x4f, 0xc8, 0x48, 0x32, 0x84, 0x01, 0x34, 0x08, 0x04, 0x02, 0x2e, 0xf4, 0x45, 0x91, 0x1f, 0x88, 0x30, 0x40, 0xa4, 0xda, 0xd8, 0xd8, 0x88, 0x6e, 0xf8, 0x01, 0xef, 0x7b, 0xb0, 0x28, 0x79, 0x69, 0x0c, 0xe5, 0x84, 0x2b, 0xe1, 0x28, 0x32, 0x04, 0xac, 0x12, 0xba, 0x9f, 0xee, 0xd9, 0xb3, 0x07, 0xed, 0x50, 0xe8, 0xe1, 0xc3, 0x87, 0x10, 0x79, 0xfa, 0xf4, 0x29, 0xd2, 0x05, 0x5a, 0xc4, 0x35, 0x30, 0x7f, 0xfe, 0x7c, 0x54, 0xb1, 0x41, 0x89, 0xab, 0xb6, 0xa5, 0xa5, 0x05, 0x52, 0x27, 0x4e, 0x9c, 0x00, 0xbf, 0xdd, 0x6e, 0x27, 0xfe, 0xc7, 0xbe, 0xf7, 0xe6, 0xcd, 0x1b, 0xb4, 0x60, 0x91, 0x10, 0xd8, 0x24, 0xaa, 0x43, 0xd5, 0x00, 0xfd, 0x8e, 0x10, 0x22, 0x1c, 0x8b, 0x17, 0x2f, 0x26, 0xfa, 0x61, 0x25, 0x85, 0xc9, 0x54, 0x55, 0x55, 0x91, 0xae, 0xd0, 0x27, 0x02, 0x00, 0x2b, 0x1e, 0x9c, 0x98, 0x35, 0x31, 0x31, 0x91, 0x74, 0x91, 0x70, 0x22, 0x34, 0xec, 0x57, 0x5b, 0x5b, 0x0b, 0x86, 0xfb, 0xf7, 0xef, 0x93, 0x7d, 0x09, 0x4b, 0x73, 0xe5, 0xca, 0x95, 0x62, 0x2a, 0xdc, 0xb8, 0x71, 0x23, 0x99, 0xe8, 0xc2, 0x85, 0x0b, 0x44, 0x04, 0x7b, 0x1d, 0xb6, 0x5a, 0x42, 0xc3, 0x22, 0x8f, 0x1e, 0x3d, 0x0a, 0xd3, 0x04, 0xd5, 0xf7, 0x02, 0xb8, 0x77, 0xef, 0x5e, 0x6a, 0x6a, 0x2a, 0xd6, 0x1f, 0x2e, 0x4e, 0xc2, 0xc4, 0x90, 0x01, 0xc8, 0xa0, 0xa1, 0x4f, 0x04, 0x00, 0xee, 0x17, 0x08, 0x27, 0x66, 0xc2, 0x75, 0x15, 0xe9, 0x45, 0x48, 0x60, 0xbd, 0xc2, 0x93, 0xd0, 0x86, 0x00, 0x00, 0x0f, 0xbe, 0x0e, 0x62, 0x77, 0x27, 0x0c, 0xe8, 0x02, 0xf3, 0xde, 0xbd, 0x7b, 0x87, 0x87, 0x87, 0xc5, 0x89, 0xae, 0x5f, 0xbf, 0x4e, 0x96, 0x3e, 0xe1, 0xa9, 0xac, 0xac, 0x7c, 0xf0, 0xe0, 0x81, 0xd8, 0x1b, 0x4a, 0x8c, 0xf5, 0x52, 0x8f, 0xcf, 0xc0, 0x30, 0x15, 0x39, 0x08, 0x84, 0xea, 0x3a, 0x41, 0x1a, 0xfb, 0x3d, 0x82, 0x04, 0x47, 0x09, 0x62, 0xef, 0xd1, 0x52, 0x48, 0x67, 0x58, 0x63, 0x08, 0x74, 0xd1, 0x63, 0x61, 0x3c, 0xd8, 0xb8, 0x31, 0xc8, 0x9c, 0x39, 0x73, 0x48, 0x50, 0x85, 0xf5, 0x92, 0xea, 0x58, 0x00, 0xde, 0x29, 0xf0, 0x53, 0x6b, 0x0c, 0x3f, 0x4a, 0xfc, 0xd4, 0xf4, 0x1b, 0x57, 0x9f, 0x18, 0x80, 0x71, 0x4d, 0x34, 0xcd, 0x0c, 0x31, 0x0f, 0x4c, 0xb3, 0x81, 0xc7, 0x1d, 0x3e, 0xe6, 0x81, 0x71, 0x4d, 0x34, 0xcd, 0x0c, 0x31, 0x0f, 0x4c, 0xb3, 0x81, 0xc7, 0x1d, 0x3e, 0xe6, 0x81, 0x71, 0x4d, 0x34, 0xcd, 0x0c, 0xff, 0x07, 0x71, 0xef, 0x64, 0x50, 0x13, 0xcd, 0x1c, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXXMLIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x30, 0x39, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x9d, 0x3c, 0x78, 0xe3, 0x00, 0x00, 0x05, 0x7c, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x59, 0x4c, 0x1b, 0x57, 0x14, 0xc5, 0x0b, 0xbb, 0xc1, 0x26, 0xa2, 0x31, 0x56, 0x58, 0x4c, 0xb1, 0x1b, 0x37, 0x15, 0x8e, 0x42, 0x05, 0x94, 0x25, 0x88, 0x25, 0x6c, 0x05, 0x52, 0x14, 0x0a, 0xfd, 0xa8, 0x08, 0x1f, 0x91, 0xe0, 0x83, 0x02, 0xa2, 0x2a, 0x6a, 0xfb, 0xd3, 0x82, 0x00, 0x15, 0x3e, 0x8a, 0x8a, 0x10, 0x42, 0x42, 0x4a, 0xbf, 0x10, 0x12, 0x84, 0x06, 0xd5, 0x12, 0x15, 0x5b, 0x49, 0x0a, 0x51, 0x31, 0x34, 0xdd, 0x00, 0xa5, 0xb5, 0x4d, 0x42, 0x83, 0xa1, 0x24, 0x0a, 0xc4, 0x94, 0x60, 0x03, 0xb6, 0xb1, 0x7b, 0x9d, 0x57, 0xdc, 0x67, 0x9b, 0x24, 0xe3, 0x19, 0x3b, 0x08, 0x69, 0x46, 0x23, 0xfb, 0xbe, 0xf3, 0xee, 0xbd, 0xef, 0xdc, 0x7b, 0xdf, 0x32, 0x33, 0x0c, 0xb3, 0xd9, 0xec, 0x71, 0x9c, 0x2f, 0xe6, 0x71, 0x26, 0x6f, 0xe1, 0x4e, 0x07, 0x70, 0xd4, 0x15, 0xa4, 0x2b, 0x40, 0x57, 0x80, 0x62, 0x06, 0xe8, 0x29, 0x44, 0x31, 0x81, 0x94, 0xcd, 0xe9, 0x0a, 0x50, 0x4e, 0x21, 0x45, 0x07, 0x74, 0x05, 0x28, 0x26, 0x90, 0xb2, 0x39, 0x5d, 0x81, 0xc3, 0x52, 0xa8, 0xff, 0x67, 0xdb, 0x11, 0x36, 0xea, 0x76, 0x3d, 0x4c, 0xae, 0x7f, 0xf2, 0x75, 0x71, 0x05, 0x36, 0x15, 0xcb, 0xb7, 0x9b, 0xbe, 0x1e, 0x2e, 0xfe, 0xd4, 0x31, 0x80, 0xf5, 0xdf, 0x94, 0xdf, 0x15, 0x7d, 0xac, 0xec, 0x19, 0x36, 0x3c, 0xd1, 0x39, 0xf6, 0x92, 0x46, 0xd8, 0xa4, 0x2d, 0x6d, 0x0c, 0x4d, 0xe6, 0xd5, 0x1f, 0x7e, 0x51, 0xf5, 0x8d, 0xad, 0xff, 0xae, 0x02, 0x9c, 0xe5, 0xed, 0x69, 0xd3, 0x7b, 0xd0, 0xd0, 0x3d, 0xd8, 0x98, 0xeb, 0xbc, 0x76, 0xe7, 0xaa, 0x2c, 0x3c, 0x37, 0x41, 0x5c, 0x72, 0x21, 0x40, 0x28, 0x38, 0xe8, 0x21, 0xff, 0x4f, 0x35, 0x00, 0xc3, 0x96, 0x76, 0x49, 0x36, 0xb5, 0xf8, 0xcd, 0x04, 0x90, 0x23, 0xc8, 0xc2, 0xb8, 0xbb, 0x77, 0x6f, 0xf0, 0x26, 0xdc, 0xfc, 0xb8, 0x33, 0xa2, 0x92, 0x4c, 0x41, 0x92, 0x94, 0xa0, 0xe1, 0xa1, 0x6a, 0xe4, 0x03, 0xd8, 0x5a, 0xfa, 0x7b, 0xb1, 0x7f, 0x7c, 0x79, 0x58, 0x0e, 0x84, 0x70, 0xd7, 0xbe, 0xc1, 0x3c, 0x61, 0x7e, 0x32, 0x8e, 0x20, 0x99, 0x2b, 0x0a, 0x8b, 0xc8, 0x49, 0x58, 0xb9, 0xf9, 0xf3, 0xfe, 0xae, 0x1e, 0x21, 0x0f, 0x67, 0xef, 0xc0, 0xcd, 0x09, 0xe3, 0x8b, 0xde, 0x4d, 0x07, 0x13, 0xb6, 0x9f, 0x8f, 0xa3, 0xd5, 0x0b, 0x11, 0x86, 0xd3, 0xaf, 0x94, 0x66, 0xf3, 0xda, 0x8f, 0xf3, 0x8b, 0xfd, 0x63, 0x30, 0x36, 0xee, 0x9d, 0xc9, 0x66, 0x0b, 0x92, 0xa5, 0xc2, 0xfc, 0xf3, 0x82, 0x84, 0x68, 0x0f, 0x26, 0x03, 0xef, 0xc2, 0x65, 0xc3, 0xf6, 0x8e, 0x7a, 0x54, 0x0e, 0x45, 0xd3, 0x28, 0xee, 0xe3, 0xb8, 0xa7, 0xbf, 0xaf, 0x30, 0x2f, 0x49, 0x54, 0x9c, 0xe1, 0x1f, 0x7a, 0x12, 0xc7, 0x5f, 0x28, 0x3b, 0x1d, 0xc0, 0xad, 0x0f, 0xbf, 0x7a, 0x30, 0x3d, 0x8f, 0xfb, 0xe5, 0x46, 0x85, 0x42, 0xfe, 0x20, 0xbb, 0x5e, 0x3c, 0x0e, 0x8e, 0x3f, 0x5f, 0xde, 0x54, 0x2e, 0x43, 0x18, 0x10, 0x8c, 0x1e, 0x5b, 0xd3, 0x0c, 0x06, 0xe3, 0xcd, 0x4f, 0xca, 0x84, 0x17, 0xcf, 0x3f, 0xdf, 0x16, 0xef, 0x75, 0x7a, 0x0a, 0xe9, 0x37, 0xff, 0xdf, 0x22, 0x4f, 0xa5, 0xc6, 0x48, 0x2e, 0xe7, 0x05, 0xbd, 0x2e, 0xc4, 0x3d, 0x12, 0x94, 0x79, 0xaf, 0x85, 0x9f, 0xfb, 0xe8, 0xfd, 0xb3, 0x55, 0x25, 0x30, 0xa9, 0xfe, 0xb8, 0x2a, 0x7b, 0xa2, 0x7e, 0x08, 0x86, 0x30, 0x1d, 0x76, 0x35, 0x5b, 0x04, 0x3d, 0x20, 0x35, 0xa7, 0x03, 0xc0, 0xbd, 0xaf, 0xdd, 0x9a, 0x63, 0x30, 0x98, 0x91, 0x85, 0x29, 0xfc, 0xb8, 0x37, 0x70, 0x9c, 0xa0, 0x6c, 0xda, 0x33, 0xa8, 0xbf, 0xff, 0x69, 0x49, 0x36, 0x89, 0xd8, 0x13, 0xb4, 0xb2, 0x53, 0x73, 0x3a, 0x80, 0xc8, 0x77, 0x52, 0x20, 0x49, 0x68, 0xcf, 0x31, 0x19, 0x8d, 0x2b, 0x37, 0x6e, 0xc3, 0xed, 0x2f, 0x08, 0x06, 0x1c, 0x26, 0xb1, 0x4f, 0x30, 0xcf, 0x6e, 0x80, 0x43, 0x9b, 0x68, 0xfe, 0x2c, 0x8f, 0xc8, 0x0d, 0xdb, 0x36, 0x67, 0xc2, 0x2b, 0xe7, 0x4e, 0x3b, 0x9b, 0x0b, 0xa7, 0xd7, 0x80, 0x85, 0x90, 0xed, 0xae, 0x6f, 0xa5, 0xc8, 0x64, 0xb3, 0x04, 0x89, 0x52, 0x88, 0x24, 0xe4, 0xad, 0xc3, 0xd7, 0x31, 0x1c, 0xc6, 0xea, 0xd1, 0x99, 0x7b, 0xdf, 0x4e, 0x6a, 0xfe, 0xfc, 0xcb, 0x6a, 0x05, 0x02, 0xd3, 0x93, 0x1d, 0x9e, 0x15, 0x2f, 0x2a, 0xb9, 0x00, 0xf3, 0x0a, 0xc7, 0x89, 0xc8, 0xa4, 0x02, 0x38, 0x70, 0xbc, 0xa9, 0xb8, 0xaf, 0xea, 0x1b, 0x57, 0x8f, 0xcf, 0x9a, 0x0c, 0xc6, 0x03, 0xcc, 0xf2, 0xcf, 0x09, 0x3d, 0x99, 0x73, 0xed, 0x0b, 0x1c, 0x01, 0xf9, 0xf1, 0xc2, 0xdd, 0xc9, 0xaa, 0x2f, 0xed, 0xf6, 0x5c, 0x9f, 0x13, 0xdc, 0xa8, 0x4b, 0xa9, 0xaf, 0x5e, 0x4a, 0xf5, 0x0e, 0x0a, 0xb4, 0xd3, 0x27, 0xd8, 0x74, 0x7a, 0x0a, 0xe1, 0x7e, 0x79, 0xa7, 0x23, 0x62, 0x3f, 0xbb, 0x22, 0xfd, 0xa0, 0xf8, 0x2e, 0x1c, 0x4c, 0xd7, 0x6f, 0xec, 0x3e, 0xfe, 0x6f, 0xfd, 0xed, 0x3c, 0xd2, 0xe0, 0x6a, 0x48, 0xd6, 0x6f, 0x69, 0x71, 0xf6, 0x41, 0x92, 0x08, 0x71, 0x49, 0x66, 0x58, 0x66, 0x1c, 0x83, 0xcd, 0x72, 0x54, 0x26, 0x8e, 0x50, 0x0a, 0x00, 0x0d, 0xe3, 0x7d, 0x22, 0xf0, 0xcc, 0x95, 0x8b, 0x92, 0xcb, 0x6f, 0xab, 0xc7, 0x66, 0xe1, 0x68, 0xb3, 0xdb, 0xe0, 0xed, 0xa8, 0x30, 0x58, 0xcc, 0x53, 0x29, 0x31, 0xa2, 0xf7, 0x2e, 0x04, 0x9f, 0x15, 0xdb, 0x75, 0x91, 0x6c, 0xc2, 0xce, 0xe5, 0xda, 0xeb, 0xd1, 0xaf, 0x8a, 0x99, 0xcf, 0xbb, 0x1d, 0x7d, 0x02, 0x3e, 0xd7, 0xd1, 0xaf, 0x5d, 0x5b, 0x77, 0xec, 0xa2, 0x82, 0x50, 0x5a, 0x03, 0x24, 0x73, 0xe6, 0x52, 0x33, 0x17, 0x3f, 0x4e, 0xbb, 0x94, 0x1b, 0x21, 0x67, 0x74, 0x00, 0x84, 0xd2, 0xe4, 0x46, 0x25, 0xba, 0x02, 0x6e, 0x4c, 0x2e, 0x21, 0xd7, 0x74, 0x05, 0x08, 0xa5, 0xc9, 0x8d, 0x4a, 0xc7, 0xbe, 0x02, 0x2e, 0x78, 0x94, 0x20, 0x9d, 0xde, 0xfd, 0xfd, 0x7d, 0x38, 0x83, 0xc1, 0x9c, 0xcd, 0x26, 0x4f, 0xe3, 0xc8, 0x2a, 0x50, 0x5d, 0x5d, 0xed, 0xe5, 0xe5, 0xe5, 0xf9, 0xf4, 0x6a, 0x6f, 0x6f, 0x27, 0x9d, 0x85, 0x23, 0x0b, 0x20, 0x32, 0x32, 0x32, 0x2a, 0x2a, 0xca, 0xd7, 0xd7, 0x17, 0xa8, 0x6b, 0xb5, 0xda, 0xe3, 0x17, 0x40, 0x6d, 0x6d, 0xad, 0x52, 0xa9, 0xcc, 0xc8, 0xc8, 0x20, 0x4d, 0x1d, 0x19, 0x92, 0xa9, 0xc0, 0xf4, 0xf4, 0x74, 0x7a, 0x7a, 0x7a, 0x7c, 0x7c, 0x7c, 0x72, 0x72, 0xf2, 0xd4, 0xd4, 0xd4, 0xc8, 0xc8, 0x48, 0x62, 0x62, 0x22, 0x34, 0x8b, 0x8a, 0x8a, 0x76, 0x76, 0x76, 0x64, 0x32, 0x59, 0x52, 0x52, 0x52, 0x5a, 0x5a, 0x5a, 0x67, 0x67, 0x27, 0x9f, 0xcf, 0x17, 0x8b, 0xc5, 0xbd, 0xbd, 0xbd, 0x31, 0x31, 0x31, 0x21, 0x21, 0x21, 0xf5, 0xf5, 0xf5, 0x7b, 0x7b, 0x36, 0x1f, 0x91, 0x28, 0xb2, 0xb7, 0x98, 0x93, 0x78, 0x94, 0x6d, 0x69, 0x69, 0xb1, 0x0e, 0xdc, 0xd4, 0xd4, 0x54, 0x57, 0x57, 0x67, 0x6d, 0xaa, 0x54, 0xaa, 0xaa, 0xaa, 0x2a, 0x6b, 0xd3, 0x51, 0x80, 0x60, 0xf0, 0x11, 0xf3, 0xf3, 0xf3, 0x41, 0xa7, 0xb9, 0xb9, 0x19, 0x07, 0x9d, 0x92, 0xc9, 0x54, 0xa0, 0xa6, 0xa6, 0x66, 0x70, 0x70, 0x90, 0xc7, 0xb3, 0xbc, 0xbf, 0x4b, 0xa5, 0x52, 0x89, 0x44, 0x02, 0x42, 0x6e, 0x6e, 0xee, 0xcc, 0xcc, 0x8c, 0x48, 0x24, 0x6a, 0x6c, 0x6c, 0x84, 0x6a, 0x00, 0x52, 0x5a, 0x5a, 0x3a, 0x3e, 0x3e, 0x0e, 0x02, 0x5c, 0x43, 0x43, 0x43, 0xe5, 0xe5, 0xe5, 0x20, 0xcc, 0xcf, 0xdb, 0x7c, 0x53, 0x7a, 0xda, 0x49, 0xe9, 0x87, 0xcc, 0xfe, 0xe5, 0xe3, 0xe3, 0x53, 0x58, 0x58, 0xc8, 0xe5, 0x72, 0xb3, 0xb3, 0xb3, 0xcb, 0xca, 0xca, 0x74, 0x3a, 0x5d, 0x74, 0x74, 0x74, 0x5f, 0x5f, 0x5f, 0x40, 0x40, 0x00, 0x70, 0x01, 0x1c, 0x66, 0x0b, 0x08, 0x79, 0x79, 0x79, 0xb1, 0xb1, 0xb1, 0x20, 0xc0, 0x4e, 0x93, 0x95, 0x95, 0xb5, 0xb2, 0xb2, 0x02, 0xb2, 0x46, 0x73, 0xc8, 0xdb, 0x26, 0xe0, 0xa4, 0x2f, 0x32, 0x15, 0x40, 0x83, 0xc1, 0x2c, 0x6f, 0x68, 0x68, 0x00, 0x42, 0x30, 0xad, 0x3b, 0x3a, 0x3a, 0x10, 0x7b, 0x9c, 0x87, 0x9f, 0x9f, 0x1f, 0x7c, 0x69, 0x03, 0x04, 0x02, 0x80, 0x9d, 0x1e, 0xc9, 0x26, 0x93, 0x09, 0xd7, 0xa1, 0x2e, 0x93, 0x0f, 0x00, 0x32, 0xda, 0xd5, 0xd5, 0x05, 0xd5, 0x00, 0x12, 0x15, 0x15, 0x15, 0x1b, 0x1b, 0x44, 0xbf, 0x4e, 0x53, 0x27, 0x8d, 0x7b, 0x20, 0x19, 0x00, 0xd0, 0xcd, 0xc9, 0xc9, 0x59, 0x5d, 0x5d, 0x1d, 0x18, 0x18, 0xa8, 0xac, 0xac, 0x54, 0x28, 0x14, 0x05, 0x05, 0x05, 0xd6, 0xed, 0x1c, 0x56, 0x21, 0x8c, 0x81, 0x7e, 0xf1, 0xc1, 0x70, 0x19, 0x4a, 0x61, 0x34, 0x1a, 0x91, 0x0e, 0x2e, 0xe3, 0x3a, 0x84, 0x64, 0xa7, 0x96, 0x3c, 0x52, 0x86, 0xa5, 0x89, 0x12, 0x0f, 0xc7, 0x90, 0x5c, 0x2e, 0x6f, 0x6d, 0x6d, 0x45, 0x23, 0x41, 0x73, 0x62, 0x62, 0xa2, 0xad, 0xad, 0x0d, 0xcd, 0x96, 0xc0, 0xc0, 0xc0, 0x85, 0x85, 0x05, 0xd4, 0x05, 0x4b, 0xbc, 0xbb, 0xbb, 0x1b, 0x64, 0x16, 0x8b, 0xd5, 0xd3, 0xd3, 0x03, 0x26, 0x8e, 0x8f, 0x0f, 0x1c, 0x0e, 0x67, 0x74, 0x74, 0xd4, 0x59, 0x3e, 0x64, 0x2a, 0x00, 0xfc, 0xe0, 0x29, 0x00, 0xd8, 0x80, 0x00, 0x59, 0xd4, 0xeb, 0xf5, 0x88, 0xb1, 0x15, 0x64, 0x32, 0x2d, 0x6e, 0x81, 0x22, 0x5c, 0xe8, 0xac, 0x05, 0x04, 0x2d, 0x12, 0x08, 0x00, 0x28, 0x82, 0x3e, 0x32, 0x41, 0xe1, 0xa1, 0x5f, 0x47, 0x04, 0xef, 0x7d, 0x96, 0x4c, 0x7f, 0x95, 0x78, 0x56, 0x66, 0x5e, 0x16, 0x4e, 0x66, 0x0a, 0xbd, 0x2c, 0x6e, 0x84, 0xc6, 0xa1, 0x03, 0x20, 0x94, 0x26, 0x37, 0x2a, 0xd1, 0x15, 0x70, 0x63, 0x72, 0x09, 0xb9, 0xa6, 0x2b, 0x40, 0x28, 0x4d, 0x6e, 0x54, 0xa2, 0x2b, 0xe0, 0xc6, 0xe4, 0x12, 0x72, 0x4d, 0x57, 0x80, 0x50, 0x9a, 0xdc, 0xa8, 0xf4, 0x2f, 0x8a, 0xf9, 0x6c, 0x7c, 0x9d, 0x47, 0x95, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-static const u_int8_t FLEXBinaryIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x31, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xce, 0xc3, 0x0a, 0xd6, 0x00, 0x00, 0x05, 0xc2, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x6f, 0x48, 0x64, 0x55, 0x14, 0x3f, 0x33, 0xe3, 0x8c, 0x63, 0xce, 0x44, 0x6e, 0x5b, 0xae, 0xd9, 0x22, 0xa8, 0x59, 0xae, 0x08, 0x91, 0x9a, 0x1b, 0xea, 0x87, 0x30, 0xd1, 0x45, 0x03, 0x29, 0x58, 0x61, 0x2b, 0xe9, 0x93, 0x89, 0x84, 0x44, 0x11, 0x51, 0x7d, 0x0b, 0x4a, 0x21, 0xb2, 0xed, 0x8b, 0xfa, 0x29, 0xa8, 0x2c, 0xf1, 0x83, 0x4a, 0x1b, 0xad, 0x6c, 0x61, 0x05, 0x9b, 0xc9, 0x36, 0xba, 0x9b, 0xe8, 0x1a, 0xa2, 0x28, 0xfe, 0xd7, 0x36, 0xf3, 0xcf, 0x6c, 0x3a, 0xce, 0x8c, 0x33, 0x9d, 0x3b, 0xf7, 0xcd, 0x9d, 0xf7, 0xe6, 0xcd, 0xcc, 0xfb, 0x3b, 0xc4, 0xc2, 0xbb, 0x1f, 0xc6, 0x73, 0xcf, 0xfd, 0x9d, 0xdf, 0xb9, 0xe7, 0x9c, 0xfb, 0xe7, 0x71, 0x35, 0x05, 0x83, 0x41, 0xb8, 0x97, 0x9b, 0xf9, 0x5e, 0x9e, 0x3c, 0x99, 0xbb, 0x11, 0xc0, 0xff, 0x5d, 0x41, 0xa3, 0x02, 0x46, 0x05, 0x34, 0x66, 0xc0, 0x58, 0x42, 0x1a, 0x13, 0xa8, 0xd9, 0x5c, 0x46, 0x05, 0x0e, 0xff, 0x82, 0xe0, 0x89, 0x66, 0x47, 0x3c, 0x02, 0x5d, 0x09, 0x53, 0x78, 0xc4, 0x42, 0x71, 0x67, 0x16, 0x7e, 0x7a, 0x13, 0xb6, 0x26, 0xe0, 0x68, 0x07, 0x52, 0xec, 0x70, 0xfa, 0x1c, 0x94, 0xbc, 0x01, 0x45, 0xaf, 0x08, 0x41, 0xbc, 0x1e, 0x06, 0x39, 0xf0, 0x1c, 0x78, 0xdd, 0x60, 0x3f, 0x05, 0x17, 0x7f, 0xe0, 0x0d, 0x84, 0x45, 0xa5, 0x84, 0xb3, 0x7d, 0x30, 0x71, 0x99, 0x18, 0x9f, 0x7f, 0x17, 0x0a, 0x5e, 0x0c, 0xb3, 0x44, 0xff, 0x8d, 0x13, 0x00, 0x1a, 0x5f, 0x7b, 0x0d, 0x7c, 0x87, 0x1c, 0xdc, 0xef, 0x81, 0xad, 0x9b, 0xf0, 0x7d, 0x33, 0x2c, 0xff, 0x08, 0x17, 0x3e, 0x07, 0x53, 0x2c, 0xab, 0xc5, 0xab, 0xb0, 0xf2, 0x0b, 0xc1, 0xa7, 0x67, 0x72, 0x56, 0xfc, 0x3f, 0x8a, 0x09, 0x83, 0x30, 0xf9, 0x19, 0x6c, 0x4d, 0x12, 0x8e, 0xc3, 0x3b, 0x7c, 0xa6, 0x28, 0x39, 0xd6, 0x12, 0x3a, 0xdc, 0x86, 0x6b, 0x2d, 0xdc, 0xec, 0x6d, 0xe9, 0x90, 0xf3, 0x2c, 0x38, 0x1f, 0xe1, 0xcc, 0x66, 0xbe, 0x82, 0x99, 0x2f, 0xa2, 0x28, 0x48, 0x77, 0x7d, 0x0c, 0xae, 0xbe, 0x1a, 0x43, 0x4f, 0x55, 0x4a, 0x09, 0x4f, 0x3c, 0x84, 0x6d, 0x73, 0x22, 0x2e, 0x21, 0x6f, 0x20, 0x56, 0x2e, 0x7f, 0xff, 0x18, 0x7c, 0x47, 0x04, 0xe3, 0xcc, 0x86, 0x97, 0xc7, 0xc1, 0x79, 0x96, 0xec, 0x81, 0x2b, 0x4d, 0x30, 0x37, 0x48, 0x94, 0xe3, 0x1f, 0x42, 0x51, 0x33, 0x98, 0xad, 0x44, 0x9e, 0xfd, 0x1a, 0xb6, 0x27, 0x61, 0xfd, 0x37, 0xd8, 0xb8, 0x41, 0xba, 0xf1, 0x9a, 0x4c, 0xc2, 0xbb, 0xeb, 0x70, 0xab, 0x1b, 0xdc, 0xab, 0xb0, 0xf0, 0x1d, 0x78, 0xf6, 0xe2, 0x91, 0x45, 0xe9, 0x45, 0x15, 0x08, 0x78, 0xe1, 0x56, 0x0f, 0x07, 0x2a, 0x7f, 0x87, 0xcc, 0x1e, 0x9b, 0xc9, 0x02, 0xd5, 0x97, 0xc1, 0x6c, 0x21, 0xf2, 0xde, 0x12, 0x2c, 0x5c, 0x21, 0x02, 0xb6, 0xdb, 0x5f, 0x82, 0xeb, 0x53, 0x89, 0xd9, 0xcb, 0x27, 0x3c, 0x58, 0x81, 0xf1, 0x8f, 0x00, 0x8b, 0x2c, 0x7b, 0xf6, 0x38, 0x05, 0x51, 0x00, 0xee, 0xb5, 0xc8, 0xd2, 0xcf, 0xbd, 0x10, 0x9a, 0x66, 0xe8, 0xc7, 0xf1, 0x28, 0x3c, 0x54, 0xcc, 0x75, 0xff, 0x99, 0x8b, 0xe8, 0x25, 0x25, 0xdd, 0x09, 0x85, 0x1e, 0x45, 0x4b, 0x08, 0xd3, 0x40, 0x1b, 0xe6, 0xfb, 0x81, 0x3c, 0x01, 0xf8, 0xd4, 0xe3, 0xb0, 0xfd, 0x07, 0xd1, 0x30, 0xcc, 0xf3, 0xdf, 0x80, 0xff, 0x98, 0xc3, 0xb8, 0x3e, 0x01, 0x57, 0x97, 0x00, 0x4f, 0x3b, 0x0c, 0x2c, 0x49, 0x78, 0xa6, 0x04, 0xda, 0xd6, 0x23, 0x0c, 0xdd, 0xd9, 0x11, 0x39, 0xbe, 0x24, 0x0e, 0x60, 0x99, 0x03, 0xdb, 0xee, 0xc7, 0xa5, 0x23, 0x30, 0xc4, 0xf3, 0x91, 0xb6, 0x83, 0x30, 0xc6, 0xfe, 0x60, 0x04, 0x60, 0x73, 0x46, 0x64, 0xbe, 0xc4, 0xc0, 0x92, 0x84, 0x66, 0x1b, 0x38, 0xc2, 0xa7, 0x05, 0x9f, 0x21, 0xa1, 0x2c, 0x5a, 0x42, 0x77, 0x37, 0x38, 0xbc, 0x59, 0x14, 0x1b, 0xd3, 0x30, 0x4c, 0x42, 0x6a, 0x6e, 0x90, 0x81, 0x99, 0x39, 0xb3, 0x62, 0x1a, 0x86, 0x61, 0x43, 0xb2, 0x05, 0x51, 0x00, 0x16, 0x3b, 0x67, 0x7b, 0xe2, 0x8d, 0x26, 0x61, 0x1a, 0x86, 0x89, 0x46, 0xc4, 0xea, 0x33, 0x30, 0x33, 0x67, 0x28, 0xa6, 0x61, 0x18, 0x36, 0x24, 0x5b, 0x10, 0x05, 0x90, 0x8a, 0x2b, 0x27, 0xd4, 0x7c, 0xff, 0x42, 0xd0, 0x2f, 0xe0, 0x39, 0x0e, 0x1f, 0x6d, 0x0c, 0x23, 0x18, 0x8e, 0xd3, 0x61, 0x60, 0xbd, 0x08, 0x85, 0x7e, 0x44, 0x01, 0x64, 0x3c, 0xc6, 0x01, 0x02, 0x7e, 0x72, 0x62, 0xf2, 0xdb, 0xee, 0x3c, 0xd7, 0x63, 0x18, 0xfe, 0x68, 0x3c, 0x99, 0x81, 0xf5, 0x22, 0x14, 0x3a, 0x12, 0x05, 0xf0, 0xf0, 0x93, 0xc0, 0x96, 0xe6, 0xca, 0xcf, 0x11, 0x30, 0xde, 0xa6, 0x7f, 0xdf, 0xe6, 0xba, 0x67, 0x4a, 0x23, 0x7a, 0x49, 0x49, 0x77, 0x42, 0xa1, 0x47, 0x51, 0x00, 0x78, 0x56, 0x9c, 0xbb, 0xc4, 0x61, 0x6e, 0x74, 0x82, 0x3f, 0x74, 0x25, 0x63, 0x1f, 0x2f, 0x60, 0x7a, 0x62, 0xde, 0x77, 0x1a, 0x9e, 0xb8, 0x28, 0x24, 0x49, 0xd8, 0xd3, 0x9d, 0x50, 0xe8, 0x4d, 0x74, 0xd4, 0xe0, 0xf0, 0x33, 0xef, 0x93, 0x6f, 0x84, 0xc0, 0x09, 0x59, 0x42, 0x3d, 0x67, 0xc9, 0x74, 0xd7, 0xae, 0xc3, 0x9d, 0x19, 0xce, 0xb0, 0xec, 0x2d, 0xb0, 0x3a, 0x84, 0x24, 0x52, 0x3d, 0xdd, 0x09, 0x79, 0x0e, 0x45, 0x15, 0xc0, 0xb1, 0x8c, 0x02, 0x38, 0xff, 0x1e, 0x87, 0xc1, 0x6f, 0x69, 0xfc, 0xb2, 0x60, 0xb3, 0xcf, 0x7a, 0x1a, 0x9e, 0x7a, 0x9d, 0x67, 0x2e, 0x4f, 0xd4, 0x9d, 0x90, 0xe7, 0x36, 0x56, 0x00, 0x38, 0x5c, 0xf9, 0x01, 0xbc, 0xf0, 0x6d, 0xe4, 0x23, 0x14, 0x35, 0xd6, 0x34, 0x28, 0x7f, 0x1b, 0x5e, 0xfa, 0x55, 0x71, 0xfa, 0xa9, 0x33, 0xdd, 0x09, 0xc3, 0x31, 0x98, 0x24, 0x9e, 0x16, 0xf1, 0x8a, 0xd9, 0xf9, 0x93, 0x7c, 0x96, 0xe2, 0x61, 0x82, 0x9f, 0x74, 0xda, 0x9b, 0xde, 0x84, 0x52, 0x01, 0x68, 0x9f, 0x71, 0x92, 0x19, 0xe2, 0x2c, 0xa1, 0x24, 0x7b, 0xd5, 0x91, 0xde, 0x08, 0x40, 0xc7, 0x64, 0xaa, 0xa2, 0x32, 0x2a, 0xa0, 0x2a, 0x6d, 0x3a, 0x1a, 0x19, 0x15, 0xd0, 0x31, 0x99, 0xaa, 0xa8, 0x8c, 0x0a, 0xa8, 0x4a, 0x9b, 0x8e, 0x46, 0x6a, 0x2a, 0x70, 0x12, 0x6a, 0x92, 0x93, 0xf0, 0xfb, 0xfd, 0x5d, 0x5d, 0x5d, 0x43, 0x43, 0x43, 0x92, 0x48, 0x4d, 0x00, 0xfc, 0x16, 0x52, 0xd4, 0xaa, 0xaa, 0xaa, 0xd0, 0x9f, 0xc9, 0x64, 0x1a, 0x1d, 0x1d, 0x4d, 0x6c, 0x38, 0x37, 0x47, 0x9e, 0x8f, 0x72, 0x73, 0x73, 0x13, 0xc3, 0x34, 0x8e, 0x2a, 0xae, 0x40, 0x41, 0x41, 0x41, 0x4a, 0x4a, 0x0a, 0x7a, 0x3d, 0x38, 0x38, 0x48, 0x9c, 0x39, 0x9b, 0xcd, 0x96, 0x9a, 0x9a, 0x9a, 0x9d, 0x2d, 0xeb, 0x79, 0x27, 0x31, 0x55, 0xa2, 0x51, 0x15, 0x09, 0xc0, 0xa4, 0x22, 0xe3, 0xf0, 0xf0, 0xb0, 0xa4, 0xad, 0xcf, 0xe7, 0x93, 0xc4, 0x68, 0x04, 0x28, 0xae, 0x00, 0x4b, 0xc6, 0xc6, 0xc6, 0x46, 0x7b, 0x7b, 0x7b, 0x75, 0x75, 0x75, 0x6b, 0x6b, 0xeb, 0xd8, 0xd8, 0x18, 0xd3, 0x53, 0xa1, 0xb9, 0xb9, 0xb9, 0xbc, 0xbc, 0xbc, 0xa2, 0xa2, 0xa2, 0xb2, 0xb2, 0x72, 0x6f, 0x2f, 0xfc, 0x9c, 0x01, 0xb0, 0xbb, 0xbb, 0xdb, 0xd8, 0xd8, 0x88, 0x43, 0x6d, 0x6d, 0x6d, 0x83, 0x83, 0x83, 0xc5, 0xc5, 0xc5, 0xe9, 0xe9, 0xe9, 0x75, 0x75, 0x75, 0x9b, 0x9b, 0x9b, 0x51, 0x0c, 0x72, 0xbb, 0x2a, 0x12, 0x40, 0x2b, 0x80, 0xdb, 0x80, 0xf9, 0xb0, 0x58, 0x2c, 0x3d, 0x3d, 0x3d, 0x8c, 0xca, 0xed, 0x76, 0xe3, 0x32, 0x63, 0xa3, 0x4b, 0x4b, 0x4b, 0x6c, 0x68, 0x62, 0x82, 0x7b, 0x34, 0x77, 0x3a, 0x9d, 0x7c, 0x4c, 0x53, 0x53, 0x13, 0xc3, 0x28, 0x12, 0x40, 0x11, 0x9a, 0x82, 0x69, 0x00, 0x38, 0x69, 0x4c, 0x73, 0x77, 0x77, 0x77, 0x5e, 0x1e, 0x79, 0x42, 0x4d, 0x4b, 0x4b, 0x5b, 0x5e, 0x5e, 0x66, 0x6c, 0xd3, 0xd3, 0xd3, 0x03, 0x03, 0x03, 0x34, 0x06, 0x7e, 0x00, 0x08, 0xe8, 0xeb, 0xeb, 0xa3, 0xfa, 0xda, 0xda, 0x5a, 0x8c, 0xa7, 0xa5, 0xa5, 0x05, 0xbb, 0x58, 0x07, 0x66, 0xab, 0x48, 0x50, 0x1f, 0x00, 0xcb, 0xd9, 0xfc, 0x3c, 0xf7, 0x5e, 0xd4, 0xd9, 0xd9, 0xc9, 0xf7, 0x7d, 0x74, 0xc4, 0xbd, 0x68, 0x44, 0x05, 0x30, 0x35, 0x35, 0x45, 0x03, 0x70, 0xb9, 0x5c, 0x88, 0x9f, 0x9c, 0x0c, 0xfd, 0x1b, 0x06, 0x60, 0x7f, 0x7f, 0x9f, 0x6f, 0x2e, 0x53, 0x56, 0xbf, 0x07, 0x1a, 0x1a, 0x1a, 0xe8, 0x3c, 0xf2, 0xf3, 0xf3, 0x0b, 0x0b, 0x0b, 0x51, 0xa6, 0xe7, 0x26, 0x55, 0xca, 0xf9, 0x2d, 0x29, 0x29, 0x41, 0x58, 0x4e, 0x4e, 0x0e, 0x05, 0x7b, 0x3c, 0x1e, 0x39, 0x56, 0x51, 0x18, 0xf5, 0x01, 0x60, 0x5e, 0x29, 0x97, 0xd7, 0xeb, 0x5d, 0x5b, 0x5b, 0x43, 0xd9, 0x6e, 0x0f, 0xbf, 0xab, 0x46, 0x39, 0x89, 0xd3, 0xa5, 0xbb, 0x88, 0xbf, 0x97, 0xe2, 0x00, 0x13, 0xa9, 0xd5, 0x07, 0xd0, 0xdf, 0xdf, 0xbf, 0xba, 0xba, 0x8a, 0x85, 0xee, 0xed, 0xed, 0xc5, 0x5d, 0x8b, 0x4e, 0x4a, 0x4b, 0x23, 0x2f, 0x76, 0x78, 0x59, 0xe3, 0x4d, 0x4c, 0x3d, 0xf3, 0x65, 0xd4, 0xa0, 0x09, 0xd5, 0x53, 0x21, 0x10, 0x08, 0xf0, 0xbb, 0x54, 0x56, 0xf0, 0x2b, 0x73, 0xa9, 0x31, 0x58, 0x4d, 0x4d, 0x0d, 0x63, 0xc7, 0xab, 0x8a, 0x6e, 0x68, 0xd4, 0x14, 0x15, 0x15, 0x61, 0x29, 0x28, 0xac, 0xac, 0xac, 0x8c, 0x61, 0x98, 0x80, 0x2b, 0xed, 0xf8, 0xf8, 0x18, 0x37, 0x7a, 0x46, 0x46, 0x06, 0x55, 0xa2, 0x06, 0x4f, 0xd8, 0xac, 0xac, 0x2c, 0xda, 0xcd, 0xcc, 0xcc, 0xc4, 0xcb, 0x91, 0x39, 0x92, 0x29, 0x28, 0xae, 0x80, 0xd9, 0x4c, 0x4c, 0x1c, 0x0e, 0x47, 0x47, 0x47, 0x07, 0x26, 0x6f, 0x71, 0x71, 0x11, 0xd7, 0x40, 0x7d, 0x7d, 0xfd, 0xc8, 0xc8, 0x88, 0xd5, 0x6a, 0xa5, 0x53, 0xa1, 0x18, 0x2a, 0xb3, 0x5f, 0x54, 0xe2, 0x9c, 0xb0, 0x8b, 0x61, 0x53, 0x25, 0xde, 0xd3, 0xc8, 0xc0, 0xef, 0x52, 0x00, 0x33, 0x91, 0x23, 0x68, 0x7a, 0x56, 0xc1, 0x6d, 0xb7, 0xb0, 0xb0, 0x80, 0xbb, 0x10, 0x0f, 0x75, 0x39, 0xce, 0x92, 0x81, 0xd1, 0x14, 0x40, 0x32, 0x26, 0xa4, 0x94, 0x53, 0xf1, 0x12, 0x52, 0xea, 0x20, 0xd9, 0x78, 0x23, 0x80, 0x64, 0x67, 0x58, 0x8a, 0xdf, 0xa8, 0x80, 0x54, 0x86, 0x92, 0x3d, 0x6e, 0x54, 0x20, 0xd9, 0x19, 0x96, 0xe2, 0x37, 0x2a, 0x20, 0x95, 0xa1, 0x64, 0x8f, 0x1b, 0x15, 0x48, 0x76, 0x86, 0xa5, 0xf8, 0xff, 0x03, 0xf5, 0x1a, 0x5a, 0xe0, 0xcf, 0xeb, 0xd5, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82};
-
-@implementation WXResources
-
-
-#pragma mark - Images
-
-#define FLEXImage(base) (([[UIScreen mainScreen] scale] > 1.5) ? \
-    [self imageWithBytesNoCopy:(void *)base##2x length:sizeof(base##2x) scale:2.0] : \
-    [self imageWithBytesNoCopy:(void *)base length:sizeof(base) scale:1.0])
-
-#define FLEXRetinaOnlyImage(base) ([self imageWithBytesNoCopy:(void *)(base) length:sizeof(base) scale:2.0])
-
-+ (UIImage *)closeIcon
-{
-    return FLEXImage(FLEXCloseIcon);
-}
-
-+ (UIImage *)dragHandle
-{
-    return FLEXImage(FLEXDragHandle);
-}
-
-+ (UIImage *)globeIcon
-{
-    return FLEXImage(FLEXGlobeIcon);
-}
-
-+ (UIImage *)hierarchyIndentPattern
-{
-    return FLEXImage(FLEXHierarchyIndentPattern);
-}
-
-+ (UIImage *)listIcon
-{
-    return FLEXImage(FLEXListIcon);
-}
-
-+ (UIImage *)moveIcon
-{
-    return FLEXImage(FLEXMoveIcon);
-}
-
-+ (UIImage *)selectIcon
-{
-    return FLEXImage(FLEXSelectIcon);
-}
-
-+ (UIImage *)jsonIcon
-{
-    return FLEXRetinaOnlyImage(FLEXJSONIcon2x);
-}
-
-+ (UIImage *)textPlainIcon
-{
-    return FLEXRetinaOnlyImage(FLEXTextPlainIcon2x);
-}
-
-+ (UIImage *)htmlIcon
-{
-    return FLEXRetinaOnlyImage(FLEXHTMLIcon2x);
-}
-
-+ (UIImage *)audioIcon
-{
-    return FLEXRetinaOnlyImage(FLEXAudioIcon2x);
-}
-
-+ (UIImage *)jsIcon
-{
-    return FLEXRetinaOnlyImage(FLEXJSIcon2x);
-}
-
-+ (UIImage *)plistIcon
-{
-    return FLEXRetinaOnlyImage(FLEXPlistIcon2x);
-}
-
-+ (UIImage *)textIcon
-{
-    return FLEXRetinaOnlyImage(FLEXTextIcon2x);
-}
-
-+ (UIImage *)videoIcon
-{
-    return FLEXRetinaOnlyImage(FLEXVideoIcon2x);
-}
-
-+ (UIImage *)xmlIcon
-{
-    return FLEXRetinaOnlyImage(FLEXXMLIcon2x);
-}
-
-+ (UIImage *)binaryIcon
-{
-    return FLEXRetinaOnlyImage(FLEXBinaryIcon2x);
-}
-
-#undef FLEXImage
-#undef FLEXRetinaOnlyImage
-
-
-#pragma mark - Helpers
-
-+ (UIImage *)imageWithBytesNoCopy:(void *)bytes length:(NSUInteger)length scale:(CGFloat)scale
-{
-    NSData *data = [NSData dataWithBytesNoCopy:bytes length:length freeWhenDone:NO];
-    return [UIImage imageWithData:data scale:scale];
-}
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.h b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.h
deleted file mode 100755
index 2c53671..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.h
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-//  WXTracingUtility.h
-//  Flipboard
-//
-//  Created by Ryan Olson on 4/18/14.
-//  Copyright (c) 2014 Flipboard. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-#import <objc/runtime.h>
-
-#define FLEXFloor(x) (floor([[UIScreen mainScreen] scale] * (x)) / [[UIScreen mainScreen] scale])
-#define TracingResetLogDataNoti @"TracingResetLogDataNoti"
-
-#define CREATE_RGBA_COLOR(r, g, b, a)                                                              \
-[UIColor colorWithRed:r / 255.0 green:g / 255.0 blue:b / 255.0 alpha:a]
-#define COLOR_TRACING_ERROR CREATE_RGBA_COLOR(149, 6, 27, 1)
-#define COLOR_TRACING_WARN CREATE_RGBA_COLOR(232, 197, 4, 1)
-#define COLOR_TRACING_EXCEPTION CREATE_RGBA_COLOR(248, 8, 13, 1)
-#define COLOR_TRACING_SEARCBG CREATE_RGBA_COLOR(126, 209, 252, 1)
-#define COLOR_TRACING_JSLOG CREATE_RGBA_COLOR(46, 5, 163, 1)
-
-@interface WXTracingUtility : NSObject
-
-+ (UIColor *)consistentRandomColorForObject:(id)object;
-+ (NSString *)descriptionForView:(UIView *)view includingFrame:(BOOL)includeFrame;
-+ (NSString *)stringForCGRect:(CGRect)rect;
-+ (UIViewController *)viewControllerForView:(UIView *)view;
-+ (UIViewController *)viewControllerForAncestralView:(UIView *)view;
-+ (NSString *)detailDescriptionForView:(UIView *)view;
-+ (UIImage *)circularImageWithColor:(UIColor *)color radius:(CGFloat)radius;
-+ (UIColor *)scrollViewGrayColor;
-+ (UIColor *)hierarchyIndentPatternColor;
-+ (NSString *)applicationImageName;
-+ (NSString *)applicationName;
-+ (NSString *)safeDescriptionForObject:(id)object;
-+ (UIFont *)defaultFontOfSize:(CGFloat)size;
-+ (UIFont *)defaultTableViewCellLabelFont;
-+ (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString;
-+ (UIInterfaceOrientationMask)infoPlistSupportedInterfaceOrientationsMask;
-+ (NSString *)searchBarPlaceholderText;
-+ (BOOL)isImagePathExtension:(NSString *)extension;
-+ (UIImage *)thumbnailedImageWithMaxPixelDimension:(NSInteger)dimension fromImageData:(NSData *)data;
-+ (NSString *)stringFromRequestDuration:(NSTimeInterval)duration;
-+ (NSString *)statusCodeStringFromURLResponse:(NSURLResponse *)response;
-+ (NSDictionary *)dictionaryFromQuery:(NSString *)query;
-+ (NSString *)prettyJSONStringFromData:(NSData *)data;
-+ (BOOL)isValidJSONData:(NSData *)data;
-+ (NSData *)inflatedDataFromCompressedData:(NSData *)compressedData;
-
-+ (NSArray *)allWindows;
-+ (NSString *)tracingTime;
-
-// Swizzling utilities
-
-+ (SEL)swizzledSelectorForSelector:(SEL)selector;
-+ (BOOL)instanceRespondsButDoesNotImplementSelector:(SEL)selector class:(Class)cls;
-+ (void)replaceImplementationOfKnownSelector:(SEL)originalSelector onClass:(Class)class withBlock:(id)block swizzledSelector:(SEL)swizzledSelector;
-+ (void)replaceImplementationOfSelector:(SEL)selector withSelector:(SEL)swizzledSelector forClass:(Class)cls withMethodDescription:(struct objc_method_description)methodDescription implementationBlock:(id)implementationBlock undefinedBlock:(id)undefinedBlock;
-
-@end
diff --git a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.m b/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.m
deleted file mode 100755
index 26459da..0000000
--- a/ios/Pods/WXDevtool/sdk/WXDevTool/Source/WXTracing/WXNetwork/WXTracingUtility.m
+++ /dev/null
@@ -1,440 +0,0 @@
-//
-//  WXTracingUtility.m
-//  Flipboard
-//
-//  Created by Ryan Olson on 4/18/14.
-//  Copyright (c) 2014 Flipboard. All rights reserved.
-//
-
-#import "WXTracingUtility.h"
-#import "WXResources.h"
-#import <ImageIO/ImageIO.h>
-#import <zlib.h>
-#import <objc/runtime.h>
-#import <WeexSDK/WXDebugTool.h>
-
-@implementation WXTracingUtility
-
-+ (UIColor *)consistentRandomColorForObject:(id)object
-{
-    CGFloat hue = (((NSUInteger)object >> 4) % 256) / 255.0;
-    return [UIColor colorWithHue:hue saturation:1.0 brightness:1.0 alpha:1.0];
-}
-
-+ (NSString *)descriptionForView:(UIView *)view includingFrame:(BOOL)includeFrame
-{
-    NSString *description = [[view class] description];
-    
-    NSString *viewControllerDescription = [[[self viewControllerForView:view] class] description];
-    if ([viewControllerDescription length] > 0) {
-        description = [description stringByAppendingFormat:@" (%@)", viewControllerDescription];
-    }
-    
-    if (includeFrame) {
-        description = [description stringByAppendingFormat:@" %@", [self stringForCGRect:view.frame]];
-    }
-    
-    if ([view.accessibilityLabel length] > 0) {
-        description = [description stringByAppendingFormat:@" · %@", view.accessibilityLabel];
-    }
-    
-    return description;
-}
-
-+ (NSString *)stringForCGRect:(CGRect)rect
-{
-    return [NSString stringWithFormat:@"{(%g, %g), (%g, %g)}", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height];
-}
-
-+ (UIViewController *)viewControllerForView:(UIView *)view
-{
-    UIViewController *viewController = nil;
-    SEL viewDelSel = NSSelectorFromString([NSString stringWithFormat:@"%@ewDelegate", @"_vi"]);
-    if ([view respondsToSelector:viewDelSel]) {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-        viewController = [view performSelector:viewDelSel];
-#pragma clang diagnostic pop
-    }
-    return viewController;
-}
-
-+ (UIViewController *)viewControllerForAncestralView:(UIView *)view{
-    UIViewController *viewController = nil;
-    SEL viewDelSel = NSSelectorFromString([NSString stringWithFormat:@"%@ewControllerForAncestor", @"_vi"]);
-    if ([view respondsToSelector:viewDelSel]) {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-        viewController = [view performSelector:viewDelSel];
-#pragma clang diagnostic pop
-    }
-    return viewController;
-}
-
-+ (NSString *)detailDescriptionForView:(UIView *)view
-{
-    return [NSString stringWithFormat:@"frame %@", [self stringForCGRect:view.frame]];
-}
-
-+ (UIImage *)circularImageWithColor:(UIColor *)color radius:(CGFloat)radius
-{
-    CGFloat diameter = radius * 2.0;
-    UIGraphicsBeginImageContextWithOptions(CGSizeMake(diameter, diameter), NO, 0.0);
-    CGContextRef imageContext = UIGraphicsGetCurrentContext();
-    CGContextSetFillColorWithColor(imageContext, [color CGColor]);
-    CGContextFillEllipseInRect(imageContext, CGRectMake(0, 0, diameter, diameter));
-    UIImage *circularImage = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
-    return circularImage;
-}
-
-+ (UIColor *)scrollViewGrayColor
-{
-    return [UIColor colorWithRed:239.0/255.0 green:239.0/255.0 blue:244.0/255.0 alpha:1.0];
-}
-
-+ (UIColor *)hierarchyIndentPatternColor
-{
-    static UIColor *patternColor = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        UIImage *indentationPatternImage = [WXResources hierarchyIndentPattern];
-        patternColor = [UIColor colorWithPatternImage:indentationPatternImage];
-    });
-    return patternColor;
-}
-
-+ (NSString *)applicationImageName
-{
-    return [[NSBundle mainBundle] executablePath];
-}
-
-+ (NSString *)applicationName
-{
-    return [[[WXTracingUtility applicationImageName] componentsSeparatedByString:@"/"] lastObject];
-}
-
-+ (NSString *)safeDescriptionForObject:(id)object
-{
-    // Don't assume that we have an NSObject subclass.
-    // Check to make sure the object responds to the description methods.
-    NSString *description = nil;
-    if ([object respondsToSelector:@selector(debugDescription)]) {
-        description = [object debugDescription];
-    } else if ([object respondsToSelector:@selector(description)]) {
-        description = [object description];
-    }
-    return description;
-}
-
-+ (UIFont *)defaultFontOfSize:(CGFloat)size
-{
-    return [UIFont fontWithName:@"HelveticaNeue" size:size];
-}
-
-+ (UIFont *)defaultTableViewCellLabelFont
-{
-    return [self defaultFontOfSize:12.0];
-}
-
-+ (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString
-{
-    static NSDictionary *escapingDictionary = nil;
-    static NSRegularExpression *regex = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        escapingDictionary = @{ @" " : @"&nbsp;",
-                                @">" : @"&gt;",
-                                @"<" : @"&lt;",
-                                @"&" : @"&amp;",
-                                @"'" : @"&apos;",
-                                @"\"" : @"&quot;",
-                                @"«" : @"&laquo;",
-                                @"»" : @"&raquo;"
-                                };
-        regex = [NSRegularExpression regularExpressionWithPattern:@"(&|>|<|'|\"|«|»)" options:0 error:NULL];
-    });
-    
-    NSMutableString *mutableString = [originalString mutableCopy];
-    
-    NSArray *matches = [regex matchesInString:mutableString options:0 range:NSMakeRange(0, [mutableString length])];
-    for (NSTextCheckingResult *result in [matches reverseObjectEnumerator]) {
-        NSString *foundString = [mutableString substringWithRange:result.range];
-        NSString *replacementString = escapingDictionary[foundString];
-        if (replacementString) {
-            [mutableString replaceCharactersInRange:result.range withString:replacementString];
-        }
-    }
-    
-    return [mutableString copy];
-}
-
-+ (UIInterfaceOrientationMask)infoPlistSupportedInterfaceOrientationsMask
-{
-    NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"];
-    UIInterfaceOrientationMask supportedOrientationsMask = 0;
-    if ([supportedOrientations containsObject:@"UIInterfaceOrientationPortrait"]) {
-        supportedOrientationsMask |= UIInterfaceOrientationMaskPortrait;
-    }
-    if ([supportedOrientations containsObject:@"UIInterfaceOrientationMaskLandscapeRight"]) {
-        supportedOrientationsMask |= UIInterfaceOrientationMaskLandscapeRight;
-    }
-    if ([supportedOrientations containsObject:@"UIInterfaceOrientationMaskPortraitUpsideDown"]) {
-        supportedOrientationsMask |= UIInterfaceOrientationMaskPortraitUpsideDown;
-    }
-    if ([supportedOrientations containsObject:@"UIInterfaceOrientationLandscapeLeft"]) {
-        supportedOrientationsMask |= UIInterfaceOrientationMaskLandscapeLeft;
-    }
-    return supportedOrientationsMask;
-}
-
-+ (NSString *)searchBarPlaceholderText
-{
-    return @"搜索";
-}
-
-+ (BOOL)isImagePathExtension:(NSString *)extension
-{
-    // https://developer.apple.com/library/ios/documentation/uikit/reference/UIImage_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006890-CH3-SW3
-    return [@[@"jpg", @"jpeg", @"png", @"gif", @"tiff", @"tif"] containsObject:extension];
-}
-
-+ (UIImage *)thumbnailedImageWithMaxPixelDimension:(NSInteger)dimension fromImageData:(NSData *)data
-{
-    UIImage *thumbnail = nil;
-    CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)data, 0);
-    if (imageSource) {
-        NSDictionary *options = @{ (__bridge id)kCGImageSourceCreateThumbnailWithTransform : @YES,
-                                   (__bridge id)kCGImageSourceCreateThumbnailFromImageAlways : @YES,
-                                   (__bridge id)kCGImageSourceThumbnailMaxPixelSize : @(dimension) };
-
-        CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options);
-        if (scaledImageRef) {
-            thumbnail = [UIImage imageWithCGImage:scaledImageRef];
-            CFRelease(scaledImageRef);
-        }
-        CFRelease(imageSource);
-    }
-    return thumbnail;
-}
-
-+ (NSString *)stringFromRequestDuration:(NSTimeInterval)duration
-{
-    NSString *string = @"0s";
-    if (duration > 0.0) {
-        if (duration < 1.0) {
-            string = [NSString stringWithFormat:@"%dms", (int)(duration * 1000)];
-        } else if (duration < 10.0) {
-            string = [NSString stringWithFormat:@"%.2fs", duration];
-        } else {
-            string = [NSString stringWithFormat:@"%.1fs", duration];
-        }
-    }
-    return string;
-}
-
-+ (NSString *)statusCodeStringFromURLResponse:(NSURLResponse *)response
-{
-    NSString *httpResponseString = nil;
-    if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
-        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
-        NSString *statusCodeDescription = nil;
-        if (httpResponse.statusCode == 200) {
-            // Prefer OK to the default "no error"
-            statusCodeDescription = @"OK";
-        } else {
-            statusCodeDescription = [NSHTTPURLResponse localizedStringForStatusCode:httpResponse.statusCode];
-        }
-        httpResponseString = [NSString stringWithFormat:@"%ld %@", (long)httpResponse.statusCode, statusCodeDescription];
-    }
-    return httpResponseString;
-}
-
-+ (NSDictionary *)dictionaryFromQuery:(NSString *)query
-{
-    NSMutableDictionary *queryDictionary = [NSMutableDictionary dictionary];
-
-    // [a=1, b=2, c=3]
-    NSArray *queryComponents = [query componentsSeparatedByString:@"&"];
-    for (NSString *keyValueString in queryComponents) {
-        // [a, 1]
-        NSArray *components = [keyValueString componentsSeparatedByString:@"="];
-        if ([components count] == 2) {
-            NSString *key = [[components firstObject] stringByRemovingPercentEncoding];
-            id value = [[components lastObject] stringByRemovingPercentEncoding];
-
-            // Handle multiple entries under the same key as an array
-            id existingEntry = queryDictionary[key];
-            if (existingEntry) {
-                if ([existingEntry isKindOfClass:[NSArray class]]) {
-                    value = [existingEntry arrayByAddingObject:value];
-                } else {
-                    value = @[existingEntry, value];
-                }
-            }
-            
-            [queryDictionary setObject:value forKey:key];
-        }
-    }
-
-    return queryDictionary;
-}
-
-+ (NSString *)prettyJSONStringFromData:(NSData *)data
-{
-    NSString *prettyString = nil;
-    
-    id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
-    if ([NSJSONSerialization isValidJSONObject:jsonObject]) {
-        prettyString = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:jsonObject options:NSJSONWritingPrettyPrinted error:NULL] encoding:NSUTF8StringEncoding];
-        // NSJSONSerialization escapes forward slashes. We want pretty json, so run through and unescape the slashes.
-        prettyString = [prettyString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
-    } else {
-        prettyString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-    }
-    
-    return prettyString;
-}
-
-+ (BOOL)isValidJSONData:(NSData *)data
-{
-    return [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL] ? YES : NO;
-}
-
-// Thanks to the following links for help with this method
-// http://www.cocoanetics.com/2012/02/decompressing-files-into-memory/
-// https://github.com/nicklockwood/GZIP
-+ (NSData *)inflatedDataFromCompressedData:(NSData *)compressedData
-{
-    NSData *inflatedData = nil;
-    NSUInteger compressedDataLength = [compressedData length];
-    if (compressedDataLength > 0) {
-        z_stream stream;
-        stream.zalloc = Z_NULL;
-        stream.zfree = Z_NULL;
-        stream.avail_in = (uInt)compressedDataLength;
-        stream.next_in = (void *)[compressedData bytes];
-        stream.total_out = 0;
-        stream.avail_out = 0;
-
-        NSMutableData *mutableData = [NSMutableData dataWithLength:compressedDataLength * 1.5];
-        if (inflateInit2(&stream, 15 + 32) == Z_OK) {
-            int status = Z_OK;
-            while (status == Z_OK) {
-                if (stream.total_out >= [mutableData length]) {
-                    mutableData.length += compressedDataLength / 2;
-                }
-                stream.next_out = (uint8_t *)[mutableData mutableBytes] + stream.total_out;
-                stream.avail_out = (uInt)([mutableData length] - stream.total_out);
-                status = inflate(&stream, Z_SYNC_FLUSH);
-            }
-            if (inflateEnd(&stream) == Z_OK) {
-                if (status == Z_STREAM_END) {
-                    mutableData.length = stream.total_out;
-                    inflatedData = [mutableData copy];
-                }
-            }
-        }
-    }
-    return inflatedData;
-}
-
-+ (NSArray *)allWindows
-{
-    BOOL includeInternalWindows = YES;
-    BOOL onlyVisibleWindows = NO;
-
-    NSArray *allWindowsComponents = @[@"al", @"lWindo", @"wsIncl", @"udingInt", @"ernalWin", @"dows:o", @"nlyVisi", @"bleWin", @"dows:"];
-    SEL allWindowsSelector = NSSelectorFromString([allWindowsComponents componentsJoinedByString:@""]);
-
-    NSMethodSignature *methodSignature = [[UIWindow class] methodSignatureForSelector:allWindowsSelector];
-    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
-
-    invocation.target = [UIWindow class];
-    invocation.selector = allWindowsSelector;
-    [invocation setArgument:&includeInternalWindows atIndex:2];
-    [invocation setArgument:&onlyVisibleWindows atIndex:3];
-    [invocation invoke];
-
-    __unsafe_unretained NSArray *windows = nil;
-    [invocation getReturnValue:&windows];
-    return windows;
-}
-
-
-+(NSString *)tracingTime
-{
-    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
-    [outputFormatter setLocale:[NSLocale currentLocale]];
-    [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
-    NSString *str = [outputFormatter stringFromDate:[NSDate date]];
-    return str;
-}
-
-// Swizzling utilities
-+ (SEL)swizzledSelectorForSelector:(SEL)selector
-{
-    return NSSelectorFromString([NSString stringWithFormat:@"_flex_swizzle_%x_%@", arc4random(), NSStringFromSelector(selector)]);
-}
-
-+ (BOOL)instanceRespondsButDoesNotImplementSelector:(SEL)selector class:(Class)cls
-{
-    if ([cls instancesRespondToSelector:selector]) {
-        unsigned int numMethods = 0;
-        Method *methods = class_copyMethodList(cls, &numMethods);
-        
-        BOOL implementsSelector = NO;
-        for (int index = 0; index < numMethods; index++) {
-            SEL methodSelector = method_getName(methods[index]);
-            if (selector == methodSelector) {
-                implementsSelector = YES;
-                break;
-            }
-        }
-        
-        free(methods);
-        
-        if (!implementsSelector) {
-            return YES;
-        }
-    }
-    
-    return NO;
-}
-
-+ (void)replaceImplementationOfKnownSelector:(SEL)originalSelector onClass:(Class)class withBlock:(id)block swizzledSelector:(SEL)swizzledSelector
-{
-    // This method is only intended for swizzling methods that are know to exist on the class.
-    // Bail if that isn't the case.
-    Method originalMethod = class_getInstanceMethod(class, originalSelector);
-    if (!originalMethod) {
-        return;
-    }
-    
-    IMP implementation = imp_implementationWithBlock(block);
-    class_addMethod(class, swizzledSelector, implementation, method_getTypeEncoding(originalMethod));
-    Method newMethod = class_getInstanceMethod(class, swizzledSelector);
-    method_exchangeImplementations(originalMethod, newMethod);
-}
-
-+ (void)replaceImplementationOfSelector:(SEL)selector withSelector:(SEL)swizzledSelector forClass:(Class)cls withMethodDescription:(struct objc_method_description)methodDescription implementationBlock:(id)implementationBlock undefinedBlock:(id)undefinedBlock
-{
-    if ([self instanceRespondsButDoesNotImplementSelector:selector class:cls]) {
-        return;
-    }
-    
-    IMP implementation = imp_implementationWithBlock((id)([cls instancesRespondToSelector:selector] ? implementationBlock : undefinedBlock));
-    
-    Method oldMethod = class_getInstanceMethod(cls, selector);
-    if (oldMethod) {
-        class_addMethod(cls, swizzledSelector, implementation, methodDescription.types);
-        
-        Method newMethod = class_getInstanceMethod(cls, swizzledSelector);
-        
-        method_exchangeImplementations(oldMethod, newMethod);
-    } else {
-        class_addMethod(cls, selector, implementation, methodDescription.types);
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WPLMacro.h b/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WPLMacro.h
deleted file mode 100644
index ac94109..0000000
--- a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WPLMacro.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-//  WeexPluginMacro.h
-//  Pods
-//
-//  Created by 齐山 on 17/3/10.
-//
-//
-
-#ifndef __WEEX_PLUGIN_MACRO_H__
-#define __WEEX_PLUGIN_MACRO_H__
-
-
-#define WeexPluginDATA __attribute((used, section("__DATA,WeexPlugin")))
-
-#define WX_PLUGIN_NAME_SEPARATOR(module,jsname,classname,separator) module#separator#jsname#separator#classname
-
-#define WX_PLUGIN_NAME(module,jsname,classname) WX_PLUGIN_NAME_SEPARATOR(module,jsname,classname,&)
-
-#define WX_PlUGIN_EXPORT_MODULE_DATA(jsname,classname) \
-char const * k##classname##Configuration WeexPluginDATA = WX_PLUGIN_NAME("module",jsname,classname);
-
-#define  WX_PlUGIN_EXPORT_COMPONENT_DATA(jsname,classname)\
-char const * k##classname##Configuration WeexPluginDATA = WX_PLUGIN_NAME("component",jsname,classname);
-
-#define WX_PlUGIN_EXPORT_HANDLER_DATA(jsimpl,jsprotocolname)\
-char const * k##jsimpl##jsprotocolname##Configuration WeexPluginDATA = WX_PLUGIN_NAME("protocol",jsimpl,jsprotocolname);
-
-#endif
diff --git a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WPLRegister.h b/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WPLRegister.h
deleted file mode 100644
index a63ae32..0000000
--- a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WPLRegister.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-//  WPRegister.h
-//  WeexPluginDemo
-//
-//  Created by 齐山 on 17/3/7.
-//  Copyright © 2017年 taobao. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface WPRegister : NSObject
-
-+(void )registerPlugins;
-
-@end
diff --git a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WeexPluginLoader.h b/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WeexPluginLoader.h
deleted file mode 100644
index 14e2e3b..0000000
--- a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Headers/WeexPluginLoader.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-//  WeexPlugin.h
-//  WeexPluginDemo
-//
-//  Created by 齐山 on 17/3/7.
-//  Copyright © 2017年 taobao. All rights reserved.
-//
-
-
-#import "WPLMacro.h"
-#import "WPLRegister.h"
-
-#ifndef __WEEX_PLUGIN_H__
-#define __WEEX_PLUGIN_H__
-
-/**
- * this macro is used to auto regester moudule.
- *  example: WX_PlUGIN_EXPORT_MODULE(test,WXTestModule)
- **/
-#define WX_PlUGIN_EXPORT_MODULE(jsname,classname) WX_PlUGIN_EXPORT_MODULE_DATA(jsname,classname)
-
-/**
- *  this macro is used to auto regester component.
- *  example:WX_PlUGIN_EXPORT_COMPONENT(test,WXTestCompnonent)
- **/
-#define WX_PlUGIN_EXPORT_COMPONENT(jsname,classname) WX_PlUGIN_EXPORT_COMPONENT_DATA(jsname,classname)
-
-/**
- *  this macro is used to auto regester handler.
- *  example:WX_PlUGIN_EXPORT_HANDLER(WXImgLoaderDefaultImpl,WXImgLoaderProtocol)
- **/
-#define WX_PlUGIN_EXPORT_HANDLER(jsimpl,jsprotocolname) WX_PlUGIN_EXPORT_HANDLER_DATA(jsimpl,jsprotocolname)
-
-#endif
diff --git a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Info.plist b/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Info.plist
deleted file mode 100644
index 4536d39..0000000
--- a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Info.plist
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>BuildMachineOSBuild</key>
-	<string>16A323</string>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>WeexPluginLoader</string>
-	<key>CFBundleIdentifier</key>
-	<string>com.weexplugin.WeexPluginLoader</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>WeexPluginLoader</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleShortVersionString</key>
-	<string>0.0.1.14-SNAPSHOT</string>
-	<key>CFBundleSupportedPlatforms</key>
-	<array>
-		<string>iPhoneOS</string>
-	</array>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>DTCompiler</key>
-	<string>com.apple.compilers.llvm.clang.1_0</string>
-	<key>DTPlatformBuild</key>
-	<string>14B72</string>
-	<key>DTPlatformName</key>
-	<string>iphoneos</string>
-	<key>DTPlatformVersion</key>
-	<string>10.1</string>
-	<key>DTSDKBuild</key>
-	<string>14B72</string>
-	<key>DTSDKName</key>
-	<string>iphoneos10.1</string>
-	<key>DTXcode</key>
-	<string>0810</string>
-	<key>DTXcodeBuild</key>
-	<string>8B62</string>
-	<key>MinimumOSVersion</key>
-	<string>7.0</string>
-	<key>UIDeviceFamily</key>
-	<array>
-		<integer>1</integer>
-		<integer>2</integer>
-	</array>
-</dict>
-</plist>
diff --git a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Modules/module.modulemap b/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Modules/module.modulemap
deleted file mode 100644
index 2ffaa60..0000000
--- a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/Modules/module.modulemap
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module WeexPluginLoader {
-  umbrella header "WeexPluginLoader.h"
-
-  export *
-  module * { export * }
-}
diff --git a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/WeexPluginLoader b/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/WeexPluginLoader
deleted file mode 100644
index 540c65f..0000000
--- a/ios/Pods/WeexPluginLoader/WeexPluginLoader.framework/WeexPluginLoader
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/WeexSDK/LICENSE b/ios/Pods/WeexSDK/LICENSE
deleted file mode 100644
index d404dba..0000000
--- a/ios/Pods/WeexSDK/LICENSE
+++ /dev/null
@@ -1,466 +0,0 @@
-
-                                 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
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
-
-==============================================================================
-
-Apache Weex Submodules:
-
-Apache Weex includes a number of submodules with separate copyright notices
-and license terms. Your use of these submodules is subject to the terms and
-conditions of the following licenses.
-
-This product bundles vuejs v1.0.12, which is available under a
-"MIT" license. For details, see https://github.com/vuejs/vue/blob/v1.0.12/LICENSE and following files:
-  src/js-framework/dist/index.js
-  runtime/frameworks/legacy/core/array.js
-  runtime/frameworks/legacy/core/dep.js
-  runtime/frameworks/legacy/core/object.js
-  runtime/frameworks/legacy/core/observer.js
-  runtime/frameworks/legacy/core/state.js
-  runtime/frameworks/legacy/core/watcher.js
-
-  The MIT License (MIT)
-
-  Copyright (c) 2013-2014 Yuxi Evan You
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-  of this software and associated documentation files (the "Software"), to deal
-  in the Software without restriction, including without limitation the rights
-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the Software is
-  furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in
-  all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-  THE SOFTWARE.
-
-
-This product bundles Guava v20.0, which is available under a "Apache" license. For details, see https://github.com/google/guava/blob/v20.0/COPYING and following files:
-  android_sdk/src/main/java/org/apache/taobao/weex/utils/WXDataStructureUtil.java
-
-This product bundles json11 v1.0.0, which is available under a "MIT" license.For details, see https://github.com/dropbox/json11/tree/v1.0.0 and following files:
-   weex_core/Source/third_party/json11/CMakeLists.txt
-   weex_core/Source/third_party/json11/json11.cc
-   weex_core/Source/third_party/json11/json11.hpp
-
-   /* Copyright (c) 2013 Dropbox, Inc.
-   *
-   * Permission is hereby granted, free of charge, to any person obtaining a copy
-   * of this software and associated documentation files (the "Software"), to deal
-   * in the Software without restriction, including without limitation the rights
-   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-   * copies of the Software, and to permit persons to whom the Software is
-   * furnished to do so, subject to the following conditions:
-   *
-   * The above copyright notice and this permission notice shall be included in
-   * all copies or substantial portions of the Software.
-   *
-   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-   * THE SOFTWARE.
-   */
-
-This product bundles chromium v66.0.3344.2, which is available under a "BSD-style" license. For details, see https://github.com/chromium/chromium/blob/66.0.3344.2/third_party/modp_b64/LICENSE and following files:
-  weex_core/Source/base/base64/base64.cpp
-  weex_core/Source/base/base64/base64.h
-  weex_core/Source/base/base64/modp_base64/modp_b64_data.h
-  weex_core/Source/base/base64/modp_base64/modp_b64.cc
-  weex_core/Source/base/base64/modp_base64/modp_b64.h
-  weex_core/Source/base/android/jniprebuild/jni_generator.py
-
-   # Copyright (c) 2012 The Chromium Authors. All rights reserved.
-   # Use of this source code is governed by a BSD-style license that can be
-   # found in the LICENSE file.
-
-This product bundles Android Open Source Project vandroid-4.2.2_r1, which is available under a "BSD" license. For details, see https://android.googlesource.com/platform/bionic/+/android-4.2.2_r1/libc/README and following files:
-  weex_core/Source/IPC/futex.h
-
-This product bundles Webkit 2.17.4, which is available under a "BSD 2-clause" license. For details, reference https://webkit.org/licensing-webkit/ for license(Weex only uses the files under BSD license) and see https://svn.webkit.org/repository/webkit/releases/WebKitGTK/webkit-2.17.4 for following files:
-   Files under: weex_core/Source/android/jsengine/dependence/
-      OptionsCommon.cmake
-      OptionsJSCOnly.cmake
-      WeexCommon.cmake
-      WeexFS.cmake
-      WeexFeatures.cmake
-      WeexHelpers.cmake
-      WeexMacros.cmake
-
-   Files under: weex_core/Source/android/jsengine/dependence/bmalloc
-      CMakeLists.txt
-      ChangeLog
-      Makefile
-
-   Files under: weex_core/Source/android/jsengine/dependence/bmalloc/Configurations
-      Base.xcconfig
-      DebugRelease.xcconfig
-      bmalloc.xcconfig
-      mbmalloc.xcconfig
-
-   Files under: weex_core/Source/android/jsengine/dependence/bmalloc/bmalloc
-      Algorithm.h
-      Allocator.cpp
-      Allocator.h
-      AsyncTask.h
-      AvailableMemory.cpp
-      AvailableMemory.h
-      BAssert.h
-      BPlatform.h
-      BumpAllocator.h
-      BumpRange.h
-      Cache.cpp
-      Cache.h
-      Chunk.h
-      Deallocator.cpp
-      Deallocator.h
-      DebugHeap.cpp
-      DebugHeap.h
-      Environment.cpp
-      Environment.h
-      FixedVector.h
-      Heap.cpp
-      Heap.h
-      Inline.h
-      LargeMap.cpp
-      LargeMap.h
-      LargeRange.h
-      LineMetadata.h
-      List.h
-      Logging.cpp
-      Logging.h
-      Map.h
-      Mutex.h
-      Object.h
-      ObjectType.cpp
-      ObjectType.h
-      PerProcess.h
-      PerThread.h
-      Range.h
-      ScopeExit.h
-      Sizes.h
-      SmallLine.h
-      SmallPage.h
-      StaticMutex.cpp
-      StaticMutex.h
-      Syscall.h
-      VMAllocate.h
-      VMHeap.cpp
-      VMHeap.h
-      Vector.h
-      Zone.cpp
-      Zone.h
-      bmalloc.h
-      mbmalloc.cpp
-
-   Files under: weex_core/Source/android/jsengine/dependence/bmalloc/bmalloc/darwin
-      BSoftLinking.h
-
-   Files under: weex_core/Source/android/jsengine/dependence/bmalloc/bmalloc.xcodeproj
-      project.pbxproj
-
-   Files under: weex_core/Source/android/jsengine/dependence/icu
-      LICENSE
-      README
-
-   Files under: weex_core/Source/android/jsengine/dependence/icu/unicode
-      localpointer.h
-      parseerr.h
-      platform.h
-      ptypes.h
-      putil.h
-      ucal.h
-      uchar.h
-      ucnv.h
-      ucnv_err.h
-      ucol.h
-      uconfig.h
-      ucurr.h
-      udat.h
-      udatpg.h
-      udisplaycontext.h
-      uenum.h
-      uformattable.h
-      uiter.h
-      uloc.h
-      umachine.h
-      umisc.h
-      unorm.h
-      unorm2.h
-      unum.h
-      unumsys.h
-      urename.h
-      uscript.h
-      uset.h
-      ustring.h
-      utf.h
-      utf16.h
-      utf8.h
-      utf_old.h
-      utypes.h
-      uvernum.h
-      uversion.h
-      
-   The copyright for files above is listed below:
-
-      COPYRIGHT AND PERMISSION NOTICE
-
-      Copyright (c) 1995-2006 International Business Machines Corporation and others
-
-      All rights reserved.
-
-      Permission is hereby granted, free of charge, to any person obtaining a copy of this
-      software and associated documentation files (the "Software"), to deal in the Software
-      without restriction, including without limitation the rights to use, copy, modify,
-      merge, publish, distribute, and/or sell copies of the Software, and to permit persons
-      to whom the Software is furnished to do so, provided that the above copyright notice(s)
-      and this permission notice appear in all copies of the Software and that both the above
-      copyright notice(s) and this permission notice appear in supporting documentation.
-
-      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-      INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-      PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-      OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-      CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-      PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-      OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-      Except as contained in this notice, the name of a copyright holder shall not be used in
-      advertising or otherwise to promote the sale, use or other dealings in this Software
-      without prior written authorization of the copyright holder.
-
-
-      /*
-      * Copyright (C) 2016 Apple Inc. All rights reserved.
-      *
-      * Redistribution and use in source and binary forms, with or without
-      * modification, are permitted provided that the following conditions
-      * are met:
-      * 1. Redistributions of source code must retain the above copyright
-      *    notice, this list of conditions and the following disclaimer.
-      * 2. Redistributions in binary form must reproduce the above copyright
-      *    notice, this list of conditions and the following disclaimer in the
-      *    documentation and/or other materials provided with the distribution.
-      *
-      * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
-      * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-      * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-      * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
-      * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-      * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-      * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-      * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-      * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-      * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-      * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-      */
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/README.md b/ios/Pods/WeexSDK/README.md
deleted file mode 100644
index 5b22750..0000000
--- a/ios/Pods/WeexSDK/README.md
+++ /dev/null
@@ -1,112 +0,0 @@
-# Weex
-
-A framework for building Mobile cross-platform UI.
-
-[![Build Status](https://travis-ci.org/apache/incubator-weex.svg?branch=master)](https://travis-ci.org/apache/incubator-weex/)
-
-| platform | status |
-| -------- | ------ |
-| Android | [![Download](https://api.bintray.com/packages/alibabaweex/maven/weex_sdk/images/download.svg)](https://bintray.com/alibabaweex/maven/weex_sdk/_latestVersion) |
-| iOS | [![Pod version](https://badge.fury.io/co/WeexSDK.svg)](https://cocoapods.org/pods/WeexSDK) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) |
-| [Mobile Web](https://github.com/weexteam/weex-vue-render) | [![npm version](https://badge.fury.io/js/weex-html5.svg)](https://www.npmjs.com/package/weex-vue-render) |
-
-Support Android 4.1 (API 16), iOS 8.0+ and WebKit 534.30+.
-
-**Note: Please note the above download distribution is only for users' users' convenience. Weex Release is always in the format of [source code](https://weex.apache.org/download/download.html).**
-
-## For Windows
-
-Please ***INSTALL [Git for Windows](https://git-scm.com/download/win)*** and run all the following commands in git-bash.
-
-## Meet Weex
-
-* Install [Weex Playground App](https://weex.apache.org/tools/playground.html) to see examples we already written.
-* If you want to write a demo, install [weex-toolkit](https://www.npmjs.com/package/weex-toolkit) in [Node.js](http://nodejs.org/) 8.0+ and
-* Run `weex init` to generate & start a simple project in an empty folder.
-* Follow the instructions in the project README.
-* Enjoy it.
-
-## Use Weex
-
-* [Tutorial](http://weex.apache.org/guide/)
-* [Documents](http://weex.apache.org/references)
-
-### Android
-
-* Prerequisites
-  * Install [Node.js](http://nodejs.org/) 8.0+
-  * Under project root
-    * `npm install`, install project
-    * `./start`
-    * Install [Android Environment](http://developer.android.com/training/basics/firstapp/index.html)
-    * Install [NDK](https://developer.android.com/ndk/) r18
-    * Install [Cmake](https://cmake.org/download/) 3.9.0+
-* Run playground, In Android Studio
-    * Open `android/playground`
-    * In `app/java/com.alibaba.weex/IndexActivity`, modify `CURRENT_IP` to your local IP
-    * Click <img src="http://gtms04.alicdn.com/tps/i4/TB1wCcqMpXXXXakXpXX3G7tGXXX-34-44.png" height="16" > (`Run` button)
-* [Add an example](./examples/README.md#add-an-example)
-
-#### Runtime
-
-On Android Platform , Weex code is executed in [weex_v8core](https://github.com/alibaba/weex_v8core) which is based on Google V8 JavaScript engine.
-
-### iOS
-* run playground
-  * Prerequisites
-    * Install [Node.js](http://nodejs.org/) 8.0+
-      * Under project root
-          * `npm install`, install project
-          * `./start`
-      * Install [iOS Environment](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Setup/Setup.html)
-      * Install [CocoaPods](https://guides.cocoapods.org/using/getting-started.html)
-  * Run playground
-      * `cd ios/playground`
-      * `pod install`
-      * Open `WeexDemo.xcworkspace` in Xcode
-      * Click <img src="http://img1.tbcdn.cn/L1/461/1/5470b677a2f2eaaecf412cc55eeae062dbc275f9" height="16" > (`Run` button) or use default shortcut `cmd + r` in Xcode
-      * If you want to run the demo on your device, don't need to modify `CURRENT_IP` manually. ~~In `DemoDefine.h`(you can search this file by Xcode default shortcut `cmd + shift + o`), modify `CURRENT_IP` to your local IP~~
-  * [Add an example](./examples/README.md#add-an-example)
-* integrate to your application
-
-  - **[CocoaPods](https://cocoapods.org)**
-
-     Add the following line to your Podfile:
-   ```
-     pod 'WeexSDK'
-   ```
-    run `pod install`
-
-  - **[Carthage](https://github.com/carthage/carthage)**
-
-    Add the following line to your Cartfile:
-   ```
-     github "apache/incubator-weex"
-   ```
-   Run `carthage update`, and you should now have the latest version of   `WeexSDK` in your `Carthage` folder.
-
-### Mobile Web
-
-see [weex-vue-render](https://github.com/weexteam/weex-vue-render).
-
-## Scripts
-
-See [SCRIPTS.md](./SCRIPTS.md) for more information.
-
-## IDE Plugin & Syntax Highlight & DevTool
-
-Weex team have developed a [DevTool](https://github.com/weexteam/weex-devtool) to help you to improve the debugging efficiency.
-
-See more stuff on [this wiki page](https://github.com/alibaba/weex/wiki/Weex-Community)
-
-## Weex Community
-* [Mailing List](https://weex-project.io/contributing.html#join-in-discussions) Weex Mailing List, where most discussion happens.
-* [StackOverflow](http://stackoverflow.com/questions/tagged/weex): Ask questions about Weex.
-* [SegmentFault (cn)](https://segmentfault.com/t/weex): 中文交流与讨论
-* [FAQ](https://weex.apache.org/faq.html)
-* [Articles (cn)](https://github.com/weexteam/article/issues): Weex 相关文章集合
-* [Telegram Russian Community Group](https://telegram.me/weex_ru)
-
-### Contributing
-
-See [Weex Contributing Guide](./CONTRIBUTING.md) for more information.
diff --git a/ios/Pods/WeexSDK/WeexSDK.modulemap b/ios/Pods/WeexSDK/WeexSDK.modulemap
deleted file mode 100644
index 865ca7b..0000000
--- a/ios/Pods/WeexSDK/WeexSDK.modulemap
+++ /dev/null
@@ -1,6 +0,0 @@
-framework module WeexSDK {
-  umbrella header "WeexSDK.h"
-
-  export *
-  module * { export * }
-}
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png
deleted file mode 100644
index 90b4ded..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png
+++ /dev/null
Binary files differ
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.h
deleted file mode 100644
index 3d1c378..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <JavaScriptCore/JavaScriptCore.h>
-
-@interface JSContext (Weex)
-
-@property (nonatomic, strong) NSString *instanceId;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.m
deleted file mode 100644
index 12e869e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSContext+Weex.m
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "JSContext+Weex.h"
-#import <objc/runtime.h>
-
-static NSString *wx_instanceIdKey;
-
-@implementation JSContext (Weex)
-
-- (NSString *)instanceId {
-    return (NSString *)objc_getAssociatedObject(self, &wx_instanceIdKey);
-}
-
-- (void)setInstanceId:(NSString *)instanceId {
-    objc_setAssociatedObject(self, &wx_instanceIdKey, instanceId, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h
deleted file mode 100644
index 9bde252..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <JavaScriptCore/JavaScriptCore.h>
-
-@interface JSValue (Weex)
-
-+ (JSValue *)wx_valueWithReturnValueFromInvocation:(NSInvocation *)invocation inContext:(JSContext *)context;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m
deleted file mode 100644
index 876e024..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "JSValue+Weex.h"
-#import <objc/runtime.h>
-
-@implementation JSValue (Weex)
-
-+ (JSValue *)wx_valueWithReturnValueFromInvocation:(NSInvocation *)invocation inContext:(JSContext *)context
-{
-    if (!invocation || !context) {
-        return nil;
-    }
-    
-    const char * returnType = [invocation.methodSignature methodReturnType];
-    
-    JSValue *returnValue;
-    switch (returnType[0] == _C_CONST ? returnType[1] : returnType[0]) {
-        case _C_VOID: {
-            // 1.void
-            returnValue = [JSValue valueWithUndefinedInContext:context];
-            break;
-        }
-        
-        case _C_ID: {
-            // 2.id
-            void *value;
-            [invocation getReturnValue:&value];
-            id object = (__bridge id)value;
-        
-            returnValue = [JSValue valueWithObject:[object copy] inContext:context];
-            break;
-        }
-        
-#define WX_JS_VALUE_RET_CASE(typeString, type) \
-        case typeString: {                      \
-            type value;                         \
-            [invocation getReturnValue:&value];  \
-            returnValue = [JSValue valueWithObject:@(value) inContext:context]; \
-            break; \
-        }
-        // 3.number
-        WX_JS_VALUE_RET_CASE(_C_CHR, char)
-        WX_JS_VALUE_RET_CASE(_C_UCHR, unsigned char)
-        WX_JS_VALUE_RET_CASE(_C_SHT, short)
-        WX_JS_VALUE_RET_CASE(_C_USHT, unsigned short)
-        WX_JS_VALUE_RET_CASE(_C_INT, int)
-        WX_JS_VALUE_RET_CASE(_C_UINT, unsigned int)
-        WX_JS_VALUE_RET_CASE(_C_LNG, long)
-        WX_JS_VALUE_RET_CASE(_C_ULNG, unsigned long)
-        WX_JS_VALUE_RET_CASE(_C_LNG_LNG, long long)
-        WX_JS_VALUE_RET_CASE(_C_ULNG_LNG, unsigned long long)
-        WX_JS_VALUE_RET_CASE(_C_FLT, float)
-        WX_JS_VALUE_RET_CASE(_C_DBL, double)
-        WX_JS_VALUE_RET_CASE(_C_BOOL, BOOL)
-            
-        case _C_STRUCT_B: {
-            NSString *typeString = [NSString stringWithUTF8String:returnType];
-            
-#define WX_JS_VALUE_RET_STRUCT(_type, _methodName)                             \
-            if ([typeString rangeOfString:@#_type].location != NSNotFound) {   \
-                _type value;                                                   \
-                [invocation getReturnValue:&value];                            \
-                returnValue = [JSValue _methodName:value inContext:context]; \
-                break;                                                         \
-            }
-            // 4.struct
-            WX_JS_VALUE_RET_STRUCT(CGRect, valueWithRect)
-            WX_JS_VALUE_RET_STRUCT(CGPoint, valueWithPoint)
-            WX_JS_VALUE_RET_STRUCT(CGSize, valueWithSize)
-            WX_JS_VALUE_RET_STRUCT(NSRange, valueWithRange)
-            
-        }
-        case _C_CHARPTR:
-        case _C_PTR:
-        case _C_CLASS: {
-            returnValue = [JSValue valueWithUndefinedInContext:context];
-            break;
-        }
-    }
-    
-    return returnValue;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h
deleted file mode 100644
index c753237..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <JavaScriptCore/JavaScriptCore.h>
-#import "WXBridgeProtocol.h"
-
-@class WXCallJSMethod;
-@class WXSDKInstance;
-
-@interface WXBridgeContext : NSObject
-
-/**
- *  return instance at the top of the stack.
- **/
-@property (nonatomic, weak, readonly) WXSDKInstance *topInstance;
-
-/**
- *  Create Instance Method
- *  @param instance  :   instance id
- *  @param temp      :   template data
- *  @param options   :   parameters
- *  @param data      :   external data
- **/
-- (void)createInstance:(NSString *)instance
-              template:(NSString *)temp
-               options:(NSDictionary *)options
-                  data:(id)data;
-
-/**
- *  Create Instance with opcode
- *  @param instance  :   instance id
- *  @param contents  :   opcode data
- *  @param options   :   parameters
- *  @param data      :   external data
- **/
-- (void)createInstance:(NSString *)instance
-              contents:(NSData *)contents
-               options:(NSDictionary *)options
-                  data:(id)data;
-
-/**
- *  Destroy Instance Method
- *  @param instance  :   instance id
- **/
-- (void)destroyInstance:(NSString *)instance;
-
-/**
- * Trigger full GC, for dev and debug only.
- **/
-- (void)forceGarbageCollection;
-
-/**
- *  Refresh Instance Method
- *  @param instance  :   instance id
- *  @param data      :   external data
- **/
-- (void)refreshInstance:(NSString *)instance
-                   data:(id)data;
-
-/**
- *  Update Instance State Method
- *  @param instance  :   instance id
- *  @param data      :   parameters
- **/
-- (void)updateState:(NSString *)instance
-               data:(id)data;
-
-/**
- *  Execute JSFramework Script
- *  @param script    :   script code
- **/
-- (void)executeJsFramework:(NSString *)script;
-
-/**
- *  Execute JS Method
- *  @param method    :   object of bridge method
- **/
-- (void)executeJsMethod:(WXCallJSMethod *)method;
-
-- (JSValue *)excuteJSMethodWithResult:(WXCallJSMethod *)method;
-
-/**
- *  Register Modules Method
- *  @param modules   :   module list
- **/
-- (void)registerModules:(NSDictionary *)modules;
-
-/**
- *  Execute JS Service
- *  @param script    :   JS services script
- *  @param name      :   JS services name
- **/
-- (void)executeJsService:(NSString *)script withName: (NSString *)name;
-
-/**
- *  Register Components Method
- *  @param components   component list
- **/
-- (void)registerComponents:(NSArray *)components;
-
-/**
- *  Connect To WebSocket for devtool debug
- *  @param url       :   url to connect
- **/
-- (void)connectToDevToolWithUrl:(NSURL *)url;
-
-/**
- *  Connect To WebSocket for collecting log
- *  @param url       :   url to connect
- **/
-- (void)connectToWebSocket:(NSURL *)url;
-
-/**
- *  Log To WebSocket
- *  @param flag      :   the tag to identify
- *  @param message   :   message to output
- **/
-- (void)logToWebSocket:(NSString *)flag message:(NSString *)message;
-
-/**
- *  Reset Environment
- **/
-- (void)resetEnvironment;
-
-+ (void)mountContextEnvironment:(JSContext*)context;
-- (void)callJSMethod:(NSString *)method args:(NSArray *)args onContext:(id<WXBridgeProtocol>)bridge completion:(void (^)(JSValue * value))complection;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
deleted file mode 100644
index fabc1fe..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
+++ /dev/null
@@ -1,1299 +0,0 @@
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBridgeContext.h"
-#import "WXJSCoreBridge.h"
-#import "WXLog.h"
-#import "WXUtility.h"
-#import "WXModuleFactory.h"
-#import "WXModuleProtocol.h"
-#import "WXUtility.h"
-#import "WXSDKError.h"
-#import "WXMonitor.h"
-#import "WXAssert.h"
-#import "WXSDKManager.h"
-#import "WXDebugTool.h"
-#import "WXSDKInstance_private.h"
-#import "WXAppConfiguration.h"
-#import "WXInvocationConfig.h"
-#import "WXComponentMethod.h"
-#import "WXModuleMethod.h"
-#import "WXCallJSMethod.h"
-#import "WXSDKInstance_private.h"
-#import "WXPrerenderManager.h"
-#import "WXExceptionUtils.h"
-#import "WXSDKEngine.h"
-#import "WXPolyfillSet.h"
-#import "WXJSExceptionProtocol.h"
-#import "WXMonitor.h"
-#import "WXAppMonitorProtocol.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXSDKInstance_performance.h"
-#import "JSContext+Weex.h"
-#import "WXCoreBridge.h"
-#import "WXJSFrameworkLoadProtocol.h"
-#import "WXJSFrameworkLoadDefaultImpl.h"
-#import "WXHandlerFactory.h"
-#import "WXExtendCallNativeManager.h"
-#import "WXDataRenderHandler.h"
-
-#define SuppressPerformSelectorLeakWarning(Stuff) \
-do { \
-_Pragma("clang diagnostic push") \
-_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
-Stuff; \
-_Pragma("clang diagnostic pop") \
-} while (0)
-
-@interface WXBridgeContext ()
-
-@property (nonatomic, strong) id<WXBridgeProtocol>  jsBridge;
-@property (nonatomic, strong) id<WXBridgeProtocol> devToolSocketBridge;
-@property (nonatomic, assign) BOOL  debugJS;
-//store the methods which will be executed from native to js
-@property (nonatomic, strong) NSMutableDictionary   *sendQueue;
-//the instance stack
-@property (nonatomic, strong) NSMutableArray    *insStack;
-//identify if the JSFramework has been loaded
-@property (nonatomic) BOOL frameworkLoadFinished;
-//store some methods temporarily before JSFramework is loaded
-@property (nonatomic, strong) NSMutableArray *methodQueue;
-// store service
-@property (nonatomic, strong) NSMutableArray *jsServiceQueue;
-
-@property (nonatomic, readonly) id<WXDataRenderHandler> dataRenderHandler;
-
-@end
-
-@implementation WXBridgeContext
-    
-@synthesize dataRenderHandler = _dataRenderHandler;
-
-- (instancetype) init
-{
-    self = [super init];
-    if (self) {
-        _methodQueue = [NSMutableArray new];
-        _frameworkLoadFinished = NO;
-        _jsServiceQueue = [NSMutableArray new];
-        _dataRenderHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXDataRenderHandler)];
-        if (!_dataRenderHandler) {
-            Class handlerClass = NSClassFromString(@"WXEagleHandler");
-            if (handlerClass) {
-                _dataRenderHandler = [[handlerClass alloc] init];
-                [WXSDKEngine registerHandler:_dataRenderHandler withProtocol:@protocol(WXDataRenderHandler)];
-            }
-        }
-    }
-    return self;
-}
-
-- (id<WXBridgeProtocol>)jsBridge
-{
-    WXAssertBridgeThread();
-    _debugJS = [WXDebugTool isDevToolDebug];
-    
-    Class bridgeClass = _debugJS ? NSClassFromString(@"WXDebugger") : [WXJSCoreBridge class];
-    
-    if (_jsBridge && [_jsBridge isKindOfClass:bridgeClass]) {
-        return _jsBridge;
-    }
-    
-    if (_jsBridge) {
-        [_methodQueue removeAllObjects];
-        _frameworkLoadFinished = NO;
-    }
-    
-    // WXDebugger is a singleton actually and should not call its init twice.
-    _jsBridge = _debugJS ? [NSClassFromString(@"WXDebugger") alloc] : [[WXJSCoreBridge alloc] init];
-    
-    [self registerGlobalFunctions];
-    
-    return _jsBridge;
-}
-
-- (NSInteger)checkInstance:(WXSDKInstance *)instance
-{
-    if (!instance) {
-        WXLogInfo(@"instance not found, maybe already destroyed");
-        return FALSE;
-    }
-    return TRUE;
-}
-
-- (void)registerGlobalFunctions
-{
-    __weak typeof(self) weakSelf = self;
-    [_jsBridge registerCallNative:^NSInteger(NSString *instance, NSArray *tasks, NSString *callback) {
-        return [weakSelf invokeNative:instance tasks:tasks callback:callback];
-    }];
-    
-    [_jsBridge registerCallUpdateComponentData:^NSInteger(NSString *instanceId, NSString *componentId, NSString *jsonData) {
-        if (_dataRenderHandler) {
-            WXPerformBlockOnComponentThread(^{
-                [_dataRenderHandler callUpdateComponentData:instanceId componentId:componentId jsonData:jsonData];
-            });
-        }
-        else {
-            WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-            WXComponentManager *manager = instance.componentManager;
-            if (manager.isValid) {
-                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                WXPerformBlockOnComponentThread(^{
-                    [manager renderFailed:error];
-                });
-            }
-        }
-        return 0;
-    }];
-
-    [_jsBridge registerCallAddElement:^NSInteger(NSString *instanceId, NSString *parentRef, NSDictionary *elementData, NSInteger index) {
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callAddElement:instanceId parentRef:parentRef data:elementData index:(int)index];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callAddElement:instanceId parentRef:parentRef data:elementData index:(int)index];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    [_jsBridge registerCallCreateBody:^NSInteger(NSString *instanceId, NSDictionary *bodyData) {
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callCreateBody:instanceId data:bodyData];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callCreateBody:instanceId data:bodyData];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    [_jsBridge registerCallRemoveElement:^NSInteger(NSString *instanceId, NSString *ref) {
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callRemoveElement:instanceId ref:ref];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callRemoveElement:instanceId ref:ref];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    [_jsBridge registerCallMoveElement:^NSInteger(NSString *instanceId, NSString *ref, NSString *parentRef, NSInteger index) {
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callMoveElement:instanceId ref:ref parentRef:parentRef index:(int)index];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callMoveElement:instanceId ref:ref parentRef:parentRef index:(int)index];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    [_jsBridge registerCallUpdateAttrs:^NSInteger(NSString *instanceId, NSString *ref, NSDictionary *attrsData) {
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callUpdateAttrs:instanceId ref:ref data:attrsData];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callUpdateAttrs:instanceId ref:ref data:attrsData];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    [_jsBridge registerCallUpdateStyle:^NSInteger(NSString *instanceId, NSString *ref, NSDictionary *stylesData) {
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callUpdateStyle:instanceId ref:ref data:stylesData];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callUpdateStyle:instanceId ref:ref data:stylesData];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    [_jsBridge registerCallAddEvent:^NSInteger(NSString *instanceId, NSString *ref, NSString *event) {
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callAddEvent:instanceId ref:ref event:event];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callAddEvent:instanceId ref:ref event:event];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    [_jsBridge registerCallRemoveEvent:^NSInteger(NSString *instanceId, NSString *ref, NSString *event) {
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callRemoveEvent:instanceId ref:ref event:event];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callRemoveEvent:instanceId ref:ref event:event];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    [_jsBridge registerCallCreateFinish:^NSInteger(NSString *instanceId) {
-        
-        WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-        [instance.apmInstance onStage:KEY_PAGE_STAGES_CREATE_FINISH];
-        
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] callCreateFinish:instanceId];
-        }
-        else {
-            WXPerformBlockOnComponentThread(^{
-                [WXCoreBridge callCreateFinish:instanceId];
-            });
-        }
-        
-        return 0;
-    }];
-    
-    if ([_jsBridge respondsToSelector:@selector(registerCallRefreshFinish:)]) {
-        [_jsBridge registerCallRefreshFinish:^NSInteger(NSString *instanceId) {
-            
-            if ([WXCustomPageBridge isCustomPage:instanceId]) {
-                [[WXCustomPageBridge sharedInstance] callRefreshFinish:instanceId];
-            }
-            else {
-                WXPerformBlockOnComponentThread(^{
-                    [WXCoreBridge callRefreshFinish:instanceId];
-                });
-            }
-            
-            return 0;
-        }];
-    }
-    
-    if ([_jsBridge respondsToSelector:@selector(registerCallUpdateFinish:)]) {
-        [_jsBridge registerCallUpdateFinish:^NSInteger(NSString *instanceId) {
-            
-            if ([WXCustomPageBridge isCustomPage:instanceId]) {
-                [[WXCustomPageBridge sharedInstance] callUpdateFinish:instanceId];
-            }
-            else {
-                WXPerformBlockOnComponentThread(^{
-                    [WXCoreBridge callUpdateFinish:instanceId];
-                });
-            }
-            
-            return 0;
-        }];
-    }
-    
-    [_jsBridge registerCallNativeModule:^NSInvocation*(NSString *instanceId, NSString *moduleName, NSString *methodName, NSArray *arguments, NSDictionary *options) {
-        WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-        
-        if (!instance) {
-            WXLogInfo(@"instance not found for callNativeModule:%@.%@, maybe already destroyed", moduleName, methodName);
-            return nil;
-        }
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: callNativeModule : %@ . %@",moduleName,methodName);
-#endif
-        NSMutableDictionary * newOptions = options ? [options mutableCopy] : [NSMutableDictionary new];
-        NSMutableArray * newArguments = [arguments mutableCopy];
-        
-        if ([instance.bundleType.lowercaseString isEqualToString:@"rax"]) {
-            // we need to adjust __weex_options__ params in arguments to options compatible with rax javaScript framework.
-            NSDictionary * weexOptions = nil;
-            for(int i = 0;i < [arguments count]; i ++) {
-                if ([arguments[i] isKindOfClass:[NSDictionary class]]) {
-                    NSDictionary * dict = (NSDictionary*)arguments[i];
-                    if (dict[@"__weex_options__"] && [dict[@"__weex_options__"] isKindOfClass:[NSDictionary class]]) {
-                        weexOptions = dict;
-                        [newOptions addEntriesFromDictionary:(NSDictionary*)(weexOptions[@"__weex_options__"])];
-                    }
-                }
-            }
-            if (weexOptions) {
-                [newArguments removeObject:weexOptions];
-            }
-        }
-        WXModuleMethod *method = [[WXModuleMethod alloc] initWithModuleName:moduleName methodName:methodName arguments:[newArguments copy] options:[newOptions copy] instance:instance];
-        if(![moduleName isEqualToString:@"dom"] && instance.needPrerender){
-            [WXPrerenderManager storePrerenderModuleTasks:method forUrl:instance.scriptURL.absoluteString];
-            return nil;
-        }
-        return [method invoke];
-    }];
-    
-    [_jsBridge registerCallNativeComponent:^void(NSString *instanceId, NSString *componentRef, NSString *methodName, NSArray *args, NSDictionary *options) {
-       
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: callNativeComponent ref:%@",componentRef);
-#endif
-        
-        WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-        WXComponentMethod *method = [[WXComponentMethod alloc] initWithComponentRef:componentRef methodName:methodName arguments:args instance:instance];
-        [method invoke];
-    }];
-}
-
-- (NSMutableArray *)insStack
-{
-    if (_insStack) return _insStack;
-
-    _insStack = [NSMutableArray array];
-    
-    return _insStack;
-}
-
-- (WXSDKInstance *)topInstance
-{
-	WXSDKInstance *topInstance = nil;
-	@synchronized(self) {
-		if (self.insStack.count > 0) {
-			topInstance = [WXSDKManager instanceForID:[self.insStack firstObject]];
-		}
-	}
-    return topInstance;
-}
-
-- (NSMutableDictionary *)sendQueue
-{
-    WXAssertBridgeThread();
-    
-    if (_sendQueue) return _sendQueue;
-    
-    _sendQueue = [NSMutableDictionary dictionary];
-    
-    return _sendQueue;
-}
-
-#pragma mark JS Bridge Management
-
-- (NSInteger)invokeNative:(NSString *)instanceId tasks:(NSArray *)tasks callback:(NSString __unused*)callback
-{
-    WXAssertBridgeThread();
-    
-    if (!instanceId || !tasks) {
-        WX_MONITOR_FAIL(WXMTNativeRender, WX_ERR_JSFUNC_PARAM, @"JS call Native params error!");
-        return 0;
-    }
-
-    WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-    if (!instance) {
-        WXLogInfo(@"instance already destroyed, task ignored");
-        return -1;
-    }
-    
-    NSTimeInterval startTime = CACurrentMediaTime()*1000;
-    
-    for (NSDictionary *task in tasks) {
-        NSString *methodName = task[@"method"];
-        NSArray *arguments = task[@"args"];
-        if (task[@"component"]) {
-            NSString *ref = task[@"ref"];
-            WXComponentMethod *method = [[WXComponentMethod alloc] initWithComponentRef:ref methodName:methodName arguments:arguments instance:instance];
-            [method invoke];
-        } else {
-            NSString *moduleName = task[@"module"];
-            NSDictionary *options = task[@"options"];
-            WXModuleMethod *method = [[WXModuleMethod alloc] initWithModuleName:moduleName methodName:methodName arguments:arguments options:options instance:instance];
-            [method invoke];
-        }
-    }
-    
-    [self performSelector:@selector(_sendQueueLoop) withObject:nil];
-    if (!instance.isJSCreateFinish) {
-        NSTimeInterval diff = CACurrentMediaTime()*1000-startTime;
-        instance.performance.fsCallNativeNum++;
-        instance.performance.fsCallNativeTime =  instance.performance.fsCallNativeTime + diff;
-    }
-    if (instance && !instance.apmInstance.isFSEnd) {
-        NSTimeInterval diff = CACurrentMediaTime()*1000 - startTime;
-        [instance.apmInstance updateFSDiffStats:KEY_PAGE_STATS_FS_CALL_NATIVE_NUM withDiffValue:1];
-        [instance.apmInstance updateFSDiffStats:KEY_PAGE_STATS_FS_CALL_NATIVE_TIME withDiffValue:diff];
-    }
-    return 1;
-}
-
-- (void)createInstance:(NSString *)instanceIdString
-              template:(NSString *)jsBundleString
-               options:(NSDictionary *)options
-                  data:(id)data
-{
-    WXAssertBridgeThread();
-    WXAssertParam(instanceIdString);
-	
-	@synchronized(self) {
-		if (![self.insStack containsObject:instanceIdString]) {
-			if ([options[@"RENDER_IN_ORDER"] boolValue]) {
-				[self.insStack addObject:instanceIdString];
-			} else {
-				[self.insStack insertObject:instanceIdString atIndex:0];
-			}
-		}
-	}
-    WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instanceIdString];
-    if (!sdkInstance) {
-        return;
-    }
-    [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_START];
-    
-    //create a sendQueue bind to the current instance
-    NSMutableArray *sendQueue = [NSMutableArray array];
-    [self.sendQueue setValue:sendQueue forKey:instanceIdString];
-
-    if (sdkInstance.dataRender && ![options[@"EXEC_JS"] boolValue]) {
-        if (_dataRenderHandler) {
-            WXPerformBlockOnComponentThread(^{
-                [_dataRenderHandler createPage:instanceIdString template:jsBundleString options:options data:data];
-            });
-        }
-        else {
-            WXComponentManager *manager = sdkInstance.componentManager;
-            if (manager.isValid) {
-                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                WXPerformBlockOnComponentThread(^{
-                    [manager renderFailed:error];
-                });
-            }
-        }
-        return;
-    }
-
-    NSArray *args = nil;
-    WX_MONITOR_INSTANCE_PERF_START(WXFirstScreenJSFExecuteTime, [WXSDKManager instanceForID:instanceIdString]);
-    WX_MONITOR_INSTANCE_PERF_START(WXPTJSCreateInstance, [WXSDKManager instanceForID:instanceIdString]);
-
-    NSString * bundleType = [self _pareJSBundleType:instanceIdString jsBundleString:jsBundleString]; // bundleType can be Vue, Rax and the new framework.
-    if (bundleType) {
-        [sdkInstance.apmInstance setProperty:KEY_PAGE_PROPERTIES_BUNDLE_TYPE withValue:bundleType];
-        NSMutableDictionary *newOptions = [options mutableCopy];
-        if (!options) {
-            newOptions = [NSMutableDictionary new];
-        }
-        [newOptions addEntriesFromDictionary:@{@"env":[WXUtility getEnvironment]}];
-        newOptions[@"bundleType"] = bundleType;
-        __block NSString *raxAPIScript = nil;
-        __block NSString *raxAPIScriptPath = nil;
-        id<WXJSFrameworkLoadProtocol> handler = [WXHandlerFactory handlerForProtocol:@protocol(WXJSFrameworkLoadProtocol)];
-        sdkInstance.bundleType = bundleType;
-        if ([bundleType.lowercaseString isEqualToString:@"rax"]) {
-            if (handler && [handler respondsToSelector:@selector(loadRaxFramework:)]) {
-                [handler loadRaxFramework:^(NSString *path, NSString *script) {
-                    raxAPIScriptPath = path;
-                    raxAPIScript = script;
-                }];
-            }
-        }
-        if ([WXDebugTool isDevToolDebug]) {
-            [self callJSMethod:@"createInstanceContext" args:@[instanceIdString, newOptions, data?:@[],raxAPIScript?:@""]];
-            [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
-            
-            if ([NSURL URLWithString:sdkInstance.pageName]) {
-                [sdkInstance.instanceJavaScriptContext executeJavascript:jsBundleString withSourceURL:[NSURL URLWithString:sdkInstance.pageName]];
-            } else {
-                [sdkInstance.instanceJavaScriptContext executeJavascript:jsBundleString];
-            }
-            WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance, [WXSDKManager instanceForID:instanceIdString]);
-            [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_EXECUTE_BUNDLE_END];
-        } else {
-            sdkInstance.callCreateInstanceContext = [NSString stringWithFormat:@"instanceId:%@\noptions:%@\ndata:%@", instanceIdString, newOptions, data];
-            //add instanceId to weexContext ,if fucn createInstanceContext failure ,then we will know which instance has problem (exceptionhandler)
-            self.jsBridge.javaScriptContext[@"wxExtFuncInfo"]= @{
-                                                                 @"func":@"createInstanceContext",
-                                                                 @"arg":@"start",
-                                                                 @"instanceId":sdkInstance.instanceId?:@"unknownId"
-                                                                };
-            __weak typeof(self) weakSelf = self;
-            [self callJSMethod:@"createInstanceContext" args:@[instanceIdString, newOptions, data?:@[]] onContext:nil completion:^(JSValue *instanceContextEnvironment) {
-                if (sdkInstance.pageName) {
-                    [sdkInstance.instanceJavaScriptContext.javaScriptContext setName:sdkInstance.pageName];
-                }
-                weakSelf.jsBridge.javaScriptContext[@"wxExtFuncInfo"]= nil;
-                
-                NSArray* allKeys = [WXUtility extractPropertyNamesOfJSValueObject:instanceContextEnvironment];
-                sdkInstance.createInstanceContextResult = [NSString stringWithFormat:@"%@", allKeys];
-                JSGlobalContextRef instanceContextRef = sdkInstance.instanceJavaScriptContext.javaScriptContext.JSGlobalContextRef;
-                JSObjectRef instanceGlobalObject = JSContextGetGlobalObject(instanceContextRef);
-                
-                for (NSString * key in allKeys) {
-                    JSStringRef propertyName = JSStringCreateWithUTF8CString([key cStringUsingEncoding:NSUTF8StringEncoding]);
-                    if ([key isEqualToString:@"Vue"]) {
-                        JSObjectSetPrototype(instanceContextRef, JSValueToObject(instanceContextRef, [instanceContextEnvironment valueForProperty:key].JSValueRef, NULL), JSObjectGetPrototype(instanceContextRef, instanceGlobalObject));
-                    }
-                    JSObjectSetProperty(instanceContextRef, instanceGlobalObject, propertyName, [instanceContextEnvironment valueForProperty:key].JSValueRef, 0, NULL);
-                }
-                
-                if (WX_SYS_VERSION_LESS_THAN(@"10.2")) {
-                    if (handler && [handler respondsToSelector:@selector(loadPolyfillFramework:)]) {
-                        [handler loadPolyfillFramework:^(NSString *path, NSString *script) {
-                            if (script) {
-                                [sdkInstance.instanceJavaScriptContext executeJavascript:script withSourceURL:[NSURL URLWithString:path]];
-                            } else {
-                                WXLogError(@"weex-pollyfill can not found");
-                            }
-                        }];
-                    }
-                }
-                
-                if (raxAPIScript) {
-                    [sdkInstance.instanceJavaScriptContext executeJavascript:raxAPIScript withSourceURL:[NSURL URLWithString:raxAPIScriptPath]];
-                    NSArray* allKeys = [WXUtility extractPropertyNamesOfJSValueObject:sdkInstance.instanceJavaScriptContext.javaScriptContext.globalObject];
-                    sdkInstance.executeRaxApiResult = [NSString stringWithFormat:@"%@", allKeys];
-                }
-                
-                [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
-                NSDictionary* funcInfo = @{
-                                           @"func":@"createInstance",
-                                           @"arg":@"start",
-                                           @"instanceId":sdkInstance.instanceId?:@"unknownId"
-                                        };
-                sdkInstance.instanceJavaScriptContext.javaScriptContext[@"wxExtFuncInfo"]= funcInfo;
-                if ([NSURL URLWithString:sdkInstance.pageName] || sdkInstance.scriptURL) {
-                    [sdkInstance.instanceJavaScriptContext executeJavascript:jsBundleString withSourceURL:[NSURL URLWithString:sdkInstance.pageName]?:sdkInstance.scriptURL];
-                } else {
-                    [sdkInstance.instanceJavaScriptContext executeJavascript:jsBundleString];
-                }
-                sdkInstance.instanceJavaScriptContext.javaScriptContext[@"wxExtFuncInfo"] = nil;
-                [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_EXECUTE_BUNDLE_END];
-                WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance, [WXSDKManager instanceForID:instanceIdString]);
-            }];
-        }
-        
-    } else {
-        [sdkInstance.apmInstance setProperty:KEY_PAGE_PROPERTIES_BUNDLE_TYPE withValue:@"other"];
-        [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
-        if (data){
-            args = @[instanceIdString, jsBundleString, options ?: @{}, data];
-        } else {
-            args = @[instanceIdString, jsBundleString, options ?: @{}];
-        }
-        NSDictionary* funcInfo = @{
-                                   @"func":@"createInstance",
-                                   @"arg":@"start",
-                                   @"instanceId":sdkInstance.instanceId?:@"unknownId"
-                                   };
-        sdkInstance.instanceJavaScriptContext.javaScriptContext[@"wxExtFuncInfo"] = funcInfo;
-        [self callJSMethod:@"createInstance" args:args];
-        sdkInstance.instanceJavaScriptContext.javaScriptContext[@"wxExtFuncInfo"] = nil;
-        [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_EXECUTE_BUNDLE_END];
-        WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance, [WXSDKManager instanceForID:instanceIdString]);
-    }
-}
-
-- (BOOL) _shouldMountExtInfoToInstanceContxt
-{
-    id configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-    BOOL shouldMountInstanceContextExtInfo = YES;
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-        shouldMountInstanceContextExtInfo = [[configCenter configForKey:@"iOS_weex_ext_config.shouldMountInstanceContextExtInfo" defaultValue:@YES isDefault:NULL] boolValue];
-    }
-    return shouldMountInstanceContextExtInfo;
-}
-
-- (void)createInstance:(NSString *)instanceIdString
-              contents:(NSData *)contents
-               options:(NSDictionary *)options
-                  data:(id)data
-{
-    WXAssertBridgeThread();
-    WXAssertParam(instanceIdString);
-
-    @synchronized(self) {
-        if (![self.insStack containsObject:instanceIdString]) {
-            if ([options[@"RENDER_IN_ORDER"] boolValue]) {
-                [self.insStack addObject:instanceIdString];
-            } else {
-                [self.insStack insertObject:instanceIdString atIndex:0];
-            }
-        }
-    }
-    WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instanceIdString];
-    [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_START];
-
-    //create a sendQueue bind to the current instance
-    NSMutableArray *sendQueue = [NSMutableArray array];
-    [self.sendQueue setValue:sendQueue forKey:instanceIdString];
-
-    if (sdkInstance.dataRender) {
-        if (_dataRenderHandler) {
-            WXPerformBlockOnComponentThread(^{
-                [_dataRenderHandler createPage:instanceIdString contents:contents options:options data:data];
-            });
-        }
-        else {
-            WXComponentManager *manager = sdkInstance.componentManager;
-            if (manager.isValid) {
-                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                WXPerformBlockOnComponentThread(^{
-                    [manager renderFailed:error];
-                });
-            }
-        }
-        return;
-    }
-}
-
-- (NSString *)_pareJSBundleType:(NSString*)instanceIdString jsBundleString:(NSString*)jsBundleString
-{
-    NSString * bundleType = nil;
-    WXSDKInstance * instance = [WXSDKManager instanceForID:instanceIdString];
-    NSURLComponents * urlComponent = [NSURLComponents componentsWithString:instance.pageName?:@""];
-    for (NSURLQueryItem * queryItem in urlComponent.queryItems) {
-        if ([queryItem.name isEqualToString:@"bundleType"] && [@[@"Vue", @"Rax", @"vue", @"rax"] containsObject:queryItem.value]) {
-            bundleType = queryItem.value;
-            return bundleType;
-        }
-    }
-    
-    // find first character that is not space or new line character
-    NSCharacterSet* voidCharSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];
-    NSUInteger length = [jsBundleString length];
-    NSUInteger validCharacter = 0;
-    while (validCharacter < length && [voidCharSet characterIsMember:[jsBundleString characterAtIndex:validCharacter]]) {
-        validCharacter ++;
-    }
-    if (validCharacter >= length) {
-        return bundleType;
-    }
-    @try {
-        jsBundleString = [jsBundleString substringWithRange:NSMakeRange(validCharacter, MIN(100, length - validCharacter))];
-    }
-    @catch (NSException* e) {
-    }
-    if ([jsBundleString length] == 0) {
-        return bundleType;
-    }
-    
-    static NSRegularExpression* headerExp = nil;
-    static NSRegularExpression* vueExp = nil;
-    static NSRegularExpression* raxExp = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        headerExp = [NSRegularExpression regularExpressionWithPattern:@"^\\s*\\/\\/ *(\\{[^}]*\\}) *\\r?\\n" options:NSRegularExpressionCaseInsensitive error:NULL];
-        vueExp = [NSRegularExpression regularExpressionWithPattern:@"(use)(\\s+)(weex:vue)" options:NSRegularExpressionCaseInsensitive error:NULL];
-        raxExp = [NSRegularExpression regularExpressionWithPattern:@"(use)(\\s+)(weex:rax)" options:NSRegularExpressionCaseInsensitive error:NULL];
-    });
-    
-    if ( [self _isParserByRegEx]) {
-        NSTextCheckingResult *match = [headerExp firstMatchInString:jsBundleString options:0 range:NSMakeRange(0, jsBundleString.length)];
-        if (match) {
-            NSString* bundleTypeStr = [jsBundleString substringWithRange:match.range];
-            bundleTypeStr = [bundleTypeStr stringByReplacingOccurrencesOfString:@"//" withString:@""];
-            id vale = [WXUtility objectFromJSON:bundleTypeStr];
-            bundleType = [vale objectForKey:@"framework"];
-        }else{
-            NSTextCheckingResult *match = [vueExp firstMatchInString:jsBundleString options:0 range:NSMakeRange(0, jsBundleString.length)];
-            if (match) {
-                bundleType = [jsBundleString substringWithRange:match.range];
-                return bundleType;
-            }
-            match = [raxExp firstMatchInString:jsBundleString options:0 range:NSMakeRange(0, jsBundleString.length)];
-            if (match) {
-                bundleType = [jsBundleString substringWithRange:match.range];
-            }
-        }
-    }else{
-        if ([jsBundleString hasPrefix:@"// { \"framework\": \"Vue\""] || [jsBundleString hasPrefix:@"// { \"framework\": \"vue\""]) {
-            bundleType = @"Vue";
-        } else if ([jsBundleString hasPrefix:@"// { \"framework\": \"Rax\""] || [jsBundleString hasPrefix:@"// { \"framework\": \"rax\""] || [jsBundleString hasPrefix:@"// {\"framework\" : \"Rax\"}"] || [jsBundleString hasPrefix:@"// {\"framework\" : \"rax\"}"]) {
-            bundleType = @"Rax";
-        }else {
-            NSTextCheckingResult *match = [vueExp firstMatchInString:jsBundleString options:0 range:NSMakeRange(0, jsBundleString.length)];
-            if (match) {
-                bundleType = [jsBundleString substringWithRange:match.range];
-                return bundleType;
-            }
-            match = [raxExp firstMatchInString:jsBundleString options:0 range:NSMakeRange(0, jsBundleString.length)];
-            if (match) {
-                bundleType = [jsBundleString substringWithRange:match.range];
-            }
-        }
-    }
-    return bundleType;
-}
-
-- (bool)_isParserByRegEx
-{
-    return false;
-//    bool useRegEx = true;
-//    id<WXConfigCenterProtocol> configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-//
-//    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-//        useRegEx = [[configCenter configForKey:@"iOS_weex_ext_config.parserTypeByRegEx" defaultValue:@(YES) isDefault:NULL] boolValue];
-//    }
-//    return useRegEx;
-}
-
-- (void)destroyInstance:(NSString *)instance
-{
-    WXAssertBridgeThread();
-    WXAssertParam(instance);
-    
-    //remove this instance exception history
-    [WXExceptionUtils removeExceptionHistory:instance];
-
-    //remove instance from stack
-	@synchronized(self) {
-		[self.insStack removeObject:instance];
-	}
-    
-    if(_jsBridge && [_jsBridge respondsToSelector:@selector(removeTimers:)]){
-        [_jsBridge removeTimers:instance];
-    }
-
-    if(self.sendQueue[instance]){
-        [self.sendQueue removeObjectForKey:instance];
-    }
-    
-    WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instance];
-    if (sdkInstance.dataRender) {
-        if (_dataRenderHandler) {
-            WXPerformBlockOnComponentThread(^{
-                [_dataRenderHandler destroyDataRenderInstance:instance];
-                WXPerformBlockOnBridgeThreadForInstance(^{
-                    [self callJSMethod:@"destroyInstance" args:@[instance]];
-                }, instance);
-            });
-        }
-        else {
-            WXComponentManager *manager = sdkInstance.componentManager;
-            if (manager.isValid) {
-                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                WXPerformBlockOnComponentThread(^{
-                    [manager renderFailed:error];
-                });
-            }
-        }
-    } else {
-        [self callJSMethod:@"destroyInstance" args:@[instance]];
-    }
-}
-
-- (void)forceGarbageCollection
-{
-    if ([self.jsBridge respondsToSelector:@selector(garbageCollect)]) {
-        [self.jsBridge garbageCollect];
-    }
-}
-
-- (void)refreshInstance:(NSString *)instance
-                   data:(id)data
-{
-    WXAssertBridgeThread();
-    WXAssertParam(instance);
-    
-    if (!data) return;
-    
-    WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instance];
-    if (sdkInstance.dataRender) {
-        if (!_dataRenderHandler) {
-            WXComponentManager *manager = sdkInstance.componentManager;
-            if (manager.isValid) {
-                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                WXPerformBlockOnComponentThread(^{
-                    [manager renderFailed:error];
-                });
-            }
-            return;
-        }
-        WXPerformBlockOnComponentThread(^{
-            if ([data isKindOfClass:[NSDictionary class]]) {
-                [_dataRenderHandler refreshDataRenderInstance:instance data:[WXUtility JSONString:data]];
-            } else if ([data isKindOfClass:[NSString class]]) {
-                [_dataRenderHandler refreshDataRenderInstance:instance data:data];
-            }
-        });
-        [[WXSDKManager bridgeMgr] callJSMethod:@"callJS" args:@[instance, @[@{@"method":@"fireEvent", @"args":@[@"", @"refresh", [WXUtility objectFromJSON:@"[]"], @"", @{@"params":@[@{@"data":data}]}]}]]];
-    } else {
-        [self callJSMethod:@"refreshInstance" args:@[instance, data]];
-    }
-}
-
-- (void)updateState:(NSString *)instance data:(id)data
-{
-    WXAssertBridgeThread();
-    WXAssertParam(instance);
-    
-    //[self.jsBridge callJSMethod:@"updateState" args:@[instance, data]];
-}
-
-- (void)executeJsFramework:(NSString *)script
-{
-    WXAssertBridgeThread();
-    WXAssertParam(script);
-    
-    WX_MONITOR_PERF_START(WXPTFrameworkExecute);
-
-    [self.jsBridge executeJSFramework:script];
-    
-    WX_MONITOR_PERF_END(WXPTFrameworkExecute);
-    
-    if ([self.jsBridge exception]) {
-        NSString *exception = [[self.jsBridge exception] toString];
-        NSMutableString *errMsg = [NSMutableString stringWithFormat:@"[WX_KEY_EXCEPTION_SDK_INIT_JSFM_INIT_FAILED] %@",exception];
-        [WXExceptionUtils commitCriticalExceptionRT:@"WX_KEY_EXCEPTION_SDK_INIT" errCode:[NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_SDK_INIT] function:@"" exception:errMsg extParams:nil];
-        WX_MONITOR_FAIL(WXMTJSFramework, WX_ERR_JSFRAMEWORK_EXECUTE, errMsg);
-    } else {
-        WX_MONITOR_SUCCESS(WXMTJSFramework);
-        //the JSFramework has been load successfully.
-        self.frameworkLoadFinished = YES;
-        
-        [self executeAllJsService];
-        
-        JSValue *frameworkVersion = [self.jsBridge callJSMethod:@"getJSFMVersion" args:nil];
-        if (frameworkVersion && [frameworkVersion isString]) {
-            [WXAppConfiguration setJSFrameworkVersion:[frameworkVersion toString]];
-        }
-        
-        if (script) {
-             [WXAppConfiguration setJSFrameworkLibSize:[script lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];
-        }
-        
-        //execute methods which has been stored in methodQueue temporarily.
-        for (NSDictionary *method in _methodQueue) {
-            [self callJSMethod:method[@"method"] args:method[@"args"]];
-        }
-        
-        [_methodQueue removeAllObjects];
-        
-        WX_MONITOR_PERF_END(WXPTInitalize);
-    };
-}
-
-- (void)executeJsMethod:(WXCallJSMethod *)method
-{
-    WXAssertBridgeThread();
-    
-    if (!method.instance) {
-        WXLogError(@"Instance doesn't exist!");
-        return;
-    }
-    
-    NSMutableArray *sendQueue = self.sendQueue[method.instance.instanceId];
-    if (!sendQueue) {
-        WXLogInfo(@"No send queue for instance:%@, may it has been destroyed so method:%@ is ignored", method.instance, method.methodName);
-        return;
-    }
-    
-    [sendQueue addObject:method];
-    [self performSelector:@selector(_sendQueueLoop) withObject:nil];
-}
-
-- (void)callJSMethod:(NSString *)method args:(NSArray *)args onContext:(id<WXBridgeProtocol>)bridge completion:(void (^)(JSValue * value))completion
-{
-    NSMutableArray *newArg = nil;
-    if (!bridge) {
-        bridge = self.jsBridge;
-    }
-    if (self.frameworkLoadFinished) {
-        newArg = [args mutableCopy];
-        if ([newArg containsObject:completion]) {
-            [newArg removeObject:completion];
-        }
-        WXLogDebug(@"Calling JS... method:%@, args:%@", method, args);
-        if (([bridge isKindOfClass:[WXJSCoreBridge class]]) ||
-            ([bridge isKindOfClass:NSClassFromString(@"WXDebugger") ]) ) {
-            JSValue *value = [bridge callJSMethod:method args:args];
-            if (completion) {
-                completion(value);
-            }
-        } else {
-            [bridge callJSMethod:method args:args];
-        }
-    } else {
-        newArg = [args mutableCopy];
-        if (completion) {
-            [newArg addObject:completion];
-        }
-        [_methodQueue addObject:@{@"method":method, @"args":[newArg copy]}];
-    }
-}
-
-- (JSValue *)excuteJSMethodWithResult:(WXCallJSMethod *)method
-{
-    WXAssertBridgeThread();
-    return  [self.jsBridge callJSMethod:@"callJS" args:@[method.instance.instanceId, @[[method callJSTask]]]];
-}
-
-- (void)executeAllJsService
-{
-    for(NSDictionary *service in _jsServiceQueue) {
-        NSString *script = [service valueForKey:@"script"];
-        NSString *name = [service valueForKey:@"name"];
-        [self executeJsService:script withName:name];
-    }
-    
-    [_jsServiceQueue removeAllObjects];
-}
-
-- (void)executeJsService:(NSString *)script withName:(NSString *)name
-{
-    if(self.frameworkLoadFinished) {
-        WXAssert(script, @"param script required!");
-        if ([self.jsBridge respondsToSelector:@selector(javaScriptContext)]) {
-            NSDictionary* funcInfo = @{
-                                       @"func":@"executeJsService",
-                                       @"arg":name?:@"unsetScriptName"
-                                       };
-            self.jsBridge.javaScriptContext[@"wxExtFuncInfo"] = funcInfo;
-        }
-        [self.jsBridge executeJavascript:script];
-        if ([self.jsBridge respondsToSelector:@selector(javaScriptContext)]) {
-            self.jsBridge.javaScriptContext[@"wxExtFuncInfo"] = nil;
-        }
-        
-        if ([self.jsBridge exception]) {
-            NSString *exception = [[self.jsBridge exception] toString];
-            NSMutableString *errMsg = [NSMutableString stringWithFormat:@"[WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE] name:%@,arg:%@,exception :$@",name,exception];
-            [WXExceptionUtils commitCriticalExceptionRT:@"WX_KEY_EXCEPTION_INVOKE" errCode:[NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_INVOKE] function:@"executeJsService" exception:errMsg extParams:nil];
-            WX_MONITOR_FAIL(WXMTJSService, WX_ERR_JSFRAMEWORK_EXECUTE, errMsg);
-        } else {
-            // success
-        }
-    }else {
-        [_jsServiceQueue addObject:@{
-                                     @"name": name,
-                                     @"script": script
-                                     }];
-    }
-}
-    
-- (void)registerModules:(NSDictionary *)modules
-{
-    WXAssertBridgeThread();
-    
-    if(!modules) return;
-    
-    [self callJSMethod:@"registerModules" args:@[modules]];
-    if (_dataRenderHandler) {
-        WXPerformBlockOnComponentThread(^{
-            [_dataRenderHandler registerModules:modules];
-        });
-    }
-}
-
-- (void)registerComponents:(NSArray *)components
-{
-    WXAssertBridgeThread();
-    
-    if(!components) return;
-    
-    [self callJSMethod:@"registerComponents" args:@[components]];
-    if (_dataRenderHandler) {
-        WXPerformBlockOnComponentThread(^{
-            [_dataRenderHandler registerComponents:components];
-        });
-    }
-}
-
-- (void)callJSMethod:(NSString *)method args:(NSArray *)args
-{
-    if (self.frameworkLoadFinished) {
-        [self.jsBridge callJSMethod:method args:args];
-    }
-    else {
-        [_methodQueue addObject:@{@"method":method, @"args":args}];
-    }
-}
-
-- (void)resetEnvironment
-{
-    [_jsBridge resetEnvironment];
-}
-
-#pragma mark JS Debug Management
-
-- (void)connectToDevToolWithUrl:(NSURL *)url
-{
-    id webSocketBridge = [NSClassFromString(@"WXDebugger") alloc];
-    if(!webSocketBridge || ![webSocketBridge respondsToSelector:NSSelectorFromString(@"connectToURL:")]) {
-        return;
-    } else {
-        SuppressPerformSelectorLeakWarning(
-           [webSocketBridge performSelector:NSSelectorFromString(@"connectToURL:") withObject:url]
-        );
-    }
-}
-
-- (void)connectToWebSocket:(NSURL *)url
-{
-    if (NSClassFromString(@"WXDebugLoggerBridge")) {
-        _devToolSocketBridge = [[NSClassFromString(@"WXDebugLoggerBridge") alloc] initWithURL:url];
-    }
-}
-
-- (void)logToWebSocket:(NSString *)flag message:(NSString *)message
-{
-    [_devToolSocketBridge callJSMethod:@"__logger" args:@[flag, message]];
-}
-
-#pragma mark Private Mehtods
-
-- (void)_sendQueueLoop
-{
-    WXAssertBridgeThread();
-    
-    BOOL hasTask = NO;
-    NSMutableArray *tasks = [NSMutableArray array];
-    NSString *execIns = nil;
-	
-	@synchronized(self) {
-		for (NSString *instance in self.insStack) {
-			NSMutableArray *sendQueue = self.sendQueue[instance];
-			if(sendQueue.count > 0){
-				hasTask = YES;
-				for(WXCallJSMethod *method in sendQueue){
-					[tasks addObject:[method callJSTask]];
-				}
-				[sendQueue removeAllObjects];
-				execIns = instance;
-				break;
-			}
-		}
-	}
-    
-    if ([tasks count] > 0 && execIns) {
-        WXSDKInstance * execInstance = [WXSDKManager instanceForID:execIns];
-        NSTimeInterval start = CACurrentMediaTime()*1000;
-        
-        if (execInstance.instanceJavaScriptContext && execInstance.bundleType) {
-            [self callJSMethod:@"__WEEX_CALL_JAVASCRIPT__" args:@[execIns, tasks] onContext:execInstance.instanceJavaScriptContext completion:nil];
-        } else {
-            [self callJSMethod:@"callJS" args:@[execIns, tasks]];
-        }
-        if (execInstance && !(execInstance.isJSCreateFinish)) {
-            NSTimeInterval diff = CACurrentMediaTime()*1000 - start;
-            execInstance.performance.fsCallJsNum++;
-            execInstance.performance.fsCallJsTime =  execInstance.performance.fsCallJsTime+ diff;
-         }
-        if (execInstance && !execInstance.apmInstance.isFSEnd) {
-             NSTimeInterval diff = CACurrentMediaTime()*1000 - start;
-            [execInstance.apmInstance updateFSDiffStats:KEY_PAGE_STATS_FS_CALL_JS_NUM withDiffValue:1];
-            [execInstance.apmInstance updateFSDiffStats:KEY_PAGE_STATS_FS_CALL_JS_TIME withDiffValue:diff];
-        }
-    }
-    
-    if (hasTask) {
-        [self performSelector:@selector(_sendQueueLoop) withObject:nil];
-    }
-}
-
-+ (void)mountContextEnvironment:(JSContext*)context
-{
-    NSDictionary *data = [WXUtility getEnvironment];
-    context[@"WXEnvironment"] = data;
-    // use latin1 encode also named ISO/IEC_8859-1 more: https://en.wikipedia.org/wiki/ISO/IEC_8859-1
-    // 8-bit single-byte coded graphic character sets as webkit does
-    // https://github.com/WebKit/webkit/blob/master/Source/WebCore/page/Base64Utilities.cpp
-    context[@"btoa"] = ^(JSValue *value ) {
-        NSData *nsdata = [[value toString]
-                          dataUsingEncoding:NSISOLatin1StringEncoding];
-        NSString *base64Encoded = [nsdata base64EncodedStringWithOptions:0];
-        return base64Encoded;
-    };
-    context[@"atob"] = ^(JSValue *value ) {
-        NSData *nsdataFromBase64String = [[NSData alloc]
-                                          initWithBase64EncodedString:[value toString] options:0];
-        NSString *base64Decoded = [[NSString alloc]
-                                   initWithData:nsdataFromBase64String encoding:NSISOLatin1StringEncoding];
-        return base64Decoded;
-    };
-    
-    // Avoid exceptionHandler be recursively invoked and finally cause stack overflow.
-    static BOOL gInExceptionHandler = NO;
-    context.exceptionHandler = ^(JSContext *context, JSValue *exception){
-        if (gInExceptionHandler) {
-            return;
-        }
-        gInExceptionHandler = YES;
-        
-        @try {
-            BOOL tryFindInstanceInfoInGlobalContext = NO;
-            context.exception = exception;
-            NSString *errorCode = [NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_WXBRIDGE];;
-            NSString *bundleUrl = nil;
-            NSString *message = nil;
-            NSDictionary *userInfo = nil;
-            BOOL commitException = YES;
-            WXSDKInstance * instance = nil;
-
-            if (context.instanceId) {
-                // instance page javaScript runtime exception
-                 instance = [WXSDKManager instanceForID:context.instanceId];
-                if (instance) {
-                    // instance already existed
-                    commitException = YES;
-                } else {
-                    // instance already destroyed
-                    commitException = NO;
-                }
-            } else {
-                // weex-main-jsfm.js runtime exception throws
-                message = [NSString stringWithFormat:@"[WX_KEY_EXCEPTION_WXBRIDGE] [%@:%@:%@] %@ js stack: %@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], [exception toString], [exception[@"stack"] toObject]];
-                if (!JSValueIsUndefined(context.JSGlobalContextRef, exception[@"sourceURL"].JSValueRef)) {
-                    bundleUrl = exception[@"sourceURL"].toString;
-                } else {
-                    bundleUrl = @"weex-main-jsfm";
-                }
-                userInfo = [NSDictionary dictionary];
-            }
-            
-            NSDictionary* wxExtFuncInfo = [context[@"wxExtFuncInfo"] toDictionary];
-            NSString* recordFunc = [wxExtFuncInfo objectForKey:@"func"];
-            NSString* recordArg = [wxExtFuncInfo objectForKey:@"arg"];
-            NSString* recordInsstanceId = [wxExtFuncInfo objectForKey:@"instanceId"];
-            if (nil == instance) {
-                instance = [WXSDKManager instanceForID:recordInsstanceId];
-                tryFindInstanceInfoInGlobalContext = nil!= instance;
-            }
-            
-            if(nil != instance && [recordFunc isEqualToString:@"createInstance"] && !instance.apmInstance.hasAddView){
-                errorCode = [NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_EMPTY_SCREEN_JS];
-            }
-
-            if (instance) {
-                bundleUrl = instance.pageName?:([instance.scriptURL absoluteString]?:@"WX_KEY_EXCEPTION_WXBRIDGE");
-                message = [NSString stringWithFormat:@"[WX_KEY_EXCEPTION_WXBRIDGE] exception: %@\n stack:%@",[exception toString],[exception[@"stack"] toObject]];
-                userInfo = @{@"jsMainBundleStringContentLength":instance.userInfo[@"jsMainBundleStringContentLength"]?:@"",
-                             @"jsMainBundleStringContentMd5":instance.userInfo[@"jsMainBundleStringContentMd5"]?:@"",
-                             @"sourceURL":[NSString stringWithFormat:@"%@:%@:%@",exception[@"sourceURL"],exception[@"line"],exception[@"column"]],
-                             @"callCreateInstanceContext":instance.callCreateInstanceContext?:@"",
-                             @"createInstanceContextResult": instance.createInstanceContextResult?:@"",
-                             @"executeRaxApiResult":instance.executeRaxApiResult?:@""
-                             };
-            }
-            
-            if (commitException) {
-                NSMutableDictionary* reportInfo = [[NSMutableDictionary alloc] initWithDictionary:[userInfo mutableCopy]];
-                [reportInfo setObject:context.name?:@"unknownContextName" forKey:@"wxContextName"];
-                
-                WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo alloc] initWithInstanceId:instance.instanceId bundleUrl:bundleUrl errorCode:errorCode functionName:[NSString stringWithFormat:@"func: %@ arg:%@",recordFunc,recordArg]?:@"exceptionHandler" exception:message userInfo:reportInfo];
-                
-                if (nil == instance) {
-                    [WXExceptionUtils commitCriticalExceptionRT:jsExceptionInfo];
-                }else{
-                    [WXExceptionUtils commitCriticalExceptionRT:jsExceptionInfo.instanceId errCode:jsExceptionInfo.errorCode function:jsExceptionInfo.functionName exception:jsExceptionInfo.exception extParams:jsExceptionInfo.userInfo];
-                }
-      
-                WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_JS_EXECUTE, message);
-                if (instance.onJSRuntimeException && !tryFindInstanceInfoInGlobalContext) {
-                    instance.onJSRuntimeException(jsExceptionInfo);
-                }
-            }
-        }
-        @finally {
-            gInExceptionHandler = NO;
-        }
-    };
-    
-    context[@"console"][@"error"] = ^(){
-        [WXBridgeContext handleConsoleOutputWithArgument:[JSContext currentArguments] logLevel:WXLogFlagError];
-    };
-    context[@"console"][@"warn"] = ^(){
-        [WXBridgeContext handleConsoleOutputWithArgument:[JSContext currentArguments] logLevel:WXLogFlagWarning];
-    };
-    context[@"console"][@"info"] = ^(){
-        [WXBridgeContext handleConsoleOutputWithArgument:[JSContext currentArguments] logLevel:WXLogFlagInfo];
-    };
-    context[@"console"][@"debug"] = ^(){
-        [WXBridgeContext handleConsoleOutputWithArgument:[JSContext currentArguments] logLevel:WXLogFlagDebug];
-    };
-    context[@"console"][@"log"] = ^(){
-        [WXBridgeContext handleConsoleOutputWithArgument:[JSContext currentArguments] logLevel:WXLogFlagLog];
-    };
-    context[@"nativeLog"] = ^() {
-        static NSDictionary *levelMap;
-        static dispatch_once_t onceToken;
-        dispatch_once(&onceToken, ^{
-            levelMap = @{
-                         @"__ERROR": @(WXLogFlagError),
-                         @"__WARN": @(WXLogFlagWarning),
-                         @"__INFO": @(WXLogFlagInfo),
-                         @"__DEBUG": @(WXLogFlagDebug),
-                         @"__LOG": @(WXLogFlagLog)
-                         };
-        });
-        NSArray * args = [JSContext currentArguments];
-        NSString * levelStr = [[args lastObject] toString];
-        [WXBridgeContext handleConsoleOutputWithArgument:args logLevel:(WXLogFlag)[levelMap[levelStr] integerValue]];
-    };
-    
-    context[@"extendCallNative"] = ^(JSValue *value ) {
-        return [WXBridgeContext extendCallNative:[value toDictionary]];
-    };
-}
-
-+ (void)handleConsoleOutputWithArgument:(NSArray *)arguments logLevel:(WXLogFlag)logLevel
-{
-    NSMutableString *string = [NSMutableString string];
-    [string appendString:@"jsLog: "];
-    [arguments enumerateObjectsUsingBlock:^(JSValue *jsVal, NSUInteger idx, BOOL *stop) {
-        [string appendFormat:@"%@ ", jsVal];
-        if (idx == arguments.count - 1) {
-            if (logLevel) {
-                if (WXLogFlagWarning == logLevel || WXLogFlagError == logLevel) {
-                    id<WXAppMonitorProtocol> appMonitorHandler = [WXSDKEngine handlerForProtocol:@protocol(WXAppMonitorProtocol)];
-                    if ([appMonitorHandler respondsToSelector:@selector(commitAppMonitorAlarm:monitorPoint:success:errorCode:errorMsg:arg:)]) {
-                        [appMonitorHandler commitAppMonitorAlarm:@"weex" monitorPoint:@"jswarning" success:NO errorCode:@"99999" errorMsg:string arg:[WXSDKEngine topInstance].pageName];
-                    }
-                }
-                WX_LOG(logLevel, @"%@", string);
-            } else {
-                [string appendFormat:@"%@ ", jsVal];
-                WXLogInfo(@"%@", string);
-            }
-        }
-    }];
-}
-
-+(id)extendCallNative:(NSDictionary *)dict
-{
-    if(dict){
-        return [WXExtendCallNativeManager sendExtendCallNativeEvent:dict];
-    }
-    return @(-1);
-}
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h
deleted file mode 100644
index 366efe1..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-@class WXSDKInstance;
-
-@interface WXBridgeMethod : NSObject
-
-@property (nonatomic, strong, readonly) NSString *methodName;
-@property (nonatomic, copy, readonly) NSMutableArray *arguments;
-@property (nonatomic, weak, readonly) WXSDKInstance *instance;
-
-- (instancetype)initWithMethodName:(NSString *)methodName
-                         arguments:(NSArray *)arguments
-                          instance:(WXSDKInstance *)instance;
-
-- (NSInvocation *)invocationWithTarget:(id)target selector:(SEL)selector;
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m
deleted file mode 100644
index f50ad2b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBridgeMethod.h"
-#import "WXSDKInstance.h"
-#import "WXMonitor.h"
-#import "WXAssert.h"
-#import "WXUtility.h"
-#import "WXSDKManager.h"
-#import <objc/runtime.h>
-#import "WXConvert.h"
-
-@implementation WXBridgeMethod
-
-- (instancetype)initWithMethodName:(NSString *)methodName arguments:(NSArray *)arguments instance:(WXSDKInstance *)instance
-{
-    if (self = [super init]) {
-        _methodName = methodName;
-        _arguments = [NSMutableArray arrayWithArray:arguments];
-        _instance = instance;
-    }
-    
-    return self;
-}
-
-- (NSString *)description
-{
-    return [NSString stringWithFormat:@"<%@: %p; instance = %@; method = %@; arguments= %@>", NSStringFromClass([self class]), self, _instance.instanceId, _methodName, _arguments];
-}
-
-//check parameter:NSNumber contains int,float,double;object contains nsarray,nsstring,nsdictionary ;block is block
-//https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html
--(id)parseArgument:(id)obj parameterType:(const char *)parameterType order:(int)order
-{
-#ifdef DEBUG
-    BOOL check = YES;
-#endif
-    if (strcmp(parameterType,@encode(float))==0 || strcmp(parameterType,@encode(double))==0)
-    {
-#ifdef DEBUG
-        check =  [obj isKindOfClass:[NSNumber class]];
-        if(!check){
-            NSLog(@"<%@: %p; instance = %@; method = %@; arguments= %@; the number %d parameter type is not right,it should be float or double>",NSStringFromClass([self class]), self, _instance.instanceId, _methodName, _arguments,order);
-        }
-#endif
-        CGFloat value = [WXConvert CGFloat:obj];
-        return [NSNumber numberWithDouble:value];
-    } else if (strcmp(parameterType,@encode(int))==0) {
-#ifdef DEBUG
-        check =  [obj isKindOfClass:[NSNumber class]];
-        if(!check){
-            NSLog(@"<%@: %p; instance = %@; method = %@; arguments= %@; the number %d parameter type is not right,it should be int>",NSStringFromClass([self class]), self, _instance.instanceId, _methodName, _arguments,order);
-        }
-#endif
-        NSInteger value = [WXConvert NSInteger:obj];
-        return [NSNumber numberWithInteger:value];
-    } else if(strcmp(parameterType,@encode(id))==0) {
-#ifdef DEBUG
-        check =  [obj isKindOfClass:[NSArray class]] || [obj isKindOfClass:[NSDictionary class]] ||[obj isKindOfClass:[NSString class]];
-        if(!check){
-            NSLog(@"<%@: %p; instance = %@; method = %@; arguments= %@ ;the number %d parameter type is not right,it should be array ,map or string>",NSStringFromClass([self class]), self, _instance.instanceId, _methodName, _arguments,order);
-        }
-#endif
-        return obj;
-    } else if(strcmp(parameterType,@encode(typeof(^{})))==0) {
-#ifdef DEBUG
-        check =  [obj isKindOfClass:[NSString class]]; // jsfm pass string if parameter type is block
-        if(!check){
-            NSLog(@"<%@: %p; instance = %@; method = %@; arguments= %@; the number %d parameter type is not right,it should be block>",NSStringFromClass([self class]), self, _instance.instanceId, _methodName, _arguments,order);
-        }
-#endif
-        return obj;
-    }
-    return obj;
-}
-
-- (NSInvocation *)invocationWithTarget:(id)target selector:(SEL)selector
-{
-    WXAssert(target, @"No target for method:%@", self);
-    WXAssert(selector, @"No selector for method:%@", self);
-    
-    NSMethodSignature *signature = [target methodSignatureForSelector:selector];
-    if (!signature) {
-        NSString *errorMessage = [NSString stringWithFormat:@"target:%@, selector:%@ doesn't have a method signature", target, NSStringFromSelector(selector)];
-        WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_INVOKE_NATIVE, errorMessage);
-        return nil;
-    }
-    
-    NSUInteger redundantArgumentCount = 0;
-    NSArray *arguments = _arguments;
-    if (signature.numberOfArguments - 2 < arguments.count) {
-        redundantArgumentCount = arguments.count - (signature.numberOfArguments - 2); // JS provides more arguments than required.
-    }
-    
-    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
-    invocation.target = target;
-    invocation.selector = selector;
-    NSString *instanceId = _instance.instanceId;
-    void **freeList = NULL;
-    
-    NSMutableArray *blockArray = [NSMutableArray array];
-    WX_ALLOC_FLIST(freeList, arguments.count - redundantArgumentCount);
-    for (int i = 0; i < arguments.count - redundantArgumentCount; i ++ ) {
-        id obj = arguments[i];
-        const char *parameterType = [signature getArgumentTypeAtIndex:i + 2];
-        obj = [self parseArgument:obj parameterType:parameterType order:i];
-        static const char *blockType = @encode(typeof(^{}));
-        id argument;
-        if (!strcmp(parameterType, blockType)) {
-            // callback
-            argument = [^void(NSString *result, BOOL keepAlive) {
-                [[WXSDKManager bridgeMgr] callBack:instanceId funcId:(NSString *)obj params:result keepAlive:keepAlive];
-            } copy];
-            
-            // retain block
-            [blockArray addObject:argument];
-            [invocation setArgument:&argument atIndex:i + 2];
-        } else {
-            argument = obj;
-            WX_ARGUMENTS_SET(invocation, signature, i, argument, freeList);
-        }
-    }
-    [invocation retainArguments];
-    WX_FREE_FLIST(freeList, arguments.count - redundantArgumentCount);
-    
-    return invocation;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h
deleted file mode 100644
index d2ecb35..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBridgeMethod.h"
-
-@interface WXCallJSMethod : WXBridgeMethod
-
-- (instancetype)initWithModuleName:(NSString *)moduleName
-                        methodName:(NSString *)methodName
-                         arguments:(NSArray *)arguments
-                          instance:(WXSDKInstance *)instance;
-
-- (NSDictionary *)callJSTask;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m
deleted file mode 100644
index 31b9117..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXCallJSMethod.h"
-
-@implementation WXCallJSMethod
-{
-    NSString *_moduleName;
-}
-
-- (instancetype)initWithModuleName:(NSString *)moduleName
-                        methodName:(NSString *)methodName
-                         arguments:(NSArray *)arguments
-                          instance:(WXSDKInstance *)instance
-{
-    if (self = [super initWithMethodName:methodName arguments:arguments instance:instance]) {
-        _moduleName = moduleName;
-    }
-    
-    return self;
-}
-
-- (NSDictionary *)callJSTask
-{
-    return @{@"module":_moduleName ?: @"",
-             @"method":self.methodName ?: @"",
-             @"args":self.arguments ?: @[]};
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h
deleted file mode 100644
index d44ddcd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBridgeMethod.h"
-@class WXComponent;
-
-@interface WXComponentMethod : WXBridgeMethod
-
-- (instancetype)initWithComponentRef:(NSString *)ref
-                          methodName:(NSString *)methodName
-                           arguments:(NSArray *)arguments
-                            instance:(WXSDKInstance *)instance;
-
-- (void)invoke;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.m
deleted file mode 100644
index 71e8197..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.m
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponentMethod.h"
-#import "WXComponentFactory.h"
-#import "WXComponentManager.h"
-#import "WXSDKInstance.h"
-#import "WXLog.h"
-#import "WXUtility.h"
-
-@implementation WXComponentMethod
-{
-    NSString *_componentName;
-    NSString *_componentRef;
-}
-
-- (instancetype)initWithComponentRef:(NSString *)ref
-                          methodName:(NSString *)methodName
-                           arguments:(NSArray *)arguments
-                            instance:(WXSDKInstance *)instance
-{
-    if (self = [super initWithMethodName:methodName arguments:arguments instance:instance]) {
-        _componentRef = ref;
-    }
-    
-    return self;
-}
-
-- (void)invoke
-{
-    WXPerformBlockOnComponentThread(^{
-        WXComponent *component = [self.instance componentForRef:_componentRef];
-        if (!component) {
-            WXLogError(@"component not found for ref:%@, type:%@", _componentRef, _componentName);
-        }
-        BOOL synchronous = NO;
-        SEL selector = [WXComponentFactory methodWithComponentName:component.type withMethod:self.methodName isSync:&synchronous];
-        NSInvocation * invocation = [self invocationWithTarget:component selector:selector];
-        if (synchronous) {
-            [invocation invoke];
-        }
-        else {
-            WXPerformBlockOnMainThread(^{
-                [invocation invoke];
-            });
-        }
-    });
-    
-    
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h
deleted file mode 100644
index cdd4476..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WXCORE_BRIDGE_PLATFORM_H
-#define WXCORE_BRIDGE_PLATFORM_H
-
-#if defined __cplusplus
-
-#include "core/bridge/platform_bridge.h"
-#include "core/layout/measure_func_adapter.h"
-#include "base/closure.h"
-
-namespace WeexCore
-{
-    class IOSSide : public PlatformBridge::PlatformSide
-    {
-    public:
-        WXCoreSize InvokeMeasureFunction(const char* page_id,
-                                         long render_ptr, float width,
-                                         int width_measure_mode,
-                                         float height,
-                                         int height_measure_mode) override { return WXCoreSize(); };
-        void InvokeLayoutBefore(const char* page_id, long render_ptr) override {};
-        void InvokeLayoutPlatform(const char* page_id, long render_ptr) override;
-        void InvokeLayoutAfter(const char* page_id, long render_ptr,
-                               float width, float height) override {};
-        
-        void TriggerVSync(const char* page_id) override;
-        
-        void SetJSVersion(const char* version) override;
-        
-        void ReportException(const char* pageId, const char *func, const char *exception_string) override;
-        void ReportServerCrash(const char* instance_id) override {};
-        void ReportNativeInitStatus(const char* status_code,
-                                    const char* error_msg) override {};
-        
-        int CallNative(const char* pageId, const char *task, const char *callback) override;
-        
-        std::unique_ptr<ValueWithType> CallNativeModule(const char* pageId, const char *module, const char *method,
-                               const char *arguments, int argumentsLength, const char *options, int optionsLength) override;
-        
-        void CallNativeComponent(const char* pageId, const char* ref, const char *method,
-                                 const char *arguments, int argumentsLength, const char *options, int optionsLength) override;
-        std::unique_ptr<ValueWithType> RegisterPluginModule(const char *name, const char *class_name, const char *version) override;
-        std::unique_ptr<ValueWithType> RegisterPluginComponent(const char *name, const char *class_name, const char *version) override;
-        void SetTimeout(const char* callbackID, const char* time) override ;
-        
-        void NativeLog(const char* str_array) override ;
-        
-        int UpdateFinish(const char* page_id, const char* task, int taskLen,
-                         const char* callback, int callbackLen) override;
-        
-        int RefreshFinish(const char* pageId, const char *task, const char *callback) override;
-        
-        int AddEvent(const char* pageId, const char* ref, const char *event) override;
-        
-        int RemoveEvent(const char* pageId, const char* ref, const char *event) override;
-        
-        int CreateBody(const char* pageId, const char *componentType, const char* ref,
-                           std::map<std::string, std::string> *styles,
-                           std::map<std::string, std::string> *attributes,
-                           std::set<std::string> *events,
-                           const WXCoreMargin &margins,
-                           const WXCorePadding &paddings,
-                           const WXCoreBorderWidth &borders) override;
-        
-        int AddElement(const char* pageId, const char *componentType, const char* ref,
-                           int &index, const char* parentRef,
-                           std::map<std::string, std::string> *styles,
-                           std::map<std::string, std::string> *attributes,
-                           std::set<std::string> *events,
-                           const WXCoreMargin &margins,
-                           const WXCorePadding &paddings,
-                           const WXCoreBorderWidth &borders,
-                           bool willLayout= true) override;
-        
-        int Layout(const char* pageId, const char* ref,
-                       float top, float bottom, float left, float right,
-                       float height, float width, bool isRTL, int index) override;
-        
-        int UpdateStyle(const char* pageId, const char* ref,
-                            std::vector<std::pair<std::string, std::string>> *style,
-                            std::vector<std::pair<std::string, std::string>> *margin,
-                            std::vector<std::pair<std::string, std::string>> *padding,
-                            std::vector<std::pair<std::string, std::string>> *border) override;
-        
-        int UpdateAttr(const char* pageId, const char* ref,
-                           std::vector<std::pair<std::string, std::string>> *attrs) override;
-        
-        int CreateFinish(const char* pageId) override;
-        
-        int RenderSuccess(const char* pageId) override;
-        
-        int RemoveElement(const char* pageId, const char* ref) override;
-        
-        int MoveElement(const char* pageId, const char* ref, const char* parentRef, int index) override;
-        
-        int AppendTreeCreateFinish(const char* pageId, const char* ref) override;
-    
-        int HasTransitionPros(const char* pageId, const char* ref,
-                                          std::vector<std::pair<std::string, std::string>> *style) override;
-        void PostMessage(const char* vm_id, const char* data, int dataLength) override {};
-        void DispatchMessage(const char* client_id,
-                             const char* data, int dataLength, const char* callback, const char* vm_id) override {};
-        
-        std::unique_ptr<WeexJSResult> DispatchMessageSync(const char* client_id, const char* data,
-                                                          int dataLength, const char* vm_id) override {
-            return std::unique_ptr<WeexJSResult>();
-        }
-        
-        void OnReceivedResult(long callback_id, std::unique_ptr<WeexJSResult>& result) override {};
-
-        void PostTaskOnComponentThread(const weex::base::Closure closure) override;
-    };
-    
-    class WXCoreMeasureFunctionBridge : public MeasureFunctionAdapter
-    {
-    public:
-        WXCoreSize Measure(const char* page_id, long render_ptr, float width, MeasureMode widthMeasureMode,
-                           float height, MeasureMode heightMeasureMode);
-        
-        void LayoutBefore(const char* page_id, long render_ptr);
-        
-        void LayoutAfter(const char* page_id, long render_ptr, float width, float height);
-    };
-}
-
-#endif
-
-#import <Foundation/Foundation.h>
-
-// For Objective-C use
-
-// Bridge for custom page like Heron
-@interface WXCustomPageBridge : NSObject
-
-+ (instancetype)sharedInstance;
-
-+ (BOOL)isCustomPage:(NSString*)pageId;
-
-+ (NSSet<NSString*>*)getAvailableCustomRenderTypes;
-
-+ (UIView*)createPageRootView:(NSString*)pageId pageType:(NSString*)pageType frame:(CGRect)frame;
-
-- (void)invalidatePage:(NSString*)pageId;
-
-- (void)removePage:(NSString*)pageId;
-
-- (void)callCreateBody:(NSString*)pageId data:(NSDictionary*)data;
-
-- (void)callAddElement:(NSString*)pageId parentRef:(NSString*)parentRef data:(NSDictionary*)data index:(int)index;
-
-- (void)callRemoveElement:(NSString*)pageId ref:(NSString*)ref;
-
-- (void)callMoveElement:(NSString*)pageId ref:(NSString*)ref parentRef:(NSString*)parentRef index:(int)index;
-
-- (void)callUpdateAttrs:(NSString*)pageId ref:(NSString*)ref data:(NSDictionary*)data;
-
-- (void)callUpdateStyle:(NSString*)pageId ref:(NSString*)ref data:(NSDictionary*)data;
-
-- (void)callAddEvent:(NSString*)pageId ref:(NSString*)ref event:(NSString*)event;
-
-- (void)callRemoveEvent:(NSString*)pageId ref:(NSString*)ref event:(NSString*)event;
-
-- (void)callCreateFinish:(NSString*)pageId;
-
-- (void)callRefreshFinish:(NSString*)pageId;
-
-- (void)callUpdateFinish:(NSString*)pageId;
-
-- (BOOL)forwardCallNativeModuleToCustomPage:(NSString*)pageId
-                                 moduleName:(NSString*)moduleName methodName:(NSString*)methodName
-                                  arguments:(NSArray*)arguments options:(NSDictionary*)options
-                                returnValue:(id*)returnValue;
-
-- (void)forwardCallComponentToCustomPage:(NSString*)pageId
-                                     ref:(NSString*)ref
-                              methodName:(NSString*)methodName
-                               arguments:(NSArray*)arguments
-                                 options:(NSDictionary*)options;
-
-@end
-
-// Bridge for WeexCore
-@interface WXCoreBridge : NSObject
-
-+ (void)install;
-
-+ (void)setDefaultDimensionIntoRoot:(NSString*)pageId width:(CGFloat)width height:(CGFloat)height
-                 isWidthWrapContent:(BOOL)isWidthWrapContent
-                isHeightWrapContent:(BOOL)isHeightWrapContent;
-
-// Set/Get GLOBAL device size which will affect all pages
-+ (void)setDeviceSize:(CGSize)size;
-+ (CGSize)getDeviceSize;
-
-// DO NOT call this method directly, you should use WXSDKInstance
-+ (void)setViewportWidth:(NSString*)pageId width:(CGFloat)width;
-
-// DO NOT call this method directly, you should use WXSDKInstance
-+ (void)setPageRequired:(NSString *)pageId width:(CGFloat)width height:(CGFloat)height;
-
-+ (void)layoutPage:(NSString*)pageId forced:(BOOL)forced;
-
-+ (void)closePage:(NSString*)pageId;
-
-+ (BOOL)reloadPageLayout:(NSString*)pageId;
-
-+ (void)layoutRenderObject:(void*)object size:(CGSize)size page:(NSString*)pageId;
-
-+ (void*)copyRenderObject:(void*)source replacedRef:(NSString*)ref;
-
-+ (void)addChildRenderObject:(void*)child toParent:(void*)parent;
-
-+ (void)removeRenderObjectFromMap:(NSString*)pageId object:(void*)object;
-
-+ (void)callAddElement:(NSString*)pageId parentRef:(NSString*)parentRef data:(NSDictionary*)data index:(int)index;
-
-+ (void)callCreateBody:(NSString*)pageId data:(NSDictionary*)data;
-
-+ (void)callRemoveElement:(NSString*)pageId ref:(NSString*)ref;
-
-+ (void)callMoveElement:(NSString*)pageId ref:(NSString*)ref parentRef:(NSString*)parentRef index:(int)index;
-
-+ (void)callUpdateAttrs:(NSString*)pageId ref:(NSString*)ref data:(NSDictionary*)data;
-
-+ (void)callUpdateStyle:(NSString*)pageId ref:(NSString*)ref data:(NSDictionary*)data;
-
-+ (void)callAddEvent:(NSString*)pageId ref:(NSString*)ref event:(NSString*)event;
-
-+ (void)callRemoveEvent:(NSString*)pageId ref:(NSString*)ref event:(NSString*)event;
-
-+ (void)callCreateFinish:(NSString*)pageId;
-
-+ (void)callRefreshFinish:(NSString*)pageId;
-
-+ (void)callUpdateFinish:(NSString*)pageId;
-
-+ (void)registerComponentAffineType:(NSString *)type asType:(NSString *)baseType;
-
-+ (BOOL)isComponentAffineType:(NSString *)type asType:(NSString *)baseType;
-
-+ (void)registerCoreEnv:(NSString*)key withValue:(NSString*)value;
-
-+ (void)setPageArgument:(NSString*)pageId key:(NSString*)key value:(NSString*)value;
-
-+ (BOOL)isKeepingRawCssStyles:(NSString*)pageId;
-
-@end
-
-#endif
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm
deleted file mode 100644
index 9c95482..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm
+++ /dev/null
@@ -1,1791 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSDKError.h"
-#import "WXCoreBridge.h"
-#import "JSValue+Weex.h"
-#import "WXSDKManager.h"
-#import "WXComponentManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXLog.h"
-#import "WXBridgeProtocol.h"
-#import "WXUtility.h"
-#import "WXAssert.h"
-#import "WXAppConfiguration.h"
-#import "WXConvertUtility.h"
-#import "WXSDKEngine.h"
-#import "WXAppMonitorProtocol.h"
-#import "WXComponentMethod.h"
-#import "WXExceptionUtils.h"
-#import "WXModuleFactory.h"
-#import "WXComponentFactory.h"
-#include "base/core_constants.h"
-#include "base/time_utils.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/render/manager/render_manager.h"
-#include "core/render/target/render_target.h"
-#include "core/render/page/render_page.h"
-#include "core/render/page/render_page_custom.h"
-#include "core/render/node/render_object.h"
-#include "core/render/node/render_list.h"
-#include "core/render/node/factory/render_type.h"
-#include "core/render/node/factory/render_creator.h"
-#include "core/config/core_environment.h"
-#include "core/bridge/platform/core_side_in_platform.h"
-#include "core/bridge/script/core_side_in_script.h"
-#include "core/network/http_module.h"
-
-#import <objc/runtime.h>
-#include <fstream>
-
-namespace WeexCore
-{    
-    static void consoleWithArguments(NSArray *arguments, WXLogFlag logLevel)
-    {
-        NSMutableString *jsLog = [NSMutableString string];
-        [jsLog appendString:@"jsLog: "];
-        [arguments enumerateObjectsUsingBlock:^(NSString *jsVal, NSUInteger idx, BOOL *stop) {
-            if (idx == arguments.count - 1) {
-                if (logLevel) {
-                    if (WXLogFlagWarning == logLevel || WXLogFlagError == logLevel) {
-                        id<WXAppMonitorProtocol> appMonitorHandler = [WXSDKEngine handlerForProtocol:@protocol(WXAppMonitorProtocol)];
-                        if ([appMonitorHandler respondsToSelector:@selector(commitAppMonitorAlarm:monitorPoint:success:errorCode:errorMsg:arg:)]) {
-                            [appMonitorHandler commitAppMonitorAlarm:@"weex" monitorPoint:@"jswarning" success:NO errorCode:@"99999" errorMsg:jsLog arg:[WXSDKEngine topInstance].pageName];
-                        }
-                    }
-                    WX_LOG(logLevel, @"%@", jsLog);
-                }
-                else {
-                    [jsLog appendFormat:@"%@ ", jsVal];
-                    WXLogInfo(@"%@", jsLog);
-                }
-            }
-            else {
-                [jsLog appendFormat:@"%@ ", jsVal];
-            }
-        }];
-    }
-    
-    static void MergeBorderWidthValues(NSMutableDictionary* dict,
-                                       const WXCoreBorderWidth & borders,
-                                       bool isUpdate, float pixelScaleFactor)
-    {
-        if (pixelScaleFactor <= 0) {
-            pixelScaleFactor = 1.0f;
-        }
-        if (borders.getBorderWidth(kBorderWidthTop) != (float)0.0f || isUpdate) {
-            dict[@"borderTopWidth"] = @(borders.getBorderWidth(kBorderWidthTop) / pixelScaleFactor);
-        }
-        if (borders.getBorderWidth(kBorderWidthLeft) != (float)0.0f || isUpdate) {
-            dict[@"borderLeftWidth"] = @(borders.getBorderWidth(kBorderWidthLeft) / pixelScaleFactor);
-        }
-        if (borders.getBorderWidth(kBorderWidthBottom) != (float)0.0f || isUpdate) {
-            dict[@"borderBottomWidth"] = @(borders.getBorderWidth(kBorderWidthBottom) / pixelScaleFactor);
-        }
-        if (borders.getBorderWidth(kBorderWidthRight) != (float)0.0f || isUpdate) {
-            dict[@"borderRightWidth"] = @(borders.getBorderWidth(kBorderWidthRight) / pixelScaleFactor);
-        }
-    }
-
-    static void MergeBorderWidthValues(NSMutableDictionary* dict,
-                                       std::vector<std::pair<std::string, std::string>>* borders,
-                                       float pixelScaleFactor)
-    {
-        if (borders == nullptr) {
-            return;
-        }
-        if (pixelScaleFactor <= 0) {
-            pixelScaleFactor = 1.0f;
-        }
-        
-        for (auto& p : *borders) {
-            dict[NSSTRING(p.first.c_str())] = @(atof(p.second.c_str()) / pixelScaleFactor);
-        }
-    }
-
-    void IOSSide::SetJSVersion(const char* version)
-    {
-        NSString *jsVersion = NSSTRING(version);
-        if (jsVersion.length > 0) {
-            [WXAppConfiguration setJSFrameworkVersion:jsVersion];
-        }
-    }
-    
-    void IOSSide::ReportException(const char *page_id, const char *func, const char *exception)
-    {
-        do {
-            WXSDKInstance *instance = [WXSDKManager instanceForID:NSSTRING(page_id)];
-            if (!instance) {
-                break;
-            }
-            WXSDKErrCode errorCode = WX_ERR_JS_EXECUTE;
-            BOOL is_render_failed = NO;
-            if (func && (strcmp(func, "CreatePageWithContent") == 0 || strcmp(func, "UpdateComponentData") == 0)) {
-                errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                WXComponentManager *manager = instance.componentManager;
-                if (manager.isValid) {
-                    NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":[NSString stringWithUTF8String:exception], @"exception function:":@(func)}];
-                    [manager renderFailed:error];
-                }
-                is_render_failed = YES;
-            }
-            NSString *bundleUrl = instance.pageName ? : ([instance.scriptURL absoluteString] ? : @"WX_KEY_EXCEPTION_WXBRIDGE");
-            NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init];
-            [userInfo setObject:instance.userInfo[@"jsMainBundleStringContentLength"] ? : @"" forKey:@"jsMainBundleStringContentLength"];
-            [userInfo setObject:instance.userInfo[@"jsMainBundleStringContentMd5"] ? : @"" forKey:@"jsMainBundleStringContentMd5"];
-            WXJSExceptionInfo *jsException = [[WXJSExceptionInfo alloc] initWithInstanceId:instance.instanceId bundleUrl:bundleUrl errorCode: [NSString stringWithFormat:@"%d", errorCode] functionName:func ? [NSString stringWithUTF8String:func] :@"exceptionHandler" exception:exception ? [NSString stringWithUTF8String:exception] : @"unkown" userInfo:userInfo];
-            [WXExceptionUtils commitCriticalExceptionRT:jsException.instanceId errCode:jsException.errorCode function:jsException.functionName exception:jsException.exception extParams:jsException.userInfo];
-            if (!is_render_failed && instance.onJSRuntimeException) {
-                instance.onJSRuntimeException(jsException);
-            }
-            
-        } while (0);
-        
-    }
-    
-    int IOSSide::CallNative(const char* pageId, const char *task, const char *callback)
-    {
-        // should not enter this function
-        assert(false);
-    }
-    
-    static WeexByteArray *generator_bytes_array(const char *str, size_t len) {
-        auto *result = (WeexByteArray *)malloc(len + sizeof(WeexByteArray));
-        do {
-            if (!result) {
-                break;
-            }
-            memset(result, 0, len + sizeof(WeexByteArray));
-            result->length = static_cast<uint32_t>(len);
-            memcpy(result->content, str, len);
-            result->content[len] = '\0';
-            
-        } while (0);
-        
-        return result;
-    }
-    std::unique_ptr<ValueWithType> IOSSide::RegisterPluginComponent(const char *pcstr_name, const char *pcstr_class_name, const char *pcstr_version) {
-        ValueWithType *returnValue = new ValueWithType();
-        memset(returnValue, 0, sizeof(ValueWithType));
-        returnValue->type = ParamsType::VOID;
-        do {
-            if (!pcstr_class_name) {
-                break;
-            }
-            NSString *className = [NSString stringWithUTF8String:pcstr_class_name];
-            Class clazz = NSClassFromString(className);
-            if (!clazz) {
-                break;
-            }
-            if (!pcstr_name) {
-                break;
-            }
-            NSDictionary *properties = @{ @"append" : @"tree" };
-            NSString *name = [NSString stringWithUTF8String:pcstr_name];
-            [WXComponentFactory registerComponent:name withClass:clazz withPros:properties];
-            NSMutableDictionary *info = [WXComponentFactory componentMethodMapsWithName:name];
-            if (![info isKindOfClass:[NSDictionary class]]) {
-                break;
-            }
-            NSArray *methods = info[@"methods"];
-            if (![methods isKindOfClass:[NSArray class]] || !methods.count) {
-                break;
-            }
-            info[@"type"] = name;
-            NSMutableDictionary *props = [properties mutableCopy];
-            [props addEntriesFromDictionary:info];
-            NSString *componentsInfo = [WXUtility JSONString:@[props]];
-            if (componentsInfo.length > 0) {
-                returnValue->type = ParamsType::BYTEARRAYSTRING;
-                const char *pcstr_utf8 = [componentsInfo UTF8String];
-                returnValue->value.byteArray = generator_bytes_array(pcstr_utf8, componentsInfo.length);
-            }
-            
-        } while (0);
-        
-        return std::unique_ptr<ValueWithType>(returnValue);
-    }
-    
-    std::unique_ptr<ValueWithType> IOSSide::RegisterPluginModule(const char *pcstr_name, const char *pcstr_class_name, const char *pcstr_version) {
-        ValueWithType *returnValue = new ValueWithType();
-        memset(returnValue, 0, sizeof(ValueWithType));
-        returnValue->type = ParamsType::VOID;
-        do {
-            if (!pcstr_class_name) {
-                break;
-            }
-            NSString *className = [NSString stringWithUTF8String:pcstr_class_name];
-            Class clazz = NSClassFromString(className);
-            if (!clazz) {
-                break;
-            }
-            if (!pcstr_name) {
-                break;
-            }
-            NSString *name = [NSString stringWithUTF8String:pcstr_name];
-            NSString *moduleName = [WXModuleFactory registerModule:name withClass:clazz];
-            if (!moduleName.length) {
-                break;
-            }
-            NSDictionary *moduleInfo = [WXModuleFactory moduleMethodMapsWithName:moduleName];
-            if (!moduleInfo || ![moduleInfo isKindOfClass:[NSDictionary class]]) {
-                break;
-            }
-            NSString *setting = [WXUtility JSONString:moduleInfo];
-            if (setting.length > 0) {
-                returnValue->type = ParamsType::BYTEARRAYSTRING;
-                const char *pcstr_utf8 = [setting UTF8String];
-                returnValue->value.byteArray = generator_bytes_array(pcstr_utf8, setting.length);
-            }
-
-        } while (0);
-        
-        return std::unique_ptr<ValueWithType>(returnValue);
-    }
-    std::unique_ptr<ValueWithType> IOSSide::CallNativeModule(const char *page_id, const char *module, const char *method, const char *args, int args_length, const char *options, int options_length)
-    {
-        ValueWithType *returnValue = new ValueWithType();
-        memset(returnValue, 0, sizeof(ValueWithType));
-        returnValue->type = ParamsType::VOID;
-        // should not enter this function
-        do {
-            NSString *instanceId = NSSTRING(page_id);
-            WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-            if (!instance) {
-                break;
-            }
-            NSString *moduleName = [NSString stringWithUTF8String:module];
-            NSString *methodName = [NSString stringWithUTF8String:method];
-            NSArray *newArguments;
-            if (args && args_length > 0) {
-                NSString *arguments = [NSString stringWithUTF8String:args];
-                newArguments = [WXUtility objectFromJSON:arguments];
-            }
-            LOGD("CallNativeModule:[%s]:[%s]=>%s \n", module, method, args);
-            WXModuleMethod *method = [[WXModuleMethod alloc] initWithModuleName:moduleName methodName:methodName arguments:newArguments options:nil instance:instance];
-            NSInvocation *invocation = [method invoke];
-            if (!invocation) {
-                break;
-            }
-            const char *returnType = [invocation.methodSignature methodReturnType];
-            switch (returnType[0] == _C_CONST ? returnType[1] : returnType[0]) {
-                case _C_VOID: {
-                    // 1.void
-                    returnValue->type = ParamsType::VOID;
-                    break;
-                }
-                case _C_ID: {
-                    // 2.id
-                    void *value;
-                    [invocation getReturnValue:&value];
-                    id object = (__bridge id)value;
-                    if ([object isKindOfClass:[NSString class]]) {
-                        returnValue->type = ParamsType::BYTEARRAYSTRING;
-                        const char *pcstr_utf8 = [(NSString *)object UTF8String];
-                        returnValue->value.byteArray = generator_bytes_array(pcstr_utf8, ((NSString *)object).length);
-                    }
-                    if ([object isKindOfClass:[NSDictionary class]] || [object isKindOfClass:[NSArray class]]) {
-                        NSString *jsonString = [WXUtility JSONString:object];
-                        returnValue->type = ParamsType::BYTEARRAYJSONSTRING;
-                        returnValue->value.byteArray = generator_bytes_array(jsonString.UTF8String, jsonString.length);
-                    }
-                    break;
-                }
-#define WX_MODULE_INT32_VALUE_RET_CASE(ctype, ttype) \
-case ctype: {                         \
-ttype value;                          \
-[invocation getReturnValue:&value];   \
-returnValue->type = ParamsType::INT32; \
-returnValue->value.int32Value = value; \
-break; \
-}
-#define WX_MODULE_INT64_VALUE_RET_CASE(ctype, ttype) \
-case ctype: {                         \
-ttype value;                          \
-[invocation getReturnValue:&value];   \
-returnValue->type = ParamsType::INT64; \
-returnValue->value.int64Value = value; \
-break; \
-}
-                // 3.number
-                WX_MODULE_INT32_VALUE_RET_CASE(_C_CHR, char)
-                WX_MODULE_INT32_VALUE_RET_CASE(_C_UCHR, unsigned char)
-                WX_MODULE_INT32_VALUE_RET_CASE(_C_SHT, short)
-                WX_MODULE_INT32_VALUE_RET_CASE(_C_USHT, unsigned short)
-                WX_MODULE_INT32_VALUE_RET_CASE(_C_INT, int)
-                WX_MODULE_INT32_VALUE_RET_CASE(_C_UINT, unsigned int)
-                WX_MODULE_INT32_VALUE_RET_CASE(_C_BOOL, BOOL)
-                WX_MODULE_INT64_VALUE_RET_CASE(_C_LNG, long)
-                WX_MODULE_INT64_VALUE_RET_CASE(_C_ULNG, unsigned long)
-                WX_MODULE_INT64_VALUE_RET_CASE(_C_LNG_LNG, long long)
-                WX_MODULE_INT64_VALUE_RET_CASE(_C_ULNG_LNG, unsigned long long)
-                case _C_FLT:
-                {
-                    float value;
-                    [invocation getReturnValue:&value];
-                    returnValue->type = ParamsType::FLOAT;
-                    returnValue->value.floatValue = value;
-                    break;
-                }
-                case _C_DBL:
-                {
-                    double value;
-                    [invocation getReturnValue:&value];
-                    returnValue->type = ParamsType::DOUBLE;
-                    returnValue->value.doubleValue = value;
-                    break;
-                }
-                case _C_STRUCT_B:
-                case _C_CHARPTR:
-                case _C_PTR:
-                case _C_CLASS: {
-                    returnValue->type = ParamsType::JSUNDEFINED;
-                    break;
-                }
-            }
-            
-        } while (0);
-        
-        return std::unique_ptr<ValueWithType>(returnValue);
-    }
-        
-    void IOSSide::CallNativeComponent(const char *page_id, const char *ref, const char *method,
-                                      const char *args, int args_length,
-                                      const char *options, int options_length)
-    {
-        do {
-            NSString *instanceId = NSSTRING(page_id);
-            WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-            if (!instance) {
-                break;
-            }
-            if (!ref || !method) {
-                break;
-            }
-            NSString *componentRef = [NSString stringWithUTF8String:ref];
-            NSString *methodName = [NSString stringWithUTF8String:method];
-            NSArray *newArguments;
-            if (args && args_length > 0) {
-                NSString *arguments = [NSString stringWithUTF8String:args];
-                newArguments = [WXUtility objectFromJSON:arguments];
-            }
-            WXComponentMethod *method = [[WXComponentMethod alloc] initWithComponentRef:componentRef methodName:methodName arguments:newArguments instance:instance];
-            [method invoke];
-            
-        } while (0);
-    }
-
-    void IOSSide::SetTimeout(const char* callbackID, const char* time)
-    {
-        // should not enter this function
-        assert(false);
-    }
-
-    void IOSSide::NativeLog(const char *args)
-    {
-        // should not enter this function
-        do {
-            if (!args) {
-                break;
-            }
-            NSArray *newArguments;
-            if (args) {
-                NSString *arguments = [NSString stringWithUTF8String:args];
-                newArguments = [WXUtility objectFromJSON:arguments];
-            }
-            if (![newArguments isKindOfClass:[NSArray class]] || !newArguments.count) {
-                break;
-            }
-            static NSDictionary *levelMap;
-            static dispatch_once_t onceToken;
-            dispatch_once(&onceToken, ^{
-                levelMap = @{@"__ERROR": @(WXLogFlagError),
-                          @"__WARN": @(WXLogFlagWarning),
-                          @"__INFO": @(WXLogFlagInfo),
-                          @"__DEBUG": @(WXLogFlagDebug),
-                          @"__LOG": @(WXLogFlagLog)};
-            });
-            NSString *levelStr = [newArguments lastObject];
-            consoleWithArguments(newArguments, (WXLogFlag)[levelMap[levelStr] integerValue]);
-            
-        } while (0);
-    }
-    
-    void IOSSide::TriggerVSync(const char* page_id)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(page_id);
-        if (page == nullptr) {
-            return;
-        }
-        
-        NSString* ns_instanceId = NSSTRING(page_id);
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return;
-        }
-        [manager startComponentTasks];
-    }
-        
-    int IOSSide::UpdateFinish(const char* page_id, const char* task, int taskLen,
-                                   const char* callback, int callbackLen)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(page_id);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        NSString* ns_instanceId = NSSTRING(page_id);
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager updateFinish];
-
-        return 0;
-    }
-        
-    int IOSSide::RefreshFinish(const char* pageId, const char *task, const char *callback)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager refreshFinish];
-        
-        return 0;
-    }
-        
-    int IOSSide::AddEvent(const char* pageId, const char* ref, const char *event)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-        NSString* ns_event = NSSTRING(event);
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: addEvent ref:%@", ns_ref);
-#endif
-        
-        WXComponentManager *manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager addEvent:ns_event toComponent:ns_ref];
-
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-        
-    int IOSSide::RemoveEvent(const char* pageId, const char* ref, const char *event)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-        NSString* ns_event = NSSTRING(event);
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action :removeEvent ref:%@", ns_ref);
-#endif
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager removeEvent:ns_event fromComponent:ns_ref];
-    
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-        
-    int IOSSide::CreateBody(const char* pageId, const char *componentType, const char* ref,
-                                     std::map<std::string, std::string> *styles,
-                                     std::map<std::string, std::string> *attributes,
-                                     std::set<std::string> *events,
-                                     const WXCoreMargin &margins,
-                                     const WXCorePadding &paddings,
-                                     const WXCoreBorderWidth &borders)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        RenderObject* renderObject = page->GetRenderObject(ref);
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-        NSString* ns_type = NSSTRING(componentType);
-        NSMutableDictionary* ns_styles = NSDICTIONARY(styles);
-        NSDictionary* ns_attributes = NSDICTIONARY(attributes);
-        NSArray* ns_events = NSARRAY(events);
-        
-        WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:ns_instanceId];
-        MergeBorderWidthValues(ns_styles, borders, false, sdkInstance.pixelScaleFactor);
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: createBody %@ ref:%@", ns_type, ns_ref);
-#endif
-        
-        WXComponentManager* manager = sdkInstance.componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager createBody:ns_ref type:ns_type styles:ns_styles attributes:ns_attributes events:ns_events renderObject:renderObject];
-        
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-        
-    int IOSSide::AddElement(const char* pageId, const char *componentType, const char* ref,
-                           int &index, const char* parentRef,
-                           std::map<std::string, std::string> *styles,
-                           std::map<std::string, std::string> *attributes,
-                           std::set<std::string> *events,
-                           const WXCoreMargin &margins,
-                           const WXCorePadding &paddings,
-                           const WXCoreBorderWidth &borders,
-                           bool willLayout)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        RenderObject* renderObject = page->GetRenderObject(ref);
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_componentType = NSSTRING(componentType);
-        NSString* ns_ref = NSSTRING(ref);
-        NSString* ns_parentRef = NSSTRING(parentRef);
-        NSMutableDictionary* ns_styles = NSDICTIONARY(styles);
-        NSDictionary* ns_attributes = NSDICTIONARY(attributes);
-        NSArray* ns_events = NSARRAY(events);
-        NSInteger ns_index = index;
-        
-        WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:ns_instanceId];
-        MergeBorderWidthValues(ns_styles, borders, false, sdkInstance.pixelScaleFactor);
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: addElement : %@", ns_componentType);
-#endif
-        
-        WXComponentManager* manager = sdkInstance.componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        
-        [manager startComponentTasks];
-        [manager addComponent:ns_ref type:ns_componentType parentRef:ns_parentRef styles:ns_styles attributes:ns_attributes events:ns_events index:ns_index renderObject:renderObject];
-
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-    
-    int IOSSide::Layout(const char* pageId, const char* ref,
-                       float top, float bottom, float left, float right,
-                       float height, float width, bool isRTL, int index)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        RenderObject* renderObject = page->GetRenderObject(ref);
-        if (renderObject->getContext() == nullptr) {
-            return -1;
-        }
-        WXComponent* component = (__bridge WXComponent *)(renderObject->getContext());
-        NSString* ns_instanceId = NSSTRING(pageId);
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        CGRect frame = CGRectMake(isnan(WXRoundPixelValue(left))?0:WXRoundPixelValue(left),
-                                  isnan(WXRoundPixelValue(top))?0:WXRoundPixelValue(top),
-                                  isnan(WXRoundPixelValue(width))?0:WXRoundPixelValue(width),
-                                  isnan(WXRoundPixelValue(height))?0:WXRoundPixelValue(height));
-        [manager layoutComponent:component frame:frame isRTL:isRTL innerMainSize:renderObject->getLargestMainSize()];
-
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-    
-    void IOSSide::InvokeLayoutPlatform(const char* page_id, long render_ptr)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(page_id);
-        if (page == nullptr) {
-            return;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        RenderObject* renderObject = reinterpret_cast<RenderObject*>(render_ptr);
-        if (renderObject->getContext() == nullptr) {
-            return;
-        }
-        WXComponent* component = (__bridge WXComponent *)(renderObject->getContext());
-        NSString* ns_instanceId = NSSTRING(page_id);
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return;
-        }
-        
-        [manager layoutComponent:component];
-
-        page->CallBridgeTime(getCurrentTime() - startTime);
-    }
-    
-    int IOSSide::UpdateStyle(const char* pageId, const char* ref,
-                            std::vector<std::pair<std::string, std::string>> *style,
-                            std::vector<std::pair<std::string, std::string>> *margin,
-                            std::vector<std::pair<std::string, std::string>> *padding,
-                            std::vector<std::pair<std::string, std::string>> *border)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-        NSMutableDictionary* ns_style = NSDICTIONARY(style);
-        
-        WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:ns_instanceId];
-        MergeBorderWidthValues(ns_style, border, sdkInstance.pixelScaleFactor);
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: updateStyles ref:%@, styles:%@", ns_ref, ns_style);
-#endif
-        
-        WXComponentManager* manager = sdkInstance.componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        
-        [manager startComponentTasks];
-        [manager updateStyles:ns_style forComponent:ns_ref];
-        
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-        
-    int IOSSide::UpdateAttr(const char* pageId, const char* ref,
-                           std::vector<std::pair<std::string, std::string>> *attrs)
-    {
-        if (attrs == nullptr) {
-            return 0;
-        }
-        if (attrs->size() == 0) {
-            return 0;
-        }
-        
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-        NSDictionary* ns_attributes = NSDICTIONARY(attrs);
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: updateAttrs ref:%@, attr:%@", ns_ref, ns_attributes);
-#endif
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager updateAttributes:ns_attributes forComponent:ns_ref];
-
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-        
-    int IOSSide::CreateFinish(const char* pageId)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: createFinish :%@", ns_instanceId);
-#endif
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager createFinish];
-
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-    
-    int IOSSide::RenderSuccess(const char* pageId)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: renderFinish :%@", ns_instanceId);
-#endif
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager renderFinish];
-        
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-        
-    int IOSSide::RemoveElement(const char* pageId, const char* ref)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: removeElement ref:%@", ns_ref);
-#endif
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        
-        [manager startComponentTasks];
-        [manager removeComponent:ns_ref];
-        
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-        
-    int IOSSide::MoveElement(const char* pageId, const char* ref, const char* parentRef, int index)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-        NSString* ns_parentRef = NSSTRING(parentRef);
-        NSInteger ns_index = index;
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> action: moveElement, ref:%@ to ref:%@", ns_ref, ns_parentRef);
-#endif
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        
-        [manager startComponentTasks];
-        [manager moveComponent:ns_ref toSuper:ns_parentRef atIndex:ns_index];
-        
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-        
-    int IOSSide::AppendTreeCreateFinish(const char* pageId, const char* ref)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        [manager startComponentTasks];
-        [manager appendTreeCreateFinish:ns_ref];
-        
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return 0;
-    }
-    
-    int IOSSide::HasTransitionPros(const char* pageId, const char* ref,
-                              std::vector<std::pair<std::string, std::string>> *style)
-    {
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page == nullptr) {
-            return -1;
-        }
-        
-        long long startTime = getCurrentTime();
-        
-        NSString* ns_instanceId = NSSTRING(pageId);
-        NSString* ns_ref = NSSTRING(ref);
-        
-        WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-        if (!manager.isValid) {
-            return -1;
-        }
-        
-        // if transition is none, return directly, avoiding convert style
-        if ([manager isTransitionNoneOfComponent:ns_ref]) {
-            return 0;
-        }
-        
-        int result = [manager hasTransitionPropertyInStyles:NSDICTIONARY(style) forComponent:ns_ref] ? 1 : 0;
-        
-        page->CallBridgeTime(getCurrentTime() - startTime);
-        return result;
-    }
-
-    void IOSSide::PostTaskOnComponentThread(const weex::base::Closure closure) {
-        WXPerformBlockOnComponentThread(^{
-            closure();
-        });
-    }
-
-#pragma mark - Layout Impl
-    
-    WXCoreSize WXCoreMeasureFunctionBridge::Measure(const char* page_id, long render_ptr, float width, MeasureMode widthMeasureMode, float height, MeasureMode heightMeasureMode)
-    {
-        // should not enter this function
-        assert(false);
-    }
-    
-    void WXCoreMeasureFunctionBridge::LayoutBefore(const char* page_id, long render_ptr)
-    {
-        
-    }
-    
-    void WXCoreMeasureFunctionBridge::LayoutAfter(const char* page_id, long render_ptr, float width, float height)
-    {
-        
-    }
-    
-#pragma mark - Log Bridge
-    
-    class LogBridgeIOS: public LogBridge {
-    public:
-        virtual void log(LogLevel level, const char* tag, const char* file, unsigned long line, const char* log) override {
-#ifdef DEBUG
-            switch (level) {
-                case LogLevel::Error:
-                    printf("<%s:Error|%s:%lu> %s\n", tag, file, line, log);
-                    break;
-                case LogLevel::Warn:
-                    printf("<%s:Warn|%s:%lu> %s\n", tag, file, line, log);
-                    break;
-                case LogLevel::Info:
-                    printf("<%s:Info|%s:%lu> %s\n", tag, file, line, log);
-                    break;
-                case LogLevel::Debug:
-                    printf("<%s:Debug|%s:%lu> %s\n", tag, file, line, log);
-                    break;
-                default:
-                    break;
-            }
-#else
-            WXLogFlag wxLogLevel;
-            switch (level) {
-                case LogLevel::Error:
-                    wxLogLevel = WXLogFlagError;
-                    break;
-                case LogLevel::Warn:
-                    wxLogLevel = WXLogFlagWarning;
-                    break;
-                case LogLevel::Info:
-                    wxLogLevel = WXLogFlagInfo;
-                    break;
-                default:
-                    wxLogLevel = WXLogFlagDebug;
-                    break;
-            }
-            
-            [WXLog devLog:wxLogLevel file:file line:line format:@"<%s> %s", tag, log];
-#endif
-        }
-    };
-}
-
-@interface WXCustomPageBridge()
-{
-    std::mutex _customPageLock;
-    std::map<std::string, WeexCore::RenderPageCustom*> _customPages;
-    
-    WeexCore::RenderPageCustom* _lastPage;
-}
-
-@end
-
-@implementation WXCustomPageBridge
-
-+ (instancetype)sharedInstance
-{
-    static dispatch_once_t onceToken;
-    static WXCustomPageBridge* instance;
-    dispatch_once(&onceToken, ^{
-        instance = [[WXCustomPageBridge alloc] init];
-    });
-    return instance;
-}
-
-+ (BOOL)isCustomPage:(NSString*)pageId
-{
-    return [pageId integerValue] % 2 != 0;
-}
-
-+ (NSSet<NSString*>*)getAvailableCustomRenderTypes
-{
-    NSMutableSet<NSString*>* result = [[NSMutableSet alloc] init];
-    for (const std::string& s : WeexCore::RenderTargetManager::sharedInstance()->getAvailableTargetNames()) {
-        [result addObject:NSSTRING(s.c_str())];
-    }
-    return result;
-}
-
-+ (UIView*)createPageRootView:(NSString*)pageId pageType:(NSString*)pageType frame:(CGRect)frame
-{
-    auto target = WeexCore::RenderTargetManager::sharedInstance()->getRenderTarget([pageType UTF8String]?:"");
-    if (target) {
-        return (__bridge UIView*)((void*)(target->createRootView([pageId UTF8String]?:"", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height)));
-    }
-    return nil;
-}
-
-+ (void)parseRenderObject:(NSDictionary *)data
-                parentRef:(const std::string&)parentRef
-                    index:(int)index
-                genObject:(void(^)(const std::string& ref,
-                                   const std::string& type,
-                                   const std::string& parentRef,
-                                   std::map<std::string, std::string>* styles,
-                                   std::map<std::string, std::string>* attrs,
-                                   std::set<std::string>* events,
-                                   int index))onGenObject
-{
-    const char* type = [data[@"type"] UTF8String];
-    const char* ref = [data[@"ref"] UTF8String];
-    if (type != nullptr && ref != nullptr) {
-        std::map<std::string, std::string>* styles = new std::map<std::string, std::string>();
-        std::map<std::string, std::string>* attrs = new std::map<std::string, std::string>();
-        std::set<std::string>* events = new std::set<std::string>();
-        
-        [data[@"attr"] enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-            ConvertToCString(obj, ^(const char * value) {
-                if (value != nullptr) {
-                    (*attrs)[[key UTF8String]] = value;
-                }
-            });
-        }];
-        
-        [data[@"style"] enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-            ConvertToCString(obj, ^(const char * value) {
-                if (value != nullptr) {
-                    (*styles)[[key UTF8String]] = value;
-                }
-            });
-        }];
-        
-        for (id obj in data[@"event"]) {
-            ConvertToCString(obj, ^(const char * value) {
-                if (value != nullptr) {
-                    events->insert(value);
-                }
-            });
-        }
-        
-        std::string thisRef = ref;
-        std::string thisType = type;
-        onGenObject(thisRef, thisType, parentRef, styles, attrs, events, index);
-        
-        // parse children
-        int childIndex = 0;
-        for (NSDictionary* obj in data[@"children"]) {
-            [self parseRenderObject:obj parentRef:thisRef index:childIndex ++ genObject:onGenObject];
-        }
-    }
-}
-
-+ (std::vector<std::pair<std::string, std::string>>*)parseMapValuePairs:(NSDictionary *)data
-{
-    std::vector<std::pair<std::string, std::string>>* result = new std::vector<std::pair<std::string, std::string>>();
-    [data enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-        ConvertToCString(obj, ^(const char * value) {
-            if (value != nullptr) {
-                result->emplace_back([key UTF8String], value);
-            }
-        });
-    }];
-    return result;
-}
-
-- (WeexCore::RenderPageCustom*)getPage:(NSString*)pageId
-{
-    std::lock_guard<std::mutex> lockGuard(_customPageLock);
-    std::string sId = [pageId UTF8String] ?: "";
-    if (_lastPage && _lastPage->page_id() == sId) {
-        // avoid a map search
-        return _lastPage;
-    }
-    auto findPage = _customPages.find([pageId UTF8String] ?: "");
-    _lastPage = findPage == _customPages.end() ? nullptr : findPage->second;
-    return _lastPage;
-}
-
-- (void)invalidatePage:(NSString*)pageId
-{
-    std::lock_guard<std::mutex> lockGuard(_customPageLock);
-    auto findPage = _customPages.find([pageId UTF8String] ?: "");
-    if (findPage != _customPages.end()) {
-        findPage->second->Invalidate();
-    }
-}
-
-- (void)removePage:(NSString*)pageId
-{
-    RenderPageCustom* thePage = nullptr;
-    {
-        std::lock_guard<std::mutex> lockGuard(_customPageLock);
-        auto findPage = _customPages.find([pageId UTF8String] ?: "");
-        if (findPage != _customPages.end()) {
-            thePage = findPage->second;
-            _customPages.erase(findPage);
-        }
-    }
-    
-    if (thePage) {
-        thePage->OnRenderPageClose();
-        delete thePage;
-        _lastPage = nullptr;
-    }
-}
-
-- (void)callCreateBody:(NSString*)pageId data:(NSDictionary*)data
-{
-    using namespace WeexCore;
-    
-    WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:pageId];
-    WXComponentManager* manager = sdkInstance.componentManager;
-    if (!manager.isValid) {
-        return;
-    }
-    
-    std::string sId = [pageId UTF8String] ?: "";
-    if (sId.empty()) {
-        return;
-    }
-    
-    auto pageArgs = RenderManager::GetInstance()->removePageArguments(sId);
-    RenderPageCustom::PageOptions options;
-    
-    options.is_round_off = false;
-    options.view_scale = 1;
-    auto value = WXCoreEnvironment::getInstance()->GetOption("pixel_scale");
-    if (value != "") {
-        options.view_scale = strtof(value.c_str(), NULL);
-    }
-    
-    auto findViewPort = pageArgs.find("viewportwidth");
-    if (findViewPort != pageArgs.end()) {
-        options.viewport_width = strtof(findViewPort->second.c_str(), nullptr);
-    }
-    else {
-        options.viewport_width = kDefaultViewPortWidth;
-    }
-    
-    auto findDeviceWidth = pageArgs.find("devicewidth");
-    if (findDeviceWidth != pageArgs.end()) {
-        options.device_width = strtof(findDeviceWidth->second.c_str(), nullptr);
-    }
-    else {
-        /* For iOS DeviceWidth stored by WeexCore is in UIKit view system coordinate(iPhone6 is 375).
-         So we must provide heron with the pixel device width here. */
-        options.device_width = WXCoreEnvironment::getInstance()->DeviceWidth() * options.view_scale;
-    }
-    
-    std::swap(options.args, pageArgs);
-    
-    RenderPageCustom* page = new RenderPageCustom(sId, "heron", options);
-    
-    {
-        std::lock_guard<std::mutex> lockGuard(_customPageLock);
-        _customPages[sId] = page;
-    }
-    
-    [WXCustomPageBridge parseRenderObject:data parentRef:"" index:0 genObject:^(const std::string &ref, const std::string &type, const std::string &parentRef, std::map<std::string, std::string> *styles, std::map<std::string, std::string> *attrs, std::set<std::string> *events, int index) {
-        if (parentRef.empty()) {
-            // is root body
-            page->CreateBody(ref, type, styles, attrs, events);
-        }
-        else {
-            page->AddRenderObject(ref, type, parentRef, index, styles, attrs, events);
-        }
-    }];
-}
-
-- (void)callAddElement:(NSString*)pageId parentRef:(NSString*)parentRef data:(NSDictionary*)data index:(int)index
-{
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        [WXCustomPageBridge parseRenderObject:data parentRef:[parentRef UTF8String] ?: "" index:index genObject:^(const std::string &ref, const std::string &type, const std::string &parentRef, std::map<std::string, std::string> *styles, std::map<std::string, std::string> *attrs, std::set<std::string> *events, int index) {
-            page->AddRenderObject(ref, type, parentRef, index, styles, attrs, events);
-        }];
-    }
-}
-
-- (void)callRemoveElement:(NSString*)pageId ref:(NSString*)ref
-{
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        page->RemoveRenderObject([ref UTF8String] ?: "");
-    }
-}
-
-- (void)callMoveElement:(NSString*)pageId ref:(NSString*)ref parentRef:(NSString*)parentRef index:(int)index
-{
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        page->MoveRenderObject([ref UTF8String] ?: "", [parentRef UTF8String] ?: "", index);
-    }
-}
-
-- (void)callUpdateAttrs:(NSString*)pageId ref:(NSString*)ref data:(NSDictionary*)data
-{
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        page->UpdateAttr([ref UTF8String] ?: "", [WXCustomPageBridge parseMapValuePairs:data]);
-    }
-}
-
-- (void)callUpdateStyle:(NSString*)pageId ref:(NSString*)ref data:(NSDictionary*)data
-{
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        page->UpdateStyle([ref UTF8String] ?: "", [WXCustomPageBridge parseMapValuePairs:data]);
-    }
-}
-
-- (void)callAddEvent:(NSString*)pageId ref:(NSString*)ref event:(NSString*)event
-{
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        page->AddEvent([ref UTF8String] ?: "", [event UTF8String] ?: "");
-    }
-}
-
-- (void)callRemoveEvent:(NSString*)pageId ref:(NSString*)ref event:(NSString*)event
-{
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        page->RemoveEvent([ref UTF8String] ?: "", [event UTF8String] ?: "");
-    }
-}
-
-- (void)callCreateFinish:(NSString*)pageId
-{
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        page->CreateFinish();
-    }
-}
-
-- (void)callRefreshFinish:(NSString*)pageId
-{
-    // TODO, this may not be correct, for heron may also need to implement refresh finish.
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->RefreshFinish([pageId UTF8String] ?: "", nullptr, nullptr);
-}
-
-- (void)callUpdateFinish:(NSString*)pageId
-{
-    // TODO, this may not be correct, for heron may also need to implement update finish.
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->UpdateFinish([pageId UTF8String] ?: "", nullptr, 0, nullptr, 0);
-}
-
-- (BOOL)forwardCallNativeModuleToCustomPage:(NSString*)pageId
-                                 moduleName:(NSString*)moduleName methodName:(NSString*)methodName
-                                  arguments:(NSArray*)arguments options:(NSDictionary*)options
-                                returnValue:(id*)returnValue
-{
-    using namespace WeexCore;
-    
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        RenderTarget* target = page->GetRenderTarget();
-        if (target && target->shouldHandleModuleMethod([moduleName UTF8String] ?: "", [methodName UTF8String] ?: "")) {
-            __block const char* seralizedArguments = nullptr;
-            __block const char* seralizedOptions = nullptr;
-            ConvertToCString(arguments, ^(const char * value) {
-                if (value != nullptr) {
-                    seralizedArguments = strdup(value);
-                }
-            });
-            ConvertToCString(options, ^(const char * value) {
-                if (value != nullptr) {
-                    seralizedOptions = strdup(value);
-                }
-            });
-            
-            bool handled = false;
-            std::unique_ptr<ValueWithType> result = target->callNativeModule([pageId UTF8String] ?: "", [moduleName UTF8String] ?: "", [methodName UTF8String] ?: "", seralizedArguments ?: "", seralizedArguments ? (int)(strlen(seralizedArguments)) : 0, seralizedOptions ?: "", seralizedOptions ? (int)(strlen(seralizedOptions)) : 0, handled);
-            
-            if (seralizedArguments) {
-                free((void*)seralizedArguments);
-            }
-            if (seralizedOptions) {
-                free((void*)seralizedOptions);
-            }
-            
-            if (handled && result) {
-                switch (result->type) {
-                    case ParamsType::INT32:
-                        *returnValue = @(result->value.int32Value);
-                        break;
-                    case ParamsType::INT64:
-                        *returnValue = @(result->value.int64Value);
-                        break;
-                    case ParamsType::FLOAT:
-                        *returnValue = @(result->value.floatValue);
-                        break;
-                    case ParamsType::DOUBLE:
-                        *returnValue = @(result->value.doubleValue);
-                        break;
-                    case ParamsType::JSONSTRING:
-                    {
-                        NSString* s = [NSString stringWithCharacters:(const unichar *)(result->value.string->content) length:result->value.string->length];
-                        free(result->value.string);
-                        
-                        @try {
-                            NSError* error = nil;
-                            id jsonObj = [NSJSONSerialization JSONObjectWithData:[s dataUsingEncoding:NSUTF8StringEncoding]
-                                                                         options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves
-                                                                           error:&error];
-                            
-                            if (jsonObj == nil) {
-                                WXLogError(@"%@", error);
-                                WXAssert(NO, @"Fail to convert json to object. %@", error);
-                            }
-                            else {
-                                *returnValue = jsonObj;
-                            }
-                        } @catch (NSException *exception) {
-                            WXLogError(@"%@", exception);
-                            WXAssert(NO, @"Fail to convert json to object. %@", exception);
-                        }
-                    }
-                        break;
-                    case ParamsType::STRING:
-                        *returnValue = [NSString stringWithCharacters:(const unichar *)(result->value.string->content) length:result->value.string->length];
-                        free(result->value.string);
-                        break;
-                    default:
-                        *returnValue = nil;
-                        break;
-                }
-                return YES;
-            }
-        }
-    }
-    
-    return NO;
-}
-
-- (void)forwardCallComponentToCustomPage:(NSString*)pageId
-                                     ref:(NSString*)ref
-                              methodName:(NSString*)methodName
-                               arguments:(NSArray*)arguments
-                                 options:(NSDictionary*)options
-{
-    using namespace WeexCore;
-    
-    RenderPageCustom* page = [self getPage:pageId];
-    if (page && page->IsValid()) {
-        RenderTarget* target = page->GetRenderTarget();
-        if (target) {
-            __block const char* seralizedArguments = nullptr;
-            __block const char* seralizedOptions = nullptr;
-            ConvertToCString(arguments, ^(const char * value) {
-                if (value != nullptr) {
-                    seralizedArguments = strdup(value);
-                }
-            });
-            ConvertToCString(options, ^(const char * value) {
-                if (value != nullptr) {
-                    seralizedOptions = strdup(value);
-                }
-            });
-            
-            target->callNativeComponent([pageId UTF8String] ?: "", [ref UTF8String] ?: "", [methodName UTF8String] ?: "", seralizedArguments ?: "", seralizedArguments ? (int)(strlen(seralizedArguments)) : 0, seralizedOptions ?: "", seralizedOptions ? (int)(strlen(seralizedOptions)) : 0);
-            
-            if (seralizedArguments) {
-                free((void*)seralizedArguments);
-            }
-            if (seralizedOptions) {
-                free((void*)seralizedOptions);
-            }
-        }
-    }
-}
-
-@end
-
-@implementation WXCoreBridge
-
-static WeexCore::PlatformBridge* platformBridge = nullptr;
-static WeexCore::ScriptBridge* jsBridge = nullptr;
-
-+ (void)install
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        WeexCore::WXCoreEnvironment* env = WeexCore::WXCoreEnvironment::getInstance();
-        env->SetPlatform(OS_iOS);
-        
-        /* For historical reason, layout in weexcore and layout result are in iOS UIView system unit.
-         So we pass 'scale' as 1 to affect nothing.
-         */
-        env->AddOption("scale", "1");
-        env->AddOption("pixel_scale", std::to_string([[UIScreen mainScreen] scale]));
-        
-        CGSize screenSize = [UIScreen mainScreen].bounds.size;
-        env->SetDeviceWidth(std::to_string(screenSize.width));
-        env->SetDeviceHeight(std::to_string(screenSize.height));
-        env->AddOption("screen_width_pixels", std::to_string(screenSize.width));
-        env->AddOption("screen_height_pixels", std::to_string(screenSize.height));
-        
-        WeexCore::WeexCoreManager::Instance()->set_log_bridge(new WeexCore::LogBridgeIOS());
-        
-        platformBridge = new WeexCore::PlatformBridge();
-        platformBridge->set_platform_side(new WeexCore::IOSSide());
-        platformBridge->set_core_side(new WeexCore::CoreSideInPlatform());
-        WeexCore::WeexCoreManager::Instance()->set_platform_bridge(platformBridge);
-        
-        jsBridge = new WeexCore::ScriptBridge();
-        jsBridge->set_core_side(new WeexCore::CoreSideInScript());
-        WeexCore::WeexCoreManager::Instance()->set_script_bridge(jsBridge);
-        
-        WeexCore::WeexCoreManager::Instance()->set_measure_function_adapter(new WeexCore::WXCoreMeasureFunctionBridge());
-    });
-}
-
-+ (void)registerComponentAffineType:(NSString *)type asType:(NSString *)baseType
-{
-    WeexCore::RenderCreator::GetInstance()->RegisterAffineType([type UTF8String] ?: "", [baseType UTF8String] ?: "");
-}
-
-+ (BOOL)isComponentAffineType:(NSString *)type asType:(NSString *)baseType
-{
-    return WeexCore::RenderCreator::GetInstance()->IsAffineType([type UTF8String] ?: "", [baseType UTF8String] ?: "");
-}
-
-+ (void)setDefaultDimensionIntoRoot:(NSString*)pageId width:(CGFloat)width height:(CGFloat)height
-                 isWidthWrapContent:(BOOL)isWidthWrapContent
-                isHeightWrapContent:(BOOL)isHeightWrapContent
-{
-    if (platformBridge) {
-        if (width == 0 && !isWidthWrapContent) {
-            return;
-        }
-        
-        if (height == 0 && !isHeightWrapContent) {
-            return;
-        }
-        
-        platformBridge->core_side()->SetDefaultHeightAndWidthIntoRootDom([pageId UTF8String] ?: "", (float)width, (float)height, (bool)isWidthWrapContent, (bool)isHeightWrapContent);
-    }
-}
-
-+ (void)setDeviceSize:(CGSize)size
-{
-    [WXCoreBridge install];
-    WeexCore::WXCoreEnvironment* env = WeexCore::WXCoreEnvironment::getInstance();
-    env->SetDeviceWidth(std::to_string(size.width));
-    env->SetDeviceHeight(std::to_string(size.height));
-}
-
-+ (CGSize)getDeviceSize
-{
-    [WXCoreBridge install];
-    WeexCore::WXCoreEnvironment* env = WeexCore::WXCoreEnvironment::getInstance();
-    return CGSizeMake(env->DeviceWidth(), env->DeviceHeight());
-}
-
-+ (void)setViewportWidth:(NSString*)pageId width:(CGFloat)width
-{
-    [WXCoreBridge install];
-    if (platformBridge) {
-        platformBridge->core_side()->SetViewPortWidth([pageId UTF8String] ?: "", (float)width);
-    }
-}
-
-+ (void)setPageRequired:(NSString *)pageId width:(CGFloat)width height:(CGFloat)height
-{
-    [WXCoreBridge install];
-    if (platformBridge) {
-        platformBridge->core_side()->SetDeviceDisplayOfPage([pageId UTF8String] ?: "", (float)width, (float)height);
-    }
-}
-
-+ (void)layoutPage:(NSString*)pageId forced:(BOOL)forced
-{
-    if (platformBridge) {
-        const char* page = [pageId UTF8String] ?: "";
-        if (forced) {
-            platformBridge->core_side()->SetPageDirty(page);
-        }
-        
-        if (platformBridge->core_side()->NotifyLayout(page)) {
-            platformBridge->core_side()->ForceLayout(page);
-        }
-    }
-}
-
-+ (void)closePage:(NSString*)pageId
-{
-    if (platformBridge) {
-        platformBridge->core_side()->OnInstanceClose([pageId UTF8String] ?: "");
-    }
-}
-
-+ (BOOL)reloadPageLayout:(NSString*)pageId
-{
-    if (platformBridge) {
-        return platformBridge->core_side()->RelayoutUsingRawCssStyles([pageId UTF8String] ?: "");
-    }
-    return false;
-}
-
-+ (void)_traverseTree:(WeexCore::RenderObject *)render index:(int)index pageId:(const char *)pageId
-{
-    using namespace WeexCore;
-    if (render == nullptr) return;
-
-    if (render->hasNewLayout()) {
-        /* do not call bridge->callLayout because render is not registered to page, so that
-         page->GetRenderObject will not give the correct object. */
-        RenderPageBase *page = RenderManager::GetInstance()->GetPage(pageId);
-        if (page != nullptr) {
-            WXComponent* component = (__bridge WXComponent *)(render->getContext());
-            NSString* ns_instanceId = NSSTRING(pageId);
-            
-            float top = render->getLayoutPositionTop();
-            float left = render->getLayoutPositionLeft();
-            float height = render->getLayoutHeight();
-            float width = render->getLayoutWidth();
-            BOOL isRTL = render->getLayoutDirectionFromPathNode() == WeexCore::kDirectionRTL;
-            WXComponentManager* manager = [WXSDKManager instanceForID:ns_instanceId].componentManager;
-            CGRect frame = CGRectMake(isnan(WXRoundPixelValue(left))?0:WXRoundPixelValue(left),
-                                      isnan(WXRoundPixelValue(top))?0:WXRoundPixelValue(top),
-                                      isnan(WXRoundPixelValue(width))?0:WXRoundPixelValue(width),
-                                      isnan(WXRoundPixelValue(height))?0:WXRoundPixelValue(height));
-            [manager layoutComponent:component frame:frame isRTL:isRTL innerMainSize:render->getLargestMainSize()];
-        }
-        render->setHasNewLayout(false);
-    }
-
-    for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); it ++) {
-        WeexCore::RenderObject *child = static_cast<WeexCore::RenderObject *>(*it);
-        if (child != nullptr) {
-            [self _traverseTree:child index:(int)(it - render->ChildListIterBegin()) pageId:pageId];
-        }
-    }
-}
-
-+ (void)layoutRenderObject:(void*)object size:(CGSize)size page:(NSString*)pageId
-{
-    using namespace WeexCore;
-    RenderObject* render = static_cast<RenderObject*>(object);
-    std::pair<float, float> renderPageSize(size.width, size.height);
-    
-    render->calculateLayout(renderPageSize);
-    [self _traverseTree:render index:0 pageId:[pageId UTF8String] ?: ""];
-}
-
-+ (void*)copyRenderObject:(void*)source replacedRef:(NSString*)ref
-{
-    using namespace WeexCore;
-    RenderObject* sourceObject = static_cast<RenderObject*>(source);
-    RenderObject* copyObject = static_cast<RenderObject*>(RenderCreator::GetInstance()->CreateRender(sourceObject->type(), sourceObject->ref()));
-                                                          
-    copyObject->CopyFrom(sourceObject);
-    if (ref != nil) {
-        copyObject->set_ref([ref UTF8String] ?: "");
-    }
-
-    if (sourceObject->type() == kRenderCellSlot || sourceObject->type() == kRenderCell) {
-        RenderList* renderList = static_cast<RenderList*>(sourceObject->getParent());
-        if (renderList != nullptr) {
-            renderList->AddCellSlotCopyTrack(copyObject);
-        }
-    }
-    return copyObject;
-}
-
-+ (void)addChildRenderObject:(void*)child toParent:(void*)parent
-{
-    (static_cast<WeexCore::RenderObject*>(parent))->AddRenderObject(-1, (static_cast<WeexCore::RenderObject*>(child)));
-}
-
-+ (void)removeRenderObjectFromMap:(NSString*)pageId object:(void*)object
-{
-    using namespace WeexCore;
-    RenderPage* page = static_cast<RenderPage*>(RenderManager::GetInstance()->GetPage([pageId UTF8String] ?: ""));
-    if (page != nullptr) {
-        page->RemoveRenderFromRegisterMap(static_cast<RenderObject*>(object));
-    }
-}
-
-+ (void)_parseStyleBeforehand:(NSDictionary *)styles key:(NSString *)key render:(WeexCore::RenderObject*)render reserveStyles:(bool)reserveStyles
-{
-    id data = styles[key];
-    if (data) {
-        ConvertToCString(data, ^(const char * value) {
-            if (value != nullptr) {
-                render->AddStyle([key UTF8String], value, reserveStyles);
-            }
-        });
-    }
-}
-
-+ (WeexCore::RenderObject*)_parseRenderObject:(NSDictionary *)data parent:(WeexCore::RenderObject *)parent index:(int)index pageId:(const std::string&)pageId reserveStyles:(bool)reserveStyles
-{
-    using namespace WeexCore;
-    
-    const char* type = [data[@"type"] UTF8String];
-    const char* ref = [data[@"ref"] UTF8String];
-    if (type != nullptr && ref != nullptr) {
-        RenderObject* render = (RenderObject *)RenderCreator::GetInstance()->CreateRender(type, ref);
-        render->set_page_id(pageId);
-        if (parent != nullptr){
-            parent->AddRenderObject(index, render);
-        }
-        
-        [data[@"attr"] enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-            ConvertToCString(obj, ^(const char * value) {
-                if (value != nullptr) {
-                    render->AddAttr([key UTF8String], value);
-                }
-            });
-        }];
-        
-        // margin/padding/borderWidth should be handled beforehand. Because maringLeft should override margin.
-        NSDictionary* styles = data[@"style"];
-        [self _parseStyleBeforehand:styles key:@"margin" render:render reserveStyles:reserveStyles];
-        [self _parseStyleBeforehand:styles key:@"padding" render:render reserveStyles:reserveStyles];
-        [self _parseStyleBeforehand:styles key:@"borderWidth" render:render reserveStyles:reserveStyles];
-        [styles enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-            if ([key isEqualToString:@"margin"] || [key isEqualToString:@"padding"] || [key isEqualToString:@"borderWidth"]) {
-                return;
-            }
-            ConvertToCString(obj, ^(const char * value) {
-                if (value != nullptr) {
-                    render->AddStyle([key UTF8String], value, reserveStyles);
-                }
-            });
-        }];
-        
-        for (id obj in data[@"event"]) {
-            ConvertToCString(obj, ^(const char * value) {
-                if (value != nullptr) {
-                    render->AddEvent(value);
-                }
-            });
-        }
-        
-        int childIndex = 0;
-        for (NSDictionary* obj in data[@"children"]) {
-            [self _parseRenderObject:obj parent:render index:childIndex ++ pageId:pageId reserveStyles:reserveStyles];
-        }
-        
-        render->ApplyDefaultStyle(reserveStyles);
-        render->ApplyDefaultAttr();
-        
-        return render;
-    }
-    return nullptr;
-}
-
-+ (std::vector<std::pair<std::string, std::string>>*)_parseMapValuePairs:(NSDictionary *)data
-{
-    std::vector<std::pair<std::string, std::string>>* result = new std::vector<std::pair<std::string, std::string>>();
-    [data enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-        ConvertToCString(obj, ^(const char * value) {
-            if (value != nullptr) {
-                result->emplace_back([key UTF8String], value);
-            }
-        });
-    }];
-    return result;
-}
-
-+ (void)callAddElement:(NSString*)pageId parentRef:(NSString*)parentRef data:(NSDictionary*)data index:(int)index
-{
-    using namespace WeexCore;
-    
-    const std::string page([pageId UTF8String] ?: "");
-    RenderManager::GetInstance()->AddRenderObject(page, [parentRef UTF8String] ?: "", index, [&] (RenderPage* pageInstance) -> RenderObject* {
-        return [self _parseRenderObject:data parent:nullptr index:0 pageId:page reserveStyles:pageInstance->reserve_css_styles()];
-    });
-}
-
-+ (void)callCreateBody:(NSString*)pageId data:(NSDictionary*)data
-{
-    using namespace WeexCore;
-    
-    WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:pageId];
-    WXComponentManager* manager = sdkInstance.componentManager;
-    if (!manager.isValid) {
-        return;
-    }
-    
-    const std::string page([pageId UTF8String] ?: "");
-    RenderManager::GetInstance()->CreatePage(page, [&] (RenderPage* pageInstance) -> RenderObject* {
-        pageInstance->set_before_layout_needed(false); // we do not need before and after layout
-        pageInstance->set_after_layout_needed(false);
-        pageInstance->set_platform_layout_needed(true);
-        return [self _parseRenderObject:data parent:nullptr index:0 pageId:page reserveStyles:pageInstance->reserve_css_styles()];
-    });
-}
-
-+ (void)callRemoveElement:(NSString*)pageId ref:(NSString*)ref
-{
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->RemoveElement([pageId UTF8String] ?: "", [ref UTF8String] ?: "");
-}
-
-+ (void)callMoveElement:(NSString*)pageId ref:(NSString*)ref parentRef:(NSString*)parentRef index:(int)index
-{
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->MoveElement([pageId UTF8String] ?: "", [ref UTF8String] ?: "", [parentRef UTF8String] ?: "", index);
-}
-
-+ (void)callUpdateAttrs:(NSString*)pageId ref:(NSString*)ref data:(NSDictionary*)data
-{
-    WeexCore::RenderManager::GetInstance()->UpdateAttr([pageId UTF8String] ?: "", [ref UTF8String] ?: "", [self _parseMapValuePairs:data]);
-}
-
-+ (void)callUpdateStyle:(NSString*)pageId ref:(NSString*)ref data:(NSDictionary*)data
-{
-    WeexCore::RenderManager::GetInstance()->UpdateStyle([pageId UTF8String] ?: "", [ref UTF8String] ?: "", [self _parseMapValuePairs:data]);
-}
-
-+ (void)callAddEvent:(NSString*)pageId ref:(NSString*)ref event:(NSString*)event
-{
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->AddEvent([pageId UTF8String] ?: "", [ref UTF8String] ?: "", [event UTF8String] ?: "");
-}
-
-+ (void)callRemoveEvent:(NSString*)pageId ref:(NSString*)ref event:(NSString*)event
-{
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->RemoveEvent([pageId UTF8String] ?: "", [ref UTF8String] ?: "", [event UTF8String] ?: "");
-}
-
-+ (void)callCreateFinish:(NSString*)pageId
-{
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->CreateFinish([pageId UTF8String] ?: "");
-}
-
-+ (void)callRefreshFinish:(NSString*)pageId
-{
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->RefreshFinish([pageId UTF8String] ?: "", nullptr, nullptr);
-}
-
-+ (void)callUpdateFinish:(NSString*)pageId
-{
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->core_side()->UpdateFinish([pageId UTF8String] ?: "", nullptr, 0, nullptr, 0);
-}
-
-+ (void)registerCoreEnv:(NSString*)key withValue:(NSString*)value
-{
-    WeexCore::WeexCoreManager::Instance()->getPlatformBridge()->core_side()->RegisterCoreEnv([key UTF8String]?:"", [value UTF8String]?:"");
-}
-
-+ (void)setPageArgument:(NSString*)pageId key:(NSString*)key value:(NSString*)value
-{
-    WeexCore::RenderManager::GetInstance()->setPageArgument([pageId UTF8String]?:"", [key UTF8String]?:"", [value UTF8String]?:"");
-}
-
-+ (BOOL)isKeepingRawCssStyles:(NSString*)pageId
-{
-    RenderPageBase* page = RenderManager::GetInstance()->GetPage([pageId UTF8String] ?: "");
-    if (page == nullptr) {
-        return NO;
-    }
-    return static_cast<RenderPage*>(page)->reserve_css_styles();
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h
deleted file mode 100644
index f0f61e4..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBridgeProtocol.h"
-
-@interface WXJSCoreBridge : NSObject <WXBridgeProtocol>
-
-- (instancetype)init;
-- (instancetype)initWithoutDefaultContext;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.mm
deleted file mode 100644
index 5283bda..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.mm
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXJSCoreBridge.h"
-#import "WXDefine.h"
-#import "WXAssert.h"
-#import "WXLog.h"
-#import "WXDefine.h"
-#import "WXUtility.h"
-#import "WXSDKEngine.h"
-#import "WXSDKError.h"
-#import <sys/utsname.h>
-#import <JavaScriptCore/JavaScriptCore.h>
-#import "JSValue+Weex.h"
-#import "WXSDKManager.h"
-#import "WXExtendCallNativeManager.h"
-#import "WXExceptionUtils.h"
-#import "WXBridgeContext.h"
-#import "WXMonitor.h"
-#import "WXPolyfillSet.h"
-#import "WXAppMonitorProtocol.h"
-#import "JSContext+Weex.h"
-#import "WXCoreBridge.h"
-#import "WXAnalyzerCenter.h"
-
-#import <dlfcn.h>
-
-#import <mach/mach.h>
-
-@interface WXJSCoreBridge ()
-{
-    NSString * _weexInstanceId;
-}
-
-@property (nonatomic, strong)  JSContext *jsContext;
-@property (nonatomic, strong)  NSMutableArray *timers;
-@property (nonatomic, strong)  NSMutableDictionary *intervaltimers;
-@property (nonatomic)  long long intervalTimerId;
-@property (nonatomic, strong)  NSMutableDictionary *callbacks;
-
-@end
-
-@implementation WXJSCoreBridge
-
-- (instancetype)init
-{
-    self = [self initWithoutDefaultContext];
-    [self createDefaultContext];
-    return self;
-}
-
-- (instancetype)initWithoutDefaultContext
-{
-    if (self = [super init]) {
-        _timers = [NSMutableArray new];
-        _callbacks = [NSMutableDictionary new];
-        _intervalTimerId = 0;
-        _intervaltimers = [NSMutableDictionary new];
-    }
-    return self;
-}
-
-- (void)dealloc
-{
-    _jsContext.instanceId = nil;
-    __block JSContext* theContext = _jsContext;
-    WXPerformBlockOnBridgeThreadForInstance(^{
-         theContext = nil; // release the context in js thread to avoid main-thread deadlock
-    }, _weexInstanceId);
-}
-
-- (void)setJSContext:(JSContext *)context
-{
-    _jsContext = context;
-}
-
-- (JSContext *)javaScriptContext
-{
-    return _jsContext;
-}
-
-- (NSString *)weexInstanceId
-{
-    return _weexInstanceId;
-}
-
-- (void)setWeexInstanceId:(NSString *)weexInstanceId
-{
-    _jsContext.instanceId = weexInstanceId;
-    _weexInstanceId = weexInstanceId;
-}
-
-#pragma mark - WXBridgeProtocol
-
-- (void)executeJSFramework:(NSString *)frameworkScript
-{
-    WXAssertParam(frameworkScript);
-    [_jsContext evaluateScript:frameworkScript withSourceURL:[NSURL URLWithString:@"weex-main-jsfm.js"]];
-}
-
-- (JSValue *)callJSMethod:(NSString *)method args:(NSArray *)args
-{
-    WXLogDebug(@"Calling JS... method:%@, args:%@", method, args);
-    return [[_jsContext globalObject] invokeMethod:method withArguments:args];
-}
-
-- (void)registerCallNative:(WXJSCallNative)callNative
-{
-    JSValue* (^callNativeBlock)(JSValue *, JSValue *, JSValue *) = ^JSValue*(JSValue *instance, JSValue *tasks, JSValue *callback){
-        NSString *instanceId = [instance toString];
-        NSArray *tasksArray = [tasks toArray];
-        NSString *callbackId = [callback toString];
-        WXLogDebug(@"Calling native... instance:%@, tasks:%@, callback:%@", instanceId, tasksArray, callbackId);
-        return [JSValue valueWithInt32:(int32_t)callNative(instanceId, tasksArray, callbackId) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callNative"] = callNativeBlock;
-}
-
-- (void)executeJavascript:(NSString *)script
-{
-    WXAssertParam(script);
-    [_jsContext evaluateScript:script];
-}
-
-- (JSValue*)executeJavascript:(NSString *)script withSourceURL:(NSURL*)sourceURL
-{
-    WXAssertParam(script);
-
-    if (sourceURL) {
-        return [_jsContext evaluateScript:script withSourceURL:sourceURL];
-    } else {
-        return [_jsContext evaluateScript:script];
-    }
-}
-
-- (void)registerCallUpdateComponentData:(WXJSCallUpdateComponentData)callUpdateComponentData;
-{
-    id callUpdateComponentDataBlock = ^(JSValue *instanceId, JSValue *cid, JSValue *data, JSValue *ifCallback) {
-        NSString *instanceIdString = [instanceId toString];
-        NSString *componentId = [cid toString];
-        NSDictionary* jsonData = [data toDictionary];
-        NSString* dataString = [WXUtility JSONString:jsonData];
-        WXLogDebug(@"CallUpdateComponentData...%@, %@, %@", instanceIdString, componentId, jsonData);
-
-        return [JSValue valueWithInt32:(int32_t)callUpdateComponentData(instanceIdString, componentId, dataString) inContext:[JSContext currentContext]];
-    };
-
-    _jsContext[@"__updateComponentData"] = callUpdateComponentDataBlock;
-}
-
-- (void)registerCallAddElement:(WXJSCallAddElement)callAddElement
-{
-    id callAddElementBlock = ^(JSValue *instanceId, JSValue *ref, JSValue *element, JSValue *index, JSValue *ifCallback) {
-        
-        NSString *instanceIdString = [instanceId toString];
-        NSDictionary *componentData = [element toDictionary];
-        NSString *parentRef = [ref toString];
-        NSInteger insertIndex = [[index toNumber] integerValue];
-        if (WXAnalyzerCenter.isInteractionLogOpen) {
-            WXLogDebug(@"wxInteractionAnalyzer : [jsengin][addElementStart],%@,%@",instanceIdString,componentData[@"ref"]);
-        }
-        return [JSValue valueWithInt32:(int32_t)callAddElement(instanceIdString, parentRef, componentData, insertIndex) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callAddElement"] = callAddElementBlock;
-}
-
-- (void)registerCallCreateBody:(WXJSCallCreateBody)callCreateBody
-{
-    id WXJSCallCreateBodyBlock = ^(JSValue *instanceId, JSValue *body,JSValue *ifCallback) {
-        
-        NSString *instanceIdString = [instanceId toString];
-        NSDictionary *bodyData = [body toDictionary];
-        
-        WXLogDebug(@"callCreateBody...%@, %@,", instanceIdString, bodyData);
-        return [JSValue valueWithInt32:(int32_t)callCreateBody(instanceIdString, bodyData) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callCreateBody"] = WXJSCallCreateBodyBlock;
-}
-
-- (void)registerCallRemoveElement:(WXJSCallRemoveElement)callRemoveElement
-{
-    id WXJSCallCreateBodyBlock = ^(JSValue *instanceId, JSValue *ref,JSValue *ifCallback) {
-        
-        NSString *instanceIdString = [instanceId toString];
-        NSString *refString = [ref toString];
-        
-        WXLogDebug(@"callRemoveElement...%@, %@,", instanceIdString, refString);
-        return [JSValue valueWithInt32:(int32_t)callRemoveElement(instanceIdString, refString) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callRemoveElement"] = WXJSCallCreateBodyBlock;
-}
-
-- (void)registerCallMoveElement:(WXJSCallMoveElement)callMoveElement
-{
-    id WXJSCallMoveElementBlock = ^(JSValue *instanceId, JSValue *ref,JSValue *parentRef,JSValue *index, JSValue *ifCallback) {
-        
-        NSString *instanceIdString = [instanceId toString];
-        NSString *refString = [ref toString];
-        NSString *parentRefString = [parentRef toString];
-        NSInteger moveIndex = [[index toNumber] integerValue];
-        
-        WXLogDebug(@"callMoveElement...%@, %@,", instanceIdString, refString);
-        return [JSValue valueWithInt32:(int32_t)callMoveElement(instanceIdString, refString, parentRefString, moveIndex) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callMoveElement"] = WXJSCallMoveElementBlock;
-}
-
-- (void)registerCallUpdateAttrs:(WXJSCallUpdateAttrs)callUpdateAttrs
-{
-    id WXJSCallUpdateAttrsBlock = ^(JSValue *instanceId, JSValue *ref,JSValue *attrs, JSValue *ifCallback) {
-        
-        NSString *instanceIdString = [instanceId toString];
-        NSString *refString = [ref toString];
-        NSDictionary *attrsData = [attrs toDictionary];
-        
-        WXLogDebug(@"callUpdateAttrs...%@, %@, %@", instanceIdString, refString,attrsData);
-        return [JSValue valueWithInt32:(int32_t)callUpdateAttrs(instanceIdString, refString,attrsData) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callUpdateAttrs"] = WXJSCallUpdateAttrsBlock;
-}
-
-- (void)registerCallUpdateStyle:(WXJSCallUpdateStyle)callUpdateStyle
-{
-    id WXJSCallUpdateStyleBlock = ^(JSValue *instanceId, JSValue *ref,JSValue *styles, JSValue *ifCallback) {
-        
-        NSString *instanceIdString = [instanceId toString];
-        NSString *refString = [ref toString];
-        NSDictionary *stylessData = [styles toDictionary];
-        
-        WXLogDebug(@"callUpdateStyle...%@, %@, %@", instanceIdString, refString, stylessData);
-        return [JSValue valueWithInt32:(int32_t)callUpdateStyle(instanceIdString, refString,stylessData) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callUpdateStyle"] = WXJSCallUpdateStyleBlock;
-}
-
-- (void)registerCallAddEvent:(WXJSCallAddEvent)callAddEvent
-{
-    id WXJSCallAddEventBlock = ^(JSValue *instanceId, JSValue *ref,JSValue *event, JSValue *ifCallback) {
-        
-        NSString *instanceIdString = [instanceId toString];
-        NSString *refString = [ref toString];
-        NSString *eventString = [event toString];
-        
-        WXLogDebug(@"callAddEvent...%@, %@, %@", instanceIdString, refString, eventString);
-        return [JSValue valueWithInt32:(int32_t)callAddEvent(instanceIdString, refString,eventString) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callAddEvent"] = WXJSCallAddEventBlock;
-}
-
-- (void)registerCallRemoveEvent:(WXJSCallRemoveEvent)callRemoveEvent
-{
-    id WXJSCallRemoveEventBlock = ^(JSValue *instanceId, JSValue *ref,JSValue *event, JSValue *ifCallback) {
-        
-        NSString *instanceIdString = [instanceId toString];
-        NSString *refString = [ref toString];
-        NSString *eventString = [event toString];
-        
-        WXLogDebug(@"callRemoveEvent...%@, %@, %@", instanceIdString, refString,eventString);
-        return [JSValue valueWithInt32:(int32_t)callRemoveEvent(instanceIdString, refString,eventString) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callRemoveEvent"] = WXJSCallRemoveEventBlock;
-}
-    
-- (void)registerCallCreateFinish:(WXJSCallCreateFinish)callCreateFinish
-{
-    id WXJSCallCreateFinishBlock = ^(JSValue *instanceId, JSValue *ifCallback) {
-        NSString *instanceIdString = [instanceId toString];
-        WXLogDebug(@"callCreateFinish...%@", instanceIdString);
-        return [JSValue valueWithInt32:(int32_t)callCreateFinish(instanceIdString) inContext:[JSContext currentContext]];
-    };
-        
-    _jsContext[@"callCreateFinish"] = WXJSCallCreateFinishBlock;
-}
-
-- (void)registerCallRefreshFinish:(WXJSCallRefreshFinish)callRefreshFinish
-{
-    id WXJSCallCreateFinishBlock = ^(JSValue *instanceId, JSValue *ifCallback) {
-        NSString *instanceIdString = [instanceId toString];
-        WXLogDebug(@"callRefreshFinish...%@", instanceIdString);
-        return [JSValue valueWithInt32:(int32_t)callRefreshFinish(instanceIdString) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callRefreshFinish"] = WXJSCallCreateFinishBlock;
-}
-
-- (void)registerCallUpdateFinish:(WXJSCallUpdateFinish)callUpdateFinish
-{
-    id WXJSCallCreateFinishBlock = ^(JSValue *instanceId, JSValue *ifCallback) {
-        NSString *instanceIdString = [instanceId toString];
-        WXLogDebug(@"callUpdateFinish...%@", instanceIdString);
-        return [JSValue valueWithInt32:(int32_t)callUpdateFinish(instanceIdString) inContext:[JSContext currentContext]];
-    };
-    
-    _jsContext[@"callUpdateFinish"] = WXJSCallCreateFinishBlock;
-}
-
-- (void)registerCallNativeModule:(WXJSCallNativeModule)callNativeModuleBlock
-{
-    _jsContext[@"callNativeModule"] = ^JSValue *(JSValue *instanceId, JSValue *moduleName, JSValue *methodName, JSValue *args, JSValue *options) {
-        NSString *instanceIdString = [instanceId toString];
-        NSString *moduleNameString = [moduleName toString];
-        NSString *methodNameString = [methodName toString];
-        NSArray *argsArray = [args toArray];
-        NSDictionary *optionsDic = [options toDictionary];
-        
-        WXLogDebug(@"callNativeModule...%@,%@,%@,%@", instanceIdString, moduleNameString, methodNameString, argsArray);
-        
-        id result = nil;
-        if ([WXCustomPageBridge isCustomPage:instanceIdString]) {
-            if ([[WXCustomPageBridge sharedInstance] forwardCallNativeModuleToCustomPage:instanceIdString moduleName:moduleNameString methodName:methodNameString arguments:argsArray options:optionsDic returnValue:&result]) {
-                return [JSValue valueWithObject:result inContext:[JSContext currentContext]];
-            }
-        }
-        
-        NSInvocation *invocation = callNativeModuleBlock(instanceIdString, moduleNameString, methodNameString, argsArray, optionsDic);
-        JSValue *returnValue = [JSValue wx_valueWithReturnValueFromInvocation:invocation inContext:[JSContext currentContext]];
-        return returnValue;
-    };
-}
-
-- (void)registerCallNativeComponent:(WXJSCallNativeComponent)callNativeComponentBlock
-{
-    _jsContext[@"callNativeComponent"] = ^void(JSValue *instanceId, JSValue *componentName, JSValue *methodName, JSValue *args, JSValue *options) {
-        NSString *instanceIdString = [instanceId toString];
-        NSString *componentNameString = [componentName toString];
-        NSString *methodNameString = [methodName toString];
-        NSArray *argsArray = [args toArray];
-        NSDictionary *optionsDic = [options toDictionary];
-        
-        WXLogDebug(@"callNativeComponent...%@,%@,%@,%@", instanceIdString, componentNameString, methodNameString, argsArray);
-        
-        if ([WXCustomPageBridge isCustomPage:instanceIdString]) {
-            [[WXCustomPageBridge sharedInstance] forwardCallComponentToCustomPage:instanceIdString ref:componentNameString methodName:methodNameString arguments:argsArray options:optionsDic];
-            return;
-        }
-        
-        callNativeComponentBlock(instanceIdString, componentNameString, methodNameString, argsArray, optionsDic);
-    };
-}
-
-- (JSValue*)exception
-{
-    return _jsContext.exception;
-}
-
-- (void)resetEnvironment
-{
-    NSDictionary *data = [WXUtility getEnvironment];
-    _jsContext[@"WXEnvironment"] = data;
-}
-
-//typedef void (*WXJSCGarbageCollect)(JSContextRef);
-
-- (void)garbageCollect
-{
-    // for dev and debug only!!
-//    char str[80];
-//    strcpy(str, "JSSynchron");
-//    strcat(str, "ousGarbageColl");
-//    strcat(str, "ectForDebugging");
-//    WXJSCGarbageCollect garbageCollect = dlsym(RTLD_DEFAULT, str);
-//    
-//    if (garbageCollect != NULL) {
-//        garbageCollect(_jsContext.JSGlobalContextRef);
-//    }
-//    JSGarbageCollect(_jsContext.JSGlobalContextRef);
-}
-
-#pragma mark - Public
--(void)removeTimers:(NSString *)instance
-{
-    // remove timers
-    if([_callbacks objectForKey:instance]){
-        NSMutableArray *arr = [_callbacks objectForKey:instance];
-        if(arr && [arr count]>0){
-            for (NSString *callback in arr) {
-                if([_timers containsObject:callback]){
-                    [_timers removeObject:callback];
-                }
-            }
-        }
-    }
-    // remove intervaltimers
-    if(_intervaltimers && [_intervaltimers objectForKey:instance]){
-        [_intervaltimers removeObjectForKey:instance];
-    }
-}
-
-#pragma mark - Private
-
-- (void)createDefaultContext
-{
-    __weak typeof(self) weakSelf = self;
-    
-    _jsContext = [[JSContext alloc] init];
-    _jsContext.name = @"Weex Context";
-    
-    [WXBridgeContext mountContextEnvironment:_jsContext];
-    
-    _jsContext[@"setTimeout"] = ^(JSValue *function, JSValue *timeout) {
-        // this setTimeout is used by internal logic in JS framework, normal setTimeout called by users will call WXTimerModule's method;
-        [weakSelf performSelector: @selector(triggerTimeout:) withObject:^() {
-            [function callWithArguments:@[]];
-        } afterDelay:[timeout toDouble] / 1000];
-    };
-    
-    _jsContext[@"setTimeoutWeex"] = ^(JSValue *appId, JSValue *ret,JSValue *arg ) {
-        [weakSelf triggerTimeout:[appId toString] ret:[ret toString] arg:[arg toString]];
-    };
-    
-    _jsContext[@"setIntervalWeex"] = ^(JSValue *appId, JSValue *function,JSValue *arg) {
-        return [weakSelf triggerInterval:[appId toString] function:^() {
-            [function callWithArguments:@[]];
-        } arg:[arg toString]];
-    };
-    
-    _jsContext[@"clearIntervalWeex"] = ^(JSValue *appId, JSValue *ret,JSValue *arg) {
-        
-        [weakSelf triggerClearInterval:[appId toString] ret:[[ret toNumber] longLongValue]];
-    };
-    
-    _jsContext[@"clearTimeoutWeex"] = ^(JSValue *ret) {
-        [weakSelf triggerClearTimeout:[ret toString]];
-    };
-}
-
--(void)addInstance:(NSString *)instance callback:(NSString *)callback
-{
-    if(instance.length > 0){
-        if([_callbacks objectForKey:instance]){
-            NSMutableArray *arr = [_callbacks objectForKey:instance];
-            if (callback.length>0 && ![arr containsObject:callback]) {
-                [arr addObject:callback];
-                [_callbacks setObject:arr forKey:instance];
-            }
-        }else {
-            NSMutableArray *arr = [NSMutableArray new];
-            if (callback.length>0 && ![arr containsObject:callback]) {
-                [arr addObject:callback];
-                [_callbacks setObject:arr forKey:instance];
-            }
-        }
-    }
-}
-
-- (void)triggerTimeout:(void(^)(void))block
-{
-    block();
-}
-
-- (void)callBack:(NSDictionary *)dic
-{
-    if([dic objectForKey:@"ret"] && [_timers containsObject:[dic objectForKey:@"ret"]]) {
-        [[WXSDKManager bridgeMgr] callBack:[dic objectForKey:@"appId"] funcId:[dic objectForKey:@"ret"]  params:[dic objectForKey:@"arg"] keepAlive:NO];
-    }
-
-}
-
-
-- (void)callBackInterval:(NSDictionary *)dic
-{
-    if(dic[@"function"] && [dic objectForKey:@"appId"] && [_intervaltimers objectForKey:[dic objectForKey:@"appId"]]){
-        NSMutableArray *timers = [_intervaltimers objectForKey:[dic objectForKey:@"appId"]];
-        void(^block)(void) = ((void(^)(void))dic[@"function"]);
-        if(block && [timers containsObject:[dic objectForKey:@"timerId"]]){
-            block();
-            [self executeInterval:[dic objectForKey:@"appId"] function:block arg:[dic objectForKey:@"arg"] timerId:[[dic objectForKey:@"timerId"] longLongValue]];
-        }
-    }
-}
-
-- (void)triggerTimeout:(NSString *)appId ret:(NSString *)ret arg:(NSString *)arg
-{
-    double interval = [arg doubleValue]/1000.0f;
-    if(WXFloatEqual(interval,0)) {
-        return;
-    }
-    if(![_timers containsObject:ret]){
-        [_timers addObject:ret];
-        [self addInstance:appId callback:ret];
-    }
-    
-    NSMutableDictionary *timeoutInfo = [NSMutableDictionary new];
-    [timeoutInfo setObject:appId forKey:@"appId"];
-    [timeoutInfo setObject:ret forKey:@"ret"];
-    [timeoutInfo setObject:arg forKey:@"arg"];
-    [self performSelector:@selector(callBack:) withObject:timeoutInfo afterDelay:interval inModes:@[NSRunLoopCommonModes]];
-}
-
-- (long long)triggerInterval:(NSString *)appId function:(void(^)(void))block arg:(NSString *)arg
-{
-    double interval = [arg doubleValue]/1000.0f;
-    _intervalTimerId = _intervalTimerId + 1; // timerId must auto-increment.
-    long long timerId = _intervalTimerId;
-    if(WXFloatEqual(interval,0)) {
-        return timerId;
-    }
-    if([_intervaltimers objectForKey:appId]){
-        NSMutableArray *timers = [[_intervaltimers objectForKey:appId] mutableCopy];
-        [timers addObject:@(timerId)];
-        [_intervaltimers setObject:timers forKey:appId];
-    }else {
-        NSMutableArray *timers = [NSMutableArray new];
-        [timers addObject:@(timerId)];
-        [_intervaltimers setObject:timers forKey:appId];
-    }
-    [self executeInterval:appId function:block arg:arg timerId:timerId];
-    return timerId;
-}
-
--(void)executeInterval:(NSString *)appId function:(void(^)(void))block arg:(NSString *)arg timerId:(long long)timerId
-{
-    double interval = [arg doubleValue]/1000.0f;
-    NSMutableDictionary *intervalInfo = [NSMutableDictionary new];
-    [intervalInfo setObject:appId forKey:@"appId"];
-    [intervalInfo setObject:arg forKey:@"arg"];
-    [intervalInfo setObject:@(timerId) forKey:@"timerId"];
-    [intervalInfo setObject:[block copy] forKey:@"function"];
-    [self performSelector:@selector(callBackInterval:) withObject:intervalInfo afterDelay:interval inModes:@[NSRunLoopCommonModes]];
-}
-
-- (void)triggerClearInterval:(NSString *)instanceId ret:(long long)timerId
-{
-    if(_intervaltimers && [_intervaltimers objectForKey:instanceId]){
-        NSMutableArray *timers = [_intervaltimers objectForKey:instanceId];
-        if(timers && [timers containsObject:@(timerId)]){
-            [timers removeObject:@(timerId)];
-        }
-    }
-}
-
-- (void)triggerClearTimeout:(NSString *)ret
-{
-    if([_timers containsObject:ret]){
-        [_timers removeObject:ret];
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h
deleted file mode 100644
index 2e83407..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBridgeMethod.h"
-
-typedef enum : NSUInteger {
-    WXModuleMethodTypeSync,
-    WXModuleMethodTypeAsync,
-} WXModuleMethodType;
-
-@interface WXModuleMethod : WXBridgeMethod
-
-@property (nonatomic, assign) WXModuleMethodType methodType;
-@property (nonatomic, strong, readonly) NSString *moduleName;
-@property (nonatomic, strong, readonly) NSDictionary *options;
-
-- (instancetype)initWithModuleName:(NSString *)moduleName
-                        methodName:(NSString *)methodName
-                         arguments:(NSArray *)arguments
-                           options:(NSDictionary *)options
-                          instance:(WXSDKInstance *)instance;
-
-- (NSInvocation *)invoke;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
deleted file mode 100644
index 6877a9a..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleMethod.h"
-#import "WXModuleFactory.h"
-#import "WXMonitor.h"
-#import "WXModuleProtocol.h"
-#import "WXAppMonitorProtocol.h"
-#import "WXAssert.h"
-#import "WXUtility.h"
-#import "WXSDKInstance_private.h"
-#import "WXHandlerFactory.h"
-#import "WXValidateProtocol.h"
-#import "WXAnalyzerCenter.h"
-
-@implementation WXModuleMethod
-
-- (instancetype)initWithModuleName:(NSString *)moduleName
-                        methodName:(NSString *)methodName
-                         arguments:(NSArray *)arguments
-                           options:(NSDictionary *)options
-                          instance:(WXSDKInstance *)instance
-{
-    if (self = [super initWithMethodName:methodName arguments:arguments instance:instance]) {
-        _moduleName = moduleName;
-        _options = options;
-    }
-    
-    return self;
-}
-
-- (NSInvocation *)invoke
-{
-    if ([WXAnalyzerCenter isInteractionLogOpen]) {
-        WXLogDebug(@"wxInteractionAnalyzer : [client][callnativemodulestart],%@,%@,%@",self.instance.instanceId,self.moduleName,self.methodName);
-    }
-    if (self.instance.needValidate) {
-        id<WXValidateProtocol> validateHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXValidateProtocol)];
-        if (validateHandler) {
-            WXModuleValidateResult* result = nil;
-            if ([validateHandler respondsToSelector:@selector(validateWithWXSDKInstance:module:method:args:options:)]) {
-                result =  [validateHandler validateWithWXSDKInstance:self.instance module:self.moduleName method:self.methodName args:self.arguments options:self.options];
-            }
-
-            if (result==nil || !result.isSuccess) {
-                NSString *errorMessage = [result.error.userInfo  objectForKey:@"errorMsg"];
-                WXLogError(@"%@", errorMessage);
-                WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_INVOKE_NATIVE, errorMessage);
-                if ([result.error respondsToSelector:@selector(userInfo)]) {
-                    // update the arguments when validate failed, so update the arguments for invoking -[NSError userInfo].
-                    if ([self respondsToSelector:NSSelectorFromString(@"arguments")]) {
-                        [self setValue:nil forKey:@"arguments"];
-                    }
-                    NSInvocation *invocation = [self invocationWithTarget:result.error selector:@selector(userInfo)];
-                    [invocation invoke];
-                    return invocation;
-                }else{
-                    return nil;
-                }
-            }
-        }
-    }
-    
-    Class moduleClass =  [WXModuleFactory classWithModuleName:_moduleName];
-    if (!moduleClass) {
-        NSString *errorMessage = [NSString stringWithFormat:@"Module:%@ doesn't exist, maybe it has not been registered", _moduleName];
-        WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_INVOKE_NATIVE, errorMessage);
-        return nil;
-    }
-    
-    id<WXModuleProtocol> moduleInstance = [self.instance moduleForClass:moduleClass];
-    WXAssert(moduleInstance, @"No instance found for module name:%@, class:%@", _moduleName, moduleClass);
-    BOOL isSync = NO;
-    SEL selector = [WXModuleFactory selectorWithModuleName:self.moduleName methodName:self.methodName isSync:&isSync];
-   
-    if (![moduleInstance respondsToSelector:selector]) {
-        // if not implement the selector, then dispatch default module method
-        if ([self.methodName isEqualToString:@"addEventListener"]) {
-            [self.instance _addModuleEventObserversWithModuleMethod:self];
-        } else if ([self.methodName isEqualToString:@"removeAllEventListeners"]) {
-            [self.instance _removeModuleEventObserverWithModuleMethod:self];
-        } else {
-            NSString *errorMessage = [NSString stringWithFormat:@"method:%@ for module:%@ doesn't exist, maybe it has not been registered", self.methodName, _moduleName];
-            WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_INVOKE_NATIVE, errorMessage);
-        }
-        return nil;
-    }
-	
-    [self commitModuleInvoke];
-    NSInvocation *invocation = [self invocationWithTarget:moduleInstance selector:selector];
-    
-    if (isSync) {
-        [invocation invoke];
-        if ([WXAnalyzerCenter isInteractionLogOpen]) {
-            WXLogDebug(@"wxInteractionAnalyzer : [client][callnativemoduleEnd],%@,%@,%@",self.instance.instanceId,self.moduleName,self.methodName);
-        }
-        return invocation;
-    } else {
-        [self _dispatchInvocation:invocation moduleInstance:moduleInstance];
-        return nil;
-    }
-}
-
-- (void)commitModuleInvoke
-{
-    id<WXAppMonitorProtocol> appMonitorHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXAppMonitorProtocol)];
-	if ([appMonitorHandler respondsToSelector:@selector(commitMonitorWithPage:monitorPoint:args:)]) {
-		NSDictionary * args = @{
-								@"url": self.instance.pageName ?: @"",
-								@"name": [NSString stringWithFormat:@"%@.%@", self.moduleName, self.methodName],
-								};
-		[appMonitorHandler commitMonitorWithPage:@"weex" monitorPoint:@"invokeModule" args:args];
-	} else if ([appMonitorHandler respondsToSelector:@selector(commitAppMonitorAlarm:monitorPoint:success:errorCode:errorMsg:arg:)]) {
-        NSString * arg = [NSString stringWithFormat:@"%@.%@", self.moduleName, self.methodName];
-        [appMonitorHandler commitAppMonitorAlarm:@"weex" monitorPoint:@"invokeModule" success:NO errorCode:@"101" errorMsg:self.instance.pageName arg:arg];
-    }
-}
-
-- (void)_dispatchInvocation:(NSInvocation *)invocation moduleInstance:(id<WXModuleProtocol>)moduleInstance
-{
-    // dispatch to user specified queue or thread, default is main thread
-    dispatch_block_t dispatchBlock = ^ (){
-        [invocation invoke];
-        if ([WXAnalyzerCenter isInteractionLogOpen]) {
-            WXLogDebug(@"wxInteractionAnalyzer : [client][callnativemoduleEnd],%@,%@,%@",self.instance.instanceId,self.moduleName,self.methodName);
-        }
-    };
-    
-    NSThread *targetThread = nil;
-    dispatch_queue_t targetQueue = nil;
-    if([moduleInstance respondsToSelector:@selector(targetExecuteQueue)]){
-        targetQueue = [moduleInstance targetExecuteQueue] ?: dispatch_get_main_queue();
-    } else if([moduleInstance respondsToSelector:@selector(targetExecuteThread)]){
-        targetThread = [moduleInstance targetExecuteThread] ?: [NSThread mainThread];
-    } else {
-        targetThread = [NSThread mainThread];
-    }
-
-    WXAssert(targetQueue || targetThread, @"No queue or thread found for module:%@", moduleInstance);
-    
-    if (targetQueue) {
-        dispatch_async(targetQueue, dispatchBlock);
-    } else {
-        WXPerformBlockOnThread(^{
-            dispatchBlock();
-        }, targetThread);
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h
deleted file mode 100644
index 2123c06..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <JavaScriptCore/JavaScriptCore.h>
-
-@protocol WXPolyfillSetJSExports <JSExport>
-
-+ (instancetype)create;
-
-- (BOOL)has:(id)value;
-
-- (NSUInteger)size;
-
-- (void)add:(id)value;
-
-- (BOOL)delete:(id)value;
-
-- (void)clear;
-
-@end
-
-@interface WXPolyfillSet : NSObject <WXPolyfillSetJSExports>
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.m
deleted file mode 100644
index 4c59dee..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.m
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXPolyfillSet.h"
-
-@implementation WXPolyfillSet
-{
-    NSMutableSet *_set;
-}
-
-+ (instancetype)create
-{
-    WXPolyfillSet *jsSet = [WXPolyfillSet new];
-    jsSet->_set = [NSMutableSet set];
-    return jsSet;
-}
-
-- (BOOL)has:(id)value
-{
-    return [_set containsObject:value];
-}
-
-- (NSUInteger)size
-{
-    return _set.count;
-}
-
-- (void)add:(id)value
-{
-    [_set addObject:value];
-}
-
-- (BOOL)delete:(id)value
-{
-    if ([_set containsObject:value]) {
-        [_set removeObject:value];
-        return YES;
-    }
-    
-    return NO;
-}
-
-- (void)clear
-{
-    [_set removeAllObjects];
-}
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.h
deleted file mode 100644
index ee93eea..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXComponent.h"
-
-static const NSString *WXDefaultRecycleTemplateType = @"default";
-@interface WXCellSlotComponent : WXComponent
-
-@property (nonatomic, strong) NSString *templateCaseType;
-
-- (void)updateCellData:(NSDictionary *)data;
-- (void)triggerLayout;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.mm
deleted file mode 100644
index 70143bb..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXCellSlotComponent.mm
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXCellSlotComponent.h"
-#import "WXComponent_internal.h"
-#import "WXComponentManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXConvert.h"
-#import "WXAssert.h"
-#import "WXComponent+Layout.h"
-#import "WXCoreBridge.h"
-
-@implementation WXCellSlotComponent
-
-- (instancetype)initWithRef:(NSString *)ref
-                       type:(NSString *)type
-                     styles:(NSDictionary *)styles
-                 attributes:(NSDictionary *)attributes
-                     events:(NSArray *)events
-               weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        // TODO: isRecycle / insertAnimation / deleteAnimation / keepScrollPosition
-        if (attributes[@"default"]) {
-            _templateCaseType = @"default";
-        }
-        _templateCaseType = attributes[@"case"] ? [WXConvert NSString:attributes[@"case"]] :const_cast<NSString *>(WXDefaultRecycleTemplateType);
-        _lazyCreateView = YES;
-    }
-    
-    return self;
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    
-}
-
-- (void)updateCellData:(NSDictionary *)data
-{
-    WXAssertComponentThread();
-    [self updateBindingData:data];
-    [self attachSlotEvent:data];
-    [self triggerLayout];
-}
-
-- (void)_didInserted
-{
-}
-
-- (void)triggerLayout
-{
-    WXAssertComponentThread();
-    
-    if (self.flexCssNode == nullptr) {
-        return;
-    }
-    
-    if (flexIsUndefined(self.flexCssNode->getStyleWidth())) {
-        self.flexCssNode->setStyleWidth(self.supercomponent.flexCssNode->getLayoutWidth(), NO);
-    }
-    
-    if ([self needsLayout]) {
-        [WXCoreBridge layoutRenderObject:self.flexCssNode size:self.weexInstance.frame.size page:self.weexInstance.instanceId];
-    }
-}
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.h
deleted file mode 100644
index b68b159..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-static const NSString *WXBindingIdentify = @"@binding";
-static const NSString *WXBindingMatchIdentify = @"[[match]]";
-static const NSString *WXBindingRepeatIdentify = @"[[repeat]]";
-static const NSString *WXBindingOnceIdentify = @"[[once]]";
-static const NSString *WXBindingRepeatExprIdentify = @"@expression";
-static const NSString *WXBindingRepeatIndexIdentify = @"@index";
-static const NSString *WXBindingRepeatLabelIdentify = @"@alias";
-
-@interface WXComponent (DataBinding)
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.mm
deleted file mode 100644
index 26892db..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXComponent+DataBinding.mm
+++ /dev/null
@@ -1,648 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent+DataBinding.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+Layout.h"
-#import "WXSDKInstance_private.h"
-#import "WXComponentManager.h"
-#import "WXSDKManager.h"
-#import "WXAssert.h"
-#import "WXJSASTParser.h"
-#import "WXBridgeManager.h"
-#import "WXUtility.h"
-#import "WXRecycleListComponent.h"
-#import "WXRecycleListDataManager.h"
-#import "WXCoreBridge.h"
-
-#import <JavaScriptCore/JavaScriptCore.h>
-
-#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-
-typedef enum : NSUInteger {
-    WXDataBindingTypeProp = 0,
-    WXDataBindingTypeStyle,
-    WXDataBindingTypeAttributes,
-    WXDataBindingTypeEvents,
-    WXDataBindingTypeCount,
-} WXDataBindingType;
-
-static JSContext *jsContext;
-
-@implementation WXComponent (DataBinding)
-
-- (void)updateBindingData:(NSDictionary *)data
-{
-    WXAssertComponentThread();
-    NSString * listRef = nil;
-    NSIndexPath *indexPath  = nil;
-    NSDictionary * dictionary = nil;
-    listRef = data[@"recycleListComponentRef"];
-    indexPath = data[@"indexPath"];
-    NSString *phase = data[@"@phase"];
-    if (!indexPath || !listRef) {
-        if (data[@"aliasKey"]) {
-            id key = data[@"aliasKey"];
-            dictionary =  data[key];
-        } else {
-            dictionary = data;
-        }
-        listRef = dictionary[@"recycleListComponentRef"];
-        indexPath = dictionary[@"indexPath"];
-    }
-    if (!phase && dictionary) {
-        phase = dictionary[@"@phase"];
-    }
-    
-    if (!indexPath || !listRef) {
-        return;
-    }
-    WXRecycleListComponent * recycleListComponent = (WXRecycleListComponent*)[self.weexInstance.componentManager componentForRef:listRef];
-    if (_isSkipUpdate) {
-        _isSkipUpdate = NO;
-        return;
-    }
-    
-    WXLogDebug(@"Update binding data:%@, for component:%@", data, self.ref);
-    if (!data) {
-        WXLogWarning(@"No data for updateBindingData");
-        return;
-    }
-    
-    WXComponent *templateComponent = _templateComponent;
-    if (!templateComponent) {
-        WXLogError(@"No template fount for component:%@", templateComponent);
-        return;
-    }
-    
-    __block NSMutableDictionary *newData = [NSMutableDictionary dictionary];
-    if (templateComponent->_bindingProps) {
-        [templateComponent->_bindingProps enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, WXDataBindingBlock  _Nonnull block, BOOL * _Nonnull stop) {
-            BOOL needUpdate;
-            id value = block(data, &needUpdate);
-            if (value) {
-                newData[key] = value;
-            }
-        }];
-    }
-    
-    if (self.attributes[@"@isComponentRoot"]) {
-        NSString *templateId = self.attributes[@"@templateId"];
-        if (![recycleListComponent.dataManager virtualComponentDataWithIndexPath:indexPath templateId:templateId]) {
-            static NSUInteger __componentId = 0;
-            self->_virtualComponentId = [NSString stringWithFormat:@"%@@%lu*%@", listRef, (unsigned long)__componentId % (2048*1024),templateId];
-            __componentId++;
-            dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-            [[WXSDKManager bridgeMgr] callComponentHook:self.weexInstance.instanceId componentId:templateId type:@"lifecycle" hook:@"create" args:@[self->_virtualComponentId, newData] competion:^(JSValue *value) {
-                [newData setObject:indexPath forKey:@"indexPath"];
-                [newData setObject:listRef forKey:@"recycleListComponentRef"];
-                if ([[value toArray][0] isKindOfClass:[NSDictionary class]]) {
-                    NSMutableDictionary *virtualComponentData = [value toArray][0];
-                    [virtualComponentData setObject:indexPath forKey:@"indexPath"];
-                    [[recycleListComponent dataManager] updateVirtualComponentData:self->_virtualComponentId data:virtualComponentData];
-                    [newData addEntriesFromDictionary:virtualComponentData];
-                }
-                dispatch_semaphore_signal(semaphore);
-            }];
-            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
-            
-            [self _refsConventFromData:newData];
-            [[WXSDKManager bridgeMgr] callComponentHook:self.weexInstance.instanceId componentId:self->_virtualComponentId type:@"lifecycle" hook:@"attach" args:@[@{@"virtualComponentId":self->_virtualComponentId,@"position":@(indexPath.row),@"refs":self->_virtualElementInfo[@"refs"]?:@{}}] competion:nil];
-            if ([newData count]) {
-                data = newData;
-            }
-        } else {
-            NSDictionary *virtualComponentData = [recycleListComponent.dataManager virtualComponentDataWithIndexPath:indexPath templateId:templateId];
-            [newData addEntriesFromDictionary:virtualComponentData];
-            newData[@"virtualComponentId"] = self->_virtualComponentId;
-            [newData setObject:indexPath forKey:@"indexPath"];
-            [newData setObject:listRef forKey:@"recycleListComponentRef"];
-            data = newData;
-        }
-    }
-    
-    if (phase) {
-        NSMutableDictionary * newData = [data mutableCopy];
-        newData[@"@phase"] = phase;
-        data = newData;
-    }
-    if (self->_templateComponent && self->_templateComponent->_dataBindOnce && recycleListComponent && data[@"@phase"]) {
-        WXLogInfo(@"interrupt update data: %@ because of v-once ", data);
-        return;
-    }
-    if (!_isRepeating) {
-        WXDataBindingBlock repeatBlock = templateComponent->_bindingRepeat;
-        if (repeatBlock) {
-            BOOL needUpdate = NO;
-            NSArray *repeatData = repeatBlock(data, &needUpdate);
-            [self _repeat:repeatData inData:data];
-            return;
-        }
-    }
-    
-    WXDataBindingBlock matchBlock = templateComponent->_bindingMatch;
-    if (matchBlock) {
-        BOOL needUpdate = NO;
-        BOOL needDisplay = NO;
-        id match = matchBlock(data, &needUpdate);
-        if ([match isKindOfClass:[NSNumber class]]) {
-            needDisplay = [match boolValue];
-        } else {
-            needDisplay = (match != nil);
-        }
-        
-        if (!needDisplay) {
-            self.displayType = WXDisplayTypeNone;
-            return;
-        } else if (needDisplay) {
-            self.displayType = WXDisplayTypeBlock;
-        }
-    }
-    
-    for (int i = WXDataBindingTypeStyle; i < WXDataBindingTypeCount; i++) {
-        NSDictionary *bindingMap = i == WXDataBindingTypeStyle ? templateComponent->_bindingStyles : (i == WXDataBindingTypeAttributes ? templateComponent->_bindingAttributes : templateComponent->_bindingEvents);
-        if (!bindingMap || bindingMap.count == 0) {
-            continue;
-        }
-        NSMutableDictionary *newAttributesOrStyles = [NSMutableDictionary dictionary];
-        
-        [bindingMap enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull attributeOrStyleName, WXDataBindingBlock  _Nonnull bindingBlock, BOOL * _Nonnull stop) {
-            BOOL needUpdate = NO;
-            id newValue = bindingBlock(data, &needUpdate);
-            if (needUpdate) {
-                newAttributesOrStyles[attributeOrStyleName] = newValue;
-            }
-        }];
-        
-        if (newAttributesOrStyles.count > 0) {
-            [self.weexInstance.componentManager startComponentTasks];
-            if (i == WXDataBindingTypeStyle) {
-                [self.weexInstance.componentManager updateStyles:newAttributesOrStyles forComponent:self.ref];
-            } else if (i == WXDataBindingTypeAttributes) {
-                [self.weexInstance.componentManager updateAttributes:newAttributesOrStyles forComponent:self.ref];
-            } else if (i == WXDataBindingTypeEvents) {
-                [self _addEventParams:newAttributesOrStyles];
-            } else if (i == WXDataBindingTypeProp) {
-            }
-        }
-    }
-    
-    NSArray *subcomponents = self.subcomponents;
-    for (WXComponent *subcomponent in subcomponents) {
-        if (subcomponent->_virtualComponentId &&dictionary[@"componentDataId"] && ![subcomponent->_virtualComponentId isEqualToString:dictionary[@"componentDataId"]]) {
-            continue;
-        }
-        [subcomponent updateBindingData:data];
-    }
-}
-
-- (void)_repeat:(NSArray *)repeatData inData:(NSDictionary *)data
-{
-    NSMutableDictionary *dataCopy = [data mutableCopy];
-    WXComponent *templateComponent = _templateComponent;
-    NSArray *subcomponents = self.supercomponent.subcomponents;
-    NSUInteger startIndex = [subcomponents indexOfObject:self];
-    [repeatData enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-        if (templateComponent->_repeatIndexIdentify) {
-            dataCopy[templateComponent->_repeatIndexIdentify] = @(idx);
-        }
-        if (templateComponent->_repeatLabelIdentify) {
-            dataCopy[templateComponent->_repeatLabelIdentify] = obj;
-        }
-        
-        WXComponent *exsitingComponent;
-        if (startIndex + idx < subcomponents.count) {
-            if (subcomponents[startIndex + idx]
-                && ((WXComponent *)(subcomponents[startIndex + idx]))->_templateComponent == templateComponent) {
-                exsitingComponent = subcomponents[startIndex + idx];
-                exsitingComponent.displayType = WXDisplayTypeBlock;
-            }
-        }
-        
-        WXComponent *component = exsitingComponent ? : [templateComponent copy];
-        component->_isRepeating = YES;
-        [component updateBindingData:dataCopy];
-        component->_isRepeating = NO;
-        
-        if (idx > 0 && exsitingComponent) {
-            component->_isSkipUpdate = YES;
-        }
-        
-        if (!exsitingComponent) {
-            [self.weexInstance.componentManager startComponentTasks];
-            BOOL inserted = [self.supercomponent _insertSubcomponent:component atIndex:startIndex + idx];
-            if (inserted) {
-                // add to layout tree
-                [WXCoreBridge addChildRenderObject:component->_flexCssNode toParent:self.supercomponent->_flexCssNode];
-                
-                [self.weexInstance.componentManager _addUITask:^{
-                    [self.supercomponent insertSubview:component atIndex:startIndex + idx];
-                }];
-            }
-            else {
-                WXLogError(@"fail to insert copied component for data binding.");
-            }
-        }
-    }];
-    
-    // set display:none to the redundant components;
-    NSUInteger i = startIndex + repeatData.count;
-    while (i < self.supercomponent.subcomponents.count) {
-        WXComponent *component = self.supercomponent.subcomponents[i];
-        if (component->_templateComponent == templateComponent) {
-            component->_isSkipUpdate = YES;
-            component.displayType = WXDisplayTypeNone;
-        }
-        i++;
-    }
-}
-
-- (void)_storeBindingsWithProps:(NSDictionary *)props styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSDictionary *)events
-{
-    WXAssertComponentThread();
-    
-    if (props.count > 0) {
-        if (!_bindingProps) {
-            _bindingProps = [NSMutableDictionary dictionary];
-        }
-        [self _storeBindings:props type:WXDataBindingTypeProp];
-    }
-    
-    if (styles.count > 0) {
-        if (!_bindingStyles) {
-            _bindingStyles = [NSMutableDictionary dictionary];
-        }
-        [self _storeBindings:styles type:WXDataBindingTypeStyle];
-    }
-    
-    if (attributes.count > 0) {
-        if (!_bindingAttributes) {
-            _bindingAttributes = [NSMutableDictionary dictionary];
-        }
-        [self _storeBindings:attributes type:WXDataBindingTypeAttributes];
-    }
-    
-    if (events.count > 0) {
-        if (!_bindingEvents) {
-            _bindingEvents = [NSMutableDictionary dictionary];
-        }
-        [self _storeBindings:events type:WXDataBindingTypeEvents];
-    }
-}
-
-- (void)_storeBindings:(NSDictionary *)stylesOrAttributesOrEvents type:(WXDataBindingType)type
-{
-    WXAssertComponentThread();
-    
-    if (_bindingExpressions == nullptr) {
-        _bindingExpressions = new std::vector<WXJSExpression *>();
-    }
-    
-    NSMutableDictionary *bindingMap;
-    switch (type) {
-        case WXDataBindingTypeProp:
-            bindingMap = _bindingProps;
-            break;
-        case WXDataBindingTypeStyle:
-            bindingMap = _bindingStyles;
-            break;
-        case WXDataBindingTypeAttributes:
-            bindingMap = _bindingAttributes;
-            break;
-        case WXDataBindingTypeEvents:
-            bindingMap = _bindingEvents;
-            break;
-        default:
-            WXAssert(NO, @"error binding type:%z", type);
-            break;
-    }
-    [stylesOrAttributesOrEvents enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull name, id  _Nonnull binding, BOOL * _Nonnull stop) {
-        if ([binding isKindOfClass:[NSDictionary class]] && binding[WXBindingIdentify]) {
-            // {"attributeOrStyleName":{"@binding":"bindingExpression"}
-            NSString *bindingExpression = binding[WXBindingIdentify];
-            WXJSASTParser *parser = [WXJSASTParser parserWithScript:bindingExpression];
-            WXJSExpression *expression = [parser parseExpression];
-            self->_bindingExpressions->push_back(expression);
-            WXDataBindingBlock block = [self bindingBlockWithExpression:expression];
-            bindingMap[name] = block;
-        } else if ([binding isKindOfClass:[NSArray class]]) {
-            // {"attributeOrStyleName":[..., "string", {"@binding":"bindingExpression"}, "string", {"@binding":"bindingExpression"}, ...]
-            NSMutableDictionary *bindingBlocksForIndex = [NSMutableDictionary dictionary];
-            __block BOOL isBinding = NO;
-            [binding enumerateObjectsUsingBlock:^(id  _Nonnull bindingInArray, NSUInteger idx, BOOL * _Nonnull stop) {
-                if ([bindingInArray isKindOfClass:[NSDictionary class]] && bindingInArray[WXBindingIdentify]) {
-                    isBinding = YES;
-                    NSString *bindingExpression = bindingInArray[WXBindingIdentify];
-                    WXJSASTParser *parser = [WXJSASTParser parserWithScript:bindingExpression];
-                    WXJSExpression *expression = [parser parseExpression];
-                    self->_bindingExpressions->push_back(expression);
-                    WXDataBindingBlock block = [self bindingBlockWithExpression:expression];
-                    bindingBlocksForIndex[@(idx)] = block;
-                }
-            }];
-            
-            bindingMap[name] = ^id(NSDictionary *data, BOOL *needUpdate) {
-                NSMutableArray *newArray = [binding mutableCopy];
-                [binding enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-                    BOOL _needUpdate = NO;
-                    WXDataBindingBlock block = bindingBlocksForIndex[@(idx)];
-                    if (block) {
-                        id newValue = block(data, &_needUpdate);
-                        if (newValue) {
-                             newArray[idx] = newValue;
-                        }  
-                        if (_needUpdate) {
-                            *needUpdate = YES;
-                        }
-                    }
-                }];
-                return type == WXDataBindingTypeEvents ? newArray : [newArray componentsJoinedByString:@""];
-            };
-        }
-        
-        if (type == WXDataBindingTypeAttributes) {
-            if ([WXBindingOnceIdentify isEqualToString:name]) {
-                self->_dataBindOnce = [WXConvert BOOL:binding];
-            } else if ([WXBindingMatchIdentify isEqualToString:name]) {
-                WXJSASTParser *parser = [WXJSASTParser parserWithScript:binding];
-                WXJSExpression *expression = [parser parseExpression];
-                self->_bindingExpressions->push_back(expression);
-                self->_bindingMatch = [self bindingBlockWithExpression:expression];
-            } else if ([WXBindingRepeatIdentify isEqualToString:name]) {
-                WXJSASTParser *parser = [WXJSASTParser parserWithScript:binding[WXBindingRepeatExprIdentify]];
-                WXJSExpression *expression = [parser parseExpression];
-                self->_bindingExpressions->push_back(expression);
-                self->_bindingRepeat = [self bindingBlockWithExpression:expression];
-                self->_repeatIndexIdentify = binding[WXBindingRepeatIndexIdentify];
-                self->_repeatLabelIdentify = binding[WXBindingRepeatLabelIdentify];
-            }
-        }
-    }];
-}
-
-- (WXDataBindingBlock)bindingBlockWithExpression:(WXJSExpression *)expression
-{
-    if (!expression) {
-        return nil;
-    }
-    
-    __weak typeof(self) weakSelf = self;
-    WXDataBindingBlock block = ^id(NSDictionary *data, BOOL *needUpdate) {
-        __strong typeof(weakSelf) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            *needUpdate = NO;
-            return nil;
-        }
-        
-        if (expression->is<WXJSStringLiteral>()) {
-            *needUpdate = NO;
-            return [NSString stringWithCString:(((WXJSStringLiteral *)expression)->value).c_str() encoding:[NSString defaultCStringEncoding]];
-        } else if (expression->is<WXJSNumericLiteral>()) {
-            *needUpdate = NO;
-            return @(((WXJSNumericLiteral *)expression)->value);
-        } else if (expression->is<WXJSBooleanLiteral>()) {
-            *needUpdate = NO;
-            return @(((WXJSBooleanLiteral *)expression)->value);
-        } else if (expression->is<WXJSNullLiteral>()) {
-            *needUpdate = NO;
-            return nil;
-        } else if (expression->is<WXJSIdentifier>()) {
-            NSString *identiferName = [NSString stringWithCString:const_cast<char*>((((WXJSIdentifier *)expression)->name).c_str()) encoding:NSUTF8StringEncoding];
-            if (data[identiferName]) {
-                *needUpdate = YES;
-                return data[identiferName];
-            } else {
-                WXLogError(@"identifer:%@ not found", identiferName);
-                *needUpdate = YES;
-                return @"";
-            }
-        } else if (expression->is<WXJSMemberExpression>()) {
-            WXJSMemberExpression *member = (WXJSMemberExpression *)expression;
-            BOOL objectNeedUpdate = NO, propertyNeedUpdate = NO;
-            id object = [strongSelf bindingBlockWithExpression:member->object](data, &objectNeedUpdate);
-            if (member->computed) {
-                id propertyName = [strongSelf bindingBlockWithExpression:member->property](data, &propertyNeedUpdate);
-                *needUpdate = objectNeedUpdate || propertyNeedUpdate;
-                if ([object isKindOfClass:[NSDictionary class]] && [propertyName isKindOfClass:[NSString class]]) {
-                    return object[propertyName];
-                } else if ([object isKindOfClass:[NSArray class]] && [propertyName isKindOfClass:[NSNumber class]]) {
-                    return [object objectAtIndex:[propertyName unsignedIntegerValue]];
-                }
-            } else {
-                WXJSExpression * memberExpression = member->property;
-                if (memberExpression->is<WXJSIdentifier>()) {
-                    NSString *propertyName = [NSString stringWithCString:(((WXJSStringLiteral *)member->property)->value).c_str() encoding:[NSString defaultCStringEncoding]];
-                    *needUpdate = objectNeedUpdate;
-                    if ([object isKindOfClass:[NSDictionary class]]) {
-                        return object[propertyName];
-                    }
-                } else {
-                    id retvalue = [strongSelf bindingBlockWithExpression:member->property](object, &objectNeedUpdate);
-                    *needUpdate = objectNeedUpdate || propertyNeedUpdate;
-                    return retvalue;
-                }
-            }
-            
-            return nil;
-        } else if (expression->is<WXJSArrayExpression>()) {
-            WXJSArrayExpression *expr = (WXJSArrayExpression *)expression;
-            std::vector<WXJSExpression *> expressions = expr->expressions;
-            NSMutableArray *array = [NSMutableArray array];
-            for(WXJSExpression *expr : expressions) {
-                if (expr == NULL) {
-                    continue;
-                }
-                WXDataBindingBlock block = [strongSelf bindingBlockWithExpression:expr];
-                *needUpdate = NO;
-                if (block) {
-                    BOOL elementNeedUpdate;
-                    id object = block(data, &elementNeedUpdate);
-                    if (object) {
-                        *needUpdate = *needUpdate || elementNeedUpdate;
-                        [array addObject:object];
-                    }
-                }
-            }
-            
-            return array;
-        } else if (expression->is<WXJSUnaryExpression>()) {
-            WXJSUnaryExpression *expr = (WXJSUnaryExpression *)expression;
-            std::string operator_ = expr->operator_;
-            id argument = [strongSelf bindingBlockWithExpression:expr->argument](data, needUpdate);
-            if (operator_ == "+") {
-                return @([argument doubleValue]);
-            } else if (operator_ == "-") {
-                return @(-[argument doubleValue]);
-            } else if (operator_ == "!") {
-                return @(![argument boolValue]);
-            } else {
-                WXLogError(@"Not supported unary operator:%s", operator_.c_str());
-                return nil;
-            }
-        } else if (expression->is<WXJSBinaryExpression>()) {
-            WXJSBinaryExpression *expr = (WXJSBinaryExpression *)expression;
-            std::string operator_ = expr->operator_;
-            BOOL leftNeedUpdate = NO, rightNeedUpdate = NO;
-            id left = [strongSelf bindingBlockWithExpression:expr->left](data, &leftNeedUpdate);
-            id right = [strongSelf bindingBlockWithExpression:expr->right](data, &rightNeedUpdate);
-            *needUpdate = leftNeedUpdate || rightNeedUpdate;
-            if (operator_ == "+") {
-                return @([left doubleValue] + [right doubleValue]);
-            } else if (operator_ == "-") {
-                return @([left doubleValue] - [right doubleValue]);
-            } else if (operator_ == "*") {
-                return @([left doubleValue] * [right doubleValue]);
-            } else if (operator_ == "/") {
-                return @([left doubleValue] / [right doubleValue]);
-            } else if (operator_ == "%") {
-                return @([left integerValue] % [right integerValue]);
-            } else if (operator_ == ">") {
-                return @([left doubleValue] > [right doubleValue]);
-            } else if (operator_ == ">=") {
-                return @([left doubleValue] >= [right doubleValue]);
-            } else if (operator_ == "<") {
-                return @([left doubleValue] < [right doubleValue]);
-            } else if (operator_ == "<=") {
-                return @([left doubleValue] <= [right doubleValue]);
-            } else if (operator_ == "===" || operator_ == "==") {
-                if ([left isKindOfClass:[NSString class]]) {
-                    return @([left isEqualToString:right]);
-                } else if ([left isKindOfClass:[NSNumber class]]) {
-                    return  @([left doubleValue] == [right doubleValue]);
-                } else {
-                    WXLogError(@"Wrong type %@ at left of '===' or '=='", NSStringFromClass([left class]));
-                    return nil;
-                }
-            } else if (operator_ == "!==" || operator_ == "!=") {
-                if ([left isKindOfClass:[NSString class]]) {
-                    return @(![left isEqualToString:right]);
-                } else if ([left isKindOfClass:[NSNumber class]]) {
-                    return  @([left doubleValue] != [right doubleValue]);
-                } else {
-                    WXLogError(@"Wrong type %@ at left of '!==' or '!='", NSStringFromClass([left class]));
-                    return nil;
-                }
-            } else if (operator_ == "||") {
-                return @([left boolValue] || [right boolValue]);
-            } else if (operator_ == "&&") {
-                return @([left boolValue] && [right boolValue]);
-            } else {
-                WXLogError(@"Not supported binary operator:%s", operator_.c_str());
-                return nil;
-            }
-        } else if (expression->is<WXJSConditionalExpression>()) {
-            WXJSConditionalExpression *conditional = (WXJSConditionalExpression *)expression;
-            BOOL testNeedUpdate = NO, conditionalNeedUpdate = NO, alternateNeedUpdate = NO;
-            id testResult = [strongSelf bindingBlockWithExpression:conditional->test](data, &testNeedUpdate);
-            id result;
-            if ([testResult boolValue]) {
-                result = [strongSelf bindingBlockWithExpression:conditional->consequent](data, &conditionalNeedUpdate);
-            } else {
-                result = [strongSelf bindingBlockWithExpression:conditional->alternate](data, &alternateNeedUpdate);
-            }
-            *needUpdate = testNeedUpdate || conditionalNeedUpdate || alternateNeedUpdate;
-            return result;
-        } else {
-            WXAssert(NO, @"expression type error");
-            return nil;
-        }
-    };
-    
-    return block;
-}
-
-- (void)attachSlotEvent:(NSDictionary *)data
-{
-    [self cellSlotEventHandle:data isAttach:YES];
-}
-
-- (void)detachSlotEvent:(NSDictionary *)data
-{
-    [self cellSlotEventHandle:data isAttach:NO];
-}
-
-- (void)cellSlotEventHandle:(NSDictionary *)data isAttach:(BOOL)isAttach
-{
-    [self _refsConventFromData:data];
-    if (_virtualElementInfo.count != 0) {
-        NSString *recycleListComponentRef = data[@"recycleListComponentRef"];
-        NSIndexPath *indexPath = data[@"indexPath"];
-        if (!recycleListComponentRef) {
-            if (data[@"aliasKey"]) {
-                id key = data[@"aliasKey"];
-                recycleListComponentRef = data[key][@"recycleListComponentRef"];
-                indexPath = data[key][@"indexPath"];
-            }
-        }
-        [_virtualElementInfo addEntriesFromDictionary:@{@"position":@(indexPath.row)}];
-        [[WXSDKManager bridgeMgr] fireEvent:self.weexInstance.instanceId ref:recycleListComponentRef type:isAttach ?@"_attach_slot": @"_detach_slot" params:_virtualElementInfo domChanges:nil handlerArguments:nil];
-    }
-}
-
-- (void )_refsConventFromData:(NSDictionary *)data
-{
-    _virtualElementInfo = [NSMutableDictionary new];
-    if (self.attributes[@"ref"]) {
-        NSMutableDictionary *subInfo = [NSMutableDictionary new];
-        [self _componentInfoOfRef:self subInfo:subInfo data:data];
-        [self _recursiveSlotComponent:self subInfo:subInfo data:data];
-    }
-    else
-    {
-        [self _recursiveSlotComponent:self subInfo:nil data:data];
-    }
-}
-
-- (void)_recursiveSlotComponent:(WXComponent *)component subInfo:(NSMutableDictionary *)subInfo data:(NSDictionary *)data
-{
-    subInfo = subInfo ? : [NSMutableDictionary new];
-    for (WXComponent *subcomponent in component.subcomponents) {
-        if (subcomponent.subcomponents.count != 0) {
-            [self _recursiveSlotComponent:subcomponent subInfo:subInfo data:data];
-        }
-        [self _componentInfoOfRef:subcomponent subInfo:subInfo data:data];
-    }
-    if (subInfo.count !=0) {
-        [_virtualElementInfo setObject:subInfo forKey:@"refs"];
-    }
-}
-
-- (void)_componentInfoOfRef:(WXComponent *)component subInfo:(NSMutableDictionary *)subInfo data:(NSDictionary *)data
-{
-    if (component.attributes[@"ref"]) {
-        NSIndexPath *indexPath = data[@"indexPath"];
-        if (!indexPath) {
-            if (data[@"aliasKey"]) {
-                id key = data[@"aliasKey"];
-                indexPath = data[key][@"indexPath"];
-            }
-        }
-        NSString *virtualElementInfo = [NSString stringWithFormat:@"%@@%ld",component.ref,(long)indexPath.row];
-        NSDictionary *refInfo = @{@"attrs":component.attributes,@"type":component->_type,@"ref":virtualElementInfo,@"[[VirtualElement]]":@"true"};
-        if (subInfo[component.attributes[@"ref"]]) {
-            [subInfo[component.attributes[@"ref"]] addObject:refInfo];
-        }
-        else
-        {
-            [subInfo setValue:[NSMutableArray arrayWithArray:@[refInfo]] forKey:component.attributes[@"ref"]];
-        }
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.h
deleted file mode 100644
index a95ec1c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#include <string>
-#include <vector>
-
-#define WXJSObjectFree(obj) \
-    if (obj) delete obj;
-
-typedef enum : NSUInteger {
-    WXJSExpressionTypeUnary,
-    WXJSExpressionTypeBinary,
-    WXJSExpressionTypeBinaryConditional,
-} WXJSExpressionType;
-
-struct WXJSExpression {
-    virtual ~WXJSExpression() {}
-    template <class T> bool is() {
-        return dynamic_cast<T *>(this) != NULL;
-    }
-};
-
-struct WXJSLiteral :WXJSExpression {
-};
-
-struct WXJSNullLiteral : WXJSLiteral {
-};
-
-struct WXJSStringLiteral : WXJSLiteral {
-    std::string value;
-};
-
-struct WXJSNumericLiteral : WXJSLiteral {
-    double value;
-};
-
-struct WXJSBooleanLiteral : WXJSLiteral {
-    bool value;
-};
-
-struct WXJSIdentifier : WXJSExpression {
-    std::string name;
-};
-
-struct WXJSMemberExpression : WXJSExpression {
-    virtual ~WXJSMemberExpression() {
-        WXJSObjectFree(object);
-        WXJSObjectFree(property);
-    }
-    WXJSExpression *object = nullptr;
-    WXJSExpression *property = nullptr;
-    bool computed;
-};
-
-struct WXJSArrayExpression : WXJSExpression {
-    virtual ~WXJSArrayExpression() {
-        for (WXJSExpression * expr : expressions) {
-            delete expr;
-        }
-    }
-    std::vector<WXJSExpression *> expressions;
-};
-
-struct WXJSUnaryExpression : WXJSExpression {
-    virtual ~WXJSUnaryExpression() {
-        WXJSObjectFree(argument);
-    }
-    
-    std::string operator_;
-    bool prefix;
-    WXJSExpression *argument = nullptr;
-};
-
-struct WXJSBinaryExpression : WXJSExpression {
-    virtual ~WXJSBinaryExpression() {
-        WXJSObjectFree(left);
-        WXJSObjectFree(right);
-    }
-    
-    std::string operator_;
-    WXJSExpression *left = nullptr;
-    WXJSExpression *right = nullptr;
-};
-
-struct WXJSLogicalExpression : WXJSExpression {
-    virtual ~WXJSLogicalExpression() {
-        WXJSObjectFree(left);
-        WXJSObjectFree(right);
-    }
-    
-    std::string operator_;
-    WXJSExpression *left = nullptr;
-    WXJSExpression *right = nullptr;
-};
-
-struct WXJSConditionalExpression : WXJSExpression {
-    virtual ~WXJSConditionalExpression() {
-        WXJSObjectFree(test);
-        WXJSObjectFree(alternate);
-        WXJSObjectFree(consequent);
-    }
-    
-    WXJSExpression *test = nullptr;
-    WXJSExpression *alternate = nullptr;
-    WXJSExpression *consequent = nullptr;
-};
-
-
-@interface WXJSASTParser : NSObject
-
-+ (instancetype)parserWithScript:(NSString *)script;
-
-- (WXJSExpression *)parseExpression;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.mm
deleted file mode 100644
index c06cae5..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXJSASTParser.mm
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXJSASTParser.h"
-#import "WXLog.h"
-#include <vector>
-#include <sstream>
-
-
-typedef enum : NSUInteger {
-    WXJSTokenTypeBooleanLiteral = 1,
-    WXJSTokenTypeEOF,
-    WXJSTokenTypeIdentifier,
-    WXJSTokenTypeKeyword,
-    WXJSTokenTypeNullLiteral,
-    WXJSTokenTypeNumericLiteral,
-    WXJSTokenTypePunctuator,
-    WXJSTokenTypeStringLiteral,
-    WXJSTokenTypeRegularExpression,
-    WXJSTokenTypeTemplate
-} WXJSTokenType;
-
-struct WXJSToken {
-    WXJSTokenType type;
-    std::string value;
-    double doubleValue;
-    bool octal;
-    int start;
-    int end;
-};
-
-struct WXJSMarker {
-    int index;
-};
-
-static bool isWhiteSpace(int ch) {
-    return (ch == 32) ||  // space
-    (ch == 9) ||      // tab
-    (ch == 0xB) ||
-    (ch == 0xC) ||
-    (ch == 0xA0);
-}
-
-static bool isIdentifierStart(int ch)
-{
-    return (ch == 36) || (ch == 95) ||  // $ or _
-        (ch >= 65 && ch <= 90) ||         // A..Z
-        (ch >= 97 && ch <= 122) ||        // a..z
-        (ch == 92);                      // \ (backslash)
-}
-
-static bool isIdentifierPart(int ch) {
-    return (ch == 36) || (ch == 95) ||  // $ or _
-    (ch >= 65 && ch <= 90) ||         // A..Z
-    (ch >= 97 && ch <= 122) ||        // a..z
-    (ch >= 48 && ch <= 57) ||         // 0..9
-    (ch == 92);                      // \ (backslash)
-}
-
-static bool isDecimalDigit(int ch) {
-    return (ch >= 48 && ch <= 57);   // 0..9
-}
-
-static bool isHexDigit(int ch) {
-    return std::string("0123456789abcdefABCDEF").find(ch) != std::string::npos;
-}
-
-static bool isOctalDigit(int ch) {
-    return std::string("01234567").find(ch) != std::string::npos;
-}
-
-static int binaryPrecedence(WXJSToken *token)
-{
-    int prec = 0;
-    
-    if (token->type != WXJSTokenTypePunctuator) {
-        return prec;
-    }
-    
-    const std::string &value = token->value;
-    
-    if (value == "||") {
-        prec = 1;
-    }
-    
-    else if (value == "&&") {
-        prec = 2;
-    }
-    
-    else if (value == "|") {
-        prec = 3;
-    }
-    
-    else if (value == "^") {
-        prec = 4;
-    }
-    
-    else if (value == "&") {
-        prec = 5;
-    }
-    
-    else if (value == "==" || value == "!=" || value == "===" || value == "!==") {
-        prec = 6;
-    }
-    
-    else if (value == "<" || value == ">" || value == "<=" || value == ">=") {
-        prec = 7;
-    }
-    
-    else if (value == "<<" || value == ">>" || value == ">>>") {
-        prec = 8;
-    }
-    
-    else if (value == "+" || value == "-") {
-        prec = 9;
-    }
-    
-    else if (value == "*" || value == "/" || value == "%") {
-        prec = 11;
-    }
-    
-    return prec;
-}
-
-@implementation WXJSASTParser
-{
-    std::string _source;
-    
-    int _length;
-    int _index;
-    
-    WXJSToken *_lookahead;
-    
-    std::vector<WXJSToken *> _tokens;
-}
-
-+ (instancetype)parserWithScript:(NSString *)script
-{
-    if (!script) {
-        WXLogError(@"can not init parser with nil script");
-        return nil;
-    }
-    return [[self alloc] initWithScript:script];
-}
-
-- (instancetype)initWithScript:(NSString *)script
-{
-    if (self = [super init]) {
-        _source = std::string([script UTF8String]);;
-        _length = (int)(_source.length());
-        _index = 0;
-        
-        _lookahead = NULL;
-        
-        [self nextToken];
-    }
-    
-    return self;
-}
-
-- (void)dealloc
-{
-    for (WXJSToken* token : _tokens) {
-        WXJSObjectFree(token);
-    }
-}
-
-- (WXJSToken *)nextToken
-{
-    WXJSToken *token = _lookahead;
-    _lookahead = [self lex]; // next
-    _tokens.push_back(_lookahead);
-    return token;
-}
-
-- (WXJSToken *)lex
-{
-    [self skipSpaces];
-    
-    if (_index >= _length) {
-        WXJSToken *token = new WXJSToken();
-        token->type = WXJSTokenTypeEOF;
-        token->value = "";
-        token->start = _index;
-        token->end = _index;
-        
-        return token;
-    }
-    
-    int ch = _source[_index];
-    
-    if (isIdentifierStart(ch)) {
-        return [self scanIdentifier];
-    }
-    
-    // ( or ) or ;
-    if (ch == 40 || ch == 41 || ch == 59) {
-        return [self scanPunctuator];
-    }
-    
-    // string starting with ' or " .
-    if (ch == 39 || ch == 34 ) {
-        return [self scanStringLiteral];
-    }
-    
-    // Dot (.) U+002E can also start a floating-point number, hence the need
-    // to check the next
-    if (ch == 0x2E) {
-        if (isDecimalDigit(_source[_index + 1])) {
-            return [self scanNumericLiteral];
-        }
-        return [self scanPunctuator];
-    }
-    
-    if (isDecimalDigit(ch)) {
-        return [self scanNumericLiteral];
-    }
-    
-    // Possible `identifier
-    if (ch >= 0xD800 && ch < 0xDFFF) {
-        if (isIdentifierStart(ch)) {
-            return [self scanIdentifier];
-        }
-    }
-    
-    return [self scanPunctuator];
-}
-
-- (WXJSToken *)scanIdentifier
-{
-    int start = _index;
-    // Backslash (U+005C) starts an escaped
-    std::string identifier = [self getIdentifier];
-    WXJSTokenType type;
-    if (identifier == "null") {
-        type = WXJSTokenTypeNullLiteral;
-    } else if (identifier == "true" || identifier == "false") {
-        type = WXJSTokenTypeBooleanLiteral;
-    } else {
-        type = WXJSTokenTypeIdentifier;
-    }
-    
-    WXJSToken *token = new WXJSToken();
-    token->type = type;
-    token->value = identifier;
-    token->start = start;
-    token->end = _index;
-    
-    return token;
-}
-
-- (std::string)getIdentifier
-{
-    int start = _index++;
-    while (_index < _length) {
-        int ch = _source[_index];
-        if (isIdentifierPart(ch)) {
-            ++_index;
-        } else {
-            break;
-        }
-    }
-    
-    return _source.substr(start, _index - start);
-}
-
-- (WXJSToken *)scanPunctuator
-{
-    int start = _index;
-    
-    // Check for most common single-character punctuators.
-    int ch = _source[_index];
-    std::string str = "";
-    switch (ch) {
-        // single-character punctuators
-        case 46:   // .
-        case 40:   // (
-        case 41:   // )
-        case 59:   // ;
-        case 44:   // ,
-        case 123:  // {
-        case 125:  // }
-        case 91:   // [
-        case 93:   // ]
-        case 58:   // :
-        case 63:   // ?
-        case 126:  // ~
-            ++_index;
-            str = std::string(1, ch);
-            break;
-        default:
-            str =  _source.substr(_index, 3);
-            if (str == "===" || str == "!==" || str == "**=") {
-                _index += 3;
-            } else {
-                str = str.substr(0, 2);
-                if (str == "&&" || str == "||" || str == "==" || str == "!=" ||
-                    str == "+=" || str == "-=" || str == "*=" || str == "/=" ||
-                    str == "++" || str == "--" || str == "&=" || str == "|=" ||
-                    str == "^=" || str == "%=" || str == "<=" || str == ">=" ||
-                    str == "=>" || str == "**") {
-                    _index += 2;
-                }  else {
-                    str = _source[_index];
-                    // parse 2-character punctuators first
-                    if (std::string("<>=!+-*%&|^/").find(ch) != std::string::npos) {
-                        ++_index;
-                    }
-                }
-            }
-    }
-    
-    if (_index == start) {
-        [self _throwUnexpectedTokenError];
-    }
-    
-    WXJSToken *token = new WXJSToken();
-    token->type = WXJSTokenTypePunctuator;
-    token->value = str;
-    token->start = start;
-    token->end = _index;
-    
-    return token;
-}
-
-- (WXJSToken *)scanStringLiteral
-{
-    int start = _index;
-    int quote = _source[start];
-    bool octal = false;
-    
-    ++_index;
-    std::string str = "";
-    
-    while (_index < _length) {
-        int ch = _source[_index++];
-        
-        if (ch == quote) {
-            quote = -1;
-            break;
-        } else if (ch == 92) { // \ (backslash)
-            ch = _source[_index++];
-            switch (ch) {
-                case 'u': {
-                    if (_source[_index] == '{') { // {
-                        ++_index;
-                        str += [self scanUnicodeCodePointEscape];
-                    } else {
-                        int unescaped = [self scanHexEscape:ch];
-                        if (unescaped == -1) {
-                            [self _throwError:@"Invalid hexadecimal escape"];
-                        } else {
-                            str += unescaped;
-                        }
-                    }
-                    break;
-                }
-                case 'x': {
-                    int unescaped = [self scanHexEscape:ch];
-                    if (unescaped == -1) {
-                        [self _throwError:@"Invalid hexadecimal escape"];
-                    } else {
-                        str += unescaped;
-                    }
-                    
-                    break;
-                }
-                case 'n': {
-                    str += '\n';
-                    break;
-                }
-                case 'r': {
-                    str += '\r';
-                    break;
-                }
-                case 't': {
-                    str += '\t';
-                    break;
-                }
-                case 'b': {
-                    str += '\b';
-                    break;
-                }
-                case 'f': {
-                    str += '\f';
-                    break;
-                }
-                case 'v': {
-                    str += '\x0B';
-                    break;
-                }
-                case '8':
-                case '9': {
-                    str += ch;
-                    [self _throwUnexpectedTokenError];
-                    break;
-                }
-                    
-                default:
-                    if (isOctalDigit(ch)) {
-                        int code = ch - '0';
-                        
-                        // \0 is not octal escape sequence
-                        if (code != 0) {
-                            octal = true;
-                        }
-                        
-                        if (_index < _length && isOctalDigit(_source[_index])) {
-                            octal = true;
-                            code = code * 8 + _source[_index++] - '0';
-                            
-                            // 3 digits are only allowed when string starts
-                            // with 0, 1, 2, 3
-                            if (std::string(1, '0123').find(ch) != std::string::npos &&
-                                _index < _length &&
-                                isOctalDigit(_source[_index])) {
-                                code = code * 8 + _source[_index++] - '0';
-                            }
-                        }
-                        str += std::string(1, code);
-                    } else {
-                        str += ch;
-                    }
-                    break;
-            }
-        } else {
-            str += ch;
-        }
-    }
-    
-    if (quote != -1) {
-        _index = start;
-        [self _throwUnexpectedTokenError];
-    }
-    
-    WXJSToken *token = new WXJSToken();
-    token->type = WXJSTokenTypeStringLiteral;
-    token->value = str;
-    token->octal = octal;
-    token->start = start;
-    token->end = _index;
-    
-    return token;
-}
-
-- (int)scanUnicodeCodePointEscape {
-    int ch = _source[_index];
-    int code = 0;
-    
-    if (ch == '}') { // '}'
-        [self _throwError:@"At least one hex digit is required in Unicode"];
-    }
-    
-    while (_index < _length) {
-        ch = _source[_index++];
-        if (!isHexDigit(ch)) {
-            break;
-        }
-        code = (int)(code * 16 + std::string("0123456789abcdef").find(tolower(ch)));
-    }
-    
-    if (code > 0x10FFFF || ch != '}') {
-        [self _throwUnexpectedTokenError];
-    }
-    
-    return code;
-}
-
-- (WXJSToken *)scanNumericLiteral
-{
-    int start = _index;
-    int ch = _source[start];
-    std::string num;
-    if (ch != '.') {
-        num = _source[_index++];
-        ch = _source[_index];
-        
-        if (num == "0") {
-            if (ch == 'x' || ch == 'X') {
-                ++_index;
-                return [self scanHexLiteral:start];
-            }
-            if (ch == 'b' || ch == 'B') {
-                ++_index;
-                return [self scanBinaryLiteral:start];
-            }
-            if (ch == 'o' || ch == 'O') {
-                return [self scanOctalLiteral:ch start:start];
-            }
-        }
-        
-        while (isDecimalDigit(_source[_index])) {
-            num += _source[_index++];
-        }
-        ch = _source[_index];
-    }
-    
-    if (ch == '.') {
-        num += _source[_index++];
-        while (isDecimalDigit(_source[_index])) {
-            num += _source[_index++];
-        }
-        ch = _source[_index];
-    }
-    
-    if (ch == 'e' || ch == 'E') {
-        num += _source[_index++];
-        
-        ch = _source[_index];
-        if (ch == '+' || ch == '-') {
-            num += _source[_index++];
-        }
-        if (isDecimalDigit(_source[_index])) {
-            while (isDecimalDigit(_source[_index])) {
-                num += _source[_index++];
-            }
-        } else {
-            [self _throwUnexpectedTokenError];
-        }
-    }
-    
-    if (isIdentifierStart(_source[_index])) {
-        [self _throwUnexpectedTokenError];
-    }
-    
-    WXJSToken *token = new WXJSToken();
-    token->type = WXJSTokenTypeNumericLiteral;
-    token->doubleValue = atof(num.c_str());
-    token->start = start;
-    token->end = _index;
-    
-    return token;
-}
-
-- (WXJSToken *)scanHexLiteral:(int)start
-{
-    std::string num = "";
-    while (_index < _length) {
-        if (!isHexDigit(_source[_index])) {
-            break;
-        }
-        num += _source[_index++];
-    }
-    
-    if (num.length() == 0) {
-        [self _throwUnexpectedTokenError];
-    }
-    
-    if (isIdentifierStart(_source[_index])) {
-        [self _throwUnexpectedTokenError];
-    }
-    
-    WXJSToken *token = new WXJSToken();
-    token->type = WXJSTokenTypeNumericLiteral;
-    token->doubleValue = static_cast<double>(std::stoi(num, nullptr, 16));
-    token->start = start;
-    token->end = _index;
-    
-    return token;
-}
-
-- (WXJSToken *)scanBinaryLiteral: (int)start
-{
-    std::string num = "";
-    int ch;
-    
-    while (_index < _length) {
-        ch = _source[_index];
-        if (ch != '0' && ch != '1') {
-            break;
-        }
-        num += _source[_index++];
-    }
-    
-    if (num.length() == 0) {
-        // only 0b or 0B
-        [self _throwUnexpectedTokenError];
-    }
-    
-    if (_index < _length) {
-        ch = _source[_index];
-        /* istanbul ignore else */
-        if (isIdentifierStart(ch) || isDecimalDigit(ch)) {
-            [self _throwUnexpectedTokenError];
-        }
-    }
-    
-    WXJSToken *token = new WXJSToken();
-    token->type = WXJSTokenTypeNumericLiteral;
-    token->doubleValue = static_cast<double>(std::stoi(num, nullptr, 2));
-    token->start = start;
-    token->end = _index;
-    
-    return token;
-}
-- (WXJSToken *)scanOctalLiteral:(int)prefix start:(int)start
-{
-    std::string num = "";
-    bool octal = false;
-    
-    if (isOctalDigit(prefix)) {
-        octal = true;
-        num = '0' + _source[_index++];
-    } else {
-        ++_index;
-    }
-    
-    while (_index < _length) {
-        if (!isOctalDigit(_source[_index])) {
-            break;
-        }
-        num += _source[_index++];
-    }
-    
-    if (!octal && num.length() == 0) {
-        // only 0o or 0O
-        [self _throwUnexpectedTokenError];
-    }
-    
-    if (isIdentifierStart(_source[_index]) || isDecimalDigit(_source[_index])) {
-        [self _throwUnexpectedTokenError];
-    }
-    
-    WXJSToken *token = new WXJSToken();
-    token->type = WXJSTokenTypeNumericLiteral;
-    token->doubleValue = static_cast<double>(std::stoi(num, nullptr, 8));
-    token->octal = octal;
-    token->start = start;
-    token->end = _index;
-    
-    return token;
-}
-
-- (int)scanHexEscape:(int)prefix
-{
-    int i, len, ch, code = 0;
-    
-    len = (prefix == 'u') ? 4 : 2;
-    for (i = 0; i < len; ++i) {
-        if (_index < _length && isHexDigit(_source[_index])) {
-            ch = _source[_index++];
-            code = (int)(code * 16 + std::string("0123456789abcdef").find(tolower(ch)));
-        } else {
-            return -1;
-        }
-    }
-    return code;
-}
-
-- (WXJSExpression *)parseExpression
-{
-    return [self parseConditionalExpression];
-}
-
-- (WXJSExpression *)parseConditionalExpression
-{
-    WXJSExpression *expr = [self parseBinaryExpression];
-    
-    if ([self match:"?"]) {
-        [self nextToken];
-        WXJSExpression *consequent = [self parseConditionalExpression];
-        [self expect:":"];
-        WXJSExpression *alternate = [self parseConditionalExpression];
-        
-        WXJSConditionalExpression *conditionalExpr = new WXJSConditionalExpression();
-        conditionalExpr->test = expr;
-        conditionalExpr->consequent = consequent;
-        conditionalExpr->alternate = alternate;
-        
-        return conditionalExpr;
-    }
-    
-    return expr;
-}
-
-- (WXJSExpression *)parseBinaryExpression
-{
-    WXJSExpression *expr = [self parseUnaryExpression];
-    
-    std::vector<int> precedenceStack;
-    std::vector<WXJSToken *> operatorStack;
-    std::vector<WXJSExpression *> expressionStack;
-    
-    WXJSToken *token = _lookahead;
-    int prec = binaryPrecedence(token);
-    if (prec == 0) {
-        return expr;
-    }
-    
-    [self nextToken];
-    
-    expressionStack.push_back(expr);
-    precedenceStack.push_back(prec);
-    operatorStack.push_back(token);
-    expressionStack.push_back([self parseUnaryExpression]);
-    
-    WXJSExpression *right;
-    std::string operator_;
-    WXJSExpression *left;
-    while ((prec = binaryPrecedence(_lookahead)) > 0) {
-        while ((expressionStack.size() > 1) && (prec <= precedenceStack[precedenceStack.size() - 1])) {
-            right = expressionStack[expressionStack.size() - 1];
-            expressionStack.pop_back();
-            operator_ = operatorStack[operatorStack.size() - 1]->value;
-            operatorStack.pop_back(); precedenceStack.pop_back();
-            left = expressionStack[expressionStack.size() - 1]; expressionStack.pop_back();
-            expressionStack.push_back([self createBinaryExpression:operator_ left:left right:right]);
-        }
-        
-        // Shift.
-        token = [self nextToken];
-        precedenceStack.push_back(prec);
-        operatorStack.push_back(token);
-        expressionStack.push_back([self parseUnaryExpression]);
-    }
-    
-    // Final reduce to clean-up the stack.
-    int i = (int)(expressionStack.size() - 1);
-    expr = expressionStack[i];
-    while (i > 0) {
-        expr = [self createBinaryExpression:operatorStack[i - 1]->value left:expressionStack[i - 1] right:expr];
-        i--;
-    }
-    
-    return expr;
-}
-
-- (WXJSExpression *)parseUnaryExpression
-{
-    WXJSToken *token;
-    
-    if ([self match:"++"] || [self match:"--"] || [self match:"+"] || [self match:"-"] || [self match:"~"] || [self match:"!"]) {
-        token = [self nextToken];
-        WXJSExpression *argument = [self parseUnaryExpression];
-        WXJSUnaryExpression *expr = new WXJSUnaryExpression();
-        expr->operator_ = token->value;
-        expr->prefix = ([self match:"++"] || [self match:"--"]) ? true : false;
-        expr->argument = argument;
-        return expr;
-    }
-    
-    return [self parseMemberExpression];
-}
-
-- (WXJSExpression *)parsePrimaryExpression
-{
-    int type = _lookahead->type;
-    
-    if (type == WXJSTokenTypePunctuator) {
-        if (_lookahead->value == "[") {
-            return [self parseArrayExpression];
-        } else if (_lookahead->value == "(") {
-            return [self parseGroupExpression];
-        }
-    }
-    if (type == WXJSTokenTypeIdentifier) {
-        WXJSIdentifier *identifier = new WXJSIdentifier();
-        identifier->name = [self nextToken]->value;
-        return identifier;
-    }
-    
-    if (type == WXJSTokenTypeStringLiteral || type == WXJSTokenTypeNumericLiteral || type == WXJSTokenTypeBooleanLiteral || type == WXJSTokenTypeNullLiteral) {
-        return [self createLiteral:[self nextToken]];
-    } else {
-        [self _throwUnexpectedTokenError];
-        return new WXJSIdentifier();
-    }
-}
-
-- (WXJSArrayExpression *)parseArrayExpression
-{
-    std::vector<WXJSExpression *> expressions;
-    
-    [self expect:"["];
-    
-    while (![self match:"]"]) {
-        if ([self match:","]) {
-            [self nextToken];
-            expressions.push_back(NULL);
-        } else {
-            expressions.push_back([self parseConditionalExpression]);
-            
-            if (![self match:"]"]) {
-                [self expect:","];
-            }
-        }
-    }
-    
-    [self expect:"]"];
-    
-    WXJSArrayExpression *array = new WXJSArrayExpression();
-    array->expressions = expressions;
-    
-    return array;
-}
-
-- (WXJSExpression *)parseGroupExpression
-{
-    WXJSExpression *expr;
-    [self expect:"("];
-    
-    expr = [self parseConditionalExpression];
-    
-    [self expect:")"];
-    
-    return expr;
-}
-
-
-- (WXJSExpression *)parseMemberExpression
-{
-    WXJSExpression *expr = [self parsePrimaryExpression];
-    if ([self match:"."]) {
-        [self expect:"."];
-        WXJSExpression * property = [self parseMemberExpression];
-        WXJSMemberExpression *memberExpr = new WXJSMemberExpression();
-        memberExpr->object = expr;
-        memberExpr->property = property;
-        memberExpr->computed = false;
-        return memberExpr;
-    } else if ([self match:"["]) {
-        [self expect:"["];
-        WXJSExpression *property = [self parseConditionalExpression];
-        [self expect:"]"];
-        WXJSMemberExpression *memberExpr = new WXJSMemberExpression();
-        memberExpr->object = expr;
-        memberExpr->property = property;
-        memberExpr->computed = true;
-        return memberExpr;
-    }
-    
-    return expr;
-}
-
-- (WXJSExpression *)createBinaryExpression:(const std::string &)operator_ left:(WXJSExpression *)left right:(WXJSExpression *)right
-{
-    WXJSBinaryExpression *node = new WXJSBinaryExpression();
-    node->operator_ = operator_;
-    node->left = left;
-    node->right = right;
-    return node;
-}
-
-- (WXJSLiteral *)createLiteral:(WXJSToken *)token
-{
-    if (token->type == WXJSTokenTypeNumericLiteral) {
-        WXJSNumericLiteral *node = new WXJSNumericLiteral();
-        node->value = token->doubleValue;
-        return node;
-    } else if (token->type == WXJSTokenTypeNullLiteral) {
-        WXJSNullLiteral *node = new WXJSNullLiteral();
-        return node;
-    } else if (token->type == WXJSTokenTypeStringLiteral) {
-        WXJSStringLiteral *node = new WXJSStringLiteral();
-        node->value = token->value;
-        return node;
-    } else if (token->type == WXJSTokenTypeBooleanLiteral) {
-        WXJSBooleanLiteral *node = new WXJSBooleanLiteral();
-        node->value = token->value == "true";
-        return node;
-    } else {
-        assert(false);
-    }
-}
-
-- (void)skipSpaces
-{
-    int ch;
-    while (_index < _length) {
-        ch = _source[_index];
-        if (isWhiteSpace(ch)) {
-            ++_index;
-        } else {
-            break;
-        }
-    }
-}
-
-- (bool)match:(std::string)value
-{
-    return _lookahead->type == WXJSTokenTypePunctuator && _lookahead->value == value;
-}
-
-- (void)expect:(std::string)value
-{
-    WXJSToken *token = [self nextToken];
-    if (token->type != WXJSTokenTypePunctuator || token->value != value) {
-        [self _throwUnexpectedTokenError];
-    }
-}
-
-- (void)_throwUnexpectedTokenError
-{
-    [self _throwError:@"Unexpected Token"];
-}
-
-- (void)_throwError:(NSString *)errorMessage
-{
-    WXLogError(@"%@, index:%d, script:%s", errorMessage, _index, _source.c_str());
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.h
deleted file mode 100644
index 62decc0..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXScrollerComponent.h"
-
-@class WXRecycleListDataManager;
-@class WXRecycleListTemplateManager;
-@class WXRecycleListUpdateManager;
-
-@interface WXRecycleListComponent : WXScrollerComponent
-
-@property(nonatomic, strong) WXRecycleListDataManager *dataManager;
-@property(nonatomic, strong) WXRecycleListTemplateManager *templateManager;
-@property(nonatomic, strong) WXRecycleListUpdateManager *updateManager;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.mm
deleted file mode 100644
index 4b046a6..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListComponent.mm
+++ /dev/null
@@ -1,782 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXLog.h"
-#import "WXUtility.h"
-#import "WXComponent_internal.h"
-#import "WXComponentManager.h"
-#import "WXSDKInstance_private.h"
-
-#import "WXCellSlotComponent.h"
-#import "WXRecycleListLayout.h"
-#import "WXRecycleListComponent.h"
-#import "WXRecycleListDataManager.h"
-#import "WXRecycleListTemplateManager.h"
-#import "WXRecycleListUpdateManager.h"
-#import "WXBridgeManager.h"
-#import "WXSDKManager.h"
-#import "WXComponent+DataBinding.h"
-#import "WXComponent+Layout.h"
-#import "WXModuleProtocol.h"
-
-@interface WXRecycleListComponentView:UICollectionView
-@end
-
-@implementation WXRecycleListComponentView
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    if ([(id <WXScrollerProtocol>) self.wx_component respondsToSelector:@selector(requestGestureShouldStopPropagation:shouldReceiveTouch:)]) {
-        return [(id <WXScrollerProtocol>) self.wx_component requestGestureShouldStopPropagation:gestureRecognizer shouldReceiveTouch:touch];
-    }
-    else{
-        return YES;
-    }
-}
-
-- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
-{
-    [super setContentOffset:contentOffset animated:animated];
-    BOOL scrollStartEvent = [[self.wx_component valueForKey:@"_scrollStartEvent"] boolValue];
-    id scrollEventListener = [self.wx_component valueForKey:@"_scrollEventListener"];
-    
-    if (animated && (scrollStartEvent ||scrollEventListener)  && !WXPointEqualToPoint(contentOffset, self.contentOffset)) {
-        CGFloat scaleFactor = self.wx_component.weexInstance.pixelScaleFactor;
-        NSDictionary *contentSizeData = @{@"width":@(self.contentSize.width / scaleFactor),
-                                          @"height":@(self.contentSize.height / scaleFactor)};
-        NSDictionary *contentOffsetData = @{@"x":@(-self.contentOffset.x / scaleFactor),
-                                            @"y":@(-self.contentOffset.y / scaleFactor)};
-        if (scrollStartEvent) {
-            [self.wx_component fireEvent:@"scrollstart" params:@{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData} domChanges:nil];
-        }
-        if (scrollEventListener) {
-            WXScrollerComponent *component = (WXScrollerComponent *)self.wx_component;
-            component.scrollEventListener(component, @"scrollstart", @{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData});
-        }
-    }
-}
-
-@end
-
-@interface WXRecycleListComponent () <WXRecycleListLayoutDelegate, WXRecycleListUpdateDelegate, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource>
-
-@end
-
-@implementation WXRecycleListComponent
-{
-    NSString *_templateSwitchKey;
-    NSString *_aliasKey;
-    NSString *_indexKey;
-    __weak UICollectionView *_collectionView;
-    
-    NSMutableDictionary *_sizeCache;
-    NSMutableDictionary *_stickyCache;
-    
-    NSUInteger _previousLoadMoreCellNumber;
-}
-
-WX_EXPORT_METHOD(@selector(appendData:))
-WX_EXPORT_METHOD(@selector(appendRange:))
-WX_EXPORT_METHOD(@selector(insertData:data:))
-WX_EXPORT_METHOD(@selector(updateData:data:))
-WX_EXPORT_METHOD(@selector(removeData:count:))
-WX_EXPORT_METHOD(@selector(moveData:toIndex:))
-WX_EXPORT_METHOD(@selector(insertRange:range:))
-WX_EXPORT_METHOD(@selector(setListData:))
-WX_EXPORT_METHOD(@selector(scrollTo:options:))
-WX_EXPORT_METHOD(@selector(scrollToElement:options:))
-WX_EXPORT_METHOD(@selector(queryElement:cssSelector:callback:))
-WX_EXPORT_METHOD(@selector(queryElementAll:cssSelector:callback:))
-WX_EXPORT_METHOD(@selector(closest:cssSelector:callback:))
-
-- (instancetype)initWithRef:(NSString *)ref
-                       type:(NSString *)type
-                     styles:(NSDictionary *)styles
-                 attributes:(NSDictionary *)attributes
-                     events:(NSArray *)events
-               weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _dataManager = attributes[@"listData"]? [[WXRecycleListDataManager alloc] initWithData:attributes[@"listData"]] : [WXRecycleListDataManager new];
-        _templateManager = [WXRecycleListTemplateManager new];
-        _updateManager = [WXRecycleListUpdateManager new];
-        _updateManager.delegate = self;
-        _templateSwitchKey = [WXConvert NSString:attributes[@"switch"]];
-        _aliasKey = [WXConvert NSString:attributes[@"alias"]];
-        _indexKey = [WXConvert NSString:attributes[@"index"]];
-        _sizeCache = [NSMutableDictionary dictionary];
-        _stickyCache = [NSMutableDictionary dictionary];
-    }
-    
-    return self;
-}
-
-#pragma mark - WXComponent Methods
-
-- (UIView *)loadView
-{
-    WXRecycleListLayout *layout = [self recycleListLayout];
-    return [[WXRecycleListComponentView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    
-    _collectionView = (UICollectionView *)self.view;
-    _collectionView.allowsSelection = NO;
-    _collectionView.allowsMultipleSelection = NO;
-    _collectionView.dataSource = self;
-    _collectionView.delegate = self;
-    
-    _templateManager.collectionView = _collectionView;
-    _updateManager.collectionView = _collectionView;
-}
-
-- (void)viewWillUnload
-{
-    [super viewWillUnload];
-    
-    _collectionView.dataSource = nil;
-    _collectionView.delegate = nil;
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    [super updateAttributes:attributes];
-    
-    if (attributes[@"listData"]) {
-        NSArray *listData = attributes[@"listData"];
-        [self _updateListData:listData withCompletion:nil animation:NO];
-    }
-    if (attributes[@"switch"]) {
-        _templateSwitchKey = [WXConvert NSString:attributes[@"switch"]];
-    }
-    if (attributes[@"alias"]) {
-        _aliasKey = [WXConvert NSString:attributes[@"alias"]];
-    }
-    if (attributes[@"index"]) {
-        _indexKey = [WXConvert NSString:attributes[@"index"]];
-    }
-    if (attributes[@"scrollDirection"]) {
-        WXScrollDirection newScrollDirection = attributes[@"scrollDirection"] ? [WXConvert WXScrollDirection:attributes[@"scrollDirection"]] : WXScrollDirectionVertical;
-        [self _updateScrollDirection:newScrollDirection];
-    }
-}
-
-- (CGPoint)absolutePositionForComponent:(WXComponent *)component
-{
-    CGPoint position = CGPointZero;
-    UIView *view = component->_view;
-    while (view) {
-        if ([view isKindOfClass:[UICollectionViewCell class]]) {
-            NSIndexPath *indexPath = [_collectionView indexPathForCell:(UICollectionViewCell *)view];
-            if (!indexPath) {
-                return CGPointMake(NAN, NAN);
-            }
-            UICollectionViewLayoutAttributes *attributes = [_collectionView layoutAttributesForItemAtIndexPath:indexPath];
-            CGPoint cellOrigin = attributes.frame.origin;
-            position = CGPointMake(position.x + cellOrigin.x,
-                                   position.y + cellOrigin.y);
-            break;
-        }
-        position = CGPointMake(position.x + view.frame.origin.x,
-                               position.y + view.frame.origin.y);
-        view = view.superview;
-    }
-    
-    return position;
-}
-
-- (void)setContentSize:(CGSize)contentSize
-{
-    // Do Nothing
-}
-
-- (void)adjustSticky
-{
-    // Do Nothing, sticky is adjusted by layout
-}
-
-#pragma mark - Load More Event
-
-- (void)loadMore
-{
-    [super loadMore];
-    _previousLoadMoreCellNumber = [_collectionView numberOfItemsInSection:0];
-}
-
-- (BOOL)isNeedLoadMore
-{
-    BOOL superNeedLoadMore = [super isNeedLoadMore];
-    return superNeedLoadMore && _previousLoadMoreCellNumber != [_collectionView numberOfItemsInSection:0];
-}
-
-- (void)resetLoadmore
-{
-    [super resetLoadmore];
-    _previousLoadMoreCellNumber = 0;
-}
-
-#pragma mark - Exported Component Methods
-
-- (void)appendData:(id)appendingData
-{
-    if (!appendingData){
-        return;
-    }
-    NSMutableArray * newListData = [[_dataManager data] mutableCopy];
-    [newListData addObject:appendingData];
-}
-
-- (void)appendRange:(NSArray*)data
-{
-    if (![data isKindOfClass:[NSArray class]]) {
-        WXLogError(@"wrong format of appending data:%@", data);
-        return;
-    }
-    
-    NSArray *oldData = [_dataManager data];
-    [_updateManager updateWithAppendingData:data oldData:oldData completion:nil animation:NO];
-}
-
-- (void)setListData:(NSArray*)data
-{
-    if ([data count]) {
-        [_dataManager updateData:data];
-    }
-}
-- (void)insertData:(NSUInteger)index data:(id)data
-{
-    // TODO: bring the update logic to UpdateManager
-    // TODO: update cell because index has changed
-    NSMutableArray *newListData = [[_dataManager data] mutableCopy];
-    if (index <= newListData.count) {
-        [newListData insertObject:data atIndex:index];
-        [_dataManager updateData:newListData];
-        
-        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:index inSection:0];
-        
-        [UIView performWithoutAnimation:^{
-            [self->_collectionView insertItemsAtIndexPaths:@[indexPath]];
-        }];
-    }
-}
-
-- (void)updateComponentData:(NSString*)componentDataId componentData:(NSDictionary*)componentData callback:(NSString*)callbackId
-{
-    NSMutableDictionary * virtualComponentData = [[_dataManager virtualComponentDataWithId:componentDataId] mutableCopy];
-    NSIndexPath * indexPath = virtualComponentData[@"indexPath"];
-    if (!indexPath) {
-        return;
-    }
-    virtualComponentData = virtualComponentData?:[NSMutableDictionary new];
-    [virtualComponentData addEntriesFromDictionary:componentData];
-    [_dataManager updateVirtualComponentData:componentDataId data:[virtualComponentData copy]];
-    virtualComponentData[@"@phase"] = @"update";
-    virtualComponentData[@"callbackId"] = callbackId;
-    [self _updateDataForCellSlotAtIndexPath:indexPath data:virtualComponentData];
-}
-
-- (void)_updateDataForCellSlotAtIndexPath:(NSIndexPath*)indexPath data:(NSDictionary*)data
-{
-    if(!indexPath || !data) {
-        return;
-    }
-    WXPerformBlockOnMainThread(^{
-        UICollectionViewCell * cellView = [self->_collectionView cellForItemAtIndexPath:indexPath];
-        WXCellSlotComponent * cellSlotComponent = (WXCellSlotComponent*)cellView.wx_component;
-        if (cellSlotComponent) {
-            [self _updateBindingData:data forCell:cellSlotComponent atIndexPath:indexPath];
-        }
-        // callback when update virtual component data success.
-        NSString * callbackId = data[@"callbackId"];
-        if (callbackId) {
-            [[WXSDKManager bridgeMgr] callBack:self.weexInstance.instanceId funcId:callbackId params:@{@"result":@"success"}];
-        }
-    });
-}
-
-- (void)updateData:(NSUInteger)index data:(id)data
-{
-    NSMutableArray *newListData = [[_dataManager data] mutableCopy];
-    if (!data && index > [newListData count]) {
-        return;
-    }
-    // TODO: bring the update logic to UpdateManager
-    newListData[index] = data;
-    [_dataManager updateData:newListData];
-    NSMutableDictionary * newData = nil;
-    if (![data isKindOfClass:[NSDictionary class]]) {
-         newData = [NSMutableDictionary new];
-        [newData setObject:@"data" forKey:data];
-        data = newData;
-    }
-    newData = [data mutableCopy];
-    newData[@"@phase"] = @"update";
-    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
-    [self _updateDataForCellSlotAtIndexPath:indexPath data:[newData copy]];
-}
-
-- (void)insertRange:(NSInteger)index range:(NSArray*)data
-{
-    if (![data count]) {
-        WXLogDebug(@"ignore invalid insertRange");
-        return;
-    }
-    
-    NSMutableArray * newListData = [[_dataManager data] mutableCopy];
-    NSRange range = NSMakeRange(index,[data count]);
-    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range];
-    [newListData insertObjects:data atIndexes:indexSet];
-    [_dataManager updateData:newListData];
-    [_collectionView reloadData];
-}
-
-- (void)removeData:(NSInteger)index count:(NSInteger)count
-{
-    // TODO: bring the update logic to UpdateManager
-    
-    NSMutableArray *newListData = [[_dataManager data] mutableCopy];
-    if (index > [newListData count] || index + count - 1 > [newListData count]) {
-        
-        return;
-    }
-    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(index, count)];
-    [newListData removeObjectsAtIndexes:indexSet];
-    __block NSMutableArray<NSIndexPath*>* indexPaths = [NSMutableArray new];
-    [indexSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
-        NSIndexPath* indexPath = [NSIndexPath indexPathForRow:idx inSection:0];
-        [indexPaths addObject:indexPath];
-    }];
-    
-    [_dataManager updateData:newListData];
-    [_dataManager deleteVirtualComponentAtIndexPaths:indexPaths];
-    [UIView performWithoutAnimation:^{
-        [self->_collectionView deleteItemsAtIndexPaths:indexPaths];
-        [self->_collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
-    }];
-}
-
-- (void)moveData:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex
-{
-    // TODO: bring the update logic to UpdateManager
-    NSMutableArray *newListData = [[_dataManager data] mutableCopy];
-    id data = newListData[fromIndex];
-    [newListData removeObjectAtIndex:fromIndex];
-    [newListData insertObject:data atIndex:toIndex];
-    [_dataManager updateData:newListData];
-    
-    NSIndexPath *fromIndexPath = [NSIndexPath indexPathForItem:fromIndex inSection:0];
-    NSIndexPath *toIndexPath = [NSIndexPath indexPathForItem:toIndex inSection:0];
-    [UIView performWithoutAnimation:^{
-        [self->_collectionView moveItemAtIndexPath:fromIndexPath toIndexPath:toIndexPath];
-    }];
-}
-
-- (void)scrollTo:(NSString *)virtualElementInfo options:(NSDictionary *)options
-{
-    NSUInteger position = 0;
-    if ([virtualElementInfo isKindOfClass:[NSNumber class]]) {
-        position = [virtualElementInfo integerValue];
-    }
-    else
-    {
-        if (virtualElementInfo.length == 0) {
-            return;
-        }
-        position = [self _positionForVirtualElementInfo:virtualElementInfo];
-    }
-    NSIndexPath *toIndexPath = [NSIndexPath indexPathForItem:position inSection:0];
-    BOOL animated = options[@"animated"] ? [WXConvert BOOL:options[@"animated"]] : YES;
-    [_collectionView scrollToItemAtIndexPath:toIndexPath atScrollPosition:UICollectionViewScrollPositionTop animated:animated];
-}
-
-- (void)scrollToElement:(NSString *)virtualElementInfo options:(NSDictionary *)options
-{
-    [self scrollTo:virtualElementInfo options:options];
-}
-
-- (void)queryElement:(NSString *)virtualElementInfo cssSelector:(NSString *)cssSelector callback:(WXModuleCallback)callback
-{
-    [self _queryElement:virtualElementInfo cssSelector:cssSelector callback:callback isAll:NO];
-}
-
-- (void)queryElementAll:(NSString *)virtualElementInfo cssSelector:(NSString *)cssSelector callback:(WXModuleCallback)callback
-{
-    [self _queryElement:virtualElementInfo cssSelector:cssSelector callback:callback isAll:YES];
-}
-
-- (NSString *)_refForVirtualElementInfo:(NSString *)virtualElementInfo
-{
-    if ([virtualElementInfo isKindOfClass:[NSString class]]){
-        NSArray *stringArray = [virtualElementInfo componentsSeparatedByString:@"@"];
-        if (stringArray.count == 2) {
-            return stringArray[0];
-        }
-    }
-    return nil;
-}
-
-- (NSUInteger )_positionForVirtualElementInfo:(NSString *)virtualElementInfo
-{
-    NSArray *stringArray = [virtualElementInfo componentsSeparatedByString:@"@"];
-    if (stringArray.count == 2) {
-        return [stringArray[1] integerValue];
-    }
-    return 0;
-}
-
-- (void)closest:(NSString *)virtualElementInfo cssSelector:(NSString *)cssSelector callback:(WXModuleCallback)callback
-{
-    if(callback)
-    {
-        WXPerformBlockOnComponentThread(^{
-            WXComponent *component = [self.weexInstance.componentManager componentForRef:[self _refForVirtualElementInfo:virtualElementInfo]];
-            if (component) {
-                callback([self _closestComponentForCSSSelector:cssSelector component:component]);
-            }
-        });
-    }
-}
-
-- (NSDictionary *)_closestComponentForCSSSelector:(NSString *)cssSelector component:(WXComponent *)component
-{
-    WXComponent *supercomponent = component.supercomponent;
-    if ([self _parseCssSelector:cssSelector component:supercomponent]) {
-        NSDictionary *info = @{@"attrs":supercomponent.attributes,@"type":supercomponent->_type,@"ref":supercomponent.ref};
-        return info;
-    }
-    else
-    {
-        if ([supercomponent isKindOfClass:[WXRecycleListComponent class]] ) {
-            return nil;
-        }
-        return [self _closestComponentForCSSSelector:cssSelector component:supercomponent];
-    }
-}
-
-- (void)_queryElement:(NSString *)virtualElementInfo cssSelector:(NSString *)cssSelector callback:(WXModuleCallback)callback isAll:(BOOL)isAll
-{
-    if(callback)
-    {
-        WXPerformBlockSyncOnComponentThread(^{
-            WXComponent *component = [self.weexInstance.componentManager componentForRef:[self _refForVirtualElementInfo:virtualElementInfo]];
-            if (component) {
-                NSMutableArray *infoArray = [NSMutableArray new];
-                [self _matchComponentForCSSSelector:cssSelector component:component infoArray:infoArray];
-                if (isAll) {
-                    callback(infoArray);
-                }
-                else
-                {
-                    if (infoArray.count != 0) {
-                        callback(infoArray[0]);
-                    }
-                }
-            }
-        });
-    }
-}
-
-- (void)_matchComponentForCSSSelector:(NSString *)cssSelector component:(WXComponent *)component infoArray:(NSMutableArray *)infoArray
-{
-    for (WXComponent *subcomponent in component.subcomponents) {
-        if ([self _parseCssSelector:cssSelector component:subcomponent]) {
-            NSDictionary *info = @{@"attrs":subcomponent.attributes,@"type":subcomponent->_type,@"ref":subcomponent.ref};
-            [infoArray addObject:info];
-        }
-        if (subcomponent.subcomponents.count != 0) {
-            [self _matchComponentForCSSSelector:cssSelector component:subcomponent infoArray:infoArray];
-        }
-    }
-}
-
-- (BOOL)_parseCssSelector:(NSString *)cssSelector component:(WXComponent *)component
-{
-    if (!cssSelector) {
-        return NO;
-    }
-    if ([cssSelector hasPrefix:@"["]&&[cssSelector hasSuffix:@"]"]) {
-        NSCharacterSet *unwantedChars = [NSCharacterSet characterSetWithCharactersInString:@"\"[]"];
-        NSString *requiredString = [[cssSelector componentsSeparatedByCharactersInSet:unwantedChars] componentsJoinedByString:@""];
-        NSArray *selectorArray = [requiredString componentsSeparatedByString:@"="];
-        if (selectorArray.count == 2) {
-            NSString *attribute = selectorArray[0];
-            NSString *value = selectorArray[1];
-            NSDictionary *componentAttrs = component.attributes;
-            NSString *valueString = [NSString stringWithFormat:@"%@",componentAttrs[attribute]];
-            if ([valueString isEqualToString:value]) {
-                return YES;
-            }
-        }
-    }
-    return NO;
-}
-
-#pragma mark - WXComponent Internal Methods
-
-- (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    BOOL inserted = [super _insertSubcomponent:subcomponent atIndex:index];
-    if ([subcomponent isKindOfClass:[WXCellSlotComponent class]]) {
-        WXCellSlotComponent *cell = (WXCellSlotComponent*)subcomponent;
-        [self.weexInstance.componentManager _addUITask:^{
-            [_templateManager addTemplate:cell];
-        }];
-        //TODO: update collection view if adding template
-    }
-    return inserted;
-}
-
-#pragma mark - Private
-
-- (void)_updateBindingData:(id)data forCell:(WXCellSlotComponent *)cellComponent atIndexPath:(NSIndexPath *)indexPath
-{
-    id originalData = data;
-    if (![originalData isKindOfClass:[NSDictionary class]]) {
-        if (_aliasKey) {
-            NSMutableDictionary * dictionary = [NSMutableDictionary dictionary];
-            [dictionary setObject:data forKey:_aliasKey];
-            data = dictionary;
-        } else {
-            return;
-        }
-    }
-    
-    if (!data[@"indexPath"] || !data[@"recycleListComponentRef"]) {
-        NSMutableDictionary * dataNew = [data mutableCopy];
-        dataNew[@"recycleListComponentRef"] = self.ref;
-        dataNew[@"indexPath"] = indexPath;
-        data = dataNew;
-    }
-    
-    if ([originalData isKindOfClass:[NSDictionary class]] && _aliasKey &&!data[@"phase"]) {
-        data = @{_aliasKey:data,@"aliasKey":_aliasKey};
-    }
-    
-    if (_indexKey) {
-        NSMutableDictionary *dataNew = [data mutableCopy];
-        dataNew[_indexKey] = @(indexPath.item);
-        data = dataNew;
-    }
-    
-#ifdef DEBUG
-    NSDate *startTime = [NSDate date];
-#endif
-    
-    WXPerformBlockSyncOnComponentThread(^{
-        [cellComponent updateCellData:[data copy]];
-    });
-#ifdef DEBUG
-    double duration = -[startTime timeIntervalSinceNow] * 1000;
-    WXLogDebug(@"cell:%li update data time:%f", (long)indexPath.item, duration);
-#endif
-    
-    NSValue *cachedSize = _sizeCache[indexPath];
-    if (!cachedSize || !CGSizeEqualToSize([cachedSize CGSizeValue] , cellComponent.calculatedFrame.size)) {
-        _sizeCache[indexPath] = [NSValue valueWithCGSize:cellComponent.calculatedFrame.size];
-        [_collectionView.collectionViewLayout invalidateLayout];
-    }
-    NSNumber *cachedSticky = _stickyCache[indexPath];
-    BOOL isSticky = cellComponent->_positionType == WXPositionTypeSticky;
-    if (!cachedSticky || [cachedSticky boolValue] != isSticky) {
-        _stickyCache[indexPath] = @(isSticky);
-    }
-}
-
-- (void)_updateListData:(NSArray *)newData
-        withCompletion:(WXRecycleListUpdateCompletion)completion
-             animation:(BOOL)animation
-{
-    if (![newData isKindOfClass:[NSArray class]]) {
-        WXLogError(@"wrong format of list data:%@", newData);
-        if (completion) {
-            completion(NO);
-        }
-        return;
-    }
-    
-    NSArray *oldData = [_dataManager data];
-    [_updateManager updateWithNewData:newData oldData:oldData completion:completion animation:animation];
-}
-
-- (void)_updateScrollDirection:(WXScrollDirection)newScrollDirection
-{   
-    WXRecycleListLayout *layout = [self recycleListLayout];
-    _collectionView.collectionViewLayout = layout;
-}
-
-- (WXRecycleListLayout *)recycleListLayout
-{
-    WXRecycleListLayout *layout = [WXRecycleListLayout new];
-    layout.delegate = self;
-    // to show cells that original width / height is zero, otherwise cellForItemAtIndexPath will not be called
-    layout.minimumLineSpacing = 0.01;
-    layout.minimumInteritemSpacing = 0.01;
-    if (WXScrollDirectionHorizontal == self.scrollDirection) {
-        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
-    }
-    return layout;
-}
-
-#pragma mark - UICollectionViewDataSource
-
-- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
-{
-    return 1;
-}
-
-- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
-{
-    return [_dataManager numberOfItems];
-}
-
-- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    // 1. get the data relating to the cell
-    id data = [_dataManager dataAtIndex:indexPath.row];
-    
-    // 2. get the template type specified by data, and if template is not found, return an empty view of any template to avoid crash.
-    NSString * templateType = [self templateType:indexPath];
-    _templateManager.collectionView = collectionView;
-    if (!templateType) {
-        WXLogError(@"Template %@ not registered for collection view.", templateType);
-        UICollectionViewCell *cellView = [_collectionView dequeueReusableCellWithReuseIdentifier:[_templateManager anyRegisteredTemplate] forIndexPath:indexPath];
-        for (UIView *view in cellView.contentView.subviews) {
-            [view removeFromSuperview];
-        }
-        cellView.wx_component = nil;
-        [cellView setAccessibilityIdentifier:nil];
-        return cellView;
-    }
-    if (![_templateManager isTemplateRegistered:templateType]) {
-        templateType = @"default";
-    }
-    
-    // 3. dequeue a cell component by template type
-    UICollectionViewCell *cellView = [_collectionView dequeueReusableCellWithReuseIdentifier:templateType forIndexPath:indexPath];
-    WXCellSlotComponent *cellComponent = (WXCellSlotComponent *)cellView.wx_component;
-    if (!cellComponent) {
-        cellComponent = [_templateManager dequeueCellSlotWithType:templateType forIndexPath:indexPath];
-        cellView.wx_component = cellComponent;
-        WXPerformBlockOnComponentThread(^{
-            //TODO: How can we avoid this?
-            [super _insertSubcomponent:cellComponent atIndex:self.subcomponents.count];
-        });
-    }
-    
-    // 4. binding the data to the cell component
-    [self _updateBindingData:data forCell:cellComponent atIndexPath:indexPath];
-
-    // 5. Add cell component's view to content view.
-    UIView *contentView = cellComponent.view;
-    if (contentView.superview == cellView.contentView) {
-        return cellView;
-    }
-    
-    for (UIView *view in cellView.contentView.subviews) {
-        [view removeFromSuperview];
-    }
-    [cellView.contentView addSubview:contentView];
-    [cellView setAccessibilityIdentifier:contentView.accessibilityIdentifier];
-    
-    WXLogDebug(@"Return cell view:%@, indexPath:%@", cellView, indexPath);
-    
-    [self handleAppear];
-    
-    return cellView;
-}
-
-- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
-{
-    return nil;
-}
-
-#pragma mark - UICollectionViewDelegate
-
-- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXLogDebug(@"will display cell:%@, at index path:%@", cell, indexPath);
-}
-
-- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    cell.wx_component = nil;
-    WXLogDebug(@"Did end displaying cell:%@, at index path:%@", cell, indexPath);
-}
-
-#pragma mark - UICollectionViewDelegateFlowLayout
-
-- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    NSValue *size = _sizeCache[indexPath];
-    if (size) {
-        return [size CGSizeValue];
-    } else {
-
-        WXCellSlotComponent *cell = [_templateManager templateWithType:[self templateType:indexPath]];
-        CGSize size = cell.calculatedFrame.size;
-        _sizeCache[indexPath] = [NSValue valueWithCGSize:size];
-        return CGSizeMake(_collectionView.frame.size.width, size.height);
-    }
-}
-
-#pragma mark - WXRecycleListLayoutDelegate
-
-- (BOOL)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout isNeedStickyForIndexPath:(NSIndexPath *)indexPath
-{
-    NSNumber *cachedSticky = _stickyCache[indexPath];
-    if (cachedSticky) {
-        return [cachedSticky boolValue];
-    } else {
-        return NO;
-    }
-}
-
-#pragma mark - WXRecycleListUpdateDelegate
-
-- (void)updateManager:(WXRecycleListUpdateManager *)manager willUpdateData:(id)newData
-{
-    [_dataManager updateData:newData];
-}
-
-- (void)updateManager:(WXRecycleListUpdateManager *)manager didUpdateData:(id)newData withSuccess:(BOOL)finished
-{
-    
-}
-
-- (NSString*)templateType:(NSIndexPath*)indexPath
-{
-    NSDictionary *data = [_dataManager dataAtIndex:indexPath.row];
-    // default is first template.
-    NSString *templateType = [_templateManager topTemplate].templateCaseType;
-    if (!data || ![data isKindOfClass:[NSDictionary class]]) {
-        return templateType;
-    }
-    
-    if (_templateSwitchKey && data[_templateSwitchKey]){
-        templateType = data[_templateSwitchKey];
-    } else if (data[WXDefaultRecycleTemplateType]){
-        // read the default type.
-        templateType = data[WXDefaultRecycleTemplateType];
-    }
-    return templateType;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.h
deleted file mode 100644
index 9f133f1..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXRecycleListDataManager : NSObject
-
-- (instancetype)initWithData:(NSArray *)data;
-
-- (void)updateData:(NSArray *)data;
-
-- (void)updateVirtualComponentData:(NSString *)componentId data:(NSDictionary *)data;
-
-- (void)deleteVirtualComponentAtIndexPaths:(NSArray<NSIndexPath*>*)indexPaths;
-
-- (NSArray *)data;
-
-- (NSDictionary *)dataAtIndex:(NSInteger)index;
-
-- (NSInteger)numberOfItems;
-
-- (NSInteger)numberOfVirtualComponent;
-
-- (NSDictionary *)virtualComponentDataWithId:(NSString *)componentId;
-
-- (NSDictionary *)virtualComponentDataWithIndexPath:(NSIndexPath *)indexPath templateId:(NSString *)templateId;
-
-- (NSString *)virtualComponentIdWithIndexPath:(NSIndexPath *)indexPath templateId:(NSString *)templateId;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.m
deleted file mode 100644
index 9603f03..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListDataManager.m
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRecycleListDataManager.h"
-#import "NSArray+Weex.h"
-#import "WXLog.h"
-#import "WXAssert.h"
-
-@implementation WXRecycleListDataManager
-{
-    NSArray *_data;
-    NSMapTable<NSString*, NSDictionary*>* _virtualComponentData;
-    NSMapTable<NSIndexPath*, NSMutableSet*>* _renderStatus;
-}
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-        _virtualComponentData = [NSMapTable strongToStrongObjectsMapTable];
-        _renderStatus = [NSMapTable strongToStrongObjectsMapTable];
-    }
-    return self;
-}
-
-- (instancetype)initWithData:(NSArray *)data
-{
-    if (self = [super init]) {
-        if (![data isKindOfClass:[NSArray class]]) {
-            WXLogError(@"list data must be an array!");
-        } else {
-            _data = data;
-        }
-    }
-    
-    return self;
-}
-
-- (void)updateData:(NSArray *)data
-{
-    WXAssertMainThread();
-    
-    _data = data;
-}
-
-- (NSArray *)data
-{
-    WXAssertMainThread();
-    
-    return _data;
-}
-
-- (NSDictionary *)dataAtIndex:(NSInteger)index
-{
-    WXAssertMainThread();
-    
-    return [_data wx_safeObjectAtIndex:index];
-}
-
-- (NSInteger)numberOfItems
-{
-    WXAssertMainThread();
-    
-    return [_data count];
-}
-
-- (void)updateVirtualComponentData:(NSString *)componentId data:(NSDictionary *)data
-{
-    if (!componentId) {
-        return;
-    }
-    [_virtualComponentData setObject:data forKey:componentId];
-
-    NSIndexPath *indexPath = [data objectForKey:@"indexPath"];
-    NSMutableSet *ids = [_renderStatus objectForKey:indexPath];
-    if (!ids) {
-        ids = [NSMutableSet set];
-    }
-    [ids addObject:componentId];
-    [_renderStatus setObject:ids forKey:indexPath];
-}
-
-- (void)deleteVirtualComponentAtIndexPaths:(NSArray<NSIndexPath*>*)indexPaths
-{
-    [_virtualComponentData removeAllObjects];
-    [_renderStatus removeAllObjects];
-}
-
-- (NSDictionary *)virtualComponentDataWithId:(NSString *)componentId
-{
-    return [_virtualComponentData objectForKey:componentId];
-}
-
-- (NSString *)virtualComponentIdWithIndexPath:(NSIndexPath *)indexPath templateId:(NSString *)templateId
-{
-    if (!templateId) {
-        return nil;
-    }
-    NSSet *ids = [_renderStatus objectForKey:indexPath];
-    if (!ids) {
-        return nil;
-    }
-    for (NSString *componentId in ids) {
-        if ([componentId containsString:templateId]) {
-            return componentId;
-        }
-    }
-    return nil;
-}
-
-- (NSDictionary *)virtualComponentDataWithIndexPath:(NSIndexPath*)indexPath templateId:(NSString *)templateId
-{
-    NSString *componentId = [self virtualComponentIdWithIndexPath:indexPath templateId:templateId];
-    return [self virtualComponentDataWithId:componentId];
-}
-
-- (NSInteger)numberOfVirtualComponent
-{
-    return [_virtualComponentData count];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.h
deleted file mode 100644
index 6e08b94..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-@protocol WXRecycleListLayoutDelegate
-
-- (BOOL)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout isNeedStickyForIndexPath:(NSIndexPath *)indexPath;
-
-@end
-
-@interface WXRecycleListLayout : UICollectionViewFlowLayout
-
-@property (nonatomic, weak) id<WXRecycleListLayoutDelegate> delegate;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.m
deleted file mode 100644
index 73851de..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListLayout.m
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRecycleListLayout.h"
-
-@implementation WXRecycleListLayout
-{
-    NSMutableDictionary<NSNumber *, UICollectionViewLayoutAttributes *> *_stickyCellsAttributes;
-}
-
-- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
-{
-    NSArray *cellAttributes = [super layoutAttributesForElementsInRect:rect];
-    NSMutableDictionary *lastCellsAttributes = [NSMutableDictionary dictionary];
-    
-    __block NSInteger currentStickyIndex = -1;
-    [cellAttributes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-        UICollectionViewLayoutAttributes *attributes = obj;
-        NSIndexPath *indexPath = attributes.indexPath;
-        if ([self.delegate collectionView:self.collectionView layout:self isNeedStickyForIndexPath:indexPath]) {
-            if (!_stickyCellsAttributes) {
-                _stickyCellsAttributes = [NSMutableDictionary dictionary];
-            }
-            
-            currentStickyIndex = indexPath.item;
-            [_stickyCellsAttributes setObject:attributes forKey:@(indexPath.item)];
-        } else {
-            [_stickyCellsAttributes removeObjectForKey:@(indexPath.item)];
-            
-            // bottom cell above sticky cell
-            UICollectionViewLayoutAttributes *currentLastCell = [lastCellsAttributes objectForKey:@(currentStickyIndex)];
-            if (!currentLastCell || indexPath.item > currentLastCell.indexPath.item) {
-                [lastCellsAttributes setObject:obj forKey:@(currentStickyIndex)];
-            }
-        }
-        
-        attributes.zIndex = 1;
-    }];
-    
-    NSMutableArray *newCellAttributes = [cellAttributes mutableCopy];
-    [lastCellsAttributes enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-        UICollectionViewLayoutAttributes *attributes = obj;
-        
-        UICollectionViewLayoutAttributes *stickyCell = _stickyCellsAttributes[key];
-        if (!stickyCell) {
-            NSInteger item = attributes.indexPath.item;
-            while (item >= 0) {
-                if (_stickyCellsAttributes[@(item)]) {
-                    stickyCell = [self.collectionView layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForItem:item inSection:0]];
-                    break;
-                } else {
-                    item --;
-                }
-            }
-        }
-        
-        if (stickyCell) {
-            [newCellAttributes addObject:stickyCell];
-            [self _adjustStickyForCellAttributes:stickyCell lastCellAttributes:attributes];
-        }
-    }];
-    
-    return newCellAttributes;
-}
-
-- (void)_adjustStickyForCellAttributes:(UICollectionViewLayoutAttributes *)cell
-                    lastCellAttributes:(UICollectionViewLayoutAttributes *)lastCell
-{
-    cell.zIndex = 99;
-    cell.hidden = NO;
-    
-    CGFloat maxY = CGRectGetMaxY(lastCell.frame) - cell.frame.size.height;
-    CGFloat minY = CGRectGetMinY(self.collectionView.bounds) + self.collectionView.contentInset.top;
-    CGFloat y = MIN(MAX(minY, cell.frame.origin.y), maxY);
-
-//    NSLog(@"%zi : %zi, %.1f, %.1f, %.1f, %.1f", cell.indexPath.item, lastCell.indexPath.item, maxY, minY, cell.frame.origin.y, y);
-    
-    CGPoint origin = cell.frame.origin;
-    origin.y = y;
-    
-    cell.frame = (CGRect){
-        origin,
-        cell.frame.size
-    };
-}
-
-- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
-{
-    if (_stickyCellsAttributes.count > 0) {
-        // always return yes to trigger resetting sticky header's frame.
-        return YES;
-    }
-    
-    return [super shouldInvalidateLayoutForBoundsChange:newBounds];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.h
deleted file mode 100644
index b956122..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXCellSlotComponent.h"
-
-@interface WXRecycleListTemplateManager : NSObject
-
-@property (nonatomic, weak) UICollectionView *collectionView;
-
-- (void)addTemplate:(WXCellSlotComponent *)component;
-
-- (WXCellSlotComponent *)dequeueCellSlotWithType:(NSString *)type forIndexPath:(NSIndexPath *)indexPath;
-
-- (WXCellSlotComponent *)templateWithType:(NSString *)type;
-
-- (WXCellSlotComponent *)topTemplate;
-
-- (BOOL)isTemplateRegistered:(NSString *)aTemplate;
-
-- (NSString *)anyRegisteredTemplate;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.m
deleted file mode 100644
index 2a90eeb..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListTemplateManager.m
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRecycleListTemplateManager.h"
-#import "WXLog.h"
-#import "WXAssert.h"
-
-@interface WXReusableCollectionViewCell : UICollectionViewCell
-
-@end
-
-@implementation WXReusableCollectionViewCell
-
-@end
-
-@implementation WXRecycleListTemplateManager
-{
-    NSMutableSet<NSString *> *_registeredTemplates;
-    NSMapTable<NSString *, WXCellSlotComponent *> *_templateTypeMap;
-}
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-        _registeredTemplates = [NSMutableSet set];
-        _templateTypeMap = [NSMapTable strongToWeakObjectsMapTable];
-    }
-    
-    return self;
-}
-
-- (void)setCollectionView:(UICollectionView *)collectionView
-{
-    WXAssertMainThread();
-    
-    if (_collectionView == collectionView) {
-        return;
-    }
-    
-    _collectionView = collectionView;
-    
-    for (NSString *templateType in [_templateTypeMap.keyEnumerator.allObjects copy]) {
-        [self _registerCellClassForReuseID:templateType];
-    }
-}
-
-- (void)addTemplate:(WXCellSlotComponent *)component
-{
-    WXAssertMainThread();
-    
-    NSString *templateType = component.templateCaseType;
-    WXAssert(templateType != nil, @"cell-slot:%@ must have a template id!", component);
-    
-    [_templateTypeMap setObject:component forKey:templateType];
-    if (_collectionView) {
-        [self _registerCellClassForReuseID:templateType];
-    }
-}
-
-- (WXCellSlotComponent *)dequeueCellSlotWithType:(NSString *)type forIndexPath:(NSIndexPath *)indexPath
-{
-    WXAssertMainThread();
-    
-    WXCellSlotComponent *cellSlot = [_templateTypeMap objectForKey:type];
-    return [cellSlot copy];
-}
-
-- (WXCellSlotComponent *)templateWithType:(NSString *)type
-{
-    return [_templateTypeMap objectForKey:type];;
-}
-
-- (void)_registerCellClassForReuseID:(NSString *)templateID
-{
-    WXLogDebug(@"register cell class for template id:%@", templateID);
-    [_registeredTemplates addObject:templateID];
-    [_collectionView registerClass:[WXReusableCollectionViewCell class] forCellWithReuseIdentifier:templateID];
-}
-
-- (WXCellSlotComponent *)topTemplate
-{
-    WXCellSlotComponent * cellTemplate = nil;
-    for (NSString *templateType in [_templateTypeMap.keyEnumerator.allObjects copy]) {
-        cellTemplate = [self templateWithType:templateType];
-        if (!cellTemplate) {
-            break;
-        }
-    }
-    return cellTemplate;
-}
-
-- (BOOL)isTemplateRegistered:(NSString *)aTemplate
-{
-    WXAssertMainThread();
-    return [_registeredTemplates containsObject:aTemplate];
-}
-
-- (NSString *)anyRegisteredTemplate
-{
-    WXAssertMainThread();
-    return [_registeredTemplates anyObject];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.h
deleted file mode 100644
index 8cad3b7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-typedef void(^WXRecycleListUpdateCompletion)(BOOL isFinished);
-@class WXRecycleListUpdateManager;
-
-@protocol WXRecycleListUpdateDelegate
-
-- (void)updateManager:(WXRecycleListUpdateManager *)manager willUpdateData:(id)newData;
-
-- (void)updateManager:(WXRecycleListUpdateManager *)manager didUpdateData:(id)newData withSuccess:(BOOL)finished;
-
-@end
-
-@interface WXRecycleListUpdateManager : NSObject
-
-@property (nonatomic, weak) UICollectionView *collectionView;
-@property (nonatomic, weak) id<WXRecycleListUpdateDelegate> delegate;
-
-- (void)reload;
-
-- (void)updateWithNewData:(NSArray *)newData
-                  oldData:(NSArray *)oldData
-               completion:(WXRecycleListUpdateCompletion)completion
-                animation:(BOOL)isAnimated;
-
-- (void)updateWithAppendingData:(NSArray *)appendingData
-                        oldData:(NSArray *)oldData
-                     completion:(WXRecycleListUpdateCompletion)completion
-                      animation:(BOOL)isAnimated;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.m
deleted file mode 100644
index fbd6c20..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/RecycleList/WXRecycleListUpdateManager.m
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRecycleListUpdateManager.h"
-#import "WXLog.h"
-#import "WXAssert.h"
-#import "WXDiffUtil.h"
-
-@interface WXRecycleListDiffResult : NSObject
-
-@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *deleteIndexPaths;
-@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *insertIndexPaths;
-@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *reloadIndexPaths;
-
-- (BOOL)hasChanges;
-
-@end
-
-@implementation WXRecycleListDiffResult
-
-- (instancetype)initWithInsertIndexPaths:(NSMutableSet<NSIndexPath *> *)insertIndexPaths
-                        deleteIndexPaths:(NSMutableSet<NSIndexPath *> *)deleteIndexPaths
-                        reloadIndexPaths:(NSMutableSet<NSIndexPath *> *)reloadIndexPaths
-{
-    if (self = [super init]) {
-        _insertIndexPaths = [insertIndexPaths copy];
-        _deleteIndexPaths = [deleteIndexPaths copy];
-        _reloadIndexPaths = [reloadIndexPaths copy];
-    }
-    
-    return self;
-}
-
-- (BOOL)hasChanges
-{
-    return _insertIndexPaths.count > 0 || _deleteIndexPaths.count > 0 || _reloadIndexPaths.count > 0;
-}
-
-- (NSString *)description
-{
-    return [NSString stringWithFormat:@"<%@: %p; insert index paths: %@; delete index paths: %@; reload index paths: %@", NSStringFromClass([self class]), self, _insertIndexPaths, _deleteIndexPaths, _reloadIndexPaths];
-}
-
-@end
-
-@interface WXRecycleListUpdateManager ()
-
-@property (nonatomic, copy) NSArray *newerData;
-@property (nonatomic, copy) NSArray *appendingData;
-@property (nonatomic, copy) NSArray *olderData;
-@property (nonatomic, assign) BOOL isUpdating;
-@property (nonatomic, strong) NSMutableArray *completions;
-
-@property (nonatomic, strong) NSMutableSet<NSIndexPath *> *reloadIndexPaths;
-
-@end
-
-@implementation WXRecycleListUpdateManager
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-        _completions = [NSMutableArray array];
-    }
-    
-    return self;
-}
-
-- (void)reload
-{
-    [_collectionView reloadData];
-}
-
-- (void)updateWithNewData:(NSArray *)newData
-                  oldData:(NSArray *)oldData
-               completion:(WXRecycleListUpdateCompletion)completion
-                animation:(BOOL)isAnimated
-{
-    WXAssertMainThread();
-    
-    if (!_collectionView) {
-        WXLogError(@"Update list with no collection view");
-        if (completion) {
-            completion(NO);
-        }
-        return;
-    }
-    
-    self.newerData = newData;
-    self.appendingData = nil;
-    self.olderData = oldData;
-    
-    if (completion) {
-        [_completions addObject:completion];
-    }
-    
-    [self checkUpdates];
-}
-
-- (void)updateWithAppendingData:(NSArray *)appendingData
-                        oldData:(NSArray *)oldData
-                     completion:(WXRecycleListUpdateCompletion)completion
-                      animation:(BOOL)isAnimated
-{
-    if (!_collectionView) {
-        WXLogError(@"Update list with no collection view");
-        completion(NO);
-        return;
-    }
-    
-    self.appendingData = appendingData;
-    self.olderData = oldData;
-    
-    if (completion) {
-        [_completions addObject:completion];
-    }
-    
-    [self checkUpdates];
-}
-
-
-- (void)checkUpdates
-{
-    dispatch_async(dispatch_get_main_queue(), ^{
-        if (self.isUpdating) {
-            return ;
-        }
-        
-        [self performBatchUpdates];
-    });
-}
-
-- (void)performBatchUpdates
-{
-    WXAssertMainThread();
-    WXAssert(!self.isUpdating, @"Can not perform updates while an updating is being performed");
-    
-    UICollectionView *collectionView = self.collectionView;
-    if (!collectionView) {
-        return;
-    }
-    
-    NSArray *newData = [self.newerData copy];
-    NSArray *oldData = [self.olderData copy];
-    NSArray *appendingData = [self.appendingData copy];
-    //TODO use completionBlocks
-//    NSArray *completionBlocks = [self.completions copy];
-    
-    [self cleanup];
-    
-    WXDiffResult *diffResult;
-    if (appendingData) {
-        newData = [oldData arrayByAddingObjectsFromArray:appendingData];
-        NSIndexSet *inserts = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(oldData.count, appendingData.count)];
-        diffResult = [[WXDiffResult alloc] initWithInserts:inserts deletes:nil updates:nil];
-    } else if (newData){
-        diffResult = [WXDiffUtil diffWithMinimumDistance:newData oldArray:oldData];
-    }
-    
-    WXRecycleListDiffResult *recycleListDiffResult = [self recycleListUpdatesByDiffResult:diffResult];
-    
-    if (![diffResult hasChanges] && self.reloadIndexPaths.count == 0) {
-        return;
-    }
-    
-    void (^updates)(void) = [^{
-        [self.delegate updateManager:self willUpdateData:newData];
-        [UIView setAnimationsEnabled:NO];
-        [self applyUpdateWithDiffResult:recycleListDiffResult];
-    } copy];
-    
-    void (^completion)(BOOL) = [^(BOOL finished) {
-        [UIView setAnimationsEnabled:YES];
-        self.isUpdating = NO;
-        [self.delegate updateManager:self didUpdateData:newData withSuccess:finished];
-        [self.reloadIndexPaths removeAllObjects];
-        [self checkUpdates];
-    } copy];
-    
-    self.isUpdating = YES;
-    
-    if (!self.delegate || !collectionView.dataSource) {
-        return;
-    }
-    
-    [collectionView performBatchUpdates:updates completion:completion];
-}
-
-- (WXRecycleListDiffResult *)recycleListUpdatesByDiffResult:(WXDiffResult *)diffResult
-{
-    NSMutableSet<NSIndexPath *> *reloadIndexPaths = [NSMutableSet set];
-    NSMutableSet<NSIndexPath *> *deleteIndexPaths = [NSMutableSet set];
-    NSMutableSet<NSIndexPath *> *insertIndexPaths = [NSMutableSet set];
-    
-    [diffResult.updates enumerateObjectsUsingBlock:^(WXDiffUpdateIndex * _Nonnull update, NSUInteger idx, BOOL * _Nonnull stop) {
-        NSIndexPath *reloadIndexPath = [NSIndexPath indexPathForItem:update.oldIndex inSection:0];
-        [reloadIndexPaths addObject:reloadIndexPath];
-    }];
-    
-    [diffResult.inserts enumerateIndexesUsingBlock:^(NSUInteger insertIndex, BOOL * _Nonnull stop) {
-        NSIndexPath *insertIndexPath = [NSIndexPath indexPathForItem:insertIndex inSection:0];
-        [insertIndexPaths addObject:insertIndexPath];
-    }];
-    
-    [diffResult.deletes enumerateIndexesUsingBlock:^(NSUInteger deleteIndex, BOOL * _Nonnull stop) {
-        NSIndexPath *deleteIndexPath = [NSIndexPath indexPathForItem:deleteIndex inSection:0];
-        [deleteIndexPaths addObject:deleteIndexPath];
-    }];
-    
-    WXRecycleListDiffResult *result = [[WXRecycleListDiffResult alloc] initWithInsertIndexPaths:insertIndexPaths deleteIndexPaths:deleteIndexPaths reloadIndexPaths:reloadIndexPaths];
-    
-    return result;
-}
-
-
-- (void)applyUpdateWithDiffResult:(WXRecycleListDiffResult *)diffResult
-{
-    if (!_collectionView) {
-        return;
-    }
-    
-    // reload index paths should not inculde delete index paths, otherwise it will cause crash:
-    // Assertion failure in
-    // -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:animator:]
-    NSMutableSet *reloadIndexPaths = self.reloadIndexPaths ? [[diffResult.reloadIndexPaths setByAddingObjectsFromSet:self.reloadIndexPaths] mutableCopy]: [diffResult.reloadIndexPaths mutableCopy];
-    [reloadIndexPaths minusSet:diffResult.deleteIndexPaths];
-    
-    if (diffResult.deleteIndexPaths.count > 0) {
-        [_collectionView deleteItemsAtIndexPaths:[diffResult.deleteIndexPaths allObjects]];
-    }
-    if (diffResult.insertIndexPaths.count > 0) {
-        [_collectionView insertItemsAtIndexPaths:[diffResult.insertIndexPaths allObjects]];
-    }
-    if (reloadIndexPaths.count > 0) {
-        [_collectionView reloadItemsAtIndexPaths:[reloadIndexPaths allObjects]];
-    }
-}
-
-- (void)cleanup
-{
-    self.newerData = nil;
-    self.appendingData = nil;
-    self.olderData = nil;
-    [self.completions removeAllObjects];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h
deleted file mode 100644
index ed12a15..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import "WXLength.h"
-
-extern NSString * const kCollectionSupplementaryViewKindHeader;
-
-@protocol WXMultiColumnLayoutDelegate <NSObject>
-
-- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView insetForLayout:(UICollectionViewLayout *)collectionViewLayout;
-
-- (CGFloat)collectionView:(UICollectionView *)collectionView contentWidthForLayout:(UICollectionViewLayout *)collectionViewLayout;
-
-- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForItemAtIndexPath:(NSIndexPath *)indexPath;
-
-- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForHeaderInSection:(NSInteger)section;
-
-- (BOOL)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout hasHeaderInSection:(NSInteger)section;
-
-- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout isNeedStickyForHeaderInSection:(NSInteger)section;
-
-@end
-
-@interface WXMultiColumnLayout : UICollectionViewLayout
-
-@property (nonatomic, weak) id<WXMultiColumnLayoutDelegate> delegate;
-
-@property (nonatomic, strong) WXLength *columnCount;
-
-@property (nonatomic, strong) WXLength *columnWidth;
-@property (nonatomic, assign) float leftGap;
-@property (nonatomic, assign) float rightGap;
-
-@property (nonatomic, assign) float columnGap;
-
-@property (nonatomic, assign, readonly) CGFloat computedColumnWidth;
-@property (nonatomic, assign, readonly) int computedColumnCount;
-@property (nonatomic, assign, readonly) CGFloat computedHeaderWidth;
-
-//Under system version 10.0, UICollectionViewLayout.collectionView seems be unsafe_unretain rather than weak. so here add one weak collectionview to use inside the imp to avoid bad access.
-@property (nonatomic, weak) UICollectionView *weak_collectionView;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.m
deleted file mode 100644
index 9ded724..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.m
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXMultiColumnLayout.h"
-#import "NSArray+Weex.h"
-#import "WXUtility.h"
-#import "WXAssert.h"
-
-NSString * const kCollectionSupplementaryViewKindHeader = @"WXCollectionSupplementaryViewKindHeader";
-NSString * const kMultiColumnLayoutHeader = @"WXMultiColumnLayoutHeader";
-NSString * const kMultiColumnLayoutCell = @"WXMultiColumnLayoutCell";
-
-@interface WXMultiColumnLayoutHeaderAttributes : UICollectionViewLayoutAttributes
-
-@property (nonatomic, assign) BOOL isSticky;
-
-@end
-
-@implementation WXMultiColumnLayoutHeaderAttributes
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    WXMultiColumnLayoutHeaderAttributes *copy = [super copyWithZone:zone];
-    copy.isSticky = self.isSticky;
-    
-    return copy;
-}
-
-@end
-
-@interface WXMultiColumnLayout ()
-
-@property (nonatomic, strong) NSMutableDictionary<NSString *, NSDictionary<id, UICollectionViewLayoutAttributes *> *> *layoutAttributes;
-@property (nonatomic, strong) NSMutableArray<NSNumber *> *columnsMaxHeights;
-
-@end
-
-@implementation WXMultiColumnLayout
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-        _layoutAttributes = [NSMutableDictionary dictionary];
-        _columnsMaxHeights = [NSMutableArray array];
-    }
-    
-    return self;
-}
-
-//Under system version 10.0, UICollectionViewLayout.collectionView seems be unsafe_unretain rather than weak. sometime when the collectionView is released, and the layout is not released, it may crash.
-- (UICollectionView *)weakCollectionView
-{
-    if ([[[UIDevice currentDevice] systemVersion] floatValue]<10.0f) {
-        return self.weak_collectionView;
-    } else {
-        return self.collectionView;
-    }
-}
-
-#pragma mark - Public Accessors
-
-- (void)setColumnCount:(WXLength *)columnCount
-{
-    if (!(columnCount.isAuto && _columnCount.isAuto) || _columnCount.intValue != columnCount.intValue) {
-        _columnCount = columnCount;
-        [self _cleanComputed];
-    }
-}
-
-- (void)setColumnWidth:(WXLength *)columnWidth
-{
-    if (!(columnWidth.isAuto && _columnWidth.isAuto) || _columnWidth.floatValue != columnWidth.floatValue) {
-        _columnWidth = columnWidth;
-        [self _cleanComputed];
-    }
-}
-
-- (void)setColumnGap:(float)columnGap
-{
-    if (_columnGap != columnGap) {
-        _columnGap = columnGap;
-        [self _cleanComputed];
-    }
-}
-
-- (void)setLeftGap:(float)leftGap
-{
-    if (_leftGap != leftGap) {
-        _leftGap = leftGap;
-        [self _cleanComputed];
-    }
-}
-
-- (void)setRightGap:(float)rightGap
-{
-    if (_rightGap != rightGap) {
-        _rightGap = rightGap;
-        [self _cleanComputed];
-    }
-}
-
-- (CGFloat)computedColumnWidth
-{
-    WXAssert([_columnWidth isFixed], @"column width must be calculated by core.");
-    return _columnWidth.floatValue;
-}
-
-- (int)computedColumnCount
-{
-    WXAssert([_columnCount isFixed], @"column count must be calculated by core.");
-    return _columnCount.intValue;
-}
-
-- (CGFloat)computedHeaderWidth
-{
-    UIEdgeInsets insets = [self.delegate collectionView:[self weakCollectionView] insetForLayout:self];
-    return self.contentWidth - (insets.left + insets.right);
-}
-
-#pragma mark - Methods to Override for UICollectionViewLayout
-
-- (void)prepareLayout
-{
-    [super prepareLayout];
-    
-    [self _cleanup];
-    
-    NSInteger numberOfSections = [[self weakCollectionView]  numberOfSections];
-    UIEdgeInsets insets = [self.delegate collectionView:[self weakCollectionView]  insetForLayout:self];
-    
-    float columnWidth = self.computedColumnWidth;
-    int columnCount = self.computedColumnCount;
-    float columnGap = self.columnGap;
-    
-    CGFloat currentHeight = insets.top;
-    NSMutableDictionary *headersAttributes = [NSMutableDictionary dictionaryWithCapacity:numberOfSections];
-    NSMutableDictionary *cellAttributes = [NSMutableDictionary dictionary];
-    for (NSInteger i = 0; i < columnCount; i++) {
-        [self.columnsMaxHeights addObject:@(currentHeight)];
-    }
-    
-    for (NSInteger section = 0; section < numberOfSections; section++) {
-        BOOL hasHeader = [self.delegate collectionView:[self weakCollectionView]  layout:self hasHeaderInSection:section];
-        // header
-        if (hasHeader) {
-            CGFloat headerHeight = [self.delegate collectionView:[self weakCollectionView]  layout:self heightForHeaderInSection:section];
-            WXMultiColumnLayoutHeaderAttributes *headerAttributes = [WXMultiColumnLayoutHeaderAttributes layoutAttributesForSupplementaryViewOfKind:kCollectionSupplementaryViewKindHeader withIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]];
-            headerAttributes.frame = CGRectMake(insets.left, currentHeight, self.contentWidth - (insets.left + insets.right), headerHeight);
-            headerAttributes.isSticky = [self.delegate collectionView:[self weakCollectionView] layout:self isNeedStickyForHeaderInSection:section];
-            headerAttributes.zIndex = headerAttributes.isSticky ? 1 : 0;
-            headersAttributes[@(section)] = headerAttributes;
-            
-            currentHeight = CGRectGetMaxY(headerAttributes.frame);
-            [self _columnsReachToHeight:currentHeight];
-        }
-        
-        // cells
-        
-        @try {
-            for (NSInteger item = 0; item < [[self weakCollectionView] numberOfItemsInSection:section]; item++) {
-                NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section];
-                CGFloat itemHeight = [self.delegate collectionView:[self weakCollectionView] layout:self heightForItemAtIndexPath:indexPath];
-                UICollectionViewLayoutAttributes *itemAttributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
-                NSUInteger column = [self _minHeightColumnForAllColumns];
-                CGFloat x = insets.left + (columnWidth + columnGap) * column+_leftGap;
-                if (column >= [self.columnsMaxHeights count]) {
-                    return;
-                }
-                CGFloat y = [self.columnsMaxHeights[column] floatValue];
-                itemAttributes.frame = CGRectMake(x, y, columnWidth, itemHeight);
-                cellAttributes[indexPath] = itemAttributes;
-                
-                self.columnsMaxHeights[column] = @(CGRectGetMaxY(itemAttributes.frame));
-            }
-        } @catch (NSException *exception) {
-            WXLog(@"%@", exception);
-        } @finally {
-        }
-        
-        
-        currentHeight = [self _maxHeightForAllColumns];
-        [self _columnsReachToHeight:currentHeight];
-    }
-    
-    currentHeight = currentHeight + insets.bottom;
-    [self _columnsReachToHeight:currentHeight];
-    
-    self.layoutAttributes[kMultiColumnLayoutHeader] = headersAttributes;
-    self.layoutAttributes[kMultiColumnLayoutCell] = cellAttributes;
-}
-
-- (CGSize)collectionViewContentSize
-{
-    NSInteger numberOfSections = [[self weakCollectionView] numberOfSections];
-    if (numberOfSections == 0) {
-        return CGSizeZero;
-    }
-    
-    return CGSizeMake(self.contentWidth, self.contentHeight);
-}
-
-- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
-{
-    NSMutableArray<WXMultiColumnLayoutHeaderAttributes *> *stickyHeaders = [NSMutableArray array];
-    NSMutableArray<UICollectionViewLayoutAttributes *> *result = [NSMutableArray array];
-    
-    [self.layoutAttributes enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull kind, NSDictionary<id,UICollectionViewLayoutAttributes *> * _Nonnull dictionary, BOOL * _Nonnull stop) {
-        [dictionary enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, UICollectionViewLayoutAttributes * _Nonnull attributes, BOOL * _Nonnull stop) {
-            if (attributes.representedElementKind == kCollectionSupplementaryViewKindHeader
-                && [self.delegate collectionView:[self weakCollectionView] layout:self isNeedStickyForHeaderInSection:attributes.indexPath.section]) {
-                [stickyHeaders addObject:(WXMultiColumnLayoutHeaderAttributes *)attributes];
-            } else if (CGRectIntersectsRect(rect, attributes.frame)) {
-                [result addObject:attributes];
-            }
-        }];
-    }];
-    
-    [stickyHeaders sortUsingComparator:^NSComparisonResult(WXMultiColumnLayoutHeaderAttributes *obj1, WXMultiColumnLayoutHeaderAttributes *obj2) {
-        if (obj1.indexPath.section < obj2.indexPath.section) {
-            return NSOrderedAscending;
-        } else {
-            return NSOrderedDescending;
-        }
-    }];
-    
-    for (int i = 0; i < stickyHeaders.count; i++) {
-        WXMultiColumnLayoutHeaderAttributes *header = stickyHeaders[i];
-        [self _adjustStickyForHeaderAttributes:header next:(i == stickyHeaders.count - 1) ? nil : stickyHeaders[i + 1]];
-        [result addObject:header];
-    }
-    
-    WXLogDebug(@"return result attributes:%@ for rect:%@", result, NSStringFromCGRect(rect));
-    
-    return result;
-}
-
-- (void)_adjustStickyForHeaderAttributes:(WXMultiColumnLayoutHeaderAttributes *)header
-                                   next:(WXMultiColumnLayoutHeaderAttributes *)nextHeader
-{
-    CGRect bounds = [self weakCollectionView].bounds;
-    CGFloat originY = header.frame.origin.y;
-    CGFloat maxY = nextHeader ? (nextHeader.frame.origin.y - header.frame.size.height) : (CGRectGetMaxY(bounds) - header.frame.size.height);
-    CGFloat currentY = CGRectGetMaxY(bounds) - bounds.size.height + [self weakCollectionView].contentInset.top;
-    
-    CGFloat resultY = MIN(MAX(currentY, originY), maxY);
-    CGPoint origin = header.frame.origin;
-    origin.y = resultY;
-    
-    header.frame = (CGRect){origin, header.frame.size};
-    header.hidden = NO;
-}
-
-- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
-{
-    if ([elementKind isEqualToString:kCollectionSupplementaryViewKindHeader]) {
-        UICollectionViewLayoutAttributes *attributes = self.layoutAttributes[kMultiColumnLayoutHeader][@(indexPath.section)];
-        if (!attributes) {
-            attributes = [UICollectionViewLayoutAttributes layoutAttributesForSupplementaryViewOfKind:elementKind withIndexPath:indexPath];
-            attributes.frame = CGRectZero;
-            attributes.hidden = YES;
-        }
-        WXLogDebug(@"return header attributes:%@ for index path:%@", attributes, indexPath);
-        
-        return attributes;
-    }
-    
-    return nil;
-}
-
-- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    if (self.layoutAttributes.count == 0) {
-        [self prepareLayout];
-    }
-    
-    UICollectionViewLayoutAttributes *attributes = self.layoutAttributes[kMultiColumnLayoutCell][indexPath];
-    WXLogDebug(@"return item attributes:%@ for index path:%@", attributes, indexPath);
-    return attributes;
-}
-
-- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
-{
-    __block BOOL hasStickyHeader = NO;
-    [self.layoutAttributes[kMultiColumnLayoutHeader] enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, UICollectionViewLayoutAttributes * _Nonnull obj, BOOL * _Nonnull stop) {
-        WXMultiColumnLayoutHeaderAttributes *attribute = (WXMultiColumnLayoutHeaderAttributes *)obj;
-        if (attribute.isSticky) {
-            hasStickyHeader = YES;
-            *stop = YES;
-        }
-    }];
-    
-    if (hasStickyHeader) {
-        // always return yes no trigger resetting sticky header's frame.
-        return YES;
-    } else {
-        CGRect oldBounds = [self weakCollectionView].bounds;
-        if (CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) {
-            return YES;
-        }
-    }
-    
-    return NO;
-}
-
-#pragma mark - Private
-
-- (CGFloat)contentWidth
-{
-    return [self.delegate collectionView:[self weakCollectionView] contentWidthForLayout:self];
-}
-
-- (CGFloat)contentHeight
-{
-    return [self _maxHeightForAllColumns];
-}
-
-- (CGFloat)_maxHeightForAllColumns
-{
-    CGFloat maxHeight = 0.0;
-    for (NSNumber *number in self.columnsMaxHeights) {
-        CGFloat height = [number floatValue];
-        if (height > maxHeight) {
-            maxHeight = height;
-        }
-    }
-    
-    return maxHeight;
-}
-
-- (NSUInteger)_minHeightColumnForAllColumns
-{
-    __block NSUInteger index = 0;
-    __block CGFloat minHeight = FLT_MAX;
-    
-    [self.columnsMaxHeights enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-        CGFloat height = [obj floatValue];
-        if (height < minHeight) {
-            minHeight = height;
-            index = idx;
-        }
-    }];
-    
-    return index;
-}
-
-- (void)_columnsReachToHeight:(CGFloat)height
-{
-    for (NSInteger i = 0; i < self.columnsMaxHeights.count; i ++) {
-        self.columnsMaxHeights[i] = @(height);
-    }
-}
-
-- (void)_cleanup
-{
-    [self.layoutAttributes removeAllObjects];
-    [self.columnsMaxHeights removeAllObjects];
-}
-
-- (void)_cleanComputed
-{
-}
-
-- (void)invalidateLayout
-{
-    [super invalidateLayout];
-    
-    [self _cleanComputed];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h
deleted file mode 100644
index 5a25efd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXScrollerComponent.h"
-
-@interface WXRecyclerComponent : WXScrollerComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.mm
deleted file mode 100644
index bc246b4..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.mm
+++ /dev/null
@@ -1,768 +0,0 @@
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRecyclerComponent.h"
-#import "WXComponent_internal.h"
-#import "WXSDKInstance_private.h"
-#import "WXRecyclerDataController.h"
-#import "WXRecyclerUpdateController.h"
-#import "WXMultiColumnLayout.h"
-#import "WXHeaderComponent.h"
-#import "WXFooterComponent.h"
-#import "WXCellComponent.h"
-#import "WXAssert.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXMonitor.h"
-#import "NSObject+WXSwizzle.h"
-#import "WXComponent+Events.h"
-#import "WXRecyclerDragController.h"
-#import "WXComponent+Layout.h"
-
-static NSString * const kCollectionCellReuseIdentifier = @"WXRecyclerCell";
-static NSString * const kCollectionHeaderReuseIdentifier = @"WXRecyclerHeader";
-static float const kRecyclerNormalColumnGap = 32;
-
-typedef enum : NSUInteger {
-    WXRecyclerLayoutTypeMultiColumn,
-    WXRecyclerLayoutTypeFlex,
-    WXRecyclerLayoutTypeGrid,
-} WXRecyclerLayoutType;
-
-@interface WXCollectionView : UICollectionView
-
-@end
-
-@implementation WXCollectionView
-
-- (void)dealloc
-{
-    self.delegate = nil;
-    self.dataSource = nil;
-    if ([self.collectionViewLayout isKindOfClass:[WXMultiColumnLayout class]]) {
-        WXMultiColumnLayout* wxLayout = (WXMultiColumnLayout *)self.collectionViewLayout;
-        wxLayout.weak_collectionView = nil;
-    }
-}
-
-- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index
-{
-    [super insertSubview:view atIndex:index];
-}
-
-- (void)layoutSubviews
-{
-    [super layoutSubviews];
-    [self.wx_component layoutDidFinish];
-}
-
-- (void)setContentOffset:(CGPoint)contentOffset
-{
-    // FIXME: side effect caused by hooking _adjustContentOffsetIfNecessary.
-    // When UICollectionView is pulled down and finger releases,contentOffset will be set from -xxxx to about -0.5(greater than -0.5), then contentOffset will be reset to zero by calling _adjustContentOffsetIfNecessary.
-    // So hooking _adjustContentOffsetIfNecessary will always cause remaining 1px space between list's top and navigator.
-    // Demo: http://dotwe.org/895630945793a9a044e49abe39cbb77f
-    // Have to reset contentOffset to zero manually here.
-    if (fabs(contentOffset.y) < 0.5) {
-        contentOffset.y = 0;
-    }
-    if (isnan(contentOffset.x)) {
-        contentOffset.x = 0;
-    }
-    if(isnan(contentOffset.y)) {
-        contentOffset.y = 0;
-    }
-    
-    [super setContentOffset:contentOffset];
-}
-
-@end
-
-@interface WXCollectionViewCell : UICollectionViewCell
-
-@end
-
-@implementation WXCollectionViewCell
-
-- (void)prepareForReuse
-{
-    [super prepareForReuse];
-    
-    WXCellComponent *cellComponent = (WXCellComponent *)self.wx_component;
-    if (cellComponent.isRecycle && [cellComponent isViewLoaded] && [self.contentView.subviews containsObject:cellComponent.view]) {
-        [cellComponent _unloadViewWithReusing:YES];
-    }
-}
-
-@end
-
-@interface WXRecyclerComponent () <UICollectionViewDataSource, UICollectionViewDelegate, WXMultiColumnLayoutDelegate, WXRecyclerUpdateControllerDelegate, WXCellRenderDelegate, WXHeaderRenderDelegate, WXRecyclerDragControllerDelegate>
-
-@property (nonatomic, strong, readonly) WXRecyclerDataController *dataController;
-@property (nonatomic, strong, readonly) WXRecyclerUpdateController *updateController;
-@property (nonatomic, weak, readonly) UICollectionView *collectionView;
-@property (nonatomic, strong) WXRecyclerDragController *dragController;
-
-@end
-
-@implementation WXRecyclerComponent
-{
-    WXRecyclerLayoutType _layoutType;
-    UICollectionViewLayout *_collectionViewlayout;
-    
-    UIEdgeInsets _padding;
-    NSUInteger _previousLoadMoreCellNumber;
-}
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        [self _fillPadding];
-        
-        if ([type isEqualToString:@"waterfall"] || (attributes[@"layout"] && [attributes[@"layout"] isEqualToString:@"multi-column"])) {
-            // TODO: abstraction
-            _layoutType = WXRecyclerLayoutTypeMultiColumn;
-            CGFloat scaleFactor = weexInstance.pixelScaleFactor;
-            _collectionViewlayout = [WXMultiColumnLayout new];
-            WXMultiColumnLayout *layout = (WXMultiColumnLayout *)_collectionViewlayout;
-            layout.columnWidth = [WXConvert WXLength:attributes[@"columnWidth"] isFloat:YES scaleFactor:scaleFactor] ? : [WXLength lengthWithFloat:0.0 type:WXLengthTypeAuto];
-            layout.columnCount = [WXConvert WXLength:attributes[@"columnCount"] isFloat:NO scaleFactor:1.0] ? : [WXLength lengthWithInt:1 type:WXLengthTypeFixed];
-            if (attributes[@"leftGap"]) {
-                layout.leftGap = [WXConvert WXPixelType:attributes[@"leftGap"] scaleFactor:scaleFactor];
-            }
-            if (attributes[@"rightGap"]) {
-                layout.rightGap = [WXConvert WXPixelType:attributes[@"rightGap"] scaleFactor:scaleFactor];
-            }
-            layout.columnGap = [self _floatValueForColumnGap:([WXConvert WXLength:attributes[@"columnGap"] isFloat:YES scaleFactor:scaleFactor] ? : [WXLength lengthWithFloat:0.0 type:WXLengthTypeNormal])];
-            
-            layout.delegate = self;
-        } else {
-            _collectionViewlayout = [UICollectionViewLayout new];
-        }
-        
-        _dataController = [WXRecyclerDataController new];
-        _updateController = [WXRecyclerUpdateController new];
-        _updateController.delegate = self;
-        [self fixFlicker];
-        
-        if ([attributes[@"draggable"] boolValue]) {
-            // lazy load
-            _dragController = [WXRecyclerDragController new];
-            _dragController.delegate = self;
-            if([attributes[@"dragTriggerType"]  isEqual: @"pan"]){
-                _dragController.dragTriggerType = WXRecyclerDragTriggerPan;
-            }
-            _dragController.isDragable = YES;
-        }
-    }
-    
-    return self;
-}
-
-- (void)dealloc
-{
-    _collectionView.delegate = nil;
-    _collectionView.dataSource = nil;
-    if ([_collectionViewlayout isKindOfClass:[WXMultiColumnLayout class]]) {
-        WXMultiColumnLayout* wxLayout = (WXMultiColumnLayout *)_collectionViewlayout;
-        wxLayout.weak_collectionView = nil;
-    }
-}
-
-#pragma mark - Public Subclass Methods
-
-- (UIView *)loadView
-{
-    return [[WXCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:_collectionViewlayout];
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    
-    _collectionView = (UICollectionView *)self.view;
-    _collectionView.allowsSelection = NO;
-    _collectionView.allowsMultipleSelection = NO;
-    _collectionView.dataSource = self;
-    _collectionView.delegate = self;
-    if ([_collectionViewlayout isKindOfClass:[WXMultiColumnLayout class]]) {
-        WXMultiColumnLayout* wxLayout = (WXMultiColumnLayout *)_collectionViewlayout;
-        wxLayout.weak_collectionView = _collectionView;
-    }
-    [_collectionView registerClass:[WXCollectionViewCell class] forCellWithReuseIdentifier:kCollectionCellReuseIdentifier];
-    [_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:kCollectionSupplementaryViewKindHeader withReuseIdentifier:kCollectionHeaderReuseIdentifier];
-    
-    _dragController.dragingCell = [[WXCollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100/2.0f)];
-    _dragController.collectionView = _collectionView;
-    
-    [self performUpdatesWithCompletion:^(BOOL finished) {
-        
-    }];
-}
-
-- (void)viewWillUnload
-{
-    [super viewWillUnload];
-    
-    _collectionView.dataSource = nil;
-    _collectionView.delegate = nil;
-    if ([_collectionViewlayout isKindOfClass:[WXMultiColumnLayout class]]) {
-        WXMultiColumnLayout* wxLayout = (WXMultiColumnLayout *)_collectionViewlayout;
-        wxLayout.weak_collectionView = nil;
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    [super updateAttributes:attributes];
-    
-    if (_layoutType == WXRecyclerLayoutTypeMultiColumn) {
-        CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
-        WXMultiColumnLayout *layout = (WXMultiColumnLayout *)_collectionViewlayout;
-        BOOL needUpdateLayout = NO;
-        
-        if ([attributes[@"draggable"] boolValue]) {
-            if (!_dragController) {  // lazy load
-                _dragController = [WXRecyclerDragController new];
-                _dragController.delegate = self;
-            }
-            if([attributes[@"dragTriggerType"]  isEqual: @"pan"]){
-                _dragController.dragTriggerType = WXRecyclerDragTriggerPan;
-            }
-            _dragController.isDragable = YES;
-        } else {
-            _dragController.isDragable = NO;
-        }
-        
-        if (attributes[@"columnWidth"]) {
-            layout.columnWidth = [WXConvert WXLength:attributes[@"columnWidth"] isFloat:YES scaleFactor:scaleFactor];
-            needUpdateLayout = YES;
-        }
-        
-        if (attributes[@"columnCount"]) {
-            layout.columnCount = [WXConvert WXLength:attributes[@"columnCount"] isFloat:NO scaleFactor:1.0];
-            
-            needUpdateLayout = YES;
-        }
-        if (attributes[@"columnGap"]) {
-            layout.columnGap = [self _floatValueForColumnGap:([WXConvert WXLength:attributes[@"columnGap"] isFloat:YES scaleFactor:scaleFactor])];
-            needUpdateLayout = YES;
-        }
-        if (attributes[@"leftGap"]) {
-            layout.leftGap = [WXConvert WXPixelType:attributes[@"leftGap"] scaleFactor:scaleFactor];
-        }
-        if (attributes[@"rightGap"]) {
-            layout.rightGap = [WXConvert WXPixelType:attributes[@"rightGap"] scaleFactor:scaleFactor];
-        }
-        
-        if (needUpdateLayout) {
-            for (WXComponent *component in self.subcomponents) {
-                [component setNeedsLayout];
-            }
-            
-            [self.collectionView reloadData];
-            [self.collectionView.collectionViewLayout invalidateLayout];
-        }
-    }
-    
-}
-
-- (void)setContentSize:(CGSize)contentSize
-{
-    // Do Nothing
-}
-
-- (void)adjustSticky
-{
-    // Do Nothing, sticky is adjusted by layout
-}
-
-#pragma mark - Private Subclass Methods
-
-- (void)_updateStylesOnComponentThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles isUpdateStyles:(BOOL)isUpdateStyles
-{
-    [super _updateStylesOnComponentThread:styles resetStyles:resetStyles isUpdateStyles:isUpdateStyles];
-    
-    [self _fillPadding];
-}
-
-- (void)_handleFirstScreenTime
-{
-    // Do Nothing, firstScreenTime is set by cellDidRendered:
-}
-
-- (void)scrollToComponent:(WXComponent *)component withOffset:(CGFloat)offset animated:(BOOL)animated
-{
-    CGPoint contentOffset = _collectionView.contentOffset;
-    CGFloat contentOffsetY = 0;
-    
-    CGRect rect;
-    while (component) {
-        if ([component isKindOfClass:[WXCellComponent class]]) {
-            NSIndexPath *toIndexPath = [self.dataController indexPathForCell:(WXCellComponent *)component];
-            UICollectionViewLayoutAttributes *attributes = [_collectionView layoutAttributesForItemAtIndexPath:toIndexPath];
-            rect = attributes.frame;
-            break;
-        }
-        if ([component isKindOfClass:[WXHeaderComponent class]]) {
-            NSUInteger toIndex = [self.dataController indexForHeader:(WXHeaderComponent *)component];
-            UICollectionViewLayoutAttributes *attributes = [_collectionView layoutAttributesForSupplementaryElementOfKind:kCollectionSupplementaryViewKindHeader atIndexPath:[NSIndexPath indexPathWithIndex:toIndex]];
-            rect = attributes.frame;
-            break;
-        }
-        contentOffsetY += component.calculatedFrame.origin.y;
-        component = component.supercomponent;
-    }
-    
-    contentOffsetY += rect.origin.y;
-    contentOffsetY += offset * self.weexInstance.pixelScaleFactor;
-    
-    if (_collectionView.contentSize.height >= _collectionView.frame.size.height && contentOffsetY > _collectionView.contentSize.height - _collectionView.frame.size.height) {
-        contentOffset.y = _collectionView.contentSize.height - _collectionView.frame.size.height;
-    } else {
-        contentOffset.y = contentOffsetY;
-    }
-    
-    [_collectionView setContentOffset:contentOffset animated:animated];
-    
-}
-
-- (void)performUpdatesWithCompletion:(void (^)(BOOL finished))completion
-{
-    WXAssertMainThread();
-    
-    //TODO: support completion
-    
-    if (![self isViewLoaded]) {
-        completion(NO);
-    }
-    
-    NSArray *oldData = [self.dataController.sections copy];
-    NSArray *newData = [self _sectionArrayFromComponents:self.subcomponents];
-    
-    [_updateController performUpdatesWithNewData:newData oldData:oldData view:_collectionView];
-}
-
-- (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    if ([subcomponent isKindOfClass:[WXCellComponent class]]) {
-        ((WXCellComponent *)subcomponent).delegate = self;
-    } else if ([subcomponent isKindOfClass:[WXHeaderComponent class]]) {
-        ((WXHeaderComponent *)subcomponent).delegate = self;
-    }
-    
-    BOOL inserted = [super _insertSubcomponent:subcomponent atIndex:index];
-    
-    if (![subcomponent isKindOfClass:[WXHeaderComponent class]]
-        && ![subcomponent isKindOfClass:[WXCellComponent class]]) {
-        return inserted;
-    }
-    
-    WXPerformBlockOnMainThread(^{
-        [self performUpdatesWithCompletion:^(BOOL finished) {
-            // void
-        }];
-    });
-    
-    return inserted;
-}
-
-- (void)insertSubview:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    //Here will not insert cell/header/footer's view again
-    if (![subcomponent isKindOfClass:[WXCellComponent class]]
-        && ![subcomponent isKindOfClass:[WXHeaderComponent class]]
-        && ![subcomponent isKindOfClass:[WXFooterComponent class]]) {
-        [super insertSubview:subcomponent atIndex:index];
-    }
-}
-
-#pragma mark - WXRecyclerUpdateControllerDelegate
-
-- (void)updateController:(WXRecyclerUpdateController *)controller willPerformUpdateWithNewData:(NSArray<WXSectionDataController *> *)newData
-{
-    if (newData) {
-        [self.dataController updateData:newData];
-    }
-}
-
-- (void)updateController:(WXRecyclerUpdateController *)controller didPerformUpdateWithFinished:(BOOL)finished
-{
-    
-}
-
-#pragma mark - UICollectionViewDataSource
-
-- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
-{
-    WXLogDebug(@"section number:%li", (long)[self.dataController numberOfSections]);
-    return [self.dataController numberOfSections];
-}
-
-- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
-{
-    NSInteger numberOfItems = [self.dataController numberOfItemsInSection:section];
-    
-    WXLogDebug(@"Number of items is %ld in section:%ld", (long)numberOfItems, (long)section);
-    
-    return numberOfItems;
-}
-
-- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXLogDebug(@"Getting cell at indexPath:%@", indexPath);
-    
-    WXCollectionViewCell *cellView = [_collectionView dequeueReusableCellWithReuseIdentifier:kCollectionCellReuseIdentifier forIndexPath:indexPath];
-    
-    UIView *contentView = [self.dataController cellForItemAtIndexPath:indexPath];
-    
-    cellView.wx_component = contentView.wx_component;
-    
-    [self.dragController goThroughAnchor:cellView.wx_component indexPath:indexPath];
-    
-    if (contentView.superview == cellView.contentView) {
-        return cellView;
-    }
-    
-    for (UIView *view in cellView.contentView.subviews) {
-        [view removeFromSuperview];
-    }
-    
-    [cellView.contentView addSubview:contentView];
-    [cellView setAccessibilityIdentifier:contentView.accessibilityIdentifier];
-    
-    return cellView;
-}
-
-- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
-{
-    UICollectionReusableView *reusableView = nil;
-    if ([kind isEqualToString:kCollectionSupplementaryViewKindHeader]) {
-        reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:kCollectionHeaderReuseIdentifier forIndexPath:indexPath];
-        UIView *contentView = [self.dataController viewForHeaderAtIndexPath:indexPath];
-        if (contentView.superview != reusableView) {
-            for (UIView *view in reusableView.subviews) {
-                [view removeFromSuperview];
-            }
-            
-            [reusableView addSubview:contentView];
-        }
-    }
-    
-    return reusableView;
-}
-
-#pragma mark - UICollectionViewDelegate
-
-- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXLogDebug(@"will display cell:%@, at index path:%@", cell, indexPath);
-}
-
-- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXLogDebug(@"Did end displaying cell:%@, at index path:%@", cell, indexPath);
-}
-
-#pragma mark - WXMultiColumnLayoutDelegate
-
-- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView insetForLayout:(UICollectionViewLayout *)collectionViewLayout
-{
-    return _padding;
-}
-
-- (CGFloat)collectionView:(UICollectionView *)collectionView contentWidthForLayout:(UICollectionViewLayout *)collectionViewLayout
-{
-    return [self safeContainerStyleWidth];
-}
-
-- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    CGSize itemSize = [self.dataController sizeForItemAtIndexPath:indexPath];
-    return itemSize.height;
-}
-
-- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForHeaderInSection:(NSInteger)section
-{
-    CGSize headerSize = [self.dataController sizeForHeaderAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]];
-    return headerSize.height;
-}
-
-- (BOOL)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout hasHeaderInSection:(NSInteger)section
-{
-    return [self.dataController hasHeaderInSection:section];
-}
-
-- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout isNeedStickyForHeaderInSection:(NSInteger)section
-{
-    return [self.dataController isStickyForHeaderAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]];
-}
-
-#pragma mark - WXHeaderRenderDelegate
-
-- (float)headerWidthForLayout:(WXHeaderComponent *)header
-{
-    if (_layoutType == WXRecyclerLayoutTypeMultiColumn) {
-        return ((WXMultiColumnLayout *)_collectionViewlayout).computedHeaderWidth;
-    }
-    
-    return 0.0;
-}
-
-- (void)headerDidLayout:(WXHeaderComponent *)header
-{
-    WXPerformBlockOnMainThread(^{
-        [self.collectionView.collectionViewLayout invalidateLayout];
-    });
-}
-
-- (void)headerDidRemove:(WXHeaderComponent *)header
-{
-    WXPerformBlockOnMainThread(^{
-        [self performUpdatesWithCompletion:^(BOOL finished) {
-            
-        }];
-    });
-}
-
-#pragma mark - WXCellRenderDelegate
-
-- (float)containerWidthForLayout:(WXCellComponent *)cell
-{
-    if (_layoutType == WXRecyclerLayoutTypeMultiColumn) {
-        return ((WXMultiColumnLayout *)_collectionViewlayout).computedColumnWidth;
-    }
-    
-    return 0.0;
-}
-
-- (void)cellDidLayout:(WXCellComponent *)cell
-{
-    BOOL previousLayoutComplete = cell.isLayoutComplete;
-    cell.isLayoutComplete = YES;
-    WXPerformBlockOnMainThread(^{
-        if (previousLayoutComplete) {
-            [self.updateController reloadItemsAtIndexPath:[self.dataController indexPathForCell:cell]];
-        } else {
-            [self performUpdatesWithCompletion:^(BOOL finished) {
-            }];
-        }
-    });
-}
-
-- (void)cellDidRendered:(WXCellComponent *)cell
-{
-    if (WX_MONITOR_INSTANCE_PERF_IS_RECORDED(WXPTFirstScreenRender, self.weexInstance) && !self.weexInstance.onRenderProgress) {
-        return;
-    }
-    
-    NSIndexPath *indexPath = [self.dataController indexPathForCell:cell];
-    
-    UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath];
-    CGRect cellRect = attributes.frame;
-    if (cellRect.origin.y + cellRect.size.height >= _collectionView.frame.size.height) {
-        WX_MONITOR_INSTANCE_PERF_END(WXPTFirstScreenRender, self.weexInstance);
-    }
-    
-    if (self.weexInstance.onRenderProgress) {
-        CGRect renderRect = [_collectionView convertRect:cellRect toView:self.weexInstance.rootView];
-        self.weexInstance.onRenderProgress(renderRect);
-    }
-}
-
-- (void)cellDidRemove:(WXCellComponent *)cell
-{
-    if (cell.isLayoutComplete) {
-        WXPerformBlockOnMainThread(^{
-            [self performUpdatesWithCompletion:^(BOOL finished) {
-            }];
-        });
-    }
-}
-
-- (void)cell:(WXCellComponent *)cell didMoveToIndex:(NSUInteger)index
-{
-    if (cell.isLayoutComplete) {
-        WXPerformBlockOnMainThread(^{
-            [self performUpdatesWithCompletion:^(BOOL finished) {
-            }];
-        });
-    }
-}
-
-#pragma mark - Load More Event
-
-- (void)setLoadmoreretry:(NSUInteger)loadmoreretry
-{
-    if (loadmoreretry != self.loadmoreretry) {
-        _previousLoadMoreCellNumber = 0;
-    }
-    
-    [super setLoadmoreretry:loadmoreretry];
-}
-
-- (void)loadMore
-{
-    [super loadMore];
-    
-    _previousLoadMoreCellNumber = [self totalNumberOfCells];
-}
-
-- (BOOL)isNeedLoadMore
-{
-    BOOL superNeedLoadMore = [super isNeedLoadMore];
-    return superNeedLoadMore && _previousLoadMoreCellNumber != [self totalNumberOfCells];
-}
-
-- (NSUInteger)totalNumberOfCells
-{
-    NSUInteger cellNumber = 0;
-    NSUInteger sectionCount = [_collectionView numberOfSections];
-    for (int section = 0; section < sectionCount; section ++) {
-        cellNumber += [_collectionView numberOfItemsInSection:section];
-    }
-    
-    return cellNumber;
-}
-
-- (void)resetLoadmore{
-    [super resetLoadmore];
-    _previousLoadMoreCellNumber = 0;
-}
-
-#pragma mark - Private
-
-- (float)_floatValueForColumnGap:(WXLength *)gap
-{
-    if (gap.isNormal) {
-        return kRecyclerNormalColumnGap * self.weexInstance.pixelScaleFactor;
-    } else {
-        return gap.floatValue;
-    }
-}
-
-- (void)_fillPadding
-{
-    if (self.flexCssNode == nullptr) {
-        return;
-    }
-    
-    UIEdgeInsets padding = {
-            WXFloorPixelValue(self.flexCssNode->getPaddingTop() + self.flexCssNode->getBorderWidthTop()),
-            WXFloorPixelValue(self.flexCssNode->getPaddingLeft() + self.flexCssNode->getBorderWidthLeft()),
-            WXFloorPixelValue(self.flexCssNode->getPaddingBottom() + self.flexCssNode->getBorderWidthBottom()),
-            WXFloorPixelValue(self.flexCssNode->getPaddingRight() + self.flexCssNode->getBorderWidthRight())
-        };
-    
-    
-    if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
-        _padding = padding;
-        [self setNeedsLayout];
-        
-        for (WXComponent *component in self.subcomponents) {
-            [component setNeedsLayout];
-        }
-        
-        if (_collectionView) {
-            WXPerformBlockOnMainThread(^{
-                [_collectionView.collectionViewLayout invalidateLayout];
-            });
-        }
-    }
-}
-
-- (NSArray<WXSectionDataController *> *)_sectionArrayFromComponents:(NSArray<WXComponent *> *)components
-{
-    NSMutableArray<WXSectionDataController *> *sectionArray = [NSMutableArray array];
-    NSMutableArray<WXCellComponent *> *cellArray = [NSMutableArray array];
-    WXSectionDataController *currentSection;
-    
-    for (int i = 0; i < components.count; i++) {
-        if (!currentSection) {
-            currentSection = [WXSectionDataController new];
-        }
-        
-        WXComponent* component = components[i];
-        
-        if ([component isKindOfClass:[WXHeaderComponent class]]) {
-            if (i != 0 && (currentSection.headerComponent || cellArray.count > 0)) {
-                currentSection.cellComponents = [cellArray copy];
-                [sectionArray addObject:currentSection];
-                currentSection = [WXSectionDataController new];
-                [cellArray removeAllObjects];
-            }
-            currentSection.headerComponent = (WXHeaderComponent *)component;
-        } else if ([component isKindOfClass:[WXCellComponent class]]
-                   && ((WXCellComponent *)component).isLayoutComplete) {
-            [cellArray addObject:(WXCellComponent *)component];
-        } else if ([component isKindOfClass:[WXFooterComponent class]]) {
-            currentSection.footerComponent = component;
-        } else {
-            continue;
-        }
-    }
-    
-    if (cellArray.count > 0 || currentSection.headerComponent) {
-        currentSection.cellComponents = [cellArray copy];
-        [sectionArray addObject:currentSection];
-    }
-    
-    return sectionArray;
-}
-
-- (void)fixFlicker
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        // FIXME:(ง •̀_•́)ง┻━┻ Stupid scoll view, always reset content offset to zero by calling _adjustContentOffsetIfNecessary after insert cells.
-        // So if you pull down list while list is rendering, the list will be flickering.
-        // Demo:
-        // Have to hook _adjustContentOffsetIfNecessary here.
-        // Any other more elegant way?
-        NSString *a = @"ntOffsetIfNe";
-        NSString *b = @"adjustConte";
-        
-        NSString *originSelector = [NSString stringWithFormat:@"_%@%@cessary", b, a];
-        [[self class] weex_swizzle:[WXCollectionView class] Method:NSSelectorFromString(originSelector) withMethod:@selector(fixedFlickerSelector)];
-    });
-}
-
-#define mark dragControllerDelegate
-
-- (void)updateDataSource{
-    NSMutableArray *oldComponents = [[NSMutableArray alloc] initWithArray:self.dataController.sections[self.dragController.startIndexPath.section].cellComponents];
-    if(oldComponents.count > 1){
-        WXCellComponent *startComponent = self.dataController.sections[self.dragController.startIndexPath.section].cellComponents[self.dragController.startIndexPath.item];
-        [oldComponents removeObject:startComponent];
-        [oldComponents insertObject:startComponent atIndex:self.dragController.targetIndexPath.item];
-        self.dataController.sections[self.dragController.startIndexPath.section].cellComponents = oldComponents;
-    }
-}
-
-- (void)dragFireEvent:(NSString *)eventName params:(NSDictionary *)params{
-    [self fireEvent:eventName params:params];
-}
-
-- (void)fixedFlickerSelector
-{
-    // DO NOT delete this method.
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h
deleted file mode 100644
index e1a9e70..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSectionDataController.h"
-
-@interface WXRecyclerDataController : NSObject
-
-@property (nonatomic, strong, readonly) NSArray<WXSectionDataController *> *sections;
-
-- (void)updateData:(NSArray<WXSectionDataController *> *)newData;
-
-- (NSInteger)numberOfSections;
-
-- (NSInteger)numberOfItemsInSection:(NSInteger)section;
-
-- (UIView *)cellForItemAtIndexPath:(NSIndexPath *)indexPath;
-
-- (CGSize)sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
-
-- (UIView *)viewForHeaderAtIndexPath:(NSIndexPath *)indexPath;
-
-- (CGSize)sizeForHeaderAtIndexPath:(NSIndexPath *)indexPath;
-
-- (BOOL)isStickyForHeaderAtIndexPath:(NSIndexPath *)indexPath;
-
-- (BOOL)hasHeaderInSection:(NSInteger)section;
-
-- (NSIndexPath *)indexPathForCell:(WXCellComponent *)cell;
-
-- (NSUInteger)indexForHeader:(WXHeaderComponent *)header;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.m
deleted file mode 100644
index 31fb731..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.m
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRecyclerDataController.h"
-#import "WXCellComponent.h"
-#import "NSArray+Weex.h"
-#import "WXAssert.h"
-
-@interface WXRecyclerDataController ()
-
-@property (nonatomic, strong, readwrite) NSArray<WXSectionDataController *> *sections;
-@property (nonatomic, strong, readonly) NSMapTable<WXCellComponent *, NSIndexPath*> *cellToIndexPathTable;
-@property (nonatomic, strong, readonly) NSMapTable<WXHeaderComponent *, NSNumber*> *headerToIndexTable;
-
-@end
-
-@implementation WXRecyclerDataController
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-        _sections = [NSArray new];
-        _cellToIndexPathTable = [NSMapTable weakToStrongObjectsMapTable];
-        _headerToIndexTable = [NSMapTable weakToStrongObjectsMapTable];
-    }
-    
-    return self;
-}
-
-#pragma mark - Public
-
-- (void)updateData:(NSArray<WXSectionDataController *> *)newData
-{
-    WXAssertMainThread();
-    
-    [self cleanup];
-    _sections = [newData copy];
-    
-    [newData enumerateObjectsUsingBlock:^(WXSectionDataController * _Nonnull controller, NSUInteger idx, BOOL * _Nonnull stop) {
-        [controller.cellComponents enumerateObjectsUsingBlock:^(WXCellComponent * _Nonnull obj, NSUInteger idx2, BOOL * _Nonnull stop) {
-            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx2 inSection:idx];
-            [_cellToIndexPathTable setObject:indexPath forKey:obj];
-        }];
-        if (controller.headerComponent) {
-            [_headerToIndexTable setObject:@(idx) forKey:controller.headerComponent];
-        }
-    }];
-}
-
-- (NSInteger)numberOfSections
-{
-    WXAssertMainThread();
-    return self.sections.count;
-}
-
-- (NSInteger)numberOfItemsInSection:(NSInteger)section
-{
-    WXSectionDataController *sectionController = [self dataControllerForSection:section];
-    WXAssert(sectionController, @"No section controller found for section:%ld", section);
-    
-    return [sectionController numberOfItems];
-}
-
-- (UIView *)cellForItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
-    UIView *contentView = [sectionController cellForItemAtIndex:indexPath.item];
-    
-    return contentView;
-}
-
-- (CGSize)sizeForItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
-    return [sectionController sizeForItemAtIndex:indexPath.item];
-}
-
-- (UIView *)viewForHeaderAtIndexPath:(NSIndexPath *)indexPath;
-{
-    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
-    return [sectionController viewForHeaderAtIndex:indexPath.item];
-}
-
-- (CGSize)sizeForHeaderAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
-    return [sectionController sizeForHeaderAtIndex:indexPath.item];
-}
-
-- (BOOL)hasHeaderInSection:(NSInteger)section
-{
-    WXSectionDataController *sectionController = [self dataControllerForSection:section];
-    return sectionController.headerComponent != nil;
-}
-
-- (BOOL)isStickyForHeaderAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
-    return [sectionController isStickyForHeaderAtIndex:indexPath.item];
-}
-
-- (NSIndexPath *)indexPathForCell:(WXCellComponent *)cell
-{
-    return [_cellToIndexPathTable objectForKey:cell];
-}
-
-- (NSUInteger)indexForHeader:(WXHeaderComponent *)header
-{
-    NSNumber *index = [_headerToIndexTable objectForKey:header];
-    return [index unsignedIntegerValue];
-}
-
-#pragma mark - Private
-
-- (WXSectionDataController *)dataControllerForSection:(NSInteger)section
-{
-    WXAssertMainThread();
-    return [self.sections wx_safeObjectAtIndex:section];
-}
-
-- (void)cleanup
-{
-    [_cellToIndexPathTable removeAllObjects];
-    [_headerToIndexTable removeAllObjects];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.h
deleted file mode 100644
index d561de9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSectionDataController.h"
-#import "WXComponent.h"
-
-@class WXRecyclerDragController;
-
-typedef enum : NSUInteger {
-    WXRecyclerDragTriggerNormal,
-    WXRecyclerDragTriggerPan
-} WXRecyclerDragTriggerType;
-
-
-@protocol WXRecyclerDragControllerDelegate <NSObject>
-- (void)dragFireEvent:(NSString *)eventName params:(NSDictionary *)params;
-- (void)updateDataSource;
-
-@end
-
-@interface WXRecyclerDragController : NSObject
-@property (nonatomic,weak) id<WXRecyclerDragControllerDelegate> delegate;
-@property (nonatomic,weak) UICollectionView *collectionView;
-@property (nonatomic, strong) UILongPressGestureRecognizer *currentLongPress;
-@property (nonatomic, strong) NSIndexPath  *startIndexPath;
-@property (nonatomic, strong) NSIndexPath  *dragingIndexPath;
-@property (nonatomic, strong) NSIndexPath  *targetIndexPath;
-@property (nonatomic, strong) NSMutableArray *excludedAry;
-@property (nonatomic, strong) UICollectionViewCell *dragingCell;
-@property (nonatomic, assign) BOOL isDragable;
-@property (nonatomic, assign) BOOL isDragAnchor;
-@property (nonatomic, assign) WXRecyclerDragTriggerType dragTriggerType;
-
-- (void)goThroughAnchor:(WXComponent *)wxComponent indexPath:(NSIndexPath *)indexPath;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.m
deleted file mode 100644
index 5538cf9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDragController.m
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRecyclerDragController.h"
-
-
-@implementation WXRecyclerDragController
-
-- (instancetype)init{
-    self = [super init];
-    if (self) {
-        _excludedAry = [[NSMutableArray alloc] init];
-        _isDragAnchor = NO;
-
-    }
-    return self;
-}
-
-- (void)setCollectionView:(UICollectionView *)collectionView{
-    _collectionView = collectionView;
-    _currentLongPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressMethod:)];
-    _currentLongPress.minimumPressDuration = 0.3f;
-    [_collectionView addGestureRecognizer:_currentLongPress];
-}
-
-- (void)setDragingCell:(UICollectionViewCell *)dragingCell{
-    _dragingCell = dragingCell;
-    _dragingCell.hidden = true;
-    [_collectionView addSubview:_dragingCell];
-}
-
-
-- (void)goThroughAnchor:(WXComponent *)wxComponent indexPath:(NSIndexPath *)indexPath{
-    if (wxComponent.attributes && [wxComponent.attributes[@"dragExcluded"] boolValue]){
-        [_excludedAry addObject:indexPath];
-        NSSet *set = [NSSet setWithArray:_excludedAry];
-        [_excludedAry removeAllObjects];
-        [_excludedAry addObjectsFromArray:[set allObjects]];
-    }
-    
-    NSMutableArray *subviewComponents = [[NSMutableArray alloc] init];
-    [subviewComponents addObjectsFromArray:wxComponent.subcomponents];
-    WXComponent *anchorComponent;
-    for (int i = 0 ; i < subviewComponents.count ; i++){
-        WXComponent *compoent = subviewComponents[i];
-        if (compoent.attributes[@"dragAnchor"]) {
-            anchorComponent = compoent;
-            _isDragAnchor = YES;
-            break;
-        }
-        
-        if (compoent.subcomponents && compoent.subcomponents.count && compoent.subcomponents.count > 0) {
-            [subviewComponents addObjectsFromArray:compoent.subcomponents];
-        }
-    }
-    
-    if (anchorComponent) {
-        if (_currentLongPress) {
-            [self.collectionView removeGestureRecognizer:_currentLongPress];
-            _currentLongPress = nil;
-        }
-        
-        if (_dragTriggerType == WXRecyclerDragTriggerPan) {
-            UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(longPressMethod:)];
-            [anchorComponent.view addGestureRecognizer:panGestureRecognizer];
-            
-        }else{
-            UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressMethod:)];
-            [anchorComponent.view addGestureRecognizer:longPressGestureRecognizer];
-        }
-    }
-}
-
-#pragma mark - dragMethod
-- (void)longPressMethod:(UILongPressGestureRecognizer*)gesture
-{
-    if (_isDragable) {
-        switch (gesture.state) {
-            case UIGestureRecognizerStateBegan:
-                [self dragBegin:gesture];
-                break;
-            case UIGestureRecognizerStateChanged:
-                [self dragChanged:gesture];
-                break;
-            case UIGestureRecognizerStateEnded:
-                [self dragEnd:gesture];
-                break;
-            default:
-                break;
-        }
-    }
-}
-
-- (void)dragBegin:(UILongPressGestureRecognizer *)gesture{
-    
-    CGPoint point = [gesture locationInView:_collectionView];
-    
-    _startIndexPath = [self getDragingIndexPathWithPoint:point];
-    if (!_startIndexPath) {
-        return;
-    }
-    
-    if ([self.delegate respondsToSelector:@selector(fireEvent:params:)]) {
-        [self.delegate dragFireEvent:@"dragstart" params:@{@"fromIndex":[NSString stringWithFormat:@"%ld",(long)_startIndexPath.row]}];
-    }
-    
-    _dragingIndexPath = [self getDragingIndexPathWithPoint:point];
-    if (!_dragingIndexPath) {
-        return;
-    }
-    
-    [_collectionView bringSubviewToFront:_dragingCell];
-    _dragingCell.frame = [_collectionView cellForItemAtIndexPath:_dragingIndexPath].frame;
-    _dragingCell.hidden = false;
-    [UIView animateWithDuration:0.3 animations:^{
-        [_dragingCell setTransform:CGAffineTransformMakeScale(1.2, 1.2)];
-    }];
-}
-
-- (void)dragChanged:(UILongPressGestureRecognizer *)gesture{
-    
-    if (!_startIndexPath) {
-        return;
-    }
-    CGPoint point = [gesture locationInView:_collectionView];
-    _dragingCell.center = point;
-    _targetIndexPath = [self getTargetIndexPathWithPoint:point];
-    
-    if (_targetIndexPath && _dragingIndexPath && (_targetIndexPath.section == _startIndexPath.section)){
-        [_collectionView moveItemAtIndexPath:_dragingIndexPath toIndexPath:_targetIndexPath];
-        _dragingIndexPath = _targetIndexPath;
-    }
-}
-
-- (void)dragEnd:(UILongPressGestureRecognizer *)gesture{
-    
-    if (!_startIndexPath || !_dragingIndexPath) {
-        return;
-    }
-    if ([self.delegate respondsToSelector:@selector(fireEvent:params:)]) {
-        [self.delegate dragFireEvent:@"dragend" params:@{@"toIndex":[NSString stringWithFormat:@"%ld",(long)_dragingIndexPath.row],@"fromIndex":[NSString stringWithFormat:@"%ld",(long)_startIndexPath.row]}];
-    }
-    
-    CGRect endFrame = [_collectionView cellForItemAtIndexPath:_dragingIndexPath].frame;
-    
-    __weak typeof(self) weakSelf = self;
-    [UIView animateWithDuration:0.3 animations:^{
-        [weakSelf.dragingCell setTransform:CGAffineTransformMakeScale(1.0, 1.0)];
-        weakSelf.dragingCell.frame = endFrame;
-    } completion:^(BOOL finished) {
-        weakSelf.dragingCell.hidden = YES;
-        if ([weakSelf.delegate respondsToSelector:@selector(updateDataSource)]) {
-            [weakSelf.delegate updateDataSource];
-        }
-        
-    }];
-}
-
-- (NSIndexPath *)getDragingIndexPathWithPoint:(CGPoint)point{
-    NSIndexPath *dragingIndexPath = nil;
-    for (NSIndexPath *indexPath in [_collectionView indexPathsForVisibleItems]){
-        if (CGRectContainsPoint([_collectionView cellForItemAtIndexPath:indexPath].frame,point)) {
-            dragingIndexPath = indexPath;
-            break;
-        }
-    }
-    
-    BOOL isExcluded = NO;
-    if (dragingIndexPath) {
-        for (NSIndexPath *indexPath in _excludedAry) {
-            if (indexPath.row == dragingIndexPath.row) {
-                isExcluded = YES;
-            }
-        }
-    }
-    return isExcluded?nil:dragingIndexPath;
-}
-
-- (NSIndexPath *)getTargetIndexPathWithPoint:(CGPoint)point{
-    NSIndexPath *targetIndexPath = nil;
-    for (NSIndexPath *indexPath in _collectionView.indexPathsForVisibleItems) {
-        if (CGRectContainsPoint([_collectionView cellForItemAtIndexPath:indexPath].frame, point)) {
-            targetIndexPath = indexPath;
-        }
-    }
-    return targetIndexPath;
-}
-
-- (void)dealloc{
-    
-}
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h
deleted file mode 100644
index b6b918d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSectionDataController.h"
-@class WXRecyclerUpdateController;
-
-@protocol WXRecyclerUpdateControllerDelegate <NSObject>
-
-- (void)updateController:(WXRecyclerUpdateController *)controller willPerformUpdateWithNewData:(NSArray<WXSectionDataController *> *)newData;
-
-- (void)updateController:(WXRecyclerUpdateController *)controller didPerformUpdateWithFinished:(BOOL)finished;
-
-@end
-
-@interface WXRecyclerUpdateController : NSObject
-
-@property (nonatomic, weak) id<WXRecyclerUpdateControllerDelegate> delegate;
-
-- (void)performUpdatesWithNewData:(NSArray<WXSectionDataController *> *)newData
-                          oldData:(NSArray<WXSectionDataController *> *)oldData
-                             view:(UICollectionView *)collectionView;
-
-- (void)reloadItemsAtIndexPath:(NSIndexPath *)indexPath;
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.m
deleted file mode 100644
index 5f92f29..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.m
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRecyclerUpdateController.h"
-#import "WXCellComponent.h"
-#import "WXAssert.h"
-#import "WXLog.h"
-#import "WXDiffUtil.h"
-#import "NSArray+Weex.h"
-
-@interface WXRecyclerDiffResult : NSObject
-
-@property (nonatomic, strong, readonly) NSIndexSet *insertSections;
-@property (nonatomic, strong, readonly) NSIndexSet *deleteSections;
-@property (nonatomic, strong, readonly) NSIndexSet *reloadSections;
-
-@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *deleteIndexPaths;
-@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *insertIndexPaths;
-@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *reloadIndexPaths;
-
-- (BOOL)hasChanges;
-
-@end
-
-@implementation WXRecyclerDiffResult
-
-- (instancetype)initWithInsertSections:(NSIndexSet *)insertSections
-                        deleteSections:(NSIndexSet *)deletesSections
-                        reloadSections:(NSIndexSet *)reloadSections
-                      insertIndexPaths:(NSMutableSet<NSIndexPath *> *)insertIndexPaths
-                      deleteIndexPaths:(NSMutableSet<NSIndexPath *> *)deleteIndexPaths
-                      reloadIndexPaths:(NSMutableSet<NSIndexPath *> *)reloadIndexPaths
-{
-    if (self = [super init]) {
-        _insertSections = [insertSections copy];
-        _deleteSections = [deletesSections copy];
-        _reloadSections = [reloadSections copy];
-        _insertIndexPaths = [insertIndexPaths copy];
-        _deleteIndexPaths = [deleteIndexPaths copy];
-        _reloadIndexPaths = [reloadIndexPaths copy];
-    }
-    
-    return self;
-}
-
-- (BOOL)hasChanges
-{
-    return _insertSections.count > 0 || _deleteSections.count > 0 || _reloadSections.count > 0 || _insertIndexPaths.count > 0 || _deleteIndexPaths.count > 0 || _reloadIndexPaths.count > 0;
-}
-
-- (NSString *)description
-{
-    return [NSString stringWithFormat:@"<%@: %p; insert sections: %@; delete sections: %@; reload sections: %@; insert index paths: %@; delete index paths: %@; reload index paths: %@", NSStringFromClass([self class]), self,_insertSections, _deleteSections, _reloadSections, _insertIndexPaths, _deleteIndexPaths, _reloadIndexPaths];
-}
-
-@end
-
-@interface WXRecyclerUpdateController ()
-
-@property (nonatomic, copy) NSArray<WXSectionDataController *> *theNewData;
-@property (nonatomic, copy) NSArray<WXSectionDataController *> *theOldData;
-@property (nonatomic, weak) UICollectionView *collectionView;
-@property (nonatomic, strong) NSMutableSet<NSIndexPath *> *reloadIndexPaths;
-@property (nonatomic, assign) BOOL isUpdating;
-
-@end
-
-@implementation WXRecyclerUpdateController
-
-- (void)performUpdatesWithNewData:(NSArray<WXSectionDataController *> *)newData oldData:(NSArray<WXSectionDataController *> *)oldData view:(UICollectionView *)collectionView
-{
-    if (!collectionView) {
-        return;
-    }
-    
-    self.theNewData = newData;
-    self.theOldData = oldData;
-    self.collectionView = collectionView;
-    
-    [self checkUpdates];
-}
-
-- (void)reloadItemsAtIndexPath:(NSIndexPath *)indexPath
-{
-    if (!indexPath) {
-        return;
-    }
-    
-    if (!_reloadIndexPaths) {
-        _reloadIndexPaths = [NSMutableSet set];
-    }
-    
-    [_reloadIndexPaths addObject:indexPath];
-    
-    [self checkUpdates];
-}
-
-- (void)checkUpdates
-{
-    dispatch_async(dispatch_get_main_queue(), ^{
-        if (self.isUpdating) {
-            return ;
-        }
-        
-        [self performBatchUpdates];
-    });
-}
-
-- (void)performBatchUpdates
-{
-    WXAssertMainThread();
-    WXAssert(!self.isUpdating, @"Can not perform updates while an updating is being performed");
-    
-    UICollectionView *collectionView = self.collectionView;
-    if (!collectionView) {
-        return;
-    }
-    
-    NSArray<WXSectionDataController *> *newData = [self.theNewData copy];
-    NSArray<WXSectionDataController *> *oldData = [self.theOldData copy];
-
-    [self cleanup];
-    
-    WXRecyclerDiffResult *diffResult = [self diffWithNewData:newData oldData:oldData];
-    if (![diffResult hasChanges] && self.reloadIndexPaths.count == 0) {
-        return;
-    }
-    
-    void (^updates)(void) = [^{
-        [self.delegate updateController:self willPerformUpdateWithNewData:newData];
-        [UIView setAnimationsEnabled:NO];
-        WXLogDebug(@"UICollectionView update:%@", diffResult);
-        if(!diffResult.hasChanges) { return ; }
-        [self applyUpdate:diffResult toCollectionView:self.collectionView];
-    } copy];
-    
-    void (^completion)(BOOL) = [^(BOOL finished) {
-        [UIView setAnimationsEnabled:YES];
-        self.isUpdating = NO;
-        [self.delegate updateController:self didPerformUpdateWithFinished:finished];
-        [self.reloadIndexPaths removeAllObjects];
-        [self checkUpdates];
-    } copy];
-    
-    self.isUpdating = YES;
-    
-    if (!self.delegate || !collectionView.dataSource) {
-        return;
-    }
-    WXLogDebug(@"Diff result:%@", diffResult);
-    [collectionView performBatchUpdates:updates completion:completion];
-}
-
-- (void)cleanup
-{
-    self.theNewData = nil;
-    self.theOldData = nil;
-}
-
-- (WXRecyclerDiffResult *)diffWithNewData:(NSArray<WXSectionDataController *> *)newData
-                              oldData:(NSArray<WXSectionDataController *> *)oldData
-{
-    NSMutableIndexSet *reloadSections = [NSMutableIndexSet indexSet];
-    NSMutableSet<NSIndexPath *> *reloadIndexPaths = [NSMutableSet set];
-    NSMutableSet<NSIndexPath *> *deleteIndexPaths = [NSMutableSet set];
-    NSMutableSet<NSIndexPath *> *insertIndexPaths = [NSMutableSet set];
-    
-    WXDiffResult *sectionDiffResult = [WXDiffUtil diffWithMinimumDistance:newData oldArray:oldData];
-    
-    WXLogDebug(@"section diff result:%@", sectionDiffResult);
-    
-    [sectionDiffResult.inserts enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
-        WXSectionDataController *newSection = [newData wx_safeObjectAtIndex:idx];
-        [newSection.cellComponents enumerateObjectsUsingBlock:^(WXCellComponent * _Nonnull obj, NSUInteger idx2, BOOL * _Nonnull stop) {
-            if (obj.isLayoutComplete) {
-                NSIndexPath *insertIndexPath = [NSIndexPath indexPathForItem:idx2 inSection:idx];
-                [insertIndexPaths addObject:insertIndexPath];
-            }
-        }];
-        WXAssert(newSection, @"No section found in  new index:%ld");
-    }];
-    
-    for (WXDiffUpdateIndex *sectionUpdate in sectionDiffResult.updates) {
-        WXSectionDataController *oldSection = [oldData wx_safeObjectAtIndex:sectionUpdate.oldIndex];
-        WXSectionDataController *newSection = [newData wx_safeObjectAtIndex:sectionUpdate.newIndex];
-        WXAssert(newSection && oldSection, @"No section found in old index:%ld, new index:%ld", sectionUpdate.oldIndex, sectionUpdate.newIndex);
-        
-        WXDiffResult *itemDiffResult = [WXDiffUtil diffWithMinimumDistance:newSection.cellComponents oldArray:oldSection.cellComponents];
-        if (![itemDiffResult hasChanges]) {
-            // header or footer need to be updated
-            [reloadSections addIndex:sectionUpdate.oldIndex];
-        } else {
-            for (WXDiffUpdateIndex *update in itemDiffResult.updates) {
-                NSIndexPath *reloadIndexPath = [NSIndexPath indexPathForItem:update.oldIndex inSection:sectionUpdate.oldIndex];
-                [reloadIndexPaths addObject:reloadIndexPath];
-            }
-            
-            [itemDiffResult.inserts enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
-                WXCellComponent *cell = [newSection.cellComponents wx_safeObjectAtIndex:idx];
-                if (cell.isLayoutComplete) {
-                    NSIndexPath *insertIndexPath = [NSIndexPath indexPathForItem:idx inSection:sectionUpdate.oldIndex];
-                    [insertIndexPaths addObject:insertIndexPath];
-                }
-            }];
-            
-            [itemDiffResult.deletes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
-                NSIndexPath *deleteIndexPath = [NSIndexPath indexPathForItem:idx inSection:sectionUpdate.oldIndex];
-                [deleteIndexPaths addObject:deleteIndexPath];
-            }];
-        }
-        
-    }
-    
-    WXRecyclerDiffResult *result = [[WXRecyclerDiffResult alloc] initWithInsertSections:sectionDiffResult.inserts
-                                                                 deleteSections:sectionDiffResult.deletes
-                                                                 reloadSections:reloadSections
-                                                               insertIndexPaths:insertIndexPaths
-                                                               deleteIndexPaths:deleteIndexPaths
-                                                               reloadIndexPaths:reloadIndexPaths];
-    
-    return result;
-}
-
-- (void)applyUpdate:(WXRecyclerDiffResult *)diffResult toCollectionView:(UICollectionView *)collectionView
-{
-    if (!collectionView) {
-        return;
-    }
-    
-    // reload index paths should not inculde delete index paths, otherwise it will cause crash:
-    // Assertion failure in
-    // -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:animator:]
-    NSMutableSet *reloadIndexPaths = self.reloadIndexPaths ? [[diffResult.reloadIndexPaths setByAddingObjectsFromSet:self.reloadIndexPaths] mutableCopy]: [diffResult.reloadIndexPaths mutableCopy];
-    [reloadIndexPaths minusSet:diffResult.deleteIndexPaths];
-    
-    [collectionView deleteItemsAtIndexPaths:[diffResult.deleteIndexPaths allObjects]];
-    [collectionView insertItemsAtIndexPaths:[diffResult.insertIndexPaths allObjects]];
-    [collectionView reloadItemsAtIndexPaths:[reloadIndexPaths allObjects]];
-    
-    [collectionView deleteSections:diffResult.deleteSections];
-    [collectionView insertSections:diffResult.insertSections];
-    [collectionView reloadSections:diffResult.reloadSections];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.h
deleted file mode 100644
index c7986bb..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXDiffUtil.h"
-#import <UIKit/UIKit.h>
-
-@class WXComponent;
-@class WXCellComponent;
-@class WXHeaderComponent;
-
-@interface WXSectionDataController : NSObject <WXDiffable>
-
-@property (nonatomic, strong) NSArray<WXCellComponent *> *cellComponents;
-@property (nonatomic, strong) WXHeaderComponent *headerComponent;
-@property (nonatomic, strong) WXComponent *footerComponent;
-
-- (NSInteger)numberOfItems;
-
-- (UIView *)cellForItemAtIndex:(NSInteger)index;
-
-- (CGSize)sizeForItemAtIndex:(NSInteger)index;
-
-- (UIView *)viewForHeaderAtIndex:(NSInteger)index;
-
-- (CGSize)sizeForHeaderAtIndex:(NSInteger)index;
-
-- (BOOL)isStickyForHeaderAtIndex:(NSInteger)index;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.m
deleted file mode 100644
index 1bc7d23..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.m
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSectionDataController.h"
-#import "WXCellComponent.h"
-#import "WXHeaderComponent.h"
-#import "WXAssert.h"
-
-@implementation WXSectionDataController
-
-- (NSInteger)numberOfItems
-{
-    return self.cellComponents.count;
-}
-
-- (UIView *)cellForItemAtIndex:(NSInteger)index
-{
-    WXAssertMainThread();
-    
-    WXCellComponent *cellComponent = self.cellComponents[index];
-    return cellComponent.view;
-}
-
-- (CGSize)sizeForItemAtIndex:(NSInteger)index
-{
-    WXAssertMainThread();
-    
-    WXCellComponent *cellComponent = self.cellComponents[index];
-    return cellComponent.calculatedFrame.size;
-}
-
-- (UIView *)viewForHeaderAtIndex:(NSInteger)index;
-{
-    return self.headerComponent.view;
-}
-
-- (CGSize)sizeForHeaderAtIndex:(NSInteger)index
-{
-    return self.headerComponent.calculatedFrame.size;
-}
-
-- (BOOL)isStickyForHeaderAtIndex:(NSInteger)index
-{
-    return self.headerComponent.isSticky;
-}
-
-- (NSUInteger)hash
-{
-    return [super hash];
-}
-
-- (BOOL)weex_isEqualTo:(id<WXDiffable>)object
-{
-    if ([object isKindOfClass:[WXSectionDataController class]]) {
-        WXSectionDataController *controller = (WXSectionDataController *)object;
-        BOOL headerEqual = (self.headerComponent && controller.headerComponent && self.headerComponent == controller.headerComponent) || (!self.headerComponent && !controller.headerComponent);
-        BOOL footerEqual = (self.footerComponent && controller.footerComponent && self.footerComponent == controller.footerComponent) || (!self.footerComponent && !controller.footerComponent);
-        BOOL cellEqual = self.cellComponents && controller.cellComponents && self.cellComponents.count == controller.cellComponents.count;
-        if (cellEqual) {
-            for (int i = 0; i < self.cellComponents.count; i ++) {
-                if (self.cellComponents[i] != controller.cellComponents[i]) {
-                    cellEqual = NO;
-                    break;
-                }
-            }
-        } else {
-            cellEqual = !self.cellComponents && controller.cellComponents;
-        }
-        
-        return headerEqual && footerEqual && cellEqual;
-    } else {
-        return NO;
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h
deleted file mode 100644
index 76fb1b5..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXAComponent : WXComponent <UIGestureRecognizerDelegate>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXAComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXAComponent.m
deleted file mode 100644
index 7d90771..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXAComponent.m
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXAComponent.h"
-#import "WXNavigationProtocol.h"
-#import "WXHandlerFactory.h"
-#import "WXLog.h"
-#import "WXComponent+Events.h"
-#import "WXURLRewriteProtocol.h"
-#import "WXSDKEngine.h"
-#import "WXComponent_internal.h"
-
-@interface WXAComponent()
-
-@property (nonatomic, strong) UITapGestureRecognizer *tap;
-@property (nonatomic, strong) NSString *href;
-
-@end
-
-@implementation WXAComponent
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        _tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openURL)];
-        _tap.delegate = self;
-        if (attributes[@"href"]) {
-            _href = attributes[@"href"];
-        }
-    }
-    return self;
-}
-
-- (void)dealloc
-{
-    if (_tap.delegate) {
-        _tap.delegate = nil;
-    }
-}
-
-- (void)viewDidLoad
-{
-    [self.view addGestureRecognizer:_tap];
-}
-
-- (void)openURL
-{
-    if (_href && [_href length] == 0) {
-        // href is empty string
-        _href = self.weexInstance.scriptURL.absoluteString;
-    }
-    
-    if (_href && [_href length] > 0) {
-        NSString *newURL = [_href copy];
-        WX_REWRITE_URL(_href, WXResourceTypeLink, self.weexInstance)
-        if (!newURL) {
-            return;
-        }
-        id<WXNavigationProtocol> navigationHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXNavigationProtocol)];
-        if ([navigationHandler respondsToSelector:@selector(pushViewControllerWithParam:
-                                                            completion:
-                                                            withContainer:)]) {
-            __weak typeof(self) weexSelf = self;
-            [navigationHandler pushViewControllerWithParam:@{@"url":newURL} completion:^(NSString *code, NSDictionary *responseData) {
-                WXLogDebug(@"Push success -> %@", weexSelf.href);
-            } withContainer:self.weexInstance.viewController];
-        } else {
-            WXLogError(@"Event handler of class %@ does not respond to pushViewControllerWithParam", NSStringFromClass([navigationHandler class]));
-        }
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"href"]) {
-        _href = attributes[@"href"];
-    }
-}
-
-#pragma mark
-#pragma gesture delegate
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
-{
-    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
-        return YES;
-    }
-    
-    return NO;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h
deleted file mode 100644
index fefdd40..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-#import "WXCanvasModule.h"
-#import <GLKit/GLKit.h>
-
-@interface WXCanvasComponent : WXComponent <GLKViewDelegate>
-
-- (void) addDrawActions:(NSArray *)actions canvasModule:(WXCanvasModule*)canvasModule;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.m
deleted file mode 100644
index 979b0e8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.m
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXCanvasComponent.h"
-#import "WXComponent_internal.h"
-#import "WXUtility.h"
-#import "WXConvert.h"
-#import <Foundation/Foundation.h>
-#import <OpenGLES/ES2/gl.h>
-#import <OpenGLES/ES2/glext.h>
-
-
-@interface WXCanvasComponent()
-@property (nonatomic, strong) GLKView *glkview;
-@property (nonatomic, strong) NSMutableDictionary *cacheMap;
-@property (nonatomic, strong) NSMutableArray *drawActionList;
-@property (nonatomic, strong) GLKBaseEffect *effect;
-@property (nonatomic, strong) CADisplayLink *displayLink;
-@property (nonatomic, assign) NSInteger fps;
-@property (nonatomic, strong) WXCanvasModule *canvasModule;
-@property (nonatomic, assign) GLKVector4 curFillColor;
-@property (nonatomic, assign) GLKVector4 curStrokeColor;
-@property (nonatomic, assign) GLfloat curLineWidth;
-@property (nonatomic, assign) GLfloat curGlobalAlpha;
-@end
-
-
-@implementation WXCanvasComponent
-
-- (instancetype)initWithRef:(NSString *)ref
-                       type:(NSString *)type
-                     styles:(NSDictionary *)styles
-                 attributes:(NSDictionary *)attributes
-                     events:(NSArray *)events
-               weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _fps = [WXConvert NSInteger:attributes[@"fps"]];
-        if (!_fps) {
-            _fps = 30;
-        }
-    }
-    return self;
-}
-
-
-- (UIView *)loadView
-{
-    _glkview = [[GLKView alloc] init];
-    EAGLContext *context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
-    _glkview.context = context;
-    _glkview.delegate = self;
-    _glkview.enableSetNeedsDisplay = NO;
-    _cacheMap = [NSMutableDictionary new];
-    return _glkview;
-}
-
-- (void) viewDidLoad
-{
-    [super viewDidLoad];
-    _drawActionList = [[NSMutableArray alloc] init];
-    _effect = [[GLKBaseEffect alloc] init];
-    CGSize size = _glkview.frame.size;
-    _effect.transform.projectionMatrix = GLKMatrix4MakeOrtho(0, size.width, 0, size.height, -1024, 1024);
-    _effect.transform.modelviewMatrix = GLKMatrix4Multiply(GLKMatrix4MakeTranslation(0, size.height, 0), GLKMatrix4MakeScale(1, -1, 1));
-    _curStrokeColor = GLKVector4Make(1, 1, 1, 1);
-    _curFillColor = GLKVector4Make(1, 1, 1, 1);
-    _curGlobalAlpha = 1;
-    _curLineWidth = 1;
-}
-
-- (void) viewDidUnload
-{
-    [_displayLink invalidate];
-    _displayLink = nil;
-    [_drawActionList removeAllObjects];
-    _drawActionList = nil;
-    _effect = nil;
-    _canvasModule = nil;
-    [_cacheMap removeAllObjects];
-    _cacheMap = nil;
-    [super viewDidUnload];
-}
-
-- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
-{
-    NSInteger count = [_drawActionList count];
-    for (NSInteger i = 0; i < count; i++) {
-        NSArray *action = (NSArray *)_drawActionList[i];
-        NSInteger paramsCount = [action count];
-        SEL method;
-        if (paramsCount == 1) {
-            method = NSSelectorFromString(action[0]);
-        } else {
-            method = NSSelectorFromString([action[0] stringByAppendingString:@":"]);
-        }
-        if (![self respondsToSelector:method]) {
-            continue;
-        }
-
-        id params = nil;
-        if (paramsCount > 1) {
-            params = action[1];
-        }
-        [self performSelectorOnMainThread:method withObject:params waitUntilDone:YES];
-    }
-
-    [_drawActionList removeAllObjects];
-}
-
-// [
-//      [setFillStyle, ["black"]],
-//      [fillRect, [0, 0, 750, 750]],
-//      [drawImages, [imgURL, [[sx, sy, sw, sh, dx, dy, dw, dh], [sx, sy, sw, sh, dx, dy, dw, dh]]]],
-// ]
-- (void) addDrawActions:(NSArray *)actions canvasModule:(WXCanvasModule*)canvasModule
-{
-    [_drawActionList removeAllObjects];
-    [_drawActionList addObjectsFromArray:actions];
-    _canvasModule = canvasModule;
-    [_glkview display];
-}
-
-
--(GLKTextureInfo *) getTexture:(NSString *)imageURL
-{
-    NSString *key = [NSString stringWithFormat:@"texture~%@", imageURL];
-    if ([_cacheMap objectForKey:key]) {
-        return (GLKTextureInfo *)[_cacheMap objectForKey:key];
-    }
-
-    // Image can cache by weexModule, so use it to get the UIImage
-    UIImage *image = [_canvasModule getImage:imageURL];
-    NSError *error;
-    NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
-                                                        forKey:GLKTextureLoaderApplyPremultiplication];
-    GLKTextureInfo *texture = [GLKTextureLoader textureWithCGImage:image.CGImage options:options error:&error];
-
-    if (texture != nil) {
-        [_cacheMap setObject:texture forKey:key];
-    }
-
-    return texture;
-}
-
--(void) handleDisplayLink
-{
-    [self fireEvent:@"tick" params:nil];
-}
-
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"tick"]) {
-        _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleDisplayLink)];
-        float i = 60.0 / _fps;
-        _displayLink.frameInterval = i;
-        [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
-    }
-}
-
-
-// OpenGL ES methods map
-#define WX_CANVAS_PIXEL(name, index) WXPixelType name = [WXConvert WXPixelType:params[index] scaleFactor:self.weexInstance.pixelScaleFactor];
-#define WX_CANVAS_CGFLOAT(name, index) CGFloat name = [WXConvert CGFloat:params[index]];
-#define WX_CANVAS_PARAMS_CHECK(num) if ([params count] < num) return;
-
-
-// [imageURL, [[sx, sy, sw, sh, dx, dy, dw, dh], [sx, sy, sw, sh, dx, dy, dw, dh, m00, m01, m02, m10, m11, m12, m20, m21, m22]]]
-- (void) drawImages:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(2);
-    GLKTextureInfo *textureInfo = [self getTexture:[WXConvert NSString:params[0]]];
-    CGFloat textureWidth = textureInfo.width;
-    CGFloat textureHeight = textureInfo.height;
-
-    NSArray *drawParams = (NSArray *)params[1];
-    const GLint count = (GLint)[drawParams count] * 4;
-    GLKVector3 geometrys[count];
-    GLKVector3 textures[count];
-
-    const GLint indexLen = (GLint)drawParams.count * 6;
-    GLuint indices[indexLen];
-
-    for (GLint i = 0; i < drawParams.count; i++) {
-        NSArray *curParams = (NSArray *)drawParams[i];
-        if (curParams.count < 8) {
-            continue;
-        }
-
-        CGFloat sx = [WXConvert CGFloat:curParams[0]];
-        CGFloat sy = [WXConvert CGFloat:curParams[1]];
-        CGFloat sw = [WXConvert CGFloat:curParams[2]];
-        CGFloat sh = [WXConvert CGFloat:curParams[3]];
-        CGFloat dx = [WXConvert WXPixelType:curParams[4] scaleFactor:self.weexInstance.pixelScaleFactor];
-        CGFloat dy = [WXConvert WXPixelType:curParams[5] scaleFactor:self.weexInstance.pixelScaleFactor];
-        CGFloat dw = [WXConvert WXPixelType:curParams[6] scaleFactor:self.weexInstance.pixelScaleFactor];
-        CGFloat dh = [WXConvert WXPixelType:curParams[7] scaleFactor:self.weexInstance.pixelScaleFactor];
-
-        geometrys[i * 4] = GLKVector3Make(dx, dh + dy, 1);
-        geometrys[i * 4 + 1] = GLKVector3Make(dw + dx, dh + dy, 1);
-        geometrys[i * 4 + 2] = GLKVector3Make(dx, dy, 1);
-        geometrys[i * 4 + 3] = GLKVector3Make(dw + dx, dy, 1);
-
-        if (curParams.count == 17) {
-            // If the length of curParams is 17, the tail of curParams is the transform matrix of this draw
-            // m00, m01, m02, m10, m11, m12, m20, m21, m22
-            GLKMatrix3 matrix = GLKMatrix3Make(
-                                               [WXConvert CGFloat:curParams[8]],
-                                               [WXConvert CGFloat:curParams[9]],
-                                               [WXConvert CGFloat:curParams[10]],
-                                               [WXConvert CGFloat:curParams[11]],
-                                               [WXConvert CGFloat:curParams[12]],
-                                               [WXConvert CGFloat:curParams[13]],
-                                               [WXConvert CGFloat:curParams[14]],
-                                               [WXConvert CGFloat:curParams[15]],
-                                               [WXConvert CGFloat:curParams[16]]
-            );
-            // Because the params are base on 750, so we should make scale for the transform matrix
-            matrix = GLKMatrix3Scale(matrix, 1, 1, self.weexInstance.pixelScaleFactor);
-            geometrys[i * 4] = GLKMatrix3MultiplyVector3(matrix, geometrys[i * 4]);
-            geometrys[i * 4 + 1] = GLKMatrix3MultiplyVector3(matrix, geometrys[i * 4 + 1]);
-            geometrys[i * 4 + 2] = GLKMatrix3MultiplyVector3(matrix, geometrys[i * 4 + 2]);
-            geometrys[i * 4 + 3] = GLKMatrix3MultiplyVector3(matrix, geometrys[i * 4 + 3]);
-        }
-
-        textures[i * 4] = GLKVector3Make(sx / textureWidth, (sy + sh) / textureHeight, 1);
-        textures[i * 4 + 1] = GLKVector3Make((sx + sw) / textureWidth, (sy + sh) / textureHeight, 1);
-        textures[i * 4 + 2] = GLKVector3Make(sx / textureWidth, sy / textureHeight, 1);
-        textures[i * 4 + 3] = GLKVector3Make((sx + sw) / textureWidth, sy / textureHeight, 1);
-
-        // two triangles 0,1,2 and 1,2,3 make a rectangle
-        indices[i * 6] = i * 4;
-        indices[i * 6 + 1] = i * 4 + 1;
-        indices[i * 6 + 2] = i * 4 + 2;
-        indices[i * 6 + 3] = i * 4 + 1;
-        indices[i * 6 + 4] = i * 4 + 2;
-        indices[i * 6 + 5] = i * 4 + 3;
-    }
-
-    glEnable(GL_BLEND);
-    if (_curGlobalAlpha != 1) {
-        glBlendColor(1, 1, 1, _curGlobalAlpha);
-        glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE);
-    } else {
-        glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
-    }
-
-    _effect.useConstantColor = GL_FALSE;
-    _effect.texture2d0.enabled = YES;
-    _effect.texture2d0.name = textureInfo.name;
-    [_effect prepareToDraw];
-
-    glEnableVertexAttribArray(GLKVertexAttribPosition);
-    glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
-
-    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, &geometrys);
-    glVertexAttribPointer(GLKVertexAttribTexCoord0, 3, GL_FLOAT, GL_FALSE, 0, &textures);
-
-    glDrawElements(GL_TRIANGLES, indexLen, GL_UNSIGNED_INT, indices);
-}
-
-- (void) setGlobalAlpha:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(1);
-    _curGlobalAlpha = [WXConvert CGFloat:params[0]];
-}
-
-
-// use rgba(0, 0, 0, 0) to fill the rect
-- (void) clearRect:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(4);
-    WX_CANVAS_PIXEL(x, 0)
-    WX_CANVAS_PIXEL(y, 1)
-    WX_CANVAS_PIXEL(w, 2)
-    WX_CANVAS_PIXEL(h, 3)
-
-    _effect.useConstantColor = GL_TRUE;
-    _effect.constantColor = GLKVector4Make(0, 0, 0, 0);
-    _effect.texture2d0.enabled = NO;
-    [_effect prepareToDraw];
-    glBlendFunc(GL_ONE, GL_ZERO);
-
-    glEnableVertexAttribArray(GLKVertexAttribPosition);
-
-    GLfloat points[] = {
-        x, y,
-        x, y + h,
-        x + w, y,
-        x + w, y + h
-    };
-
-    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, &points);
-    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-}
-
-- (void) setStrokeStyle:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(1);
-    UIColor *color = [WXConvert UIColor:params[0]];
-    CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0;
-    [color getRed:&red green:&green blue:&blue alpha:&alpha];
-    _curStrokeColor = GLKVector4Make(red, green, blue, alpha);
-}
-
-- (void) setLineWidth:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(1);
-    _curLineWidth = [WXConvert WXPixelType:params[0] scaleFactor:self.weexInstance.pixelScaleFactor];
-}
-
-// ["M", 0, 0, "L", 100, 100, "L", 0, 100, "L", 0, 0] it made a triangle
-- (void) strokeLines:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(1);
-    const NSInteger pointsCount = floor([params count] / 3);
-    GLKVector2 points[pointsCount];
-    GLint indices[pointsCount * 2];
-    GLint pointIndex = 0;
-    GLint lineIndex = 0;
-    BOOL isLastMove = YES;
-
-    for (GLint i = 0; i < params.count; i += 3) {
-        NSString *type = [WXConvert NSString:params[i]];
-        points[pointIndex] = GLKVector2Make([WXConvert WXPixelType:params[i + 1] scaleFactor:self.weexInstance.pixelScaleFactor], [WXConvert WXPixelType:params[i + 2] scaleFactor:self.weexInstance.pixelScaleFactor]);
-
-        if ([type isEqualToString:@"L"]) {
-            if (isLastMove) {
-                indices[lineIndex++] = pointIndex;
-                if (lineIndex > 1) {
-                    isLastMove = NO;
-                }
-            } else {
-                indices[lineIndex] = indices[lineIndex - 1];
-                lineIndex += 1;
-                indices[lineIndex++] = pointIndex;
-            }
-        } else if (isLastMove && lineIndex > 0) {
-            isLastMove = YES;
-            indices[lineIndex - 1] = pointIndex;
-        } else {
-            isLastMove = YES;
-            indices[lineIndex++] = pointIndex;
-        }
-
-        pointIndex += 1;
-    }
-
-    _effect.useConstantColor = GL_TRUE;
-    _effect.constantColor = _curStrokeColor;
-    _effect.texture2d0.enabled = NO;
-    [_effect prepareToDraw];
-    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
-    glEnableVertexAttribArray(GLKVertexAttribPosition);
-
-    glLineWidth(_curLineWidth);
-
-    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, &points);
-    glDrawElements(GL_LINES, lineIndex, GL_UNSIGNED_INT, indices);
-}
-
-- (void) strokeRect:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(4);
-    WX_CANVAS_PIXEL(x, 0)
-    WX_CANVAS_PIXEL(y, 1)
-    WX_CANVAS_PIXEL(w, 2)
-    WX_CANVAS_PIXEL(h, 3)
-
-    _effect.useConstantColor = GL_TRUE;
-    _effect.constantColor = _curStrokeColor;
-    _effect.texture2d0.enabled = NO;
-    [_effect prepareToDraw];
-    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
-    glEnableVertexAttribArray(GLKVertexAttribPosition);
-
-    GLfloat points[] = {
-        x, y,
-        x, y + h,
-        x + w, y + h,
-        x + w, y,
-        x, y
-    };
-    glLineWidth(_curLineWidth);
-
-    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, &points);
-    glDrawArrays(GL_LINE_STRIP, 0, 5);
-}
-
-// only support color, such as red, rgb(100, 100, 100), rgba(0, 0, 0, 1), #cccccc
--(void) setFillStyle:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(1);
-    UIColor *color = [WXConvert UIColor:params[0]];
-    CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0;
-    [color getRed:&red green:&green blue:&blue alpha:&alpha];
-    _curFillColor = GLKVector4Make(red, green, blue, alpha);
-}
-
-- (void) fillRect:(NSArray *)params
-{
-    WX_CANVAS_PARAMS_CHECK(4);
-    WX_CANVAS_PIXEL(x, 0)
-    WX_CANVAS_PIXEL(y, 1)
-    WX_CANVAS_PIXEL(w, 2)
-    WX_CANVAS_PIXEL(h, 3)
-
-    _effect.useConstantColor = GL_TRUE;
-    _effect.constantColor = _curFillColor;
-    _effect.texture2d0.enabled = NO;
-    [_effect prepareToDraw];
-    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
-    glEnableVertexAttribArray(GLKVertexAttribPosition);
-
-    GLfloat points[] = {
-        x, y,
-        x, y + h,
-        x + w, y,
-        x + w, y + h
-    };
-
-    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, &points);
-    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h
deleted file mode 100644
index 923af9d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-#import "WXDiffUtil.h"
-@class WXCellComponent;
-
-@protocol WXCellRenderDelegate <NSObject>
-
-- (float)containerWidthForLayout:(WXCellComponent *)cell;
-
-- (void)cellDidLayout:(WXCellComponent *)cell;
-
-- (void)cellDidRendered:(WXCellComponent *)cell;
-
-- (void)cellDidRemove:(WXCellComponent *)cell;
-
-- (void)cell:(WXCellComponent *)cell didMoveToIndex:(NSUInteger)index;
-
-@end
-
-@interface WXCellComponent : WXComponent <WXDiffable>
-
-@property (nonatomic, strong) NSString *scope;
-@property (nonatomic, assign) BOOL isRecycle;
-@property (nonatomic, assign) BOOL isLayoutComplete;
-@property (nonatomic, assign) UITableViewRowAnimation insertAnimation;
-@property (nonatomic, assign) UITableViewRowAnimation deleteAnimation;
-@property (nonatomic, assign) BOOL keepScrollPosition;
-@property (nonatomic, weak) id<WXCellRenderDelegate> delegate;
-@property (nonatomic, strong) NSString *zIndex;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.mm
deleted file mode 100644
index 1a3b294..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.mm
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSDKInstance.h"
-#import "WXLog.h"
-#import "WXCellComponent.h"
-#import "WXListComponent.h"
-#import "WXComponent_internal.h"
-#import "WXDiffUtil.h"
-#import "WXComponent+Layout.h"
-#import "WXAssert.h"
-
-@interface WXCellComponent ()
-
-@end
-
-@implementation WXCellComponent
-{
-    NSIndexPath *_indexPathBeforeMove;
-    BOOL _isUseContainerWidth;
-}
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-#ifdef DEBUG
-    WXLogDebug(@"flexLayout -> init Cell: ref:%@, styles:%@",ref,styles);
-#endif
-    
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    
-    if (self) {
-        _async = attributes[@"async"] ? [WXConvert BOOL:attributes[@"async"]] : YES;
-        _isRecycle = attributes[@"recycle"] ? [WXConvert BOOL:attributes[@"recycle"]] : YES;
-        _insertAnimation = [WXConvert UITableViewRowAnimation:attributes[@"insertAnimation"]];
-        _deleteAnimation = [WXConvert UITableViewRowAnimation:attributes[@"deleteAnimation"]];
-        _keepScrollPosition = attributes[@"keepScrollPosition"] ? [WXConvert BOOL:attributes[@"keepScrollPosition"]] : NO;
-        _lazyCreateView = YES;
-        if (attributes[@"zIndex"]) {
-            _zIndex = [WXConvert NSString:attributes[@"zIndex"]];
-        }
-        if (!_isRecycle) {
-            [weexInstance.apmInstance updateDiffStats:KEY_PAGE_STATS_CELL_UN_RE_USE_NUM withDiffValue:1];
-            //for protocol
-            //in iOS impl,cellReuse equal cellDataRecycle
-            //in Android, cellReuse is not equal cellDataRecycle
-            [weexInstance.apmInstance updateDiffStats:KEY_PAGE_STATS_CELL_DATA_UN_RECYCLE_NUM withDiffValue:1];
-        }
-    }
-    
-    return self;
-}
-
-- (BOOL)weex_isEqualTo:(id<WXDiffable>)object
-{
-    return self == object;
-}
-
-- (void)_frameDidCalculated:(BOOL)isChanged
-{
-    [super _frameDidCalculated:isChanged];
-    
-    if (isChanged) {
-        [self.delegate cellDidLayout:self];
-    }
-}
-
-- (void)didFinishDrawingLayer:(BOOL)success
-{
-    [self.delegate cellDidRendered:self];
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"async"]) {
-        _async = [WXConvert BOOL:attributes[@"async"]];
-    }
-    
-    if (attributes[@"recycle"]) {
-        _isRecycle = [WXConvert BOOL:attributes[@"recycle"]];
-    }
-    
-    if (attributes[@"insertAnimation"]) {
-        _insertAnimation = [WXConvert UITableViewRowAnimation:attributes[@"insertAnimation"]];
-    }
-    
-    if (attributes[@"deleteAnimation"]) {
-        _deleteAnimation = [WXConvert UITableViewRowAnimation:attributes[@"deleteAnimation"]];
-    }
-    
-    if (attributes[@"keepScrollPosition"]) {
-        _keepScrollPosition = [WXConvert BOOL:attributes[@"keepScrollPosition"]];
-    }
-}
-
-- (void)_moveToSupercomponent:(WXComponent *)newSupercomponent atIndex:(NSUInteger)index
-{
-    if (self.delegate == (id<WXCellRenderDelegate>)newSupercomponent) {
-        [self.delegate cell:self didMoveToIndex:index];
-        [super _removeFromSupercomponent:NO]; // no remove underlayer render object
-        [newSupercomponent _insertSubcomponent:self atIndex:index];
-    } else {
-        [super _moveToSupercomponent:newSupercomponent atIndex:index];
-    }
-}
-
-- (void)_removeFromSupercomponent
-{
-    [super _removeFromSupercomponent];
-    
-    [self.delegate cellDidRemove:self];
-}
-
-- (void)removeFromSuperview
-{
-    // do nothing
-}
-
-- (BOOL)_isCalculatedFrameChanged:(CGRect)frame
-{
-    /*
-     For list(aka UITableView), we cannot ignore left value generated by layout engine.
-     For water-fall(aka UICollectionView), we must ignore left value generated by layout engine.
-     */
-    
-    if ([self.supercomponent _isAffineTypeAs:@"waterfall"]) {
-        return !CGSizeEqualToSize(frame.size, _calculatedFrame.size);
-    }
-    else {
-        return (!CGSizeEqualToSize(frame.size, _calculatedFrame.size)) || (frame.origin.x != _calculatedFrame.origin.x);
-    }
-}
-
-- (void)_assignCalculatedFrame:(CGRect)frame
-{
-    if ([self.supercomponent _isAffineTypeAs:@"waterfall"]) {
-        frame.origin = CGPointZero;
-    }
-    else {
-        frame.origin.y = 0.0f; // only ignore y
-    }
-    WXAssert(!isnan(frame.size.height), @"Height of cell should not be NAN.");
-    if (isnan(frame.size.height) || frame.size.height < 0.0f) {
-        frame.size.height = 0.0f;
-    }
-    _calculatedFrame = frame;
-}
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
deleted file mode 100644
index 480e774..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXScrollerProtocol.h"
-#import "WXComponent.h"
-#import "WXConvert.h"
-#import "WXTransform.h"
-#import "WXTransition.h"
-
-#ifdef __cplusplus
-#import "WXJSASTParser.h"
-#include <vector>
-#endif // __cplusplus
-
-@class WXTouchGestureRecognizer;
-@class WXThreadSafeCounter;
-
-typedef id (^WXDataBindingBlock)(NSDictionary *data, BOOL *needUpdate);
-
-/**
- * The following variables and methods are used in Weex INTERNAL logic.
- * @warning These variables and methods must never be called or overridden.
- */
-@interface WXComponent ()
-{
-@package
-    NSString *_type;
-    NSMutableArray *_subcomponents;
-    
-    //Transition
-    WXTransition *_transition;
-    
-    /**
-     *  View
-     */
-    UIColor *_backgroundColor;
-    NSString *_backgroundImage;
-    NSString *_clipRadius;
-    WXClipType _clipToBounds;
-    UIView *_view;
-    CGFloat _opacity;
-    WXVisibility  _visibility;
-    WXBoxShadow *_originalBoxShadow;
-    WXBoxShadow *_lastBoxShadow;
-    WXBoxShadow *_boxShadow;
-    
-    /**
-     * accessibility support
-     */
-    NSString * _roles; //accessibility
-    NSString * _ariaLabel; //accessibilityLabel
-    NSString * _ariaHidden; // accessibilityElementsHidden
-    NSString * _accessible; // accessible
-    NSString * _accessibilityHintContent; // hint for the action
-    NSString * _groupAccessibilityChildren; // voice-over navigation order
-    NSString * _testId;// just for auto-test
-    
-    BOOL _accessibilityMagicTapEvent;
-    
-    /**
-     *  PseudoClass
-     */
-    NSMutableDictionary *_pseudoClassStyles;
-    NSMutableDictionary *_updatedPseudoClassStyles;
-    BOOL _isListenPseudoTouch;
-    
-    /**
-     *  Events
-     */
-    BOOL _appearEvent;
-    BOOL _disappearEvent;
-    UITapGestureRecognizer *_tapGesture;
-    NSMutableArray *_swipeGestures;
-    UILongPressGestureRecognizer *_longPressGesture;
-    UIPanGestureRecognizer *_panGesture;
-    
-    BOOL _cancelsTouchesInView;
-    
-    BOOL _listenPanStart;
-    BOOL _listenPanMove;
-    BOOL _listenPanEnd;
-    
-    BOOL _listenHorizontalPan;
-    BOOL _listenVerticalPan;
-    
-    BOOL _listenStopPropagation;
-    BOOL _customEvent;
-    NSString *_stopPropagationName;
-    WXTouchGestureRecognizer* _touchGesture;
-    
-    /**
-     *  Display
-     */
-    CALayer *_layer;
-    BOOL _useCompositing;
-    BOOL _isCompositingChild;
-    WXThreadSafeCounter *_displayCounter;
-    
-    UIColor *_borderTopColor;
-    UIColor *_borderRightColor;
-    UIColor *_borderLeftColor;
-    UIColor *_borderBottomColor;
-    
-    CGFloat _borderTopWidth;
-    CGFloat _borderRightWidth;
-    CGFloat _borderLeftWidth;
-    CGFloat _borderBottomWidth;
-    
-    CGFloat _borderTopLeftRadius;
-    CGFloat _borderTopRightRadius;
-    CGFloat _borderBottomLeftRadius;
-    CGFloat _borderBottomRightRadius;
-    
-    WXBorderStyle _borderTopStyle;
-    WXBorderStyle _borderRightStyle;
-    WXBorderStyle _borderBottomStyle;
-    WXBorderStyle _borderLeftStyle;
-    
-    NSInteger _lastBorderRecords; // Records last border drawing
-    
-    BOOL _isViewTreeIgnored; // Component is added to super, but it is not added to views.
-    BOOL _isFixed;
-    BOOL _async;
-    BOOL _lazyCreateView;
-    
-    WXTransform *_transform;
-    
-    /**
-     * Data Binding
-     */
-    BOOL _isTemplate;
-    WXComponent *_templateComponent;
-    WXDataBindingBlock _bindingMatch;
-    WXDataBindingBlock _bindingRepeat;
-    NSString *_repeatIndexIdentify;
-    NSString *_repeatLabelIdentify;
-    NSString *_virtualComponentId;// for recycleList subcomponent
-    NSMutableDictionary *_virtualElementInfo;
-
-    BOOL _isRepeating;
-    BOOL _isSkipUpdate;
-    BOOL _dataBindOnce;
-    
-    NSMutableDictionary<NSString *, WXDataBindingBlock> *_bindingProps;
-    NSMutableDictionary<NSString *, WXDataBindingBlock> *_bindingAttributes;
-    NSMutableDictionary<NSString *, WXDataBindingBlock> *_bindingStyles;
-    NSMutableDictionary<NSString *, WXDataBindingBlock> *_bindingEvents;
-#ifdef __cplusplus
-    std::vector<WXJSExpression *> *_bindingExpressions;
-#endif // __cplusplus
-    
-    NSMutableDictionary<NSString *, NSArray *> *_eventParameters;
-}
-
-/* _transform may be modified in mutiple threads. DO NOT use "_transform = XXX" directly.
- Ivar access in ObjC is compiled to code with additional release or retain. So use Ivar in mutiple
- thread may lead to crash. Use an ATOMIC property is well enough. */
-@property (atomic, strong) WXTransform *transform;
-
-///--------------------------------------
-/// @name Package Internal Methods
-///--------------------------------------
-
-- (void)_layoutDidFinish;
-
-- (void)_layoutPlatform;
-
-- (void)_willDisplayLayer:(CALayer *)layer;
-
-- (void)_unloadViewWithReusing:(BOOL)isReusing;
-
-- (id<WXScrollerProtocol>)ancestorScroller;
-
-// return if the component is actually inserted
-- (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index;
-
-- (void)_removeFromSupercomponent;
-- (void)_removeFromSupercomponent:(BOOL)remove;
-- (void)_moveToSupercomponent:(WXComponent *)newSupercomponent atIndex:(NSUInteger)index;
-
-- (BOOL)_isTransitionNone;
-- (BOOL)_hasTransitionPropertyInStyles:(NSDictionary *)styles;
-- (void)_updateStylesOnComponentThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles isUpdateStyles:(BOOL)isUpdateStyles;
-- (void)_updateAttributesOnComponentThread:(NSDictionary *)attributes;
-- (void)_updateStylesOnMainThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles;
-- (void)_updateAttributesOnMainThread:(NSDictionary *)attributes;
-
-- (void)_addEventOnComponentThread:(NSString *)eventName;
-- (void)_removeEventOnComponentThread:(NSString *)eventName;
-- (void)_addEventOnMainThread:(NSString *)eventName;
-- (void)_removeEventOnMainThread:(NSString *)eventName;
-
-- (void)_collectSubcomponents:(NSMutableArray *)components;
-
-///--------------------------------------
-/// @name Protected Methods
-///--------------------------------------
-
-- (BOOL)_needsDrawBorder;
-
-- (void)_drawBorderWithContext:(CGContextRef)context size:(CGSize)size;
-
-- (void)_frameDidCalculated:(BOOL)isChanged;
-
-///--------------------------------------
-/// @name Private Methods
-///--------------------------------------
-
-- (void)_setRenderObject:(void *)object;
-
-- (BOOL)_isCalculatedFrameChanged:(CGRect)frame;
-
-- (CGFloat)_getInnerContentMainSize;
-
-- (void)_assignInnerContentMainSize:(CGFloat)value;
-
-- (void)_assignCalculatedFrame:(CGRect)frame;
-
-- (void)_modifyStyles:(NSDictionary *)styles;
-
-- (void)_transitionUpdateViewProperty:(NSDictionary *)styles;
-
-- (void)_updateCSSNodeStyles:(NSDictionary *)styles;
-
-- (void)_resetCSSNodeStyles:(NSArray *)styles;
-
-- (void)_handleBorders:(NSDictionary *)styles isUpdating:(BOOL)updating;
-
-- (void)_initViewPropertyWithStyles:(NSDictionary *)styles;
-
-- (void)_updateViewStyles:(NSDictionary *)styles;
-
-- (void)_resetStyles:(NSArray *)styles;
-
-- (void)_initEvents:(NSArray *)events;
-
-- (void)_initPseudoEvents:(BOOL)isListenPseudoTouch;
-
-- (void)_removeAllEvents;
-
-- (void)_addEventParams:(NSDictionary *)params;
-
-- (NSArray *)_paramsForEvent:(NSString *)eventName;
-
-- (void)_setupNavBarWithStyles:(NSMutableDictionary *)styles attributes:(NSMutableDictionary *)attributes;
-
-- (void)_initCompositingAttribute:(NSDictionary *)attributes;
-
-- (BOOL)_bitmapOpaqueWithSize:(CGSize)size;
-
-- (void)_updateNavBarAttributes:(NSDictionary *)attributes;
-
-- (void)_handleFirstScreenTime;
-
-- (void)_resetNativeBorderRadius;
-
-- (void)_updatePseudoClassStyles:(NSString *)key;
-
-- (void)_restoreViewStyles;
-
-- (void)_configWXComponentA11yWithAttributes:(NSDictionary *)attributes;
-
-- (void)setGradientLayer;
-
-- (void)_storeBindingsWithProps:(NSDictionary *)props styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSDictionary *)events;
-
-- (void)_didInserted;
-
-- (void)attachSlotEvent:(NSDictionary *)data;
-
-- (void)detachSlotEvent:(NSDictionary *)data;
-
-- (void)_buildViewHierarchyLazily;
-
-- (void)_setIsLayoutRTL:(BOOL)isRTL;
-
-- (void)_adjustForRTL;
-
-- (BOOL)_isAffineTypeAs:(NSString *)type;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.h
deleted file mode 100644
index 55fd95e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXComponent.h"
-
-@class WXIndicatorView;
-
-@interface WXCycleSliderComponent : WXComponent
-
-- (void)setIndicatorView:(WXIndicatorView *)indicatorView;
-
-@end
-@interface WXRecycleSliderScrollView: UIScrollView
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm
deleted file mode 100644
index 94fec81..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm
+++ /dev/null
@@ -1,752 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXCycleSliderComponent.h"
-#import "WXIndicatorComponent.h"
-#import "WXComponent_internal.h"
-#import "NSTimer+Weex.h"
-#import "WXSDKManager.h"
-#import "WXUtility.h"
-#import "WXComponent+Layout.h"
-#import "WXComponent+Events.h"
-
-typedef NS_ENUM(NSInteger, Direction) {
-    DirectionNone = 1 << 0,
-    DirectionLeft = 1 << 1,
-    DirectionRight = 1 << 2
-};
-
-@class WXRecycleSliderView;
-@class WXIndicatorView;
-
-@protocol WXRecycleSliderViewDelegate <UIScrollViewDelegate>
-
-- (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScroll:(UIScrollView *)scrollView;
-- (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScrollToItemAtIndex:(NSInteger)index;
-- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
-- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
-- (BOOL)requestGestureShouldStopPropagation:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
-
-@end
-
-
-@interface WXRecycleSliderView : UIView <UIScrollViewDelegate>
-
-@property (nonatomic, strong) WXIndicatorView *indicator;
-@property (nonatomic, weak) id<WXRecycleSliderViewDelegate> delegate;
-@property (nonatomic, strong) WXRecycleSliderScrollView *scrollView;
-@property (nonatomic, strong) NSMutableArray *itemViews;
-@property (nonatomic, assign) Direction direction;
-@property (nonatomic, assign) NSInteger currentIndex;
-@property (nonatomic, assign) NSInteger nextIndex;
-@property (nonatomic, assign) CGRect currentItemFrame;
-@property (nonatomic, assign) CGRect nextItemFrame;
-@property (nonatomic, assign) BOOL infinite;
-@property (nonatomic, assign) BOOL forbidSlideAnimation;
-
-- (void)insertItemView:(UIView *)view atIndex:(NSInteger)index;
-- (void)removeItemView:(UIView *)view;
-
-@end
-
-@implementation WXRecycleSliderView
-
-- (id)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        _currentIndex = 0;
-        _itemViews = [[NSMutableArray alloc] init];
-        _scrollView = [[WXRecycleSliderScrollView alloc] init];
-        if (@available(iOS 11.0, *)) {
-            _scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
-        }
-        _scrollView.backgroundColor = [UIColor clearColor];
-        _scrollView.delegate = self;
-        _scrollView.showsHorizontalScrollIndicator = NO;
-        _scrollView.showsVerticalScrollIndicator = NO;
-        _scrollView.scrollsToTop = NO;
-        [self addSubview:_scrollView];
-    }
-    return self;
-}
-
-- (void)dealloc
-{
-    if (_scrollView) {
-        _scrollView.delegate = nil;
-    }
-}
-
-- (void)layoutSubviews
-{
-    [super layoutSubviews];
-    [self resetAllViewsFrame];
-}
-
-- (void)accessibilityDecrement
-{
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-    [self.wx_component performSelector:NSSelectorFromString(@"resumeAutoPlay:") withObject:@(false)];
-#pragma clang diagnostic pop
-    
-    [self nextPage];
-}
-
-- (void)accessibilityIncrement
-{
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-    [self.wx_component performSelector:NSSelectorFromString(@"resumeAutoPlay:") withObject:@(false)];
-#pragma clang diagnostic pop
-    
-    [self lastPage];
-}
-
-- (void)accessibilityElementDidLoseFocus
-{
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-    [self.wx_component performSelector:NSSelectorFromString(@"resumeAutoPlay:") withObject:@(true)];
-#pragma clang diagnostic pop
-}
-
-#pragma mark Private Methods
-- (CGFloat)height {
-    return self.frame.size.height;
-}
-
-- (CGFloat)width {
-    return self.frame.size.width;
-}
-
-- (UIView *)getItemAtIndex:(NSInteger)index
-{
-    if (self.itemViews.count > index) {
-        return [self.itemViews objectAtIndex:index];
-    }else{
-        return nil;
-    }
-}
-
-- (void)setCurrentIndex:(NSInteger)currentIndex
-{
-    if (currentIndex >= _itemViews.count || currentIndex < 0) {
-        currentIndex = 0;
-    }
-    NSInteger oldIndex = _currentIndex;
-    _currentIndex = currentIndex;
-    if (_infinite) {
-        if (_direction == DirectionRight) {
-            self.nextItemFrame = CGRectMake(0, 0, self.width, self.height);
-            self.nextIndex = self.currentIndex - 1;
-            if (self.nextIndex < 0)
-            {
-                self.nextIndex = _itemViews.count - 1;
-            }
-        }else if (_direction == DirectionLeft) {
-            self.nextItemFrame = CGRectMake(self.width * 2, 0, self.width, self.height);
-            self.nextIndex = _itemViews.count?(self.currentIndex + 1) % _itemViews.count:0;
-        }else {
-            self.nextIndex = _itemViews.count?(self.currentIndex + 1) % _itemViews.count:0;
-        }
-        [self resetAllViewsFrame];
-    } else {
-        [_scrollView setContentOffset:CGPointMake(_currentIndex * self.width, 0) animated:!_forbidSlideAnimation];
-    }
-    [self resetIndicatorPoint];
-    if (self.delegate && [self.delegate respondsToSelector:@selector(recycleSliderView:didScrollToItemAtIndex:)]) {
-        if (oldIndex != _currentIndex) {
-            [self.delegate recycleSliderView:self didScrollToItemAtIndex:_currentIndex];
-        }
-    }
-}
-
-- (void)resetIndicatorPoint
-{
-    [self.indicator setPointCount:self.itemViews.count];
-    [self.indicator setCurrentPoint:_currentIndex];
-}
-
-#pragma mark  Scroll & Frames
-- (void)setDirection:(Direction)direction {
-    if (_direction == direction) return;
-    _direction = direction;
-    if (_direction == DirectionNone) return;
-    if (_direction == DirectionRight) {
-        self.nextItemFrame = CGRectMake(0, 0, self.width, self.height);
-        self.nextIndex = self.currentIndex - 1;
-        if (self.nextIndex < 0)
-        {
-            self.nextIndex = _itemViews.count - 1;
-        }
-        UIView *view = [self getItemAtIndex:_nextIndex];
-        if (view) {
-            view.frame = _nextItemFrame;
-        }
-    }else if (_direction == DirectionLeft){
-        self.nextItemFrame = CGRectMake(self.width * 2, 0, self.width, self.height);
-        self.nextIndex = _itemViews.count?(self.currentIndex + 1) % _itemViews.count:0;
-        UIView *view = [self getItemAtIndex:_nextIndex];
-        if (view) {
-            view.frame = _nextItemFrame;
-        }
-    }
-}
-
-- (void)resetAllViewsFrame
-{
-    if (_infinite && _itemViews.count > 1) {
-        self.scrollView.frame = CGRectMake(0, 0, self.width, self.height);
-        self.scrollView.contentOffset = CGPointMake(self.width, 0);
-        if (self.itemViews.count > 1) {
-            self.scrollView.contentSize = CGSizeMake(self.width * 3, 0);
-        } else {
-            self.scrollView.contentSize = CGSizeZero;
-        }
-        _currentItemFrame = CGRectMake(self.width, 0, self.width, self.height);
-        for (int i = 0; i < self.itemViews.count; i++) {
-            UIView *view = [self.itemViews objectAtIndex:i];
-            if (i != self.currentIndex) {
-                view.frame = CGRectMake(self.frame.size.width * 3, 0, self.width, self.height);;
-            }
-        }
-        [self getItemAtIndex:_currentIndex].frame = _currentItemFrame;
-        if (_itemViews.count == 2) {
-            _nextItemFrame = CGRectMake(self.width * 2, 0, self.width, self.height);
-            [self getItemAtIndex:_nextIndex].frame = _nextItemFrame;
-        }
-    } else {
-        self.scrollView.frame = self.bounds;
-        self.scrollView.contentSize = CGSizeMake(self.width * _itemViews.count, self.height);
-        self.scrollView.contentOffset = CGPointMake(_currentIndex * self.width, 0);
-        for (int i = 0; i < _itemViews.count; i ++) {
-            UIView *view = [_itemViews objectAtIndex:i];
-            view.frame = CGRectMake(i * self.width, 0, self.width, self.height);
-        }
-        [self.scrollView setContentOffset:CGPointMake(_currentIndex * self.width, 0) animated:NO];
-    }
-    [self resetIndicatorPoint];
-}
-
-- (void)nextPage {
-    if (_itemViews.count > 1) {
-        if (_infinite) {
-            [self.scrollView setContentOffset:CGPointMake(self.width * 2, 0) animated:!_forbidSlideAnimation];
-        } else {
-            // the currentindex will be set at the end of animation
-            NSInteger nextIndex = self.currentIndex + 1;
-            if(nextIndex < _itemViews.count) {
-                [self.scrollView setContentOffset:CGPointMake(nextIndex * self.width, 0) animated:!_forbidSlideAnimation];
-            }
-        }
-    }
-}
-
-- (void)lastPage
-{
-    NSInteger lastIndex = [self currentIndex]-1;
-    if (_itemViews.count > 1) {
-        if (_infinite) {
-            if (lastIndex < 0) {
-                lastIndex = [_itemViews count]-1;
-            }
-        }
-        [self setCurrentIndex:lastIndex];
-    }
-}
-
-- (void)resetScrollView
-{
-    if (WXFloatEqual(self.scrollView.contentOffset.x / self.width , 1.0))
-    {
-        return;
-    }
-    [self setCurrentIndex:self.nextIndex];
-    self.scrollView.contentOffset = CGPointMake(self.width, 0);
-}
-
-#pragma mark Public Methods
-
-- (void)setIndicator:(WXIndicatorView *)indicator
-{
-    _indicator = indicator;
-    [_indicator setPointCount:self.itemViews.count];
-    [_indicator setCurrentPoint:_currentIndex];
-}
-
-- (void)insertItemView:(UIView *)view atIndex:(NSInteger)index
-{
-    if (![self.itemViews containsObject:view]) {
-        view.tag = self.itemViews.count;
-        if (index < 0) {
-            [self.itemViews addObject:view];
-        } else {
-            [self.itemViews insertObject:view atIndex:index];
-        }
-    }
-    
-    if (![self.scrollView.subviews containsObject:view]) {
-        if (index < 0) {
-            [self.scrollView addSubview:view];
-        } else {
-            [self.scrollView insertSubview:view atIndex:index];
-        }
-    }
-    [self layoutSubviews];
-    [self setCurrentIndex:_currentIndex];
-}
-
-- (void)removeItemView:(UIView *)view
-{
-    if ([self.itemViews containsObject:view]) {
-        [self.itemViews removeObject:view];
-    }
-    
-    if ([self.scrollView.subviews containsObject:view]) {
-        [view removeFromSuperview];
-    }
-    [self layoutSubviews];
-    [self setCurrentIndex:_currentIndex];
-}
-
-#pragma mark ScrollView Delegate
-
-- (void)scrollViewDidScroll:(UIScrollView *)scrollView
-{
-    if (_infinite) {
-        CGFloat offX = scrollView.contentOffset.x;
-        self.direction = offX > self.width ? DirectionLeft : offX < self.width ? DirectionRight : DirectionNone;
-    }
-    if (self.delegate && [self.delegate respondsToSelector:@selector(recycleSliderView:didScroll:)]) {
-        [self.delegate recycleSliderView:self didScroll:self.scrollView];
-    }
-}
-
-- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
-{
-    if (self.delegate && [self.delegate respondsToSelector:@selector(scrollViewWillBeginDragging:)]) {
-        [self.delegate scrollViewWillBeginDragging:self.scrollView];
-    }
-}
-
-- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
-{
-    if (self.delegate && [self.delegate respondsToSelector:@selector(scrollViewDidEndDragging: willDecelerate:)]) {
-        [self.delegate scrollViewDidEndDragging:self.scrollView willDecelerate:decelerate];
-    }
-}
-
-- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
-    if (_infinite) {
-        [self resetScrollView];
-    } else {
-        NSInteger index = _scrollView.contentOffset.x / self.width;
-        [self setCurrentIndex:index];
-    }
-}
-
-- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
-    if (_infinite) {
-        [self resetScrollView];
-    } else {
-        NSInteger index = _scrollView.contentOffset.x / self.width;
-        [self setCurrentIndex:index];
-    }
-}
-
-@end
-
-@interface WXCycleSliderComponent () <WXRecycleSliderViewDelegate,WXIndicatorComponentDelegate>
-
-@property (nonatomic, weak) WXRecycleSliderView *recycleSliderView;
-@property (nonatomic, strong) NSTimer *autoTimer;
-@property (nonatomic, assign) NSInteger currentIndex;
-@property (nonatomic, assign) BOOL  autoPlay;
-@property (nonatomic, assign) NSUInteger interval;
-@property (nonatomic, assign) NSInteger index;
-@property (nonatomic, assign) CGFloat lastOffsetXRatio;
-@property (nonatomic, assign) CGFloat offsetXAccuracy;
-@property (nonatomic, assign) BOOL  sliderChangeEvent;
-@property (nonatomic, assign) BOOL  sliderScrollEvent;
-@property (nonatomic, assign) BOOL  sliderScrollStartEvent;
-@property (nonatomic, assign) BOOL  sliderScrollEndEvent;
-@property (nonatomic, assign) BOOL  sliderStartEventFired;
-@property (nonatomic, strong) NSMutableArray *childrenView;
-@property (nonatomic, assign) BOOL scrollable;
-@property (nonatomic, assign) BOOL infinite;
-@property (nonatomic, assign) BOOL forbidSlideAnimation;
-
-@end
-
-@implementation WXCycleSliderComponent
-
-- (void) dealloc
-{
-    [self _stopAutoPlayTimer];
-}
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _sliderChangeEvent = NO;
-        _sliderScrollEvent = NO;
-        _interval = 3000;
-        _childrenView = [NSMutableArray new];
-        _lastOffsetXRatio = 0;
-        
-        if (attributes[@"autoPlay"]) {
-            _autoPlay = [WXConvert BOOL:attributes[@"autoPlay"]];
-        }
-        
-        if (attributes[@"interval"]) {
-            _interval = [WXConvert NSInteger:attributes[@"interval"]];
-        }
-        
-        if (attributes[@"index"]) {
-            _index = [WXConvert NSInteger:attributes[@"index"]];
-        }
-        _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
-        if (attributes[@"offsetXAccuracy"]) {
-            _offsetXAccuracy = [WXConvert CGFloat:attributes[@"offsetXAccuracy"]];
-        }
-        _infinite = attributes[@"infinite"] ? [WXConvert BOOL:attributes[@"infinite"]] : YES;
-        
-        _forbidSlideAnimation = attributes[@"forbidSlideAnimation"] ? [WXConvert BOOL:attributes[@"forbidSlideAnimation"]] : NO;
-        
-        self.flexCssNode->setFlexDirection(WeexCore::kFlexDirectionRow,NO);
-    }
-    return self;
-}
-
-- (UIView *)loadView
-{
-    return [[WXRecycleSliderView alloc] init];
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    
-    _recycleSliderView = (WXRecycleSliderView *)self.view;
-    _recycleSliderView.delegate = self;
-    _recycleSliderView.scrollView.pagingEnabled = YES;
-    _recycleSliderView.exclusiveTouch = YES;
-    _recycleSliderView.scrollView.scrollEnabled = _scrollable;
-    _recycleSliderView.infinite = _infinite;
-    _recycleSliderView.forbidSlideAnimation = _forbidSlideAnimation;
-    UIAccessibilityTraits traits = UIAccessibilityTraitAdjustable;
-    if (_autoPlay) {
-        traits |= UIAccessibilityTraitUpdatesFrequently;
-        [self _startAutoPlayTimer];
-    } else {
-        [self _stopAutoPlayTimer];
-    }
-     _recycleSliderView.accessibilityTraits = traits;
-}
-
-- (void)layoutDidFinish
-{
-    _recycleSliderView.currentIndex = self.currentIndex;
-}
-
-- (void)_buildViewHierarchyLazily {
-    [super _buildViewHierarchyLazily];
-    _recycleSliderView.currentIndex = self.currentIndex;
-}
-
-- (void)adjustForRTL
-{
-    if (![WXUtility enableRTLLayoutDirection]) return;
-    
-    // this is scroll rtl solution.
-    // scroll layout not use direction, use self tranform
-    if (self.view && self.isDirectionRTL) {
-        WXRecycleSliderView *slider = (WXRecycleSliderView *)self.view;
-        CATransform3D transform = CATransform3DScale(CATransform3DIdentity, -1, 1, 1);
-        slider.scrollView.layer.transform = transform ;
-    } else {
-        WXRecycleSliderView *slider = (WXRecycleSliderView *)self.view;
-        slider.scrollView.layer.transform = CATransform3DIdentity ;
-    }
-
-}
-
-- (void)_adjustForRTL {
-    if (![WXUtility enableRTLLayoutDirection]) return;
-    
-    [super _adjustForRTL];
-    [self adjustForRTL];
-}
-
-- (BOOL)shouldTransformSubviewsWhenRTL {
-    return YES;
-}
-
-- (void)viewDidUnload
-{
-    [_childrenView removeAllObjects];
-}
-
-- (void)insertSubview:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    if (subcomponent->_positionType == WXPositionTypeFixed) {
-        [self.weexInstance.rootView addSubview:subcomponent.view];
-        return;
-    }
-    
-    // use _lazyCreateView to forbid component like cell's view creating
-    if(_lazyCreateView) {
-        subcomponent->_lazyCreateView = YES;
-    }
-    
-    if (!subcomponent->_lazyCreateView || (self->_lazyCreateView && [self isViewLoaded])) {
-        UIView *view = subcomponent.view;
-        
-        if(index < 0) {
-            [self.childrenView addObject:view];
-        }
-        else {
-            [self.childrenView insertObject:view atIndex:index];
-        }
-        
-        WXRecycleSliderView *recycleSliderView = (WXRecycleSliderView *)self.view;
-        if ([view isKindOfClass:[WXIndicatorView class]]) {
-            ((WXIndicatorComponent *)subcomponent).delegate = self;
-            [recycleSliderView addSubview:view];
-            [self setIndicatorView:(WXIndicatorView *)view];
-            return;
-        }
-        
-        subcomponent.isViewFrameSyncWithCalculated = NO;
-        
-        if (index == -1) {
-            [recycleSliderView insertItemView:view atIndex:index];
-        } else {
-            NSInteger offset = 0;
-            for (int i = 0; i < [self.childrenView count]; ++i) {
-                if (index == i) break;
-                
-                if ([self.childrenView[i] isKindOfClass:[WXIndicatorView class]]) {
-                    offset++;
-                }
-            }
-            [recycleSliderView insertItemView:view atIndex:index - offset];
-            
-            // check if should apply current contentOffset
-            // in case inserting subviews after layoutDidFinish
-            if (index-offset == _index && _index>0) {
-                recycleSliderView.currentIndex = _index;
-            }
-        }
-        [recycleSliderView layoutSubviews];
-    }
-}
-
-- (void)willRemoveSubview:(WXComponent *)component
-{
-    UIView *view = component.view;
-    
-    if(self.childrenView && [self.childrenView containsObject:view]) {
-        [self.childrenView removeObject:view];
-    }
-    
-    WXRecycleSliderView *recycleSliderView = (WXRecycleSliderView *)_view;
-    [recycleSliderView removeItemView:view];
-    [recycleSliderView setCurrentIndex:0];
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"forbidSlideAnimation"]) {
-        _forbidSlideAnimation = [WXConvert BOOL:attributes[@"forbidSlideAnimation"]];
-        _recycleSliderView.forbidSlideAnimation = _forbidSlideAnimation;
-    }
-    
-    if (attributes[@"autoPlay"]) {
-        _autoPlay = [WXConvert BOOL:attributes[@"autoPlay"]];
-        if (_autoPlay) {
-            [self _startAutoPlayTimer];
-        } else {
-            [self _stopAutoPlayTimer];
-        }
-    }
-    
-    if (attributes[@"interval"]) {
-        _interval = [WXConvert NSInteger:attributes[@"interval"]];
-        [self _stopAutoPlayTimer];
-        
-        if (_autoPlay) {
-            [self _startAutoPlayTimer];
-        } 
-    }
-    
-    if (attributes[@"index"]) {
-        _index = [WXConvert NSInteger:attributes[@"index"]];
-        self.currentIndex = _index;
-        self.recycleSliderView.currentIndex = _index;
-    }
-    
-    if (attributes[@"scrollable"]) {
-        _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
-        ((WXRecycleSliderView *)self.view).scrollView.scrollEnabled = _scrollable;
-    }
-    
-    if (attributes[@"offsetXAccuracy"]) {
-        _offsetXAccuracy = [WXConvert CGFloat:attributes[@"offsetXAccuracy"]];
-    }
-    if (attributes[@"infinite"]) {
-        _infinite = [WXConvert BOOL:attributes[@"infinite"]];
-    }
-}
-
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"change"]) {
-        _sliderChangeEvent = YES;
-    }
-    if ([eventName isEqualToString:@"scroll"]) {
-        _sliderScrollEvent = YES;
-    }
-}
-
-- (void)removeEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"change"]) {
-        _sliderChangeEvent = NO;
-    }
-    if ([eventName isEqualToString:@"scroll"]) {
-        _sliderScrollEvent = NO;
-    }
-}
-
-- (BOOL)requestGestureShouldStopPropagation:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    return [self gestureShouldStopPropagation:gestureRecognizer shouldReceiveTouch:touch];
-}
-
-#pragma mark WXIndicatorComponentDelegate Methods
-
--(void)setIndicatorView:(WXIndicatorView *)indicatorView
-{
-    NSAssert(_recycleSliderView, @"");
-    [_recycleSliderView setIndicator:indicatorView];
-}
-
-- (void)resumeAutoPlay:(id)resume
-{
-    if (_autoPlay) {
-        if ([resume boolValue]) {
-            [self _startAutoPlayTimer];
-        } else {
-            [self _stopAutoPlayTimer];
-        }
-    }
-}
-
-#pragma mark Private Methods
-
-- (void)_startAutoPlayTimer
-{
-    if (!self.autoTimer || ![self.autoTimer isValid]) {
-        __weak __typeof__(self) weakSelf = self;
-        self.autoTimer = [NSTimer wx_scheduledTimerWithTimeInterval:_interval/1000.0f block:^() {
-            [weakSelf _autoPlayOnTimer];
-        } repeats:YES];
-        [[NSRunLoop currentRunLoop] addTimer:self.autoTimer forMode:NSRunLoopCommonModes];
-    }
-}
-
-- (void)_stopAutoPlayTimer
-{
-    if (self.autoTimer && [self.autoTimer isValid]) {
-        [self.autoTimer invalidate];
-        self.autoTimer = nil;
-    }
-}
-
-- (void)_autoPlayOnTimer
-{
-    if (!_infinite && (_currentIndex == _recycleSliderView.itemViews.count - 1)) {
-        [self _stopAutoPlayTimer];
-    }else {
-        [self.recycleSliderView nextPage];
-    }
-}
-
-#pragma mark ScrollView Delegate
-
-- (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScroll:(UIScrollView *)scrollView
-{
-    if (_sliderScrollEvent) {
-        CGFloat width = scrollView.frame.size.width;
-        CGFloat XDeviation = 0;
-        if (_infinite) {
-            XDeviation = - (scrollView.contentOffset.x - width);
-        } else {
-            XDeviation = - (scrollView.contentOffset.x - width * _currentIndex);
-        }
-        CGFloat offsetXRatio = (XDeviation / width);
-        if (fabs(offsetXRatio - _lastOffsetXRatio) >= _offsetXAccuracy) {
-            _lastOffsetXRatio = offsetXRatio;
-            [self fireEvent:@"scroll" params:@{@"offsetXRatio":[NSNumber numberWithFloat:offsetXRatio]} domChanges:nil];
-        }
-    }
-}
-
-- (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScrollToItemAtIndex:(NSInteger)index
-{
-    if (_sliderChangeEvent) {
-        [self fireEvent:@"change" params:@{@"index":@(index)} domChanges:@{@"attrs": @{@"index": @(index)}}];
-    }
-    self.currentIndex = index;
-}
-
-- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
-{
-    [self _stopAutoPlayTimer];
-}
-
-- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
-{
-    if (_autoPlay) {
-        [self _startAutoPlayTimer];
-    }
-}
-
-@end
-
-@implementation WXRecycleSliderScrollView
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    WXRecycleSliderView *view = (WXRecycleSliderView *)self.delegate;
-    if (![view isKindOfClass:[UIView class]]) {
-        return YES;
-    }
-    
-    if ([(id <WXRecycleSliderViewDelegate>) view.wx_component respondsToSelector:@selector(requestGestureShouldStopPropagation:shouldReceiveTouch:)]) {
-        return [(id <WXRecycleSliderViewDelegate>) view.wx_component requestGestureShouldStopPropagation:gestureRecognizer shouldReceiveTouch:touch];
-    }
-    else{
-        return YES;
-    }
-}
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h
deleted file mode 100644
index c290e29..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXDivComponent : WXComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.m
deleted file mode 100644
index 1a17b09..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.m
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXDivComponent.h"
-
-@interface WXDivComponent ()
-@end
-
-@implementation WXDivComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.h
deleted file mode 100644
index f9559d8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXComponent.h"
-#import "WXTextComponentProtocol.h"
-#import "WXDatePickerManager.h"
-
-@interface WXEditComponent : WXComponent<WXDatePickerManagerDelegate,UITextViewDelegate,UITextFieldDelegate>
-
-//attribute
-@property (nonatomic, strong) UIColor *placeholderColor;
-@property (nonatomic, strong) NSString *placeholderString;
-@property (nonatomic, strong) UILabel *placeHolderLabel;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.mm
deleted file mode 100644
index 49135a1..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.mm
+++ /dev/null
@@ -1,997 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXEditComponent.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXSDKInstance.h"
-#import "WXSDKInstance_private.h"
-#import "WXDefine.h"
-#import "WXAssert.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+PseudoClassManagement.h"
-#import "WXTextInputComponent.h"
-#import "WXComponent+Layout.h"
-
-@interface WXEditComponent()
-{
-    CGFloat _upriseOffset; // additional space when edit is lifted by keyboard
-}
-
-//@property (nonatomic, strong) WXTextInputView *inputView;
-@property (nonatomic, strong) WXDatePickerManager *datePickerManager;
-@property (nonatomic, strong) NSDictionary *attr;
-//attribute
-@property (nonatomic) NSNumber *maxLength;
-@property (nonatomic) NSString * value;
-@property (nonatomic) BOOL autofocus;
-@property (nonatomic) UIReturnKeyType returnKeyType;
-@property (nonatomic) BOOL disabled;
-@property (nonatomic, copy) NSString *inputType;
-@property (nonatomic) NSUInteger rows;
-@property (nonatomic) BOOL hideDoneButton;
-
-//style
-@property (nonatomic) WXPixelType fontSize;
-@property (nonatomic) WXTextStyle fontStyle;
-@property (nonatomic) CGFloat fontWeight;
-@property (nonatomic, strong) NSString *fontFamily;
-@property (nonatomic, strong) UIColor *colorForStyle;
-@property (nonatomic)NSTextAlignment textAlignForStyle;
-
-//event
-@property (nonatomic) BOOL inputEvent;
-@property (nonatomic) BOOL clickEvent;
-@property (nonatomic) BOOL focusEvent;
-@property (nonatomic) BOOL blurEvent;
-@property (nonatomic) BOOL changeEvent;
-@property (nonatomic) BOOL returnEvent;
-@property (nonatomic) BOOL keyboardEvent;
-@property (nonatomic, strong) NSString *changeEventString;
-@property (nonatomic, assign) CGSize keyboardSize;
-
-// formatter
-@property (nonatomic, strong) NSString * formatRule;
-@property (nonatomic, strong) NSString * formatReplace;
-@property (nonatomic, strong) NSString * recoverRule;
-@property (nonatomic, strong) NSString * recoverReplace;
-@property (nonatomic, strong) NSDictionary * formaterData;
-
-// disable move rootView up as the keyboard show up.
-@property (nonatomic, assign) BOOL disableMoveViewUp;
-
-// avoid keyboardWillHide executes twice
-@property (nonatomic, assign) BOOL keyboardHidden;
-
-@end
-
-@implementation WXEditComponent
-{
-    UIEdgeInsets _border;
-    UIEdgeInsets _padding;
-}
-
-WX_EXPORT_METHOD(@selector(focus))
-WX_EXPORT_METHOD(@selector(blur))
-WX_EXPORT_METHOD(@selector(setSelectionRange:selectionEnd:))
-WX_EXPORT_METHOD(@selector(getSelectionRange:))
-WX_EXPORT_METHOD(@selector(setTextFormatter:))
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        _inputEvent = NO;
-        _focusEvent = NO;
-        _blurEvent = NO;
-        _changeEvent = NO;
-        _returnEvent = NO;
-        _clickEvent = NO;
-        _keyboardEvent = NO;
-        _keyboardHidden = YES;
-        _textAlignForStyle = NSTextAlignmentNatural;
-        // handle attributes
-        _autofocus = [attributes[@"autofocus"] boolValue];
-        _disabled = [attributes[@"disabled"] boolValue];
-        _value = [WXConvert NSString:attributes[@"value"]]?:@"";
-        _placeholderString = [WXConvert NSString:attributes[@"placeholder"]]?:@"";
-        _upriseOffset = 20; // 20 for better appearance
-        
-        if (attributes[@"upriseOffset"]) {
-            _upriseOffset = [WXConvert CGFloat:attributes[@"upriseOffset"]];
-        }
-        
-        if(attributes[@"type"]) {
-            _inputType = [WXConvert NSString:attributes[@"type"]];
-            _attr = attributes;
-        }
-        if (attributes[@"maxlength"]) {
-            _maxLength = [NSNumber numberWithUnsignedInteger:[attributes[@"maxlength"] integerValue]];
-        }
-        if (attributes[@"returnKeyType"]) {
-            _returnKeyType = [WXConvert UIReturnKeyType:attributes[@"returnKeyType"]];
-        }
-        if (attributes[@"rows"]) {
-            _rows = [attributes[@"rows"] integerValue];
-        } else {
-            _rows = 2;
-        }
-        
-        if (attributes[@"hideDoneButton"]) {
-            _hideDoneButton = [attributes[@"hideDoneButton"] boolValue];
-        }
-        if (attributes[@"disableMoveViewUp"]) {
-            _disableMoveViewUp = [WXConvert BOOL:attributes[@"disableMoveViewUp"]];
-        }
-        
-        // handle styles
-        if (styles[@"color"]) {
-            _colorForStyle = [WXConvert UIColor:styles[@"color"]];
-        }
-        if (styles[@"fontSize"]) {
-            _fontSize = [WXConvert WXPixelType:styles[@"fontSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
-        }
-        if (styles[@"fontWeight"]) {
-            _fontWeight = [WXConvert WXTextWeight:styles[@"fontWeight"]];
-        }
-        if (styles[@"fontStyle"]) {
-            _fontStyle = [WXConvert WXTextStyle:styles[@"fontStyle"]];
-        }
-        if (styles[@"fontFamily"]) {
-            _fontFamily = styles[@"fontFamily"];
-        }
-        if (styles[@"textAlign"]) {
-            _textAlignForStyle = [WXConvert NSTextAlignment:styles[@"textAlign"]];
-        }
-        if (styles[@"placeholderColor"]) {
-            _placeholderColor = [WXConvert UIColor:styles[@"placeholderColor"]];
-        }else {
-            _placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
-        }
-    }
-    
-    return self;
-}
-
-#pragma mark - lifeCircle
-
-- (void)viewDidLoad
-{
-    UIView * view = self.view;
-    if ([view isKindOfClass:[UITextField class]]){
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFiledEditChanged:)
-                                                     name:UITextFieldTextDidChangeNotification
-                                                   object:view];
-    }
-    _padding = UIEdgeInsetsZero;
-    _border = UIEdgeInsetsZero;
-    self.userInteractionEnabled = YES;
-    [self setType];
-    [self setAutofocus:_autofocus];
-    [self setTextFont];
-    [self setPlaceholderAttributedString];
-    [self setTextAlignment];
-    [self setTextColor:_colorForStyle];
-    [self setText:_value];
-    [self setEnabled:!_disabled];
-    [self setRows:_rows];
-    [self setReturnKeyType:_returnKeyType];
-    [self updatePattern];
-    
-    if (!self.hideDoneButton) {
-        UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeKeyboard)];
-        UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-        UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 0, 44)];
-        toolbar.items = [NSArray arrayWithObjects:space, barButton, nil];
-        
-        self.inputAccessoryView = toolbar;
-    }
-
-    [self handlePseudoClass];
-}
-
-- (void)viewWillLoad
-{
-    [[NSNotificationCenter defaultCenter] addObserver:self
-                                             selector:@selector(keyboardWasShown:)
-                                                 name:UIKeyboardWillShowNotification
-                                               object:nil];
-    
-    [[NSNotificationCenter defaultCenter] addObserver:self
-                                             selector:@selector(keyboardWillHide:)
-                                                 name:UIKeyboardWillHideNotification
-                                               object:nil];
-}
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-- (void)layoutDirectionDidChanged:(BOOL)isRTL {
-    [self setTextAlignment];
-}
-
--(void)focus
-{
-    if(self.view) {
-        [self.view becomeFirstResponder];
-    }
-}
-
--(void)blur
-{
-    if(self.view) {
-        [[NSNotificationCenter defaultCenter] postNotificationName:UIKeyboardWillHideNotification object:nil];
-        [self.view resignFirstResponder];
-    }
-}
-
--(void)setSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
-{
-    if(selectionStart>self.text.length || selectionEnd>self.text.length) {
-        return;
-    }
-    [self.view becomeFirstResponder];
-    [self setEditSelectionRange:selectionStart selectionEnd:selectionEnd];
-}
-
--(void)getSelectionRange:(WXKeepAliveCallback)callback
-{
-    NSDictionary *res = [self getEditSelectionRange];
-    if(callback) {
-        callback(res,NO);
-    }
-}
-
-- (void)setTextFormatter:(NSDictionary*)formater
-{
-    _formaterData = formater;
-    if (formater[@"formatRule"]) {;
-        _formatRule = [self _preProcessInputTextFormatter:[WXConvert NSString:formater[@"formatRule"]]];
-    }
-    if (formater[@"formatReplace"]) {
-        _formatReplace = [self _preProcessInputTextFormatter:[WXConvert NSString:formater[@"formatReplace"]]];
-    }
-    if (formater[@"recoverRule"]) {
-        _recoverRule = [self _preProcessInputTextFormatter:[WXConvert NSString:formater[@"recoverRule"]]];
-    }
-    if (formater[@"recoverReplace"]) {
-        _recoverReplace = [self _preProcessInputTextFormatter:[WXConvert NSString:formater[@"recoverReplace"]]];
-    }
-}
-
-- (NSString*)_preProcessInputTextFormatter:(NSString*)formater
-{
-    NSRange start = [formater rangeOfString:@"/"];
-    NSRange end = [formater rangeOfString:@"/g"];
-    if (start.location == NSNotFound || end.location == NSNotFound || end.location < start.location) {
-        return formater;
-    }
-    NSRange subStringRange = NSMakeRange(start.location+1, end.location - start.location-1);
-    
-    return [formater substringWithRange:subStringRange];
-}
-
-#pragma mark - Overwrite Method
--(NSString *)text
-{
-    return @"";
-}
-
-- (void)setText:(NSString *)text
-{
-}
-
--(void)setTextColor:(UIColor *)color
-{
-}
-
-- (void)setTextAlignment {
-    if ([self isDirectionRTL] && _textAlignForStyle == NSTextAlignmentNatural) {
-        [self setTextAlignment:NSTextAlignmentRight];
-    } else {
-        [self setTextAlignment:_textAlignForStyle];
-    }
-}
-
--(void)setTextAlignment:(NSTextAlignment)textAlignForStyle
-{
-}
-
--(void)setUserInteractionEnabled:(BOOL)userInteractionEnabled
-{
-}
-
--(void)setEnabled:(BOOL)enabled
-{
-}
-
--(void)setReturnKeyType:(UIReturnKeyType)returnKeyType
-{
-}
-
--(void)setInputAccessoryView:(UIView *)inputAccessoryView
-{
-}
-
--(void)setEditSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
-{
-}
-
--(NSDictionary *)getEditSelectionRange
-{
-    return @{};
-}
-
--(void)setKeyboardType:(UIKeyboardType)keyboardType
-{
-}
-
--(void)setSecureTextEntry:(BOOL)secureTextEntry
-{
-}
-
--(void)setEditPadding:(UIEdgeInsets)padding
-{
-}
-
--(void)setEditBorder:(UIEdgeInsets)border
-{
-}
-
--(void)setAttributedPlaceholder:(NSMutableAttributedString *)attributedString font:(UIFont *)font
-{
-}
-
--(void)setFont:(UIFont *)font
-{
-}
-
--(void)setRows:(NSUInteger)rows
-{
-}
-
-#pragma mark - Add Event
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"input"]) {
-        _inputEvent = YES;
-    }
-    if ([eventName isEqualToString:@"focus"]) {
-        _focusEvent = YES;
-    }
-    if ([eventName isEqualToString:@"blur"]) {
-        _blurEvent = YES;
-    }
-    if ([eventName isEqualToString:@"change"]) {
-        _changeEvent = YES;
-    }
-    if ([eventName isEqualToString:@"return"]) {
-        _returnEvent = YES;
-    }
-    if ([eventName isEqualToString:@"click"]) {
-        _clickEvent = YES;
-    }
-    if ([eventName isEqualToString:@"keyboard"]) {
-        _keyboardEvent = YES;
-    }
-}
-
-#pragma Remove Event
-
--(void)removeEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"input"]) {
-        _inputEvent = NO;
-    }
-    if ([eventName isEqualToString:@"focus"]) {
-        _focusEvent = NO;
-    }
-    if ([eventName isEqualToString:@"blur"]) {
-        _blurEvent = NO;
-    }
-    if ([eventName isEqualToString:@"change"]) {
-        _changeEvent = NO;
-    }
-    if ([eventName isEqualToString:@"return"]) {
-        _returnEvent = NO;
-    }
-    if ([eventName isEqualToString:@"click"]) {
-        _clickEvent = NO;
-    }
-    if ([eventName isEqualToString:@"keyboard"]) {
-        _keyboardEvent = NO;
-    }
-}
-
-#pragma mark - upate attributes
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    _attr = attributes;
-    if (attributes[@"type"]) {
-        _inputType = [WXConvert NSString:attributes[@"type"]];
-        [self setType];
-    }
-    if (attributes[@"autofocus"]) {
-        self.autofocus = [attributes[@"autofocus"] boolValue];
-    }
-    if (attributes[@"disabled"]) {
-        _disabled = [attributes[@"disabled"] boolValue];
-        [self setEnabled:!_disabled];
-    }
-    if (attributes[@"maxlength"]) {
-        _maxLength = [NSNumber numberWithInteger:[attributes[@"maxlength"] integerValue]];
-    }
-    
-    if (attributes[@"disableMoveViewUp"]) {
-        _disableMoveViewUp = [WXConvert BOOL:attributes[@"disableMoveViewUp"]];
-    }
-    if (attributes[@"value"]) {
-        _value = [WXConvert NSString:attributes[@"value"]]?:@"";
-        if (_maxLength && [_value length] > [_maxLength integerValue]&& [_maxLength integerValue] >= 0) {
-            _value = [_value substringToIndex:([_maxLength integerValue])];
-        }
-        [self setText:_value];
-    }
-    if (attributes[@"placeholder"]) {
-        _placeholderString = [WXConvert NSString:attributes[@"placeholder"]]?:@"";
-        [self setPlaceholderAttributedString];
-        if(_value.length > 0){
-            _placeHolderLabel.text = @"";
-        }
-    }
-    if (attributes[@"returnKeyType"]) {
-        _returnKeyType = [WXConvert UIReturnKeyType:attributes[@"returnKeyType"]];
-        [self setReturnKeyType:_returnKeyType];
-    }
-    if (attributes[@"rows"]) {
-        _rows = [attributes[@"rows"] integerValue];
-        [self setRows:_rows];
-    } else {
-        _rows = 2;
-        [self setRows:_rows];
-    }
-    if (attributes[@"upriseOffset"]) {
-        _upriseOffset = [WXConvert CGFloat:attributes[@"upriseOffset"]];
-    }
-}
-
-#pragma mark - upate styles
-
-- (void)updateStyles:(NSDictionary *)styles
-{
-    if (styles[@"color"]) {
-        _colorForStyle = [WXConvert UIColor:styles[@"color"]];
-        [self setTextColor:_colorForStyle];
-    }
-    if (styles[@"fontSize"]) {
-        _fontSize = [WXConvert WXPixelType:styles[@"fontSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
-    }
-    if (styles[@"fontWeight"]) {
-        _fontWeight = [WXConvert WXTextWeight:styles[@"fontWeight"]];
-    }
-    if (styles[@"fontStyle"]) {
-        _fontStyle = [WXConvert WXTextStyle:styles[@"fontStyle"]];
-    }
-    if (styles[@"fontFamily"]) {
-        _fontFamily = [WXConvert NSString:styles[@"fontFamily"]];
-    }
-    [self setTextFont];
-    
-    if (styles[@"textAlign"]) {
-        _textAlignForStyle = [WXConvert NSTextAlignment:styles[@"textAlign"]];
-        [self setTextAlignment:_textAlignForStyle] ;
-    }
-    if (styles[@"placeholderColor"]) {
-        _placeholderColor = [WXConvert UIColor:styles[@"placeholderColor"]];
-    }else {
-        _placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
-    }
-    [self setPlaceholderAttributedString];
-    [self updatePattern];
-}
-
--(void)updatePattern
-{
-    if (self.flexCssNode == nullptr) {
-        return;
-    }
-    
-        UIEdgeInsets padding_flex = UIEdgeInsetsMake(
-                                                     self.flexCssNode->getPaddingTop(),
-                                                     self.flexCssNode->getPaddingLeft(),
-                                                     self.flexCssNode->getPaddingBottom(),
-                                                     self.flexCssNode->getPaddingRight()
-                                                     );
-        
-        if (!UIEdgeInsetsEqualToEdgeInsets(padding_flex, _padding)) {
-            [self setPadding:padding_flex];
-        }
-        
-        
-        UIEdgeInsets border_flex = UIEdgeInsetsMake(self.flexCssNode->getBorderWidthTop(), self.flexCssNode->getBorderWidthLeft(), self.flexCssNode->getBorderWidthBottom(), self.flexCssNode->getBorderWidthRight());
-
-        if (!UIEdgeInsetsEqualToEdgeInsets(border_flex, _border)) {
-            [self setBorder:border_flex];
-        }
-}
-
-- (CGSize (^)(CGSize))measureBlock
-{
-    __weak typeof(self) weakSelf = self;
-    return ^CGSize (CGSize constrainedSize) {
-        __strong typeof(self) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            return CGSizeZero;
-        }
-        
-        if (strongSelf.flexCssNode == nullptr) {
-            return CGSizeZero;
-        }
-        
-        CGSize computedSize = [[[NSString alloc] init]sizeWithAttributes:nil];
-            if (!isnan(strongSelf.flexCssNode->getMinWidth())) {
-                computedSize.width = MAX(computedSize.width, strongSelf.flexCssNode->getMinWidth());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMaxWidth())) {
-                computedSize.width = MIN(computedSize.width, strongSelf.flexCssNode->getMaxWidth());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMinHeight())) {
-                computedSize.height = MAX(computedSize.height, strongSelf.flexCssNode->getMinHeight());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMaxHeight())) {
-                computedSize.height = MIN(computedSize.height, strongSelf.flexCssNode->getMaxHeight());
-            }
-        return (CGSize) {
-            WXCeilPixelValue(computedSize.width),
-            WXCeilPixelValue(computedSize.height)
-        };
-    };
-}
-
-#pragma mark WXDatePickerManagerDelegate
-
--(void)fetchDatePickerValue:(NSString *)value
-{
-    self.text = value;
-    if (_changeEvent) {
-        if (![[self text] isEqualToString:_changeEventString]) {
-            [self fireEvent:@"change" params:@{@"value":[self text]} domChanges:@{@"attrs":@{@"value":[self text]}}];
-        }
-    }
-}
-
-#pragma mark UITextFieldDelegate
-
-- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
-    if([self isDateType])
-    {
-        [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
-        _changeEventString = [textField text];
-        [_datePickerManager show];
-        return NO;
-    }
-    return  YES;
-}
-
-#pragma mark UITextFieldDelegate
-
-- (void)textFieldDidBeginEditing:(UITextField *)textField
-{
-    _changeEventString = [textField text];
-    if (_focusEvent) {
-        [self fireEvent:@"focus" params:nil];
-    }
-    [self handlePseudoClass];
-}
-
-- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
-{
-    if (!string.length) {
-        ((WXTextInputView*)textField).deleteWords = YES;
-        ((WXTextInputView*)textField).editWords = [textField.text substringWithRange:range];
-    } else {
-        ((WXTextInputView*)textField).deleteWords = FALSE;
-        ((WXTextInputView*)textField).editWords = string;
-    }
-  
-    if ([_inputType isEqualToString:@"tel"] || [_inputType isEqualToString:@"number"] ) {
-        if (![self isPureInt:string]) {
-            if ([string isEqualToString:@"+"]||[string isEqualToString:@"."]||[string isEqualToString:@"*"]||[string isEqualToString:@"#"]||(string.length == 0 && range.length == 1))
-            {
-                return YES;
-            }
-            return NO;
-        }
-    }
-    return YES;
-}
-
-- (void)textFieldDidEndEditing:(UITextField *)textField
-{
-    if (_changeEvent) {
-        if (![[textField text] isEqualToString:_changeEventString]) {
-            [self fireEvent:@"change" params:@{@"value":[textField text]} domChanges:@{@"attrs":@{@"value":[textField text]}}];
-        }
-    }
-    if (_blurEvent) {
-        [self fireEvent:@"blur" params:nil];
-    }
-    if(self.pseudoClassStyles && [self.pseudoClassStyles count]>0){
-        [self recoveryPseudoStyles:self.styles];
-    }
-}
-
-- (BOOL)textFieldShouldReturn:(UITextField *)textField
-{
-    if (_returnEvent) {
-        NSString *typeStr = [WXUtility returnKeyType:_returnKeyType];
-        [self fireEvent:@"return" params:@{@"value":[textField text],@"returnKeyType":typeStr} domChanges:@{@"attrs":@{@"value":[textField text]}}];
-    }
-    [self blur];
-    return YES;
-}
-
-- (void)textFiledEditChanged:(NSNotification *)notifi
-{
-    WXTextInputView *textField = (WXTextInputView *)notifi.object;
-    if (_formaterData && _recoverRule && _recoverReplace && _formatRule && _formatReplace) {
-        UITextRange * textRange = textField.selectedTextRange;
-        NSInteger cursorPosition = [textField offsetFromPosition:textField.beginningOfDocument toPosition:textRange.start];
-        NSMutableString * preText = [[textField.text substringToIndex:cursorPosition] mutableCopy];
-        NSMutableString * lastText = [[textField.text substringFromIndex:cursorPosition] mutableCopy];
-        
-        NSRegularExpression *recoverRule = [NSRegularExpression regularExpressionWithPattern:_recoverRule options:NSRegularExpressionCaseInsensitive error:NULL];
-        [recoverRule replaceMatchesInString:preText options:0 range:NSMakeRange(0, preText.length) withTemplate:_recoverReplace];
-        [recoverRule replaceMatchesInString:lastText options:0 range:NSMakeRange(0, lastText.length) withTemplate:_recoverReplace];
-        NSMutableString * newString = [NSMutableString stringWithFormat:@"%@%@", preText, lastText];
-        NSRegularExpression *formatRule = [NSRegularExpression regularExpressionWithPattern:_formatRule options:NSRegularExpressionCaseInsensitive error:NULL];
-        [formatRule replaceMatchesInString:newString options:0 range:NSMakeRange(0, newString.length) withTemplate:_formatReplace];
-        NSString * oldText = textField.text;
-        NSInteger adjust = 0;
-        
-        if (cursorPosition == textField.text.length) {
-            adjust = newString.length-oldText.length;
-        }
-        if (textField.deleteWords &&[textField.editWords isKindOfClass:[NSString class]] && [_recoverRule isEqualToString:textField.editWords]) {
-            // do nothing
-        } else {
-            textField.text = [newString copy];
-            UITextPosition * newPosition = [textField positionFromPosition:textField.beginningOfDocument offset:cursorPosition+adjust];
-            textField.selectedTextRange = [textField textRangeFromPosition:newPosition toPosition:newPosition];
-        }
-
-    }
-    
-    if (_maxLength) {
-        NSString *toBeString = textField.text;
-        NSString *language = [[UIApplication sharedApplication] textInputMode].primaryLanguage;
-        if ([language isEqualToString:@"zh-Hans"]) {
-            UITextRange *selectedRange = [textField markedTextRange];
-            UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
-            if (!position) {
-                if (toBeString.length > _maxLength.integerValue) {
-                    textField.text = [toBeString substringToIndex:_maxLength.integerValue];
-                }
-            }
-        } else {
-            if (toBeString.length > _maxLength.integerValue) {
-                textField.text = [toBeString substringToIndex:_maxLength.integerValue];
-            }
-        }
-    }
-
-    if (_inputEvent) {
-        // bind each other , the key must be attrs
-        [self fireEvent:@"input" params:@{@"value":[textField text]} domChanges:@{@"attrs":@{@"value":[textField text]}}];
-    }
-}
-
-- (void)setViewMovedUp:(BOOL)movedUp
-{
-    UIView *rootView = self.weexInstance.rootView;
-    CGRect rect = self.weexInstance.frame;
-    CGRect rootViewFrame = rootView.frame;
-    CGRect inputFrame = [self.view.superview convertRect:self.view.frame toView:rootView];
-    if (movedUp) {
-        CGFloat offset = inputFrame.origin.y-(rootViewFrame.size.height-_keyboardSize.height-inputFrame.size.height) + _upriseOffset;
-        if (offset > 0) {
-            rect = (CGRect){
-                .origin.x = 0.f,
-                .origin.y = rect.origin.y - offset,
-                .size = rootViewFrame.size
-            };
-        }
-    }
-    self.weexInstance.rootView.frame = rect;
-}
-
-#pragma mark textview Delegate
-- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
-{
-    if([self isDateType])
-    {
-        [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
-        _changeEventString = [textView text];
-        [_datePickerManager show];
-        return NO;
-    }
-    return  YES;
-}
-
-- (void)textViewDidBeginEditing:(UITextView *)textView
-{
-    _changeEventString = [textView text];
-    if (_focusEvent) {
-        [self fireEvent:@"focus" params:nil];
-    }
-    if (_clickEvent) {
-        [self fireEvent:@"click" params:nil];
-    }
-    [textView becomeFirstResponder];
-    [self handlePseudoClass];
-}
-
-- (void)textViewDidChange:(UITextView *)textView
-{
-    if(textView.text && [textView.text length] > 0) {
-        self.placeHolderLabel.text = @"";
-    }else{
-        [self setPlaceholderAttributedString];
-    }
-    if (_inputEvent) {
-        [self fireEvent:@"input" params:@{@"value":[textView text]} domChanges:@{@"attrs":@{@"value":[textView text]}}];
-    }
-}
-
-- (void)textViewDidEndEditing:(UITextView *)textView
-{
-    if (![textView.text length]) {
-        [self setPlaceholderAttributedString];
-    }
-    if (_changeEvent) {
-        if (![[textView text] isEqualToString:_changeEventString]) {
-            [self fireEvent:@"change" params:@{@"value":[textView text]} domChanges:@{@"attrs":@{@"value":[textView text]}}];
-        }
-    }
-    if (_blurEvent) {
-        [self fireEvent:@"blur" params:nil];
-    }
-    if(self.pseudoClassStyles && [self.pseudoClassStyles count]>0){
-        [self recoveryPseudoStyles:self.styles];
-    }
-}
-
-- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
-{
-    if ([text isEqualToString:@"\n"]) {
-        NSString *typeStr = [WXUtility returnKeyType:_returnKeyType];
-        if (_returnEvent) {
-            [self fireEvent:@"return" params:@{@"value":[textView text],@"returnKeyType":typeStr} domChanges:@{@"attrs":@{@"value":[textView text]}}];
-        }
-        if(typeStr.length > 0 && ![@"default" isEqualToString:typeStr]){
-            [self blur];
-            return NO;
-        }
-    }
-    
-    if (_maxLength) {
-        NSUInteger oldLength = [textView.text length];
-        NSUInteger replacementLength = [text length];
-        NSUInteger rangeLength = range.length;
-        NSUInteger newLength = oldLength - rangeLength + replacementLength;
-        return newLength <= [_maxLength integerValue] ;
-    }
-    
-    return YES;
-}
-
-#pragma mark private method
-
-- (BOOL)isDateType
-{
-    if([_inputType isEqualToString:@"date"] || [_inputType isEqualToString:@"time"])
-        return YES;
-    return NO;
-}
-
-- (BOOL)isPureInt:(NSString*)textString
-{
-    int val;
-    NSScanner* scan = [NSScanner scannerWithString:textString];
-    return[scan scanInt:&val] && [scan isAtEnd];
-}
-
-- (void)setPlaceholderAttributedString
-{
-    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_placeholderString];
-    [attributedString addAttribute:NSForegroundColorAttributeName value:_placeholderColor range:NSMakeRange(0, _placeholderString.length)];
-    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
-    [self setAttributedPlaceholder:attributedString font:font];
-}
-
-- (void)setTextFont
-{
-    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
-    [self setFont:font];
-}
-
-- (void)setAutofocus:(BOOL)b
-{
-    if (b) {
-        if([self isDateType])
-        {
-            [_datePickerManager show];
-        }else
-        {
-            [self.view becomeFirstResponder];
-        }
-    } else {
-        if([self isDateType])
-        {
-            [_datePickerManager hide];
-        }else
-        {
-            [self.view resignFirstResponder];
-        }
-    }
-}
-
-- (void)setType
-{
-    [self setKeyboardType:UIKeyboardTypeDefault];
-    [self setSecureTextEntry:NO];
-    if ([_inputType isEqualToString:@"text"]) {
-        [self setKeyboardType:UIKeyboardTypeDefault];
-    }else if ([_inputType isEqualToString:@"password"]) {
-        [self setSecureTextEntry:YES];
-    }else if ([_inputType isEqualToString:@"tel"]) {
-        [self setKeyboardType:UIKeyboardTypePhonePad];
-    }else if ([_inputType isEqualToString:@"email"]) {
-        [self setKeyboardType:UIKeyboardTypeEmailAddress];
-    }else if ([_inputType isEqualToString:@"url"]) {
-        [self setKeyboardType:UIKeyboardTypeURL];
-    }else if ([_inputType isEqualToString:@"number"]) {
-        [self setKeyboardType:UIKeyboardTypeDecimalPad];
-    }else if ([self isDateType]) {
-        if (!_datePickerManager) {
-            _datePickerManager = [[WXDatePickerManager alloc] init];
-            _datePickerManager.delegate = self;
-        }
-        [_datePickerManager updateDatePicker:_attr];
-    }
-}
-
-- (void)setPadding:(UIEdgeInsets)padding
-{
-    _padding = padding;
-    [self setEditPadding:padding];
-}
-
-- (void)setBorder:(UIEdgeInsets)border
-{
-    _border = border;
-    [self setEditBorder:border];
-}
-
-#pragma mark update touch styles
--(void)handlePseudoClass
-{
-    NSMutableDictionary *styles = [NSMutableDictionary new];
-    NSMutableDictionary *recordStyles = [NSMutableDictionary new];
-    if(_disabled){
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"disabled"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }else {
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"enabled"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    if ([self.view isFirstResponder]){
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"focus"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    NSString *disabledStr = @"enabled";
-    if (_disabled){
-        disabledStr = @"disabled";
-    }
-    if ([self.view isFirstResponder]) {
-        NSString *focusStr = @"focus";
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[focusStr,disabledStr]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    [self updatePseudoClassStyles:styles];
-}
-
-#pragma mark keyboard
-- (void)keyboardWasShown:(NSNotification*)notification
-{
-    if(![self.view isFirstResponder]) {
-        return;
-    }
-    
-    CGRect end = [[[notification userInfo] objectForKey:@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
-    if (!_disableMoveViewUp) {
-        _keyboardSize = end.size;
-        UIView * rootView = self.weexInstance.rootView;
-        CGRect screenRect = [[UIScreen mainScreen] bounds];
-        CGRect keyboardRect = (CGRect){
-            .origin.x = 0,
-            .origin.y = CGRectGetMaxY(screenRect) - _keyboardSize.height - 54,
-            .size = _keyboardSize
-        };
-        CGRect inputFrame = [self.view.superview convertRect:self.view.frame toView:rootView];
-        if (keyboardRect.origin.y - inputFrame.size.height <= inputFrame.origin.y) {
-            [self setViewMovedUp:YES];
-            self.weexInstance.isRootViewFrozen = YES;
-        }
-    }
-    
-    if (_keyboardEvent) {
-        [self fireEvent:@"keyboard" params:@{ @"isShow": @YES, @"keyboardSize": @(end.size.height / self.weexInstance.pixelScaleFactor) }];
-    }
-    
-    _keyboardHidden = NO;
-}
-
-- (void)keyboardWillHide:(NSNotification*)notification
-{
-    if (![self.view isFirstResponder] || _keyboardHidden) {
-        return;
-    }
-    if (!_disableMoveViewUp) {
-        UIView * rootView = self.weexInstance.rootView;
-        if (!CGRectEqualToRect(self.weexInstance.frame, rootView.frame)) {
-            [self setViewMovedUp:NO];
-        }
-        self.weexInstance.isRootViewFrozen = NO;
-    }
-    if (_keyboardEvent) {
-        [self fireEvent:@"keyboard" params:@{ @"isShow": @NO }];
-    }
-    
-    _keyboardHidden = YES;
-}
-
-- (void)closeKeyboard
-{
-    [[NSNotificationCenter defaultCenter] postNotificationName:UIKeyboardWillHideNotification object:nil];
-    [self.view resignFirstResponder];
-}
-
-#pragma mark -reset color
-- (void)resetStyles:(NSArray *)styles
-{
-    if ([styles containsObject:@"color"]) {
-        [self setTextColor:[UIColor blackColor]];
-    }
-    if ([styles containsObject:@"fontSize"]) {
-        _fontSize = WX_TEXT_FONT_SIZE;
-        [self setTextFont];
-    }
-}
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h
deleted file mode 100644
index 25a71ba..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-#import "WXErrorView.h"
-
-@interface WXEmbedComponent : WXComponent <WXErrorViewDelegate>
-
-- (void)refreshWeex;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m
deleted file mode 100644
index 4c95e51..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXEmbedComponent.h"
-#import "WXComponent_internal.h"
-#import "WXSDKInstance_private.h"
-#import "WXComponent+Navigation.h"
-#import "WXSDKInstance.h"
-#import "WXSDKManager.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXApmForInstance.h"
-
-@interface WXEmbedComponent ()
-
-@property (nonatomic, strong) WXSDKInstance *embedInstance;
-@property (nonatomic, strong) UIView *embedView;
-@property (nonatomic, assign) BOOL createFinished;
-@property (nonatomic, assign) BOOL renderFinished;
-@property (nonatomic, assign) WXVisibility visible;
-@property (nonatomic, strong) NSURL *sourceURL;
-@property (nonatomic, strong) WXErrorView *errorView;
-
-@end
-
-@implementation WXEmbedComponent 
-
-#pragma mark Life Cycle
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-    
-    if (self.embedInstance) {
-        [self.embedInstance destroyInstance];
-    }
-}
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        
-        _createFinished = NO;
-        _renderFinished = NO;
-        
-        _sourceURL = [NSURL URLWithString: attributes[@"src"]];
-        _visible =  [WXConvert WXVisibility:styles[@"visibility"]];
-        
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(observeInstanceState:) name:WX_INSTANCE_NOTIFICATION_UPDATE_STATE object:nil];
-    }
-    
-    return self;
-}
-
-- (void)viewDidLoad {
-    
-    [super viewDidLoad];
-    
-    [self _layoutEmbedView];
-}
-
-- (void)updateStyles:(NSDictionary *)styles
-{
-    [super updateStyles:styles];
-    
-    if (styles[@"visibility"]) {
-        WXVisibility visible = [WXConvert WXVisibility:styles[@"visibility"]];
-        if (_visible != visible) {
-            _visible = visible;
-            [self _layoutEmbedView];
-        }
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    [super updateAttributes:attributes];
-    
-    if (attributes[@"src"]) {
-        NSURL *sourceURL = [NSURL URLWithString:attributes[@"src"]];
-        if (!sourceURL|| ![[sourceURL absoluteString] isEqualToString:[_sourceURL absoluteString]]) {
-            _sourceURL = sourceURL;
-            _createFinished = NO;
-            [self _layoutEmbedView];
-        }
-    }
-}
-
-- (void)refreshWeex
-{
-    [self _renderWithURL:_sourceURL];
-}
-
-- (void)_layoutEmbedView
-{
-    if (_visible == WXVisibilityShow) {
-        [self _updateState:WeexInstanceAppear];
-        if (!_createFinished && !CGRectEqualToRect(CGRectZero, self.calculatedFrame)) {
-            [self _renderWithURL:_sourceURL];
-        }
-    }
-    else {
-        [self _updateState:WeexInstanceDisappear];
-    }
-}
-
-- (void)_renderWithURL:(NSURL *)sourceURL
-{
-    if (!sourceURL || [[sourceURL absoluteString] length] == 0) {
-        return;
-    }
-    
-    [_embedInstance destroyInstance];
-    _embedInstance = [[WXSDKInstance alloc] init];
-    _embedInstance.parentInstance = self.weexInstance;
-    _embedInstance.parentNodeRef = self.ref;
-    _embedInstance.frame = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, self.view.frame.size.height);
-    _embedInstance.pageName = sourceURL.absoluteString;
-    _embedInstance.pageObject = self.weexInstance.viewController;
-    _embedInstance.viewController = self.weexInstance.viewController;
-    
-    NSString *newURL = nil;
-    
-    if ([sourceURL.absoluteString rangeOfString:@"?"].location != NSNotFound) {
-        newURL = [NSString stringWithFormat:@"%@&random=%d", sourceURL.absoluteString, arc4random()];
-    }
-    else {
-        newURL = [NSString stringWithFormat:@"%@?random=%d", sourceURL.absoluteString, arc4random()];
-    }
-    
-    [_embedInstance renderWithURL:[NSURL URLWithString:newURL] options:@{@"bundleUrl":[sourceURL absoluteString]} data:nil];
-    [_embedInstance.apmInstance setProperty:KEY_PAGE_PROPERTIES_INSTANCE_TYPE withValue:@"embed"];
-    [_embedInstance.apmInstance setProperty:KEY_PAGE_PROPERTIES_PARENT_PAGE withValue:_embedInstance.parentInstance.pageName];
-    [self.weexInstance.apmInstance updateDiffStats:KEY_PAGE_STATS_EMBED_COUNT withDiffValue:1];
-    __weak typeof(self) weakSelf = self;
-    _embedInstance.onCreate = ^(UIView *view) {
-        dispatch_async(dispatch_get_main_queue(), ^{
-            if (weakSelf.errorView) {
-                [weakSelf.errorView removeFromSuperview];
-                weakSelf.errorView = nil;
-            }
-        
-            [weakSelf.embedView removeFromSuperview];
-            weakSelf.embedView = view;
-            [weakSelf.view addSubview:weakSelf.embedView];
-            
-            weakSelf.createFinished = YES;
-        });
-    };
-    
-    _embedInstance.onFailed = ^(NSError *error) {
-        weakSelf.weexInstance.apmInstance.isDegrade = YES;
-        dispatch_async(dispatch_get_main_queue(), ^{
-            if (weakSelf.errorView) {
-                return ;
-            }
-            
-            WXErrorView *errorView = [[WXErrorView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 135.0f, 130.0f)];
-            errorView.center = CGPointMake(weakSelf.view.bounds.size.width / 2.0f, weakSelf.view.bounds.size.height / 2.0f);
-            errorView.delegate = weakSelf;
-            [weakSelf.view addSubview:errorView];
-            
-            weakSelf.errorView = errorView;
-        });
-    };
-    
-    _embedInstance.renderFinish = ^(UIView *view) {
-         weakSelf.renderFinished = YES;
-        [weakSelf _updateState:WeexInstanceAppear];
-    };
-}
-
-- (void)_updateState:(WXState)state
-{
-    if (_renderFinished && _embedInstance && _embedInstance.state != state) {
-        _embedInstance.state = state;
-        
-        if (state == WeexInstanceAppear) {
-            [self setNavigationWithStyles:self.embedInstance.naviBarStyles];
-            [[WXSDKManager bridgeMgr] fireEvent:self.embedInstance.instanceId ref:WX_SDK_ROOT_REF type:@"viewappear" params:nil domChanges:nil];
-        }
-        else if (state == WeexInstanceDisappear) {
-            [[WXSDKManager bridgeMgr] fireEvent:self.embedInstance.instanceId ref:WX_SDK_ROOT_REF type:@"viewdisappear" params:nil domChanges:nil];
-        }
-    }
-}
-
-- (void)_frameDidCalculated:(BOOL)isChanged
-{
-    [super _frameDidCalculated:isChanged];
-    self.embedInstance.frame = self.calculatedFrame;
-}
-
-- (void)onclickErrorView
-{
-    if (self.errorView) {
-        [self.errorView removeFromSuperview];
-        self.errorView = nil;
-    }
-    
-    [self _renderWithURL:self.sourceURL];
-}
-
-- (void)observeInstanceState:(NSNotification *)notification
-{
-    WXSDKInstance *instance = notification.object;
-    
-    if (instance == self.weexInstance) {
-        NSDictionary *userInfo = notification.userInfo;
-        WXState state = [userInfo[@"state"] integerValue];
-        if (_visible == WXVisibilityHidden) {
-            switch (state) {
-                case WeexInstanceBackground:
-                    [self _updateState:WeexInstanceBackground];
-                    break;
-                default:
-                    [self _updateState:WeexInstanceDisappear];
-                    break;
-            }
-        }
-        else {
-            [self _updateState:state];
-        }
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.h
deleted file mode 100644
index a849493..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXFooterComponent : WXComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.m
deleted file mode 100644
index 82e2fdd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.m
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXFooterComponent.h"
-
-@implementation WXFooterComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.h
deleted file mode 100644
index 8cfd567..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@class WXHeaderComponent;
-
-@protocol WXHeaderRenderDelegate <NSObject>
-
-- (float)headerWidthForLayout:(WXHeaderComponent *)header;
-
-- (void)headerDidLayout:(WXHeaderComponent *)header;
-
-- (void)headerDidRemove:(WXHeaderComponent *)header;
-
-@end
-
-@interface WXHeaderComponent : WXComponent
-
-@property (nonatomic, weak) id<WXHeaderRenderDelegate> delegate;
-@property (nonatomic, assign, readonly) BOOL isSticky;
-@property (nonatomic, assign, readonly) BOOL keepScrollPosition;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.mm
deleted file mode 100644
index fda5e76..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.mm
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXHeaderComponent.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+Layout.h"
-#import "WXAssert.h"
-
-@implementation WXHeaderComponent
-{
-    BOOL _isUseContainerWidth;
-}
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    
-    if (self) {
-        _async = YES;
-        _keepScrollPosition = attributes[@"keepScrollPosition"] ? [WXConvert BOOL:attributes[@"keepScrollPosition"]] : NO;
-    }
-    
-    return self;
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"keepScrollPosition"]) {
-        _keepScrollPosition = [WXConvert BOOL:attributes[@"keepScrollPosition"]];
-    }
-}
-
-- (BOOL)isSticky
-{
-    return _positionType == WXPositionTypeSticky;
-}
-
-- (void)_frameDidCalculated:(BOOL)isChanged
-{
-    [super _frameDidCalculated:isChanged];
-    
-    if (isChanged) {
-        [self.delegate headerDidLayout:self];
-    }
-}
-
-- (void)_removeFromSupercomponent
-{
-    [super _removeFromSupercomponent];
-    
-    [self.delegate headerDidRemove:self];
-}
-
-- (BOOL)_isCalculatedFrameChanged:(CGRect)frame
-{
-    return !CGSizeEqualToSize(frame.size, _calculatedFrame.size); // only compares sizes
-}
-
-- (void)_assignCalculatedFrame:(CGRect)frame
-{
-    frame.origin = CGPointZero;
-    WXAssert(!isnan(frame.size.height), @"Height of header should not be NAN.");
-    if (isnan(frame.size.height) || frame.size.height < 0.0f) {
-        frame.size.height = 0.0f;
-    }
-    _calculatedFrame = frame;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h
deleted file mode 100644
index 3016645..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXImageComponent : WXComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
deleted file mode 100644
index 1cb8245..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ /dev/null
@@ -1,690 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXImageComponent.h"
-#import "WXHandlerFactory.h"
-#import "WXComponent_internal.h"
-#import "WXImgLoaderProtocol.h"
-#import "WXLayer.h"
-#import "WXType.h"
-#import "WXConvert.h"
-#import "WXURLRewriteProtocol.h"
-#import "WXRoundedRect.h"
-#import "UIBezierPath+Weex.h"
-#import "WXSDKEngine.h"
-#import "WXUtility.h"
-#import "WXAssert.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXSDKEngine.h"
-#import <pthread/pthread.h>
-#import "WXMonitor.h"
-#import "WXSDKInstance_performance.h"
-
-@interface WXImageView : UIImageView
-
-@end
-
-@implementation WXImageView
-
-+ (Class)layerClass
-{
-    return [WXLayer class];
-}
-
-@end
-
-static dispatch_queue_t WXImageUpdateQueue;
-
-@interface WXImageComponent ()
-{
-    NSString * _imageSrc;
-    pthread_mutex_t _imageSrcMutex;
-    pthread_mutexattr_t _propertMutexAttr;
-    BOOL _shouldUpdateImage;
-    BOOL _mainImageSuccess;
-}
-
-@property (atomic, strong) NSString *placeholdSrc;
-@property (nonatomic, assign) CGFloat blurRadius;
-@property (nonatomic, assign) UIViewContentMode resizeMode;
-@property (nonatomic, assign) WXImageQuality imageQuality;
-@property (nonatomic, assign) WXImageSharp imageSharp;
-@property (nonatomic, strong) UIImage *image;
-@property (nonatomic, strong) id<WXImageOperationProtocol> imageOperation;
-@property (nonatomic, strong) id<WXImageOperationProtocol> placeholderOperation;
-@property (nonatomic) BOOL imageLoadEvent;
-@property (nonatomic) BOOL imageDownloadFinish;
-@property (nonatomic) BOOL downloadImageWithURL;
-@property (nonatomic ,strong) NSString* preUrl;
-
-@end
-
-@implementation WXImageComponent
-
-WX_EXPORT_METHOD(@selector(save:))
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _shouldUpdateImage = NO;
-        _async = YES;
-        if (!WXImageUpdateQueue) {
-            WXImageUpdateQueue = dispatch_queue_create("com.taobao.weex.ImageUpdateQueue", DISPATCH_QUEUE_SERIAL);
-        }
-        
-        pthread_mutexattr_init(&(_propertMutexAttr));
-        pthread_mutexattr_settype(&(_propertMutexAttr), PTHREAD_MUTEX_RECURSIVE);
-        pthread_mutex_init(&(_imageSrcMutex), &(_propertMutexAttr));
-        
-        if (attributes[@"src"]) {
-             pthread_mutex_lock(&(_imageSrcMutex));
-            _imageSrc = [[WXConvert NSString:attributes[@"src"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
-             pthread_mutex_unlock(&(_imageSrcMutex));
-        } else {
-            WXLogWarning(@"image src is nil");
-        }
-        [self configPlaceHolder:attributes];
-        
-        NSString *resizeMode = attributes[@"resize"];
-        if (!resizeMode) {
-            resizeMode = styles[@"resizeMode"];
-        }
-        _resizeMode = [WXConvert UIViewContentMode:resizeMode];
-        
-        _imageQuality = WXImageQualityNone;
-        if (styles[@"quality"]) {
-            _imageQuality = [WXConvert WXImageQuality:styles[@"quality"]];
-        }
-        if (attributes[@"quality"]) {
-            _imageQuality = [WXConvert WXImageQuality:attributes[@"quality"]];
-        }
-        
-        _downloadImageWithURL = YES;
-        if (attributes[@"compositing"]) {
-            _downloadImageWithURL = [WXConvert BOOL:attributes[@"compositing"]];
-        }
-        
-        [self configFilter:styles needUpdate:NO];
-        
-        _imageSharp = [WXConvert WXImageSharp:styles[@"sharpen"]];
-        _imageLoadEvent = NO;
-        _imageDownloadFinish = NO;
-    }
-    
-    return self;
-}
-
-- (void)configPlaceHolder:(NSDictionary*)attributes
-{
-    if (attributes[@"placeHolder"] || attributes[@"placeholder"]) {
-        self.placeholdSrc = [[WXConvert NSString:attributes[@"placeHolder"]?:attributes[@"placeholder"]]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
-    }
-}
-
-- (void)configFilter:(NSDictionary *)styles needUpdate:(BOOL)needUpdate
-{
-    if (styles[@"filter"]) {
-        NSString *filter = styles[@"filter"];
-        
-        NSString *pattern = @"blur\\((\\d+)(px)?\\)";
-        NSError *error = nil;
-        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
-                                                                               options:NSRegularExpressionCaseInsensitive
-                                                                                 error:&error];
-        NSArray *matches = [regex matchesInString:filter options:0 range:NSMakeRange(0, filter.length)];
-        if (matches && matches.count > 0) {
-            NSTextCheckingResult *match = matches[matches.count - 1];
-            NSRange matchRange = [match rangeAtIndex:1];
-            NSString *matchString = [filter substringWithRange:matchRange];
-            if (matchString && matchString.length > 0) {
-                _blurRadius = [matchString doubleValue];
-                if (needUpdate) {
-                    [self updateImage];
-                }
-            }
-        }
-    }
-}
-
-- (void)save:(WXKeepAliveCallback)resultCallback
-{
-    NSDictionary *info = [NSBundle mainBundle].infoDictionary;
-    if(!info[@"NSPhotoLibraryUsageDescription"]) {
-        if (resultCallback) {
-            resultCallback(@{
-                             @"success" : @(false),
-                             @"errorDesc": @"This maybe crash above iOS 10 because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data."
-                             }, NO);
-        }
-        return ;
-    }
-    
-    // iOS 11 needs a NSPhotoLibraryUsageDescription key for permission
-    if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"11.0")) {
-        if (!info[@"NSPhotoLibraryAddUsageDescription"]) {
-            if (resultCallback) {
-                resultCallback(@{
-                                 @"success" : @(false),
-                                 @"errorDesc": @"This maybe crash above iOS 11 because it attempted to save image without a usage description.  The app's Info.plist must contain an NSPhotoLibraryAddUsageDescription key with a string value explaining to the user how the app uses this data."
-                                 }, NO);
-            }
-            return;
-        }
-    }
-    
-    if (![self isViewLoaded]) {
-        if (resultCallback) {
-            resultCallback(@{@"success": @(false),
-                             @"errorDesc":@"the image is not ready"}, NO);
-        }
-        return;
-    }
-    UIImageView * imageView = (UIImageView*)self.view;
-    if (!resultCallback) {
-        // there is no need to callback any result;
-        UIImageWriteToSavedPhotosAlbum(imageView.image, nil, nil, NULL);
-    }else {
-        UIImageWriteToSavedPhotosAlbum(imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), (void*)CFBridgingRetain(resultCallback));
-    }
-}
-
-// the callback for PhotoAlbum.
-- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
-{
-    if (!contextInfo) {
-        return;
-    }
-    NSMutableDictionary * callbackResult = [NSMutableDictionary new];
-    BOOL success = false;
-    if (!error) {
-        success = true;
-    } else {
-        [callbackResult setObject:[error description] forKey:@"errorDesc"];
-    }
-    if (contextInfo) {
-        [callbackResult setObject:@(success) forKey:@"success"];
-        ((__bridge WXKeepAliveCallback)contextInfo)(callbackResult, NO);
-        CFRelease(contextInfo);
-    }
-}
-
-- (UIView *)loadView
-{
-    return [[WXImageView alloc] init];
-}
-
-- (void)addEvent:(NSString *)eventName {
-    if ([eventName isEqualToString:@"load"]) {
-        _imageLoadEvent = YES;
-    }
-}
-
-- (void)removeEvent:(NSString *)eventName {
-    if ([eventName isEqualToString:@"load"]) {
-        _imageLoadEvent = NO;
-    }
-}
-
-- (void)updateStyles:(NSDictionary *)styles
-{
-    if (styles[@"quality"]) {
-        _imageQuality = [WXConvert WXImageQuality:styles[@"quality"]];
-        [self updateImage];
-    }
-    
-    if (styles[@"sharpen"]) {
-        _imageSharp = [WXConvert WXImageSharp:styles[@"sharpen"]];
-        [self updateImage];
-    }
-    [self configFilter:styles needUpdate:YES];
-}
-
-- (void)dealloc
-{
-    [self cancelImage];
-    pthread_mutex_destroy(&(_imageSrcMutex));
-    pthread_mutexattr_destroy(&_propertMutexAttr);
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"src"]) {
-        [self setImageSrc:[[WXConvert NSString:attributes[@"src"]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
-    }
-    if (attributes[@"quality"]) {
-        _imageQuality = [WXConvert WXImageQuality:attributes[@"quality"]];
-        [self updateImage];
-    }
-    
-    [self configPlaceHolder:attributes];
-    
-    if (attributes[@"resize"]) {
-        _resizeMode = [WXConvert UIViewContentMode:attributes[@"resize"]];
-        self.view.contentMode = _resizeMode;
-    }
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    UIImageView *imageView = (UIImageView *)self.view;
-    imageView.contentMode = _resizeMode;
-    imageView.userInteractionEnabled = YES;
-    imageView.clipsToBounds = YES;
-    imageView.exclusiveTouch = YES;
-    imageView.isAccessibilityElement = YES;
-    
-    [self _clipsToBounds];
-    
-    [self updateImage];
-    
-}
-
-- (BOOL)_needsDrawBorder
-{
-    return NO;
-}
-
-- (void)_resetNativeBorderRadius
-{
-    if (_borderTopLeftRadius == _borderTopRightRadius && _borderTopRightRadius == _borderBottomLeftRadius && _borderBottomLeftRadius == _borderBottomRightRadius)
-    {
-        WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:self.calculatedFrame topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
-        _layer.cornerRadius = borderRect.radii.topLeft;
-        return;
-    }
-    [self _clipsToBounds];
-}
-
-- (BOOL)needsDrawRect
-{
-    if (_isCompositingChild) {
-        return YES;
-    } else {
-        return NO;
-    }
-}
-
-- (UIImage *)drawRect:(CGRect)rect;
-{
-    if (!self.image) {
-        [self updateImage];
-        return nil;
-    }
-    
-    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:rect topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
-
-    WXRadii *radii = borderRect.radii;    
-    if ([radii hasBorderRadius]) {
-        CGFloat topLeft = radii.topLeft, topRight = radii.topRight, bottomLeft = radii.bottomLeft, bottomRight = radii.bottomRight;
-        UIBezierPath *bezierPath = [UIBezierPath wx_bezierPathWithRoundedRect:rect topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
-        [bezierPath addClip];
-    }
-    return self.image;
-}
-
-- (void)viewWillUnload
-{
-    [super viewWillUnload];
-    [self cancelImage];
-    _image = nil;
-}
-
-- (void)_frameDidCalculated:(BOOL)isChanged
-{
-    [super _frameDidCalculated:isChanged];
-    
-    if ([self isViewLoaded] && isChanged) {
-        __weak typeof(self) weakSelf = self;
-        WXPerformBlockOnMainThread(^{
-            [weakSelf _clipsToBounds];
-        });
-    }
-}
-
-- (NSString *)imageSrc
-{
-    pthread_mutex_lock(&(_imageSrcMutex));
-    NSString * imageSrcCpy = [_imageSrc copy];
-    pthread_mutex_unlock(&(_imageSrcMutex));
-    
-    return imageSrcCpy;
-}
-
-- (void)setImageSrc:(NSString*)src
-{
-    if ([src isEqualToString:_imageSrc]) {
-        // if image src is equal to then ignore it.
-        return;
-    }
-    pthread_mutex_lock(&(_imageSrcMutex));
-    _imageSrc = src;
-    _imageDownloadFinish = NO;
-    ((UIImageView*)self.view).image = nil;
-    pthread_mutex_unlock(&(_imageSrcMutex));
-    
-    [self updateImage];
-}
-
-- (void)layoutDidFinish
-{
-    [super layoutDidFinish];
-    if (_shouldUpdateImage) {
-        [self updateImage];
-        _shouldUpdateImage = NO;
-    }
-}
-
-- (void)updateImage
-{
-    if (CGSizeEqualToSize(_view.frame.size, CGSizeZero)) {
-        _shouldUpdateImage = YES;
-        return;
-    }
-    __weak typeof(self) weakSelf = self;
-    if (_downloadImageWithURL && [[self imageLoader] respondsToSelector:@selector(setImageViewWithURL:url:placeholderImage:options:progress:completed:)]) {
-        _mainImageSuccess = NO;
-        
-        NSString *newURL = nil;
-        if (self.placeholdSrc) {
-            newURL = [self.placeholdSrc copy];
-            WX_REWRITE_URL([self placeholdSrc], WXResourceTypeImage, self.weexInstance)
-            NSDictionary* extInfo = @{@"instanceId":[self _safeInstanceId], @"pageURL": self.weexInstance.scriptURL ?: @""};
-            [[self imageLoader] setImageViewWithURL:(UIImageView*)self.view url:[NSURL URLWithString:newURL] placeholderImage:nil options:extInfo progress:nil completed:^(UIImage *image, NSError *error, WXImageLoaderCacheType cacheType, NSURL *imageURL) {
-                /* We cannot rely on image library even if we call setImage with placeholer before calling setImage with real url.
-                 The placeholder image may be downloaded and decoded after the real url, so finally we show the placeholder image by wrong. */
-                __strong typeof(weakSelf) strongSelf = weakSelf;
-                if (strongSelf) {
-                    UIImageView *imageView = (UIImageView *)strongSelf.view;
-                    if (imageView && imageView.image == image && strongSelf->_mainImageSuccess) {
-                        // reload image with main image url
-                        NSString* newURL = [[strongSelf imageSrc] copy];
-                        WX_REWRITE_URL([strongSelf imageSrc], WXResourceTypeImage, strongSelf.weexInstance)
-                        NSDictionary *userInfo = @{@"imageQuality":@(strongSelf.imageQuality), @"imageSharp":@(strongSelf.imageSharp),  @"blurRadius":@(strongSelf.blurRadius), @"instanceId":[strongSelf _safeInstanceId], @"pageURL": strongSelf.weexInstance.scriptURL ?: @""};
-                        [[strongSelf imageLoader] setImageViewWithURL:imageView url:[NSURL URLWithString:newURL] placeholderImage:nil options:userInfo progress:nil completed:^(UIImage *image, NSError *error, WXImageLoaderCacheType cacheType, NSURL *imageURL) {
-                            WXLogInfo(@"Image re-requested because placeholder may override main image. %@", imageURL);
-                        }];
-                    }
-                }
-            }];
-        }
-        newURL = [[self imageSrc] copy];
-        if ([newURL length] == 0) {
-            return;
-        }
-        WX_REWRITE_URL([self imageSrc], WXResourceTypeImage, self.weexInstance)
-        NSDictionary *userInfo = @{@"imageQuality":@(self.imageQuality), @"imageSharp":@(self.imageSharp),  @"blurRadius":@(self.blurRadius), @"instanceId":[self _safeInstanceId], @"pageURL": self.weexInstance.scriptURL ?: @""};
-        [[self imageLoader] setImageViewWithURL:(UIImageView*)self.view url:[NSURL URLWithString:newURL] placeholderImage:nil options:userInfo progress:^(NSInteger receivedSize, NSInteger expectedSize) {
-            // progress when loading image
-        } completed:^(UIImage *image, NSError *error, WXImageLoaderCacheType cacheType, NSURL *imageURL) {
-            __strong typeof(weakSelf) strongSelf = weakSelf;
-            if (strongSelf == nil) {
-                return;
-            }
-            
-            strongSelf.imageDownloadFinish = YES;
-            if (error) {
-                // log error message for error
-                WXLogError(@"Error downloading image: %@, detail:%@", imageURL.absoluteString, [error localizedDescription]);
-                
-                // retry set placeholder, maybe placeholer image can be downloaded
-                if (strongSelf.placeholdSrc) {
-                    NSString *newURL = [strongSelf.placeholdSrc copy];
-                    WX_REWRITE_URL([strongSelf placeholdSrc], WXResourceTypeImage, strongSelf.weexInstance)
-                    [[strongSelf imageLoader] setImageViewWithURL:(UIImageView*)strongSelf.view
-                                                              url:[NSURL URLWithString:newURL]
-                                                 placeholderImage:nil
-                                                          options:@{@"instanceId":[strongSelf _safeInstanceId], @"pageURL": strongSelf.weexInstance.scriptURL ?: @""}
-                                                         progress:nil
-                                                        completed:nil];
-                    return;
-                }
-                strongSelf->_mainImageSuccess = NO;
-            }
-            else {
-                strongSelf->_mainImageSuccess = YES;
-            }
-            UIImageView *imageView = (UIImageView *)strongSelf.view;
-            if (imageView && imageView.image != image) {
-                imageView.image = image;
-            }
-            if (strongSelf.imageLoadEvent) {
-                NSMutableDictionary *sizeDict = [NSMutableDictionary new];
-                sizeDict[@"naturalWidth"] = @0;
-                sizeDict[@"naturalHeight"] = @0;
-                if (!error) {
-                    sizeDict[@"naturalWidth"] = @(image.size.width * image.scale);
-                    sizeDict[@"naturalHeight"] = @(image.size.height * image.scale);
-                } else {
-                    [sizeDict setObject:[error description]?:@"" forKey:@"errorDesc"];
-                }
-                [strongSelf fireEvent:@"load" params:@{ @"success": error? @false : @true,@"size":sizeDict}];
-            }
-            NSString* curUrl = imageURL.absoluteString;
-            //check view/img size
-            if (!error && image && imageView && ![curUrl isEqualToString:self.preUrl]) {
-                self.preUrl = curUrl;
-                CGFloat screenScale = [[UIScreen mainScreen] scale];
-                double imageSize = image.size.width*image.scale  * image.size.height*image.scale;
-                double viewSize = imageView.frame.size.height *screenScale*  imageView.frame.size.width * screenScale;
-                CGFloat sizeRatio = imageSize/viewSize;
-                
-                //minDiffSize limt 40*40
-                if (sizeRatio>1.2 && (imageSize-viewSize) > 1600) {
-                    self.weexInstance.performance.imgWrongSizeNum++;
-                    [self.weexInstance.apmInstance updateDiffStats:KEY_PAGE_STATS_WRONG_IMG_SIZE_COUNT withDiffValue:1];
-                }
-                    
-                if (image.size.width* image.scale > 720 && image.size.height * image.scale> 1080) {
-                    [self.weexInstance.apmInstance updateDiffStats:KEY_PAGE_STATS_LARGE_IMG_COUNT withDiffValue:1];
-                }
-            }
-        }];
-    } else {
-        dispatch_async(WXImageUpdateQueue, ^{
-             __strong typeof(weakSelf) strongSelf = weakSelf;
-            if (strongSelf == nil) {
-                return;
-            }
-            
-            [strongSelf cancelImage];
-
-            void(^downloadFailed)(NSString *, NSError *) = ^void(NSString *url, NSError *error) {
-                weakSelf.imageDownloadFinish = YES;
-                WXLogError(@"Error downloading image: %@, detail:%@", url, [error localizedDescription]);
-            };
-
-            [strongSelf updatePlaceHolderWithFailedBlock:downloadFailed];
-            [strongSelf updateContentImageWithFailedBlock:downloadFailed];
-
-            if (!strongSelf.imageSrc && !strongSelf.placeholdSrc) {
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    strongSelf.layer.contents = nil;
-                    strongSelf.imageDownloadFinish = YES;
-                    [strongSelf readyToRender];
-                });
-            }
-        });
-    }
-}
-
-- (void)updatePlaceHolderWithFailedBlock:(void(^)(NSString *, NSError *))downloadFailedBlock
-{
-    NSString *placeholderSrc = self.placeholdSrc;
-    
-    if ([WXUtility isBlankString:placeholderSrc]) {
-        return;
-    }
-    
-    WXLogDebug(@"Updating image, component:%@, placeholder:%@ ", self.ref, placeholderSrc);
-    NSString *newURL = [self.placeholdSrc copy];
-    WX_REWRITE_URL(self.placeholdSrc, WXResourceTypeImage, self.weexInstance)
-    
-    __weak typeof(self) weakSelf = self;
-    self.placeholderOperation = [[self imageLoader] downloadImageWithURL:newURL imageFrame:self.calculatedFrame
-                                        userInfo:@{@"instanceId":[self _safeInstanceId], @"pageURL": self.weexInstance.scriptURL ?: @""}
-                                        completed:^(UIImage *image, NSError *error, BOOL finished)
-    {
-        dispatch_async(dispatch_get_main_queue(), ^{
-            __strong typeof(self) strongSelf = weakSelf;
-            UIImage *viewImage = ((UIImageView *)strongSelf.view).image;
-            if (error) {
-                downloadFailedBlock(placeholderSrc,error);
-                if ([strongSelf isViewLoaded] && !viewImage) {
-                    ((UIImageView *)(strongSelf.view)).image = nil;
-                    [strongSelf readyToRender];
-                }
-                return;
-            }
-            if (![placeholderSrc isEqualToString:strongSelf.placeholdSrc]) {
-                return;
-            }
-            
-            if ([strongSelf isViewLoaded] && !viewImage) {
-                ((UIImageView *)strongSelf.view).image = image;
-                strongSelf.imageDownloadFinish = YES;
-                [strongSelf readyToRender];
-            } else if (strongSelf->_isCompositingChild) {
-                strongSelf->_image = image;
-                strongSelf.imageDownloadFinish = YES;
-            }
-        });
-    }];
-}
-
-- (void)updateContentImageWithFailedBlock:(void(^)(NSString *, NSError *))downloadFailedBlock
-{
-    NSString *imageSrc = [NSString stringWithFormat:@"%@", self.imageSrc?:@""];
-    if ([WXUtility isBlankString:imageSrc]) {
-        WXLogError(@"image src is empty");
-        return;
-    }
-    
-    WXLogDebug(@"Updating image:%@, component:%@", self.imageSrc, self.ref);
-    NSDictionary *userInfo = @{@"imageQuality":@(self.imageQuality), @"imageSharp":@(self.imageSharp), @"blurRadius":@(self.blurRadius), @"instanceId":[self _safeInstanceId], @"pageURL": self.weexInstance.scriptURL ?: @""};
-    NSString * newURL = [imageSrc copy];
-    WX_REWRITE_URL(imageSrc, WXResourceTypeImage, self.weexInstance)
-    __weak typeof(self) weakSelf = self;
-    weakSelf.imageOperation = [[weakSelf imageLoader] downloadImageWithURL:newURL imageFrame:weakSelf.calculatedFrame userInfo:userInfo completed:^(UIImage *image, NSError *error, BOOL finished) {
-        dispatch_async(dispatch_get_main_queue(), ^{
-            __strong typeof(self) strongSelf = weakSelf;
-            
-            if (strongSelf.imageLoadEvent) {
-                NSMutableDictionary *sizeDict = [NSMutableDictionary new];
-                sizeDict[@"naturalWidth"] = @0;
-                sizeDict[@"naturalHeight"] = @0;
-                if (!error) {
-                    sizeDict[@"naturalWidth"] = @(image.size.width * image.scale);
-                    sizeDict[@"naturalHeight"] = @(image.size.height * image.scale);
-                } else {
-                    [sizeDict setObject:[error description]?:@"" forKey:@"errorDesc"];
-                }
-                [strongSelf fireEvent:@"load" params:@{ @"success": error? @false : @true,@"size":sizeDict}];
-            }
-            if (error) {
-                downloadFailedBlock(imageSrc, error);
-                [strongSelf readyToRender];
-                return ;
-            }
-            
-            if (![imageSrc isEqualToString:strongSelf.imageSrc]) {
-                return ;
-            }
-            
-            if ([strongSelf isViewLoaded]) {
-                strongSelf.imageDownloadFinish = YES;
-                ((UIImageView *)strongSelf.view).image = image;
-                [strongSelf readyToRender];
-            } else if (strongSelf->_isCompositingChild) {
-                strongSelf.imageDownloadFinish = YES;
-                strongSelf->_image = image;
-                [strongSelf setNeedsDisplay];
-            }
-        });
-    }];
-}
-
-- (NSString*) _safeInstanceId
-{
-    return self.weexInstance.instanceId ? : @"unknown";
-}
-
-- (void)readyToRender
-{
-    // when image download completely (success or failed)
-    if (self.weexInstance.trackComponent && _imageDownloadFinish) {
-        [super readyToRender];
-    }
-}
-
-- (void)cancelImage
-{
-    if ([[self imageLoader] respondsToSelector:@selector(cancelCurrentImageLoad:)]) {
-        [[self imageLoader] cancelCurrentImageLoad:(UIImageView*)_view];
-    }
-    _shouldUpdateImage = NO;
-    [_imageOperation cancel];
-    _imageOperation = nil;
-    [_placeholderOperation cancel];
-    _placeholderOperation = nil;
-}
-
-- (id<WXImgLoaderProtocol>)imageLoader
-{
-    static id<WXImgLoaderProtocol> imageLoader;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        imageLoader = [WXHandlerFactory handlerForProtocol:@protocol(WXImgLoaderProtocol)];
-    });
-    return imageLoader;
-}
-
-- (void)_clipsToBounds
-{
-    WXAssertMainThread();
-    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:self.view.bounds topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
-    // here is computed radii, do not use original style
-    WXRadii *radii = borderRect.radii;
-    
-    if ([radii radiusesAreEqual]) {
-        return;
-    }
-    
-    CGFloat topLeft = radii.topLeft, topRight = radii.topRight, bottomLeft = radii.bottomLeft, bottomRight = radii.bottomRight;
-    
-    // clip to border radius
-    UIBezierPath *bezierPath = [UIBezierPath wx_bezierPathWithRoundedRect:self.view.bounds topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
-    
-    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
-    shapeLayer.path = bezierPath.CGPath;
-    self.layer.mask = shapeLayer;
-    self.layer.cornerRadius = 0;
-}
-
-#ifdef UITEST
-- (NSString *)description
-{
-    NSString *superDescription = super.description;
-    NSRange semicolonRange = [superDescription rangeOfString:@";"];
-    NSString *replacement = [NSString stringWithFormat:@"; imageSrc: %@; imageQuality: %@; imageSharp: %@; ",_imageSrc,_imageQuality,_imageSharp];
-    return [superDescription stringByReplacingCharactersInRange:semicolonRange withString:replacement];
-}
-#endif
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h
deleted file mode 100644
index f95080c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-typedef enum
-{
-    WXPointIndicatorAlignCenter,    // point indicator align center
-    WXPointIndicatorAlignLeft,      // point indicator align left
-    WXPointIndicatorAlignRight,     // point indicator align right
-} WXPointIndicatorAlignStyle;
-
-@interface WXIndicatorView : UIView
-
-@property (nonatomic, assign)   NSInteger   pointCount;         // total count point of point indicator
-@property (nonatomic, assign)   NSInteger   currentPoint;       // current light index of point at point indicator
-@property (nonatomic, strong)   UIColor *pointColor;        // normal point color of point indicator
-@property (nonatomic, strong)   UIColor *lightColor;        // highlight point color of point indicator
-@property (nonatomic, assign)   WXPointIndicatorAlignStyle  alignStyle;    //align style of point indicator
-@property (nonatomic, assign)   CGFloat pointSize;          // point size of point indicator
-@property (nonatomic, assign)   CGFloat pointSpace;         // point space of point indicator
-
-@end
-
-
-@protocol WXIndicatorComponentDelegate <NSObject>
-
--(void)setIndicatorView:(WXIndicatorView *)indicatorView;
-
-@end
-
-@interface WXIndicatorComponent : WXComponent
-
-@property (nonatomic, weak) id<WXIndicatorComponentDelegate> delegate;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.m
deleted file mode 100644
index c6b8486..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.m
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXIndicatorComponent.h"
-#import "WXConvert.h"
-#import "WXSDKInstance.h"
-#import "WXUtility.h"
-
-@implementation WXIndicatorView
-
-@synthesize pointCount = _pointCount;
-@synthesize currentPoint = _currentPoint;
-
-- (id)initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    if (self) {
-        self.pointSpace = 5.0f;
-    }
-    return self;
-}
-
-- (void)setBackgroundColor:(UIColor *)backgroundColor
-{
-    [super setBackgroundColor:backgroundColor];
-}
-
-- (void)setPointCount:(NSInteger)pointCount
-{
-    _pointCount = pointCount;
-    WXPerformBlockOnMainThread(^{
-        [self setNeedsDisplay];
-    });
-}
-
-- (void)setCurrentPoint:(NSInteger)currentPoint
-{
-    if (currentPoint < _pointCount && currentPoint >= 0) {
-        _currentPoint = currentPoint;
-        WXPerformBlockOnMainThread(^{
-            [self setNeedsDisplay];
-        });
-    }
-}
-
-- (void)setPointSize:(CGFloat)pointSize
-{
-    _pointSize = pointSize;
-    WXPerformBlockOnMainThread(^{
-        [self setNeedsDisplay];
-    });
-}
-
-- (void)setPointSpace:(CGFloat)pointSpace
-{
-    _pointSpace = pointSpace;
-    WXPerformBlockOnMainThread(^{
-        [self setNeedsDisplay];
-    });
-}
-
-- (void)drawRect:(CGRect)rect
-{
-    if (self.alignStyle == WXPointIndicatorAlignCenter) {
-        CGFloat startX = 0.0f, centerX = self.frame.size.width / 2.0f;
-        if (self.pointCount % 2) {
-            startX = centerX - (self.pointSize + self.pointSpace) * (int)(self.pointCount / 2.0f) - self.pointSize / 2.0f;
-        } else {
-            startX = centerX - (self.pointSize + self.pointSpace) * (int)(self.pointCount / 2.0f) +  self.pointSpace / 2.0f;   
-        }
-        
-        CGContextRef context=UIGraphicsGetCurrentContext();
-        CGContextBeginPath(context);
-        
-        for (int i = 0; i < self.pointCount; i++) {
-            if (self.currentPoint == i) {
-                CGContextSetFillColorWithColor(context, self.lightColor.CGColor);
-                CGContextAddEllipseInRect(context, CGRectMake(startX, (self.frame.size.height - self.pointSize) / 2.0f, self.pointSize, self.pointSize));
-                CGContextFillPath(context);
-            } else {
-                CGContextSetFillColorWithColor(context, self.pointColor.CGColor);
-                CGContextAddEllipseInRect(context, CGRectMake(startX, (self.frame.size.height - self.pointSize) / 2.0f, self.pointSize, self.pointSize));
-                CGContextFillPath(context);
-            }
-            startX += self.pointSize + self.pointSpace;
-        }
-    } else if (self.alignStyle == WXPointIndicatorAlignRight) {
-        CGFloat startX = self.frame.size.width - self.pointSize * self.pointCount - self.pointSpace * (self.pointCount - 1) - 10;   //10 right margin
-        CGContextRef context=UIGraphicsGetCurrentContext();
-        CGContextBeginPath(context);
-        
-        for(int i = 0; i < self.pointCount; i++) {
-            if (self.currentPoint == i) {
-                CGContextSetFillColorWithColor(context, self.lightColor.CGColor);
-                CGContextAddEllipseInRect(context, CGRectMake(startX, (self.frame.size.height - self.pointSize) / 2.0f, self.pointSize, self.pointSize));
-                CGContextFillPath(context);
-            } else {
-                CGContextSetFillColorWithColor(context, self.pointColor.CGColor);
-                CGContextAddEllipseInRect(context, CGRectMake(startX, (self.frame.size.height - self.pointSize) / 2.0f, self.pointSize, self.pointSize));
-                CGContextFillPath(context);
-            }
-            startX += self.pointSize + self.pointSpace;
-        }
-    } else if (self.alignStyle == WXPointIndicatorAlignLeft) {
-        CGFloat startX = 10.0f;   //10 left margin
-        CGContextRef context=UIGraphicsGetCurrentContext();
-        CGContextBeginPath(context);
-        for(int i = 0; i < self.pointCount; i++) {
-            if (self.currentPoint == i) {
-                CGContextSetFillColorWithColor(context, self.lightColor.CGColor);
-                CGContextAddEllipseInRect(context, CGRectMake(startX, (self.frame.size.height - self.pointSize) / 2.0f, self.pointSize, self.pointSize));
-                CGContextFillPath(context);
-            } else {
-                CGContextSetFillColorWithColor(context, self.pointColor.CGColor);
-                CGContextAddEllipseInRect(context, CGRectMake(startX, (self.frame.size.height - self.pointSize) / 2.0f, self.pointSize, self.pointSize));
-                CGContextFillPath(context);
-            }
-            startX += self.pointSize + self.pointSpace;
-        }
-    }
-}
-
-@end
-
-@interface WXIndicatorComponent()
-
-@property (nonatomic, strong) WXIndicatorView *indicatorView;
-
-@property (nonatomic, strong) UIColor *itemColor;
-@property (nonatomic, strong) UIColor *itemSelectedColor;
-@property (nonatomic) CGFloat itemSize;
-
-@end
-
-@implementation WXIndicatorComponent
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _itemColor = styles[@"itemColor"] ? [WXConvert UIColor:styles[@"itemColor"]]:[UIColor colorWithRed:0xff/255.0f green:0xff/255.0f blue:0xff/255.0f alpha:0.5f];
-        _itemSelectedColor = styles[@"itemSelectedColor"] ? [WXConvert UIColor:styles[@"itemSelectedColor"]]:[UIColor colorWithRed:0xff/255.0f green:0xd5/255.0f blue:0x45/255.0f alpha:1.0f];
-        _itemSize = styles[@"itemSize"] ? [WXConvert WXPixelType:styles[@"itemSize"] scaleFactor:self.weexInstance.pixelScaleFactor] : 5.0f;
-    }
-    return self;
-}
-
-- (UIView *)loadView
-{
-    return [[WXIndicatorView alloc] init];
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    
-    _indicatorView = (WXIndicatorView *)self.view;
-    _indicatorView.alignStyle = WXPointIndicatorAlignCenter;
-    _indicatorView.userInteractionEnabled = NO;
-    _indicatorView.pointColor = _itemColor;
-    _indicatorView.lightColor = _itemSelectedColor;
-    _indicatorView.pointSize = _itemSize;
-    
-    if (self.delegate && [self.delegate respondsToSelector:@selector(setIndicatorView:)]) {
-        [self.delegate setIndicatorView:_indicatorView];
-    }
-    
-}
-
-- (void)layoutDidFinish
-{
-    if (self.delegate && [self.delegate respondsToSelector:@selector(setIndicatorView:)]) {
-        [self.delegate setIndicatorView:_indicatorView];
-    }
-}
-
-- (void)updateStyles:(NSDictionary *)styles
-{
-    BOOL styleChange = NO;
-    
-    if (styles[@"itemColor"]) {
-        styleChange = YES;
-        _itemColor = [WXConvert UIColor:styles[@"itemColor"]];
-        [_indicatorView setPointColor:_itemColor];
-    }
-    
-    if (styles[@"itemSelectedColor"]) {
-        styleChange = YES;
-        _itemSelectedColor = [WXConvert UIColor:styles[@"itemSelectedColor"]];
-        [_indicatorView setLightColor:_itemSelectedColor];
-    }
-    
-    if (styles[@"itemSize"]) {
-        styleChange = YES;
-        _itemSize = [WXConvert WXPixelType:styles[@"itemSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
-        [_indicatorView setPointSize:_itemSize];
-    }
-    
-    if (styleChange) {
-        WXPerformBlockOnMainThread(^{
-            [self setNeedsDisplay];
-        });
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h
deleted file mode 100644
index f2b75fa..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXScrollerComponent.h"
-
-@interface WXListComponent : WXScrollerComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXListComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXListComponent.mm
deleted file mode 100644
index 929f289..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXListComponent.mm
+++ /dev/null
@@ -1,1077 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXListComponent.h"
-#import "WXCellComponent.h"
-#import "WXHeaderComponent.h"
-#import "WXComponent.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+Layout.h"
-#import "NSArray+Weex.h"
-#import "WXAssert.h"
-#import "WXMonitor.h"
-#import "WXUtility.h"
-#import "NSObject+WXSwizzle.h"
-#import "WXSDKInstance_private.h"
-#import "WXRefreshComponent.h"
-#import "WXLoadingComponent.h"
-
-@interface WXListComponent () <UITableViewDataSource, UITableViewDelegate, WXCellRenderDelegate, WXHeaderRenderDelegate>
-
-@property (nonatomic, assign) NSUInteger currentTopVisibleSection;
-// Set whether the content offset position all the way to the bottom
-@property (assign, nonatomic) BOOL contentAttachBottom;
-
-@end
-
-@interface WXTableView : UITableView
-
-@end
-
-@implementation WXTableView
-
-+ (BOOL)requiresConstraintBasedLayout
-{
-    return NO;
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    if ([(id <WXScrollerProtocol>) self.wx_component respondsToSelector:@selector(requestGestureShouldStopPropagation:shouldReceiveTouch:)]) {
-        return [(id <WXScrollerProtocol>) self.wx_component requestGestureShouldStopPropagation:gestureRecognizer shouldReceiveTouch:touch];
-    }
-    else{
-        return YES;
-    }
-}
-
-- (void)layoutSubviews
-{
-    [super layoutSubviews];
-    [self.wx_component layoutDidFinish];
-}
-
-- (void)setContentOffset:(CGPoint)contentOffset
-{
-    // FIXME: side effect caused by hooking _adjustContentOffsetIfNecessary.
-    // When UITableView is pulled down and finger releases,contentOffset will be set from -xxxx to about -0.5(greater than -0.5), then contentOffset will be reset to zero by calling _adjustContentOffsetIfNecessary.
-    // So hooking _adjustContentOffsetIfNecessary will always cause remaining 1px space between list's top and navigator.
-    // Demo: http://dotwe.org/895630945793a9a044e49abe39cbb77f
-    // Have to reset contentOffset to zero manually here.
-    if (fabs(contentOffset.y) < 0.5) {
-        contentOffset.y = 0;
-    }
-    if (isnan(contentOffset.x)) {
-        contentOffset.x = 0;
-    }
-    if(isnan(contentOffset.y)) {
-        contentOffset.y = 0;
-    }
-    
-    [super setContentOffset:contentOffset];
-}
-
-- (void)setFrame:(CGRect)frame {
-    [super setFrame:frame];
-    if (![self.wx_component isKindOfClass:[WXListComponent class]]) return;
-    BOOL contentAttachBottom = [(WXListComponent *)self.wx_component contentAttachBottom];
-    if (contentAttachBottom) {
-        CGFloat offsetHeight = self.contentSize.height - CGRectGetHeight(self.bounds);
-        if (offsetHeight >= 0) {
-            [self setContentOffset:CGPointMake(0, offsetHeight) animated:NO];
-        }
-    }
-}
-
-- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
-{
-    [super setContentOffset:contentOffset animated:animated];
-    BOOL scrollStartEvent = [[self.wx_component valueForKey:@"_scrollStartEvent"] boolValue];
-    id scrollEventListener = [self.wx_component valueForKey:@"_scrollEventListener"];
-    
-    if (animated && (scrollStartEvent ||scrollEventListener)  && !WXPointEqualToPoint(contentOffset, self.contentOffset)) {
-        CGFloat scaleFactor = self.wx_component.weexInstance.pixelScaleFactor;
-        NSDictionary *contentSizeData = @{@"width":@(self.contentSize.width / scaleFactor),
-                                          @"height":@(self.contentSize.height / scaleFactor)};
-        NSDictionary *contentOffsetData = @{@"x":@(-self.contentOffset.x / scaleFactor),
-                                            @"y":@(-self.contentOffset.y / scaleFactor)};
-        if (scrollStartEvent) {
-            [self.wx_component fireEvent:@"scrollstart" params:@{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData} domChanges:nil];
-        }
-        if (scrollEventListener) {
-            WXScrollerComponent *component = (WXScrollerComponent *)self.wx_component;
-            component.scrollEventListener(component, @"scrollstart", @{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData});
-        }
-    }
-}
-
-@end
-
-// WXText is a non-public is not permitted
-@interface WXSectionComponent : NSObject<NSCopying>
-
-@property (nonatomic, strong) WXHeaderComponent *header;
-@property (nonatomic, strong) NSMutableArray<WXCellComponent *> *rows;
-
-@end
-
-@implementation WXSectionComponent
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-        _rows = [NSMutableArray array];
-    }
-    return self;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    WXSectionComponent *newSection = [[[self class] allocWithZone:zone] init];
-    newSection.header = _header;
-    newSection.rows = [_rows mutableCopyWithZone:zone];
-    
-    return newSection;
-}
-
-- (NSString *)description
-{
-    return [NSString stringWithFormat:@"%@\n%@", [_header description], [_rows description]];
-}
-@end
-
-@implementation WXListComponent
-{
-    __weak UITableView * _tableView;
-
-    // Only accessed on component thread
-    NSMutableArray<WXSectionComponent *> *_sections;
-    // Only accessed on main thread
-    NSMutableArray<WXSectionComponent *> *_completedSections;
-    NSUInteger _previousLoadMoreRowNumber;
-    // insert & reload & batch
-    NSString *_updataType;
-    
-    BOOL _isUpdating;
-    NSMutableArray<void(^)(void)> *_updates;
-    NSTimeInterval _reloadInterval;
-}
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _sections = [NSMutableArray array];
-        _completedSections = [NSMutableArray array];
-        _reloadInterval = attributes[@"reloadInterval"] ? [WXConvert CGFloat:attributes[@"reloadInterval"]]/1000 : 0;
-        _updataType = [WXConvert NSString:attributes[@"updataType"]]?:@"insert";
-        _contentAttachBottom = [WXConvert BOOL:attributes[@"contentAttachBottom"]];
-        [self fixFlicker];
-    }
-    
-    return self;
-}
-
-- (void)dealloc
-{
-    if (_tableView) {
-        _tableView.delegate = nil;
-        _tableView.dataSource = nil;
-    }
-}
-
-- (UIView *)loadView
-{
-    return [[WXTableView alloc] init];
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    
-    _tableView = (UITableView *)self.view;
-    _tableView.allowsSelection = NO;
-    _tableView.allowsMultipleSelection = NO;
-    _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
-    _tableView.delegate = self;
-    _tableView.dataSource = self;
-    _tableView.userInteractionEnabled = YES;
-    
-    _tableView.estimatedRowHeight = 0;
-    _tableView.estimatedSectionFooterHeight = 0;
-    _tableView.estimatedSectionHeaderHeight = 0;
-}
-
-- (void)viewWillUnload
-{
-    [super viewWillUnload];
-    
-    _tableView.delegate = nil;
-    _tableView.dataSource = nil;
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    [super updateAttributes:attributes];
-    
-    if (attributes[@"reloadInterval"]) {
-        _reloadInterval = [WXConvert CGFloat:attributes[@"reloadInterval"]] / 1000;
-    }
-    if (attributes[@"updataType"]) {
-        _updataType = [WXConvert NSString:attributes[@"updataType"]];
-    }
-    if (attributes[@"contentAttachBottom"]) {
-        _contentAttachBottom = [WXConvert BOOL:attributes[@"contentAttachBottom"]];
-    }
-}
-
-- (void)setContentSize:(CGSize)contentSize
-{
-    // Do Nothing
-}
-
-- (void)_handleFirstScreenTime
-{
-    // Do Nothing, firstScreenTime is set by cellDidRendered:
-}
-
-- (void)scrollToComponent:(WXComponent *)component withOffset:(CGFloat)offset animated:(BOOL)animated
-{
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    // http://dotwe.org/vue/aa1af34e5fc745c0f1520e346904682a
-    // ignore scroll action if contentSize smaller than scroller frame
-    if (scrollView.contentSize.height < scrollView.frame.size.height) {
-        return;
-    }
-    
-    CGPoint contentOffset = _tableView.contentOffset;
-    CGFloat contentOffsetY = 0;
-    
-    WXComponent *cellComponent = component;
-    CGRect cellRect;
-    while (cellComponent) {
-        if ([cellComponent isKindOfClass:[WXCellComponent class]]) {
-            NSIndexPath *toIndexPath = [self indexPathForCell:(WXCellComponent*)cellComponent sections:_completedSections];
-            cellRect = [_tableView rectForRowAtIndexPath:toIndexPath];
-            break;
-        }
-        if ([cellComponent isKindOfClass:[WXHeaderComponent class]]) {
-            NSUInteger toIndex = [self indexForHeader:(WXHeaderComponent *)cellComponent sections:_completedSections];
-            cellRect = [_tableView rectForSection:toIndex];
-            break;
-        }
-        contentOffsetY += cellComponent.calculatedFrame.origin.y;
-        cellComponent = cellComponent.supercomponent;
-    }
-    
-    contentOffsetY += cellRect.origin.y;
-    contentOffsetY += offset * self.weexInstance.pixelScaleFactor;
-    
-    if (_tableView.contentSize.height >= _tableView.frame.size.height && contentOffsetY > _tableView.contentSize.height - _tableView.frame.size.height) {
-        contentOffset.y = _tableView.contentSize.height - _tableView.frame.size.height;
-    } else {
-        contentOffset.y = contentOffsetY;
-    }
-    
-    [_tableView setContentOffset:contentOffset animated:animated];
-}
-
-
-#pragma mark - Inheritance
-
-- (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    if ([subcomponent isKindOfClass:[WXCellComponent class]]) {
-        ((WXCellComponent *)subcomponent).delegate = self;
-    } else if ([subcomponent isKindOfClass:[WXHeaderComponent class]]) {
-        ((WXHeaderComponent *)subcomponent).delegate = self;
-    } else if (![subcomponent isKindOfClass:[WXRefreshComponent class]]
-               && ![subcomponent isKindOfClass:[WXLoadingComponent class]]
-               && subcomponent->_positionType != WXPositionTypeFixed) {
-        WXLogError(@"list only support cell/header/refresh/loading/fixed-component as child.");
-        subcomponent->_isViewTreeIgnored = YES; // do not show this element.
-    }
-    
-    BOOL inserted = [super _insertSubcomponent:subcomponent atIndex:index];
-    
-    if (![subcomponent isKindOfClass:[WXHeaderComponent class]]
-        && ![subcomponent isKindOfClass:[WXCellComponent class]]) {
-        // Don't insert section if subcomponent is not header or cell
-        return inserted;
-    }
-    
-    NSIndexPath *indexPath = [self indexPathForSubIndex:index];
-    
-    if ([subcomponent isKindOfClass:[WXHeaderComponent class]] || _sections.count <= indexPath.section) {
-        // conditions to insert section: insert a header or insert first cell of table view
-        // this will be updated by recycler's update controller in the future
-        WXSectionComponent *insertSection = [WXSectionComponent new];
-        BOOL keepScrollPosition = NO;
-        if ([subcomponent isKindOfClass:[WXHeaderComponent class]]) {
-            WXHeaderComponent *header = (WXHeaderComponent*)subcomponent;
-            insertSection.header = header;
-            keepScrollPosition = header.keepScrollPosition;
-        }
-        
-        NSUInteger insertIndex = indexPath.section;
-        WXSectionComponent *reloadSection;
-        if (insertIndex > 0 && insertIndex <= _sections.count
-            && [subcomponent isKindOfClass:[WXHeaderComponent class]]) {
-            // insert a header in the middle, one section may divide into two
-            // so the original section need to be reloaded
-            
-            /*
-             Here we may encounter a problem that _sections is not always containing all cells of list.
-             Because cell are not added to _sections until cellDidLayout. So if a cell is not added to _sections,
-             
-                NSIndexPath *indexPathBeforeHeader = [self indexPathForSubIndex:index - 1];
-             The indexPathForSubIndex method use all sub components of list to calculate row in section. This would
-             be incorrect if a cell is not added to _sections. And the split is incorrect resulting some cells put to
-             wrong WXSectionComponent and then UITableView crash.
-             
-             In fixed version, we use _subcomponents[index - 1] to get the last component that should be put to original section
-             and get the index of it in section rows.
-             */
-            
-            if (_sections[insertIndex - 1].rows.count > 0) {
-                WXComponent* componentBeforeHeader = _subcomponents[index - 1];
-                
-                NSArray *rowsToSeparate = _sections[insertIndex - 1].rows;
-                NSUInteger indexOfLastComponentAfterSeparate = [rowsToSeparate indexOfObject:componentBeforeHeader];
-                if (indexOfLastComponentAfterSeparate != NSNotFound && componentBeforeHeader != [rowsToSeparate lastObject]) {
-                    reloadSection = _sections[insertIndex - 1];
-                    insertSection.rows = [[rowsToSeparate subarrayWithRange:NSMakeRange(indexOfLastComponentAfterSeparate + 1, rowsToSeparate.count - (indexOfLastComponentAfterSeparate + 1))] mutableCopy];
-                    reloadSection.rows = [[rowsToSeparate subarrayWithRange:NSMakeRange(0, indexOfLastComponentAfterSeparate + 1)]  mutableCopy];
-                }
-            }
-            
-//          This is wrong!!!
-//            NSIndexPath *indexPathBeforeHeader = [self indexPathForSubIndex:index - 1];
-//            if (_sections[insertIndex - 1].rows.count != 0 && indexPathBeforeHeader.row < _sections[insertIndex - 1].rows.count - 1) {
-//                reloadSection = _sections[insertIndex - 1];
-//                NSArray *rowsToSeparate = reloadSection.rows;
-//                insertSection.rows = [[rowsToSeparate subarrayWithRange:NSMakeRange(indexPathBeforeHeader.row + 1, rowsToSeparate.count - indexPathBeforeHeader.row - 1)] mutableCopy];
-//                reloadSection.rows = [[rowsToSeparate subarrayWithRange:NSMakeRange(0, indexPathBeforeHeader.row + 1)]  mutableCopy];
-//            }
-        }
-    
-        [_sections insertObject:insertSection atIndex:insertIndex];
-        WXSectionComponent *completedInsertSection = [insertSection copy];
-        WXSectionComponent *completedReloadSection;
-        if (reloadSection) {
-            completedReloadSection = [reloadSection copy];
-        }
-        
-        [self.weexInstance.componentManager _addUITask:^{
-            WXLogDebug(@"Insert section:%ld", (unsigned long)insertIndex);
-            
-            [UIView performWithoutAnimation:^{
-                
-                @try {
-                    [_tableView beginUpdates];
-                    
-                    [_completedSections insertObject:completedInsertSection atIndex:insertIndex];
-                    if (completedReloadSection) {
-                        WXLogDebug(@"Reload section:%lu", (unsigned long)(insertIndex - 1));
-                        _completedSections[insertIndex - 1] = completedReloadSection;
-                    }
-                    
-                    [self _insertTableViewSectionAtIndex:insertIndex keepScrollPosition:keepScrollPosition animation:UITableViewRowAnimationNone];
-                    
-                    if (completedReloadSection) {
-                        [_tableView reloadSections:[NSIndexSet indexSetWithIndex:insertIndex - 1] withRowAnimation:UITableViewRowAnimationNone];
-                    }
-                    
-                    [_tableView endUpdates];
-                } @catch (NSException *exception) {
-                    WXLogError(@"list insert component occurs exception %@", exception);
-                } @finally {
-                     // nothing
-                }
-                
-            }];
-            
-        }];
-        
-    }
-    
-    return inserted;
-}
-
-- (void)insertSubview:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    //Here will not insert cell or header's view again
-    if (![subcomponent isKindOfClass:[WXCellComponent class]]
-        && ![subcomponent isKindOfClass:[WXHeaderComponent class]]) {
-        [super insertSubview:subcomponent atIndex:index];
-    }
-}
-
-#pragma mark - WXHeaderRenderDelegate
-
-- (float)headerWidthForLayout:(WXHeaderComponent *)cell
-{
-    return [self safeContainerStyleWidth];
-}
-
-- (void)headerDidLayout:(WXHeaderComponent *)header
-{
-    [self.weexInstance.componentManager _addUITask:^{
-        // trigger section header update
-        [UIView performWithoutAnimation:^{
-            [_tableView beginUpdates];
-            
-            NSUInteger reloadIndex = [self indexForHeader:header sections:_completedSections];
-            [_tableView reloadSections:[NSIndexSet indexSetWithIndex:reloadIndex] withRowAnimation:UITableViewRowAnimationNone];
-            
-            [_tableView endUpdates];
-        }];
-    }];
-}
-
-- (void)headerDidRemove:(WXHeaderComponent *)header
-{
-    NSUInteger headerIndex = [self indexForHeader:header sections:_sections];
-    // this will be updated by recycler's update controller in the future
-    WXSectionComponent *headerSection = _sections[headerIndex];
-    WXSectionComponent *reloadSection;
-    NSUInteger reloadIndex = -1;
-    BOOL isDeleteSection = NO;
-    if (headerIndex == 0 && headerSection.rows.count > 0) {
-        // delete a header in the first section and the section still has cells
-        // reload the first section
-        reloadIndex = 0;
-        reloadSection = _sections[reloadIndex];
-        _sections[reloadIndex].header = nil;
-    } else if (headerIndex > 0 && headerSection.rows.count > 0) {
-        // delete a header in the middle, two sections merge into one
-        // so one section need to be deleted and the other should be relo
-        isDeleteSection = YES;
-        reloadIndex = headerIndex - 1;
-        reloadSection = _sections[reloadIndex];
-        reloadSection.rows = [[reloadSection.rows arrayByAddingObjectsFromArray:headerSection.rows] mutableCopy];
-        [_sections removeObjectAtIndex:headerIndex];
-    } else {
-        // delete a header with no cell in that section
-        // just delete the section
-        isDeleteSection = YES;
-        [_sections removeObjectAtIndex:headerIndex];
-    }
-    
-    WXSectionComponent *completedReloadSection;
-    if (reloadSection) {
-        completedReloadSection = [reloadSection copy];
-    }
-    BOOL keepScrollPosition = header.keepScrollPosition;
-    
-    [self.weexInstance.componentManager _addUITask:^{
-        if (isDeleteSection) {
-            WXLogDebug(@"delete section:%lu", (unsigned long)headerIndex);
-            [_completedSections removeObjectAtIndex:headerIndex];
-        }
-        
-        if (reloadIndex == 0 && !isDeleteSection) {
-            _completedSections[reloadIndex].header = nil;
-        }
-        
-        if (completedReloadSection) {
-            WXLogDebug(@"Reload section:%lu", (unsigned long)reloadIndex);
-            _completedSections[reloadIndex] = completedReloadSection;
-        }
-        
-        [UIView performWithoutAnimation:^{
-            [_tableView beginUpdates];
-            if (isDeleteSection) {
-                [self _deleteTableViewSectionAtIndex:headerIndex keepScrollPosition:keepScrollPosition animation:UITableViewRowAnimationNone];
-            }
-            
-            if (completedReloadSection) {
-                [_tableView reloadSections:[NSIndexSet indexSetWithIndex:reloadIndex] withRowAnimation:UITableViewRowAnimationNone];
-            }
-            
-            [_tableView endUpdates];
-        }];
-        
-    }];
-}
-
-#pragma mark - WXCellRenderDelegate
-
-- (float)containerWidthForLayout:(WXCellComponent *)cell
-{
-    return [self safeContainerStyleWidth];
-}
-
-- (void)cellDidRemove:(WXCellComponent *)cell
-{
-    WXAssertComponentThread();
-    
-    NSIndexPath *indexPath = [self indexPathForCell:cell sections:_sections];
-    if(!indexPath){
-        //protect when cell not exist in sections
-        return;
-    }
-    [self removeCellForIndexPath:indexPath withSections:_sections];
-    
-    [self.weexInstance.componentManager _addUITask:^{
-        [self removeCellForIndexPath:indexPath withSections:_completedSections];
-        
-        WXLogDebug(@"Delete cell:%@ at indexPath:%@", cell.ref, indexPath);
-        if (cell.deleteAnimation == UITableViewRowAnimationNone) {
-            [UIView performWithoutAnimation:^{
-                [self _deleteTableViewCellAtIndexPath:indexPath keepScrollPosition:cell.keepScrollPosition animation:UITableViewRowAnimationNone];
-            }];
-        } else {
-            [self _deleteTableViewCellAtIndexPath:indexPath keepScrollPosition:cell.keepScrollPosition animation:cell.deleteAnimation];
-        }
-    }];
-}
-
-- (void)cellDidLayout:(WXCellComponent *)cell
-{
-    WXAssertComponentThread() ;
-    
-    NSUInteger index = [self.subcomponents indexOfObject:cell];
-    NSIndexPath *indexPath = [self indexPathForSubIndex:index];
-
-    NSInteger sectionNum = indexPath.section;
-    if (sectionNum >= [_sections count] || sectionNum < 0) {
-        // try to protect sectionNum out of range.
-        return;
-    }
-    NSInteger row = indexPath.row;
-    NSMutableArray *sections = _sections;
-    WXSectionComponent *section = sections[sectionNum];
-    WXAssert(section, @"no section found for section number:%ld", sectionNum);
-    NSMutableArray *completedSections;
-    BOOL isReload = [section.rows containsObject:cell];
-    if (!isReload && row > [section.rows count]) {
-        // protect crash when row out of bounds
-        return ;
-    }
-    if (!isReload) {
-        [section.rows insertObject:cell atIndex:row];
-        // deep copy
-        completedSections = [[NSMutableArray alloc] initWithArray:sections copyItems:YES];;
-    }
-    
-    [self.weexInstance.componentManager _addUITask:^{
-        if (!isReload) {
-            WXLogDebug(@"Insert cell:%@ at indexPath:%@", cell.ref, indexPath);
-            _completedSections = completedSections;
-            if (cell.insertAnimation == UITableViewRowAnimationNone) {
-                [UIView performWithoutAnimation:^{
-                    [self _insertTableViewCellAtIndexPath:indexPath keepScrollPosition:cell.keepScrollPosition animation:UITableViewRowAnimationNone];
-                }];
-            } else {
-                [self _insertTableViewCellAtIndexPath:indexPath keepScrollPosition:cell.keepScrollPosition animation:cell.insertAnimation];
-            }
-        } else {
-            WXLogInfo(@"Reload cell:%@ at indexPath:%@", cell.ref, indexPath);
-            [UIView performWithoutAnimation:^{
-                [_tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
-                [self handleAppear];
-            }];
-        }
-    }];
-}
-
-- (void)cellDidRendered:(WXCellComponent *)cell
-{
-    WXAssertMainThread();
-    
-    if (WX_MONITOR_INSTANCE_PERF_IS_RECORDED(WXPTFirstScreenRender, self.weexInstance) && !self.weexInstance.onRenderProgress) {
-        // improve performance
-        return;
-    }
-    
-    NSIndexPath *indexPath = [self indexPathForCell:cell sections:_completedSections];
-    if (!indexPath || indexPath.section >= [_tableView numberOfSections] ||
-        indexPath.row < 0 || indexPath.row >= [_tableView numberOfRowsInSection:indexPath.section]) {
-        WXLogWarning(@"Rendered cell:%@ out of range, sections:%@", cell, _completedSections);
-        return;
-    }
-    
-    CGRect cellRect = [_tableView rectForRowAtIndexPath:indexPath];
-    if (cellRect.origin.y + cellRect.size.height >= _tableView.frame.size.height) {
-        WX_MONITOR_INSTANCE_PERF_END(WXPTFirstScreenRender, self.weexInstance);
-    }
-    
-    if (self.weexInstance.onRenderProgress) {
-        CGRect renderRect = [_tableView convertRect:cellRect toView:self.weexInstance.rootView];
-        self.weexInstance.onRenderProgress(renderRect);
-    }
-}
-
-- (void)cell:(WXCellComponent *)cell didMoveToIndex:(NSUInteger)index
-{
-    WXAssertComponentThread();
-    
-    NSIndexPath *fromIndexPath = [self indexPathForCell:cell sections:_sections];
-    NSIndexPath *toIndexPath = [self indexPathForSubIndex:index];
-    if (toIndexPath.row > [_sections[toIndexPath.section].rows count] || toIndexPath.row < 0) {
-        WXLogError(@"toIndexPath %@ is out of range as the current is %lu",toIndexPath ,(unsigned long)[_sections[toIndexPath.section].rows count]);
-        return;
-    }
-    [self removeCellForIndexPath:fromIndexPath withSections:_sections];
-    [self insertCell:cell forIndexPath:toIndexPath withSections:_sections];
-    
-    [self.weexInstance.componentManager _addUITask:^{
-        if (_reloadInterval > 0) {
-            // use [UITableView reloadData] to do batch updates, will move to recycler's update controller
-            __weak typeof(self) weakSelf = self;
-            if (!_updates) {
-                _updates = [NSMutableArray array];
-            }
-            [_updates addObject:^{
-                __strong typeof(weakSelf) strongSelf = weakSelf;
-                [strongSelf removeCellForIndexPath:fromIndexPath withSections:strongSelf->_completedSections];
-                [strongSelf insertCell:cell forIndexPath:toIndexPath withSections:strongSelf->_completedSections];
-            }];
-            
-            [self checkReloadData];
-        } else {
-            [self removeCellForIndexPath:fromIndexPath withSections:_completedSections];
-            [self insertCell:cell forIndexPath:toIndexPath withSections:_completedSections];
-            [UIView performWithoutAnimation:^{
-                @try {
-                    [_tableView beginUpdates];
-                    [_tableView moveRowAtIndexPath:fromIndexPath toIndexPath:toIndexPath];
-                    [self handleAppear];
-                    [_tableView endUpdates];
-                }@catch(NSException * exception){
-                    WXLogDebug(@"move cell exception: %@", [exception description]);
-                }@finally {
-                    // do nothing
-                }
-            }];
-        }
-    }];
-}
-
-- (void)checkReloadData
-{
-    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_reloadInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-        if (_isUpdating || _updates.count == 0) {
-            return ;
-        }
-        
-        _isUpdating = YES;
-        NSArray *updates = [_updates copy];
-        [_updates removeAllObjects];
-        for (void(^update)(void) in updates) {
-            update();
-        }
-        [_tableView reloadData];
-        _isUpdating = NO;
-        
-        [self checkReloadData];
-    });
-}
-
-- (void)addStickyComponent:(WXComponent *)sticky
-{
-    
-}
-
-- (void)removeStickyComponent:(WXComponent *)sticky
-{
-
-}
-#pragma mark - TableView delegate
-
-- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    
-}
-
-- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXLogDebug(@"Did end displaying cell:%@, at index path:%@", cell, indexPath);
-    NSArray *visibleIndexPaths = [tableView indexPathsForVisibleRows];
-    if (![visibleIndexPaths containsObject:indexPath]) {
-        if (cell.contentView.subviews.count > 0) {
-            UIView *wxCellView = [cell.contentView.subviews firstObject];
-            // Must invoke synchronously otherwise it will remove the view just added.
-            WXCellComponent *cellComponent = (WXCellComponent *)wxCellView.wx_component;
-            if (cellComponent.isRecycle) {
-                [cellComponent _unloadViewWithReusing:YES];
-            }
-        }
-    }
-}
-
-- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXCellComponent *cell = [self cellForIndexPath:indexPath];
-    return cell.calculatedFrame.size.height;
-}
-
-- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-{
-    WXHeaderComponent *header = ((WXSectionComponent *)[_completedSections wx_safeObjectAtIndex:section]).header;
-    if (header) {
-        return header.calculatedFrame.size.height;
-    } else {
-        return 0.0;
-    }
-}
-
-- (void)scrollViewDidScroll:(UIScrollView *)scrollView
-{
-    [super scrollViewDidScroll:scrollView];
-    if ([[_tableView indexPathsForVisibleRows] count] > 0) {
-        NSIndexPath *topCellPath = [[_tableView indexPathsForVisibleRows] objectAtIndex:0];
-        if (self.currentTopVisibleSection != topCellPath.section) {
-            if (self.currentTopVisibleSection) {
-                WXSectionComponent *removeSection = [_sections wx_safeObjectAtIndex:self.currentTopVisibleSection];
-                if (removeSection.header && [removeSection.header.events containsObject:@"unsticky"]) {
-                    [removeSection.header fireEvent:@"unsticky" params:nil];
-                }
-            }
-            self.currentTopVisibleSection = topCellPath.section;
-            WXSectionComponent *showSection = [_sections wx_safeObjectAtIndex:topCellPath.section];
-            if (showSection.header && [showSection.header.events containsObject:@"sticky"]) {
-                [showSection.header fireEvent:@"sticky" params:nil];
-            }
-        }
-    }
-}
-
-- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
-{
-    WXHeaderComponent *header = ((WXSectionComponent *)_completedSections[section]).header;
-    WXLogDebug(@"header view for section %ld:%@", (long)section, header.view);
-    return header.view;
-}
-
-#pragma mark - TableView Data Source
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
-{
-    return _completedSections.count;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-{
-    return ((WXSectionComponent *)[_completedSections wx_safeObjectAtIndex:section]).rows.count;
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    WXLogDebug(@"Getting cell at indexPath:%@", indexPath);
-    static NSString *reuseIdentifier = @"WXTableViewCell";
-    
-    UITableViewCell *cellView = [_tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
-    if (!cellView) {
-        cellView = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
-        cellView.backgroundColor = [UIColor clearColor];
-    }
-    
-    WXCellComponent *cell = [self cellForIndexPath:indexPath];
-    
-    if (cell.zIndex) {
-        cellView.layer.zPosition = [WXConvert CGFloat:cell.zIndex];
-    }
-    
-    if (!cell) {
-        return cellView;
-    }
-    
-    if (cell.view.superview == cellView.contentView) {
-        return cellView;
-    }
-    
-    for (UIView *view in cellView.contentView.subviews) {
-        [view removeFromSuperview];
-    }
-    
-    [cellView.contentView addSubview:cell.view];
-    
-    [cellView setAccessibilityIdentifier:cell.view.accessibilityIdentifier];
-    
-    WXLogDebug(@"Created cell:%@ view:%@ cellView:%@ at indexPath:%@", cell.ref, cell.view, cellView, indexPath);
-    return cellView;
-}
-
-#pragma mark - Load More Event
-
-- (void)setLoadmoreretry:(NSUInteger)loadmoreretry
-{
-    if (loadmoreretry != self.loadmoreretry) {
-        _previousLoadMoreRowNumber = 0;
-    }
-    
-    [super setLoadmoreretry:loadmoreretry];
-}
-
-- (void)loadMore
-{
-    [super loadMore];
-    
-    _previousLoadMoreRowNumber = [self totalNumberOfRows];
-}
-
-- (BOOL)isNeedLoadMore
-{
-    BOOL superNeedLoadMore = [super isNeedLoadMore];
-    return superNeedLoadMore && _previousLoadMoreRowNumber != [self totalNumberOfRows];
-}
-
-- (NSUInteger)totalNumberOfRows
-{
-    NSUInteger rowNumber = 0;
-    NSUInteger sectionCount = [_tableView numberOfSections];
-    for (int section = 0; section < sectionCount; section ++) {
-        rowNumber += [_tableView numberOfRowsInSection:section];
-    }
-    
-    return rowNumber;
-}
-
-- (void)resetLoadmore{
-    [super resetLoadmore];
-    _previousLoadMoreRowNumber=0;
-}
-
-#pragma mark Private
-
-- (WXCellComponent *)cellForIndexPath:(NSIndexPath *)indexPath
-{
-    WXSectionComponent *section = [_completedSections wx_safeObjectAtIndex:indexPath.section];
-    if (!section) {
-        WXLogError(@"No section found for num:%ld, completed sections:%ld", (long)indexPath.section, (unsigned long)_completedSections.count);
-        return nil;
-    }
-    
-    WXCellComponent *cell = [section.rows wx_safeObjectAtIndex:indexPath.row];
-    if (!cell) {
-        WXLogError(@"No cell found for num:%ld, completed rows:%ld", (long)indexPath.row, (unsigned long)section.rows.count);
-        return nil;
-    }
-    
-    return cell;
-}
-
-- (void)insertCell:(WXCellComponent *)cell forIndexPath:(NSIndexPath *)indexPath withSections:(NSMutableArray *)sections
-{
-    WXSectionComponent *section = [sections wx_safeObjectAtIndex:indexPath.section];
-    if (indexPath.row > [section.rows count] || indexPath.row < 0) {
-        WXLogError(@"inserting cell at indexPath:%@ outof range, sections:%@", indexPath, sections);
-        return;
-    }
-    WXAssert(section, @"inserting cell at indexPath:%@ section has not been inserted to list before, sections:%@", indexPath, sections);
-    WXAssert(indexPath.row <= section.rows.count, @"inserting cell at indexPath:%@ outof range, sections:%@", indexPath, sections);
-    [section.rows insertObject:cell atIndex:indexPath.row];
-}
-
-- (void)removeCellForIndexPath:(NSIndexPath *)indexPath withSections:(NSMutableArray *)sections
-{
-    WXSectionComponent *section = [sections wx_safeObjectAtIndex:indexPath.section];
-    if (0 == [section.rows count]) {
-        return;
-    }
-    WXAssert(section, @"Removing cell at indexPath:%@ has not been inserted to cell list before, sections:%@", indexPath, sections);
-    WXAssert(indexPath.row < section.rows.count, @"Removing cell at indexPath:%@ outof range, sections:%@", indexPath, sections);
-    [section.rows removeObjectAtIndex:indexPath.row];
-}
-
-- (NSIndexPath *)indexPathForCell:(WXCellComponent *)cell sections:(NSMutableArray<WXSectionComponent *> *)sections
-{
-    __block NSIndexPath *indexPath;
-    [sections enumerateObjectsUsingBlock:^(WXSectionComponent * _Nonnull section, NSUInteger sectionIndex, BOOL * _Nonnull sectionStop) {
-        [section.rows enumerateObjectsUsingBlock:^(WXCellComponent * _Nonnull row, NSUInteger rowIndex, BOOL * _Nonnull stop) {
-            if (row == cell) {
-                indexPath = [NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex];
-                *stop = YES;
-                *sectionStop = YES;
-            }
-        }];
-    }];
-    
-    return indexPath;
-}
-
-- (NSUInteger)indexForHeader:(WXHeaderComponent *)header sections:(NSMutableArray<WXSectionComponent *> *)sections
-{
-    __block NSUInteger index;
-    [sections enumerateObjectsUsingBlock:^(WXSectionComponent * _Nonnull section, NSUInteger sectionIndex, BOOL * _Nonnull stop) {
-        if (section.header == header) {
-            index = sectionIndex;
-            *stop = YES;
-        }
-    }];
-    
-    return index;
-}
-
-- (NSIndexPath *)indexPathForSubIndex:(NSUInteger)index
-{
-    NSInteger section = 0;
-    NSInteger row = -1;
-    WXComponent *firstComponent;
-    for (int i = 0; i <= index; i++) {
-        WXComponent* component = [self.subcomponents wx_safeObjectAtIndex:i];
-        if (!component) {
-            continue;
-        }
-        if (([component isKindOfClass:[WXHeaderComponent class]]
-            || [component isKindOfClass:[WXCellComponent class]])
-            && !firstComponent) {
-            firstComponent = component;
-        }
-        
-        if (component != firstComponent && [component isKindOfClass:[WXHeaderComponent class]]) {
-            section ++;
-            row = -1;
-        }
-        
-        if ([component isKindOfClass:[WXCellComponent class]]) {
-            row ++;
-        }
-    }
-
-    return [NSIndexPath indexPathForRow:row inSection:section];
-}
-
-- (void)_performUpdates:(void(^)(void))updates withKeepScrollPosition:(BOOL)keepScrollPosition adjustmentBlock:(CGFloat(^)(NSIndexPath *topVisibleCell))adjustmentBlock
-{
-    CGFloat adjustment = 0;
-    
-    // keep the scroll position when inserting or deleting sections/rows by adjusting the content offset
-    if (keepScrollPosition) {
-        NSIndexPath *top = _tableView.indexPathsForVisibleRows.firstObject;
-        adjustment = adjustmentBlock(top);
-    }
-    
-    updates();
-    
-    if (keepScrollPosition) {
-        CGPoint afterContentOffset = _tableView.contentOffset;
-        CGPoint newContentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + ceilf(adjustment));
-        _tableView.contentOffset = newContentOffset;
-    }
-    
-    [self handleAppear];
-}
-
-- (void)_insertTableViewSectionAtIndex:(NSUInteger)section keepScrollPosition:(BOOL)keepScrollPosition animation:(UITableViewRowAnimation)animation
-{
-    [self _performUpdates:^{
-        // catch system exception under 11.2 https://forums.developer.apple.com/thread/49676
-        @try {
-            [_tableView insertSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:animation];
-        } @catch(NSException *) {
-            
-        }
-    } withKeepScrollPosition:keepScrollPosition adjustmentBlock:^CGFloat(NSIndexPath *top) {
-        if (section <= top.section) {
-            return [self tableView:_tableView heightForHeaderInSection:section];
-        } else {
-            return 0.0;
-        }
-    }];
-}
-
-- (void)_deleteTableViewSectionAtIndex:(NSUInteger)section keepScrollPosition:(BOOL)keepScrollPosition animation:(UITableViewRowAnimation)animation
-{
-    [self _performUpdates:^{
-        // catch system exception under 11.2 https://forums.developer.apple.com/thread/49676
-        @try {
-            [_tableView deleteSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:animation];
-        } @catch(NSException *) {
-            
-        }
-
-    } withKeepScrollPosition:keepScrollPosition adjustmentBlock:^CGFloat(NSIndexPath *top) {
-        if (section <= top.section) {
-            return [self tableView:_tableView heightForHeaderInSection:section];
-        } else {
-            return 0.0;
-        }
-    }];
-}
-
-- (void)_insertTableViewCellAtIndexPath:(NSIndexPath *)indexPath keepScrollPosition:(BOOL)keepScrollPosition animation:(UITableViewRowAnimation)animation
-{
-    [self _performUpdates:^{
-        if ([_updataType  isEqual: @"reload"]) {
-            [_tableView reloadData];
-        } else {
-            // catch system exception under 11.2 https://forums.developer.apple.com/thread/49676
-            @try {
-                [_tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:animation];
-            } @catch(NSException *e) {
-                
-            }
-        }
-    } withKeepScrollPosition:keepScrollPosition adjustmentBlock:^CGFloat(NSIndexPath *top) {
-        if (([indexPath compare:top] <= 0) || [_updataType  isEqual: @"reload"]) {
-            return [self tableView:_tableView heightForRowAtIndexPath:indexPath];
-        } else {
-            return 0.0;
-        }
-    }];
-}
-
-- (void)_deleteTableViewCellAtIndexPath:(NSIndexPath *)indexPath keepScrollPosition:(BOOL)keepScrollPosition animation:(UITableViewRowAnimation)animation
-{
-    if (!indexPath) {
-        return ;
-    }
-    [self _performUpdates:^{
-        // catch system exception under 11.2 https://forums.developer.apple.com/thread/49676
-        @try {
-            [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:animation];
-        } @catch (NSException* e) {
-            
-        }
-    } withKeepScrollPosition:keepScrollPosition adjustmentBlock:^CGFloat(NSIndexPath *top) {
-        if ([indexPath compare:top] <= 0) {
-            return [self tableView:_tableView heightForRowAtIndexPath:indexPath];
-        } else {
-            return 0.0;
-        }
-    }];
-}
-
-// Hook _adjustContentOffsetIfNecessary will cause UITableView freezing if bounces is set to NO.
-- (void)fixFlicker
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        // FIXME:(ง •̀_•́)ง┻━┻ Stupid scoll view, always reset content offset to zero by calling _adjustContentOffsetIfNecessary after insert cells.
-        // So if you pull down list while list is rendering, the list will be flickering.
-        // Demo:    
-        // Have to hook _adjustContentOffsetIfNecessary here.
-        // Any other more elegant way?
-        NSString *a = @"ntOffsetIfNe";
-        NSString *b = @"adjustConte";
-        
-        NSString *originSelector = [NSString stringWithFormat:@"_%@%@cessary", b, a];
-        [[self class] weex_swizzle:[WXTableView class] Method:NSSelectorFromString(originSelector) withMethod:@selector(fixedFlickerSelector)];
-    });
-}
-
-- (void)fixedFlickerSelector
-{
-    // DO NOT delete this method.
-}
-
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h
deleted file mode 100644
index daafa1e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXLoadingComponent : WXComponent
-
-- (void)resizeFrame;
-- (void)loading;
-- (BOOL)displayState;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.mm
deleted file mode 100644
index d4002a0..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.mm
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXLoadingComponent.h"
-#import "WXScrollerComponent.h"
-#import "WXLoadingIndicator.h"
-#import "WXComponent_internal.h"
-#import "WXLog.h"
-#import "WXComponent+Layout.h"
-
-@interface WXLoadingComponent()
-
-@property (nonatomic) BOOL initFinished;
-@property (nonatomic) BOOL loadingEvent;
-@property (nonatomic) BOOL displayState;
-
-@property (nonatomic, weak) WXLoadingIndicator *indicator;
-
-@end
-
-@implementation WXLoadingComponent
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        if (attributes[@"display"]) {
-            if ([attributes[@"display"] isEqualToString:@"show"]) {
-                _displayState = YES;
-            } else if ([attributes[@"display"] isEqualToString:@"hide"]) {
-                _displayState = NO;
-            } else {
-                WXLogError(@"");
-            }
-        }
-        self.flexCssNode->setStylePositionType(WeexCore::kAbsolute);
-    }
-    return self;
-}
-
-- (void)viewWillUnload
-{
-    _displayState = NO;
-    _loadingEvent = NO;
-    _initFinished = NO;
-}
-
--(void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"display"]) {
-        if ([attributes[@"display"] isEqualToString:@"show"]) {
-            _displayState = YES;
-        } else if ([attributes[@"display"] isEqualToString:@"hide"]) {
-            _displayState = NO;
-        } else {
-            WXLogError(@"");
-        }
-        [self setDisplay];
-    }
-}
-
-- (void)viewDidLoad
-{
-    _initFinished = YES;
-
-    [self setDisplay];
-}
-
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"loading"]) {
-        _loadingEvent = YES;
-    }
-}
-
-- (void)removeEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"loading"]) {
-        _loadingEvent = NO;
-    }
-}
-
-- (void)loading
-{
-    if (!_loadingEvent || _displayState)
-        return;
-    
-    [self fireEvent:@"loading" params:nil];
-}
-
-- (void)setDisplay
-{
-    id<WXScrollerProtocol> scrollerProtocol = [self ancestorScroller];
-    if (scrollerProtocol == nil || !_initFinished)
-        return;
-    WXComponent *scroller = (WXComponent*)scrollerProtocol;
-    CGPoint contentOffset = [scrollerProtocol contentOffset];
-    if (_displayState) {
-        contentOffset.y = [scrollerProtocol contentSize].height - scroller.calculatedFrame.size.height + self.calculatedFrame.size.height;
-        self.view.hidden = NO;
-        [_indicator start];
-    } else {
-        contentOffset.y = contentOffset.y - self.calculatedFrame.size.height;
-        [_indicator stop];
-        self.view.hidden = YES;
-    }
-    if (contentOffset.y > 0) {
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [UIView animateWithDuration:0.25 animations:^{
-                [scrollerProtocol setContentOffset:contentOffset animated:NO];
-            } completion:nil];
-        });
-    }
-}
-
-- (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    BOOL inserted = [super _insertSubcomponent:subcomponent atIndex:index];
-    if ([subcomponent isKindOfClass:[WXLoadingIndicator class]]) {
-        _indicator = (WXLoadingIndicator*)subcomponent;
-    }
-    return inserted;
-}
-
-- (BOOL)displayState
-{
-    return _displayState;
-}
-
-- (void)resizeFrame
-{
-    CGRect rect = self.calculatedFrame;
-    
-    id<WXScrollerProtocol> scrollerProtocol = self.ancestorScroller;
-    if (scrollerProtocol) {
-        rect.origin.y = [scrollerProtocol contentSize].height;
-    }
-    
-    [self.view setFrame:rect];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h
deleted file mode 100644
index 1329284..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXLoadingIndicator : WXComponent
-
-- (void)start;
-- (void)stop;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.m
deleted file mode 100644
index c678ce3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.m
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXLoadingIndicator.h"
-#import "WXConvert.h"
-
-@implementation WXLoadingIndicator {
-    UIActivityIndicatorView *_indicator;
-    UIColor *_indicatorColor;
-    id _animating;
-}
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance {
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        if (styles[@"color"]) {
-            _indicatorColor = [WXConvert UIColor:styles[@"color"]];
-        }
-        if (attributes[@"animating"]) {
-            _animating = attributes[@"animating"];
-        }
-    }
-    return self;
-}
-
-- (UIView *)loadView {
-    return [[UIActivityIndicatorView alloc] init];
-}
-
-- (void)viewDidLoad {
-    _indicator = (UIActivityIndicatorView *)self.view;
-    
-    if (_indicatorColor) {
-        _indicator.color = _indicatorColor;
-    }
-    if (_animating) {
-        if ([WXConvert BOOL:_animating]) {
-            [_indicator startAnimating];
-        } else {
-            [_indicator stopAnimating];
-        }
-    }
-}
-
-- (void)updateStyles:(NSDictionary *)styles {
-    if (styles[@"color"]) {
-        _indicatorColor = [WXConvert UIColor:styles[@"color"]];
-        _indicator.color = _indicatorColor;
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"animating"]) {
-        _animating = attributes[@"animating"];
-        
-        if ([WXConvert BOOL:_animating]) {
-            [_indicator startAnimating];
-        } else {
-            [_indicator stopAnimating];
-        }
-    }
-}
-
-#pragma mark - lifeCircle
-
-- (void)viewWillUnload {
-    if (_indicator) {
-        [_indicator stopAnimating];
-        _indicator = nil;
-    }
-}
-
-- (void)start {
-    if (_indicator) {
-        [_indicator startAnimating];
-    }
-}
-
-- (void)stop {
-    if (_indicator) {
-        [_indicator stopAnimating];
-    }
-}
-
-#pragma mark -reset color
-
-- (void)resetStyles:(NSArray *)styles {
-    if ([styles containsObject:@"color"]) {
-        _indicatorColor = [UIColor blackColor];
-        _indicator.color = _indicatorColor;
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h
deleted file mode 100644
index 8b22816..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-#define  REFRESH_DISTANCE_Y                 @"dy"
-#define  REFRESH_PULLINGDISTANCE            @"pullingDistance"
-#define  REFRESH_VIEWHEIGHT              @"viewHeight"
-
-@interface WXRefreshComponent : WXComponent
-
-- (void)refresh;
-
-- (BOOL)displayState;
-
-- (void)pullingdown:(NSDictionary*)param;
-
-- (void)setIndicatorHidden:(BOOL)hidden;
-
-- (void)setDisplay;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.mm
deleted file mode 100644
index 02d7f5c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.mm
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRefreshComponent.h"
-#import "WXScrollerComponent.h"
-#import "WXLoadingIndicator.h"
-#import "WXComponent_internal.h"
-#import "WXLog.h"
-#import "WXComponent+Layout.h"
-
-@interface WXRefreshComponent()
-{
-    NSTimeInterval _refreshStateTriggerTime;
-}
-
-@property (nonatomic) BOOL displayState;
-@property (nonatomic) BOOL initFinished;
-@property (nonatomic) BOOL refreshEvent;
-@property (nonatomic) BOOL pullingdownEvent;
-
-@property (nonatomic, weak) WXLoadingIndicator *indicator;
-
-@end
-
-@implementation WXRefreshComponent
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        _refreshEvent = NO;
-        _pullingdownEvent = NO;
-        if (attributes[@"display"]) {
-            if ([attributes[@"display"] isEqualToString:@"show"]) {
-                _displayState = YES;
-            } else if ([attributes[@"display"] isEqualToString:@"hide"]) {
-                _displayState = NO;
-            } else {
-                WXLogError(@"");
-            }
-        }
-        self.flexCssNode->setStylePositionType(WeexCore::kAbsolute);
-    }
-    return self;
-}
-
-- (void)viewDidLoad
-{
-     _initFinished = YES;
-    
-    if (!_displayState) {
-        [_indicator.view setHidden:YES];
-    }
-}
-
-- (void)layoutDidFinish
-{
-    [self.view setFrame: (CGRect) {
-        .size = self.calculatedFrame.size,
-        .origin.x = self.calculatedFrame.origin.x,
-        .origin.y = self.view.frame.origin.y - CGRectGetHeight(self.calculatedFrame)
-    }];
-}
-
-- (void)viewWillUnload
-{
-    _displayState = NO;
-    _refreshEvent = NO;
-    _initFinished = NO;
-}
-
-- (void)refresh
-{
-    if (!_refreshEvent || _displayState) {
-        return;
-    }
-#ifdef DEBUG
-    WXLogDebug(@"flexLayout -> refreshComponent : refresh ref:%@",self.ref);
-#endif
-    [self fireEvent:@"refresh" params:nil];
-}
-
-- (void)pullingdown:(NSDictionary*)param
-{
-    if (!_pullingdownEvent) {
-        return ;
-    }
-#ifdef DEBUG
-    WXLogDebug(@"flexLayout -> refreshComponent : pullingdown ,ref:%@",self.ref);
-#endif
-    
-    [self fireEvent:@"pullingdown" params:param];
-}
-
-- (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    BOOL inserted = [super _insertSubcomponent:subcomponent atIndex:index];
-    if ([subcomponent isKindOfClass:[WXLoadingIndicator class]]) {
-        _indicator = (WXLoadingIndicator*)subcomponent;
-    }
-    return inserted;
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"display"]) {
-        if ([attributes[@"display"] isEqualToString:@"show"]) {
-            _displayState = YES;
-        } else if ([attributes[@"display"] isEqualToString:@"hide"]) {
-            _displayState = NO;
-        } else {
-            WXLogError(@"");
-        }
-        [self setDisplay];
-    }
-}
-
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"refresh"]) {
-        _refreshEvent = YES;
-    }
-    if ([eventName isEqualToString:@"pullingdown"]) {
-        _pullingdownEvent = YES;
-    }
-}
-
-- (void)removeEvent:(NSString *)evetName
-{
-    if ([evetName isEqualToString:@"refresh"]) {
-        _refreshEvent = NO;
-    }
-    if ([evetName isEqualToString:@"pullingdown"]) {
-        _pullingdownEvent = NO;
-    }
-}
-
-- (void)setDisplay
-{
-    id<WXScrollerProtocol> scrollerProtocol = self.ancestorScroller;
-    if (scrollerProtocol == nil || !_initFinished)
-        return;
-    
-    if ([scrollerProtocol respondsToSelector:@selector(refreshType)] &&
-        [[scrollerProtocol refreshType] isEqualToString:@"refreshForAppear"]) {
-        UIEdgeInsets inset = [scrollerProtocol contentInset];
-        if (_displayState) {
-            inset.top = self.calculatedFrame.size.height;
-            if ([_indicator.view isHidden]) {
-                [_indicator.view setHidden:NO];
-            }
-            [_indicator start];
-        } else {
-            inset.top = 0;
-            [_indicator stop];
-        }
-        [scrollerProtocol setContentInset:inset];
-    } else {
-        CGPoint offset = [scrollerProtocol contentOffset];
-        if (_displayState) {
-            offset.y = -self.calculatedFrame.size.height;
-            if ([_indicator.view isHidden]) {
-                [_indicator.view setHidden:NO];
-            }
-            [_indicator start];
-            [scrollerProtocol setContentOffset:offset animated:YES];
-            _refreshStateTriggerTime = CFAbsoluteTimeGetCurrent();
-        } else {
-            offset.y = 0;
-            [_indicator stop];
-            if (CFAbsoluteTimeGetCurrent() - _refreshStateTriggerTime < 0.3) {
-                /* If javascript doesn't do any refreshing and only update 'display' attribute very quickly.
-                 The previous '[scrollerProtocol setContentOffset:offset animated:YES];' is not finished,
-                 we should also use '[scrollerProtocol setContentOffset:offset animated:YES]' to restore offset.
-                 Or the scroller will not stop at 0.
-                 */
-                [scrollerProtocol setContentOffset:offset animated:YES];
-            }
-            else {
-                [UIView animateWithDuration:0.25 animations:^{
-                    [scrollerProtocol setContentOffset:offset];
-                }];
-            }
-        }
-        
-        /* If we are adding elements while refreshing, like this demo:http://dotwe.org/vue/f541ed72a121db8447a233b777003e8a
-         the scroller cannot stay at (0, 0) when all animations are finished.
-         So we use
-            [scrollerProtocol setContentOffset:offset animated:YES];
-         when _displayState is TRUE and use
-            [UIView animateWithDuration:0.25 animations:^{
-                [scrollerProtocol setContentOffset:offset];
-            }];
-         when _displayState is FALSE.
-         
-         All things go well. Probably setContentOffset: has higher priority than setContentOffset:animated:
-         */
-    }
-  
-}
-
-- (BOOL)displayState
-{
-    return _displayState;
-}
-
-- (void)setIndicatorHidden:(BOOL)hidden {
-    [_indicator.view setHidden:hidden];
-    
-    id<WXScrollerProtocol> scrollerProtocol = self.ancestorScroller;
-    if (scrollerProtocol == nil || !_initFinished)
-        return;
-    if ([scrollerProtocol respondsToSelector:@selector(refreshType)] &&
-        [[scrollerProtocol refreshType] isEqualToString:@"refreshForAppear"]) {
-        UIEdgeInsets inset = [scrollerProtocol contentInset];
-        if (!hidden) {
-            inset.top = self.calculatedFrame.size.height;
-            [_indicator start];
-        } else {
-            inset.top = 0;
-            [_indicator stop];
-        }
-        [scrollerProtocol setContentInset:inset];
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRichText.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRichText.h
deleted file mode 100644
index b0c768c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRichText.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXRichText : WXComponent<UITextViewDelegate>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm
deleted file mode 100644
index aedafb3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXRichText.mm
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRichText.h"
-#import "WXSDKManager.h"
-#import "WXSDKEngine.h"
-#import "WXConvert.h"
-#import "WXSDKInstance.h"
-#import "WXComponent+Layout.h"
-#import "WXNavigationProtocol.h"
-#import "WXImgLoaderProtocol.h"
-#import "WXComponentManager.h"
-#import "WXLog.h"
-#include <pthread/pthread.h>
-
-@interface WXRichNode : NSObject
-
-@property (nonatomic, strong) NSString  *type;
-@property (nonatomic, strong) NSString  *text;
-@property (nonatomic, strong) UIColor   *color;
-@property (nonatomic, strong) UIColor   *backgroundColor;
-@property (nonatomic, strong) NSString  *fontFamily;
-@property (nonatomic, assign) CGFloat   fontSize;
-@property (nonatomic, assign) CGFloat   fontWeight;
-@property (nonatomic, assign) WXTextStyle  fontStyle;
-@property (nonatomic, assign) WXTextDecoration textDecoration;
-@property (nonatomic, strong) NSString  *pseudoRef;
-@property (nonatomic, assign) CGFloat width;
-@property (nonatomic, assign) CGFloat height;
-@property (nonatomic, strong) NSURL *href;
-@property (nonatomic, strong) NSURL *src;
-@property (nonatomic, assign) NSRange range;
-
-@end
-
-@implementation WXRichNode
-
-@end
-
-@interface WXRichTextView : UITextView
-
-@end
-
-@implementation WXRichTextView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    if ((self = [super initWithFrame:frame])) {
-        self.isAccessibilityElement = YES;
-        self.accessibilityTraits |= UIAccessibilityTraitStaticText;
-        self.opaque = NO;
-        self.editable = NO;
-        self.selectable = YES;
-        self.contentMode = UIViewContentModeRedraw;
-        self.textContainerInset = UIEdgeInsetsZero;
-        self.textContainer.lineFragmentPadding = 0.0f;
-        self.textContainer.lineBreakMode = NSLineBreakByClipping;
-    }
-    return self;
-}
-
-@end
-
-#define WX_STYLE_FILL_RICHTEXT(key, type)\
-do {\
-    id value = styles[@#key]; \
-    if (value) { \
-        node.key = [WXConvert type:value];\
-    } else if (!([@#key isEqualToString:@"backgroundColor"] || [@#key isEqualToString:@"textDecoration"]) && superNode.key ) { \
-        node.key = superNode.key; \
-    } \
-} while(0);
-
-#define WX_STYLE_FILL_RICHTEXT_PIXEL(key)\
-do {\
-    id value = styles[@#key];\
-    if (value) {\
-        node.key = [WXConvert WXPixelType:value scaleFactor:self.weexInstance.pixelScaleFactor];\
-    } else if (superNode.key ) { \
-        node.key = superNode.key; \
-    } \
-} while(0);
-
-
-@implementation WXRichText
-{
-    WXRichTextView *textView;
-    NSMutableArray *_richNodes;
-    NSMutableDictionary *_nodeRanges;
-    NSMutableDictionary *_styles;
-    NSMutableDictionary *_attributes;
-    NSTextAlignment _textAlign;
-    UIColor *_backgroundColor;
-    pthread_mutex_t _attributedStringMutex;
-    pthread_mutexattr_t _propertMutexAttr;
-    CGFloat _lineHeight;
-}
-
-- (void)dealloc
-{
-    pthread_mutex_destroy(&_attributedStringMutex);
-    pthread_mutexattr_destroy(&_propertMutexAttr);
-}
-
-- (WXRichTextView *)textView
-{
-    if (!textView) {
-        textView = [[WXRichTextView alloc]init];
-        textView.delegate = self;
-        textView.scrollEnabled = NO;
-    }
-    return textView;
-}
-
-- (instancetype)initWithRef:(NSString *)ref
-                       type:(NSString *)type
-                     styles:(NSDictionary *)styles
-                 attributes:(NSDictionary *)attributes
-                     events:(NSArray *)events
-               weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        _richNodes = [NSMutableArray new];
-        _nodeRanges = [NSMutableDictionary new];
-        _styles = [NSMutableDictionary dictionaryWithDictionary:styles];
-        _attributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
-        _textAlign = styles[@"textAlign"] ? [WXConvert NSTextAlignment:styles[@"textAlign"]] : NSTextAlignmentLeft;
-        _lineHeight = styles[@"lineHeight"] ? [WXConvert CGFloat:styles[@"lineHeight"]] / 2: 0;
-        pthread_mutexattr_init(&(_propertMutexAttr));
-        pthread_mutexattr_settype(&(_propertMutexAttr), PTHREAD_MUTEX_RECURSIVE);
-        pthread_mutex_init(&(_attributedStringMutex), &(_propertMutexAttr));
-    }
-    return self;
-}
-
-- (void)fillAttributes:(NSDictionary *)attributes
-{
-    id value = attributes[@"value"];
-    if ([value isKindOfClass:[NSString class]]) {
-        value = [WXUtility objectFromJSON:value];
-    }
-    if ([value isKindOfClass: [NSArray class]]) {
-        [_richNodes removeAllObjects];
-        
-        WXRichNode *rootNode = [[WXRichNode alloc]init];
-        [_richNodes addObject:rootNode];
-        
-        //记录richtext根节点styles,仅用于子节点的样式继承
-        rootNode.type = @"root";
-        if (_styles) {
-            [self fillCSSStyles:_styles toNode:rootNode superNode:nil];
-        }
-        
-        for (NSDictionary *dict in value) {
-            [self recursivelyAddChildNode:dict toSuperNode:rootNode];
-        }
-        
-        _backgroundColor = rootNode.backgroundColor?:[UIColor whiteColor];
-    }
-}
-
-- (void)fillCSSStyles:(NSDictionary *)styles toNode:(WXRichNode *)node superNode:(WXRichNode *)superNode
-{
-    WX_STYLE_FILL_RICHTEXT(color, UIColor)
-    WX_STYLE_FILL_RICHTEXT(backgroundColor, UIColor)
-    WX_STYLE_FILL_RICHTEXT(fontFamily, NSString)
-    WX_STYLE_FILL_RICHTEXT_PIXEL(fontSize)
-    WX_STYLE_FILL_RICHTEXT(fontWeight, WXTextWeight)
-    WX_STYLE_FILL_RICHTEXT(fontStyle, WXTextStyle)
-    WX_STYLE_FILL_RICHTEXT(textDecoration, WXTextDecoration)
-    WX_STYLE_FILL_RICHTEXT_PIXEL(width)
-    WX_STYLE_FILL_RICHTEXT_PIXEL(height)
-}
-
-- (void)fillAttributes:(NSDictionary *)attributes toNode:(WXRichNode *)node superNode:(WXRichNode *)superNode
-{
-    if (attributes[@"pseudoRef"]) {
-        node.pseudoRef = attributes[@"pseudoRef"];
-        node.href = [NSURL URLWithString:@"click://"];
-    }
-    
-    if (attributes[@"href"]) {
-        node.href = [NSURL URLWithString:attributes[@"href"]];
-    }
-    else if (superNode.href) {
-        node.href = superNode.href;
-        if (!(node.pseudoRef.length) && superNode.pseudoRef.length) {
-            node.pseudoRef = superNode.pseudoRef;
-        }
-    }
-    
-    if (attributes[@"src"]) {
-        node.src = [NSURL URLWithString:attributes[@"src"]];
-    }
-    
-    if (attributes[@"value"] ) {
-        id value = attributes[@"value"];
-        if ([value isKindOfClass:[NSString class]]) {
-            node.text = (NSString *)value;
-        }
-    }
-}
-
-- (void)recursivelyAddChildNode:(NSDictionary *)nodeValue toSuperNode:(WXRichNode *)superNode
-{
-    if (![nodeValue isKindOfClass:[NSDictionary class]]) {
-        WXLogError(@"Invalid rich text structure.");
-        return;
-    }
-    
-    if (![nodeValue[@"type"] isKindOfClass:[NSString class]]) {
-        WXLogError(@"Invalid rich text structure.");
-        return;
-    }
-    
-    WXRichNode *node = [[WXRichNode alloc]init];
-    [_richNodes addObject:node];
-    
-    node.type = nodeValue[@"type"];
-
-    [self fillCSSStyles:nodeValue[@"style"] toNode:node superNode:superNode];
-
-    if (nodeValue[@"attr"]) {
-        [self fillAttributes:nodeValue[@"attr"] toNode:node superNode:superNode];
-    }
-    
-    if (nodeValue[@"children"]) {
-        id value = nodeValue[@"children"];
-        if ([value isKindOfClass:[NSArray class]]) {
-            NSArray *children = (NSArray *)value;
-            for(NSDictionary *childValue in children){
-                [self recursivelyAddChildNode:childValue toSuperNode:node];
-            }
-        }
-    }
-}
-
-#pragma mark - Subclass
-
-- (UIView *)loadView
-{
-    return  [self textView];
-}
-
-- (void)viewDidUnload
-{
-    textView = nil;
-}
-
-- (void)viewDidLoad
-{
-    [self innerLayout];
-}
-
-- (void)layoutDidFinish
-{
-    [self innerLayout];
-}
-
-- (void)innerLayout
-{
-    __weak typeof(self) wself = self;
-    WXPerformBlockOnComponentThread(^{
-        __strong typeof(wself) sself = wself;
-        if (sself) {
-            if (sself.flexCssNode == nullptr) {
-                return;
-            }
-            UIEdgeInsets padding = {
-                WXFloorPixelValue(sself.flexCssNode->getPaddingTop()+sself.flexCssNode->getBorderWidthTop()),
-                WXFloorPixelValue(sself.flexCssNode->getPaddingLeft()+sself.flexCssNode->getBorderWidthLeft()),
-                WXFloorPixelValue(sself.flexCssNode->getPaddingBottom()+sself.flexCssNode->getBorderWidthBottom()),
-                WXFloorPixelValue(sself.flexCssNode->getPaddingRight()+sself.flexCssNode->getBorderWidthRight())
-            };
-            
-            NSMutableAttributedString* attrString = [sself buildAttributeString];
-            WXPerformBlockOnMainThread(^{
-                WXRichTextView* view = [sself textView];
-                view.attributedText = attrString;
-                view.textContainerInset = padding;
-                view.backgroundColor = [UIColor clearColor];
-            });
-        }
-    });
-}
-
-- (CGSize (^)(CGSize))measureBlock
-{
-    __weak typeof(self) weakSelf = self;
-    
-    return ^CGSize (CGSize constrainedSize) {
-        
-        NSMutableAttributedString *attributedString = [weakSelf buildAttributeString];
-        
-        CGFloat width = constrainedSize.width;
-        if (isnan(width)) {
-            width = CGFLOAT_MAX;
-        }
-        
-        CGRect rect = [attributedString boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
-        CGSize computedSize = rect.size;
-        if(weakSelf.flexCssNode != nullptr){
-            if (!isnan(weakSelf.flexCssNode->getMinWidth())) {
-                computedSize.width = MAX(computedSize.width, weakSelf.flexCssNode->getMinWidth());
-            }
-            if (!isnan(weakSelf.flexCssNode->getMaxWidth())) {
-                computedSize.width = MIN(computedSize.width, weakSelf.flexCssNode->getMaxWidth());
-            }
-            if (!isnan(weakSelf.flexCssNode->getMinHeight())) {
-                computedSize.width = MAX(computedSize.height, weakSelf.flexCssNode->getMinHeight());
-            }
-            if (!isnan(weakSelf.flexCssNode->getMaxHeight())) {
-                computedSize.width = MIN(computedSize.height, weakSelf.flexCssNode->getMaxHeight());
-            }
-        }
-        return (CGSize) {
-            WXCeilPixelValue(computedSize.width),
-            WXCeilPixelValue(computedSize.height)
-        };
-    };
-}
-
-#pragma mark Text Building
-
-- (NSMutableAttributedString *)buildAttributeString
-{
-    pthread_mutex_lock(&(_attributedStringMutex));
-    [self fillAttributes:_attributes];
-    NSMutableArray *array = [NSMutableArray arrayWithArray:_richNodes];
-    pthread_mutex_unlock(&(_attributedStringMutex));
-    
-    NSMutableDictionary *nodeRange = [NSMutableDictionary dictionary];
-    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] init];
-    NSUInteger location;
-    
-    __weak typeof(self) weakSelf = self;
-    for (WXRichNode *node in array) {
-        location = attrStr.length;
-        
-        if ([node.type isEqualToString:@"span"]) {
-            if (node.text && [node.text length] > 0) {
-                NSString *text = node.text;
-                [attrStr.mutableString appendString:text];
-                
-                NSRange range = NSMakeRange(location, text.length);
-                [attrStr addAttribute:NSForegroundColorAttributeName value:node.color ?: [UIColor blackColor] range:range];
-                [attrStr addAttribute:NSBackgroundColorAttributeName value:node.backgroundColor ?: _backgroundColor range:range];
-                
-                UIFont *font = [WXUtility fontWithSize:node.fontSize textWeight:node.fontWeight textStyle:WXTextStyleNormal fontFamily:node.fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
-                if (font) {
-                    [attrStr addAttribute:NSFontAttributeName value:font range:range];
-                }
-                if (node.fontStyle == WXTextStyleItalic) {
-                    [attrStr addAttribute:NSObliquenessAttributeName value:@0.3 range:range];
-                }
-                else
-                {
-                    [attrStr addAttribute:NSObliquenessAttributeName value:@0 range:range];
-                }
-                [attrStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:WXTextDecorationNone] range:range];
-                [attrStr addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger:WXTextDecorationNone] range:range];
-                
-                if (node.textDecoration == WXTextDecorationUnderline) {
-                    [attrStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:WXTextDecorationUnderline] range:range];
-                }
-                else if (node.textDecoration == WXTextDecorationLineThrough) {
-                    [attrStr addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger:WXTextDecorationLineThrough] range:range];
-                }
-                
-                if (node.href) {
-                    [attrStr addAttribute:NSLinkAttributeName value:node.href range:range];
-                }
-                else {
-                    [attrStr removeAttribute:NSLinkAttributeName range:range];
-                }
-                
-                NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
-                paragraphStyle.alignment = _textAlign;
-                if(_lineHeight != 0 )
-                {
-                    paragraphStyle.minimumLineHeight = _lineHeight;
-                    paragraphStyle.maximumLineHeight = _lineHeight;
-                    [attrStr addAttribute:NSBaselineOffsetAttributeName value:@((_lineHeight - font.lineHeight)/2) range:range];
-                }
-                [attrStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:range];
-                
-                [nodeRange setObject:node forKey:NSStringFromRange(range)];
-            }
-        }
-        else if ([node.type isEqualToString:@"image"]) {
-            NSTextAttachment *imgAttachment = [[NSTextAttachment alloc]init];
-            imgAttachment.bounds = CGRectMake(0, 0, node.width, node.height);
-            
-            NSAttributedString *attachAttriStr = [NSAttributedString attributedStringWithAttachment:imgAttachment];
-            [attrStr appendAttributedString:attachAttriStr];
-            
-            NSRange range = NSMakeRange(location, attachAttriStr.length);
-            [attrStr addAttribute:NSFontAttributeName value: [UIFont systemFontOfSize:node.height] range:range];
-            
-            if (node.href) {
-                [attrStr addAttribute:NSLinkAttributeName value:node.href range:range];
-            }
-            else {
-                [attrStr removeAttribute:NSLinkAttributeName range:range];
-            }
-            
-            [nodeRange setObject:node forKey:NSStringFromRange(range)];
-            
-            if (node.src) {
-                [[self imageLoader] downloadImageWithURL:node.src.absoluteString imageFrame:imgAttachment.bounds userInfo:nil completed:^(UIImage *image, NSError *error, BOOL finished) {
-                    dispatch_async(dispatch_get_main_queue(), ^{
-                        imgAttachment.image = image;
-                        [[weakSelf textView].layoutManager invalidateDisplayForCharacterRange:range];
-                    });
-                }];
-            }
-        }
-    }
-    
-    pthread_mutex_lock(&(_attributedStringMutex));
-    [_nodeRanges removeAllObjects];
-    _nodeRanges = [NSMutableDictionary dictionaryWithDictionary:nodeRange];
-    pthread_mutex_unlock(&(_attributedStringMutex));
-    
-    return attrStr;
-}
-
-- (void)updateStyles:(NSDictionary *)styles {
-    
-    if (styles[@"textAlign"]) {
-        _textAlign = [WXConvert NSTextAlignment:styles[@"textAlign"]];
-    }
-    if (styles[@"lineHeight"]) {
-        _lineHeight = [WXConvert CGFloat:styles[@"lineHeight"]] / 2;
-    }
-    
-    WXPerformBlockOnComponentThread(^{
-        [_styles addEntriesFromDictionary:styles];
-        [self syncTextStorageForView];
-    });
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes {
-    WXPerformBlockOnComponentThread(^{
-        _attributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
-        [self syncTextStorageForView];
-    });
-}
-
-- (void)syncTextStorageForView {
-    pthread_mutex_lock(&(_attributedStringMutex));
-    [self fillAttributes:_attributes];
-    pthread_mutex_unlock(&(_attributedStringMutex));
-    
-    if (_styles[@"height"]) {
-       [self innerLayout];
-    }
-    else {
-       [self setNeedsLayout];
-    }
-}
-
-#pragma mark - UITextView Delegate
-
-- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange {
-    return NO;
-}
-
-- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
-    if (!URL) {
-        return NO;
-    }
-    
-    NSString *rangeStr = NSStringFromRange(characterRange);
-    WXRichNode *node = [_nodeRanges objectForKey:rangeStr];
-    
-    if (![[node.href absoluteString] isEqualToString:@"click://"]) {
-        id<WXNavigationProtocol> navigationHandler = [self navigationHandler];
-        if ([navigationHandler respondsToSelector:@selector(pushViewControllerWithParam:
-                                                            completion:
-                                                            withContainer:)]) {
-            [navigationHandler pushViewControllerWithParam:@{@"url":URL.absoluteString} completion:^(NSString *code, NSDictionary *responseData) {
-            } withContainer:self.weexInstance.viewController];
-        } else {
-            WXLogError(@"Event handler of class %@ does not respond to pushViewControllerWithParam", NSStringFromClass([navigationHandler class]));
-        }
-    }
-    else if (node.pseudoRef) {
-        NSMutableDictionary *params = [NSMutableDictionary new];
-        [params setObject:node.pseudoRef forKey:@"pseudoRef"];
-        [[WXSDKManager bridgeMgr] fireEvent:self.weexInstance.instanceId ref:self.ref type:@"itemclick" params:params domChanges:nil];
-    }
-    
-    return NO;
-}
-
-# pragma mark - imageLoader
-
-- (id<WXImgLoaderProtocol>)imageLoader {
-    static id<WXImgLoaderProtocol> imageLoader;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        imageLoader = [WXSDKEngine handlerForProtocol:@protocol(WXImgLoaderProtocol)];
-    });
-    return imageLoader;
-}
-
-- (id<WXNavigationProtocol>)navigationHandler {
-    static id<WXNavigationProtocol> navigationHandler;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        navigationHandler = [WXSDKEngine handlerForProtocol:@protocol(WXNavigationProtocol)];
-    });
-    return navigationHandler;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h
deleted file mode 100644
index ff27871..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXScrollerProtocol.h"
-#import "WXComponent.h"
-
-@interface WXScrollerComponent : WXComponent <WXScrollerProtocol, UIScrollViewDelegate>
-
-@property (nonatomic, copy) void (^onScroll)(UIScrollView *scrollView);
-
-@property (nonatomic, copy) void (^scrollEventListener)(WXScrollerComponent* sender, NSString* event, NSDictionary* params);
-
-@property (nonatomic, assign) NSUInteger loadmoreretry;
-
-@property (nonatomic, assign) CGSize contentSize;
-
-- (void)handleAppear;
-
-- (CGPoint)absolutePositionForComponent:(WXComponent *)component;
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm
deleted file mode 100644
index d4b8c5c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm
+++ /dev/null
@@ -1,1165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXScrollerComponent.h"
-#import "WXComponent_internal.h"
-#import "WXSDKInstance_private.h"
-#import "WXComponent.h"
-#import "WXDefine.h"
-#import "WXConvert.h"
-#import "WXSDKInstance.h"
-#import "WXUtility.h"
-#import "WXLoadingComponent.h"
-#import "WXRefreshComponent.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXSDKEngine.h"
-#import "WXComponent+Events.h"
-#import "WXPageEventNotifyEvent.h"
-#import "WXComponent+Layout.h"
-#import "WXUtility.h"
-
-@interface WXScrollerComponentView : UIScrollView
-@end
-
-@implementation WXScrollerComponentView
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    if ([(id <WXScrollerProtocol>) self.wx_component respondsToSelector:@selector(requestGestureShouldStopPropagation:shouldReceiveTouch:)]) {
-        return [(id <WXScrollerProtocol>) self.wx_component requestGestureShouldStopPropagation:gestureRecognizer shouldReceiveTouch:touch];
-    }
-    else{
-        return YES;
-    }
-}
-
-- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
-{
-    [super setContentOffset:contentOffset animated:animated];
-    BOOL scrollStartEvent = [[self.wx_component valueForKey:@"_scrollStartEvent"] boolValue];
-    id scrollEventListener = [self.wx_component valueForKey:@"_scrollEventListener"];
-    
-    if (animated && (scrollStartEvent ||scrollEventListener)  && !WXPointEqualToPoint(contentOffset, self.contentOffset)) {
-        CGFloat scaleFactor = self.wx_component.weexInstance.pixelScaleFactor;
-        NSDictionary *contentSizeData = @{@"width":@(self.contentSize.width / scaleFactor),
-                                          @"height":@(self.contentSize.height / scaleFactor)};
-        NSDictionary *contentOffsetData = @{@"x":@(-self.contentOffset.x / scaleFactor),
-                                            @"y":@(-self.contentOffset.y / scaleFactor)};
-        if (scrollStartEvent) {
-            [self.wx_component fireEvent:@"scrollstart" params:@{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData} domChanges:nil];
-        }
-        if (scrollEventListener) {
-            WXScrollerComponent *component = (WXScrollerComponent *)self.wx_component;
-            component.scrollEventListener(component, @"scrollstart", @{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData});
-        }
-    }
-}
-
-@end
-
-@interface WXScrollToTarget : NSObject
-
-@property (nonatomic, weak)   WXComponent *target;
-@property (nonatomic, assign) BOOL hasAppear;
-
-@end
-
-@implementation WXScrollToTarget
-
-@end
-
-
-@interface WXScrollerComponent()
-
-@property (nonatomic, strong) NSMutableArray *  stickyArray;
-@property (nonatomic, strong) NSMutableArray * listenerArray;
-@property (nonatomic, weak) WXRefreshComponent *refreshComponent;
-@property (nonatomic, weak) WXLoadingComponent *loadingComponent;
-
-@end
-
-@implementation WXScrollerComponent
-{
-    CGSize _contentSize;
-    BOOL _needsPlatformLayout;
-    BOOL _listenLoadMore;
-    BOOL _scrollEvent;
-    BOOL _scrollStartEvent;
-    BOOL _scrollEndEvent;
-    BOOL _isScrolling;
-    BOOL _isDragging;
-    CGFloat _pageSize;
-    CGFloat _loadMoreOffset;
-    CGFloat _previousLoadMoreContentHeight;
-    CGFloat _offsetAccuracy;
-    CGPoint _lastContentOffset;
-    CGPoint _lastScrollEventFiredOffset;
-    BOOL _scrollable;
-    NSString * _alwaysScrollableVertical;
-    NSString * _alwaysScrollableHorizontal;
-    BOOL _bounces;
-    
-    // refreshForAppear: load more when refresh component begin appear(if scroll is dragging or decelerating, should delay)
-    // refreshForWholeVisible: load more until the whole refresh component visible
-    NSString *_refreshType;
-
-    // vertical & horizontal
-    WXScrollDirection _scrollDirection;
-    // left & right & up & down
-    NSString *_direction;
-    BOOL _showScrollBar;
-    BOOL _pagingEnabled;
-    
-    BOOL _shouldNotifiAppearDescendantView;
-    BOOL _shouldRemoveScrollerListener;
-    CGPoint _scrollStartPoint;
-    CGPoint _scrollEndPoint;
-
-    //css_node_t *_scrollerCSSNode;
-    
-    NSHashTable* _delegates;
-}
-
-WX_EXPORT_METHOD(@selector(resetLoadmore))
-
-- (void)resetLoadmore
-{
-    _previousLoadMoreContentHeight=0;
-}
-
-- (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    BOOL inserted = [super _insertSubcomponent:subcomponent atIndex:index];
-    
-    if ([subcomponent isKindOfClass:[WXRefreshComponent class]]) {
-        _refreshComponent = (WXRefreshComponent*)subcomponent;
-    }
-    else if ([subcomponent isKindOfClass:[WXLoadingComponent class]]) {
-        _loadingComponent = (WXLoadingComponent*)subcomponent;
-    }
-    
-    // If a vertical list is added to a horizontal scroller, we need platform dependent layout
-    if (_flexCssNode && [self isKindOfClass:[WXScrollerComponent class]] &&
-        [subcomponent isKindOfClass:[WXScrollerComponent class]] &&
-        subcomponent->_positionType != WXPositionTypeFixed &&
-        (((WXScrollerComponent*)subcomponent).scrollDirection == WXScrollDirectionVertical)) {
-        if (subcomponent->_flexCssNode) {
-            if (subcomponent->_flexCssNode->getFlex() > 0 && !isnan(subcomponent->_flexCssNode->getStyleWidth())) {
-                _needsPlatformLayout = YES;
-                _flexCssNode->setNeedsPlatformDependentLayout(true);
-            }
-        }
-    }
-
-    return inserted;
-}
-
--(instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        
-        _stickyArray = [NSMutableArray array];
-        _listenerArray = [NSMutableArray array];
-        _scrollEvent = NO;
-        _scrollStartEvent = NO;
-        _scrollEndEvent = NO;
-        _lastScrollEventFiredOffset = CGPointMake(0, 0);
-        _scrollDirection = attributes[@"scrollDirection"] ? [WXConvert WXScrollDirection:attributes[@"scrollDirection"]] : WXScrollDirectionVertical;
-        _showScrollBar = attributes[@"showScrollbar"] ? [WXConvert BOOL:attributes[@"showScrollbar"]] : YES;
-        
-        if (attributes[@"alwaysScrollableVertical"]) {
-            _alwaysScrollableVertical = [WXConvert NSString:attributes[@"alwaysScrollableVertical"]];
-        }
-        if (attributes[@"alwaysScrollableHorizontal"]) {
-            _alwaysScrollableHorizontal = [WXConvert NSString:attributes[@"alwaysScrollableHorizontal"]];
-        }
-        _bounces = attributes[@"bounce"]?[WXConvert BOOL:attributes[@"bounce"]]:YES;
-        _refreshType = [WXConvert NSString:attributes[@"refreshType"]]?:@"refreshForWholeVisible";
-        _pagingEnabled = attributes[@"pagingEnabled"] ? [WXConvert BOOL:attributes[@"pagingEnabled"]] : NO;
-        _pageSize = attributes[@"pageSize"] ? [WXConvert WXPixelType:attributes[@"pageSize"] scaleFactor:self.weexInstance.pixelScaleFactor] : 0;
-        if (_pageSize < 0) {
-            _pageSize = 0;
-        }
-        _loadMoreOffset = attributes[@"loadmoreoffset"] ? [WXConvert WXPixelType:attributes[@"loadmoreoffset"] scaleFactor:self.weexInstance.pixelScaleFactor] : 0;
-        _loadmoreretry = attributes[@"loadmoreretry"] ? [WXConvert NSUInteger:attributes[@"loadmoreretry"]] : 0;
-        _listenLoadMore = [events containsObject:@"loadmore"];
-        _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
-        _offsetAccuracy = attributes[@"offsetAccuracy"] ? [WXConvert WXPixelType:attributes[@"offsetAccuracy"] scaleFactor:self.weexInstance.pixelScaleFactor] : 0;
-
-        /* let scroller fill the rest space if it is a child component and has no fixed height & width.
-         WeexCore also does this in C++, but only for "scroller" and "list" not including for
-         subclasses of WXScrollerComponent. */
-        if (_flexCssNode != nullptr) {
-            if (((_scrollDirection == WXScrollDirectionVertical &&
-                  flexIsUndefined(_flexCssNode->getStyleHeight())) ||
-                 (_scrollDirection == WXScrollDirectionHorizontal &&
-                  flexIsUndefined(_flexCssNode->getStyleWidth()))) &&
-                _flexCssNode->getFlex() <= 0.0) {
-                _flexCssNode->set_flex(1.0);
-            }
-        }
-        
-        id configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-        if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-            BOOL shouldNotifiAppearDescendantView = [[configCenter configForKey:@"iOS_weex_ext_config.shouldNotifiAppearDescendantView" defaultValue:@(YES) isDefault:NULL] boolValue];
-            _shouldNotifiAppearDescendantView = shouldNotifiAppearDescendantView;
-            BOOL shouldRemoveScrollerListener = [[configCenter configForKey:@"iOS_weex_ext_config.shouldRemoveScrollerListener" defaultValue:@(YES) isDefault:NULL] boolValue];
-            _shouldRemoveScrollerListener = shouldRemoveScrollerListener;
-            
-        }
-        //may be list
-        if ([@"scroller" isEqualToString:type]) {
-            [weexInstance.apmInstance updateDiffStats:KEY_PAGE_STATS_SCROLLER_NUM withDiffValue:1];
-        }        
-    }
-    
-    return self;
-}
-
-- (UIView *)loadView
-{
-    return [[WXScrollerComponentView alloc] init];
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    [self setContentSize:_contentSize];
-    WXScrollerComponentView *scrollView = (WXScrollerComponentView *)self.view;
-    scrollView.delegate = self;
-    scrollView.exclusiveTouch = YES;
-    scrollView.autoresizesSubviews = NO;
-    scrollView.clipsToBounds = YES;
-    scrollView.showsVerticalScrollIndicator = _showScrollBar;
-    scrollView.showsHorizontalScrollIndicator = _showScrollBar;
-    scrollView.scrollEnabled = _scrollable;
-    scrollView.pagingEnabled = _pagingEnabled;
-    
-    if (scrollView.bounces != _bounces) {
-        scrollView.bounces = _bounces;
-    }
-    
-    if (_alwaysScrollableHorizontal) {
-        scrollView.alwaysBounceHorizontal = [WXConvert BOOL:_alwaysScrollableHorizontal];
-    }
-    if (_alwaysScrollableVertical) {
-        scrollView.alwaysBounceVertical = [WXConvert BOOL:_alwaysScrollableVertical];
-    }
-    
-    if (@available(iOS 11.0, *)) {
-        if ([scrollView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) {
-            scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
-        }
-    } else {
-        // Fallback on earlier versions
-    }
-    
-    if (self.ancestorScroller) {
-        scrollView.scrollsToTop = NO;
-    } else {
-        scrollView.scrollsToTop = YES;
-    }
-    
-    if (_pagingEnabled && _pageSize > 0) {
-        scrollView.pagingEnabled = NO; // turn off system default paging
-        scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
-    }
-    else {
-        scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
-    }
-}
-
-- (void)layoutDidFinish
-{
-    if ([self isViewLoaded]) {
-        [self setContentSize:_contentSize];
-        [self adjustSticky];
-        [self handleAppear];
-    }
-    
-    [_loadingComponent resizeFrame];
-}
-
-- (void)_buildViewHierarchyLazily
-{
-    [super _buildViewHierarchyLazily];
-    [self handleAppear];
-}
-
-- (void)viewWillUnload
-{
-    ((UIScrollView *)_view).delegate = nil;
-}
-
-- (void)dealloc
-{
-    ((UIScrollView *)_view).delegate = nil;
-    [self.stickyArray removeAllObjects];
-    [self.listenerArray removeAllObjects];
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"showScrollbar"]) {
-        _showScrollBar = [WXConvert BOOL:attributes[@"showScrollbar"]];
-        ((UIScrollView *)self.view).showsHorizontalScrollIndicator = _showScrollBar;
-        ((UIScrollView *)self.view).showsVerticalScrollIndicator = _showScrollBar;
-    }
-    
-    if (attributes[@"pagingEnabled"]) {
-        _pagingEnabled = [WXConvert BOOL:attributes[@"pagingEnabled"]];
-        ((UIScrollView *)self.view).pagingEnabled = _pagingEnabled;
-    }
-    
-    if (attributes[@"pageSize"]) {
-        _pageSize = [WXConvert WXPixelType:attributes[@"pageSize"]
-                               scaleFactor:self.weexInstance.pixelScaleFactor];
-        if (_pageSize < 0) {
-            _pageSize = 0;
-        }
-    }
-    
-    if ([self isViewLoaded]) {
-        if (_pagingEnabled && _pageSize > 0) {
-            ((UIScrollView *)self.view).pagingEnabled = NO; // turn off system default paging
-            ((UIScrollView *)self.view).decelerationRate = UIScrollViewDecelerationRateFast;
-        }
-        else {
-            ((UIScrollView *)self.view).decelerationRate = UIScrollViewDecelerationRateNormal;
-        }
-    }
-    
-    if (attributes[@"loadmoreoffset"]) {
-        _loadMoreOffset = [WXConvert WXPixelType:attributes[@"loadmoreoffset"] scaleFactor:self.weexInstance.pixelScaleFactor];
-    }
-    
-    if (attributes[@"bounce"]) {
-        _bounces = [WXConvert BOOL:attributes[@"bounce"]];
-        ((UIScrollView *)self.view).bounces = _bounces;
-    }
-    
-    if (attributes[@"loadmoreretry"]) {
-        NSUInteger loadmoreretry = [WXConvert NSUInteger:attributes[@"loadmoreretry"]];
-        if (loadmoreretry != _loadmoreretry) {
-            _previousLoadMoreContentHeight = 0;
-        }
-        self.loadmoreretry = loadmoreretry;
-    }
-    
-    if (attributes[@"scrollable"]) {
-        _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
-        ((UIScrollView *)self.view).scrollEnabled = _scrollable;
-    }
-    if (attributes[@"alwaysScrollableHorizontal"]) {
-        _alwaysScrollableHorizontal = [WXConvert NSString:attributes[@"alwaysScrollableHorizontal"]];
-        ((UIScrollView*)self.view).alwaysBounceHorizontal = [WXConvert BOOL:_alwaysScrollableHorizontal];
-    }
-    
-    if (attributes[@"alwaysScrollableVertical"]) {
-        _alwaysScrollableVertical = [WXConvert NSString:attributes[@"alwaysScrollableVertical"]];
-        ((UIScrollView*)self.view).alwaysBounceVertical = [WXConvert BOOL:_alwaysScrollableVertical];
-    }
-    
-    if (attributes[@"refreshType"]) {
-        _refreshType = [WXConvert NSString:attributes[@"refreshType"]];
-    }
-    
-    if (attributes[@"offsetAccuracy"]) {
-        _offsetAccuracy = [WXConvert WXPixelType:attributes[@"offsetAccuracy"] scaleFactor:self.weexInstance.pixelScaleFactor];
-    }
-    
-    if (attributes[@"scrollDirection"]) {
-        _scrollDirection = attributes[@"scrollDirection"] ? [WXConvert WXScrollDirection:attributes[@"scrollDirection"]] : WXScrollDirectionVertical;
-    }
-}
-
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"loadmore"]) {
-        _listenLoadMore = YES;
-    }
-    if ([eventName isEqualToString:@"scroll"]) {
-        _scrollEvent = YES;
-    }
-    if ([eventName isEqualToString:@"scrollstart"]) {
-        _scrollStartEvent = YES;
-    }
-    if ([eventName isEqualToString:@"scrollend"]) {
-        _scrollEndEvent = YES;
-    }
-}
-
-- (void)removeEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"loadmore"]) {
-        _listenLoadMore = NO;
-    }
-    if ([eventName isEqualToString:@"scroll"]) {
-        _scrollEvent = NO;
-    }
-    if ([eventName isEqualToString:@"scrollstart"]) {
-        _scrollStartEvent = NO;
-    }
-    if ([eventName isEqualToString:@"scrollend"]) {
-        _scrollEndEvent = NO;
-    }
-}
-
-#pragma mark WXScrollerProtocol
-
-- (void)addStickyComponent:(WXComponent *)sticky
-{
-    if(![self.stickyArray containsObject:sticky]) {
-        [self.stickyArray addObject:sticky];
-        [self adjustSticky];
-    }
-}
-
-- (void)removeStickyComponent:(WXComponent *)sticky
-{
-    if([self.stickyArray containsObject:sticky]) {
-        [self.stickyArray removeObject:sticky];
-		WXPerformBlockOnMainThread(^{
-			[self adjustSticky];
-		});
-    }
-}
-
-- (void)adjustForRTL
-{
-    if (![WXUtility enableRTLLayoutDirection]) return;
-    
-    // this is scroll rtl solution.
-    // scroll layout not use direction, use self tranform
-    if (self.view && [self isDirectionRTL]) {
-        if (_transform) {
-            self.view.layer.transform = CATransform3DConcat(self.view.layer.transform, CATransform3DScale(CATransform3DIdentity, -1, 1, 1));
-        } else {
-            self.view.layer.transform = CATransform3DScale(CATransform3DIdentity, -1, 1, 1);
-        }
-    } else {
-        if (!_transform) {
-            self.view.layer.transform = CATransform3DIdentity;
-        }
-    }
-}
-
-- (void)_adjustForRTL {
-    if (![WXUtility enableRTLLayoutDirection]) return;
-    
-    [super _adjustForRTL];
-    [self adjustForRTL];
-}
-
-- (void)adjustSticky
-{
-    if (![self isViewLoaded]) {
-        return;
-    }
-    CGFloat scrollOffsetY = ((UIScrollView *)self.view).contentOffset.y;
-    for(WXComponent *component in self.stickyArray) {
-        if (isnan(component->_absolutePosition.x) && isnan(component->_absolutePosition.y)) {
-            component->_absolutePosition = [component.supercomponent.view convertPoint:component.view.frame.origin toView:self.view];
-        }
-        CGPoint relativePosition = component->_absolutePosition;
-        if (isnan(relativePosition.y)) {
-            continue;
-        }
-        
-        WXComponent *supercomponent = component.supercomponent;
-        if(supercomponent != self && component.view.superview != self.view) {
-            [component.view removeFromSuperview];
-            [self.view addSubview:component.view];
-        } else {
-            [self.view bringSubviewToFront:component.view];
-        }
-        
-        CGFloat relativeY = relativePosition.y;
-        BOOL needSticky = NO;
-        
-        if (scrollOffsetY >= relativeY) {
-            needSticky = YES;
-        } else {
-            // important: reset views' frame
-            component.view.frame = CGRectMake(relativePosition.x, relativePosition.y, component.calculatedFrame.size.width, component.calculatedFrame.size.height);
-        }
-        
-        if (!needSticky) {
-            continue;
-        }
-        
-        // The minimum Y sticky view can reach is its original position
-        CGFloat minY = relativeY;
-        CGPoint superRelativePosition = supercomponent == self ? CGPointZero : [supercomponent.supercomponent.view convertPoint:supercomponent.view.frame.origin toView:self.view];
-        CGFloat maxY = superRelativePosition.y + supercomponent.calculatedFrame.size.height - component.calculatedFrame.size.height;
-        
-        CGFloat stickyY = scrollOffsetY;
-        if (stickyY < minY) {
-            stickyY = minY;
-        } else if (stickyY > maxY && ![supercomponent conformsToProtocol:@protocol(WXScrollerProtocol)]) {
-            // Sticky component can not go beyond its parent's bounds when its parent is not scroller;
-            stickyY = maxY;
-        }
-        
-        UIView *stickyView = component.view;
-        CGPoint origin = stickyView.frame.origin;
-        origin.y = stickyY;
-        stickyView.frame = (CGRect){origin,stickyView.frame.size};
-    }
-}
-
-- (void)addScrollToListener:(WXComponent *)target
-{
-    BOOL has = NO;
-    NSMutableArray *listenerArray = [self.listenerArray copy];
-    for (WXScrollToTarget *targetData in listenerArray) {
-        if (targetData.target == target) {
-            has = YES;
-            break;
-        }
-    }
-    if (!has) {
-        WXScrollToTarget *scrollTarget = [[WXScrollToTarget alloc] init];
-        scrollTarget.target = target;
-        scrollTarget.hasAppear = NO;
-        [self.listenerArray addObject:scrollTarget];
-    }
-}
-
-- (void)removeScrollToListener:(WXComponent *)target
-{
-    if (_shouldRemoveScrollerListener) {
-        WXScrollToTarget *targetData = nil;
-        NSMutableArray *listenerArray = [self.listenerArray copy];
-        for (WXScrollToTarget *targetDataTemp in listenerArray) {
-            if (targetDataTemp.target == target) {
-                targetData = targetDataTemp;
-                break;
-            }
-        }
-        if(targetData) {
-            [self.listenerArray removeObject:targetData];
-        }
-    }
-}
-
-- (void)scrollToComponent:(WXComponent *)component withOffset:(CGFloat)offset animated:(BOOL)animated
-{
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    // http://dotwe.org/vue/aa1af34e5fc745c0f1520e346904682a
-    // ignore scroll action if contentSize smaller than scroller frame
-    if (_scrollDirection == WXScrollDirectionVertical && scrollView.contentSize.height < scrollView.frame.size.height) {
-        return;
-    }
-    if (_scrollDirection == WXScrollDirectionHorizontal && scrollView.contentSize.width < scrollView.frame.size.width) {
-        return;
-    }
-
-
-    CGPoint contentOffset = scrollView.contentOffset;
-    CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
-    
-    if (_scrollDirection == WXScrollDirectionHorizontal) {
-        CGFloat contentOffetX = 0;
-        if (self.isDirectionRTL && component.supercomponent != self) {
-            contentOffetX = [component.supercomponent.view convertPoint:CGPointMake(CGRectGetMaxX(component.view.frame), component.view.frame.origin.y) toView:self.view].x;
-        } else {
-            contentOffetX = [component.supercomponent.view convertPoint:component.view.frame.origin toView:self.view].x;
-        }
-        contentOffetX += offset * scaleFactor;
-        
-        if (scrollView.contentSize.width >= scrollView.frame.size.width && contentOffetX > scrollView.contentSize.width - scrollView.frame.size.width) {
-            contentOffset.x = scrollView.contentSize.width - scrollView.frame.size.width;
-        } else {
-            contentOffset.x = contentOffetX;
-        }
-    } else {
-        CGFloat contentOffetY = [component.supercomponent.view convertPoint:component.view.frame.origin toView:self.view].y;
-        contentOffetY += offset * scaleFactor;
-        
-        if (scrollView.contentSize.height >= scrollView.frame.size.height && contentOffetY > scrollView.contentSize.height - scrollView.frame.size.height) {
-            contentOffset.y = scrollView.contentSize.height - scrollView.frame.size.height;
-        } else {
-            contentOffset.y = contentOffetY;
-        }
-    }
-    
-    [scrollView setContentOffset:contentOffset animated:animated];
-}
-
-- (BOOL)isNeedLoadMore
-{
-    if (WXScrollDirectionVertical == _scrollDirection) {
-        if (_loadMoreOffset >= 0.0 && ((UIScrollView *)self.view).contentOffset.y >= 0) {
-            return _previousLoadMoreContentHeight != ((UIScrollView *)self.view).contentSize.height && ((UIScrollView *)self.view).contentSize.height - ((UIScrollView *)self.view).contentOffset.y -  self.view.frame.size.height <= _loadMoreOffset;
-        }
-    } else if (WXScrollDirectionHorizontal == _scrollDirection) {
-        if (_loadMoreOffset >= 0.0 && ((UIScrollView *)self.view).contentOffset.x >= 0) {
-            return _previousLoadMoreContentHeight != ((UIScrollView *)self.view).contentSize.width && ((UIScrollView *)self.view).contentSize.width - ((UIScrollView *)self.view).contentOffset.x -  self.view.frame.size.width <= _loadMoreOffset;
-        }
-    }
-    
-    return NO;
-}
-
-- (void)loadMore
-{
-    [self fireEvent:@"loadmore" params:nil];
-    
-    if (WXScrollDirectionVertical == _scrollDirection) {
-        _previousLoadMoreContentHeight = ((UIScrollView *)self.view).contentSize.height;
-    } else if (WXScrollDirectionHorizontal == _scrollDirection) {
-        _previousLoadMoreContentHeight = ((UIScrollView *)self.view).contentSize.width;
-    }
-}
-
-- (CGPoint)contentOffset
-{
-    CGPoint rtv = CGPointZero;
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    if (scrollView) {
-        rtv = scrollView.contentOffset;
-    }
-    return rtv;
-}
-
-- (void)setContentOffset:(CGPoint)contentOffset
-{
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    [scrollView setContentOffset:contentOffset];
-}
-
-- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
-{
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    [scrollView setContentOffset:contentOffset animated:animated];
-}
-
-- (CGSize)contentSize
-{
-    return ((UIScrollView *)self.view).contentSize;
-}
-
-- (void)setContentSize:(CGSize)size
-{
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    scrollView.contentSize = size;
-}
-
-- (UIEdgeInsets)contentInset
-{
-    UIEdgeInsets rtv = UIEdgeInsetsZero;
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    if (scrollView) {
-        rtv = scrollView.contentInset;
-    }
-    return rtv;
-}
-
-- (void)setContentInset:(UIEdgeInsets)contentInset
-{
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    [scrollView setContentInset:contentInset];
-}
-
-- (void)addScrollDelegate:(id<UIScrollViewDelegate>)delegate
-{
-    if (delegate) {
-        if (!_delegates) {
-            _delegates = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory];
-        }
-        [_delegates addObject:delegate];
-    }
-}
-
-- (void)removeScrollDelegate:(id<UIScrollViewDelegate>)delegate
-{
-    if (delegate) {
-        [_delegates removeObject:delegate];
-    }
-}
-
-- (WXScrollDirection)scrollDirection
-{
-    return _scrollDirection;
-}
-
-- (NSString*)refreshType
-{
-    return _refreshType;
-}
-- (BOOL)requestGestureShouldStopPropagation:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    return [self gestureShouldStopPropagation:gestureRecognizer shouldReceiveTouch:touch];
-}
-
-#pragma mark UIScrollViewDelegate
-
-- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
-{
-    _isDragging = YES;
-    
-    if ([_refreshType isEqualToString:@"refreshForAppear"] && _refreshComponent) {
-        [_refreshComponent setIndicatorHidden:NO];
-    }
-    
-    _scrollStartPoint = scrollView.contentOffset;
-    
-    if (_scrollStartEvent || _scrollEventListener) {
-        CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
-        NSDictionary *contentSizeData = @{@"width":@(scrollView.contentSize.width / scaleFactor),
-                                          @"height":@(scrollView.contentSize.height / scaleFactor)};
-        NSDictionary *contentOffsetData = @{@"x":@(-scrollView.contentOffset.x / scaleFactor),
-                                            @"y":@(-scrollView.contentOffset.y / scaleFactor)};
-        NSDictionary *params = @{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData, @"isDragging":@(scrollView.isDragging)};
-        
-        if (_scrollStartEvent) {
-            [self fireEvent:@"scrollstart" params:params domChanges:nil];
-        }
-        if (_scrollEventListener) {
-            _scrollEventListener(self, @"scrollstart", params);
-        }
-    }
-    
-    NSHashTable *delegates = [_delegates copy];
-    for (id<UIScrollViewDelegate> delegate in delegates) {
-        if ([delegate respondsToSelector:@selector(scrollViewWillBeginDragging:)]) {
-            [delegate scrollViewWillBeginDragging:scrollView];
-        }
-    }
-}
-
-- (void)scrollViewDidScroll:(UIScrollView *)scrollView
-{
-    //apply block which are registered
-    WXSDKInstance *instance = self.weexInstance;
-    if ([self.ref isEqualToString:WX_SDK_ROOT_REF] &&
-        [self isKindOfClass:[WXScrollerComponent class]]) {
-        if (instance.onScroll) {
-            instance.onScroll(scrollView.contentOffset);
-        }
-    }
-    
-    if (_lastContentOffset.x > scrollView.contentOffset.x) {
-        _direction = @"right";
-    } else if (_lastContentOffset.x < scrollView.contentOffset.x) {
-        _direction = @"left";
-        if (WXScrollDirectionHorizontal == _scrollDirection) {
-            [self handleLoadMore];
-        }
-    } else if(_lastContentOffset.y > scrollView.contentOffset.y) {
-        _direction = @"down";
-    } else if(_lastContentOffset.y < scrollView.contentOffset.y) {
-        _direction = @"up";
-        if (WXScrollDirectionVertical == _scrollDirection) {
-            [self handleLoadMore];
-        }
-    }
-    
-    CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
-    if (_isDragging) {
-        // only trigger pullingDown event when user is dragging
-        [_refreshComponent pullingdown:@{
-                                         REFRESH_DISTANCE_Y: @(fabs((scrollView.contentOffset.y - _lastContentOffset.y)/scaleFactor)),
-                                         REFRESH_VIEWHEIGHT: @(_refreshComponent.view.frame.size.height/scaleFactor),
-                                         REFRESH_PULLINGDISTANCE: @(fabs(scrollView.contentOffset.y/scaleFactor)),
-                                         @"type":@"pullingdown"
-                                         }];
-    }
-    _lastContentOffset = scrollView.contentOffset;
-    // check sticky
-    [self adjustSticky];
-    [self handleAppear];
-    
-    if (self.onScroll) {
-        self.onScroll(scrollView);
-    }
-    
-    if (_scrollEvent || _scrollEventListener) {
-        CGFloat distance = 0;
-        if (_scrollDirection == WXScrollDirectionHorizontal) {
-            distance = scrollView.contentOffset.x - _lastScrollEventFiredOffset.x;
-        } else {
-            distance = scrollView.contentOffset.y - _lastScrollEventFiredOffset.y;
-        }
-        if (fabs(distance) >= _offsetAccuracy) {
-            NSDictionary *contentSizeData = @{@"width": @(scrollView.contentSize.width / scaleFactor),
-                                              @"height": @(scrollView.contentSize.height / scaleFactor)};
-            //contentOffset values are replaced by (-contentOffset.x,-contentOffset.y), in order to be consistent with Android client.
-            NSDictionary *contentOffsetData = @{@"x": @(-scrollView.contentOffset.x / scaleFactor),
-                                                @"y": @(-scrollView.contentOffset.y / scaleFactor)};
-            
-            if (_scrollEvent) {
-                [self fireEvent:@"scroll" params:@{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData} domChanges:nil];
-            }
-            if (_scrollEventListener) {
-                _scrollEventListener(self, @"scroll", @{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData});
-            }
-            _lastScrollEventFiredOffset = scrollView.contentOffset;
-        }
-    }
-    
-    NSHashTable *delegates = [_delegates copy];
-    for (id<UIScrollViewDelegate> delegate in delegates) {
-        if ([delegate respondsToSelector:@selector(scrollViewDidScroll:)]) {
-            [delegate scrollViewDidScroll:scrollView];
-        }
-    }
-}
-
-- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
-{
-    [self dispatchScrollEndEvent:scrollView];
-    
-    UIEdgeInsets inset = [scrollView contentInset];
-    
-//  currently only set contentInset when loading
-//    if ([_refreshComponent displayState]) {
-//        inset.top = _refreshComponent.view.frame.size.height;
-//    }
-//    else {
-//        inset.top = 0;
-//    }
-    
-    if ([_loadingComponent displayState]) {
-        inset.bottom = _loadingComponent.view.frame.size.height;
-    } else {
-        inset.bottom = 0;
-    }
-    [scrollView setContentInset:inset];
-    
-    NSHashTable *delegates = [_delegates copy];
-    for (id<UIScrollViewDelegate> delegate in delegates) {
-        if ([delegate respondsToSelector:@selector(scrollViewDidEndScrollingAnimation:)]) {
-            [delegate scrollViewDidEndScrollingAnimation:scrollView];
-        }
-    }
-}
-
-- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
-{
-    if (!_isScrolling) {
-        [self dispatchScrollEndEvent:scrollView];
-        _scrollEndPoint = scrollView.contentOffset;
-        id<WXPageEventNotifyEventProtocol> eventNotify = [WXSDKEngine handlerForProtocol:@protocol(WXPageEventNotifyEventProtocol)];
-        if ([eventNotify respondsToSelector:@selector(notifyScrollEvent:from:to:)]) {
-            [eventNotify notifyScrollEvent:self.weexInstance.instanceId from:_scrollStartPoint to:_scrollEndPoint];
-        }
-    }
-    
-    NSHashTable *delegates = [_delegates copy];
-    for (id<UIScrollViewDelegate> delegate in delegates) {
-        if ([delegate respondsToSelector:@selector(scrollViewDidEndDecelerating:)]) {
-            [delegate scrollViewDidEndDecelerating:scrollView];
-        }
-    }
-}
-
-- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
-{
-    // Page stop effect
-    if (_pagingEnabled && _pageSize > 0) {
-        if (_scrollDirection == WXScrollDirectionVertical) {
-            CGFloat targetY = scrollView.contentOffset.y + velocity.y * 120.0;
-            CGFloat targetIndex = round(targetY / _pageSize);
-            
-            /*
-             When user's finger departs from screen with any velocity (like swipe gesture).
-             We make sure that target index is changed.
-             */
-            CGFloat sourceIndex = round(_scrollStartPoint.y / _pageSize);
-            if (velocity.y > 0.3) {
-                if (targetIndex <= sourceIndex) {
-                    targetIndex = sourceIndex + 1;
-                }
-            }
-            else if (velocity.y < -0.3) {
-                if (targetIndex >= sourceIndex) {
-                    targetIndex = sourceIndex - 1;
-                }
-            }
-            
-            if (targetIndex < 0)
-                targetIndex = 0;
-            
-            targetContentOffset->y = targetIndex * _pageSize;
-        }
-        else {
-            CGFloat targetX = scrollView.contentOffset.x + velocity.x * 120.0;
-            CGFloat targetIndex = round(targetX / _pageSize);
-            
-            /*
-             When user's finger departs from screen with any velocity (like swipe gesture).
-             We make sure that target index is changed.
-             */
-            CGFloat sourceIndex = round(_scrollStartPoint.x / _pageSize);
-            if (velocity.x > 0.3) {
-                if (targetIndex <= sourceIndex) {
-                    targetIndex = sourceIndex + 1;
-                }
-            }
-            else if (velocity.x < -0.3) {
-                if (targetIndex >= sourceIndex) {
-                    targetIndex = sourceIndex - 1;
-                }
-            }
-            
-            if (targetIndex < 0)
-                targetIndex = 0;
-            targetContentOffset->x = targetIndex * _pageSize;
-        }
-    }
-    
-    if ([_refreshType isEqualToString:@"refreshForAppear"]) {
-        if(targetContentOffset == nil)
-            return;
-        CGPoint offset = *targetContentOffset;
-        if(velocity.y <= 0) {
-            // drop down
-            if( offset.y <= _refreshComponent.calculatedFrame.size.height ) {
-                [self loadMoreIfNeed];
-            }
-        } else if (velocity.y > 0) {
-            // drop up
-        }
-    }
-    
-    NSHashTable *delegates = [_delegates copy];
-    for (id<UIScrollViewDelegate> delegate in delegates) {
-        if ([delegate respondsToSelector:@selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:)]) {
-            [delegate scrollViewWillEndDragging:scrollView withVelocity:velocity targetContentOffset:targetContentOffset];
-        }
-    }
-}
-
-- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
-{
-    [_loadingComponent.view setHidden:NO];
-    [_refreshComponent.view setHidden:NO];
-    
-    //refresh
-    if ([_refreshType isEqualToString:@"refreshForWholeVisible"]) {
-        if (_refreshComponent && scrollView.contentOffset.y < 0 && scrollView.contentOffset.y + _refreshComponent.calculatedFrame.size.height < _refreshComponent.calculatedFrame.origin.y) {
-            [_refreshComponent refresh];
-        }
-    }
-    
-    //loading
-    if (_loadingComponent && scrollView.contentOffset.y > 0 &&
-        scrollView.contentOffset.y + scrollView.frame.size.height > _loadingComponent.view.frame.origin.y + _loadingComponent.calculatedFrame.size.height) {
-        [_loadingComponent loading];
-    }
-    if (!decelerate) {
-        _isScrolling = NO;
-        [self performSelector:@selector(scrollViewDidEndDecelerating:) withObject:scrollView afterDelay:0.1];
-    }
-    
-    NSHashTable *delegates = [_delegates copy];
-    for (id<UIScrollViewDelegate> delegate in delegates) {
-        if ([delegate respondsToSelector:@selector(scrollViewDidEndDragging:willDecelerate:)]) {
-            [delegate scrollViewDidEndDragging:scrollView willDecelerate:decelerate];
-        }
-    }
-    
-    _isDragging = NO;
-}
-
-- (void)loadMoreIfNeed
-{
-    WXScrollerComponentView* scrollView = (WXScrollerComponentView *)self.view;
-    if (scrollView.isDragging || scrollView.isTracking || scrollView.isDecelerating) {
-        [self performSelector:@selector(loadMoreIfNeed) withObject:nil afterDelay:0.1];
-        return;
-    }
-    [_refreshComponent refresh];
-}
-
-- (void)handleAppear
-{
-    if (![self isViewLoaded]) {
-        return;
-    }
-    UIScrollView *scrollView = (UIScrollView *)self.view;
-    CGFloat vx = scrollView.contentInset.left + scrollView.contentOffset.x;
-    CGFloat vy = scrollView.contentInset.top + scrollView.contentOffset.y;
-    CGFloat vw = scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right;
-    CGFloat vh = scrollView.frame.size.height - scrollView.contentInset.top - scrollView.contentInset.bottom;
-    CGRect scrollRect = CGRectMake(vx, vy, vw, vh);;
-    
-    // notify action for appear
-    NSArray *listenerArrayCopy = [self.listenerArray copy];
-    for(WXScrollToTarget *target in listenerArrayCopy){
-        if (_shouldNotifiAppearDescendantView) {
-            // if target component is descendant of scrollerview, it should notify the appear event handler, or here will skip this appear calculation.
-            if ([target.target isViewLoaded] && [target.target.view isDescendantOfView:self.view]) {
-                [self scrollToTarget:target scrollRect:scrollRect];
-            }
-        } else {
-            [self scrollToTarget:target scrollRect:scrollRect];
-        }
-    }
-}
-
-- (CGPoint)absolutePositionForComponent:(WXComponent *)component
-{
-    return [component->_view.superview convertPoint:component->_view.frame.origin toView:_view];
-}
-
-#pragma mark  Private Methods
-- (void)dispatchScrollEndEvent:(UIScrollView *)scrollView
-{
-    if (_scrollEndEvent || _scrollEventListener) {
-        CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
-        NSDictionary *contentSizeData = @{@"width":@(scrollView.contentSize.width / scaleFactor),
-                                          @"height":@(scrollView.contentSize.height / scaleFactor)};
-        NSDictionary *contentOffsetData = @{@"x":@(-scrollView.contentOffset.x / scaleFactor),
-                                            @"y":@(-scrollView.contentOffset.y / scaleFactor)};
-        if (_scrollEndEvent) {
-            [self fireEvent:@"scrollend" params:@{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData} domChanges:nil];
-        }
-        if (_scrollEventListener) {
-            _scrollEventListener(self, @"scrollend", @{@"contentSize":contentSizeData, @"contentOffset":contentOffsetData});
-        }
-    }
-}
-
-- (void)scrollToTarget:(WXScrollToTarget *)target scrollRect:(CGRect)rect
-{
-    WXComponent *component = target.target;
-    if (![component isViewLoaded]) { 
-        return;
-    }
-    
-    CGFloat ctop;
-    if (component && component->_view && component->_view.superview) {
-        ctop = [self absolutePositionForComponent:component].y;
-    } else {
-        ctop = 0.0;
-    }
-    CGFloat cbottom = ctop + CGRectGetHeight(component.calculatedFrame);
-    CGFloat cleft;
-    if (component && component->_view && component->_view.superview) {
-        cleft = [self absolutePositionForComponent:component].x;
-    } else {
-        cleft = 0.0;
-    }
-    CGFloat cright = cleft + CGRectGetWidth(component.calculatedFrame);
-    
-    CGFloat vtop = CGRectGetMinY(rect), vbottom = CGRectGetMaxY(rect), vleft = CGRectGetMinX(rect), vright = CGRectGetMaxX(rect);
-    if(cbottom > vtop && ctop <= vbottom && cleft <= vright && cright > vleft){
-        if(!target.hasAppear && component){
-            target.hasAppear = YES;
-            if (component->_appearEvent) {
-//                NSLog(@"appear:%@, %.2f", component, ctop);
-                [component fireEvent:@"appear" params:_direction ? @{@"direction":_direction} : nil];
-            }
-        }
-    } else {
-        if(target.hasAppear && component){
-            target.hasAppear = NO;
-            if(component->_disappearEvent){
-//                NSLog(@"disappear:%@", component);
-                [component fireEvent:@"disappear" params:_direction ? @{@"direction":_direction} : nil];
-            }
-        }
-    }
-}
-
-- (void)handleLoadMore
-{
-    if (_listenLoadMore && [self isNeedLoadMore]) {
-        [self loadMore];
-    }
-}
-
-#pragma mark Layout
-
-- (CGFloat)_getInnerContentMainSize
-{
-    if (_scrollDirection == WXScrollDirectionVertical) {
-        return _contentSize.height;
-    }
-    else if (_scrollDirection == WXScrollDirectionHorizontal) {
-        return _contentSize.width;
-    }
-    else {
-        return -1.0f;
-    }
-}
-
-- (void)_assignInnerContentMainSize:(CGFloat)value
-{
-    if (_scrollDirection == WXScrollDirectionVertical) {
-        _contentSize.height = value;
-    }
-    else if (_scrollDirection == WXScrollDirectionHorizontal) {
-        _contentSize.width = value;
-    }
-}
-
-- (void)_layoutPlatform
-{
-    /* Handle multiple vertical scrollers inside horizontal scroller case. In weexcore,
-     a verticall list with NAN height will be set flex=1, which suppresses its style-width property.
-     This will cause two lists with style-width 750px in a horizontal scroller sharing one screen width.
-     Here we respect its style-width property so that the two lists will both be screen width wide. */
-    
-    if (_needsPlatformLayout) {
-        if (_flexCssNode) {
-            float top = _flexCssNode->getLayoutPositionTop();
-            float left = _flexCssNode->getLayoutPositionLeft();
-            float width = _flexCssNode->getLayoutWidth();
-            float height = _flexCssNode->getLayoutHeight();
-
-            if (_scrollDirection == WXScrollDirectionVertical) {
-                _flexCssNode->setFlexDirection(WeexCore::kFlexDirectionColumn, NO);
-                _flexCssNode->setStyleWidth(_flexCssNode->getLayoutWidth(), NO);
-                _flexCssNode->setStyleHeight(FlexUndefined);
-            } else {
-                _flexCssNode->setFlexDirection(WeexCore::kFlexDirectionRow, NO);
-                _flexCssNode->setStyleHeight(_flexCssNode->getLayoutHeight());
-                _flexCssNode->setStyleWidth(FlexUndefined, NO);
-            }
-
-            _flexCssNode->markAllDirty();
-            
-            // this is scroll rtl solution.
-            // scroll layout not use direction, use self tranform
-            // but we need inherit direction in CSS, so we set children layout diretion manually
-            _flexCssNode->determineChildLayoutDirection(_flexCssNode->getLayoutDirectionFromPathNode());
-            
-            std::pair<float, float> renderPageSize;
-            renderPageSize.first = self.weexInstance.frame.size.width;
-            renderPageSize.second = self.weexInstance.frame.size.height;
-            auto parent = _flexCssNode->getParent(); // clear parent temporarily
-            _flexCssNode->setParent(nullptr, _flexCssNode);
-            _flexCssNode->calculateLayout(renderPageSize);
-            _flexCssNode->setParent(parent, _flexCssNode);
-            
-            // set origin and size back
-            _flexCssNode->rewriteLayoutResult(left, top, width, height);
-        }
-    }
-    else {
-        // should not happen, set platform layout to false
-        _flexCssNode->setNeedsPlatformDependentLayout(false);
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h
deleted file mode 100644
index 81b75fa..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXComponent.h"
-
-typedef NS_ENUM(NSInteger, WXSliderNeighborOption)
-{
-    WXSliderNeighborOptionWrap = 0,
-    WXSliderNeighborOptionShowBackfaces,
-    WXSliderNeighborOptionOffsetMultiplier,
-    WXSliderNeighborOptionVisibleItems,
-    WXSliderNeighborOptionCount,
-    WXSliderNeighborOptionArc,
-    WXSliderNeighborOptionAngle,
-    WXSliderNeighborOptionRadius,
-    WXSliderNeighborOptionTilt,
-    WXSliderNeighborOptionSpacing,
-    WXSliderNeighborOptionFadeMin,
-    WXSliderNeighborOptionFadeMax,
-    WXSliderNeighborOptionFadeRange,
-    WXSliderNeighborOptionFadeMinAlpha
-};
-
-@class WXSliderNeighborView;
-@class WXIndicatorView;
-
-@protocol WXSliderNeighborDelegate <NSObject>
-@optional
-
-- (void)sliderNeighborWillBeginScrollingAnimation:(WXSliderNeighborView * _Nonnull )sliderNeighbor;
-- (void)sliderNeighborDidEndScrollingAnimation:(WXSliderNeighborView *_Nonnull)sliderNeighbor;
-- (void)sliderNeighborDidScroll:(WXSliderNeighborView * _Nonnull)sliderNeighbor;
-- (void)sliderNeighborCurrentItemIndexDidChange:(WXSliderNeighborView * _Nonnull)sliderNeighbor from:(NSInteger) from to:(NSInteger)to;
-- (void)sliderNeighborWillBeginDragging:(WXSliderNeighborView * _Nonnull)sliderNeighbor;
-- (void)sliderNeighborDidEndDragging:(WXSliderNeighborView * _Nonnull)sliderNeighbor willDecelerate:(BOOL)decelerate;
-- (void)sliderNeighborWillBeginDecelerating:(WXSliderNeighborView * _Nonnull)sliderNeighbor;
-- (void)sliderNeighborDidEndDecelerating:(WXSliderNeighborView * _Nonnull)sliderNeighbor;
-
-- (BOOL)sliderNeighbor:(WXSliderNeighborView * _Nonnull)sliderNeighbor shouldSelectItemAtIndex:(NSInteger)index;
-- (void)sliderNeighbor:(WXSliderNeighborView * _Nonnull)sliderNeighbor didSelectItemAtIndex:(NSInteger)index;
-- (void)sliderNeighbor:(WXSliderNeighborView * _Nonnull)sliderNeighbor didScrollToItemAtIndex:(NSInteger)index;
-
-- (CGFloat)sliderNeighborItemWidth:(WXSliderNeighborView * _Nonnull)sliderNeighbor;
-- (CGFloat)sliderNeighbor:(WXSliderNeighborView * _Nonnull)sliderNeighbor valueForOption:(WXSliderNeighborOption)option withDefault:(CGFloat)value;
-
-@end
-
-@protocol WXSliderNeighborDataSource <NSObject>
-
-- (NSInteger)numberOfItemsInSliderNeighbor:(WXSliderNeighborView * _Nonnull)sliderNeighbor;
-- (UIView * _Nonnull)sliderNeighbor:(WXSliderNeighborView * _Nonnull)sliderNeighbor viewForItemAtIndex:(NSInteger)index reusingView:( UIView * _Nonnull)view;
-
-@optional
-
-- (NSInteger)numberOfPlaceholdersInsliderNeighbor:(WXSliderNeighborView * _Nonnull)sliderNeighbor;
-- (UIView * _Nonnull)sliderNeighbor:(WXSliderNeighborView * _Nonnull)sliderNeighbor placeholderViewAtIndex:(NSInteger)index reusingView:( UIView * _Nonnull)view;
-
-@end
-
-@interface WXSliderNeighborComponent : WXComponent<WXSliderNeighborDelegate, WXSliderNeighborDataSource>
-
-- (void)setIndicatorView:(WXIndicatorView *_Nonnull)indicatorView;
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.mm
deleted file mode 100644
index cce715c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.mm
+++ /dev/null
@@ -1,1803 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSliderNeighborComponent.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXComponent_internal.h"
-#import "WXIndicatorComponent.h"
-#import "WXSDKInstance.h"
-#import "NSTimer+Weex.h"
-#import "WXComponent+Layout.h"
-
-#define MAX_VISIBLE_ITEMS 30
-#define MIN_TOGGLE_DURATION 0.2
-#define MAX_TOGGLE_DURATION 0.4
-#define SCROLL_DURATION 0.4
-#define INSERT_DURATION 0.4
-#define DECELERATE_THRESHOLD 0.1
-#define SCROLL_SPEED_THRESHOLD 2.0
-#define SCROLL_DISTANCE_THRESHOLD 0.1
-#define DECELERATION_MULTIPLIER 30.0
-#define FLOAT_ERROR_MARGIN 0.000001
-
-@protocol WXSliderNeighborDelegate, WXSliderNeighborDataSource;
-
-@interface WXSliderNeighborView: UIView
-@property (nonatomic, strong) WXIndicatorView *indicator;
-@property (nonatomic, weak) id<WXSliderNeighborDelegate> delegate;
-@property (nonatomic, weak) id<WXSliderNeighborDataSource> dataSource;
-@property (nonatomic, assign) CGFloat perspective;
-@property (nonatomic, readonly, getter = isDragging) BOOL dragging;
-@property (nonatomic, readonly, getter = isScrolling) BOOL scrolling;
-@property (nonatomic, assign) CGFloat autoscroll;
-@property (nonatomic, assign) CGFloat scrollOffset;
-@property (nonatomic, assign) CGFloat previousTranslation;
-@property (nonatomic, assign, getter = isVertical) BOOL vertical;
-@property (nonatomic, assign) CGFloat decelerationRate;
-@property (nonatomic, assign, getter = isScrollEnabled) BOOL scrollEnabled;
-@property (nonatomic, assign, getter = isPagingEnabled) BOOL pagingEnabled;
-@property (nonatomic, assign) BOOL bounces;
-@property (nonatomic, assign) BOOL didDrag;
-@property (nonatomic, readonly, getter = isDecelerating) BOOL decelerating;
-@property (nonatomic, strong, readonly) UIView *contentView;
-@property (nonatomic, strong) NSMutableDictionary *itemViews;
-@property (nonatomic, readonly) NSInteger numberOfVisibleItems;
-@property (nonatomic, readonly) NSInteger numberOfItems;
-@property (nonatomic, readonly) NSInteger numberOfPlaceholders;
-@property (nonatomic, strong) NSMutableSet *itemViewPool;
-@property (nonatomic, strong) NSMutableSet *placeholderViewPool;
-@property (nonatomic, assign) NSTimeInterval startTime;
-@property (nonatomic, assign) NSTimeInterval lastTime;
-@property (nonatomic, assign) CGFloat startVelocity;
-@property (nonatomic, assign) CGFloat offsetMultiplier;
-@property (nonatomic, assign) CGFloat startOffset;
-@property (nonatomic, assign) CGFloat endOffset;
-@property (nonatomic, assign) CGSize contentOffset;
-@property (nonatomic, assign) CGSize viewpointOffset;
-@property (nonatomic, assign) CGFloat scrollSpeed;
-@property (nonatomic, assign) CGFloat bounceDistance;
-@property (nonatomic, assign) BOOL stopAtItemBoundary;
-@property (nonatomic, assign) BOOL scrollToItemBoundary;
-@property (nonatomic, assign) BOOL centerItemWhenSelected;
-@property (nonatomic, assign) NSTimeInterval scrollDuration;
-@property (nonatomic, readonly, getter = isWrapEnabled) BOOL wrapEnabled;
-@property (nonatomic, strong) NSTimer *timer;
-@property (nonatomic, assign) NSInteger numberOfPlaceholdersToShow;
-@property (nonatomic, assign) CGFloat previousScrollOffset;
-@property (nonatomic, assign) NSTimeInterval toggleTime;
-@property (nonatomic, readonly) CGFloat toggle;
-@property (nonatomic, assign) NSInteger previousItemIndex;
-@property (nonatomic, readonly) CGFloat itemWidth;
-@property (nonatomic, assign) BOOL inited;
-@end
-
-@implementation WXSliderNeighborView
-
-- (instancetype)init {
-    
-    self = [super init];
-    if (!self) {
-    }
-    _decelerationRate = 0.01;
-    _scrollEnabled = YES;
-    _bounces = YES;
-    _offsetMultiplier = 1.0;
-    _perspective = -1.0/500.0;
-    _contentOffset = CGSizeZero;
-    _viewpointOffset = CGSizeZero;
-    _scrollSpeed = 1.0;
-    _bounceDistance = 1.0;
-    _stopAtItemBoundary = YES;
-    _scrollToItemBoundary = YES;
-    _centerItemWhenSelected = YES;
-    _inited = NO;
-    
-    _contentView = [[UIView alloc] initWithFrame:self.bounds];
-    
-    //pan gesture recognizer
-    self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
-    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didPan:)];
-    panGesture.delegate = (id <UIGestureRecognizerDelegate>)self;
-    [_contentView addGestureRecognizer:panGesture];
-    
-    //tap gesture recognizer
-    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap:)];
-    tapGesture.delegate = (id <UIGestureRecognizerDelegate>)self;
-    [_contentView addGestureRecognizer:tapGesture];
-    
-    self.accessibilityTraits = UIAccessibilityTraitAllowsDirectInteraction;
-    self.isAccessibilityElement = YES;
-    
-    [self addSubview:_contentView];
-    
-    if (_dataSource) {
-        [self reloadData];
-    }
-    
-    return self;
-}
-
-- (void)dealloc
-{
-    [self stopAnimation];
-}
-
-- (void)accessibilityIncrement
-{
-    [self setCurrentItemIndex: [self lastItemIndex]];
-}
-
-- (void)accessibilityDecrement
-{
-    [self setCurrentItemIndex:[self nextItemIndex]];
-}
-
-- (void)setDataSource:(id<WXSliderNeighborDataSource>)dataSource
-{
-    if (_dataSource != dataSource) {
-        _dataSource = dataSource;
-        if (_dataSource) {
-            [self reloadData];
-        }
-    }
-}
-
-- (void)setDelegate:(id<WXSliderNeighborDelegate>)delegate
-{
-    if (_delegate != delegate) {
-        _delegate = delegate;
-        if (_delegate && _dataSource) {
-            [self setNeedsLayout];
-        }
-    }
-}
-
-- (void)setVertical:(BOOL)vertical
-{
-    if (_vertical != vertical)
-    {
-        _vertical = vertical;
-        [self layOutItemViews];
-    }
-}
-
-#pragma clang diagnostic push
-#pragma GCC diagnostic ignored "-Wundeclared-selector"
-- (void)setCurrentItemIndex:(NSInteger)currentItemIndex
-{
-    if ([self currentItemIndex] == currentItemIndex) return;
-    
-    [self setScrollOffset:currentItemIndex];
-    [self.indicator setCurrentPoint:currentItemIndex];
-    
-    if (self.delegate && [self.delegate respondsToSelector:@selector(sliderView:didScrollToItemAtIndex:)]) {
-        [self.delegate sliderNeighbor:self didScrollToItemAtIndex:currentItemIndex];
-    }
-    [self scroll2ItemViewAtIndex:currentItemIndex animated:YES];
-    
-}
-#pragma clang diagnostic pop
-
-- (void)updateItemWidth
-{
-    _itemWidth = [_delegate sliderNeighborItemWidth:self] ?: _itemWidth;
-    if (_numberOfItems > 0) {
-        if ([_itemViews count] == 0) {
-            [self loadViewAtIndex:0];
-        }
-    } else if (_numberOfPlaceholders > 0) {
-        if ([_itemViews count] == 0) {
-            [self loadViewAtIndex:-1];
-        }
-    }
-}
-
-- (NSInteger)circularCarouselItemCount
-{
-    NSInteger count = 0;
-    CGFloat spacing = [self valueForOption:WXSliderNeighborOptionSpacing withDefault:1.0];
-    CGFloat width = _vertical ? self.bounds.size.height: self.bounds.size.width;
-    count = MIN(MAX_VISIBLE_ITEMS, MAX(12, ceil(width / (spacing * _itemWidth)) * M_PI));
-    count = MIN(_numberOfItems + _numberOfPlaceholdersToShow, count);
-    return [self valueForOption:WXSliderNeighborOptionCount withDefault:count];
-}
-
-- (void)updateNumberOfVisibleItems
-{
-    //get number of visible items
-    //based on count value
-    CGFloat spacing = [self valueForOption:WXSliderNeighborOptionSpacing withDefault:1.0];
-    CGFloat width = _vertical ? self.bounds.size.height: self.bounds.size.width;
-    CGFloat itemWidth = _itemWidth * spacing;
-    _numberOfVisibleItems = ceil(width / itemWidth) + 2;
-    _numberOfVisibleItems = MIN(MAX_VISIBLE_ITEMS, _numberOfVisibleItems);
-    _numberOfVisibleItems = [self valueForOption:WXSliderNeighborOptionVisibleItems withDefault:_numberOfVisibleItems];
-    _numberOfVisibleItems = MAX(0, MIN(_numberOfVisibleItems, _numberOfItems + _numberOfPlaceholdersToShow));
-    
-}
-
-- (CGFloat)offsetForItemAtIndex:(NSInteger)index
-{
-    //calculate relative position
-    CGFloat offset = index - _scrollOffset;
-    if (_wrapEnabled) {
-        if (offset > _numberOfItems/2.0) {
-            offset -= _numberOfItems;
-        } else if (offset < -_numberOfItems/2.0) {
-            offset += _numberOfItems;
-        }
-    }
-    
-    return offset;
-}
-
-- (CGFloat)alphaForItemWithOffset:(CGFloat)offset
-{
-    CGFloat fadeMin = -INFINITY;
-    CGFloat fadeMax = INFINITY;
-    CGFloat fadeRange = 1.0;
-    CGFloat fadeMinAlpha = 0.0;
-    fadeMin = [self valueForOption:WXSliderNeighborOptionFadeMin withDefault:fadeMin];
-    fadeMax = [self valueForOption:WXSliderNeighborOptionFadeMax withDefault:fadeMax];
-    fadeRange = [self valueForOption:WXSliderNeighborOptionFadeRange withDefault:fadeRange];
-    fadeMinAlpha = [self valueForOption:WXSliderNeighborOptionFadeMinAlpha withDefault:fadeMinAlpha];
-    
-    CGFloat factor = 0.0;
-    if (offset > fadeMax) {
-        factor = offset - fadeMax;
-    } else if (offset < fadeMin) {
-        factor = fadeMin - offset;
-    }
-    return 1.0 - MIN(factor, fadeRange) / fadeRange * (1.0 - fadeMinAlpha);
-}
-
-
-- (UIView *)containView:(UIView *)view
-{
-    //set item width
-    if (!_itemWidth) {
-        _itemWidth = _vertical? view.frame.size.height: view.frame.size.width;
-    }
-    
-    //set container frame
-    CGRect frame = view.frame;
-    frame.size.width = _vertical? frame.size.width: _itemWidth;
-    frame.size.height = _vertical? _itemWidth: frame.size.height;
-    UIView *containerView = [[UIView alloc] initWithFrame:frame];
-    
-    //set view frame
-    frame = view.frame;
-    frame.origin.x = (containerView.bounds.size.width - frame.size.width) / 2.0;
-    frame.origin.y = (containerView.bounds.size.height - frame.size.height) / 2.0;
-    view.frame = frame;
-    [containerView addSubview:view];
-    containerView.layer.opacity = 0;
-    containerView.transform = CGAffineTransformMakeScale(0.8, 1.0);
-    return containerView;
-}
-
-- (void)transformItemViews
-{
-    for (NSNumber *number in _itemViews)
-    {
-        NSInteger index = [number integerValue];
-        UIView *view = _itemViews[number];
-        [self transformItemView:view atIndex:index];
-    }
-}
-
-- (CATransform3D)transformForItemViewWithOffset:(CGFloat)offset
-{
-    //set up base transform
-    CATransform3D transform = CATransform3DIdentity;
-    transform.m34 = _perspective;
-    transform = CATransform3DTranslate(transform, -_viewpointOffset.width, -_viewpointOffset.height, 0.0);
-    
-    //perform transforms
-    CGFloat spacing = [self valueForOption:WXSliderNeighborOptionSpacing withDefault:1.0];
-    if (_vertical) {
-        return CATransform3DTranslate(transform, 0.0, offset * _itemWidth * spacing, 0.0);
-    } else {
-        return CATransform3DTranslate(transform, offset * _itemWidth * spacing, 0.0, 0.0);
-    }
-}
-
-- (void)transformItemView:(UIView *)view atIndex:(NSInteger)index
-{
-    //calculate offset
-    CGFloat offset = [self offsetForItemAtIndex:index];
-    
-    //update alpha
-    view.superview.layer.opacity = [self alphaForItemWithOffset:offset];
-    
-    //center view
-    view.superview.center = CGPointMake(self.bounds.size.width/2.0 + _contentOffset.width,
-                                        self.bounds.size.height/2.0 + _contentOffset.height);
-    
-    //enable/disable interaction
-    view.superview.userInteractionEnabled = (!_centerItemWhenSelected || index == self.currentItemIndex);
-    view.superview.layer.rasterizationScale = [UIScreen mainScreen].scale;
-    
-    [view layoutIfNeeded];
-    
-    CGFloat clampedOffset = MAX(-1.0, MIN(1.0, offset));
-    if (_decelerating || (_scrolling && !_dragging && !_didDrag) || (_autoscroll && !_dragging) ||
-        (!_wrapEnabled && (_scrollOffset < 0 || _scrollOffset >= _numberOfItems - 1))) {
-        if (offset > 0) {
-            _toggle = (offset <= 0.5)? -clampedOffset: (1.0 - clampedOffset);
-        } else {
-            _toggle = (offset > -0.5)? -clampedOffset: (- 1.0 - clampedOffset);
-        }
-    }
-    
-    //calculate transform
-    CATransform3D transform = [self transformForItemViewWithOffset:offset];
-    
-    //transform view
-    view.superview.layer.transform = transform;
-    
-    //backface culling
-    BOOL showBackfaces = view.layer.doubleSided;
-    if (showBackfaces) {
-        showBackfaces = YES;
-    }
-    showBackfaces = !![self valueForOption:WXSliderNeighborOptionShowBackfaces withDefault:showBackfaces];
-    
-    view.superview.hidden = !(showBackfaces ?: (transform.m33 > 0.0));
-}
-
-NSComparisonResult sliderNeighorCompareViewDepth(UIView *view1, UIView *view2, WXSliderNeighborView *self)
-{
-    //compare depths
-    CATransform3D t1 = view1.superview.layer.transform;
-    CATransform3D t2 = view2.superview.layer.transform;
-    CGFloat z1 = t1.m13 + t1.m23 + t1.m33 + t1.m43;
-    CGFloat z2 = t2.m13 + t2.m23 + t2.m33 + t2.m43;
-    CGFloat difference = z1 - z2;
-    
-    //if depths are equal, compare distance from current view
-    if (difference == 0.0) {
-        CATransform3D t3 = [self currentItemView].superview.layer.transform;
-        if (self.vertical) {
-            CGFloat y1 = t1.m12 + t1.m22 + t1.m32 + t1.m42;
-            CGFloat y2 = t2.m12 + t2.m22 + t2.m32 + t2.m42;
-            CGFloat y3 = t3.m12 + t3.m22 + t3.m32 + t3.m42;
-            difference = fabs(y2 - y3) - fabs(y1 - y3);
-        } else {
-            CGFloat x1 = t1.m11 + t1.m21 + t1.m31 + t1.m41;
-            CGFloat x2 = t2.m11 + t2.m21 + t2.m31 + t2.m41;
-            CGFloat x3 = t3.m11 + t3.m21 + t3.m31 + t3.m41;
-            difference = fabs(x2 - x3) - fabs(x1 - x3);
-        }
-    }
-    return (difference < 0.0)? NSOrderedAscending: NSOrderedDescending;
-}
-
-- (void)depthSortViews
-{
-    for (UIView *view in [[_itemViews allValues] sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))sliderNeighorCompareViewDepth context:(__bridge void *)self])
-    {
-        [_contentView bringSubviewToFront:(UIView *__nonnull)view.superview];
-    }
-}
-
-- (void)layOutItemViews
-{
-    //bail out if not set up yet
-    if (!_dataSource || !_contentView) {
-        return;
-    }
-    
-    //update wrap
-    _wrapEnabled = YES;
-    _wrapEnabled = !![self valueForOption:WXSliderNeighborOptionWrap withDefault:_wrapEnabled];
-    
-    //no placeholders on wrapped carousels
-    _numberOfPlaceholdersToShow = _wrapEnabled? 0: _numberOfPlaceholders;
-    
-    //set item width
-    [self updateItemWidth];
-    
-    //update number of visible items
-    [self updateNumberOfVisibleItems];
-    
-    //prevent false index changed event
-    _previousScrollOffset = self.scrollOffset;
-    
-    //update offset multiplier
-    _offsetMultiplier = 1.0;
-    _offsetMultiplier = [self valueForOption:WXSliderNeighborOptionOffsetMultiplier withDefault:_offsetMultiplier];
-    
-    //align
-    if (!_scrolling && !_decelerating && !_autoscroll) {
-        if (_scrollToItemBoundary && self.currentItemIndex != -1) {
-            [self scroll2ItemViewAtIndex:self.currentItemIndex animated:YES];
-        } else {
-            _scrollOffset = [self clampedOffset:_scrollOffset];
-        }
-    }
-    //update views
-    if (_inited) {
-        [self didScroll];
-    }
-    
-    _inited = YES;
-}
-
-- (CGFloat)valueForOption:(WXSliderNeighborOption)option withDefault:(CGFloat)value
-{
-    if (_delegate && [_delegate respondsToSelector:@selector(sliderNeighbor:valueForOption:withDefault:)]) {
-        return [_delegate sliderNeighbor:self valueForOption:option withDefault:value];
-    }
-    return value;
-}
-
-#pragma mark -
-#pragma mark Gestures and taps
-
-- (NSInteger)viewOrSuperviewIndex:(UIView *)view
-{
-    if (view == nil || view == _contentView) {
-        return NSNotFound;
-    }
-    NSInteger index = [self indexOfItemView:view];
-    if (index == NSNotFound) {
-        return [self viewOrSuperviewIndex:view.superview];
-    }
-    return index;
-}
-
-- (BOOL)viewOrSuperview:(UIView *)view implementsSelector:(SEL)selector
-{
-    if (!view || view == self.contentView) {
-        return NO;
-    }
-    
-    Class viewClass = [view class];
-    while (viewClass && viewClass != [UIView class])
-    {
-        unsigned int numberOfMethods;
-        Method *methods = class_copyMethodList(viewClass, &numberOfMethods);
-        for (unsigned int i = 0; i < numberOfMethods; i++)
-        {
-            if (method_getName(methods[i]) == selector) {
-                free(methods);
-                return YES;
-            }
-        }
-        if (methods) free(methods);
-        viewClass = [viewClass superclass];
-    }
-    
-    return [self viewOrSuperview:view.superview implementsSelector:selector];
-}
-
-- (id)viewOrSuperview:(UIView *)view ofClass:(Class)swizzClass
-{
-    if (!view || view == self.contentView) {
-        return nil;
-    } else if ([view isKindOfClass:swizzClass]) {
-        return view;
-    }
-    return [self viewOrSuperview:view.superview ofClass:swizzClass];
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch
-{
-    if (_scrollEnabled) {
-        _dragging = NO;
-        _scrolling = NO;
-        _decelerating = NO;
-    }
-    
-    if ([gesture isKindOfClass:[UITapGestureRecognizer class]]) {
-        //handle tap
-        NSInteger index = [self viewOrSuperviewIndex:touch.view];
-        if (index == NSNotFound && _centerItemWhenSelected) {
-            //view is a container view
-            index = [self viewOrSuperviewIndex:[touch.view.subviews lastObject]];
-        }
-        if (index != NSNotFound) {
-            if ([self viewOrSuperview:touch.view implementsSelector:@selector(touchesBegan:withEvent:)]) {
-                return NO;
-            }
-        }
-    } else if ([gesture isKindOfClass:[UIPanGestureRecognizer class]]) {
-        if (!_scrollEnabled) {
-            return NO;
-        } else if ([self viewOrSuperview:touch.view implementsSelector:@selector(touchesMoved:withEvent:)]) {
-            UIScrollView *scrollView = [self viewOrSuperview:touch.view ofClass:[UIScrollView class]];
-            if (scrollView) {
-                return !scrollView.scrollEnabled ||
-                (self.vertical && scrollView.contentSize.height <= scrollView.frame.size.height) ||
-                (!self.vertical && scrollView.contentSize.width <= scrollView.frame.size.width);
-            }
-            if ([self viewOrSuperview:touch.view ofClass:[UIButton class]] ||
-                [self viewOrSuperview:touch.view ofClass:[UIBarButtonItem class]]) {
-                return YES;
-            }
-            return NO;
-        }
-    }
-    return YES;
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
-   //if the view which the otherGestureRecognizer works on is a scrollview and also it is scrollEnabled vertically ,at this time,we should not block the guesture from being recognized by the otherGestureRecognize
-    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
-        if ([otherGestureRecognizer.view isKindOfClass:[UIScrollView class]]) {
-            UIScrollView* scrollview = (UIScrollView *)otherGestureRecognizer.view;
-            if (scrollview.scrollEnabled) {
-                UIPanGestureRecognizer* panRcgn= (UIPanGestureRecognizer *)gestureRecognizer;
-                //check offset for confirming vertival movement
-                if (fabs([panRcgn translationInView:panRcgn.view].y) > fabs([panRcgn translationInView:panRcgn.view].x)*16) {
-                    return YES;
-                }
-            }
-        }
-    }
-    return NO;
-}
-
-
-- (void)didPan:(UIPanGestureRecognizer *)panGesture
-{
-    if (_scrollEnabled && _numberOfItems) {
-        switch (panGesture.state)
-        {
-            case UIGestureRecognizerStateBegan:
-            {
-                _dragging = YES;
-                _scrolling = NO;
-                _decelerating = NO;
-                _previousTranslation = _vertical? [panGesture translationInView:self].y: [panGesture translationInView:self].x;
-                
-                [_delegate sliderNeighborWillBeginDragging:self];
-                break;
-            }
-            case UIGestureRecognizerStateEnded:
-            case UIGestureRecognizerStateCancelled:
-            case UIGestureRecognizerStateFailed:
-            {
-                _dragging = NO;
-                _didDrag = YES;
-                if ([self shouldDecelerate]) {
-                    _didDrag = NO;
-                    [self startDecelerating];
-                }
-                
-                [self pushAnimationState:YES];
-                [_delegate sliderNeighborDidEndDragging:self willDecelerate:_decelerating];
-                [self popAnimationState];
-                
-                if (!_decelerating) {
-                    if ((_scrollToItemBoundary || fabs(_scrollOffset - [self clampedOffset:_scrollOffset]) > FLOAT_ERROR_MARGIN) && !_autoscroll) {
-                        if (fabs(_scrollOffset - self.currentItemIndex) < FLOAT_ERROR_MARGIN) {
-                            //call scroll to trigger events for legacy support reasons
-                            //even though technically we don't need to scroll at all
-                            [self scroll2ItemViewAtIndex:self.currentItemIndex duration:0.01];
-                        } else {
-                            [self scroll2ItemViewAtIndex:self.currentItemIndex animated:YES];
-                        }
-                    } else {
-                        [self depthSortViews];
-                    }
-                } else {
-                    [self pushAnimationState:YES];
-                    [_delegate sliderNeighborWillBeginDecelerating:self];
-                    [self popAnimationState];
-                }
-                break;
-            }
-            case UIGestureRecognizerStateChanged:
-            {
-                CGFloat translation = _vertical? [panGesture translationInView:self].y: [panGesture translationInView:self].x;
-                CGFloat velocity = _vertical? [panGesture velocityInView:self].y: [panGesture velocityInView:self].x;
-                
-                CGFloat factor = 1.0;
-                if (!_wrapEnabled && _bounces) {
-                    factor = 1.0 - MIN(fabs(_scrollOffset - [self clampedOffset:_scrollOffset]),
-                                       _bounceDistance) / _bounceDistance;
-                }
-                
-                _startVelocity = -velocity * factor * _scrollSpeed / _itemWidth;
-                _scrollOffset -= (translation - _previousTranslation) * factor * _offsetMultiplier / _itemWidth;
-                _previousTranslation = translation;
-                [self didScroll];
-                break;
-            }
-            case UIGestureRecognizerStatePossible:
-            {
-                //do nothing
-                break;
-            }
-        }
-    }
-}
-
-- (void)didTap:(UITapGestureRecognizer *)tapGesture
-{
-    //check for tapped view
-    NSInteger index = [self indexOfItemView:[self itemViewAtPoint:[tapGesture locationInView:_contentView]]];
-    if (index != NSNotFound) {
-        if (!_delegate || [_delegate sliderNeighbor:self shouldSelectItemAtIndex:index]) {
-            if ((index != self.currentItemIndex && _centerItemWhenSelected) ||
-                (index == self.currentItemIndex && _scrollToItemBoundary)) {
-                [self scroll2ItemViewAtIndex:index animated:YES];
-            }
-            [_delegate sliderNeighbor:self didSelectItemAtIndex:index];
-        } else if (_scrollEnabled && _scrollToItemBoundary && _autoscroll) {
-            [self scroll2ItemViewAtIndex:self.currentItemIndex animated:YES];
-        }
-    } else {
-        [self scroll2ItemViewAtIndex:self.currentItemIndex animated:YES];
-    }
-}
-
-- (void)pushAnimationState:(BOOL)enabled
-{
-    [CATransaction begin];
-    [CATransaction setDisableActions:!enabled];
-}
-
-- (void)popAnimationState
-{
-    [CATransaction commit];
-}
-
-- (void)reloadData
-{
-    //remove old views
-    for (UIView *view in [_itemViews allValues])
-    {
-        [view.superview removeFromSuperview];
-    }
-    
-    //bail out if not set up yet
-    if (!_dataSource || !_contentView)
-    {
-        return;
-    }
-    
-    //get number of items and placeholders
-    _numberOfVisibleItems = 0;
-    _numberOfItems = [_dataSource numberOfItemsInSliderNeighbor:self];
-    if ([_dataSource respondsToSelector:@selector(numberOfPlaceholdersInsliderNeighbor:)]) {
-        _numberOfPlaceholders = [_dataSource numberOfPlaceholdersInsliderNeighbor:self];
-    }
-    
-    //reset view pools
-    self.itemViews = [NSMutableDictionary dictionary];
-    self.itemViewPool = [NSMutableSet set];
-    self.placeholderViewPool = [NSMutableSet setWithCapacity:_numberOfPlaceholders];
-    
-    //layout views
-    [self setNeedsLayout];
-    
-    //fix scroll offset
-    if (_numberOfItems > 0 && _scrollOffset < 0.0)
-    {
-        [self scroll2ItemViewAtIndex:0 animated:(_numberOfPlaceholders > 0)];
-    }
-}
-
-#pragma mark scrolling
-
-- (NSInteger)currentItemIndex
-{
-    return [self clampedIndex:round(_scrollOffset)];
-}
-
-- (NSInteger)nextItemIndex
-{
-    return ([self currentItemIndex]+1)%_numberOfItems;
-}
-
-- (NSInteger)lastItemIndex
-{
-    if ([self currentItemIndex] == 0) {
-        return _numberOfItems - 1;
-    }
-    return ((NSInteger)round(abs((int)[self currentItemIndex] - 1))) % _numberOfItems;
-}
-
-- (NSInteger)minScrollDistanceFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex
-{
-    NSInteger directDistance = toIndex - fromIndex;
-    if (_wrapEnabled)
-    {
-        NSInteger wrappedDistance = MIN(toIndex, fromIndex) + _numberOfItems - MAX(toIndex, fromIndex);
-        if (fromIndex < toIndex)
-        {
-            wrappedDistance = -wrappedDistance;
-        }
-        return (ABS(directDistance) <= ABS(wrappedDistance))? directDistance: wrappedDistance;
-    }
-    return directDistance;
-}
-
-- (NSInteger)clampedIndex:(NSInteger)index
-{
-    if (_numberOfItems == 0)
-    {
-        return -1;
-    } else if (_wrapEnabled) {
-        return index - floor((CGFloat)index / (CGFloat)_numberOfItems) * _numberOfItems;
-    } else {
-        return MIN(MAX(0, index), MAX(0, _numberOfItems - 1));
-    }
-}
-
-- (CGFloat)clampedOffset:(CGFloat)offset
-{
-    if (_numberOfItems == 0) {
-        return -1.0;
-    } else if (_wrapEnabled) {
-        return offset - floor(offset / (CGFloat)_numberOfItems) * _numberOfItems;
-    } else {
-        return MIN(MAX(0.0, offset), MAX(0.0, (CGFloat)_numberOfItems - 1.0));
-    }
-}
-
-- (CGFloat)minScrollDistanceFromOffset:(CGFloat)fromOffset toOffset:(CGFloat)toOffset
-{
-    CGFloat directDistance = toOffset - fromOffset;
-    if (_wrapEnabled) {
-        CGFloat wrappedDistance = MIN(toOffset, fromOffset) + _numberOfItems - MAX(toOffset, fromOffset);
-        if (fromOffset < toOffset) {
-            wrappedDistance = -wrappedDistance;
-        }
-        return (fabs(directDistance) <= fabs(wrappedDistance))? directDistance: wrappedDistance;
-    }
-    return directDistance;
-}
-
-- (void)scrollByOffset:(CGFloat)offset duration:(NSTimeInterval)duration
-{
-    if (duration > 0.0) {
-        _decelerating = NO;
-        _scrolling = YES;
-        _startTime = CACurrentMediaTime();
-        _startOffset = _scrollOffset;
-        _scrollDuration = duration;
-        _endOffset = _startOffset + offset;
-        if (!_wrapEnabled) {
-            _endOffset = [self clampedOffset:_endOffset];
-        }
-        [_delegate sliderNeighborWillBeginScrollingAnimation:self];
-        [self startAnimation];
-    } else {
-        self.scrollOffset += offset;
-    }
-}
-
-- (void)scroll2Offset:(CGFloat)offset duration:(NSTimeInterval)duration
-{
-    [self scrollByOffset:[self minScrollDistanceFromOffset:_scrollOffset toOffset:offset] duration:duration];
-    if (_delegate && [_delegate respondsToSelector:@selector(sliderNeighbor:didScrollToItemAtIndex:)]) {
-        [_delegate sliderNeighbor:self didScrollToItemAtIndex:offset];
-    }
-}
-
-- (void)scroll2ItemViewAtIndex:(NSInteger)index duration:(NSTimeInterval)duration
-{
-    [self scroll2Offset:index duration:duration];
-}
-
-- (void)scroll2ItemViewAtIndex:(NSInteger)index animated:(BOOL)animated
-{
-    [self scroll2ItemViewAtIndex:index duration:animated? 0.6: 0];
-}
-
-- (void)scrollByNumberOfItems:(NSInteger)itemCount duration:(NSTimeInterval)duration
-{
-    if (duration > 0.0) {
-        CGFloat offset = 0.0;
-        if (itemCount > 0) {
-            offset = (floor(_scrollOffset) + itemCount) - _scrollOffset;
-        } else if (itemCount < 0) {
-            offset = (ceil(_scrollOffset) + itemCount) - _scrollOffset;
-        } else {
-            offset = round(_scrollOffset) - _scrollOffset;
-        }
-        [self scrollByOffset:offset duration:duration];
-    } else {
-        self.scrollOffset = [self clampedIndex:_previousItemIndex + itemCount];
-    }
-}
-
-- (void)removeItemAtIndex:(NSInteger)index animated:(BOOL)animated
-{
-    index = [self clampedIndex:index];
-    UIView *itemView = [self itemViewAtIndex:index];
-    
-    if (animated) {
-        [UIView beginAnimations:nil context:nil];
-        [UIView setAnimationDuration:0.1];
-        [UIView setAnimationDelegate:itemView.superview];
-        [UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
-        [self performSelector:@selector(queueItemView:) withObject:itemView afterDelay:0.1];
-        itemView.superview.layer.opacity = 0.0;
-        [UIView commitAnimations];
-        
-        [UIView beginAnimations:nil context:nil];
-        [UIView setAnimationDelay:0.1];
-        [UIView setAnimationDuration:INSERT_DURATION];
-        [UIView setAnimationDelegate:self];
-        [UIView setAnimationDidStopSelector:@selector(depthSortViews)];
-        [self removeViewAtIndex:index];
-        _numberOfItems --;
-        _wrapEnabled = !![self valueForOption:WXSliderNeighborOptionWrap withDefault:_wrapEnabled];
-        [self updateNumberOfVisibleItems];
-        _scrollOffset = self.currentItemIndex;
-        [self didScroll];
-        [UIView commitAnimations];
-    } else {
-        [self pushAnimationState:NO];
-        [self queueItemView:itemView];
-        [itemView.superview removeFromSuperview];
-        [self removeViewAtIndex:index];
-        _numberOfItems --;
-        _wrapEnabled = !![self valueForOption:WXSliderNeighborOptionWrap withDefault:_wrapEnabled];
-        _scrollOffset = self.currentItemIndex;
-        [self didScroll];
-        [self depthSortViews];
-        [self popAnimationState];
-    }
-}
-
-- (void)insertItemAtIndex:(NSInteger)index animated:(BOOL)animated
-{
-    _numberOfItems ++;
-    _wrapEnabled = !![self valueForOption:WXSliderNeighborOptionWrap withDefault:_wrapEnabled];
-    [self updateNumberOfVisibleItems];
-    
-    index = [self clampedIndex:index];
-    [self insertView:nil atIndex:index];
-    [self loadViewAtIndex:index];
-    
-    if (fabs(_itemWidth) < FLOAT_ERROR_MARGIN) {
-        [self updateItemWidth];
-    }
-    
-    if (animated) {
-        [UIView beginAnimations:nil context:nil];
-        [UIView setAnimationDuration:INSERT_DURATION];
-        [UIView setAnimationDelegate:self];
-        [UIView setAnimationDidStopSelector:@selector(didScroll)];
-        [self transformItemViews];
-        [UIView commitAnimations];
-    } else {
-        [self pushAnimationState:NO];
-        [self didScroll];
-        [self popAnimationState];
-    }
-    
-    if (_scrollOffset < 0.0) {
-        [self scroll2ItemViewAtIndex:0 animated:(animated && _numberOfPlaceholders)];
-    }
-}
-
-- (void)reloadItemAtIndex:(NSInteger)index animated:(BOOL)animated
-{
-    //get container view
-    UIView *containerView = [[self itemViewAtIndex:index] superview];
-    if (containerView) {
-        if (animated) {
-            //fade transition
-            CATransition *transition = [CATransition animation];
-            transition.duration = INSERT_DURATION;
-            transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
-            transition.type = kCATransitionFade;
-            [containerView.layer addAnimation:transition forKey:nil];
-        }
-        
-        //reload view
-        [self loadViewAtIndex:index withContainerView:containerView];
-    }
-}
-
-#pragma mark Animation
-- (void)step
-{
-    [self pushAnimationState:NO];
-    NSTimeInterval currentTime = CACurrentMediaTime();
-    double delta = currentTime - _lastTime;
-    _lastTime = currentTime;
-    
-    if (_scrolling && !_dragging) {
-        NSTimeInterval time = MIN(1.0, (currentTime - _startTime) / _scrollDuration);
-        delta = [self easeInOut:time];
-        _scrollOffset = _startOffset + (_endOffset - _startOffset) * delta;
-        [self didScroll];
-        if (time >= 1.0) {
-            _scrolling = NO;
-            [self depthSortViews];
-            [self pushAnimationState:YES];
-            [_delegate sliderNeighborDidEndScrollingAnimation:self];
-            [self popAnimationState];
-        }
-    } else if (_decelerating) {
-        CGFloat time = MIN(_scrollDuration, currentTime - _startTime);
-        CGFloat acceleration = -_startVelocity/_scrollDuration;
-        CGFloat distance = _startVelocity * time + 0.5 * acceleration * pow(time, 2.0);
-        _scrollOffset = _startOffset + distance;
-        [self didScroll];
-        if (fabs(time - _scrollDuration) < FLOAT_ERROR_MARGIN) {
-            _decelerating = NO;
-            [self pushAnimationState:YES];
-            [_delegate sliderNeighborDidEndDecelerating:self];
-            [self popAnimationState];
-            if ((_scrollToItemBoundary || fabs(_scrollOffset - [self clampedOffset:_scrollOffset]) > FLOAT_ERROR_MARGIN) && !_autoscroll) {
-                if (fabs(_scrollOffset - self.currentItemIndex) < FLOAT_ERROR_MARGIN) {
-                    //call scroll to trigger events for legacy support reasons
-                    //even though technically we don't need to scroll at all
-                    [self scroll2ItemViewAtIndex:self.currentItemIndex duration:0.01];
-                } else {
-                    [self scroll2ItemViewAtIndex:self.currentItemIndex animated:YES];
-                }
-            } else {
-                CGFloat difference = round(_scrollOffset) - _scrollOffset;
-                if (difference > 0.5) {
-                    difference = difference - 1.0;
-                } else if (difference < -0.5) {
-                    difference = 1.0 + difference;
-                }
-                _toggleTime = currentTime - MAX_TOGGLE_DURATION * fabs(difference);
-                _toggle = MAX(-1.0, MIN(1.0, -difference));
-            }
-        }
-    } else if (_autoscroll && !_dragging) {
-        //autoscroll goes backwards from what you'd expect, for historical reasons
-        self.scrollOffset = [self clampedOffset:_scrollOffset - delta * _autoscroll];
-    } else if (fabs(_toggle) > FLOAT_ERROR_MARGIN) {
-        NSTimeInterval toggleDuration = _startVelocity? MIN(1.0, MAX(0.0, 1.0 / fabs(_startVelocity))): 1.0;
-        toggleDuration = MIN_TOGGLE_DURATION + (MAX_TOGGLE_DURATION - MIN_TOGGLE_DURATION) * toggleDuration;
-        NSTimeInterval time = MIN(1.0, (currentTime - _toggleTime) / toggleDuration);
-        delta = [self easeInOut:time];
-        _toggle = (_toggle < 0.0)? (delta - 1.0): (1.0 - delta);
-        [self didScroll];
-    } else if (!_autoscroll) {
-        [self stopAnimation];
-    }
-    
-    [self popAnimationState];
-}
-
-- (CGFloat)easeInOut:(CGFloat)time
-{
-    return (time < 0.5)? 0.5 * pow(time * 2.0, 3.0): 0.5 * pow(time * 2.0 - 2.0, 3.0) + 1.0;
-}
-
-- (CGFloat)decelerationDistance
-{
-    CGFloat acceleration = -_startVelocity * DECELERATION_MULTIPLIER * (1.0 - _decelerationRate);
-    return -pow(_startVelocity, 2.0) / (2.0 * acceleration);
-}
-
-- (void)startDecelerating
-{
-    CGFloat distance = [self decelerationDistance];
-    _startOffset = _scrollOffset;
-    _endOffset = _startOffset + distance;
-    if (_pagingEnabled) {
-        if (distance > 0.0) {
-            _endOffset = ceil(_startOffset);
-        } else {
-            _endOffset = floor(_startOffset);
-        }
-    } else if (_stopAtItemBoundary) {
-        if (distance > 0.0) {
-            _endOffset = ceil(_endOffset);
-        } else {
-            _endOffset = floor(_endOffset);
-        }
-    }
-    if (!_wrapEnabled) {
-        if (_bounces) {
-            _endOffset = MAX(-_bounceDistance, MIN(_numberOfItems - 1.0 + _bounceDistance, _endOffset));
-        } else {
-            _endOffset = [self clampedOffset:_endOffset];
-        }
-    }
-    distance = _endOffset - _startOffset;
-    
-    _startTime = CACurrentMediaTime();
-    _scrollDuration = fabs(distance) / fabs(0.5 * _startVelocity);
-    
-    if (distance != 0.0) {
-        _decelerating = YES;
-        [self startAnimation];
-    }
-}
-
-
-- (BOOL)shouldDecelerate
-{
-    return (fabs(_startVelocity) > SCROLL_SPEED_THRESHOLD) &&
-    (fabs([self decelerationDistance]) > DECELERATE_THRESHOLD);
-}
-
-- (BOOL)shouldScroll
-{
-    return (fabs(_startVelocity) > SCROLL_SPEED_THRESHOLD) &&
-    (fabs(_scrollOffset - self.currentItemIndex) > SCROLL_DISTANCE_THRESHOLD);
-}
-
-- (void)didScroll
-{
-    if (_wrapEnabled || !_bounces) {
-        _scrollOffset = [self clampedOffset:_scrollOffset];
-    } else {
-        CGFloat min = -_bounceDistance;
-        CGFloat max = MAX(_numberOfItems - 1, 0.0) + _bounceDistance;
-        if (_scrollOffset < min) {
-            _scrollOffset = min;
-            _startVelocity = 0.0;
-        } else if (_scrollOffset > max) {
-            _scrollOffset = max;
-            _startVelocity = 0.0;
-        }
-    }
-    
-    //check if index has changed
-    NSInteger difference = [self minScrollDistanceFromIndex:self.currentItemIndex toIndex:self.previousItemIndex];
-    if (difference) {
-        _toggleTime = CACurrentMediaTime();
-        _toggle = MAX(-1, MIN(1, difference));
-        
-        [self startAnimation];
-    }
-    
-    [self loadUnloadViews];
-    [self transformItemViews];
-    
-    //notify delegate of offset change
-    if (fabs(_scrollOffset - _previousScrollOffset) > 0.000001)
-    {
-        [self pushAnimationState:YES];
-        [_delegate sliderNeighborDidScroll:self];
-        [self popAnimationState];
-    }
-    
-    //notify delegate of index change
-    if (_previousItemIndex != self.currentItemIndex)
-    {
-        [self pushAnimationState:YES];
-        if([_delegate respondsToSelector:@selector(sliderNeighborCurrentItemIndexDidChange:from:to:)]) {
-            [_delegate sliderNeighborCurrentItemIndexDidChange:self from:_previousItemIndex to:self.currentItemIndex];
-        }
-        [self popAnimationState];
-    }
-    
-    //update previous index
-    _previousScrollOffset = _scrollOffset;
-    _previousItemIndex = self.currentItemIndex;
-    [self.indicator setCurrentPoint:self.currentItemIndex];
-}
-
-- (void)startAnimation
-{
-    if (!_timer) {
-        self.timer = [NSTimer timerWithTimeInterval:1.0/60.0
-                                             target:self
-                                           selector:@selector(step)
-                                           userInfo:nil
-                                            repeats:YES];
-        
-        [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];
-        [[NSRunLoop mainRunLoop] addTimer:_timer forMode:UITrackingRunLoopMode];
-        
-    }
-}
-
-- (void)stopAnimation
-{
-    [_timer invalidate];
-    _timer = nil;
-}
-
-#pragma mark -
-#pragma mark view management
-
-- (NSArray *)indexesForVisibleItems
-{
-    return [[_itemViews allKeys] sortedArrayUsingSelector:@selector(compare:)];
-}
-
-- (NSArray *)visibleItemViews
-{
-    NSArray *indexes = [self indexesForVisibleItems];
-    return [_itemViews objectsForKeys:indexes notFoundMarker:[NSNull null]];
-}
-
-- (UIView *)itemViewAtIndex:(NSInteger)index
-{
-    return _itemViews[@(index)];
-}
-
-- (UIView *)currentItemView
-{
-    return [self itemViewAtIndex:self.currentItemIndex];
-}
-
-- (NSInteger)indexOfItemView:(UIView *)view
-{
-    NSInteger index = [[_itemViews allValues] indexOfObject:view];
-    if (index != NSNotFound) {
-        return [[_itemViews allKeys][index] integerValue];
-    }
-    return NSNotFound;
-}
-
-- (NSInteger)indexOfItemViewOrSubview:(UIView *)view
-{
-    NSInteger index = [self indexOfItemView:view];
-    if (index == NSNotFound && view != nil && view != _contentView) {
-        return [self indexOfItemViewOrSubview:view.superview];
-    }
-    return index;
-}
-
-- (UIView *)itemViewAtPoint:(CGPoint)point
-{
-    for (UIView *view in [[[_itemViews allValues] sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))sliderNeighorCompareViewDepth context:(__bridge void *)self] reverseObjectEnumerator])
-    {
-        if ([view.superview.layer hitTest:point]) {
-            return view;
-        }
-    }
-    return nil;
-}
-
-- (void)setItemView:(UIView *)view forIndex:(NSInteger)index
-{
-    _itemViews[@(index)] = view;
-}
-
-- (void)removeViewAtIndex:(NSInteger)index
-{
-    NSMutableDictionary *newItemViews = [NSMutableDictionary dictionaryWithCapacity:[_itemViews count] - 1];
-    for (NSNumber *number in [self indexesForVisibleItems])
-    {
-        NSInteger i = [number integerValue];
-        if (i < index) {
-            newItemViews[number] = _itemViews[number];
-        } else if (i > index) {
-            newItemViews[@(i - 1)] = _itemViews[number];
-        }
-    }
-    self.itemViews = newItemViews;
-    [self.indicator setPointCount:self.itemViews.count];
-}
-
-- (void)insertView:(UIView *)view atIndex:(NSInteger)index
-{
-    NSMutableDictionary *newItemViews = [NSMutableDictionary dictionaryWithCapacity:[_itemViews count] + 1];
-    for (NSNumber *number in [self indexesForVisibleItems])
-    {
-        NSInteger i = [number integerValue];
-        if (i < index) {
-            newItemViews[number] = _itemViews[number];
-        } else {
-            newItemViews[@(i + 1)] = _itemViews[number];
-        }
-    }
-    if (view) {
-        [self setItemView:view forIndex:index];
-    }
-    self.itemViews = newItemViews;
-    
-    [self.indicator setPointCount:self.itemViews.count];
-}
-
-#pragma mark -
-#pragma mark View loading
-
-- (UIView *)loadViewAtIndex:(NSInteger)index withContainerView:(UIView *)containerView
-{
-    [self pushAnimationState:NO];
-    
-    UIView *view = nil;
-    if (index < 0) {
-        view = [_dataSource sliderNeighbor:self placeholderViewAtIndex:(NSInteger)(ceil((CGFloat)_numberOfPlaceholdersToShow/2.0)) + index reusingView:[self dequeuePlaceholderView]];
-    } else if (index >= _numberOfItems) {
-        view = [_dataSource sliderNeighbor:self placeholderViewAtIndex:_numberOfPlaceholdersToShow/2.0 + index - _numberOfItems reusingView:[self dequeuePlaceholderView]];
-    } else {
-        view = [_dataSource sliderNeighbor:self viewForItemAtIndex:index reusingView:[self dequeueItemView]];
-    }
-    
-    if (view == nil) {
-        view = [[UIView alloc] init];
-    }
-    
-    [self setItemView:view forIndex:index];
-    if (containerView) {
-        //get old item view
-        UIView *oldItemView = [containerView.subviews lastObject];
-        if (index < 0 || index >= _numberOfItems) {
-            [self queuePlaceholderView:oldItemView];
-        } else {
-            [self queueItemView:oldItemView];
-        }
-        
-        //set container frame
-        CGRect frame = containerView.bounds;
-        if(_vertical) {
-            frame.size.width = view.frame.size.width;
-            frame.size.height = MIN(_itemWidth, view.frame.size.height);
-        } else {
-            frame.size.width = MIN(_itemWidth, view.frame.size.width);
-            frame.size.height = view.frame.size.height;
-        }
-        containerView.bounds = frame;
-        
-        //set view frame
-        frame = view.frame;
-        frame.origin.x = (containerView.bounds.size.width - frame.size.width) / 2.0;
-        frame.origin.y = (containerView.bounds.size.height - frame.size.height) / 2.0;
-        view.frame = frame;
-        
-        //switch views
-        [oldItemView removeFromSuperview];
-        [containerView addSubview:view];
-    } else {
-        [_contentView addSubview:[self containView:view]];
-    }
-    view.superview.layer.opacity = 0.0;
-    [self transformItemView:view atIndex:index];
-    
-    [self popAnimationState];
-    
-    return view;
-}
-
-- (UIView *)loadViewAtIndex:(NSInteger)index
-{
-    return [self loadViewAtIndex:index withContainerView:nil];
-}
-
-- (void)loadUnloadViews
-{
-    //set item width
-    [self updateItemWidth];
-    
-    //update number of visible items
-    [self updateNumberOfVisibleItems];
-    
-    //calculate visible view indices
-    NSMutableSet *visibleIndices = [NSMutableSet setWithCapacity:_numberOfVisibleItems];
-    NSInteger min = -(NSInteger)(ceil((CGFloat)_numberOfPlaceholdersToShow/2.0));
-    NSInteger max = _numberOfItems - 1 + _numberOfPlaceholdersToShow/2;
-    NSInteger offset = self.currentItemIndex - _numberOfVisibleItems/2;
-    if (!_wrapEnabled) {
-        offset = MAX(min, MIN(max - _numberOfVisibleItems + 1, offset));
-    }
-    for (NSInteger i = 0; i < _numberOfVisibleItems; i++)
-    {
-        NSInteger index = i + offset;
-        if (_wrapEnabled) {
-            index = [self clampedIndex:index];
-        }
-        CGFloat alpha = [self alphaForItemWithOffset:[self offsetForItemAtIndex:index]];
-        if (alpha) {
-            //only add views with alpha > 0
-            [visibleIndices addObject:@(index)];
-        }
-    }
-    
-    //remove offscreen views
-    for (NSNumber *number in [_itemViews allKeys])
-    {
-        if (![visibleIndices containsObject:number]) {
-            UIView *view = _itemViews[number];
-            if ([number integerValue] < 0 || [number integerValue] >= _numberOfItems) {
-                [self queuePlaceholderView:view];
-            } else {
-                [self queueItemView:view];
-            }
-            [view.superview removeFromSuperview];
-            [(NSMutableDictionary *)_itemViews removeObjectForKey:number];
-        }
-    }
-    
-    //add onscreen views
-    for (NSNumber *number in visibleIndices)
-    {
-        UIView *view = _itemViews[number];
-        if (view == nil) {
-            [self loadViewAtIndex:[number integerValue]];
-        }
-    }
-}
-
-#pragma mark View queing
-
-- (void)queueItemView:(UIView *)view
-{
-    if (view) {
-        [_itemViewPool addObject:view];
-    }
-}
-
-- (void)queuePlaceholderView:(UIView *)view
-{
-    if (view) {
-        [_placeholderViewPool addObject:view];
-    }
-}
-
-- (UIView *)dequeueItemView
-{
-    UIView *view = [_itemViewPool anyObject];
-    if (view) {
-        [_itemViewPool removeObject:view];
-    }
-    return view;
-}
-
-- (UIView *)dequeuePlaceholderView
-{
-    UIView *view = [_placeholderViewPool anyObject];
-    if (view) {
-        [_placeholderViewPool removeObject:view];
-    }
-    return view;
-}
-
-- (void)setIndicator:(WXIndicatorView *)indicator
-{
-    _indicator = indicator;
-    [_indicator setPointCount:self.numberOfItems];
-    [_indicator setCurrentPoint:[self currentItemIndex]];
-}
-
-- (void)layoutSubviews
-{
-    [super layoutSubviews];
-    _contentView.frame = self.bounds;
-    [self layOutItemViews];
-}
-
-@end
-
-@implementation NSObject (WXSliderNeighborView)
-
-- (NSUInteger)numberOfPlaceholdersInSliderNeighborView:(__unused WXSliderNeighborView *)sliderNeighbor { return 0; }
-- (void)sliderNeighborWillBeginScrollingAnimation:(__unused WXSliderNeighborView *)sliderNeighbor {}
-- (void)sliderNeighborDidEndScrollingAnimation:(__unused WXSliderNeighborView *)sliderNeighbor {}
-- (void)sliderNeighborDidScroll:(__unused WXSliderNeighborView *)sliderNeighbor {}
-
-- (void)sliderNeighborCurrentItemIndexDidChange:(__unused WXSliderNeighborView *)sliderNeighbor {}
-- (void)sliderNeighborWillBeginDragging:(__unused WXSliderNeighborView *)sliderNeighbor {}
-- (void)sliderNeighborDidEndDragging:(__unused WXSliderNeighborView *)sliderNeighbor willDecelerate:(__unused BOOL)decelerate {}
-- (void)sliderNeighborWillBeginDecelerating:(__unused WXSliderNeighborView *)sliderNeighbor {}
-- (void)sliderNeighborDidEndDecelerating:(__unused WXSliderNeighborView *)sliderNeighbor {}
-
-- (BOOL)sliderNeighbor:(__unused WXSliderNeighborView *)sliderNeighbor shouldSelectItemAtIndex:(__unused NSInteger)index { return YES; }
-- (void)sliderNeighbor:(__unused WXSliderNeighborView *)sliderNeighbor didSelectItemAtIndex:(__unused NSInteger)index {}
-
-- (CGFloat)sliderNeighborItemWidth:(__unused WXSliderNeighborView *)sliderNeighbor { return 0; }
-- (CATransform3D)sliderNeighbor:(__unused WXSliderNeighborView *)sliderNeighbor
-   itemTransformForOffset:(__unused CGFloat)offset
-            baseTransform:(CATransform3D)transform { return transform; }
-- (CGFloat)sliderNeighbor:(__unused WXSliderNeighborView *)sliderNeighbor
-     valueForOption:(__unused WXSliderNeighborOption)option
-        withDefault:(CGFloat)value { return value; }
-
-@end
-
-@interface WXSliderNeighborComponent () <WXIndicatorComponentDelegate>{
-    WXPixelType neighborSpace;
-    CGFloat neighborAlpha;
-    CGFloat neighborScale;
-    CGFloat currentItemScale;
-}
-
-@property (nonatomic, strong) WXSliderNeighborView *sliderView;
-@property (nonatomic, assign) BOOL  autoPlay;
-@property (nonatomic, assign) NSUInteger interval;
-@property (nonatomic, assign) NSInteger index;
-@property (nonatomic, strong) NSMutableArray *items;
-@property (nonatomic, strong) NSTimer *autoTimer;
-@property (nonatomic, assign) BOOL  sliderChangeEvent;
-@property (nonatomic, assign) NSInteger currentIndex;
-@property (nonatomic) CGRect itemRect;
-@property (nonatomic, assign) BOOL scrollable;
-
-@end
-
-#define DEFAULT_NEIGHBOR_ITEM_SCALE 0.8
-#define DEFAULT_CURRENT_ITEM_SCALE 0.9
-#define DEFAULT_NEIGHBOR_ALPHA 0.6
-#define DEFAULT_ANIMATION_DURATION 0.3
-#define DEFAULT_NEIGHBOR_SPACE 25
-
-
-@implementation WXSliderNeighborComponent
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance {
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _sliderChangeEvent = NO;
-        _interval = 3000;
-        _items = [NSMutableArray array];
-        _itemRect = CGRectNull;
-        self->neighborAlpha = DEFAULT_NEIGHBOR_ALPHA;
-        self->neighborScale = DEFAULT_NEIGHBOR_ITEM_SCALE;
-        self->currentItemScale = DEFAULT_CURRENT_ITEM_SCALE;
-        self->neighborSpace = [WXConvert WXPixelType:@(DEFAULT_NEIGHBOR_SPACE) scaleFactor:self.weexInstance.pixelScaleFactor];
-        _scrollable = YES;
-        [self setAttributes:attributes];
-    
-        _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
-    }
-    self.flexCssNode->setFlexDirection(WeexCore::kFlexDirectionRow,NO);
-    return self;
-}
-
-
-#pragma mark life circle
-
-- (UIView *)loadView
-{
-    _sliderView = [[WXSliderNeighborView alloc] init];
-    return _sliderView;
-}
-
-- (void)dealloc
-{
-    _sliderView.delegate = nil;
-    _sliderView.dataSource = nil;
-    if (_autoPlay) {
-        [self _stopAutoPlayTimer];
-    }
-    _sliderView = nil;
-    [self.items removeAllObjects];
-}
-
-- (void)viewDidUnload
-{
-    [self.items removeAllObjects];
-}
-
-- (void)viewDidLoad
-{
-    _sliderView = (WXSliderNeighborView *)self.view;
-    _sliderView.delegate = self;
-    _sliderView.dataSource = self;
-    _sliderView.contentView.clipsToBounds = YES;
-    _sliderView.scrollEnabled = _scrollable;
-    UIAccessibilityTraits traits = UIAccessibilityTraitAdjustable;
-    
-    if (_autoPlay) {
-        traits |= UIAccessibilityTraitUpdatesFrequently;
-        [self _startAutoPlayTimer];
-    } else {
-        [self _stopAutoPlayTimer];
-    }
-    _sliderView.accessibilityTraits = traits;
-}
-
-- (void)layoutDidFinish {
-    
-    [_sliderView setCurrentItemIndex:_index];
-}
-
-- (void)insertSubview:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    if (subcomponent->_positionType == WXPositionTypeFixed) {
-        [self.weexInstance.rootView addSubview:subcomponent.view];
-        return;
-    }
-    
-    // use _lazyCreateView to forbid component like cell's view creating
-    if(_lazyCreateView) {
-        subcomponent->_lazyCreateView = YES;
-    }
-    
-    if (!subcomponent->_lazyCreateView || (self->_lazyCreateView && [self isViewLoaded])) {
-        UIView *view = subcomponent.view;
-        
-        WXSliderNeighborView *sliderView = (WXSliderNeighborView *)self.view;
-        if ([view isKindOfClass:[WXIndicatorView class]]) {
-            ((WXIndicatorComponent *)subcomponent).delegate = self;
-            [sliderView addSubview:view];
-            return;
-        }
-        
-        if(index < 0) {
-            [self.items addObject:view];
-        } else {
-            [self.items insertObject:view atIndex:index];
-        }
-        
-        subcomponent.isViewFrameSyncWithCalculated = NO;
-        
-        if (index == -1) {
-            [sliderView insertView:view atIndex:index];
-        } else {
-            NSInteger offset = 0;
-            for (int i = 0; i < [self.items count]; ++i) {
-                if (index == i) break;
-                
-                if ([self.items[i] isKindOfClass:[WXIndicatorView class]]) {
-                    offset++;
-                }
-            }
-            [sliderView insertView:view atIndex:index - offset];
-        }
-        
-        [sliderView reloadData];
-    }
-}
-
-#pragma mark attributes update
-- (void)setAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"index"]) {
-        _index = [attributes[@"index"] integerValue];
-        _currentIndex = _index;
-    }
-    if (attributes[@"autoPlay"]) {
-        _autoPlay = [attributes[@"autoPlay"] boolValue];
-        if (_autoPlay) {
-            [self _startAutoPlayTimer];
-        } else {
-            [self _stopAutoPlayTimer];
-        }
-    }
-    if (attributes[@"interval"]) {
-        _interval = [attributes[@"interval"] integerValue];
-        
-        [self _stopAutoPlayTimer];
-        
-        if (_autoPlay) {
-            [self _startAutoPlayTimer];
-        }
-    }
-    if (attributes[@"neighborScale"]) {
-        [self setNeighborScale:attributes];
-    }
-    if (attributes[@"currentItemScale"]) {
-        [self setCurrentItemScale:attributes];
-    }
-    if (attributes[@"neighborAlpha"]) {
-        [self setNeighborAlpha:attributes];
-    }
-    if (attributes[@"neighborSpace"]) {
-        [self setNeighborSpace:attributes];
-    }
-    if (attributes[@"scrollable"]) {
-        _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
-        ((WXSliderNeighborView *)self.view).scrollEnabled = _scrollable;
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    [self setAttributes:attributes];
-    [self.sliderView setCurrentItemIndex:_index];
-    [self updateSliderPage:YES];
-}
-
-#pragma mark styles update
-- (void)updateStyles:(NSDictionary *)styles {
-    
-}
-
-#pragma mark event
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"change"]) {
-        _sliderChangeEvent = YES;
-    }
-}
-
-- (void)removeEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"change"]) {
-        _sliderChangeEvent = NO;
-    }
-}
-
-#pragma mark WXIndicatorComponentDelegate Methods
-
-- (void)setIndicatorView:(WXIndicatorView *)indicatorView
-{
-    NSAssert(_sliderView, @"");
-    [_sliderView setIndicator:indicatorView];
-}
-
-- (void)setNeighborSpace:(NSDictionary *)attributes{
-    if(attributes[@"neighborSpace"]) {
-        self->neighborSpace = [WXConvert WXPixelType:attributes[@"neighborSpace"] scaleFactor:self.weexInstance.pixelScaleFactor];
-    }
-}
-
-- (void)setNeighborAlpha:(NSDictionary *)attributes {
-    if (attributes[@"neighborAlpha"]) {
-        self->neighborAlpha = [WXConvert CGFloat:attributes[@"neighborAlpha"]];
-        self->neighborAlpha = self->neighborAlpha >= 0 ? self->neighborAlpha : 0;
-        self->neighborAlpha = self->neighborAlpha <= 1 ? self->neighborAlpha: 1;
-    }
-}
-
-- (void)setCurrentItemScale:(NSDictionary *)attributes {
-    if (attributes[@"currentItemScale"]) {
-        self->currentItemScale = [WXConvert CGFloat:attributes[@"currentItemScale"]];
-        self->currentItemScale = self->currentItemScale >= 0 ? self->currentItemScale : 0;
-        self->currentItemScale = self->currentItemScale <= 1 ? self->currentItemScale: 1;
-    }
-}
-
-- (void)setNeighborScale:(NSDictionary *)attributes
-{
-    if (attributes[@"neighborScale"]) {
-        self->neighborScale = [WXConvert CGFloat:attributes[@"neighborScale"]];
-        self->neighborScale = self->neighborScale >= 0? self->neighborScale : 0;
-        self->neighborScale = self->neighborScale <= 1? self->neighborScale :1;
-    }
-}
-
-#pragma mark Private Methods
-
-- (void)_startAutoPlayTimer
-{
-    if (!self.autoTimer || ![self.autoTimer isValid]) {
-        __weak __typeof__(self) weakSelf = self;
-        self.autoTimer = [NSTimer wx_scheduledTimerWithTimeInterval:_interval/1000.0f block:^() {
-            [weakSelf _autoPlayOnTimer];
-        } repeats:YES];
-        [[NSRunLoop currentRunLoop] addTimer:self.autoTimer forMode:NSRunLoopCommonModes];
-    }
-}
-
-- (void)_stopAutoPlayTimer
-{
-    if (self.autoTimer && [self.autoTimer isValid]) {
-        [self.autoTimer invalidate];
-        self.autoTimer = nil;
-    }
-}
-
-- (void)_autoPlayOnTimer
-{
-    WXSliderNeighborView *sliderNeighborView = (WXSliderNeighborView *)self.view;
-    
-    int indicatorCnt = 0;
-    for (int i = 0; i < [self.items count]; ++i) {
-        if ([self.items[i] isKindOfClass:[WXIndicatorView class]]) {
-            indicatorCnt++;
-        }
-    }
-    
-    self.currentIndex ++;
-    if (self.currentIndex >= self.items.count - indicatorCnt) {
-        self.currentIndex = 0;
-    }
-    
-    [sliderNeighborView setCurrentItemIndex:self.currentIndex];
-}
-
-#pragma mark sliderNeighbor Delegate && dataSource
-
-- (NSInteger)numberOfItemsInSliderNeighbor:(WXSliderNeighborView *)sliderNeighbor {
-    return [self.items count];
-}
-
-- (NSInteger)numberOfPlaceholdersInsliderNeighbor:(WXSliderNeighborView *)sliderNeighbor {
-    return 2;
-}
-
-- (UIView *)sliderNeighbor:(WXSliderNeighborView *)sliderNeighbor viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view {
-    
-    if (!view) {
-        if (index < [self.items count]) {
-            view = self.items[index];
-        }else {
-            return nil;
-        }
-    } else {
-        view.tag = 1;
-    }
-    
-    if (CGRectIsNull(_itemRect)) {
-        _itemRect = view.frame;
-    }
-    if (index == [self.items count] - 1) {
-        [self updateSliderPage:NO];
-    }
-    
-    return view;
-}
-
-- (BOOL)sliderNeighbor:(WXSliderNeighborView *)sliderNeighbor shouldSelectItemAtIndex:(NSInteger)index {
-    
-    return YES;
-}
-
-- (UIView *)sliderNeighbor:(WXSliderNeighborView *)sliderNeighbor placeholderViewAtIndex:(NSInteger)index reusingView:(UIView *)view
-{
-    
-    return view;
-}
-
-- (void)sliderNeighborDidEndScrollingAnimation:(WXSliderNeighborView *)sliderNeighbor
-{
-    [self updateSliderPage:YES];
-}
-
-- (void)sliderNeighbor:(WXSliderNeighborView *)sliderView didScrollToItemAtIndex:(NSInteger)index
-{
-    self.currentIndex = index;
-    
-    if (_sliderChangeEvent) {
-        [self fireEvent:@"change" params:@{@"index":@(index)} domChanges:@{@"attrs": @{@"index": @(index)}}];
-    }
-}
-
-- (void)sliderNeighborWillBeginDragging:(WXSliderNeighborView *)sliderNeighbor
-{
-    [self _stopAutoPlayTimer];
-}
-
-- (void)sliderNeighborDidEndDragging:(WXSliderNeighborView *)sliderNeighbor willDecelerate:(BOOL)decelerate {
-    if (_autoPlay) {
-        [self _startAutoPlayTimer];
-    }
-}
-
-- (void)updateSliderPage:(BOOL)animate
-{
-    __block UIView * currentView  = [self.sliderView itemViewAtIndex:[_sliderView currentItemIndex]];
-    __block UIView * lastView  = [self.sliderView itemViewAtIndex:[_sliderView lastItemIndex]];
-    __block UIView * nextView  = [self.sliderView itemViewAtIndex:[_sliderView nextItemIndex]];
-    
-    __block CGAffineTransform transfrom = CGAffineTransformIdentity;
-    float duration = 0;
-    __weak typeof(self) weakSelf = self;
-    if (animate) {
-        duration = DEFAULT_ANIMATION_DURATION;
-    }
-    
-    [UIView animateWithDuration:duration animations:^{
-        __strong typeof(self) strongSelf = weakSelf;
-        if (strongSelf) {
-            currentView.alpha = 1.0;
-            if (fabs(strongSelf->currentItemScale) > CGFLOAT_MIN) {
-                transfrom = CGAffineTransformConcat(transfrom,CGAffineTransformMakeScale(strongSelf->currentItemScale, strongSelf->currentItemScale));
-            }
-            currentView.transform = transfrom;
-            transfrom = CGAffineTransformIdentity;
-            if (fabs(strongSelf->neighborScale) <= CGFLOAT_MIN) {
-                strongSelf->neighborScale = DEFAULT_NEIGHBOR_ITEM_SCALE;
-            }
-            
-            CGFloat tx = 0.5*_itemRect.size.width*((1-self->neighborScale)+(1-self->currentItemScale))-self->neighborSpace;
-            transfrom = CGAffineTransformConcat(transfrom, CGAffineTransformMakeScale(strongSelf->neighborScale, strongSelf->neighborScale));
-            nextView.transform = CGAffineTransformConcat(transfrom,  CGAffineTransformMakeTranslation(-tx, 0));
-            lastView.transform = CGAffineTransformConcat(transfrom,  CGAffineTransformMakeTranslation(tx, 0));
-            lastView.alpha = strongSelf->neighborAlpha;
-            nextView.alpha = strongSelf->neighborAlpha;
-        }
-    }];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h
deleted file mode 100644
index 53ec72a..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXSwitchComponent : WXComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.mm
deleted file mode 100644
index a18c456..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.mm
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSwitchComponent.h"
-#import "WXConvert.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+Layout.h"
-
-@interface WXSwitchView : UISwitch
-
-@end
-
-@implementation WXSwitchView
-
-@end
-
-@interface WXSwitchComponent()
-
-@property (nonatomic, strong)   WXSwitchView    *switchView;
-@property (nonatomic, assign)   BOOL    changeEvent;
-@property (nonatomic, assign)   BOOL    checked;
-@property (nonatomic, assign)   BOOL    disabled;
-
-//Background color when the switch is turned on.
-@property (nonatomic, strong)  UIColor *onTintColor;
-
-
-//Color of the foreground switch grip.
-@property (nonatomic, strong)  UIColor *thumbTintColor;
-
-//Border color and background color on Android when the switch is turned off
-@property (nonatomic, strong)  UIColor *tintColor;
-
-@end
-
-@implementation WXSwitchComponent
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _checked = attributes[@"checked"] ? [WXConvert BOOL:attributes[@"checked"]] : NO;
-        _disabled = attributes[@"disabled"] ? [WXConvert BOOL:attributes[@"disabled"]] : NO;
-        
-        if(attributes[@"onTintColor"]){
-            _onTintColor = [WXConvert UIColor:attributes[@"onTintColor"]];
-        }
-
-        if(attributes[@"thumbTintColor"]){
-            _thumbTintColor = [WXConvert UIColor:attributes[@"thumbTintColor"]];
-        }
-
-        if(attributes[@"tintColor"]){
-            _tintColor = [WXConvert UIColor:attributes[@"tintColor"]];
-        }
-        self.flexCssNode->setStyleWidth(51, NO);
-        self.flexCssNode->setStyleHeight(31);
-    }
-    return self;
-}
-
-- (UIView *)loadView
-{
-    return [[WXSwitchView alloc] init];
-}
-
-- (void)viewDidLoad
-{
-    _switchView = (WXSwitchView *)self.view;
-    _switchView.isAccessibilityElement = YES;
-    [_switchView setOn:_checked animated:YES];
-    [_switchView setEnabled:!_disabled];
-    [_switchView addTarget:self action:@selector(checkChanged) forControlEvents:UIControlEventValueChanged];
-    
-    if(_onTintColor){
-        _switchView.onTintColor = _onTintColor;
-    }
-
-    if(_tintColor){
-        _switchView.tintColor = _tintColor;
-    }
-
-    if(_thumbTintColor){
-        _switchView.thumbTintColor = _thumbTintColor;
-    }
-}
-
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"change"]) {
-        _changeEvent = YES;
-    }
-}
-
-- (void)removeEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"change"]) {
-        _changeEvent = NO;
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"checked"]) {
-        _checked = [WXConvert BOOL:attributes[@"checked"]];
-        [_switchView setOn:_checked animated:YES];
-    }
-    else if (attributes[@"disabled"]) {
-        _disabled = [WXConvert BOOL:attributes[@"disabled"]];
-        [_switchView setEnabled:!_disabled];
-    }
-    
-    if(attributes[@"onTintColor"]){
-        _onTintColor = [WXConvert UIColor:attributes[@"onTintColor"]];
-        _switchView.onTintColor = _onTintColor;
-    }
-    
-    if(attributes[@"thumbTintColor"]){
-        _thumbTintColor = [WXConvert UIColor:attributes[@"thumbTintColor"]];
-        _switchView.thumbTintColor = _thumbTintColor;
-    }
-    
-    if(attributes[@"tintColor"]){
-        _tintColor = [WXConvert UIColor:attributes[@"tintColor"]];
-        _switchView.tintColor = _tintColor;
-    }
-}
-
-- (void)checkChanged
-{
-   if (_changeEvent) {
-        [self fireEvent:@"change" params:@{@"value":@([_switchView isOn])} domChanges:@{@"attrs": @{@"checked": @([_switchView isOn])}}];
-   }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h
deleted file mode 100644
index 1bd51d8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXEditComponent.h"
-
-@interface WXTextAreaComponent : WXEditComponent
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.mm
deleted file mode 100644
index f64df8a..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.mm
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXTextAreaComponent.h"
-#import "WXUtility.h"
-#import "WXComponent+Layout.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+Layout.h"
-
-#define CorrectX 4 //textview fill text 4 pixel from left. so placeholderlabel have 4 pixel too
-#define CorrectY 8 // textview fill text 8 pixel from top
-typedef UITextView WXTextAreaView;
-
-@interface WXTextAreaComponent()
-
-@property (nonatomic, strong) WXTextAreaView *textView;
-@property (nonatomic) NSUInteger rows;
-
-@end
-
-@implementation WXTextAreaComponent {
-    UIEdgeInsets _border;
-    UIEdgeInsets _padding;
-}
-
--(void)viewDidLoad
-{
-    _padding = UIEdgeInsetsZero;
-    _border = UIEdgeInsetsZero;
-    if (self.placeholderString) {
-        self.placeHolderLabel = [[UILabel alloc] init];
-        self.placeHolderLabel.numberOfLines = 0;
-        [_textView addSubview:self.placeHolderLabel];
-    }
-    // default placeholder hide from voice over
-    self.placeHolderLabel.isAccessibilityElement = NO;
-    _textView.isAccessibilityElement = YES;
-    _textView.delegate = self;
-    [_textView setNeedsDisplay];
-    [_textView setClipsToBounds:YES];
-    [super viewDidLoad];
-}
-
-- (void)viewWillUnload
-{
-    _textView = nil;
-}
-
-- (UIView *)loadView
-{
-    _textView = [[WXTextAreaView alloc] init];
-    return _textView;
-}
-
-#pragma mark measure frame
-- (CGSize (^)(CGSize))measureBlock
-{
-    __weak typeof(self) weakSelf = self;
-    return ^CGSize (CGSize constrainedSize) {
-        __strong typeof(self) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            return CGSizeZero;
-        }
-        if (strongSelf.flexCssNode == nullptr) {
-            return CGSizeZero;
-        }
-        
-        CGSize computedSize = [[[NSString alloc] init]sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:strongSelf.textView.font.pointSize]}];
-        computedSize.height = strongSelf.rows ? computedSize.height * strongSelf.rows + (CorrectY + CorrectY/2):0;
-            if (!isnan(strongSelf.flexCssNode->getMinWidth())) {
-                computedSize.width = MAX(computedSize.width, strongSelf.flexCssNode->getMinWidth());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMaxWidth())) {
-                computedSize.width = MIN(computedSize.width, strongSelf.flexCssNode->getMaxWidth());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMinHeight())) {
-                computedSize.height = MAX(computedSize.height, strongSelf.flexCssNode->getMinHeight());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMaxHeight())) {
-                computedSize.height = MIN(computedSize.height, strongSelf.flexCssNode->getMaxHeight());
-            }
-        return (CGSize) {
-            WXCeilPixelValue(computedSize.width),
-            WXCeilPixelValue(computedSize.height)
-        };
-    };
-}
-
-#pragma mark -Overwrite method
--(NSString *)text
-{
-    return _textView.text;
-}
-
-- (void)setText:(NSString *)text
-{
-    _textView.text = text;
-    if ([text length] >0) {
-        self.placeHolderLabel.text = @"";
-    }
-}
-
--(void)setTextColor:(UIColor *)color
-{
-    [_textView setTextColor:color];
-}
-
--(void)setTextAlignment:(NSTextAlignment)textAlignForStyle
-{
-    [_textView setTextAlignment:textAlignForStyle];
-}
-
--(void)setUserInteractionEnabled:(BOOL)userInteractionEnabled
-{
-    [_textView setUserInteractionEnabled:userInteractionEnabled];
-}
-
--(void)setEnabled:(BOOL)enabled
-{
-    _textView.editable = enabled;
-    _textView.selectable = enabled;
-}
-
--(void)setReturnKeyType:(UIReturnKeyType)returnKeyType
-{
-    [_textView setReturnKeyType:returnKeyType];
-}
-
--(void)setInputAccessoryView:(UIView *)inputAccessoryView
-{
-    [_textView setInputAccessoryView:inputAccessoryView];
-}
-
--(void)setEditSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
-{
-    [self.textView becomeFirstResponder];
-    UITextPosition *startPos =  [self.textView positionFromPosition:self.textView.beginningOfDocument offset:selectionStart];
-    UITextPosition *endPos = [self.textView positionFromPosition:self.textView.beginningOfDocument offset:selectionEnd];
-    UITextRange *textRange = [self.textView textRangeFromPosition:startPos
-                                                       toPosition:endPos];
-    self.textView.selectedTextRange = textRange;
-}
-
--(NSDictionary *)getEditSelectionRange
-{
-    NSInteger selectionStart = [self.textView offsetFromPosition:self.textView.beginningOfDocument toPosition:self.textView.selectedTextRange.start];
-    NSInteger selectionEnd = [self.textView offsetFromPosition:self.textView.beginningOfDocument toPosition:self.textView.selectedTextRange.end];
-    NSDictionary *res = @{@"selectionStart":@(selectionStart),@"selectionEnd":@(selectionEnd)};
-    return res;
-}
-
--(void)setKeyboardType:(UIKeyboardType)keyboardType
-{
-    [_textView setKeyboardType:keyboardType];
-}
-
--(void)setSecureTextEntry:(BOOL)secureTextEntry
-{
-    [_textView setSecureTextEntry:secureTextEntry];
-}
-
--(void)setEditPadding:(UIEdgeInsets)padding
-{
-    _padding = padding;
-    [self _updateTextContentInset];
-}
-
--(void)setEditBorder:(UIEdgeInsets)border
-{
-    _border = border;
-    [self _updateTextContentInset];
-}
-
--(void)setAttributedPlaceholder:(NSMutableAttributedString *)attributedString font:(UIFont *)font
-{
-    if (self.placeholderColor) {
-        [attributedString addAttribute:NSForegroundColorAttributeName value:self.placeholderColor range:NSMakeRange(0, self.placeholderString.length)];
-        [attributedString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, self.placeholderString.length)];
-    }
-    self.placeHolderLabel.backgroundColor = [UIColor clearColor];
-    CGRect expectedLabelSize = [attributedString boundingRectWithSize:(CGSize){self.view.frame.size.width, CGFLOAT_MAX}
-                                                              options:NSStringDrawingUsesLineFragmentOrigin
-                                                              context:nil];
-    
-    self.placeHolderLabel.clipsToBounds = NO;
-    CGRect newFrame = self.placeHolderLabel.frame;
-    newFrame.size.height = ceil(expectedLabelSize.size.height);
-    newFrame.size.width = _textView.frame.size.width- CorrectX*2;
-    newFrame.origin.x = CorrectX + _padding.left + _border.left; // the cursor origin.x
-    self.placeHolderLabel.frame = newFrame;
-    self.placeHolderLabel.attributedText = attributedString;
-}
-
--(void)setFont:(UIFont *)font
-{
-    [_textView setFont:font];
-}
-
--(void)setRows:(NSUInteger)rows
-{
-    _rows = rows;
-    [self setNeedsLayout];
-}
-
-#pragma mark -Private Method
-- (void)_updateTextContentInset
-{
-    [_textView setTextContainerInset:UIEdgeInsetsMake(_padding.top + _border.top,
-                                                      _padding.left + _border.left,
-                                                      _padding.bottom + _border.bottom,
-                                                      _border.right + _border.right)];
-    
-    //when textview update, placeHolderLabel update too
-    CGRect newFrame = self.placeHolderLabel.frame;
-    newFrame.size.width = self.textView.frame.size.width - (_padding.left + _border.left) -CorrectX*2;
-    newFrame.origin.x = CorrectX + _padding.left + _border.left; // the cursor origin.x
-    newFrame.origin.y = _padding.top + _border.top;
-    self.placeHolderLabel.frame = newFrame;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h
deleted file mode 100644
index fb20bd0..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXTextComponent : WXComponent
-@property (atomic, strong) NSString *text;
-
-- (BOOL)useCoreText;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm
deleted file mode 100644
index 53cca4b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.mm
+++ /dev/null
@@ -1,1132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXTextComponent.h"
-#import "WXSDKInstance_private.h"
-#import "WXComponent_internal.h"
-#import "WXLayer.h"
-#import "WXUtility.h"
-#import "WXConvert.h"
-#import "WXRuleManager.h"
-#import "WXDefine.h"
-#import "WXView.h"
-#import "WXComponent+Layout.h"
-#import <pthread/pthread.h>
-#import <CoreText/CoreText.h>
-
-// WXText is a non-public is not permitted
-@interface WXTextView : WXView
-@property (nonatomic, strong) NSTextStorage *textStorage;
-@end
-
-@implementation WXTextView
-
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    if ((self = [super initWithFrame:frame])) {
-        self.accessibilityTraits |= UIAccessibilityTraitStaticText;
-        
-        self.opaque = NO;
-        self.contentMode = UIViewContentModeRedraw;
-        self.textStorage = [NSTextStorage new];
-    }
-    return self;
-}
-
-+ (Class)layerClass
-{
-    return [WXLayer class];
-}
-
-- (void)copy:(id)sender
-{
-    [[UIPasteboard generalPasteboard] setString:((WXTextComponent*)self.wx_component).text];
-}
-
-- (void)setTextStorage:(NSTextStorage *)textStorage
-{
-    if (_textStorage != textStorage) {
-        _textStorage = textStorage;
-        [self.wx_component setNeedsDisplay];
-    }
-}
-
-- (BOOL)canBecomeFirstResponder
-{
-    return YES;
-}
-
-- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
-{
-    if (action == @selector(copy:)) {
-        return [[self.wx_component valueForKey:@"_enableCopy"] boolValue];
-    }
-    return [super canPerformAction:action withSender:sender];
-}
-
-- (NSString *)description
-{
-    NSString *superDescription = super.description;
-    NSRange semicolonRange = [superDescription rangeOfString:@";"];
-    NSString * content = _textStorage.string;
-    if ([(WXTextComponent*)self.wx_component useCoreText]) {
-        content = ((WXTextComponent*)self.wx_component).text;
-    }
-    NSString *replacement = [NSString stringWithFormat:@"; text: %@; frame:%f,%f,%f,%f", content, self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height];
-    return [superDescription stringByReplacingCharactersInRange:semicolonRange withString:replacement];
-}
-
-- (NSString *)accessibilityValue
-{
-    if (self.wx_component && self.wx_component->_ariaLabel) {
-        return [super accessibilityValue];
-    }
-    if (![(WXTextComponent*)self.wx_component useCoreText]) {
-        return _textStorage.string;
-    }
-    return ((WXTextComponent*)self.wx_component).text;
-}
-
-- (NSString *)accessibilityLabel
-{
-    if (self.wx_component) {
-        if (self.wx_component->_ariaLabel) {
-            return self.wx_component->_ariaLabel;
-        }
-    }
-    return [super accessibilityLabel];
-}
-
-@end
-
-static NSString *const WXTextTruncationToken = @"\u2026";
-static CGFloat WXTextDefaultLineThroughWidth = 1.2;
-
-@interface WXTextComponent()
-@property (nonatomic, strong) NSString *useCoreTextAttr;
-@end
-
-@implementation WXTextComponent
-{
-    UIEdgeInsets _border;
-    UIEdgeInsets _padding;
-    NSTextStorage *_textStorage;
-    float _textStorageWidth;
-    float _color[4];
-    NSString *_fontFamily;
-    float _fontSize;
-    float _fontWeight;
-    WXTextStyle _fontStyle;
-    NSUInteger _lines;
-    NSTextAlignment _textAlign;
-    WXTextDecoration _textDecoration;
-    NSString *_textOverflow;
-    float _lineHeight;
-    float _letterSpacing;
-    float _fontDescender;
-    float _fontAscender;
-    BOOL _truncationLine; // support trunk tail
-    
-    NSAttributedString * _ctAttributedString;
-    NSString *_wordWrap;
-    
-    pthread_mutex_t _ctAttributedStringMutex;
-    pthread_mutexattr_t _propertMutexAttr;
-    BOOL _observerIconfont;
-    BOOL _enableCopy;
-}
-
-- (instancetype)initWithRef:(NSString *)ref
-                       type:(NSString *)type
-                     styles:(NSDictionary *)styles
-                 attributes:(NSDictionary *)attributes
-                     events:(NSArray *)events
-               weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        // just for coretext and textkit render replacement
-        pthread_mutexattr_init(&(_propertMutexAttr));
-        pthread_mutexattr_settype(&(_propertMutexAttr), PTHREAD_MUTEX_RECURSIVE);
-        pthread_mutex_init(&(_ctAttributedStringMutex), &(_propertMutexAttr));
-        
-        _textAlign = NSTextAlignmentNatural;
-        
-        if ([attributes objectForKey:@"coretext"]) {
-            _useCoreTextAttr = [WXConvert NSString:attributes[@"coretext"]];
-        } else {
-            _useCoreTextAttr = nil;
-        }
-        
-        _color[0] = -1.0;
-
-        [self fillCSSStyles:styles];
-        [self fillAttributes:attributes];
-        
-    }
-    return self;
-}
-
-- (BOOL)useCoreText
-{
-    if ([_useCoreTextAttr isEqualToString:@"true"]) {
-        return YES;
-    }
-    if ([_useCoreTextAttr isEqualToString:@"false"]) {
-        return NO;
-    }
-    return YES;
-}
-
-- (void)dealloc
-{
-    if (_fontFamily && _observerIconfont) {
-        [[NSNotificationCenter defaultCenter] removeObserver:self name:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil];
-    }
-    pthread_mutex_destroy(&_ctAttributedStringMutex);
-    pthread_mutexattr_destroy(&_propertMutexAttr);
-}
-
-#define WX_STYLE_FILL_TEXT(key, prop, type, needLayout)\
-do {\
-    id value = styles[@#key];\
-    if (value) {\
-        _##prop = [WXConvert type:value];\
-        [self setNeedsRepaint];\
-        if (needLayout) {\
-            [self setNeedsLayout];\
-        }\
-    }\
-} while(0);
-
-#define WX_STYLE_FILL_TEXT_WITH_DEFAULT_VALUE(key, prop, type, defaultValue,needLayout)\
-do {\
-    id value = styles[@#key];\
-    if (value) {\
-        if([WXUtility isBlankString:value]){\
-            _##prop = defaultValue;\
-        }else {\
-            _##prop = [WXConvert type:value];\
-        }\
-        [self setNeedsRepaint];\
-        if (needLayout) {\
-            [self setNeedsLayout];\
-        }\
-    }\
-} while(0);
-
-
-#define WX_STYLE_FILL_TEXT_PIXEL(key, prop, needLayout)\
-do {\
-    id value = styles[@#key];\
-    if (value) {\
-        _##prop = [WXConvert WXPixelType:value scaleFactor:self.weexInstance.pixelScaleFactor];\
-        [self setNeedsRepaint];\
-    if (needLayout) {\
-        [self setNeedsLayout];\
-    }\
-}\
-} while(0);
-
-- (void)fillCSSStyles:(NSDictionary *)styles
-{
-    WX_STYLE_FILL_TEXT(fontFamily, fontFamily, NSString, YES)
-    WX_STYLE_FILL_TEXT_PIXEL(fontSize, fontSize, YES)
-    WX_STYLE_FILL_TEXT(fontWeight, fontWeight, WXTextWeight, YES)
-    WX_STYLE_FILL_TEXT(fontStyle, fontStyle, WXTextStyle, YES)
-    WX_STYLE_FILL_TEXT(lines, lines, NSUInteger, YES)
-    WX_STYLE_FILL_TEXT(textAlign, textAlign, NSTextAlignment, NO)
-    WX_STYLE_FILL_TEXT(textDecoration, textDecoration, WXTextDecoration, YES)
-    WX_STYLE_FILL_TEXT(textOverflow, textOverflow, NSString, NO)
-    WX_STYLE_FILL_TEXT_PIXEL(lineHeight, lineHeight, YES)
-    WX_STYLE_FILL_TEXT_PIXEL(letterSpacing, letterSpacing, YES)
-    WX_STYLE_FILL_TEXT(wordWrap, wordWrap, NSString, YES);
-
-    UIColor* color = nil;
-    id value = styles[@"color"];
-    if (value) {
-        if([WXUtility isBlankString:value]){
-            color = [UIColor blackColor];
-        } else {
-            color = [WXConvert UIColor:value];
-        }
-        if (color) {
-            [self setNeedsRepaint];
-            CGFloat red, green, blue, alpha;
-            [color getRed:&red green:&green blue:&blue alpha:&alpha];
-            _color[0] = red;
-            _color[1] = green;
-            _color[2] = blue;
-            _color[3] = alpha;
-        }
-    }
-
-    if (_fontFamily && !_observerIconfont) {
-        // notification received when custom icon font file download finish
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(repaintText:) name:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil];
-        _observerIconfont = YES;
-    }
-    
-    if (self.flexCssNode == nullptr) {
-        return;
-    }
-    
-        UIEdgeInsets flex_padding = {
-            WXFloorPixelValue(self.flexCssNode->getPaddingTop() + self.flexCssNode->getBorderWidthTop()),
-            WXFloorPixelValue(self.flexCssNode->getPaddingLeft() + self.flexCssNode->getBorderWidthLeft()),
-            WXFloorPixelValue(self.flexCssNode->getPaddingBottom() + self.flexCssNode->getBorderWidthBottom()),
-            WXFloorPixelValue(self.flexCssNode->getPaddingRight() + self.flexCssNode->getBorderWidthRight())
-        };
-        
-        if (!UIEdgeInsetsEqualToEdgeInsets(flex_padding, _padding)) {
-            _padding = flex_padding;
-            [self setNeedsRepaint];
-        }
-}
-
-- (void)fillAttributes:(NSDictionary *)attributes
-{
-    id text = [WXConvert NSString:attributes[@"value"]];
-    if (text && ![self.text isEqualToString:text]) {
-        self.text = text;
-        [self setNeedsRepaint];
-        [self setNeedsLayout];
-    }
-    if (attributes[@"enableCopy"]) {
-        _enableCopy = [WXConvert BOOL:attributes[@"enableCopy"]];
-    }
-}
-
-- (void)setNeedsRepaint
-{
-    _textStorage = nil;
-    
-    pthread_mutex_lock(&(_ctAttributedStringMutex));
-    _ctAttributedString = nil;
-    pthread_mutex_unlock(&(_ctAttributedStringMutex));
-}
-
-#pragma mark - Subclass
-
-- (void)setNeedsLayout
-{
-    [super setNeedsLayout];
-}
-
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    BOOL useCoreText = NO;
-    if ([self.view.wx_component isKindOfClass:NSClassFromString(@"WXTextComponent")] && [self.view.wx_component respondsToSelector:@selector(useCoreText)]) {
-        useCoreText = [(WXTextComponent*)self.view.wx_component useCoreText];
-    }
-    if (!useCoreText) {
-        ((WXTextView *)self.view).textStorage = _textStorage;
-    }
-    if (_enableCopy) {
-        UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(displayMenuController:)];
-        [self.view addGestureRecognizer:longPress];
-    }
-    self.view.isAccessibilityElement = YES;
-    
-    [self setNeedsDisplay];
-}
-
-- (void)displayMenuController:(id)sender
-{
-    if ([self.view becomeFirstResponder] && ((UILongPressGestureRecognizer*)sender).state == UIGestureRecognizerStateBegan) {
-        UIMenuController *theMenu = [UIMenuController sharedMenuController];
-        CGSize size = [self ctAttributedString].size;
-        CGRect selectionRect = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, size.width, size.height);
-        [theMenu setTargetRect:selectionRect inView:self.view.superview];
-        [theMenu setMenuVisible:YES animated:YES];
-    }
-}
-
-- (UIView *)loadView
-{
-    return [[WXTextView alloc] init];
-}
-
-- (void)layoutDirectionDidChanged:(BOOL)isRTL {
-    [self setNeedsRepaint];
-}
-
-- (BOOL)needsDrawRect
-{
-    return YES;
-}
-
-- (UIImage *)drawRect:(CGRect)rect;
-{
-    CGContextRef context = UIGraphicsGetCurrentContext();
-    if (_isCompositingChild) {
-        [self drawTextWithContext:context bounds:rect padding:_padding];
-    } else {
-        [self drawTextWithContext:context bounds:rect padding:_padding];
-    }
-    
-    return nil;
-}
-
-- (CGSize (^)(CGSize))measureBlock
-{
-    __weak typeof(self) weakSelf = self;
-    return ^CGSize (CGSize constrainedSize) {
-        __strong typeof(self) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            return CGSizeZero;
-        }
-        
-        if (strongSelf.flexCssNode == nullptr) {
-            return CGSizeZero;
-        }
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> measureblock %@, constrainedSize:%@",
-              self.type,
-              NSStringFromCGSize(constrainedSize)
-              );
-#endif
-        CGSize computedSize = CGSizeZero;
-        NSTextStorage *textStorage = nil;
-        
-        //TODO:more elegant way to use max and min constrained size
-            if (!isnan(strongSelf.flexCssNode->getMinWidth())) {
-                constrainedSize.width = MAX(constrainedSize.width, strongSelf.flexCssNode->getMinWidth());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMaxWidth())) {
-                constrainedSize.width = MIN(constrainedSize.width, strongSelf.flexCssNode->getMaxWidth());
-            }
-        
-        if (![self useCoreText]) {
-            textStorage = [strongSelf textStorageWithWidth:constrainedSize.width];
-            NSLayoutManager *layoutManager = textStorage.layoutManagers.firstObject;
-            NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
-            computedSize = [layoutManager usedRectForTextContainer:textContainer].size;
-        } else {
-            computedSize = [strongSelf calculateTextHeightWithWidth:constrainedSize.width];
-        }
-            if (!isnan(strongSelf.flexCssNode->getMinWidth())) {
-                computedSize.width = MAX(computedSize.width, strongSelf.flexCssNode->getMinWidth());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMaxWidth())) {
-                computedSize.width = MIN(computedSize.width, strongSelf.flexCssNode->getMaxWidth());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMinHeight())) {
-                computedSize.height = MAX(computedSize.height, strongSelf.flexCssNode->getMinHeight());
-            }
-            
-            if (!isnan(strongSelf.flexCssNode->getMaxHeight())) {
-                computedSize.height = MIN(computedSize.height, strongSelf.flexCssNode->getMaxHeight());
-            }
-        if (textStorage && [WXUtility isBlankString:textStorage.string]) {
-            //  if the text value is empty or nil, then set the height is 0.
-            computedSize.height = 0;
-        }
-        
-        return (CGSize) {
-            WXCeilPixelValue(computedSize.width),
-            WXCeilPixelValue(computedSize.height)
-        };
-    };
-}
-
-#pragma mark Text Building
-
-- (NSAttributedString *)ctAttributedString
-{
-    if (!self.text) {
-        return nil;
-    }
-    NSAttributedString * attributedString = nil;
-    pthread_mutex_lock(&(_ctAttributedStringMutex));
-    if (!_ctAttributedString) {
-        _ctAttributedString = [self buildCTAttributeString];
-        WXPerformBlockOnComponentThread(^{
-            [self.weexInstance.componentManager startComponentTasks];
-        });
-    }
-    attributedString = [_ctAttributedString copy];
-    pthread_mutex_unlock(&(_ctAttributedStringMutex));
-    return attributedString;
-}
-
-- (void)repaintText:(NSNotification *)notification
-{
-    if (![_fontFamily isEqualToString:notification.userInfo[@"fontFamily"]]) {
-        return;
-    }
-    [self setNeedsRepaint];
-    WXPerformBlockOnComponentThread(^{
-        [self.weexInstance.componentManager startComponentTasks];
-        WXPerformBlockOnMainThread(^{
-            [self setNeedsLayout];
-            [self setNeedsDisplay];
-        });
-    });
-}
-
-- (NSMutableAttributedString *)buildCTAttributeString
-{
-    NSString * string = self.text;
-    if (![string isKindOfClass:[NSString class]]) {
-        WXLogError(@"text %@ is invalid", self.text);
-        string = @"";
-    }
-    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString: string];
-    if (_color[0] >= 0) {
-        [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:_color[0] green:_color[1] blue:_color[2] alpha:_color[3]] range:NSMakeRange(0, string.length)];
-    }
-    
-    // set font
-    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor useCoreText:[self useCoreText]];
-    CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)font.fontName,
-                                           font.pointSize,
-                                           NULL);
-    
-    _fontAscender = font.ascender;
-    _fontDescender = font.descender;
-    
-    if (ctFont) {
-        [attributedString addAttribute:(id)kCTFontAttributeName value:(__bridge id)(ctFont) range:NSMakeRange(0, string.length)];
-        CFRelease(ctFont);
-    }
-    
-    if(_textDecoration == WXTextDecorationUnderline){
-        [attributedString addAttribute:(id)kCTUnderlineStyleAttributeName value:@(kCTUnderlinePatternSolid | kCTUnderlineStyleSingle) range:NSMakeRange(0, string.length)];
-    } else if(_textDecoration == WXTextDecorationLineThrough){
-        [attributedString addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:NSMakeRange(0, string.length)];
-    }
-    
-    NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
-    
-    // handle text direction style, default ltr
-    NSTextAlignment retAlign = _textAlign;
-    BOOL isRtl = [self isDirectionRTL];
-    if (isRtl) {
-        if (0 == retAlign) {
-            //force text right-align if don't specified any align.
-            retAlign = NSTextAlignmentRight;
-        }
-        paragraphStyle.baseWritingDirection = NSWritingDirectionRightToLeft;
-    } else {
-        //if you specify NSWritingDirectionNaturalDirection, the receiver resolves the writing
-        //directionto eitherNSWritingDirectionLeftToRight or NSWritingDirectionRightToLeft,
-        //depending on the direction for the user’s language preference setting.
-        paragraphStyle.baseWritingDirection =  NSWritingDirectionNatural;
-    }
-    
-    if (retAlign) {
-        paragraphStyle.alignment = retAlign;
-    }
-    
-    if ([[_wordWrap lowercaseString] isEqualToString:@"anywhere"]) {
-        paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
-    }
-    else {
-        paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
-    }
-    
-    _truncationLine = NO;
-    if (_textOverflow && [_textOverflow length] > 0) {
-        if (_lines && [_textOverflow isEqualToString:@"ellipsis"])
-            _truncationLine = YES;
-    }
-    
-    if (_lineHeight) {
-        paragraphStyle.maximumLineHeight = _lineHeight;
-        paragraphStyle.minimumLineHeight = _lineHeight;
-    }
-    if (_lineHeight || _textAlign || [_textOverflow length] > 0) {
-        [attributedString addAttribute:NSParagraphStyleAttributeName
-                                 value:paragraphStyle
-                                 range:(NSRange){0, attributedString.length}];
-    }
-    
-    if (_letterSpacing) {
-        [attributedString addAttribute:NSKernAttributeName value:@(_letterSpacing) range:(NSRange){0, attributedString.length}];
-    }
-    
-    if ([self adjustLineHeight]) {
-        if (_lineHeight > font.lineHeight) {
-            [attributedString addAttribute:NSBaselineOffsetAttributeName
-                                     value:@((_lineHeight - font.lineHeight)/ 2)
-                                     range:(NSRange){0, attributedString.length}];
-        }
-    }
-    
-    return attributedString;
-}
-
-- (NSAttributedString *)buildAttributeString
-{
-    NSString *string = self.text ?: @"";
-    
-    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
-    
-    // set textColor
-    if (_color[0] >= 0) {
-        [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:_color[0] green:_color[1] blue:_color[2] alpha:_color[3]] range:NSMakeRange(0, string.length)];
-    }
-    
-    // set font
-    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
-    if (font) {
-        [attributedString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, string.length)];
-    }
-    
-    if(_textDecoration == WXTextDecorationUnderline){
-        [attributedString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:NSMakeRange(0, string.length)];
-    } else if(_textDecoration == WXTextDecorationLineThrough){
-        [attributedString addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:NSMakeRange(0, string.length)];
-    }
-    
-    NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
-
-    // handle text direction style, default ltr
-    NSTextAlignment retAlign = _textAlign;
-    BOOL isRtl = [self isDirectionRTL];
-    if (isRtl) {
-        if (0 == retAlign) {
-            //force text right-align if don't specified any align.
-            retAlign = NSTextAlignmentRight;
-        }
-        paragraphStyle.baseWritingDirection = NSWritingDirectionRightToLeft;
-    } else {
-        //if you specify NSWritingDirectionNaturalDirection, the receiver resolves the writing
-        //directionto eitherNSWritingDirectionLeftToRight or NSWritingDirectionRightToLeft,
-        //depending on the direction for the user’s language preference setting.
-        paragraphStyle.baseWritingDirection =  NSWritingDirectionNatural;
-    }
-    
-    if (retAlign) {
-        paragraphStyle.alignment = retAlign;
-    }
-    
-    if (_lineHeight) {
-        paragraphStyle.maximumLineHeight = _lineHeight;
-        paragraphStyle.minimumLineHeight = _lineHeight;
-    }
-    
-    if (_lineHeight || _textAlign) {
-        [attributedString addAttribute:NSParagraphStyleAttributeName
-                                 value:paragraphStyle
-                                 range:(NSRange){0, attributedString.length}];
-    }
-    if ([self adjustLineHeight]) {
-        if (_lineHeight > font.lineHeight) {
-            [attributedString addAttribute:NSBaselineOffsetAttributeName
-                                     value:@((_lineHeight - font.lineHeight)/ 2)
-                                     range:(NSRange){0, attributedString.length}];
-        }
-    }
-
-    return attributedString;
-}
-
-- (BOOL)adjustLineHeight
-{
-    if (WX_SYS_VERSION_LESS_THAN(@"10.0")) {
-        return true;
-    }
-    return ![self useCoreText];
-}
-
-- (NSTextStorage *)textStorageWithWidth:(CGFloat)width
-{
-    if (_textStorage && width == _textStorageWidth) {
-        return _textStorage;
-    }
-    
-    NSLayoutManager *layoutManager = [NSLayoutManager new];
-    
-    // build AttributeString
-    NSAttributedString *attributedString = [self buildAttributeString];
-    
-    NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:attributedString];
-    [textStorage addLayoutManager:layoutManager];
-    
-    NSTextContainer *textContainer = [NSTextContainer new];
-    textContainer.lineFragmentPadding = 0.0;
-    
-    if ([[_wordWrap lowercaseString] isEqualToString:@"break-word"]) {
-        textContainer.lineBreakMode = NSLineBreakByWordWrapping;
-    } else if ([[_wordWrap lowercaseString] isEqualToString:@"normal"]){
-        textContainer.lineBreakMode = NSLineBreakByClipping;
-    } else {
-        // set default lineBreakMode
-        textContainer.lineBreakMode = NSLineBreakByCharWrapping;
-    }
-    
-    if (_textOverflow && [_textOverflow length] > 0) {
-        if ([_textOverflow isEqualToString:@"ellipsis"])
-            textContainer.lineBreakMode = NSLineBreakByTruncatingTail;
-    }
-    textContainer.maximumNumberOfLines = _lines > 0 ? _lines : 0;
-    textContainer.size = (CGSize){isnan(width) ? CGFLOAT_MAX : width, CGFLOAT_MAX};
-
-    [layoutManager addTextContainer:textContainer];
-    [layoutManager ensureLayoutForTextContainer:textContainer];
-    
-    _textStorageWidth = width;
-    _textStorage = textStorage;
-    
-    return textStorage;
-}
-
-- (void)syncTextStorageForView
-{
-    CGFloat width = self.calculatedFrame.size.width - (_padding.left + _padding.right);
-    NSTextStorage *textStorage = nil;
-    if (![self useCoreText]) {
-        textStorage = [self textStorageWithWidth:width];
-    }
-    [self.weexInstance.componentManager  _addUITask:^{
-        if ([self isViewLoaded]) {
-            if (![self useCoreText]) {
-                ((WXTextView *)self.view).textStorage = textStorage;
-            }
-            [self readyToRender]; // notify super component
-            [self setNeedsDisplay];
-        }
-    }];
-}
-
-- (void)_frameDidCalculated:(BOOL)isChanged
-{
-    [super _frameDidCalculated:isChanged];
-    [self syncTextStorageForView];
-}
-
-- (void)_updateStylesOnComponentThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles isUpdateStyles:(BOOL)isUpdateStyles
-{
-    [super _updateStylesOnComponentThread:styles resetStyles:(NSMutableArray *)resetStyles isUpdateStyles:isUpdateStyles];
-    NSMutableDictionary * newStyles = [styles mutableCopy];
-    for (NSString * key in [resetStyles copy]) {
-        [newStyles setObject:@"" forKey:key];
-    }
-    [self fillCSSStyles:newStyles];
-    
-    [self syncTextStorageForView];
-}
-
-- (void)_updateAttributesOnComponentThread:(NSDictionary *)attributes
-{
-    [super _updateAttributesOnComponentThread:attributes];
-    
-    [self fillAttributes:attributes];
-    
-    [self syncTextStorageForView];
-}
-
-- (void)drawTextWithContext:(CGContextRef)context bounds:(CGRect)bounds padding:(UIEdgeInsets)padding
-{
-    if (bounds.size.width <= 0 || bounds.size.height <= 0) {
-        return;
-    }
-    
-    if ([self _needsDrawBorder]) {
-        [self _drawBorderWithContext:context size:bounds.size];
-    } else {
-        WXPerformBlockOnMainThread(^{
-            [self _resetNativeBorderRadius];
-        });
-    }
-    if (![self useCoreText]) {
-        NSLayoutManager *layoutManager = _textStorage.layoutManagers.firstObject;
-        NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
-        
-        CGRect textFrame = UIEdgeInsetsInsetRect(bounds, padding);
-        NSRange glyphRange = [layoutManager glyphRangeForTextContainer:textContainer];
-        
-        [layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:textFrame.origin];
-        [layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:textFrame.origin];
-    } else {
-        CGRect textFrame = UIEdgeInsetsInsetRect(bounds, padding);
-        // sufficient height for text to draw, or frame lines will be empty
-        textFrame.size.height = bounds.size.height * 2;
-        CGContextSaveGState(context);
-        //flip the coordinate system
-        CGContextSetTextMatrix(context, CGAffineTransformIdentity);
-        CGContextTranslateCTM(context, 0, textFrame.size.height);
-        CGContextScaleCTM(context, 1.0, -1.0);
-        
-        NSAttributedString * attributedStringCopy = [self ctAttributedString];
-        if (!attributedStringCopy) {
-            return;
-        }
-        //add path
-        CGPathRef cgPath = CGPathCreateWithRect(textFrame, NULL);
-        CTFramesetterRef ctframesetterRef = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)(attributedStringCopy));
-        CTFrameRef coreTextFrameRef = CTFramesetterCreateFrame(ctframesetterRef, CFRangeMake(0, attributedStringCopy.length), cgPath, NULL);
-        if (NULL == coreTextFrameRef) {
-            // try to protect crash from frame is NULL
-            CFRelease(ctframesetterRef);
-            CGPathRelease(cgPath);
-            return;
-        }
-        CFRelease(ctframesetterRef);
-        CFArrayRef ctLines = CTFrameGetLines(coreTextFrameRef);
-        CFIndex lineCount = CFArrayGetCount(ctLines);
-        NSMutableArray * mutableLines = [NSMutableArray new];
-        CGPoint lineOrigins[lineCount];
-        NSUInteger rowCount = 0;
-        BOOL needTruncation = NO;
-        CTLineRef ctTruncatedLine = NULL;
-        CTFrameGetLineOrigins(coreTextFrameRef, CFRangeMake(0, 0), lineOrigins);
-        
-        CGFloat fixDescent = 0;
-        if (lineCount > 0 && _lineHeight && WX_SYS_VERSION_LESS_THAN(@"10.0")) {
-            CGFloat ascent, descent, leading;
-            CTLineRef line1 = (CTLineRef)CFArrayGetValueAtIndex(ctLines, 0);
-            CTLineGetTypographicBounds(line1, &ascent, &descent, &leading);
-            fixDescent = (descent + _fontDescender) + (ascent - _fontAscender);
-        }
-        
-        for (CFIndex lineIndex = 0;(!_lines || _lines > lineIndex) && lineIndex < lineCount; lineIndex ++) {
-            CTLineRef lineRef = NULL;
-            lineRef = (CTLineRef)CFArrayGetValueAtIndex(ctLines, lineIndex);
-            if (!lineRef) {
-                break;
-            }
-            CGPoint lineOrigin = lineOrigins[lineIndex];
-            lineOrigin.x += padding.left;
-            lineOrigin.y -= padding.top + fixDescent;
-            CFArrayRef runs = CTLineGetGlyphRuns(lineRef);
-            [mutableLines addObject:(__bridge id _Nonnull)(lineRef)];
-            // lineIndex base 0
-            rowCount = lineIndex + 1;
-            if (_lines > 0 && _truncationLine) {
-                if (_truncationLine && rowCount > _lines) {
-                    needTruncation = YES;
-                    do {
-                        NSUInteger lastRow = [mutableLines count];
-                        if (lastRow < rowCount) {
-                           break;
-                        }
-                        [mutableLines removeLastObject];
-                    } while (1);
-
-                }
-            }
-            if (_lines > 0 && _truncationLine) {
-                if (rowCount >= _lines &&!needTruncation && (CTLineGetStringRange(lineRef).length + CTLineGetStringRange(lineRef).location) < attributedStringCopy.length) {
-                    needTruncation = YES;
-                }
-            }
-            
-            if (needTruncation) {
-                CGContextSetTextPosition(context, lineOrigin.x, lineOrigin.y);
-                ctTruncatedLine = [self buildTruncatedLineWithRuns:runs lines:mutableLines path:cgPath];
-                if (ctTruncatedLine) {
-                    CFArrayRef truncatedRuns = CTLineGetGlyphRuns(ctTruncatedLine);
-                    [self drawTextWithRuns:truncatedRuns context:context lineOrigin:lineOrigin];
-                    CFRelease(ctTruncatedLine);
-                    ctTruncatedLine = NULL;
-                    continue;
-                }
-            } else {
-                [self drawTextWithRuns:runs context:context lineOrigin:lineOrigin];
-            }
-        }
-        
-        [mutableLines removeAllObjects];
-        CGPathRelease(cgPath);
-        CFRelease(coreTextFrameRef);
-        CGContextRestoreGState(context);
-    }
-}
-
-- (void)drawTextWithRuns:(CFArrayRef)runs context:(CGContextRef)context lineOrigin:(CGPoint)lineOrigin
-{
-    for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runs); runIndex ++) {
-        CTRunRef run = NULL;
-        run = (CTRunRef)CFArrayGetValueAtIndex(runs, runIndex);
-        CFDictionaryRef attr = NULL;
-        attr = CTRunGetAttributes(run);
-        if (0 == runIndex) {
-            NSNumber *baselineOffset = (NSNumber*)CFDictionaryGetValue(attr, (__bridge void *)NSBaselineOffsetAttributeName);
-            if (baselineOffset) {
-                lineOrigin.y += [baselineOffset doubleValue];
-            }
-        }
-        CGContextSetTextPosition(context, lineOrigin.x, lineOrigin.y);
-        CTRunDraw(run, context, CFRangeMake(0, 0));
-        CFIndex glyphCount = CTRunGetGlyphCount(run);
-        if (glyphCount <= 0) continue;
-        
-        long longForStrikethroughStyleAttributeName= (long)CFDictionaryGetValue(attr, (__bridge void *)NSStrikethroughStyleAttributeName);
-        NSUnderlineStyle strikethrough = (NSUnderlineStyle)longForStrikethroughStyleAttributeName;
-        
-        if (strikethrough) {
-            // draw strikethrough
-            [self drawLineThroughWithRun:runs context:context index:runIndex origin:lineOrigin];
-        }
-    }
-}
-
-- (CTLineRef)buildTruncatedLineWithRuns:(CFArrayRef)runs lines:(NSMutableArray*)mutableLines path:(CGPathRef)cgPath
-{
-    NSAttributedString * truncationToken = nil;
-    CTLineRef ctTruncatedLine = NULL;
-    CTLineRef lastLine = (__bridge CTLineRef)(mutableLines.lastObject);
-   
-    CFArrayRef lastLineRuns = CTLineGetGlyphRuns(lastLine);
-    NSUInteger lastLineRunCount = CFArrayGetCount(lastLineRuns);
-    
-    CTLineRef truncationTokenLine = NULL;
-    NSMutableDictionary *attrs = nil;
-    if (lastLineRunCount > 0) {
-        CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runs, lastLineRunCount - 1);
-        attrs = (id)CTRunGetAttributes(run);
-        attrs = attrs ? attrs.mutableCopy : [NSMutableDictionary new];
-        CTFontRef font = (__bridge CTFontRef)(attrs[(id)kCTFontAttributeName]);
-        CGFloat fontSize = font ? CTFontGetSize(font):32 * self.weexInstance.pixelScaleFactor;
-        UIFont * uiFont = [UIFont systemFontOfSize:fontSize];
-        if (uiFont) {
-            font = CTFontCreateWithName((__bridge CFStringRef)uiFont.fontName, uiFont.pointSize, NULL);
-        }
-        if (font) {
-            attrs[(id)kCTFontAttributeName] = (__bridge id)(font);
-            uiFont = nil;
-            CFRelease(font);
-        }
-        CGColorRef color = (__bridge CGColorRef)(attrs[(id)kCTForegroundColorAttributeName]);
-        if (color && CFGetTypeID(color) == CGColorGetTypeID() && CGColorGetAlpha(color) == 0) {
-            [attrs removeObjectForKey:(id)kCTForegroundColorAttributeName];
-        }
-        
-        attrs = attrs?:[NSMutableDictionary new];
-        truncationToken = [[NSAttributedString alloc] initWithString:WXTextTruncationToken attributes:attrs];
-        truncationTokenLine = CTLineCreateWithAttributedString((CFAttributedStringRef)truncationToken);
-    }
-    
-    if (truncationTokenLine) {
-        // default truncationType is kCTLineTruncationEnd
-        CTLineTruncationType truncationType = kCTLineTruncationEnd;
-        NSAttributedString *attributedString = [self ctAttributedString];
-        NSAttributedString * lastLineText = nil;
-        NSRange lastLineTextRange = WXNSRangeFromCFRange(CTLineGetStringRange(lastLine));
-        NSRange attributeStringRange = NSMakeRange(0, attributedString.string.length);
-        NSRange interSectionRange = NSIntersectionRange(lastLineTextRange, attributeStringRange);
-        if (!NSEqualRanges(interSectionRange, lastLineTextRange)) {
-            // out of bounds
-            lastLineTextRange = interSectionRange;
-        }
-        lastLineText = [attributedString attributedSubstringFromRange: lastLineTextRange];
-        if (!lastLineText) {
-            lastLineText = attributedString;
-        }
-        NSMutableAttributedString *mutableLastLineText = lastLineText.mutableCopy;
-        [mutableLastLineText appendAttributedString:truncationToken];
-        CTLineRef ctLastLineExtend = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)[mutableLastLineText copy]);
-        if (ctLastLineExtend) {
-            CGRect cgPathRect = CGRectZero;
-            CGFloat truncatedWidth = 0;
-            if (CGPathIsRect(cgPath, &cgPathRect)) {
-                truncatedWidth = cgPathRect.size.width;
-            }
-            ctTruncatedLine = CTLineCreateTruncatedLine(ctLastLineExtend, truncatedWidth, truncationType, truncationTokenLine);
-            CFRelease(ctLastLineExtend);
-            ctLastLineExtend = NULL;
-            CFRelease(truncationTokenLine);
-            truncationTokenLine = NULL;
-        }
-    }
-    
-    return ctTruncatedLine;
-}
-
-- (void)drawLineThroughWithRun:(CFArrayRef)runs context:(CGContextRef)context index:(CFIndex)runIndex origin:(CGPoint)lineOrigin
-{
-    CFRetain(runs);
-    CGContextRetain(context);
-    
-    CGContextSaveGState(context);
-    CGFloat xHeight = 0, underLinePosition = 0, lineThickness = 0;
-    CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runs, runIndex);
-    WXTextGetRunsMaxMetric(runs, &xHeight, &underLinePosition, &lineThickness);
-    
-    CGPoint strikethroughStart;
-    strikethroughStart.x =  lineOrigin.x - underLinePosition;
-    strikethroughStart.y = lineOrigin.y + xHeight/2;
-    CGPoint runPosition = CGPointZero;
-    CTRunGetPositions(run, CFRangeMake(0, 1), &runPosition);
-    strikethroughStart.x = lineOrigin.x + runPosition.x;
-    CGContextSetLineWidth(context, WXTextDefaultLineThroughWidth);
-    double length = CTRunGetTypographicBounds(run, CFRangeMake(0, 0), NULL, NULL, NULL);
-    CGContextMoveToPoint(context, strikethroughStart.x, strikethroughStart.y);
-    CGContextAddLineToPoint(context, strikethroughStart.x + length, strikethroughStart.y);
-    CGContextStrokePath(context);
-    
-    CGContextRestoreGState(context);
-    CFRelease(runs);
-    CGContextRelease(context);
-}
-
-- (CGSize)calculateTextHeightWithWidth:(CGFloat)aWidth
-{
-    CGFloat totalHeight = 0;
-    CGSize suggestSize = CGSizeZero;
-    NSAttributedString * attributedStringCpy = [self ctAttributedString];
-    if (!attributedStringCpy) {
-        return CGSizeZero;
-    }
-    if (isnan(aWidth)) {
-        aWidth = CGFLOAT_MAX;
-    }
-    aWidth = [attributedStringCpy boundingRectWithSize:CGSizeMake(aWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading context:nil].size.width;
-    
-    /* Must get ceil of aWidth. Or core text may not return correct bounds.
-     Maybe aWidth without ceiling triggered some critical conditions. */
-    aWidth = ceil(aWidth);
-    CTFramesetterRef ctframesetterRef = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)(attributedStringCpy));
-    suggestSize = CTFramesetterSuggestFrameSizeWithConstraints(ctframesetterRef, CFRangeMake(0, 0), NULL, CGSizeMake(aWidth, MAXFLOAT), NULL);
-    
-    if (_lines == 0) {
-        // If not line limit use suggestSize directly.
-        CFRelease(ctframesetterRef);
-        return CGSizeMake(aWidth, suggestSize.height);
-    }
-    
-    CGMutablePathRef path = NULL;
-    path = CGPathCreateMutable();
-        // sufficient height to draw text
-    CGPathAddRect(path, NULL, CGRectMake(0, 0, aWidth, suggestSize.height * 10));
-        
-    CTFrameRef frameRef = NULL;
-    frameRef = CTFramesetterCreateFrame(ctframesetterRef, CFRangeMake(0, attributedStringCpy.length), path, NULL);
-    CGPathRelease(path);
-    CFRelease(ctframesetterRef);
-    
-    if (NULL == frameRef) {
-        //try to protect unexpected crash.
-        return suggestSize;
-    }
-    
-    CFArrayRef lines = CTFrameGetLines(frameRef);
-    CFIndex lineCount = CFArrayGetCount(lines);
-    CGFloat ascent = 0;
-    CGFloat descent = 0;
-    CGFloat leading = 0;
-    
-    // height = ascent + descent + lineCount*leading
-    // ignore linespaing
-    NSUInteger actualLineCount = 0;
-    for (CFIndex lineIndex = 0; (!_lines|| lineIndex < _lines) && lineIndex < lineCount; lineIndex ++)
-    {
-        CTLineRef lineRef = NULL;
-        lineRef = (CTLineRef)CFArrayGetValueAtIndex(lines, lineIndex);
-        CTLineGetTypographicBounds(lineRef, &ascent, &descent, &leading);
-        totalHeight += ascent + descent;
-        actualLineCount ++;
-    }
-    
-    totalHeight = totalHeight + actualLineCount * leading;
-    CFRelease(frameRef);
-    
-    if (WX_SYS_VERSION_LESS_THAN(@"10.0")) {
-        // there is something wrong with coreText drawing text height, trying to fix this with more efficent way.
-        if(actualLineCount && actualLineCount < lineCount) {
-            suggestSize.height = suggestSize.height * actualLineCount / lineCount;
-        }
-        return CGSizeMake(aWidth, suggestSize.height);
-    }
-    return CGSizeMake(aWidth, totalHeight);
-}
-
-static void WXTextGetRunsMaxMetric(CFArrayRef runs, CGFloat *xHeight, CGFloat *underlinePosition, CGFloat *lineThickness)
-{
-    CFRetain(runs);
-    CGFloat maxXHeight = 0;
-    CGFloat maxUnderlinePos = 0;
-    CGFloat maxLineThickness = 0;
-    for (NSUInteger index = 0, runsCount = CFArrayGetCount(runs); index < runsCount; index ++) {
-        CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runs, index);
-        CFDictionaryRef attrs = CTRunGetAttributes(run);
-        if (attrs) {
-            CTFontRef font = (CTFontRef)CFDictionaryGetValue(attrs, kCTFontAttributeName);
-            if (font) {
-                CGFloat xHeight = CTFontGetXHeight(font);
-                if (xHeight > maxXHeight) {
-                    maxXHeight = xHeight;
-                }
-                
-                CGFloat underlinePos = CTFontGetUnderlinePosition(font);
-                if (underlinePos < maxUnderlinePos) {
-                    maxUnderlinePos = underlinePos;
-                }
-                
-                CGFloat lineThickness = CTFontGetUnderlineThickness(font);
-                if (lineThickness > maxLineThickness) {
-                    maxLineThickness = lineThickness;
-                }
-            }
-        }
-    }
-    
-    if (xHeight) {
-        *xHeight = maxXHeight;
-    }
-    
-    if (underlinePosition) {
-        *underlinePosition = maxUnderlinePos;
-    }
-    
-    if (lineThickness) {
-        *lineThickness = maxLineThickness;
-    }
-    
-    CFRelease(runs);
-}
-                                                                                                                                       
-NS_INLINE NSRange WXNSRangeFromCFRange(CFRange range) {
-    return NSMakeRange(range.location, range.length);
-}
-
-#ifdef UITEST
-- (NSString *)description
-{
-    return super.description;
-}
-#endif
- 
-- (void)_resetCSSNodeStyles:(NSArray *)styles
-{
-    [super _resetCSSNodeStyles:styles];
-    if ([styles containsObject:@"color"]) {
-        _color[0] = 0;
-        _color[1] = 0;
-        _color[2] = 0;
-        _color[3] = 1.0;
-        [self setNeedsRepaint];
-    }
-    if ([styles containsObject:@"fontSize"]) {
-        _fontSize = WX_TEXT_FONT_SIZE;
-        [self setNeedsRepaint];
-        [self setNeedsLayout];
-    }
-}
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h
deleted file mode 100644
index 3702aef..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-#import "WXEditComponent.h"
-
-@interface WXTextInputView : UITextField
-@property (nonatomic, assign) UIEdgeInsets border;
-@property (nonatomic, assign) UIEdgeInsets padding;
-@property (nonatomic, assign) BOOL deleteWords;
-@property (nonatomic, strong) NSString *editWords;
-@end
-
-@interface WXTextInputComponent : WXEditComponent
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
deleted file mode 100644
index 02d8f52..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXTextInputComponent.h"
-#import "WXConvert.h"
-
-@implementation WXTextInputView
-
-- (instancetype)init
-{
-    self = [super init];
-    if (self) {
-        _padding = UIEdgeInsetsZero;
-        _border = UIEdgeInsetsZero;
-    }
-    return self;
-}
-
-- (CGRect)textRectForBounds:(CGRect)bounds
-{
-    bounds.size.width -= self.padding.left + self.border.left;
-    bounds.origin.x += self.padding.left + self.border.left;
-    
-    bounds.size.height -= self.padding.top + self.border.top;
-    bounds.origin.y += self.padding.top + self.border.top;
-    
-    bounds.size.width -= self.padding.right + self.border.right;
-    
-    bounds.size.height -= self.padding.bottom + self.border.bottom;
-    
-    return bounds;
-}
-
-- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
-{
-    // this behavior will hide the action like copy, cut, paste, selectAll and so on.
-    // fixed textfield issue
-    // fixed menu item show by system default(like: if word not be selected ,menu item not show "cut")
-    BOOL allowCopyPaste = [[self.wx_component valueForKey:@"allowCopyPaste"] boolValue];
-    if (allowCopyPaste) {
-        return [super canPerformAction:action withSender:sender];
-    }
-    return NO;
-}
-
-- (CGRect)editingRectForBounds:(CGRect)bounds
-{
-    return [self textRectForBounds:bounds];
-}
-@end
-
-@interface WXTextInputComponent()
-
-@property (nonatomic, strong) WXTextInputView *inputView;
-@property (nonatomic, assign) BOOL allowCopyPaste;
-
-@end
-
-@implementation WXTextInputComponent
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        _allowCopyPaste = YES;
-        if (attributes[@"allowCopyPaste"]) {
-            _allowCopyPaste = [WXConvert BOOL:attributes[@"allowCopyPaste"]];
-        }
-    }
-    return self;
-}
-
-- (UIView *)loadView
-{
-    _inputView = [[WXTextInputView alloc] init];
-    return _inputView;
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes {
-    [super updateAttributes:attributes];
-    if (attributes[@"allowCopyPaste"]) {
-        _allowCopyPaste = [WXConvert BOOL:attributes[@"allowCopyPaste"]];
-    }
-}
-
--(void)viewDidLoad
-{
-    [super viewDidLoad];
-    _inputView.delegate = self;
-}
-
-# pragma mark - overwrite method
--(NSString *)text
-{
-    return _inputView.text;
-}
-- (void)setText:(NSString *)text
-{
-    _inputView.text = text;
-}
--(void)setTextColor:(UIColor *)color
-{
-    _inputView.textColor = color;
-}
-
--(void)setTextAlignment:(NSTextAlignment)textAlignForStyle
-{
-    _inputView.textAlignment = textAlignForStyle;
-}
--(void)setUserInteractionEnabled:(BOOL)userInteractionEnabled
-{
-    _inputView.userInteractionEnabled = userInteractionEnabled;
-}
--(void)setEnabled:(BOOL)enabled
-{
-    _inputView.enabled=enabled;
-}
--(void)setReturnKeyType:(UIReturnKeyType)returnKeyType
-{
-    _inputView.returnKeyType = returnKeyType;
-}
--(void)setInputAccessoryView:(UIView *)inputAccessoryView
-{
-    _inputView.inputAccessoryView = inputAccessoryView;
-}
--(void)setKeyboardType:(UIKeyboardType)keyboardType
-{
-    _inputView.keyboardType = keyboardType;
-}
--(void)setSecureTextEntry:(BOOL)secureTextEntry
-{
-    _inputView.secureTextEntry = secureTextEntry;
-}
--(void)setEditPadding:(UIEdgeInsets)padding
-{
-    [_inputView setPadding:padding];
-}
--(void)setEditBorder:(UIEdgeInsets)border
-{
-    [_inputView setBorder:border];
-}
-
--(void)setAttributedPlaceholder:(NSMutableAttributedString *)attributedString font:font
-{
-    [_inputView setAttributedPlaceholder:attributedString];
-}
-
--(void)setFont:(UIFont *)font
-{
-    [_inputView setFont:font];
-}
-
--(void)setEditSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
-{
-    UITextPosition *startPos =  [self.inputView positionFromPosition:self.inputView.beginningOfDocument offset:selectionStart];
-    UITextPosition *endPos = [self.inputView positionFromPosition:self.inputView.beginningOfDocument offset:selectionEnd];
-    UITextRange *textRange = [self.inputView textRangeFromPosition:startPos
-                                                        toPosition:endPos];
-    self.inputView.selectedTextRange = textRange;
-}
-
--(NSDictionary *)getEditSelectionRange
-{
-    NSInteger selectionStart = [self.inputView offsetFromPosition:self.inputView.beginningOfDocument toPosition:self.inputView.selectedTextRange.start];
-    NSInteger selectionEnd = [self.inputView offsetFromPosition:self.inputView.beginningOfDocument toPosition:self.inputView.selectedTextRange.end];
-    NSDictionary *res = @{@"selectionStart":@(selectionStart),@"selectionEnd":@(selectionEnd)};
-    return res;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTransform.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
deleted file mode 100644
index e9e23c3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-@class WXSDKInstance;
-@class WXLength;
-
-@interface WXTransform : NSObject
-
-@property (nonatomic, assign, readonly) float rotateAngle;
-@property (nonatomic, assign, readonly) float rotateX;
-@property (nonatomic, assign, readonly) float rotateY;
-@property (nonatomic, assign, readonly) float rotateZ;
-@property (nonatomic, strong, readonly) WXLength *translateX;
-@property (nonatomic, strong, readonly) WXLength *translateY;
-@property (nonatomic, assign, readonly) float scaleX;
-@property (nonatomic, assign, readonly) float scaleY;
-@property (nonatomic, assign) float perspective;
-
-- (instancetype)initWithCSSValue:(NSString *)cssValue origin:(NSString *)origin instance:(WXSDKInstance *)instance;
-
-- (instancetype)initWithNativeTransform:(CATransform3D)transform instance:(WXSDKInstance *)instance;
-
-- (void)applyTransformForView:(UIView *)view;
-
-- (void)setTransformOrigin:(NSString *)transformOriginCSS;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTransform.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
deleted file mode 100644
index 1fe6566..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXTransform.h"
-#import "math.h"
-#import "WXLength.h"
-#import "WXUtility.h"
-#import "WXSDKInstance.h"
-#import "WXConvert.h"
-#import "WXSDKEngine.h"
-#import "WXConfigCenterProtocol.h"
-
-@interface WXTransform()
-
-@property (nonatomic, weak) WXSDKInstance *weexInstance;
-
-@end
-
-@implementation WXTransform
-{
-    float _rotateAngle; //for rotate
-    float _scaleX;
-    float _scaleY;
-    WXLength *_translateX;
-    WXLength *_translateY;
-    WXLength *_originX;
-    WXLength *_originY;
-    
-    //3d rotate
-    float _rotateX;
-    float _rotateY;
-    float _rotateZ;
-    float _perspective;
-    
-    CATransform3D _nativeTransform;
-    BOOL _useNativeTransform;
-}
-
-- (instancetype)initWithCSSValue:(NSString *)cssValue origin:(NSString *)origin instance:(WXSDKInstance *)instance
-{
-    if (self = [super init]) {
-        _weexInstance = instance;
-        _scaleX = 1.0;
-        _scaleY = 1.0;
-        _rotateX = 0.0;
-        _rotateY = 0.0;
-        _rotateZ = 0.0;
-        _rotateAngle = 0.0;
-        
-        // default is parallel projection
-        _perspective = CGFLOAT_MAX;
-        
-        [self parseTransform:cssValue];
-        [self parseTransformOrigin:origin];
-    }
-    
-    return self;
-}
-
-- (instancetype)initWithNativeTransform:(CATransform3D)transform instance:(WXSDKInstance *)instance
-{
-    if (self = [super init]) {
-        _weexInstance = instance;
-        _nativeTransform = transform;
-        _useNativeTransform = YES;
-    }
-    return self;
-}
-
-- (float)rotateAngle
-{
-    if (_useNativeTransform) {
-        return atan2(_nativeTransform.m11, _nativeTransform.m12);
-    }
-    return _rotateAngle;
-}
-
-- (float)rotateX
-{
-    if (_useNativeTransform) {
-        return atan2(_nativeTransform.m22, _nativeTransform.m23);
-    }
-    return _rotateX;
-}
-
-- (float)rotateY
-{
-    if (_useNativeTransform) {
-        return atan2(_nativeTransform.m11, _nativeTransform.m31);
-    }
-    return _rotateY;
-}
-
-- (float)rotateZ
-{
-    return _rotateZ;
-}
-
-- (WXLength *)translateX
-{
-    if (_useNativeTransform) {
-        return [WXLength lengthWithFloat:_nativeTransform.m41 type:WXLengthTypeFixed];
-    }
-    return _translateX;
-}
-
-- (WXLength *)translateY
-{
-    if (_useNativeTransform) {
-        return [WXLength lengthWithFloat:_nativeTransform.m42 type:WXLengthTypeFixed];
-    }
-    return _translateY;
-}
-
-- (float)scaleX
-{
-    if (_useNativeTransform) {
-        return sqrt(_nativeTransform.m11 * _nativeTransform.m11 + _nativeTransform.m21 * _nativeTransform.m21);
-    }
-    return _scaleX;
-}
-
-- (float)scaleY
-{
-    if (_useNativeTransform) {
-        return sqrt(_nativeTransform.m12 * _nativeTransform.m12 + _nativeTransform.m22 * _nativeTransform.m22);
-    }
-    return _scaleY;
-}
-
-- (void)setTransformOrigin:(NSString *)transformOriginCSS
-{
-    [self parseTransformOrigin:transformOriginCSS];
-}
-
-- (CATransform3D)nativeTransformWithView:(UIView *)view
-{
-    if (_useNativeTransform) {
-        return _nativeTransform;
-    }
-    
-    CATransform3D nativeTransform3d = [self nativeTransformWithoutRotateWithView:view];
-
-    if (_rotateAngle != 0 || _rotateZ != 0) {
-        nativeTransform3d = CATransform3DRotate(nativeTransform3d, _rotateAngle?:_rotateZ, 0, 0, 1);
-    }
-    
-    if (_rotateY != 0) {
-        nativeTransform3d = CATransform3DRotate(nativeTransform3d, _rotateY, 0, 1, 0);
-    }
-    
-    if (_rotateX != 0) {
-        nativeTransform3d = CATransform3DRotate(nativeTransform3d, _rotateX, 1, 0, 0);
-    }
-    
-    return nativeTransform3d;
-}
-
-- (CATransform3D)nativeTransformWithoutRotateWithView:(UIView *)view
-{
-    CATransform3D nativeTansform3D = CATransform3DIdentity;
-    
-    // CGFLOAT_MAX is not INF on 32-bit device
-    if(_perspective && _perspective != CGFLOAT_MAX && !isinf(_perspective)) {
-        nativeTansform3D.m34 = -1.0/_perspective;
-    }
-    if (!view || view.bounds.size.width <= 0 || view.bounds.size.height <= 0) {
-        return nativeTansform3D;
-    }
-    
-    if (_translateX || _translateY) {
-        
-        nativeTansform3D = CATransform3DTranslate(nativeTansform3D, _translateX ? [_translateX valueForMaximum:view.bounds.size.width] : 0, _translateY ? [_translateY valueForMaximum:view.bounds.size.height]:0, 0);
-    }
-    nativeTansform3D = CATransform3DScale(nativeTansform3D, _scaleX, _scaleY, 1.0);
-    
-    return nativeTansform3D;
-}
-
--(void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view
-{
-    CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x,
-                                   view.bounds.size.height * anchorPoint.y);
-    CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x,
-                                   view.bounds.size.height * view.layer.anchorPoint.y);
-    
-    newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
-    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);
-    
-    CGPoint position = view.layer.position;
-    
-    position.x -= oldPoint.x;
-    position.x += newPoint.x;
-    
-    position.y -= oldPoint.y;
-    position.y += newPoint.y;
-    
-    view.layer.position = position;
-    view.layer.anchorPoint = anchorPoint;
-}
-
-
-- (void)applyTransformForView:(UIView *)view
-{
-    if (!view || view.bounds.size.width <= 0 || view.bounds.size.height <= 0) {
-        return;
-    }
-    
-    BOOL applyTransformOrigin = _originX || _originY;
-    if (applyTransformOrigin) {
-        /**
-          * Waiting to fix the issue that transform-origin behaves in rotation
-          * http://ronnqvi.st/translate-rotate-translate/
-          **/
-        CGPoint anchorPoint = CGPointMake(
-                                          _originX ? [_originX valueForMaximum:view.bounds.size.width] / view.bounds.size.width : 0.5,
-                                          _originY ? [_originY valueForMaximum:view.bounds.size.height] / view.bounds.size.height : 0.5);
-        [self setAnchorPoint:anchorPoint forView:view];
-    }
-    CATransform3D nativeTransform3d = [self nativeTransformWithView:view];
-    if (!CATransform3DEqualToTransform(view.layer.transform, nativeTransform3d)){
-        view.layer.transform = nativeTransform3d;
-    }
-}
-
-- (void)parseTransform:(NSString *)cssValue
-{
-    if (!cssValue || cssValue.length == 0 || [cssValue isEqualToString:@"none"]) {
-        return;
-    }
-    
-    static NSRegularExpression* parseRegex = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        NSError *error = NULL;
-        parseRegex = [NSRegularExpression regularExpressionWithPattern:@"(\\w+)\\((.+?)\\)"
-                                                               options:NSRegularExpressionCaseInsensitive
-                                                                 error:&error];
-    });
-    
-    NSArray *matches = [parseRegex matchesInString:cssValue options:0 range:NSMakeRange(0, cssValue.length)];
-    
-    for (NSTextCheckingResult *match in matches) {
-        NSString *name = [cssValue substringWithRange:[match rangeAtIndex:1]];
-        NSArray *value = [[cssValue substringWithRange:[match rangeAtIndex:2]] componentsSeparatedByString:@","];
-        
-        SEL method = NSSelectorFromString([NSString stringWithFormat:@"parse%@:", [name capitalizedString]]);
-        if ([self respondsToSelector:method]) {
-            @try {
-                IMP imp = [self methodForSelector:method];
-                void (*func)(id, SEL,NSArray *) = (void *)imp;
-                func(self, method,value);
-            }
-            @catch (NSException *exception) {
-                WXLogError(@"WXTransform exception:%@", [exception reason]);
-            }
-        }
-    }
-}
-
-- (void)parseTransformOrigin:(NSString *)cssValue
-{
-    if (!cssValue || cssValue.length == 0 || [cssValue isEqualToString:@"none"]) {
-        return;
-    }
-    
-    NSArray *values = [cssValue componentsSeparatedByString:@" "];
-
-    double originX = 50;
-    double originY = 50;
-    WXLengthType typeX = WXLengthTypePercent;
-    WXLengthType typeY = WXLengthTypePercent;
-    for (NSInteger i = 0; i < values.count; i++) {
-        NSString *value = values[i];
-        if ([value isEqualToString:@"left"]) {
-            originX = 0;
-        } else if ([value isEqualToString:@"right"]) {
-            originX = 100;
-        } else if ([value isEqualToString:@"top"]) {
-            originY = 0;
-        } else if ([value isEqualToString:@"bottom"]) {
-            originY = 100;
-        } else if ([value isEqualToString:@"center"]) {
-            if (i == 0) {
-                originX = 50;
-            } else {
-                originY = 50;
-            }
-        } else {
-            double val = [value doubleValue];
-            if (i == 0) {
-                if ([value hasSuffix:@"%"]) {
-                    originX = val;
-                } else {
-                    typeX = WXLengthTypeFixed;
-                    originX = WXPixelScale(val, self.weexInstance.pixelScaleFactor);
-                }
-            } else {
-                if ([value hasSuffix:@"%"]) {
-                    originY = val;
-                } else {
-                    typeY = WXLengthTypeFixed;
-                    originY = WXPixelScale(val, self.weexInstance.pixelScaleFactor);
-                }
-            }
-        }
-    }
-    _originX = [WXLength lengthWithFloat:originX type:typeX];
-    _originY = [WXLength lengthWithFloat:originY type:typeY];
-}
-
-- (void)parseRotate:(NSArray *)value
-{
-    float rotateAngle = [self getAngle:value[0]];
-    _rotateAngle = rotateAngle;
-}
-
-- (void)parseRotatex:(NSArray *)value
-{
-    _rotateX = [self getAngle:value[0]];
-}
-
-- (void)parseRotatey:(NSArray *)value
-{
-    _rotateY = [self getAngle:value[0]];
-}
-
-- (void)parseRotatez:(NSArray *)value
-{
-   _rotateZ = [self getAngle:value[0]];
-}
-
-- (void)parsePerspective:(NSArray *)value
-{
-    _perspective = [WXConvert WXPixelType:value[0] scaleFactor:self.weexInstance.pixelScaleFactor];
-    if (_perspective <= 0 ) {
-        _perspective = CGFLOAT_MAX;
-    }
-}
-
-- (void)parseTranslate:(NSArray *)value
-{
-    [self parseTranslatex:@[value[0]]];
-    if (value.count > 1) {
-        [self parseTranslatey:@[value[1]]];
-    }
-}
-
-- (void)parseTranslatex:(NSArray *)value
-{
-    WXLength *translateX;
-    double x = [value[0] doubleValue];
-    if ([value[0] hasSuffix:@"%"]) {
-        translateX = [WXLength lengthWithFloat:x type:WXLengthTypePercent];
-    } else {
-        x = WXPixelScale(x, self.weexInstance.pixelScaleFactor);
-        translateX = [WXLength lengthWithFloat:x type:WXLengthTypeFixed];
-    }
-    _translateX = translateX;
-}
-
-- (void)parseTranslatey:(NSArray *)value
-{
-    WXLength *translateY;
-    double y = [value[0] doubleValue];
-    if ([value[0] hasSuffix:@"%"]) {
-        translateY = [WXLength lengthWithFloat:y type:WXLengthTypePercent];
-    } else {
-        y = WXPixelScale(y, self.weexInstance.pixelScaleFactor);
-        translateY = [WXLength lengthWithFloat:y type:WXLengthTypeFixed];
-    }
-    _translateY = translateY;
-}
-
-- (void)parseScale:(NSArray *)value
-{
-    double x = [value[0] doubleValue];
-    double y = x;
-    if (value.count == 2) {
-        y = [value[1] doubleValue];
-    }
-    _scaleX = x;
-    _scaleY = y;
-}
-
-- (void)parseScalex:(NSArray *)value
-{
-	_scaleX = [value[0] doubleValue];
-}
-
-- (void)parseScaley:(NSArray *)value
-{
-	_scaleY = [value[0] doubleValue];
-}
-
-// Angle in radians
-- (double)getAngle:(NSString *)value
-{
-    double angle = [value doubleValue];
-    if ([value hasSuffix:@"deg"]) {
-        return [self deg2rad:angle];
-    } else {
-        return angle;
-    }
-}
-
-- (double)deg2rad:(double)deg
-{
-    return deg * M_PI / 180.0;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h
deleted file mode 100644
index bf9d908..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-typedef NS_ENUM(NSInteger, WXPlaybackState) {
-    WXPlaybackStatePlaying,
-    WXPlaybackStatePaused,
-    //    WXPlaybackStateStopped,
-    WXPlaybackStatePlayFinish,
-    WXPlaybackStateFailed,
-};
-
-@interface WXVideoView : UIView
-
-@property (nonatomic, copy) void (^playbackStateChanged)(WXPlaybackState state);
-@property (nonatomic, copy) void (^posterClickHandle)(void);
-
-- (void) setURL:(NSURL*)URL;
-- (void) setPosterURL:(NSURL *)posterURL;
-
-- (void) play;
-- (void) pause;
-
-@end
-
-@interface WXVideoComponent : WXComponent
-
-@end
-
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.m
deleted file mode 100644
index 3fa6ad3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.m
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXVideoComponent.h"
-#import "WXHandlerFactory.h"
-#import "WXURLRewriteProtocol.h"
-#import "WXSDKEngine.h"
-#import "WXImgLoaderProtocol.h"
-
-#import <AVFoundation/AVPlayer.h>
-#import <AVKit/AVPlayerViewController.h>
-#import <AVFoundation/AVPlayerItem.h>
-
-@interface WXPlayer : NSObject
-
-@end
-
-@implementation WXPlayer
-
-@end
-
-@interface WXVideoView()
-
-@property (nonatomic, strong) UIViewController *playerViewController;
-@property (nonatomic, strong) AVPlayerItem *playerItem;
-@property (nonatomic, strong) WXSDKInstance *weexSDKInstance;
-@property (nonatomic, strong) UIImageView *posterImageView;
-@property (nonatomic, strong) id<WXImageOperationProtocol> imageOperation;
-@property (nonatomic, assign) BOOL playerDidPlayed;
-
-@end
-
-@implementation WXVideoView
-
-- (id)init
-{
-    if (self = [super init]) {
-        _playerViewController = [AVPlayerViewController new];
-        
-        [self addSubview:_playerViewController.view];
-    }
-    return self;
-}
-
-- (void)dealloc
-{
-    _weexSDKInstance = nil;
-    AVPlayerViewController *AVVC = (AVPlayerViewController*)_playerViewController;
-    [AVVC.player removeObserver:self forKeyPath:@"rate"];
-    [_playerItem removeObserver:self forKeyPath:@"status"];
-    
-    [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object: _playerItem];
-}
-
-- (void)observeValueForKeyPath:(NSString *)keyPath
-                      ofObject:(id)object
-                        change:(NSDictionary<NSString *,id> *)change
-                       context:(void *)context
-{
-    if ([keyPath isEqualToString:@"rate"]) {
-        float rate = [change[NSKeyValueChangeNewKey] floatValue];
-        if (rate == 0.0) {
-            if (_playbackStateChanged)
-                _playbackStateChanged(WXPlaybackStatePaused);
-        } else if (rate == 1.0) {
-            if (_playbackStateChanged)
-                _playbackStateChanged(WXPlaybackStatePlaying);
-        } else if (rate == -1.0) {
-            // Reverse playback
-        }
-    } else if ([keyPath isEqualToString:@"status"]) {
-        NSInteger status = [change[NSKeyValueChangeNewKey] integerValue];
-        if (status == AVPlayerStatusFailed) {
-            if (_playbackStateChanged)
-                _playbackStateChanged(WXPlaybackStateFailed);
-        }
-    }
-}
-
-- (void)setFrame:(CGRect)frame
-{
-    [super setFrame:frame];
-    
-    CGRect videoFrame = frame;
-    videoFrame.origin.x = 0;
-    videoFrame.origin.y = 0;
-    [_playerViewController.view setFrame:videoFrame];
-}
-
-- (void)setURL:(NSURL *)URL
-{
-    NSString *newURL = [URL.absoluteString copy];
-    WX_REWRITE_URL(URL.absoluteString, WXResourceTypeVideo, self.weexSDKInstance)
-    
-    if (!newURL) {
-        return;
-    }
-    NSURL *videoNewURL = [NSURL URLWithString:newURL];
-    AVPlayerViewController *AVVC = (AVPlayerViewController*)_playerViewController;
-    if (AVVC.player && _playerItem) {
-        [_playerItem removeObserver:self forKeyPath:@"status"];
-        [AVVC.player removeObserver:self forKeyPath:@"rate"];
-        [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object: _playerItem];
-    }
-    _playerItem = [[AVPlayerItem alloc] initWithURL:videoNewURL];
-    AVPlayer *player = [AVPlayer playerWithPlayerItem: _playerItem];
-    AVVC.player = player;
-    
-    [player addObserver:self
-             forKeyPath:@"rate"
-                options:NSKeyValueObservingOptionNew
-                context:NULL];
-    
-    [_playerItem addObserver:self
-                  forKeyPath:@"status"
-                     options:NSKeyValueObservingOptionNew
-                     context:NULL];
-    
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playFinish) name:AVPlayerItemDidPlayToEndTimeNotification object: _playerItem];
-}
-
-- (void)setPosterURL:(NSURL *)posterURL
-{
-    if (!posterURL) {
-        return;
-    }
-    
-    [self cancelImage];
-    __weak typeof(self) weakSelf = self;
-    weakSelf.imageOperation = [[self imageLoader] downloadImageWithURL:posterURL.absoluteString imageFrame:self.posterImageView.frame
-                                                              userInfo:@{@"instanceId":self.weexSDKInstance.instanceId}
-                                                             completed:^(UIImage *image, NSError *error, BOOL finished)
-    {
-        dispatch_async(dispatch_get_main_queue(), ^{
-            __strong typeof(self) strongSelf = weakSelf;
-            if (!error) {
-                strongSelf.posterImageView.image = image;
-                strongSelf.posterImageView.hidden = strongSelf.playerDidPlayed;
-            }
-        });
-    }];
-}
-
-- (void)setControlShow:(BOOL)showControl
-{
-    AVPlayerViewController *AVVC = (AVPlayerViewController*)_playerViewController;
-    AVVC.showsPlaybackControls = showControl;
-}
-
-- (void)playFinish
-{
-    if (_playbackStateChanged)
-        _playbackStateChanged(WXPlaybackStatePlayFinish);
-    
-    AVPlayerViewController *AVVC = (AVPlayerViewController*)_playerViewController;
-    [[AVVC player] seekToTime:CMTimeMultiply([AVVC player].currentTime, 0)];
-}
-
-- (void)play
-{
-    _posterImageView.hidden = YES;
-    AVPlayerViewController *AVVC = (AVPlayerViewController*)_playerViewController;
-    [[AVVC player] play];
-}
-
-- (void)pause
-{
-    AVPlayerViewController *AVVC = (AVPlayerViewController*)_playerViewController;
-    [[AVVC player] pause];
-}
-
-- (void)posterTapHandler {
-    if (self.posterClickHandle) {
-        self.posterClickHandle();
-    }
-}
-
-- (UIImageView *)posterImageView {
-    if (!_posterImageView) {
-        _posterImageView = [[UIImageView alloc] initWithFrame:self.bounds];
-        _posterImageView.userInteractionEnabled = YES;
-        [_posterImageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(posterTapHandler)]];
-        _posterImageView.hidden = YES;
-        [self addSubview:_posterImageView];
-        [self bringSubviewToFront:_posterImageView];
-    }
-    return _posterImageView;
-}
-
-- (id<WXImgLoaderProtocol>)imageLoader
-{
-    static id<WXImgLoaderProtocol> imageLoader;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        imageLoader = [WXHandlerFactory handlerForProtocol:@protocol(WXImgLoaderProtocol)];
-    });
-    return imageLoader;
-}
-
-- (void)cancelImage
-{
-    [_imageOperation cancel];
-    _imageOperation = nil;
-}
-
-@end
-
-@interface WXVideoComponent()
-
-@property (nonatomic, weak) WXVideoView *videoView;
-@property (nonatomic, strong) NSURL *videoURL;
-@property (nonatomic, strong) NSURL *posterURL;
-@property (nonatomic) BOOL autoPlay;
-@property (nonatomic) BOOL playStatus;
-@property (nonatomic) BOOL showControl;
-
-@end
-
-@implementation WXVideoComponent
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance {
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        if (attributes[@"src"]) {
-            _videoURL = [NSURL URLWithString: attributes[@"src"]];
-        }
-        if (attributes[@"autoPlay"]) {
-            _autoPlay = [attributes[@"autoPlay"] boolValue];
-        }
-        if ([attributes[@"playStatus"] compare:@"play" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
-            _playStatus = true;
-        }
-        if ([attributes[@"playStatus"] compare:@"pause" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
-            _playStatus = false;
-        }
-        if (attributes[@"poster"]) {
-            _posterURL = [NSURL URLWithString: attributes[@"poster"]];
-        }
-        if (attributes[@"controls"]) {
-            _showControl = ![attributes[@"controls"] isEqualToString:@"nocontrols"];
-        }
-    }
-    return self;
-}
-
-- (UIView *)loadView
-{
-    WXVideoView* videoView = [[WXVideoView alloc] init];
-    videoView.weexSDKInstance = self.weexInstance;
-    return videoView;
-}
-
-- (void)viewDidLoad
-{
-    _videoView = (WXVideoView *)self.view;
-    _videoView.layer.mask = [self drawBorderRadiusMaskLayer:_videoView.bounds];
-    [_videoView setURL:_videoURL];
-    [_videoView setPosterURL:_posterURL];
-    [_videoView setControlShow:_showControl];
-    
-    __weak __typeof__(self) weakSelf = self;
-    _videoView.posterClickHandle = ^{
-        [weakSelf.videoView play];
-    };
-    _videoView.playbackStateChanged = ^(WXPlaybackState state) {
-        NSString *eventType = nil;
-        switch (state) {
-            case WXPlaybackStatePlaying:
-                eventType = @"start";
-                break;
-            case WXPlaybackStatePaused:
-                eventType = @"pause";
-                break;
-            case WXPlaybackStatePlayFinish:
-                eventType = @"finish";
-                break;
-            case WXPlaybackStateFailed:
-                eventType = @"fail";
-                break;
-                
-            default:
-                NSCAssert(NO, @"");
-                break;
-        }
-        [weakSelf fireEvent:eventType params:nil];
-    };
-    if (_playStatus) {
-        [_videoView play];
-    } else {
-        [_videoView pause];
-    }
-    if (_autoPlay) {
-        [_videoView play];
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"src"]) {
-        _videoURL = [NSURL URLWithString: attributes[@"src"]];
-        [_videoView setURL:_videoURL];
-    }
-    if (attributes[@"autoPlay"]) {
-        _autoPlay = [attributes[@"autoPlay"] boolValue];
-        [_videoView play];
-    }
-    if ([attributes[@"playStatus"] compare:@"play" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
-        _playStatus = true;
-        [_videoView play];
-    }
-    if ([attributes[@"playStatus"] compare:@"pause" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
-        _playStatus = false;
-        [_videoView pause];
-    }
-    if (attributes[@"poster"]) {
-        _posterURL = [NSURL URLWithString: attributes[@"poster"]];
-        [_videoView setPosterURL:_posterURL];
-    }
-    if (attributes[@"controls"]) {
-        _showControl = ![attributes[@"controls"] isEqualToString:@"nocontrols"];
-        [_videoView setControlShow:_showControl];
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h
deleted file mode 100644
index 97800a6..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXWebComponent : WXComponent<UIWebViewDelegate>
-
-- (void)notifyWebview:(NSDictionary *) data;
-
-- (void)postMessage:(NSDictionary *) data;
-
-- (void)reload;
-
-- (void)goBack;
-
-- (void)goForward;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
deleted file mode 100644
index 35c95fa..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXWebComponent.h"
-#import "WXComponent_internal.h"
-#import "WXUtility.h"
-#import "WXHandlerFactory.h"
-#import "WXURLRewriteProtocol.h"
-#import "WXSDKEngine.h"
-
-#import <JavaScriptCore/JavaScriptCore.h>
-
-@interface WXWebView : UIWebView
-
-@end
-
-@implementation WXWebView
-
-- (void)dealloc
-{
-    if (self) {
-//        self.delegate = nil;
-    }
-}
-
-@end
-
-@interface WXWebComponent ()
-
-@property (nonatomic, strong) JSContext *jsContext;
-
-@property (nonatomic, strong) WXWebView *webview;
-
-@property (nonatomic, strong) NSString *url;
-
-@property (nonatomic, strong) NSString *source;
-
-// save source during this initialization
-@property (nonatomic, strong) NSString *inInitsource;
-
-@property (nonatomic, assign) BOOL startLoadEvent;
-
-@property (nonatomic, assign) BOOL finishLoadEvent;
-
-@property (nonatomic, assign) BOOL failLoadEvent;
-
-@property (nonatomic, assign) BOOL notifyEvent;
-
-@end
-
-@implementation WXWebComponent
-
-WX_EXPORT_METHOD(@selector(postMessage:))
-WX_EXPORT_METHOD(@selector(goBack))
-WX_EXPORT_METHOD(@selector(reload))
-WX_EXPORT_METHOD(@selector(goForward))
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        self.url = attributes[@"src"];
-        
-        if(attributes[@"source"]){
-            self.inInitsource = attributes[@"source"];
-        }
-        
-    }
-    return self;
-}
-
-- (UIView *)loadView
-{
-    return [[WXWebView alloc] init];
-}
-
-- (void)viewDidLoad
-{
-    _webview = (WXWebView *)self.view;
-    _webview.delegate = self;
-    _webview.allowsInlineMediaPlayback = YES;
-    _webview.scalesPageToFit = YES;
-    [_webview setBackgroundColor:[UIColor clearColor]];
-    _webview.opaque = NO;
-    _jsContext = [_webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
-    __weak typeof(self) weakSelf = self;
-
-    // This method will be abandoned slowly.
-    _jsContext[@"$notifyWeex"] = ^(JSValue *data) {
-        if (weakSelf.notifyEvent) {
-            [weakSelf fireEvent:@"notify" params:[data toDictionary]];
-        }
-    };
-
-    //Weex catch postMessage event from web
-    _jsContext[@"postMessage"] = ^() {
-
-        NSArray *args = [JSContext currentArguments];
-
-        if (args && args.count < 2) {
-            return;
-        }
-
-        NSDictionary *data = [args[0] toDictionary];
-        NSString *origin = [args[1] toString];
-
-        if (data == nil) {
-            return;
-        }
-
-        NSDictionary *initDic = @{ @"type" : @"message",
-                                   @"data" : data,
-                                   @"origin" : origin
-        };
-
-        [weakSelf fireEvent:@"message" params:initDic];
-    };
-
-    self.source = _inInitsource;
-    if (_url) {
-        [self loadURL:_url];
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"src"]) {
-        self.url = attributes[@"src"];
-    }
-
-    if (attributes[@"source"]) {
-        self.inInitsource = attributes[@"source"];
-        self.source = self.inInitsource;
-    }
-}
-
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"pagestart"]) {
-        _startLoadEvent = YES;
-    }
-    else if ([eventName isEqualToString:@"pagefinish"]) {
-        _finishLoadEvent = YES;
-    }
-    else if ([eventName isEqualToString:@"error"]) {
-        _failLoadEvent = YES;
-    }
-}
-
-- (void)setUrl:(NSString *)url
-{
-    NSString* newURL = [url copy];
-    WX_REWRITE_URL(url, WXResourceTypeLink, self.weexInstance)
-    if (!newURL) {
-        return;
-    }
-    
-    if (![newURL isEqualToString:_url]) {
-        _url = newURL;
-        if (_url) {
-            [self loadURL:_url];
-        }
-    }
-}
-
-- (void) setSource:(NSString *)source
-{
-    NSString *newSource=[source copy];
-    if(!newSource || _url){
-        return;
-    }
-    if(![newSource isEqualToString:_source]){
-        _source=newSource;
-        if(_source){
-            [_webview loadHTMLString:_source baseURL:nil];
-        }
-    }
-    
-}
-
-- (void)loadURL:(NSString *)url
-{
-    if (self.webview) {
-        NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:url]];
-        [self.webview loadRequest:request];
-    }
-}
-
-- (void)reload
-{
-    [self.webview reload];
-}
-
-- (void)goBack
-{
-    if ([self.webview canGoBack]) {
-        [self.webview goBack];
-    }
-}
-
-- (void)goForward
-{
-    if ([self.webview canGoForward]) {
-        [self.webview goForward];
-    }
-}
-
-// This method will be abandoned slowly, use postMessage
-- (void)notifyWebview:(NSDictionary *) data
-{
-    NSString *json = [WXUtility JSONString:data];
-    NSString *code = [NSString stringWithFormat:@"(function(){var evt=null;var data=%@;if(typeof CustomEvent==='function'){evt=new CustomEvent('notify',{detail:data})}else{evt=document.createEvent('CustomEvent');evt.initCustomEvent('notify',true,true,data)}document.dispatchEvent(evt)}())", json];
-    [_jsContext evaluateScript:code];
-}
-
-// Weex postMessage to web
-- (void)postMessage:(NSDictionary *)data {
-    WXSDKInstance *instance = [WXSDKEngine topInstance];
-
-    NSString *bundleUrlOrigin = @"";
-
-    if (instance.pageName) {
-        NSString *bundleUrl = [instance.scriptURL absoluteString];
-        NSURL *url = [NSURL URLWithString:bundleUrl];
-        bundleUrlOrigin = [NSString stringWithFormat:@"%@://%@%@", url.scheme, url.host, url.port ? [NSString stringWithFormat:@":%@", url.port] : @""];
-    }
-
-    NSDictionary *initDic = @{
-        @"type" : @"message",
-        @"data" : data,
-        @"origin" : bundleUrlOrigin
-    };
-
-    NSString *json = [WXUtility JSONString:initDic];
-
-    NSString *code = [NSString stringWithFormat:@"(function (){window.dispatchEvent(new MessageEvent('message', %@));}())", json];
-    [_jsContext evaluateScript:code];
-}
-
-#pragma mark Webview Delegate
-
-- (NSMutableDictionary<NSString *, id> *)baseInfo
-{
-    NSMutableDictionary<NSString *, id> *info = [NSMutableDictionary new];
-    [info setObject:self.webview.request.URL.absoluteString ?: @"" forKey:@"url"];
-    [info setObject:[self.webview stringByEvaluatingJavaScriptFromString:@"document.title"] ?: @"" forKey:@"title"];
-    [info setObject:@(self.webview.canGoBack) forKey:@"canGoBack"];
-    [info setObject:@(self.webview.canGoForward) forKey:@"canGoForward"];
-    return info;
-}
-
-- (void)webViewDidStartLoad:(UIWebView *)webView
-{
-    
-}
-
-- (void)webViewDidFinishLoad:(UIWebView *)webView
-{
-    if (_finishLoadEvent) {
-        NSDictionary *data = [self baseInfo];
-        [self fireEvent:@"pagefinish" params:data domChanges:@{@"attrs": @{@"src":self.webview.request.URL.absoluteString}}];
-    }
-}
-
-- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
-{
-    if (_failLoadEvent) {
-        NSMutableDictionary *data = [self baseInfo];
-        [data setObject:[error localizedDescription] forKey:@"errorMsg"];
-        [data setObject:[NSString stringWithFormat:@"%ld", (long)error.code] forKey:@"errorCode"];
-        
-        NSString * urlString = error.userInfo[NSURLErrorFailingURLStringErrorKey];
-        if (urlString) {
-            // webview.request may not be the real error URL, must get from error.userInfo
-            [data setObject:urlString forKey:@"url"];
-            if (![urlString hasPrefix:@"http"]) {
-                return;
-            }
-        }
-        [self fireEvent:@"error" params:data];
-    }
-}
-
-- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
-{
-    if (_startLoadEvent) {
-        NSMutableDictionary<NSString *, id> *data = [NSMutableDictionary new];
-        [data setObject:request.URL.absoluteString ?:@"" forKey:@"url"];
-        [self fireEvent:@"pagestart" params:data];
-    }
-    return YES;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h
deleted file mode 100644
index 221c6c8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-/**
- * The WXBaseViewController class provides the infrastructure for managing the weex view in your app. It is 
- * responsible for creating a weex instance or rendering the weex view, for observing the lifecycle of the
- * view such as "appear" or "disappear"、"foreground" or "background" etc. You can initialize this controller by
- * special bundle URL.
- */
-
-@interface WXBaseViewController : UIViewController<UIGestureRecognizerDelegate>
-
-/**
- * @abstract initializes the viewcontroller with bundle url.
- *
- * @param sourceURL The url of bundle rendered to a weex view.
- *
- * @return a object the class of WXBaseViewController.
- *
- */
-- (instancetype)initWithSourceURL:(NSURL *)sourceURL;
-
-/**
- * @abstract refreshes the weex view in controller.
- */
-- (void)refreshWeex;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
deleted file mode 100644
index 45847c6..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBaseViewController.h"
-#import "WXRootViewController.h"
-#import "WXSDKInstance.h"
-#import "WXSDKInstance_private.h"
-#import "WXSDKEngine.h"
-#import "WXSDKManager.h"
-#import "WXUtility.h"
-#import "WXPrerenderManager.h"
-#import "WXMonitor.h"
-
-@interface WXBaseViewController ()
-
-@property (nonatomic, strong) WXSDKInstance *instance;
-@property (nonatomic, strong) UIView *weexView;
-@property (nonatomic, strong) NSURL *sourceURL;
-
-@end
-
-@implementation WXBaseViewController
-
-- (void)dealloc
-{
-    [_instance destroyInstance];
-    [self _removeObservers];
-}
-
-- (instancetype)initWithSourceURL:(NSURL *)sourceURL
-{
-    if ((self = [super init])) {
-        self.sourceURL = sourceURL;
-        self.hidesBottomBarWhenPushed = YES;
-        
-        [self _addObservers];
-    }
-    return self;
-}
-
-/**
- *  After setting the navbar hidden status , this function will be called automatically. In this function, we
- *  set the height of mainView equal to screen height, because there is something wrong with the layout of
- *  page content.
- */
-
-- (void)viewWillLayoutSubviews
-{
-    [super viewWillLayoutSubviews];
-    
-    if ([self.navigationController isKindOfClass:[WXRootViewController class]]) {
-        CGRect frame = self.view.frame;
-        frame.origin.y = 0;
-        frame.size.height = [UIScreen mainScreen].bounds.size.height;
-        self.view.frame = frame;
-    }    
-}
-
-/**
- *  We assume that the initial state of viewController's navigtionBar is hidden.  By setting the attribute of
- *  'dataRole' equal to 'navbar', the navigationBar hidden will be NO.
- */
-- (void)viewDidLoad
-{
-    [super viewDidLoad];
-    self.view.backgroundColor = [UIColor whiteColor];
-    self.automaticallyAdjustsScrollViewInsets = NO;
-    [self _renderWithURL:_sourceURL];
-    if ([self.navigationController isKindOfClass:[WXRootViewController class]]) {
-        [self.navigationController setNavigationBarHidden:YES animated:YES];
-    }
-
-}
-
-- (void)viewDidAppear:(BOOL)animated
-{
-    [super viewDidAppear:animated];
-    [self _updateInstanceState:WeexInstanceAppear];
-    
-}
-
-- (void)viewDidDisappear:(BOOL)animated
-{
-    [super viewDidDisappear:animated];
-    [self _updateInstanceState:WeexInstanceDisappear];
-}
-
-- (void)didReceiveMemoryWarning
-{
-    [super didReceiveMemoryWarning];
-    [self _updateInstanceState:WeexInstanceMemoryWarning];
-    // Dispose of any resources that can be recreated.
-}
-
-- (void)refreshWeex
-{
-    [self _renderWithURL:_sourceURL];
-}
-
-
-- (void)addEdgePop
-{
-    self.navigationController.interactivePopGestureRecognizer.delegate = self;
-}
-
-- (void)_renderWithURL:(NSURL *)sourceURL
-{
-    if (!sourceURL) {
-        return;
-    }
-    
-    [_instance destroyInstance];
-    _instance = [[WXSDKInstance alloc] init];
-    if([WXPrerenderManager isTaskReady:[self.sourceURL absoluteString]]){
-        _instance = [WXPrerenderManager instanceFromUrl:self.sourceURL.absoluteString];
-    }
-    _instance.frame = CGRectMake(0.0f, 0.0f, self.view.bounds.size.width, self.view.bounds.size.height);
-    _instance.pageObject = self;
-    _instance.pageName = sourceURL.absoluteString;
-    _instance.viewController = self;
-    
-    NSString *newURL = nil;
-    
-    if ([sourceURL.absoluteString rangeOfString:@"?"].location != NSNotFound) {
-        newURL = [NSString stringWithFormat:@"%@&random=%d", sourceURL.absoluteString, arc4random()];
-    } else {
-        newURL = [NSString stringWithFormat:@"%@?random=%d", sourceURL.absoluteString, arc4random()];
-    }
-
-    __weak typeof(self) weakSelf = self;
-    _instance.onCreate = ^(UIView *view) {
-        [weakSelf.weexView removeFromSuperview];
-        weakSelf.weexView = view;
-        [weakSelf.view addSubview:weakSelf.weexView];
-    };
-    
-    _instance.onFailed = ^(NSError *error) {
-        
-    };
-    
-    _instance.renderFinish = ^(UIView *view) {
-        [weakSelf _updateInstanceState:WeexInstanceAppear];
-    };
-
-    [_instance renderWithURL:[NSURL URLWithString:newURL] options:@{@"bundleUrl":sourceURL.absoluteString} data:nil];
-
-    if([WXPrerenderManager isTaskReady:[self.sourceURL absoluteString]]){
-        WX_MONITOR_INSTANCE_PERF_START(WXPTJSDownload, _instance);
-        WX_MONITOR_INSTANCE_PERF_END(WXPTJSDownload, _instance);
-        WX_MONITOR_INSTANCE_PERF_START(WXPTFirstScreenRender, _instance);
-        WX_MONITOR_INSTANCE_PERF_START(WXPTAllRender, _instance);
-        [WXPrerenderManager renderFromCache:[self.sourceURL absoluteString]];
-        return;
-    }
-}
-
-- (void)_updateInstanceState:(WXState)state
-{
-    if (_instance && _instance.state != state) {
-        _instance.state = state;
-        
-        if (state == WeexInstanceAppear) {
-            [[WXSDKManager bridgeMgr] fireEvent:_instance.instanceId ref:WX_SDK_ROOT_REF type:@"viewappear" params:nil domChanges:nil];
-        } else if (state == WeexInstanceDisappear) {
-            [[WXSDKManager bridgeMgr] fireEvent:_instance.instanceId ref:WX_SDK_ROOT_REF type:@"viewdisappear" params:nil domChanges:nil];
-        }
-    }
-}
-
-- (void)_appStateDidChange:(NSNotification *)notify
-{
-    if ([notify.name isEqualToString:@"UIApplicationDidBecomeActiveNotification"]) {
-        [self _updateInstanceState:WeexInstanceForeground];
-    } else if([notify.name isEqualToString:@"UIApplicationDidEnterBackgroundNotification"]) {
-        [self _updateInstanceState:WeexInstanceBackground]; ;
-    }
-}
-
-- (void)_addObservers
-{
-    for (NSString *name in @[UIApplicationDidBecomeActiveNotification,
-                             UIApplicationDidEnterBackgroundNotification]) {
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(_appStateDidChange:)
-                                                     name:name
-                                                   object:nil];
-    }
-}
-
-- (void)_removeObservers
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h
deleted file mode 100644
index 6fb6cb8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-/**
- * The WXRootViewController class inherited from UINavigationController class which implements a specialized
- * view controller that manages the navigation of hierarchical content. Developing an iOS application, you
- * need a series of customer pages which will be render by weex bundle. Sometimes, these pages are embedded in
- * viewcontroller. This navigation controller makes it possible to present your page efficiently and makes it
- * easier for the user to navigate that content.
- */
-
-@interface WXRootViewController : UINavigationController
-
-/**
- * @abstract initialize the RootViewController with bundle url.
- *
- * @param sourceURL The bundle url which can be render to a weex view.
- *
- * @return a object the class of WXRootViewController.
- *
- * @discussion initialize this controller in function 'application:didFinishLaunchingWithOptions', and make it as rootViewController of window. In the
- * weex application, all page content can be managed by the navigation, such as push or pop.
- */
-- (id)initWithSourceURL:(NSURL *)sourceURL;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.m
deleted file mode 100644
index 477e9bb..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.m
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRootViewController.h"
-#import "WXBaseViewController.h"
-#import "WXDefine.h"
-
-typedef void(^OperationBlock)(void);
-
-@interface WXRootViewController() <UIGestureRecognizerDelegate>
-
-@property (nonatomic, strong) NSMutableArray *operationArray;
-@property (nonatomic, assign) BOOL operationInProcess;
-
-@end
-
-@implementation WXRootViewController
-
-
-- (void)viewDidLoad
-{
-    self.interactivePopGestureRecognizer.delegate = self;
-}
-
-- (id)initWithSourceURL:(NSURL *)sourceURL
-{
-    WXBaseViewController *baseViewController = [[WXBaseViewController alloc]initWithSourceURL:sourceURL];
-    
-    return [super initWithRootViewController:baseViewController];
-}
-
-//reduced pop/push animation in iOS 7
-- (UIViewController *)popViewControllerAnimated:(BOOL)animated
-{
-    return [super popViewControllerAnimated:animated];
-}
-
-- (NSArray<UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
-{
-    return [super popToViewController:viewController animated:animated];
-}
-
-- (NSArray<UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated
-{
-    return [super popToRootViewControllerAnimated:animated];
-}
-
-- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
-{
-    return [super pushViewController:viewController animated:animated];
-}
-
-- (void)addOperationBlock:(OperationBlock)operation
-{
-    
-    if (self.operationInProcess && [self.operationArray count]) {
-        [self.operationArray addObject:[operation copy]];
-    } else {
-        _operationInProcess = YES;
-        operation();
-    }
-}
-
-#pragma mark- UIGestureRecognizerDelegate
-
-- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
-{
-    if ([self.viewControllers count] == 1) {
-        return NO;
-    }
-    return YES;
-}
-
-- (NSMutableArray *)operationArray
-{
-    if (nil == _operationArray) {
-        _operationArray = [[NSMutableArray alloc] init];
-    }
-    
-    return _operationArray;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
deleted file mode 100644
index f2e0430..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXDebugTool : NSObject<WXModuleProtocol>
-
-+ (instancetype)sharedInstance;
-
-//+ (void)showFPS;
-
-+ (void)setDebug:(BOOL)isDebug;
-
-+ (BOOL)isDebug;
-
-+ (void)setDevToolDebug:(BOOL)isDevToolDebug;
-
-+ (BOOL)isDevToolDebug;
-
-+ (void)setReplacedBundleJS:(NSURL*)url;
-
-+ (NSString*)getReplacedBundleJS;
-
-+ (void)setReplacedJSFramework:(NSURL*)url;
-
-+ (NSString*)getReplacedJSFramework;
-
-+ (BOOL) cacheJsService: (NSString *)name withScript: (NSString *)script withOptions: (NSDictionary *) options;
-
-+ (BOOL) removeCacheJsService: (NSString *)name;
-
-+ (NSDictionary *) jsServiceCache;
-
-+ (BOOL)isRemoteTracing;
-
-+ (void)setRemoteTracing:(BOOL)isRemoteTracing;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
deleted file mode 100644
index 5ea2a24..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXDebugTool.h"
-//#import "WXFPSLabel.h"
-#import "WXHandlerFactory.h"
-#import "WXNetworkProtocol.h"
-#import "WXUtility.h"
-#import "WXSDKManager.h"
-#import "WXSDKEngine.h"
-#import "WXResourceRequest.h"
-#import "WXResourceResponse.h"
-#import "WXResourceLoader.h"
-
-static BOOL WXIsDebug;
-static BOOL WXIsDevToolDebug;
-static BOOL WXIsRemoteTracing;
-static NSString* WXDebugrepBundleJS;
-static NSString* WXDebugrepJSFramework;
-
-
-@interface WXDebugTool ()
-// store service
-@property (nonatomic, strong) NSMutableDictionary *jsServiceDic;
-
-@end
-
-@implementation WXDebugTool
-
-+ (instancetype)sharedInstance {
-    static id _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-    });
-    return _sharedInstance;
-}
-
-- (instancetype)init
-{
-    if(self = [super init]){
-        _jsServiceDic = [NSMutableDictionary dictionary];
-    }
-    return self;
-}
-
-//+ (void)showFPS
-//{
-//    UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
-//    WXFPSLabel *label = [[WXFPSLabel alloc] initWithFrame:CGRectMake(window.frame.size.width-135, window.frame.size.height-35, 120, 20)];
-//    label.layer.zPosition = MAXFLOAT;
-//    [window addSubview:label];
-//}
-
-+ (void)setDebug:(BOOL)isDebug
-{
-    WXIsDebug = isDebug;
-}
-
-+ (BOOL)isDebug
-{
-    return WXIsDebug;
-}
-
-+ (void)setDevToolDebug:(BOOL)isDevToolDebug {
-    WXIsDevToolDebug = isDevToolDebug;
-}
-
-+ (BOOL)isRemoteTracing
-{
-    return WXIsRemoteTracing;
-}
-
-+ (void)setRemoteTracing:(BOOL)isRemoteTracing {
-    WXIsRemoteTracing = isRemoteTracing;
-}
-
-+ (BOOL)isDevToolDebug {
-    return WXIsDevToolDebug;
-}
-
-+ (void)setReplacedBundleJS:(NSURL*)url{
-    [self getData:url key:@"bundlejs"];
-}
-
-+ (NSString*)getReplacedBundleJS{
-    return WXDebugrepBundleJS;
-}
-
-+ (void)setReplacedJSFramework:(NSURL*)url{
-    [self getData:url key:@"jsframework"];
-}
-
-+ (NSString*)getReplacedJSFramework{
-    
-    return WXDebugrepJSFramework;
-}
-
-+ (void)getData:(NSURL*)url key:(NSString*)key{
-    void(^scriptLoadFinish)(NSString*, NSString*) = ^(NSString* key, NSString* script){
-        if ([key isEqualToString:@"jsframework"]) {
-            WXDebugrepJSFramework = script;
-            [WXSDKEngine restartWithScript:script];
-        }else {
-            WXDebugrepBundleJS = script;
-        }
-    };
-    if ([url isFileURL]) {
-        // File URL
-        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-            NSString *path = [url path];
-            NSData *scriptData = [[NSFileManager defaultManager] contentsAtPath:path];
-            NSString *script = [[NSString alloc] initWithData:scriptData encoding:NSUTF8StringEncoding];
-            if (!script || script.length <= 0) {
-                NSString *errorDesc = [NSString stringWithFormat:@"File read error at url: %@", url];
-                WXLogError(@"%@", errorDesc);
-            }
-            scriptLoadFinish(key, script);
-        });
-    } else {
-        // HTTP/HTTPS URL
-        WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeMainBundle referrer:nil cachePolicy:NSURLRequestUseProtocolCachePolicy];
-        request.userAgent = [WXUtility userAgent];
-        WXResourceLoader *loader = [[WXResourceLoader alloc] initWithRequest:request];
-        
-        loader.onFinished = ^(const WXResourceResponse * response, NSData *data) {
-            if ([response isKindOfClass:[NSHTTPURLResponse class]] && ((NSHTTPURLResponse *)response).statusCode != 200) {
-                __unused NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN
-                                                              code:((NSHTTPURLResponse *)response).statusCode
-                                                          userInfo:@{@"message":@"status code error."}];
-                
-                return ;
-            }
-            
-            NSString * script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-            scriptLoadFinish(key, script);
-        };
-        
-        [loader start];
-    }
-}
-
-+ (BOOL) cacheJsService: (NSString *)name withScript: (NSString *)script withOptions: (NSDictionary *) options
-{
-    if(WXIsDebug) {
-        [[[self sharedInstance] jsServiceDic] setObject:@{ @"name": name, @"script": script, @"options": options } forKey:name];
-        return YES;
-    }else {
-        return NO;
-    }
-}
-
-+ (BOOL) removeCacheJsService: (NSString *)name
-{
-    if(WXIsDebug) {
-        [[[self sharedInstance] jsServiceDic] removeObjectForKey:name];
-        return YES;
-    }else {
-        return NO;
-    }
-}
-
-+ (NSDictionary *) jsServiceCache
-{
-    return [NSDictionary dictionaryWithDictionary:[[self sharedInstance] jsServiceDic]];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h
deleted file mode 100644
index 940207e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-@interface UIBezierPath (Weex)
-
-+ (instancetype)wx_bezierPathWithRoundedRect:(CGRect)rect
-                                     topLeft:(CGFloat)topLeftRadius
-                                    topRight:(CGFloat)topRightRadius
-                                  bottomLeft:(CGFloat)bottomLeftRadius
-                                 bottomRight:(CGFloat)bottomRightRadius;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.m
deleted file mode 100644
index 7a74c3f..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.m
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "UIBezierPath+Weex.h"
-#import "WXUtility.h"
-
-@implementation UIBezierPath (Weex)
-
-// Approximation of control point positions on a bezier to simulate a quarter of a circle.
-// This is 1-kappa, where kappa = 4 * (sqrt(2) - 1) / 3
-static const float kCircleControlPoint = 0.447715;
-
-+ (instancetype)wx_bezierPathWithRoundedRect:(CGRect)rect
-                                     topLeft:(CGFloat)topLeftRadius
-                                    topRight:(CGFloat)topRightRadius
-                                  bottomLeft:(CGFloat)bottomLeftRadius
-                                 bottomRight:(CGFloat)bottomRightRadius
-{
-    UIBezierPath *path = [UIBezierPath bezierPath];
-    if(isnan(topLeftRadius) || isnan(topRightRadius) || isnan(bottomLeftRadius) || isnan(bottomRightRadius)) {
-        return path;
-    }
-    if (![WXUtility isValidPoint:rect.origin] || isnan(rect.size.height) || isnan(rect.size.width)) {
-        return path;
-    }
-    CGPoint topLeftPoint = CGPointMake(rect.origin.x + topLeftRadius, rect.origin.y);
-    if (![WXUtility isValidPoint:topLeftPoint]) {
-        return path;
-    }
-    [path moveToPoint:topLeftPoint];
-    
-    // +------------------+
-    //  \\      top     //
-    //   \\+----------+//
-    CGPoint topRightPoint = CGPointMake(CGRectGetMaxX(rect) - topRightRadius, rect.origin.y);
-    if (![WXUtility isValidPoint:topRightPoint]) {
-        return path;
-    }
-    [path addLineToPoint:topRightPoint];
-    if (topRightRadius > 0) {
-        [path addCurveToPoint:CGPointMake(CGRectGetMaxX(rect), rect.origin.y + topRightRadius)
-                controlPoint1:CGPointMake(CGRectGetMaxX(rect) - topRightRadius * kCircleControlPoint, rect.origin.y)
-                controlPoint2:CGPointMake(CGRectGetMaxX(rect), rect.origin.y + topRightRadius * kCircleControlPoint)];
-    }
-    
-    // +------------------+
-    //  \\     top      //|
-    //   \\+----------+// |
-    //                |   |
-    //                |rig|
-    //                |ht |
-    //                |   |
-    //                 \\ |
-    //                  \\|
-    [path addLineToPoint:CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect) - bottomRightRadius)];
-    if (bottomRightRadius > 0) {
-        [path addCurveToPoint:CGPointMake(CGRectGetMaxX(rect) - bottomRightRadius, CGRectGetMaxY(rect))
-                controlPoint1:CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect) - bottomRightRadius * kCircleControlPoint)
-                controlPoint2:CGPointMake(CGRectGetMaxX(rect) - bottomRightRadius * kCircleControlPoint, CGRectGetMaxY(rect))];
-    }
-    
-    // +------------------+
-    //  \\     top      //|
-    //   \\+----------+// |
-    //                |   |
-    //                |rig|
-    //                |ht |
-    //                |   |
-    //   //+----------+\\ |
-    //  //    bottom    \\|
-    // +------------------+
-    [path addLineToPoint:CGPointMake(rect.origin.x + bottomLeftRadius, CGRectGetMaxY(rect))];
-    if (bottomLeftRadius > 0) {
-        [path addCurveToPoint:CGPointMake(rect.origin.x, CGRectGetMaxY(rect) - bottomLeftRadius)
-                controlPoint1:CGPointMake(rect.origin.x + bottomLeftRadius * kCircleControlPoint, CGRectGetMaxY(rect))
-                controlPoint2:CGPointMake(rect.origin.x, CGRectGetMaxY(rect) - bottomLeftRadius * kCircleControlPoint)];
-    }
-    
-    // +------------------+
-    // |\\     top      //|
-    // | \\+----------+// |
-    // |   |          |   |
-    // |lef|          |rig|
-    // |t  |          |ht |
-    // |   |          |   |
-    // | //+----------+\\ |
-    // |//    bottom    \\|
-    // +------------------+
-    [path addLineToPoint:CGPointMake(rect.origin.x, rect.origin.y + topLeftRadius)];
-    if (topLeftRadius > 0) {
-        [path addCurveToPoint:CGPointMake(rect.origin.x + topLeftRadius, rect.origin.y)
-                controlPoint1:CGPointMake(rect.origin.x, rect.origin.y + topLeftRadius * kCircleControlPoint)
-                controlPoint2:CGPointMake(rect.origin.x + topLeftRadius * kCircleControlPoint, rect.origin.y)];
-    }
-    
-    
-    return path;
-}
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h
deleted file mode 100644
index 04eb295..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXComponent.h"
-#import "WXBoxShadow.h"
-
-@interface WXComponent (BoxShadow)
-
-/**
- *  @abstract compare boxshadow
- *
- *  @return if not equal return NO, if equal return YES
- */
-- (BOOL)equalBoxShadow:(WXBoxShadow *_Nullable)boxShadow withBoxShadow:(WXBoxShadow *_Nullable)compareBoxShadow;
-
-/**
- *  @abstract config view Layer with boxshadow, lastboxshadow and originalBoxShadow
- *
- *  @param boxShadow the boxshadow will be set
- *
- *
- */
-- (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m
deleted file mode 100644
index fb0c0b3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent+BoxShadow.h"
-#import "WXBoxShadow.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXComponent_internal.h"
-#import "UIBezierPath+Weex.h"
-#import "WXRoundedRect.h"
-
-@implementation WXComponent (BoxShadow)
-
-
-- (WXBoxShadow *_Nullable)getViewBoxShadow:(UIView *_Nullable)view
-{
-    WXBoxShadow *boxShadow = [WXBoxShadow new];
-    boxShadow.shadowColor = [UIColor colorWithCGColor:view.layer.shadowColor];
-    boxShadow.shadowOffset = view.layer.shadowOffset;
-    boxShadow.shadowRadius = view.layer.shadowRadius;
-    boxShadow.shadowOpacity =  view.layer.shadowOpacity;
-    return boxShadow;
-}
-
-- (void)resetViewLayer
-{
-    UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds];
-    self.view.layer.masksToBounds = NO;
-    self.view.layer.shadowColor = _originalBoxShadow.shadowColor.CGColor;
-    self.view.layer.shadowOffset = _originalBoxShadow.shadowOffset;
-    self.view.layer.shadowRadius = _originalBoxShadow.shadowRadius;
-    self.view.layer.shadowOpacity = _originalBoxShadow.shadowOpacity;
-    self.view.layer.shadowPath = shadowPath.CGPath;
-    
-    
-    if (_lastBoxShadow.isInset) {
-        if (_lastBoxShadow.innerLayer) {
-            [_lastBoxShadow.innerLayer removeFromSuperlayer];
-        }
-    }
-}
-
-// if not equal return NO, if equal return YES
-- (BOOL)equalBoxShadow:(WXBoxShadow *_Nullable)boxShadow withBoxShadow:(WXBoxShadow *_Nullable)compareBoxShadow
-{
-    if(!compareBoxShadow && !boxShadow) {
-        return YES;
-    } else if (CGColorEqualToColor(boxShadow.shadowColor.CGColor,compareBoxShadow.shadowColor.CGColor) &&
-               CGSizeEqualToSize(boxShadow.shadowOffset,compareBoxShadow.shadowOffset) &&
-               WXFloatEqual(boxShadow.shadowRadius,compareBoxShadow.shadowRadius)&& (boxShadow.isInset == compareBoxShadow.isInset))
-    {
-        return YES;
-    }
-    return NO;
-    
-}
-
-- (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow
-{
-    if (!_originalBoxShadow) {
-        _originalBoxShadow = [self getViewBoxShadow:self.view];
-    }
-    if (!boxShadow && !_lastBoxShadow) {
-        return;
-    }
-    [self resetViewLayer];
-    if (!boxShadow) {
-        return;
-    }
-    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:self.view.bounds topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
-    // here is computed radii, do not use original style
-    WXRadii *radii = borderRect.radii;
-    CGFloat topLeft = radii.topLeft, topRight = radii.topRight, bottomLeft = radii.bottomLeft, bottomRight = radii.bottomRight;
-    UIBezierPath *shadowPath = [UIBezierPath wx_bezierPathWithRoundedRect:self.view.bounds topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
-    if (boxShadow.isInset) {
-        if (boxShadow.innerLayer) {
-            boxShadow.innerLayer.frame = self.view.bounds;
-            if (![boxShadow.innerLayer superlayer] ){
-                self.view.layer.masksToBounds = YES;
-                [self.view.layer addSublayer:boxShadow.innerLayer];
-            }
-        }
-    } else {
-        self.view.layer.masksToBounds = NO;
-        self.view.layer.shadowColor = boxShadow.shadowColor.CGColor;
-        self.view.layer.shadowOffset = boxShadow.shadowOffset;
-        self.view.layer.shadowRadius = boxShadow.shadowRadius;
-        self.view.layer.shadowOpacity = boxShadow.shadowOpacity;
-        self.view.layer.shadowPath = shadowPath.CGPath;
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h
deleted file mode 100644
index 864a9ac..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXComponent (Display)
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
deleted file mode 100644
index 04e7dda..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
+++ /dev/null
@@ -1,640 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent+Display.h"
-#import "WXComponent.h"
-#import "WXComponent_internal.h"
-#import "WXLayer.h"
-#import "WXAssert.h"
-#import "WXUtility.h"
-#import "WXDisplayQueue.h"
-#import "WXThreadSafeCounter.h"
-#import "UIBezierPath+Weex.h"
-#import "WXRoundedRect.h"
-#import "WXSDKInstance.h"
-
-#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-
-typedef NS_ENUM(NSInteger, WXComponentBorderRecord) {
-    WXComponentBorderRecordNone = 0,
-    WXComponentBorderRecordTop = 1,
-    WXComponentBorderRecordRight = 1 << 1,
-    WXComponentBorderRecordBottom = 1 << 2,
-    WXComponentBorderRecordLeft = 1 << 3,
-    WXComponentBorderRecordAll = WXComponentBorderRecordTop | WXComponentBorderRecordRight | WXComponentBorderRecordBottom | WXComponentBorderRecordLeft
-};
-
-@implementation WXComponent (Display)
-
-#pragma mark Public
-
-- (void)setNeedsDisplay
-{
-    WXAssertMainThread();
-    
-    if (_isCompositingChild) {
-        WXComponent *supercomponent = self.supercomponent;
-        while (supercomponent) {
-            if (supercomponent->_useCompositing) {
-                break;
-            }
-            supercomponent = supercomponent.supercomponent;
-        }
-        [supercomponent setNeedsDisplay];
-    } else if (!_layer || _layer.frame.size.width ==0 || _layer.frame.size.height == 0) {
-        return;
-    } else {
-        [_layer setNeedsDisplay];
-    }
-}
-
-- (BOOL)needsDrawRect
-{
-    if (_useCompositing || _isCompositingChild) {
-        return YES;
-    }
-    
-    if (![self _needsDrawBorder] && _lastBorderRecords == WXComponentBorderRecordNone) {
-        WXLogDebug(@"No need to draw border for %@", self.ref);
-        WXPerformBlockOnMainThread(^{
-            [self _resetNativeBorderRadius];
-        });
-        
-        return NO;
-    }
-    
-    return YES;
-}
-
-- (UIImage *)drawRect:(CGRect)rect
-{
-    CGSize size = rect.size;
-    if (size.width <= 0 || size.height <= 0) {
-        WXLogDebug(@"No need to draw border for %@, because width or height is zero", self.ref);
-        return nil;
-    }
-    
-    CGContextRef context = UIGraphicsGetCurrentContext();
-    [self _drawBorderWithContext:context size:size];
-
-    return nil;
-}
-
-- (void)didFinishDrawingLayer:(BOOL)success
-{
-    WXAssertMainThread();
-}
-
-#pragma mark Private
-
-- (WXDisplayBlock)_displayBlock
-{
-    __weak WXComponent* wself = self;
-    WXDisplayBlock displayBlock = ^UIImage *(CGRect bounds, BOOL(^isCancelled)(void)) {
-        if (isCancelled()) {
-            return nil;
-        }
-        
-        __strong WXComponent* sself = wself;
-        if (sself) {
-            UIGraphicsBeginImageContextWithOptions(bounds.size, [sself _bitmapOpaqueWithSize:bounds.size] , 0.0);
-            UIImage *image = [sself drawRect:bounds];
-            if (!image) {
-                image = UIGraphicsGetImageFromCurrentImageContext();
-            }
-            UIGraphicsEndImageContext();
-            
-            return image;
-        }
-        else {
-            return nil;
-        }
-    };
-    
-    return displayBlock;
-}
-
-- (WXDisplayCompletionBlock)_displayCompletionBlock
-{
-    __weak typeof(self) weakSelf = self;
-    return ^(CALayer *layer, BOOL finished) {
-        [weakSelf didFinishDrawingLayer:finished];
-    };
-}
-
-- (void)_initCompositingAttribute:(NSDictionary *)attributes
-{
-    _useCompositing = attributes[@"compositing"] ? [WXConvert BOOL:attributes[@"compositing"]] : NO;
-}
-
-- (void)_willDisplayLayer:(CALayer *)layer
-{
-    WXAssertMainThread();
-    
-    if (_isCompositingChild) {
-        // compsiting children do not have own layers, so return here.
-        return;
-    }
-    
-    CGRect displayBounds = CGRectMake(0, 0, self.calculatedFrame.size.width, self.calculatedFrame.size.height);
-    
-    BOOL needsDrawRect = [self needsDrawRect];
-    WXDisplayBlock displayBlock;
-    if (_useCompositing) {
-        displayBlock = [self _compositeDisplayBlock];
-    } else {
-        displayBlock = [self _displayBlock];
-    }
-    WXDisplayCompletionBlock completionBlock = [self _displayCompletionBlock];
-    
-    if (!displayBlock || !needsDrawRect) {
-        if (completionBlock) {
-            completionBlock(layer, NO);
-        }
-        return;
-    }
-    
-    if (_async) {
-        WXThreadSafeCounter *displayCounter = _displayCounter;
-        int32_t displayValue = [displayCounter increase];
-        BOOL (^isCancelled)(void) = ^BOOL(){
-            return displayValue != displayCounter.value;
-        };
-        
-        [WXDisplayQueue addBlock:^{
-            if (isCancelled()) {
-                if (completionBlock) {
-                    dispatch_async(dispatch_get_main_queue(), ^{
-                        completionBlock(layer, NO);
-                    });
-                }
-                return;
-            }
-            
-            UIImage *image = displayBlock(displayBounds, isCancelled);
-            
-            dispatch_async(dispatch_get_main_queue(), ^{
-                if (isCancelled()) {
-                    if (completionBlock) {
-                        completionBlock(layer, NO);
-                    }
-                    return;
-                }
-                
-                layer.contents = (id)(image.CGImage);
-                
-                if (completionBlock) {
-                    completionBlock(layer, YES);
-                }
-            });
-            
-        }];
-    } else {
-        UIImage *image = displayBlock(displayBounds, ^BOOL(){
-            return NO;
-        });
-        
-        _layer.contents = (id)image.CGImage;
-        
-        if (completionBlock) {
-            completionBlock(layer, YES);
-        }
-    }
-}
-
-- (void)triggerDisplay
-{
-    WXPerformBlockOnMainThread(^{
-        [self _willDisplayLayer:_layer];
-    });
-}
-
-- (CGContextRef)beginDrawContext:(CGRect)bounds
-{
-    UIGraphicsBeginImageContextWithOptions(bounds.size, [self _bitmapOpaqueWithSize:bounds.size], 0.0);
-    CGContextRef context = UIGraphicsGetCurrentContext();
-    
-//    float scaleFactor = [[UIScreen mainScreen] scale];
-//    CGColorSpaceRef	colorSpace = CGColorSpaceCreateDeviceRGB();
-//    CGContextRef context = CGBitmapContextCreate(NULL, bounds.size.width * scaleFactor, bounds.size.height * scaleFactor, 8, 4 * bounds.size.width * scaleFactor, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
-//    CGContextScaleCTM(context, scaleFactor, scaleFactor);
-//
-//    // Adjusts position and invert the image.
-//    // The OpenGL uses the image data upside-down compared commom image files.
-//    CGContextTranslateCTM(context, 0, bounds.size.height);
-//    CGContextScaleCTM(context, 1.0, -1.0);
-//    
-//    CGColorSpaceRelease(colorSpace);
-    
-    return context;
-}
-
-- (UIImage *)endDrawContext:(CGContextRef)context
-{
-    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
-    
-//    CGImageRef imageRef= CGBitmapContextCreateImage(context);
-//    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef];
-//    CGContextRelease(context);
-    
-    return image;
-}
-
-- (WXDisplayBlock)_compositeDisplayBlock
-{
-    return ^UIImage* (CGRect bounds, BOOL(^isCancelled)(void)) {
-        if (isCancelled()) {
-            return nil;
-        }
-        NSMutableArray *displayBlocks = [NSMutableArray array];
-        
-        CGContextRef context = [self beginDrawContext:bounds];
-        
-        UIGraphicsPushContext(context);
-        
-        [self _collectCompositingDisplayBlocks:displayBlocks context:context isCancelled:isCancelled];
-        
-        for (dispatch_block_t block in displayBlocks) {
-            if (isCancelled()) {
-                [self endDrawContext:context];
-                return nil;
-            }
-            block();
-        }
-        
-        UIGraphicsPopContext();
-        
-        UIImage *image = [self endDrawContext:context];
-        return image;
-    };
-}
-
-- (void)_collectCompositingDisplayBlocks:(NSMutableArray *)displayBlocks context:(CGContextRef)context isCancelled:(BOOL(^)(void))isCancelled
-{
-    // TODO: compositingChild has no chance to applyPropertiesToView, need update here?
-    UIColor *backgroundColor = _backgroundColor;
-    BOOL clipsToBounds = _clipToBounds;
-    CGRect frame = self.calculatedFrame;
-    CGRect bounds = CGRectMake(0, 0, frame.size.width, frame.size.height);
-    
-    if (_useCompositing) {
-        frame.origin = CGPointMake(0, 0);
-    }
-    
-    BOOL needsDrawRect = [self needsDrawRect];
-    
-    BOOL shouldDisplay = needsDrawRect && (backgroundColor || CGPointEqualToPoint(CGPointZero, frame.origin) == NO || clipsToBounds);
-    
-    if (shouldDisplay) {
-        dispatch_block_t displayBlockToPush = ^{
-            CGContextSaveGState(context);
-            CGContextTranslateCTM(context, frame.origin.x, frame.origin.y);
-            
-            if (isCancelled && isCancelled()) {
-                return ;
-            }
-            
-            if (_isCompositingChild && clipsToBounds) {
-                [[UIBezierPath bezierPathWithRect:bounds] addClip];
-            }
-            
-            UIImage *image = [self drawRect:bounds];
-            if (image) {
-                [image drawInRect:bounds];
-            }
-        };
-        [displayBlocks addObject:[displayBlockToPush copy]];
-    }
-    
-    for (WXComponent *component in self.subcomponents) {
-        if (!isCancelled()) {
-            [component _collectCompositingDisplayBlocks:displayBlocks context:context isCancelled:isCancelled];
-        }
-    }
-    
-    if (shouldDisplay) {
-        dispatch_block_t blockToPop = ^{
-            CGContextRestoreGState(context);
-        };
-        [displayBlocks addObject:[blockToPop copy]];
-    }
-}
-
-#pragma mark Border Drawing
-
-- (void)_drawBorderWithContext:(CGContextRef)context size:(CGSize)size
-{
-    CGRect rect = CGRectMake(0, 0, size.width, size.height);
-    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:rect topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
-    // here is computed radii, do not use original style
-    WXRadii *radii = borderRect.radii;
-    CGFloat topLeft = radii.topLeft, topRight = radii.topRight, bottomLeft = radii.bottomLeft, bottomRight = radii.bottomRight;
-    
-    CGContextSetAlpha(context, _opacity);
-    // fill background color
-    if (_backgroundColor && CGColorGetAlpha(_backgroundColor.CGColor) > 0) {
-        CGContextSetFillColorWithColor(context, _backgroundColor.CGColor);
-        UIBezierPath *bezierPath = [UIBezierPath wx_bezierPathWithRoundedRect:rect topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
-        [bezierPath fill];
-        _view.backgroundColor = UIColor.clearColor;
-    }
-    // Top
-    if (_borderTopWidth > 0) {
-        if(_borderTopStyle == WXBorderStyleDashed || _borderTopStyle == WXBorderStyleDotted){
-            CGFloat lengths[2];
-            lengths[0] = lengths[1] = (_borderTopStyle == WXBorderStyleDashed ? 3 : 1) * _borderTopWidth;
-            CGContextSetLineDash(context, 0, lengths, sizeof(lengths) / sizeof(*lengths));
-        } else{
-            CGContextSetLineDash(context, 0, 0, 0);
-        }
-        CGContextSetLineWidth(context, _borderTopWidth);
-        CGContextSetStrokeColorWithColor(context, _borderTopColor.CGColor);
-        CGContextAddArc(context, size.width-topRight, topRight, topRight-_borderTopWidth/2, -M_PI_4+(_borderRightWidth>0?0:M_PI_4), -M_PI_2, 1);
-        CGContextMoveToPoint(context, size.width-topRight, _borderTopWidth/2);
-        CGContextAddLineToPoint(context, topLeft, _borderTopWidth/2);
-        CGContextAddArc(context, topLeft, topLeft, topLeft-_borderTopWidth/2, -M_PI_2, -M_PI_2-M_PI_4-(_borderLeftWidth>0?0:M_PI_4), 1);
-        CGContextStrokePath(context);
-        _lastBorderRecords |= WXComponentBorderRecordTop;
-    } else {
-        _lastBorderRecords &= ~(WXComponentBorderRecordTop);
-    }
-    
-    // Left
-    if (_borderLeftWidth > 0) {
-        if(_borderLeftStyle == WXBorderStyleDashed || _borderLeftStyle == WXBorderStyleDotted){
-            CGFloat lengths[2];
-            lengths[0] = lengths[1] = (_borderLeftStyle == WXBorderStyleDashed ? 3 : 1) * _borderLeftWidth;
-            CGContextSetLineDash(context, 0, lengths, sizeof(lengths) / sizeof(*lengths));
-        } else{
-            CGContextSetLineDash(context, 0, 0, 0);
-        }
-        CGContextSetLineWidth(context, _borderLeftWidth);
-        CGContextSetStrokeColorWithColor(context, _borderLeftColor.CGColor);
-        CGContextAddArc(context, topLeft, topLeft, topLeft-_borderLeftWidth/2, -M_PI, -M_PI_2-M_PI_4+(_borderTopWidth > 0?0:M_PI_4), 0);
-        CGContextMoveToPoint(context, _borderLeftWidth/2, topLeft);
-        CGContextAddLineToPoint(context, _borderLeftWidth/2, size.height-bottomLeft);
-        CGContextAddArc(context, bottomLeft, size.height-bottomLeft, bottomLeft-_borderLeftWidth/2, M_PI, M_PI-M_PI_4-(_borderBottomWidth>0?0:M_PI_4), 1);
-        CGContextStrokePath(context);
-        _lastBorderRecords |= WXComponentBorderRecordLeft;
-    } else {
-        _lastBorderRecords &= ~WXComponentBorderRecordLeft;
-    }
-    
-    // Bottom
-    if (_borderBottomWidth > 0) {
-        if(_borderBottomStyle == WXBorderStyleDashed || _borderBottomStyle == WXBorderStyleDotted){
-            CGFloat lengths[2];
-            lengths[0] = lengths[1] = (_borderBottomStyle == WXBorderStyleDashed ? 3 : 1) * _borderBottomWidth;
-            CGContextSetLineDash(context, 0, lengths, sizeof(lengths) / sizeof(*lengths));
-        } else{
-            CGContextSetLineDash(context, 0, 0, 0);
-        }
-        CGContextSetLineWidth(context, _borderBottomWidth);
-        CGContextSetStrokeColorWithColor(context, _borderBottomColor.CGColor);
-        CGContextAddArc(context, bottomLeft, size.height-bottomLeft, bottomLeft-_borderBottomWidth/2, M_PI-M_PI_4+(_borderLeftWidth>0?0:M_PI_4), M_PI_2, 1);
-        CGContextMoveToPoint(context, bottomLeft, size.height-_borderBottomWidth/2);
-        CGContextAddLineToPoint(context, size.width-bottomRight, size.height-_borderBottomWidth/2);
-        CGContextAddArc(context, size.width-bottomRight, size.height-bottomRight, bottomRight-_borderBottomWidth/2, M_PI_2, M_PI_4-(_borderRightWidth > 0?0:M_PI_4), 1);
-        CGContextStrokePath(context);
-        _lastBorderRecords |= WXComponentBorderRecordBottom;
-    } else {
-        _lastBorderRecords &= ~WXComponentBorderRecordBottom;
-    }
-    
-    // Right
-    if (_borderRightWidth > 0) {
-        if(_borderRightStyle == WXBorderStyleDashed || _borderRightStyle == WXBorderStyleDotted){
-            CGFloat lengths[2];
-            lengths[0] = lengths[1] = (_borderRightStyle == WXBorderStyleDashed ? 3 : 1) * _borderRightWidth;
-            CGContextSetLineDash(context, 0, lengths, sizeof(lengths) / sizeof(*lengths));
-        } else{
-            CGContextSetLineDash(context, 0, 0, 0);
-        }
-        CGContextSetLineWidth(context, _borderRightWidth);
-        CGContextSetStrokeColorWithColor(context, _borderRightColor.CGColor);
-        CGContextAddArc(context, size.width-bottomRight, size.height-bottomRight, bottomRight-_borderRightWidth/2, M_PI_4+(_borderBottomWidth>0?0:M_PI_4), 0, 1);
-        CGContextMoveToPoint(context, size.width-_borderRightWidth/2, size.height-bottomRight);
-        CGContextAddLineToPoint(context, size.width-_borderRightWidth/2, topRight);
-        CGContextAddArc(context, size.width-topRight, topRight, topRight-_borderRightWidth/2, 0, -M_PI_4-(_borderTopWidth > 0?0:M_PI_4), 1);
-        CGContextStrokePath(context);
-        _lastBorderRecords |= WXComponentBorderRecordRight;
-    } else {
-        _lastBorderRecords &= ~WXComponentBorderRecordRight;
-    }
-
-    CGContextStrokePath(context);
-    
-    //clipRadius is beta feature
-    //TO DO: remove _clipRadius property
-    if (_clipToBounds && _clipRadius) {
-        BOOL radiusEqual = _borderTopLeftRadius == _borderTopRightRadius && _borderTopRightRadius == _borderBottomRightRadius && _borderBottomRightRadius == _borderBottomLeftRadius;
-        if (!radiusEqual) {
-            self.layer.mask = [self drawBorderRadiusMaskLayer:rect];
-        }
-    }
-}
-
-- (BOOL)_needsDrawBorder
-{
-    if (_isCompositingChild) {
-        return YES;
-    }
-    
-    if (![_layer isKindOfClass:[WXLayer class]]) {
-        // Only support WXLayer
-        return NO;
-    }
-    // Set border property for most of components because border drawing consumes a lot of memory (v0.6.0)
-//    if (_async) {
-//        // Async layer always draw border
-//        return YES;
-//    }
-    if (!(_borderLeftStyle == _borderTopStyle &&
-          _borderTopStyle == _borderRightStyle &&
-          _borderRightStyle == _borderBottomStyle &&
-          _borderBottomStyle == WXBorderStyleSolid)
-        ) {
-        // Native border property doesn't support dashed or dotted border
-        return YES;
-    }
-    
-    // user native border property only when border width & color & radius are equal;
-    BOOL widthEqual = _borderTopWidth == _borderRightWidth && _borderRightWidth == _borderBottomWidth && _borderBottomWidth == _borderLeftWidth;
-    if (!widthEqual) {
-        return YES;
-    }
-    BOOL radiusEqual = _borderTopLeftRadius == _borderTopRightRadius && _borderTopRightRadius == _borderBottomRightRadius && _borderBottomRightRadius == _borderBottomLeftRadius;
-    if (!radiusEqual) {
-        return YES;
-    }
-    BOOL colorEqual = [_borderTopColor isEqual:_borderRightColor] && [_borderRightColor isEqual:_borderBottomColor] && [_borderBottomColor isEqual:_borderLeftColor];
-    if (!colorEqual) {
-        return YES;
-    }
-    
-    return NO;
-}
-
-- (void)_handleBorders:(NSDictionary *)styles isUpdating:(BOOL)updating
-{
-    if (!updating) {
-        // init with default value
-        _borderTopStyle = _borderRightStyle = _borderBottomStyle = _borderLeftStyle = WXBorderStyleSolid;
-        _borderTopColor = _borderLeftColor = _borderRightColor = _borderBottomColor = [UIColor blackColor];
-        _borderTopWidth = _borderLeftWidth = _borderRightWidth = _borderBottomWidth = 0;
-        _borderTopLeftRadius = _borderTopRightRadius = _borderBottomLeftRadius = _borderBottomRightRadius = 0;
-    }
-    
-    BOOL previousNeedsDrawBorder = YES;
-    if (updating) {
-        previousNeedsDrawBorder = [self _needsDrawBorder];
-    }
-    
-#define WX_CHECK_BORDER_PROP(prop, direction1, direction2, direction3, direction4, type)\
-do {\
-    BOOL needsDisplay = NO; \
-    NSString *styleProp= WX_NSSTRING(WX_CONCAT(border, prop));\
-    if (styles[styleProp]) {\
-        _border##direction1##prop = _border##direction2##prop = _border##direction3##prop = _border##direction4##prop = [WXConvert type:styles[styleProp]];\
-        needsDisplay = YES;\
-    }\
-    NSString *styleDirection1Prop = WX_NSSTRING(WX_CONCAT_TRIPLE(border, direction1, prop));\
-    if (styles[styleDirection1Prop]) {\
-        _border##direction1##prop = [WXConvert type:styles[styleDirection1Prop]];\
-        needsDisplay = YES;\
-    }\
-    NSString *styleDirection2Prop = WX_NSSTRING(WX_CONCAT_TRIPLE(border, direction2, prop));\
-    if (styles[styleDirection2Prop]) {\
-        _border##direction2##prop = [WXConvert type:styles[styleDirection2Prop]];\
-        needsDisplay = YES;\
-    }\
-    NSString *styleDirection3Prop = WX_NSSTRING(WX_CONCAT_TRIPLE(border, direction3, prop));\
-    if (styles[styleDirection3Prop]) {\
-        _border##direction3##prop = [WXConvert type:styles[styleDirection3Prop]];\
-        needsDisplay = YES;\
-    }\
-    NSString *styleDirection4Prop = WX_NSSTRING(WX_CONCAT_TRIPLE(border, direction4, prop));\
-    if (styles[styleDirection4Prop]) {\
-        _border##direction4##prop = [WXConvert type:styles[styleDirection4Prop]];\
-        needsDisplay = YES;\
-    }\
-    if (needsDisplay && updating) {\
-        [self setNeedsDisplay];\
-    }\
-} while (0);
-    
-// TODO: refactor this hopefully
-#define WX_CHECK_BORDER_PROP_PIXEL(prop, direction1, direction2, direction3, direction4)\
-do {\
-    BOOL needsDisplay = NO; \
-    NSString *styleProp= WX_NSSTRING(WX_CONCAT(border, prop));\
-    if (styles[styleProp]) {\
-        _border##direction1##prop = _border##direction2##prop = _border##direction3##prop = _border##direction4##prop = [WXConvert WXPixelType:styles[styleProp] scaleFactor:self.weexInstance.pixelScaleFactor];\
-    needsDisplay = YES;\
-    }\
-    NSString *styleDirection1Prop = WX_NSSTRING(WX_CONCAT_TRIPLE(border, direction1, prop));\
-    if (styles[styleDirection1Prop]) {\
-        _border##direction1##prop = [WXConvert WXPixelType:styles[styleDirection1Prop] scaleFactor:self.weexInstance.pixelScaleFactor];\
-        needsDisplay = YES;\
-    }\
-    NSString *styleDirection2Prop = WX_NSSTRING(WX_CONCAT_TRIPLE(border, direction2, prop));\
-    if (styles[styleDirection2Prop]) {\
-        _border##direction2##prop = [WXConvert WXPixelType:styles[styleDirection2Prop] scaleFactor:self.weexInstance.pixelScaleFactor];\
-        needsDisplay = YES;\
-    }\
-    NSString *styleDirection3Prop = WX_NSSTRING(WX_CONCAT_TRIPLE(border, direction3, prop));\
-    if (styles[styleDirection3Prop]) {\
-        _border##direction3##prop = [WXConvert WXPixelType:styles[styleDirection3Prop] scaleFactor:self.weexInstance.pixelScaleFactor];\
-        needsDisplay = YES;\
-    }\
-    NSString *styleDirection4Prop = WX_NSSTRING(WX_CONCAT_TRIPLE(border, direction4, prop));\
-    if (styles[styleDirection4Prop]) {\
-        _border##direction4##prop = [WXConvert WXPixelType:styles[styleDirection4Prop] scaleFactor:self.weexInstance.pixelScaleFactor];\
-        needsDisplay = YES;\
-    }\
-    if (needsDisplay && updating) {\
-        [self setNeedsDisplay];\
-    }\
-} while (0);
-    
-    
-    WX_CHECK_BORDER_PROP(Style, Top, Left, Bottom, Right, WXBorderStyle)
-    WX_CHECK_BORDER_PROP(Color, Top, Left, Bottom, Right, UIColor)
-    WX_CHECK_BORDER_PROP_PIXEL(Width, Top, Left, Bottom, Right)
-    WX_CHECK_BORDER_PROP_PIXEL(Radius, TopLeft, TopRight, BottomLeft, BottomRight)
-
-    if (updating) {
-        WX_CHECK_COMPONENT_TYPE(self.componentType)
-        BOOL nowNeedsDrawBorder = [self _needsDrawBorder];
-        if (nowNeedsDrawBorder && !previousNeedsDrawBorder) {
-            _layer.cornerRadius = 0;
-            _layer.borderWidth = 0;
-            _layer.backgroundColor = NULL;
-        } else if (!nowNeedsDrawBorder) {
-            [self _resetNativeBorderRadius];
-            _layer.borderWidth = _borderTopWidth;
-            _layer.borderColor = _borderTopColor.CGColor;
-            if ((_transition.transitionOptions & WXTransitionOptionsBackgroundColor) != WXTransitionOptionsBackgroundColor ) {
-                _layer.backgroundColor = _backgroundColor.CGColor;
-            }
-        }
-    }
-}
-
-- (BOOL)_bitmapOpaqueWithSize:(CGSize)size
-{
-    CGRect rect = CGRectMake(0, 0, size.width, size.height);
-    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:rect topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
-    WXRadii *radii = borderRect.radii;
-    BOOL hasBorderRadius = [radii hasBorderRadius];
-    return (!hasBorderRadius) && _opacity == 1.0 && CGColorGetAlpha(_backgroundColor.CGColor) == 1.0 && [self _needsDrawBorder];
-}
-
-- (CAShapeLayer *)drawBorderRadiusMaskLayer:(CGRect)rect
-{
-    if ([self hasBorderRadiusMaskLayer]) {
-        WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:rect topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
-        WXRadii *radii = borderRect.radii;
-        UIBezierPath *bezierPath = [UIBezierPath wx_bezierPathWithRoundedRect:rect topLeft:radii.topLeft topRight:radii.topRight bottomLeft:radii.bottomLeft bottomRight:radii.bottomRight];
-        CAShapeLayer *maskLayer = [CAShapeLayer layer];
-        maskLayer.path = bezierPath.CGPath;
-        return maskLayer;
-    }
-    return nil;
-}
-
-- (BOOL)hasBorderRadiusMaskLayer
-{
-    return _borderTopLeftRadius > 0.001 || _borderTopRightRadius > 0.001 || _borderBottomLeftRadius > 0.001 || _borderBottomLeftRadius > 0.001;
-}
-
-#pragma mark - Deprecated
-
-- (WXDisplayBlock)displayBlock
-{
-    return [self _displayBlock];
-}
-
-- (WXDisplayCompletionBlock)displayCompletionBlock
-{
-    return [self _displayCompletionBlock];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h
deleted file mode 100644
index 17d87b1..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-// Global queue for displaying content
-@interface WXDisplayQueue : NSObject
-
-+ (void)addBlock:(void(^)(void))block;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.m
deleted file mode 100644
index 911147c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.m
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXDisplayQueue.h"
-
-#define MAX_CONCURRENT_COUNT 8
-
-static dispatch_semaphore_t WXDisplayConcurrentSemaphore;
-
-@implementation WXDisplayQueue
-
-+ (dispatch_queue_t)displayQueue
-{
-    static dispatch_queue_t displayQueue = NULL;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        displayQueue = dispatch_queue_create("com.taobao.weex.displayQueue", DISPATCH_QUEUE_CONCURRENT);
-        dispatch_set_target_queue(displayQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));
-    });
-    
-    return displayQueue;
-}
-
-+ (void)addBlock:(void(^)(void))block
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        NSUInteger processorCount = [NSProcessInfo processInfo].activeProcessorCount;
-        NSUInteger maxConcurrentCount = processorCount <= MAX_CONCURRENT_COUNT ? processorCount : MAX_CONCURRENT_COUNT;
-        WXDisplayConcurrentSemaphore = dispatch_semaphore_create(maxConcurrentCount);
-    });
-    
-    dispatch_async([self displayQueue], ^{
-        dispatch_semaphore_wait(WXDisplayConcurrentSemaphore, DISPATCH_TIME_FOREVER);
-        block();
-        dispatch_semaphore_signal(WXDisplayConcurrentSemaphore);
-    });
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h
deleted file mode 100644
index 2ff40df..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <QuartzCore/QuartzCore.h>
-#import <UIKit/UIKit.h>
-
-@interface WXInnerLayer : CAGradientLayer
-
-@property CGFloat boxShadowRadius;
-@property (nonatomic,strong) UIColor *boxShadowColor;
-@property CGSize boxShadowOffset;
-@property CGFloat boxShadowOpacity;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.m
deleted file mode 100644
index 774f320..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.m
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXInnerLayer.h"
-
-@implementation WXInnerLayer
-
-@dynamic boxShadowColor, boxShadowOffset, boxShadowRadius, boxShadowOpacity;
-
-+ (BOOL)needsDisplayForKey:(NSString *)key {
-    if ([key isEqualToString:@"boxShadowRadius"]  || [key isEqualToString:@"boxShadowOffset"] || [key isEqualToString:@"boxShadowColor"] || [key isEqualToString:@"boxShadowOpacity"]) {
-        return YES;
-    }
-    return [super needsDisplayForKey:key];
-}
-
-- (id)actionForKey:(NSString *) key {
-    if ([key isEqualToString:@"boxShadowRadius"] || [key isEqualToString:@"boxShadowOffset"] ||[key isEqualToString:@"boxShadowColor"] ||  [key isEqualToString:@"boxShadowOpacity"] ) {
-        CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:key];
-        theAnimation.fromValue = [self.presentationLayer valueForKey:key];
-        return theAnimation;
-    }
-    return [super actionForKey:key];
-}
-
-- (void)drawInContext:(CGContextRef)context {
-    CGFloat radius = self.cornerRadius;
-    
-    CGRect rect = self.bounds;
-    if (self.borderWidth != 0) {
-        rect = CGRectInset(rect, self.borderWidth, self.borderWidth);
-        radius -= self.borderWidth;
-        radius = MAX(radius, 0);
-    }
-    
-    CGContextSetAllowsAntialiasing(context, YES);
-    CGContextSetShouldAntialias(context, YES);
-    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
-    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
-    
-    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius];
-    CGContextAddPath(context, bezierPath.CGPath);
-    CGContextClip(context);
-    CGMutablePathRef outer = CGPathCreateMutable();
-    CGPathAddRect(outer, NULL, CGRectInset(rect, -1*rect.size.width, -1*rect.size.height));
-    CGPathAddPath(outer, NULL, bezierPath.CGPath);
-    CGPathCloseSubpath(outer);
-    CGFloat *oldComponents = (CGFloat *)CGColorGetComponents(self.boxShadowColor.CGColor);
-    CGFloat newComponents[4];
-    NSInteger numberOfComponents = CGColorGetNumberOfComponents(self.boxShadowColor.CGColor);
-    switch (numberOfComponents)
-    {
-        case 2:
-        {
-            //grayscale
-            newComponents[0] = oldComponents[0];
-            newComponents[1] = oldComponents[0];
-            newComponents[2] = oldComponents[0];
-            newComponents[3] = oldComponents[1] * self.boxShadowOpacity;
-            break;
-        }
-        case 4:
-        {
-            //RGBA
-            newComponents[0] = oldComponents[0];
-            newComponents[1] = oldComponents[1];
-            newComponents[2] = oldComponents[2];
-            newComponents[3] = oldComponents[3] * self.boxShadowOpacity;
-            break;
-        }
-    }
-    CGColorRef shadowColorWithMultipliedAlpha = CGColorCreate(colorspace, newComponents);
-    CGColorSpaceRelease(colorspace);
-    CGContextSetFillColorWithColor(context, shadowColorWithMultipliedAlpha);
-    CGContextSetShadowWithColor(context, self.boxShadowOffset, self.boxShadowRadius, shadowColorWithMultipliedAlpha);
-    CGContextAddPath(context, outer);
-    CGContextEOFillPath(context);
-    CGPathRelease(outer);
-    CGColorRelease(shadowColorWithMultipliedAlpha);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXLayer.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXLayer.h
deleted file mode 100644
index 7886c82..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXLayer.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <QuartzCore/QuartzCore.h>
-
-@interface WXLayer : CALayer
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXLayer.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXLayer.m
deleted file mode 100644
index d293d6d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXLayer.m
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXLayer.h"
-#import "WXDefine.h"
-#import "WXComponent.h"
-#import "WXComponent_internal.h"
-
-@implementation WXLayer
-
-- (void)display
-{
-    [self.wx_component _willDisplayLayer:self];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h
deleted file mode 100644
index 01c9911..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import <Foundation/Foundation.h>
-#import <CoreGraphics/CoreGraphics.h>
-
-@interface WXRadii : NSObject
-
-@property (nonatomic, assign) CGFloat topLeft;
-@property (nonatomic, assign) CGFloat topRight;
-@property (nonatomic, assign) CGFloat bottomLeft;
-@property (nonatomic, assign) CGFloat bottomRight;
-
-- (BOOL)hasBorderRadius;
-
-- (BOOL)radiusesAreEqual;
-
-@end
-
-@interface WXRoundedRect : NSObject
-
-@property (nonatomic, assign) CGRect rect;
-@property (nonatomic, strong) WXRadii *radii;
-
-- (instancetype)initWithRect:(CGRect)rect
-                     topLeft:(CGFloat)topLeft
-                    topRight:(CGFloat)topRight
-                  bottomLeft:(CGFloat)bottomLeft
-                 bottomRight:(CGFloat)bottomRight;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.mm
deleted file mode 100644
index 7636d9d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.mm
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRoundedRect.h"
-#import "WXAssert.h"
-
-@implementation WXRadii
-
-- (instancetype)initWithTopLeft:(CGFloat)topLeft
-                       topRight:(CGFloat)topRight
-                     bottomLeft:(CGFloat)bottomLeft
-                    bottomRight:(CGFloat)bottomRight
-{
-    if (self = [super init]) {
-        _topLeft = topLeft;
-        _topRight = topRight;
-        _bottomLeft = bottomLeft;
-        _bottomRight = bottomRight;
-    }
-    
-    return self;
-}
-
-- (BOOL)hasBorderRadius
-{
-    return _topLeft > 0.001 || _topRight > 0.001 || _bottomLeft > 0.001 || _bottomRight > 0.001;
-}
-
-- (BOOL)radiusesAreEqual
-{
-    return _topLeft == _topRight && _topRight == _bottomRight && _bottomRight == _bottomLeft;
-}
-
-- (void)scale:(float)factor
-{
-    if (factor == 1) {
-        return;
-    }
-    
-    _topLeft *= factor;
-    _topRight *= factor;
-    _bottomLeft *= factor;
-    _bottomRight *= factor;
-}
-
-@end
-
-@interface WXRoundedRect ()
-
-@end
-
-@implementation WXRoundedRect
-
-- (instancetype)initWithRect:(CGRect)rect
-                     topLeft:(CGFloat)topLeft
-                    topRight:(CGFloat)topRight
-                  bottomLeft:(CGFloat)bottomLeft
-                 bottomRight:(CGFloat)bottomRight
-{
-    if (self = [super init]) {
-        _rect = rect;
-        _radii = [[WXRadii alloc] initWithTopLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
-        [_radii scale:[self radiiConstraintScaleFactor]];
-    }
-    
-    return self;
-}
-
-- (float)radiiConstraintScaleFactor
-{
-    // Constrain corner radii using CSS3 rules:
-    // http://www.w3.org/TR/css3-background/#the-border-radius
-    float factor = 1;
-    CGFloat radiiSum;
-    
-    // top
-    radiiSum = _radii.topLeft + _radii.topRight;
-    if (radiiSum > _rect.size.width) {
-        factor = MIN(_rect.size.width / radiiSum, factor);
-    }
-    
-    // bottom
-    radiiSum = _radii.bottomLeft + _radii.bottomRight;
-    if (radiiSum > _rect.size.width) {
-        factor = MIN(_rect.size.width / radiiSum, factor);
-    }
-    
-    // left
-    radiiSum = _radii.topLeft + _radii.bottomLeft;
-    if (radiiSum > _rect.size.height) {
-        factor = MIN(_rect.size.height / radiiSum, factor);
-    }
-    
-    // right
-    radiiSum = _radii.topRight + _radii.bottomRight;
-    if (radiiSum > _rect.size.height) {
-        factor = MIN(_rect.size.height / radiiSum, factor);
-    }
-    
-    WXAssert(factor <= 1, @"Wrong factor for radii constraint scale:%f", factor);
-    return factor;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Eagle/WXDataRenderHandler.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Eagle/WXDataRenderHandler.h
deleted file mode 100644
index 08bb818..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Eagle/WXDataRenderHandler.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol WXDataRenderHandler <NSObject>
-    
-- (void)createPage:(NSString *)pageId template:(NSString *)jsBundleString options:(NSDictionary *)options  data:(id)data;
-
-- (void)createPage:(NSString *)pageId contents:(NSData *)contents options:(NSDictionary *)options data:(id)data;
-
-- (void)callUpdateComponentData:(NSString*)pageId componentId:(NSString*)componentId jsonData:(NSString*)jsonData;
-
-- (void)destroyDataRenderInstance:(NSString *)pageId;
-
-- (void)refreshDataRenderInstance:(NSString *)pageId data:(NSString *)data;
-
-- (void)fireEvent:(NSString *)pageId ref:(NSString *)ref event:(NSString *)event args:(NSDictionary *)args domChanges:(NSDictionary *)domChanges;
-
-- (void)registerModules:(NSDictionary *)modules;
-    
-- (void)registerComponents:(NSArray *)components;
-    
-- (void)invokeCallBack:(NSString *)pageId function:(NSString *)funcId args:(NSDictionary *)args keepAlive:(BOOL)keepAlive;
-
-- (void)DispatchPageLifecycle:(NSString *)pageId;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
deleted file mode 100644
index 9d70c9d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@class WXSDKInstance;
-
-@interface WXSDKEngine : NSObject
-
-/**
- *  @abstract Register default modules/components/handlers, they will be registered only once.
- **/
-+ (void)registerDefaults;
-
-/**
- *  @abstract Register a module for a given name
- *
- *  @param name The module name to register
- *
- *  @param clazz  The module class to register
- *
- **/
-+ (void)registerModule:(NSString *)name withClass:(Class)clazz;
-
-/**
- * @abstract Registers a component for a given name
- *
- * @param name The component name to register
- *
- * @param clazz The WXComponent subclass to register
- *
- **/
-+ (void)registerComponent:(NSString *)name withClass:(Class)clazz;
-
-/**
- * @abstract Registers a extendCallNative Class for a given name
- *
- * @param name The extendCallNative name to register
- *
- * @param clazz The extendCallNative subclass to register
- *
- **/
-+ (void)registerExtendCallNative:(NSString *)name withClass:(Class)clazz;
-
-/**
- * @abstract Registers a component for a given name and specific properties
- *
- * @param name The component name to register
- *
- * @param clazz The WXComponent subclass to register
- *
- * @param properties properties to apply to the component
- *
- */
-+ (void)registerComponent:(NSString *)name withClass:(Class)clazz withProperties:(NSDictionary *)properties;
-
-/**
- * @abstract Registers a component for a given name, options and js code
- *
- * @param name The service name to register
- *
- * @param options The service options to register
- *
- * @param serviceScript service js code to invoke
- *
- */
-+ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options;
-
-/**
- * @abstract Registers a component for a given name, options and js code
- *
- * @param name The service name to register
- *
- * @param options The service options to register
- *
- * @param serviceScript service js code to invoke
- *
- * @param completion Completion callback. JS is executed in asynchronously.
- *
- */
-+ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion;
-
-/**
- * @abstract Registers a component for a given name, options and js url
- *
- * @param name The service name to register
- *
- * @param options The service options to register
- *
- * @param serviceScriptUrl The service url to register
- *
- */
-+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options;
-
-/**
- * @abstract Registers a component for a given name, options and js url
- *
- * @param name The service name to register
- *
- * @param options The service options to register
- *
- * @param serviceScriptUrl The service url to register
- *
- * @param completion Completion callback. JS is executed in asynchronously.
- *
- */
-+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion;
-
-/**
- * @abstract Registers a component for a given name, options and js code
- *
- * @param name The name of register service
- *
- */
-+ (void)unregisterService:(NSString *)name;
-
-/**
- * @abstract Registers a handler for a given handler instance and specific protocol
- *
- * @param handler The handler instance to register
- *
- * @param protocol The protocol to confirm
- *
- */
-+ (void)registerHandler:(id)handler withProtocol:(Protocol *)protocol;
-
-
-/**
- * @abstract Returns a given handler instance for specific protocol
- *
- * @param protocol The protocol to confirm
- *
- */
-+ (id)handlerForProtocol:(Protocol *)protocol;
-
-/**
- * @abstract Initializes the global sdk environment
- *
- * @discussion Injects main.js in app bundle as default JSFramework script.
- *
- **/
-+ (void)initSDKEnvironment;
-
-/**
- * @abstract Initializes the environment with a given JSFramework script.
- *
- **/
-+ (void)initSDKEnvironment:(NSString *)script;
-
-/**
- * @abstract Unloads the bridge context
- *
- **/
-+ (void)unload;
-
-/**
- * @abstract restart Weex Engine.
- **/
-+ (void)restart;
-
-/**
- * @abstract restart Weex Engine with specify jsfm.
- **/
-+ (void)restartWithScript:(NSString*)script;
-
-/**
- * @abstract Returns the version of SDK
- *
- **/
-+ (NSString*)SDKEngineVersion;
-
-/**
- * @abstract The Instance at the top of the rendering stack. 
- *
- **/
-+ (WXSDKInstance *)topInstance;
-
-/**
- * @abstract Add custom environment variables
- * @discuss These variables can be obtained by $getConfig().env
- *
- **/
-+ (void)setCustomEnvironment:(NSDictionary *)environment;
-+ (NSDictionary *)customEnvironment;
-
-/**
- * @abstract Connects to websocket for collecting log
- *
- * @param URL The URL of websocket to connect
- *
- */
-+ (void)connectDebugServer:(NSString*)URL;
-
-/**
- * @abstract Connects to websocket for devtool debug
- *
- * @param URL The URL of websocket to connect
- *
- */
-+ (void)connectDevToolServer:(NSString *)URL;
-
-/**
- * @abstract Set the global device size of all pages.
- * You could also set unique device size used by a page using interface of WXSDKInstance.
- *
- * @param size, the device size in UIKit system.
- *
- */
-+ (void)setGlobalDeviceSize:(CGSize)size;
-
-/**
- * @abstract Get the current global device size used by pages.
- *
- */
-+ (CGSize)getGlobalDeviceSize;
-
-@end
-
-@interface WXSDKEngine (Deprecated)
-
-+ (void)initSDKEnviroment DEPRECATED_MSG_ATTRIBUTE("To fix typo, use initSDKEnvironment method instead.");
-+ (void)initSDKEnviroment:(NSString *)script DEPRECATED_MSG_ATTRIBUTE("To fix typo,  use initSDKEnvironment: method instead.");
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
deleted file mode 100644
index 12c4cc4..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSDKEngine.h"
-#import "WXDebugTool.h"
-#import "WXModuleFactory.h"
-#import "WXHandlerFactory.h"
-#import "WXComponentFactory.h"
-#import "WXBridgeManager.h"
-
-#import "WXAppConfiguration.h"
-#import "WXResourceRequestHandlerDefaultImpl.h"
-#import "WXNavigationDefaultImpl.h"
-#import "WXURLRewriteDefaultImpl.h"
-#import "WXJSFrameworkLoadDefaultImpl.h"
-
-#import "WXSDKManager.h"
-#import "WXSDKError.h"
-#import "WXMonitor.h"
-#import "WXSimulatorShortcutManager.h"
-#import "WXAssert.h"
-#import "WXLog.h"
-#import "WXUtility.h"
-#import "WXExtendCallNativeManager.h"
-#import "WXExceptionUtils.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXComponent+Layout.h"
-#import "WXCoreBridge.h"
-
-@implementation WXSDKEngine
-
-# pragma mark Module Register
-
-// register some default modules when the engine initializes.
-+ (void)_registerDefaultModules
-{
-    [self registerModule:@"dom" withClass:NSClassFromString(@"WXDomModule")];
-    [self registerModule:@"locale" withClass:NSClassFromString(@"WXLocaleModule")];
-    [self registerModule:@"navigator" withClass:NSClassFromString(@"WXNavigatorModule")];
-    [self registerModule:@"stream" withClass:NSClassFromString(@"WXStreamModule")];
-    [self registerModule:@"animation" withClass:NSClassFromString(@"WXAnimationModule")];
-    [self registerModule:@"modal" withClass:NSClassFromString(@"WXModalUIModule")];
-    [self registerModule:@"webview" withClass:NSClassFromString(@"WXWebViewModule")];
-    [self registerModule:@"instanceWrap" withClass:NSClassFromString(@"WXInstanceWrap")];
-    [self registerModule:@"timer" withClass:NSClassFromString(@"WXTimerModule")];
-    [self registerModule:@"storage" withClass:NSClassFromString(@"WXStorageModule")];
-    [self registerModule:@"clipboard" withClass:NSClassFromString(@"WXClipboardModule")];
-    [self registerModule:@"globalEvent" withClass:NSClassFromString(@"WXGlobalEventModule")];
-    [self registerModule:@"canvas" withClass:NSClassFromString(@"WXCanvasModule")];
-    [self registerModule:@"picker" withClass:NSClassFromString(@"WXPickerModule")];
-    [self registerModule:@"meta" withClass:NSClassFromString(@"WXMetaModule")];
-    [self registerModule:@"webSocket" withClass:NSClassFromString(@"WXWebSocketModule")];
-    [self registerModule:@"voice-over" withClass:NSClassFromString(@"WXVoiceOverModule")];
-    [self registerModule:@"sdk-console-log" withClass:NSClassFromString(@"WXConsoleLogModule")];
-}
-
-+ (void)registerModule:(NSString *)name withClass:(Class)clazz
-{
-    WXAssert(name && clazz, @"Fail to register the module, please check if the parameters are correct !");
-    if (!clazz || !name) {
-        return;
-    }
-    NSString *moduleName = [WXModuleFactory registerModule:name withClass:clazz];
-    NSDictionary *dict = [WXModuleFactory moduleMethodMapsWithName:moduleName];
-    
-    [[WXSDKManager bridgeMgr] registerModules:dict];
-}
-
-# pragma mark Component Register
-
-+ (void)_registerAffineTypes
-{
-    /* register weex core types that should match RenderList or RenderScroller.
-     "list" and "waterfall" must be registered before "scroller" because "WXListComponent" and "WXRecyclerComponent"
-     are both subclasses of "WXScrollerComponent".
-     */
-    [WXComponentFactory registerBaseType:@"list" withClass:NSClassFromString(@"WXListComponent")];
-    [WXComponentFactory registerBaseType:@"waterfall" withClass:NSClassFromString(@"WXRecyclerComponent")];
-    [WXComponentFactory registerBaseType:@"scroller" withClass:NSClassFromString(@"WXScrollerComponent")];
-}
-
-// register some default components when the engine initializes.
-+ (void)_registerDefaultComponents
-{
-    [self registerComponent:@"container" withClass:NSClassFromString(@"WXDivComponent") withProperties:nil];
-    [self registerComponent:@"div" withClass:NSClassFromString(@"WXComponent") withProperties:nil];
-    [self registerComponent:@"text" withClass:NSClassFromString(@"WXTextComponent") withProperties:nil];
-    [self registerComponent:@"image" withClass:NSClassFromString(@"WXImageComponent") withProperties:nil];
-    [self registerComponent:@"richtext" withClass:NSClassFromString(@"WXRichText") withProperties:nil];
-    
-    [self registerComponent:@"scroller" withClass:NSClassFromString(@"WXScrollerComponent") withProperties:nil];
-    [self registerComponent:@"list" withClass:NSClassFromString(@"WXListComponent") withProperties:nil];
-    [self registerComponent:@"recycler" withClass:NSClassFromString(@"WXRecyclerComponent") withProperties:nil];
-    [self registerComponent:@"waterfall" withClass:NSClassFromString(@"WXRecyclerComponent") withProperties:nil];
-    
-    [self registerComponent:@"header" withClass:NSClassFromString(@"WXHeaderComponent")];
-    [self registerComponent:@"cell" withClass:NSClassFromString(@"WXCellComponent")];
-    [self registerComponent:@"embed" withClass:NSClassFromString(@"WXEmbedComponent")];
-    [self registerComponent:@"a" withClass:NSClassFromString(@"WXAComponent")];
-    
-    [self registerComponent:@"select" withClass:NSClassFromString(@"WXSelectComponent")];
-    [self registerComponent:@"switch" withClass:NSClassFromString(@"WXSwitchComponent")];
-    [self registerComponent:@"input" withClass:NSClassFromString(@"WXTextInputComponent")];
-    [self registerComponent:@"video" withClass:NSClassFromString(@"WXVideoComponent")];
-    [self registerComponent:@"indicator" withClass:NSClassFromString(@"WXIndicatorComponent")];
-    [self registerComponent:@"slider" withClass:NSClassFromString(@"WXCycleSliderComponent")];
-    [self registerComponent:@"cycleslider" withClass:NSClassFromString(@"WXCycleSliderComponent")];
-    [self registerComponent:@"web" withClass:NSClassFromString(@"WXWebComponent")];
-    [self registerComponent:@"loading" withClass:NSClassFromString(@"WXLoadingComponent")];
-    [self registerComponent:@"loading-indicator" withClass:NSClassFromString(@"WXLoadingIndicator")];
-    [self registerComponent:@"refresh" withClass:NSClassFromString(@"WXRefreshComponent")];
-    [self registerComponent:@"textarea" withClass:NSClassFromString(@"WXTextAreaComponent")];
-	[self registerComponent:@"canvas" withClass:NSClassFromString(@"WXCanvasComponent")];
-    [self registerComponent:@"slider-neighbor" withClass:NSClassFromString(@"WXSliderNeighborComponent")];
-    
-    [self registerComponent:@"recycle-list" withClass:NSClassFromString(@"WXRecycleListComponent")];
-    [self registerComponent:@"cell-slot" withClass:NSClassFromString(@"WXCellSlotComponent") withProperties: @{@"append":@"tree", @"isTemplate":@YES}];
-    
-    // other non-default components should be checked with affine-base types.
-    [self _registerAffineTypes];
-}
-
-+ (void)registerComponent:(NSString *)name withClass:(Class)clazz
-{
-    [self registerComponent:name withClass:clazz withProperties: @{@"append":@"tree"}];
-}
-
-+ (void)registerExtendCallNative:(NSString *)name withClass:(Class)clazz
-{
-    [WXExtendCallNativeManager registerExtendCallNative:name withClass:clazz];
-}
-
-+ (void)registerComponent:(NSString *)name withClass:(Class)clazz withProperties:(NSDictionary *)properties
-{
-    if (!name || !clazz) {
-        return;
-    }
-
-    WXAssert(name && clazz, @"Fail to register the component, please check if the parameters are correct !");
-    
-    [WXComponentFactory registerComponent:name withClass:clazz withPros:properties];
-    NSMutableDictionary *dict = [WXComponentFactory componentMethodMapsWithName:name];
-    dict[@"type"] = name;
-    if (properties) {
-        NSMutableDictionary *props = [properties mutableCopy];
-        if ([dict[@"methods"] count]) {
-            [props addEntriesFromDictionary:dict];
-        }
-        [[WXSDKManager bridgeMgr] registerComponents:@[props]];
-    } else {
-        [[WXSDKManager bridgeMgr] registerComponents:@[dict]];
-    }
-}
-
-
-# pragma mark Service Register
-
-+ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options
-{
-    [[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options completion:nil];
-}
-
-+ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion
-{
-    [[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options completion:completion];
-}
-
-+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options
-{
-    [[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options completion:nil];
-}
-
-+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion
-{
-    [[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options completion:completion];
-}
-
-+ (void)unregisterService:(NSString *)name
-{
-    [[WXSDKManager bridgeMgr] unregisterService:name];
-}
-
-# pragma mark Handler Register
-
-// register some default handlers when the engine initializes.
-+ (void)_registerDefaultHandlers
-{
-    [self registerHandler:[WXResourceRequestHandlerDefaultImpl new] withProtocol:@protocol(WXResourceRequestHandler)];
-    [self registerHandler:[WXNavigationDefaultImpl new] withProtocol:@protocol(WXNavigationProtocol)];
-    [self registerHandler:[WXURLRewriteDefaultImpl new] withProtocol:@protocol(WXURLRewriteProtocol)];
-    [self registerHandler:[WXJSFrameworkLoadDefaultImpl new] withProtocol:@protocol(WXJSFrameworkLoadProtocol)];
-}
-
-+ (void)registerHandler:(id)handler withProtocol:(Protocol *)protocol
-{
-    WXAssert(handler && protocol, @"Fail to register the handler, please check if the parameters are correct !");
-    
-    [WXHandlerFactory registerHandler:handler withProtocol:protocol];
-}
-
-+ (id)handlerForProtocol:(Protocol *)protocol
-{
-    WXAssert(protocol, @"Fail to get the handler, please check if the parameters are correct !");
-    
-    return  [WXHandlerFactory handlerForProtocol:protocol];
-}
-
-# pragma mark SDK Initialize
-
-+ (void)initSDKEnvironment
-{
-    NSString *fileName = @"weex-main-jsfm";
-    NSString *filePath = [[NSBundle bundleForClass:self] pathForResource:fileName ofType:@"js"];
-	if (filePath == nil) {
-		filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"js"];
-	}
-    NSString *script = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
-    [WXSDKEngine initSDKEnvironment:script];
-    
-#if TARGET_OS_SIMULATOR
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        [WXSimulatorShortcutManager registerSimulatorShortcutWithKey:@"i" modifierFlags:UIKeyModifierCommand | UIKeyModifierAlternate action:^{
-            NSURL *URL = [NSURL URLWithString:@"http://localhost:8687/launchDebugger"];
-            NSURLRequest *request = [NSURLRequest requestWithURL:URL];
-            
-            NSURLSession *session = [NSURLSession sharedSession];
-            NSURLSessionDataTask *task = [session dataTaskWithRequest:request
-                                                    completionHandler:
-                                          ^(NSData *data, NSURLResponse *response, NSError *error) {
-                                              // ...
-                                          }];
-            
-            [task resume];
-            WXLogInfo(@"Launching browser...");
-            
-            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-                [self connectDebugServer:@"ws://localhost:8687/debugger/0/renderer"];
-            });
-            
-        }];
-    });
-#endif
-}
-
-+ (void)initSDKEnvironment:(NSString *)script
-{
-    WX_MONITOR_PERF_START(WXPTInitalize)
-    WX_MONITOR_PERF_START(WXPTInitalizeSync)
-    
-    if (!script || script.length <= 0) {
-        NSMutableString *errMsg = [NSMutableString stringWithFormat:@"[WX_KEY_EXCEPTION_SDK_INIT_JSFM_INIT_FAILED] script don't exist:%@",script];
-        [WXExceptionUtils commitCriticalExceptionRT:@"WX_KEY_EXCEPTION_SDK_INIT" errCode:[NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_SDK_INIT] function:@"initSDKEnvironment" exception:errMsg extParams:nil];
-        WX_MONITOR_FAIL(WXMTJSFramework, WX_ERR_JSFRAMEWORK_LOAD, errMsg);
-        return;
-    }
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        [self registerDefaults];
-        [[WXSDKManager bridgeMgr] executeJsFramework:script];
-    });
-    
-    WX_MONITOR_PERF_END(WXPTInitalizeSync)
-    
-}
-
-+ (void)registerDefaults
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        [self _loadRenderPlugins];
-        [self _registerDefaultComponents];
-        [self _registerDefaultModules];
-        [self _registerDefaultHandlers];
-    });
-}
-
-+ (void)_loadRenderPlugins
-{
-    // Load agil render
-    Class agilRender = NSClassFromString(@"WXAgilRender");
-    if (agilRender) {
-        [agilRender initialize];
-    }
-}
-
-+ (NSString*)SDKEngineVersion
-{
-    return WX_SDK_VERSION;
-}
-
-+ (WXSDKInstance *)topInstance
-{
-    return [WXSDKManager bridgeMgr].topInstance;
-}
-
-
-static NSDictionary *_customEnvironment = nil;
-+ (void)setCustomEnvironment:(NSDictionary *)environment
-{
-    @synchronized (self) {
-        _customEnvironment = environment;
-    }
-}
-
-+ (NSDictionary *)customEnvironment
-{
-    NSDictionary* result = nil;
-    @synchronized (self) {
-        result = [_customEnvironment copy];
-    }
-    return result;
-}
-
-# pragma mark Debug
-
-+ (void)unload
-{
-    [WXSDKManager unload];
-    [WXComponentFactory unregisterAllComponents];
-}
-
-+ (void)restart
-{
-    NSString *fileName = @"weex-main-jsfm";
-    NSString *filePath = [[NSBundle bundleForClass:self] pathForResource:fileName ofType:@"js"];
-	if (filePath == nil) {
-		filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"js"];
-	}
-    NSString *script = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
-    [self restartWithScript:script];
-}
-
-+ (void)restartWithScript:(NSString*)script
-{
-    NSDictionary *components = [WXComponentFactory componentConfigs];
-    NSDictionary *modules = [WXModuleFactory moduleConfigs];
-    NSDictionary *handlers = [WXHandlerFactory handlerConfigs];
-    [WXSDKManager unload];
-    [WXComponentFactory unregisterAllComponents];
-    
-    [self _originalRegisterComponents:components];
-    [self _originalRegisterModules:modules];
-    [self _originalRegisterHandlers:handlers];
-    
-    [[WXSDKManager bridgeMgr] executeJsFramework:script];
-    
-    NSDictionary *jsSerices = [WXDebugTool jsServiceCache];
-    for(NSString *serviceName in jsSerices) {
-        NSDictionary *service = [jsSerices objectForKey:serviceName];
-        NSString *serviceName = [service objectForKey:@"name"];
-        NSString *serviceScript = [service objectForKey:@"script"];
-        NSDictionary *serviceOptions = [service objectForKey:@"options"];
-        [WXSDKEngine registerService:serviceName withScript:serviceScript withOptions:serviceOptions];
-    }
-}
-
-+ (void)connectDebugServer:(NSString*)URL
-{
-    [[WXSDKManager bridgeMgr] connectToWebSocket:[NSURL URLWithString:URL]];
-}
-
-+ (void)connectDevToolServer:(NSString *)URL
-{
-    [[WXSDKManager bridgeMgr] connectToDevToolWithUrl:[NSURL URLWithString:URL]];
-}
-
-+ (void)setGlobalDeviceSize:(CGSize)size
-{
-    [WXCoreBridge setDeviceSize:size];
-}
-
-+ (CGSize)getGlobalDeviceSize
-{
-    return [WXCoreBridge getDeviceSize];
-}
-
-+ (void)_originalRegisterComponents:(NSDictionary *)components {
-    NSMutableDictionary * mutableComponents = [components mutableCopy];
-    void (^componentBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        NSString *name = mObj[@"name"];
-        NSString *componentClass = mObj[@"clazz"];
-        NSDictionary *pros = nil;
-        if (mObj[@"pros"]) {
-            pros = mObj[@"pros"];
-        }
-        [self registerComponent:name withClass:NSClassFromString(componentClass) withProperties:pros];
-    };
-    [mutableComponents enumerateKeysAndObjectsUsingBlock:componentBlock];
-}
-
-+ (void)_originalRegisterModules:(NSDictionary *)modules {
-    NSMutableDictionary * mutableModules = [modules mutableCopy];
-    void (^moduleBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        
-        [self registerModule:mKey withClass:NSClassFromString(mObj)];
-    };
-    [mutableModules enumerateKeysAndObjectsUsingBlock:moduleBlock];
-}
-
-+ (void)_originalRegisterHandlers:(NSDictionary *)handlers {
-    NSMutableDictionary * mutableHandlers = [handlers mutableCopy];
-    void (^handlerBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        [self registerHandler:mObj withProtocol:NSProtocolFromString(mKey)];
-    };
-    [mutableHandlers enumerateKeysAndObjectsUsingBlock:handlerBlock];
-}
-
-@end
-
-@implementation WXSDKEngine (Deprecated)
-
-+ (void)initSDKEnviroment
-{
-    [self initSDKEnvironment];
-}
-
-+ (void)initSDKEnviroment:(NSString *)script
-{
-    [self initSDKEnvironment:script];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
deleted file mode 100644
index ddbfc19..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSDKInstance.h"
-
-#define WX_ERROR_GROUP_NATIVE   @"NATIVE"
-#define WX_ERROR_GROUP_JS       @"JS"
-#define WX_ERROR_GROUP_NET      @"NET"
-
-#define WX_ERROR_TYPE_NATIVE    @"NATIVE_ERROR"
-#define WX_ERROR_TYPE_JS        @"JS_ERROR"
-#define WX_ERROR_TYPE_DEGRADE   @"DEGRAD_ERROR"
-#define WX_ERROR_TYPE_RENDER    @"RENDER_ERROR"
-#define WX_ERROR_TYPE_DOWNLOAD  @"DOWN_LOAD_ERROR"
-
-typedef NS_ENUM(int, WXSDKUniversalErrCode)
-{
-    WX_UNI_KEY_EXCEPTION_DEGRADE = -1000,
-    WX_UNI_KEY_EXCEPTION_DEGRADE_CHECK_CONTENT_LENGTH_FAILED = -1003,
-    WX_UNI_KEY_EXCEPTION_DEGRADE_BUNDLE_CONTENTTYPE_ERROR = -1004,
-    WX_UNI_KEY_EXCEPTION_DEGRADE_OTHER_CAUSE = -1005,
-    WX_UNI_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR = -1007,
-    WX_UNI_KEY_EXCEPTION_DEGRADE_NET_CODE_CAUSE = -1008,
-};
-
-/* For legacy usage.
- Defines all error codes only for iOS platform which may be different from Android error codes.
- For monitor uploads, we will remap the error code to WXSDKUniversalErrCode above if an
- error code is declared having a remapped value.
- 
- You could either use WXSDKUniversalErrCode or WXSDKErrCode when committing an error.
- */
-typedef NS_ENUM(int, WXSDKErrCode)
-{
-    // No use
-    WX_ERR_JSFRAMEWORK_START = -1001,
-    WX_ERR_JSFRAMEWORK_LOAD = -1002,
-    WX_ERR_JSFRAMEWORK_EXECUTE = -1003,
-    WX_ERR_JSFRAMEWORK_END = -1099,
-    
-    WX_ERR_JSBRIDGE_START = -2001,
-    WX_ERR_JSFUNC_PARAM = -2009,
-    WX_ERR_INVOKE_NATIVE = -2012,
-    WX_ERR_JS_EXECUTE = -2013,
-    WX_ERR_JSBRIDGE_END = -2099,
-    
-    WX_ERR_RENDER_START = -2100,
-    WX_ERR_RENDER_CREATEBODY = -2100,
-    WX_ERR_RENDER_UPDATTR = -2101,
-    WX_ERR_RENDER_UPDSTYLE = -2102,
-    WX_ERR_RENDER_ADDELEMENT = -2103,
-    WX_ERR_RENDER_REMOVEELEMENT = -2104,
-    WX_ERR_RENDER_MOVEELEMENT = -2105,
-    WX_ERR_RENDER_ADDEVENT = -2106,
-    WX_ERR_RENDER_REMOVEEVENT = -2107,
-    WX_ERR_RENDER_SCROLLTOELEMENT = -2110,
-    WX_ERR_RENDER_TWICE = -2111,
-    WX_ERR_RENDER_END = -2199,
-    
-    WX_ERR_DOWNLOAD_START = -2201,
-    WX_ERR_JSBUNDLE_DOWNLOAD = -2202,
-    WX_ERR_JSBUNDLE_STRING_CONVERT = -2203,
-    WX_ERR_NOT_CONNECTED_TO_INTERNET = -2205,
-    WX_ERR_CANCEL = -2204,
-    WX_ERR_DOWNLOAD_END = -2299,
-    
-    WX_KEY_EXCEPTION_SDK_INIT = -9000,
-    WX_KEY_EXCEPTION_INVOKE = -9100,
-    WX_KEY_EXCEPTION_JS_DOWNLOAD =-9200,
-    WX_KEY_EXCEPTION_DOM = -9300,
-    WX_KEY_EXCEPTION_WXBRIDGE=-9400,
-    
-    // The following error codes have a remapped value defined in WXSDKUniversalErrCode
-    WX_KEY_EXCEPTION_DEGRADE = -9500,
-    WX_KEY_EXCEPTION_DEGRADE_CHECK_CONTENT_LENGTH_FAILED = -9501,
-    WX_KEY_EXCEPTION_DEGRADE_BUNDLE_CONTENTTYPE_ERROR = -9502,
-    WX_KEY_EXCEPTION_DEGRADE_OTHER_CAUSE = -9503,
-    WX_KEY_EXCEPTION_DEGRADE_NET_CODE_CAUSE = -9504,
-    WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR = -9505,
-    
-    // No use
-    WX_KEY_EXCEPTION_ABILITY_DOWN = -9600,
-    WX_KEY_EXCEPTION_ABILITY_DOWN_IMAGE = -9601,
-    WX_KEY_EXCEPTION_ABILITY_DOWN_TOH5 = -9602,
-    WX_KEY_EXCEPTION_ABILITY_DOWN_ = -9603,
-    
-    WX_KEY_EXCEPTION_EMPTY_SCREEN_JS = -9700,
-    WX_KEY_EXCEPTION_EMPTY_SCREEN_NATIVE = -9701,
-    
-    WX_KEY_EXCEPTION_TOO_MANY_TIMERS = -9800,
-    WX_KEY_EXCEPTION_NO_BUNDLE_TYPE = -9801,
-    
-    WX_KEY_EXCEPTION_HERON_ERROR = -9900,
-    WX_KEY_EXCEPTION_HERON_RENDER_ERROR = -9901,
-    
-};
-
-typedef NS_ENUM (NSInteger,WXSDKErrorType)
-{
-    WX_JS_ERROR,
-    WX_NATIVE_ERROR,
-    WX_RENDER_ERROR,
-    WX_DEGRADE_ERROR,
-    WX_DOWN_LOAD_ERROR
-};
-
-typedef NS_ENUM (NSInteger,WXSDKErrorGroup){
-    WX_JS,
-    WX_NATIVE,
-    WX_NET
-};
-
-@interface WXSDKErrCodeUtil :NSObject
-
-+ (WXSDKErrorType) getErrorTypeByCode:(WXSDKErrCode) code;
-+ (WXSDKErrorGroup) getErrorGroupByCode:(WXSDKErrCode) code;
-+ (NSString *) convertGroupToStringName:(WXSDKErrorGroup) group;
-+ (NSString *) convertTypeToStringName:(WXSDKErrorType)type;
-+ (NSString *) convertToUniversalCode:(WXSDKErrCode)code;
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m
deleted file mode 100644
index 28302b9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSDKError.h"
-
-#define ERROR_TYPE    @"type"
-#define ERROR_GROUP   @"group"
-#define ERROR_ALIAS   @"alias"
-
-@implementation WXSDKErrCodeUtil
-
-+(WXSDKErrorType)getErrorTypeByCode:(WXSDKErrCode)code
-{
-    NSDictionary* codeMap = [[self getMap] objectForKey:@(code)];
-    if (!codeMap) {
-        return WX_NATIVE_ERROR;
-    }
-    return [[codeMap objectForKey:ERROR_TYPE] intValue];
-}
-
-
-+(WXSDKErrorGroup) getErrorGroupByCode:(WXSDKErrCode)code
-{
-    NSDictionary* codeMap = [[self getMap] objectForKey:@(code)];
-    if (!codeMap) {
-        return WX_NATIVE;
-    }
-    return [[codeMap objectForKey:ERROR_GROUP] intValue];
-}
-
-+(NSDictionary *) getMap
-{
-    static NSDictionary *codeMap;
-    static dispatch_once_t onceToken;
-    
-    dispatch_once(&onceToken, ^{
-        
-        codeMap=@{
-                @(WX_ERR_JSFRAMEWORK_START):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_JSFRAMEWORK_LOAD):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_JSFRAMEWORK_EXECUTE):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_JSFRAMEWORK_END):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                
-                @(WX_ERR_JSBRIDGE_START):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_CREATEBODY):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_INVOKE_NATIVE):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_JS_EXECUTE):@{ERROR_TYPE:@(WX_JS_ERROR),ERROR_GROUP:@(WX_JS)},
-                @(WX_ERR_JSBRIDGE_END):@{ERROR_TYPE:@(WX_JS_ERROR),ERROR_GROUP:@(WX_JS)},
-                
-                @(WX_ERR_RENDER_START):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_UPDATTR):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_UPDSTYLE):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_ADDELEMENT):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_REMOVEELEMENT):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_MOVEELEMENT):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_ADDEVENT):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_REMOVEEVENT):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_SCROLLTOELEMENT):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_TWICE):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_RENDER_END):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                
-                @(WX_ERR_DOWNLOAD_START):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_JSBUNDLE_DOWNLOAD):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_JSBUNDLE_STRING_CONVERT):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_NOT_CONNECTED_TO_INTERNET):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_CANCEL):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_ERR_DOWNLOAD_END):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                
-                @(WX_KEY_EXCEPTION_SDK_INIT):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_INVOKE):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_JS_DOWNLOAD):@{ERROR_TYPE:@(WX_DOWN_LOAD_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_DOM):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_WXBRIDGE):@{ERROR_TYPE:@(WX_JS_ERROR),ERROR_GROUP:@(WX_JS)},
-                
-                @(WX_KEY_EXCEPTION_DEGRADE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NATIVE),ERROR_ALIAS:@(WX_UNI_KEY_EXCEPTION_DEGRADE)},
-                @(WX_KEY_EXCEPTION_DEGRADE_CHECK_CONTENT_LENGTH_FAILED):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET),ERROR_ALIAS:@(WX_UNI_KEY_EXCEPTION_DEGRADE_CHECK_CONTENT_LENGTH_FAILED)},
-                @(WX_KEY_EXCEPTION_DEGRADE_BUNDLE_CONTENTTYPE_ERROR):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET), ERROR_ALIAS:@(WX_UNI_KEY_EXCEPTION_DEGRADE_BUNDLE_CONTENTTYPE_ERROR)},
-                @(WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_JS),ERROR_ALIAS:@(WX_UNI_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR)},
-                @(WX_KEY_EXCEPTION_DEGRADE_OTHER_CAUSE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NATIVE),ERROR_ALIAS:@(WX_UNI_KEY_EXCEPTION_DEGRADE_OTHER_CAUSE)},
-                @(WX_KEY_EXCEPTION_DEGRADE_NET_CODE_CAUSE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET),ERROR_ALIAS:@(WX_UNI_KEY_EXCEPTION_DEGRADE_NET_CODE_CAUSE)},
-                
-                @(WX_KEY_EXCEPTION_ABILITY_DOWN):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_ABILITY_DOWN_IMAGE):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_ABILITY_DOWN_TOH5):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_ABILITY_DOWN_):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_EMPTY_SCREEN_JS):@{ERROR_TYPE:@(WX_RENDER_ERROR),ERROR_GROUP:@(WX_JS)},
-                @(WX_KEY_EXCEPTION_EMPTY_SCREEN_NATIVE):@{ERROR_TYPE:@(WX_RENDER_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                
-                @(WX_KEY_EXCEPTION_TOO_MANY_TIMERS):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_NO_BUNDLE_TYPE):@{ERROR_TYPE:@(WX_JS_ERROR),ERROR_GROUP:@(WX_JS)},
-                
-                @(WX_KEY_EXCEPTION_HERON_ERROR):@{ERROR_TYPE:@(WX_NATIVE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                @(WX_KEY_EXCEPTION_HERON_RENDER_ERROR):@{ERROR_TYPE:@(WX_RENDER_ERROR),ERROR_GROUP:@(WX_NATIVE)},
-                };
-    });
-    return codeMap;
-}
-
-+ (NSString *) convertTypeToStringName:(WXSDKErrorType)type
-{
-    switch (type) {
-        case WX_JS_ERROR:
-            return WX_ERROR_TYPE_JS;
-        case WX_RENDER_ERROR:
-            return WX_ERROR_TYPE_RENDER;
-        case WX_DEGRADE_ERROR:
-            return WX_ERROR_TYPE_DEGRADE;
-        case WX_DOWN_LOAD_ERROR:
-            return WX_ERROR_TYPE_DOWNLOAD;
-        case WX_NATIVE_ERROR:
-        default:
-            return WX_ERROR_TYPE_NATIVE;
-    }
-}
-
-+ (NSString *) convertGroupToStringName:(WXSDKErrorGroup)group
-{
-    switch (group) {
-        case WX_JS:
-            return WX_ERROR_GROUP_JS;
-        case WX_NET:
-            return WX_ERROR_GROUP_NET;
-        case WX_NATIVE:
-        default:
-            return WX_ERROR_GROUP_NATIVE;
-    }
-}
-
-+ (NSString *) convertToUniversalCode:(WXSDKErrCode)code
-{
-    id aliasCode = [[[self getMap] objectForKey:@(code)] objectForKey:ERROR_ALIAS];
-    if (aliasCode) {
-        return [aliasCode description];
-    }
-    else {
-        return [@(code) description];
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h
deleted file mode 100644
index bd6f31b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-#import <objc/runtime.h>
-
-@interface WXComponent (Events) <UIGestureRecognizerDelegate>
-- (BOOL)gestureShouldStopPropagation:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
deleted file mode 100644
index 0f163d5..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
+++ /dev/null
@@ -1,1040 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent+Events.h"
-#import "WXComponent.h"
-#import "WXComponent_internal.h"
-#import "WXSDKInstance.h"
-#import "WXComponentManager.h"
-#import "WXAssert.h"
-#import "WXUtility.h"
-#import "WXSDKManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXDefine.h"
-#import "WXRecycleListComponent.h"
-#import "WXRecycleListDataManager.h"
-#import <objc/runtime.h>
-#import <UIKit/UIGestureRecognizerSubclass.h>
-#import "WXComponent+PseudoClassManagement.h"
-#import "WXCoreBridge.h"
-
-#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-
-@interface UITouch (WXTouchGestureRecognizer)
-@property (nonatomic, strong) NSNumber *wx_identifier;
-@property (nonatomic, strong) NSNumber *wx_stopPropagation;
-@end
-
-@implementation UITouch (WXTouchGestureRecognizer)
-- (NSNumber *)wx_identifier
-{
-    return objc_getAssociatedObject(self, _cmd);
-}
-
-- (void)setWx_identifier:(NSNumber *)wx_identifier
-{
-    objc_setAssociatedObject(self, @selector(wx_identifier), wx_identifier, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-- (NSNumber *)wx_stopPropagation
-{
-    return objc_getAssociatedObject(self, _cmd);
-}
-
-- (void)setWx_stopPropagation:(NSNumber *)wx_stopPropagation
-{
-    objc_setAssociatedObject(self, @selector(wx_stopPropagation), wx_stopPropagation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-@end
-
-@interface UIGestureRecognizer (WXGesture)
-@property (nonatomic, strong) NSNumber *wx_identifier;
-@end
-
-@implementation UIGestureRecognizer (WXGesture)
-- (NSNumber *)wx_identifier
-{
-    NSNumber *identifier = objc_getAssociatedObject(self, _cmd);
-    if (!identifier) {
-        static NSUInteger _gestureIdentifier;
-        identifier = @(_gestureIdentifier++);
-        self.wx_identifier = identifier;
-    }
-    
-    return identifier;
-}
-
-- (void)setWx_identifier:(NSNumber *)wx_identifier
-{
-    objc_setAssociatedObject(self, @selector(wx_identifier), wx_identifier, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-@end
-
-@interface WXTouchGestureRecognizer : UIGestureRecognizer
-
-@property (nonatomic, assign) BOOL listenTouchStart;
-@property (nonatomic, assign) BOOL listenTouchMove;
-@property (nonatomic, assign) BOOL listenTouchEnd;
-@property (nonatomic, assign) BOOL listenTouchCancel;
-@property (nonatomic, assign) BOOL listenPseudoTouch;
-
-- (instancetype)initWithComponent:(WXComponent *)component NS_DESIGNATED_INITIALIZER;
-
-@end
-
-@interface WXEventManager :NSObject
-+ (instancetype) sharedManager;
-- (BOOL)stopPropagation:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params;
-@end
-
-@implementation WXEventManager
-
-- (instancetype) init
-{
-    self = [super init];
-    if (self) {
-        
-    }
-    return self;
-}
-
-+ (instancetype)sharedManager
-{
-    static id _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-    });
-    return _sharedInstance;
-}
-
-- (BOOL)stopPropagation:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params
-{
-    JSValue *value = [[WXSDKManager bridgeMgr] fireEventWithResult:instanceId ref:ref type:type params:params domChanges:nil];
-    
-    if ([value.toString isEqualToString:@"true"]) {
-        return YES;
-    }
-    return NO;
-}
-
-@end
-
-@implementation WXComponent (Events)
-
-#pragma mark Public
-
-- (void)fireEvent:(NSString *)eventName params:(NSDictionary *)params
-{
-    [self fireEvent:eventName params:params domChanges:nil];
-}
-
-- (void)fireEvent:(NSString *)eventName params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges
-{
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    NSTimeInterval timeSp = [[NSDate date] timeIntervalSince1970] * 1000;
-    [dict setObject:@(timeSp) forKey:@"timestamp"];
-    if (params) {
-        [dict addEntriesFromDictionary:params];
-    }
-    WXRecycleListComponent *recyleListComponent  = (WXRecycleListComponent*)[self getRecycleListComponent];
-    if (recyleListComponent) {
-        NSIndexPath *indexPath = [((UICollectionView*)recyleListComponent.view) indexPathForItemAtPoint:[self.view.superview
-                                                                                                          convertPoint:self.view.center toView:recyleListComponent.view]];
-        NSString *templateId = [self recursiveFindTemplateIdWithComponent:self];
-        NSString *virtualComponentId = [recyleListComponent.dataManager virtualComponentIdWithIndexPath:indexPath templateId:templateId];
-        if (virtualComponentId) {
-            dict[@"componentId"] = virtualComponentId;
-        }
-    }
-    
-    NSArray *handlerArguments = [self _paramsForEvent:eventName];
-    NSString *ref = _templateComponent ? _templateComponent.ref  : self.ref;
-    [[WXSDKManager bridgeMgr] fireEvent:self.weexInstance.instanceId ref:ref type:eventName params:dict domChanges:domChanges handlerArguments:handlerArguments];
-}
-
-- (NSString *)recursiveFindTemplateIdWithComponent:(WXComponent *)component
-{
-    if (!component) {
-        return nil;
-    }
-    if ([component isKindOfClass:NSClassFromString(@"WXCellSlotComponent")]) {
-        return nil;
-    }
-    if (component.attributes[@"@templateId"]) {
-        return component.attributes[@"@templateId"];
-    }
-    return [self recursiveFindTemplateIdWithComponent:component.supercomponent];
-}
-
-- (void)addEvent:(NSString *)addEventName
-{
-    WXAssertMainThread();
-}
-
-- (void)removeEvent:(NSString *)removeEventName
-{
-    WXAssertMainThread();
-}
-
-#pragma mark Add & Remove Event
-
-#define WX_ADD_EVENT(eventName, addSelector) \
-if ([addEventName isEqualToString:@#eventName]) {\
-    [self addSelector];\
-}
-
-#define WX_ADD_EVENTS(eventName1,eventName2, addSelector) \
-if ([addEventName isEqualToString:@#eventName1]||[addEventName isEqualToString:@#eventName2]) {\
-    [self addSelector:addEventName];\
-}
-
-#define WX_REMOVE_EVENT(eventName, removeSelector) \
-if ([removeEventName isEqualToString:@#eventName]) {\
-    [self removeSelector];\
-}
-
-#define WX_REMOVE_EVENTS(eventName1,eventName2, removeSelector) \
-if ([removeEventName isEqualToString:@#eventName1]||[removeEventName isEqualToString:@#eventName2]) {\
-    [self removeSelector];\
-}
-
-- (void)_initEvents:(NSArray *)events
-{
-    for (NSString *addEventName in events) {
-        [self _addEventOnMainThread:addEventName];
-    }
-}
-
-- (void)_initPseudoEvents:(BOOL)isListenPseudoTouch
-{
-    if(isListenPseudoTouch) {
-        self.touchGesture.listenPseudoTouch = YES;
-    }
-}
-
-- (void)_addEventOnMainThread:(NSString *)addEventName
-{
-    if (![self isViewLoaded]) {
-        //This action will be ignored While the view is loaded,
-        //then it will initEvent according to the records in _events
-        return;
-    }
-    WX_ADD_EVENT(appear, addAppearEvent)
-    WX_ADD_EVENT(disappear, addDisappearEvent)
-    
-    WX_ADD_EVENT(click, addClickEvent)
-    WX_ADD_EVENT(swipe, addSwipeEvent)
-    WX_ADD_EVENT(longpress, addLongPressEvent)
-    
-    WX_ADD_EVENT(panstart, addPanStartEvent)
-    WX_ADD_EVENT(panmove, addPanMoveEvent)
-    WX_ADD_EVENT(panend, addPanEndEvent)
-    
-    WX_ADD_EVENT(horizontalpan, addHorizontalPanEvent)
-    WX_ADD_EVENT(verticalpan, addVerticalPanEvent)
-    
-    WX_ADD_EVENT(touchstart, addTouchStartEvent)
-    WX_ADD_EVENT(touchmove, addTouchMoveEvent)
-    WX_ADD_EVENT(touchend, addTouchEndEvent)
-    WX_ADD_EVENT(touchcancel, addTouchCancelEvent)
-    WX_ADD_EVENT(accessibilityMagicTap, addAccessibilityMagicTapEvent)
-    
-    WX_ADD_EVENTS(stopPropagation, stoppropagation, addStopPropagationEvent)
-    
-    if(_isListenPseudoTouch) {
-        self.touchGesture.listenPseudoTouch = YES;
-    }
-    
-    [self addEvent:addEventName];
-}
-
-- (void)_removeEventOnMainThread:(NSString *)removeEventName
-{
-    WX_REMOVE_EVENT(appear, removeAppearEvent)
-    WX_REMOVE_EVENT(disappear, removeDisappearEvent)
-    
-    WX_REMOVE_EVENT(click, removeClickEvent)
-    WX_REMOVE_EVENT(swipe, removeSwipeEvent)
-    WX_REMOVE_EVENT(longpress, removeLongPressEvent)
-    
-    WX_REMOVE_EVENT(panstart, removePanStartEvent)
-    WX_REMOVE_EVENT(panmove, removePanMoveEvent)
-    WX_REMOVE_EVENT(panend, removePanEndEvent)
-    
-    WX_REMOVE_EVENT(horizontalpan, removeHorizontalPanEvent)
-    WX_REMOVE_EVENT(verticalpan, removeVerticalPanEvent)
-    
-    WX_REMOVE_EVENT(touchstart, removeTouchStartEvent)
-    WX_REMOVE_EVENT(touchmove, removeTouchMoveEvent)
-    WX_REMOVE_EVENT(touchend, removeTouchEndEvent)
-    WX_REMOVE_EVENT(touchcancel, removeTouchCancelEvent)
-    WX_REMOVE_EVENT(accessibilityMagicTap, removeAccessibilityMagicTapEvent)
-    
-    WX_REMOVE_EVENTS(stoppropagation,stopPropagation, removeStopPropagationEvent)
-
-    if(_isListenPseudoTouch) {
-        self.touchGesture.listenPseudoTouch = NO;
-    }
-
-    [self removeEvent:removeEventName];
-}
-
-- (void)_removeAllEvents
-{
-    [self removeClickEvent];
-    [self removeLongPressEvent];
-    [self removePanStartEvent];
-    [self removePanMoveEvent];
-    [self removePanEndEvent];
-    [self removeHorizontalPanEvent];
-    [self removeVerticalPanEvent];
-    
-    [self removeTouchStartEvent];
-    [self removeTouchMoveEvent];
-    [self removeTouchEndEvent];
-    [self removeTouchCancelEvent];
-    [self removeSwipeEvent];
-    [self removePseudoTouchEvent];
-}
-
-- (void)_collectSubcomponents:(NSMutableArray *)components
-{
-    for (WXComponent* c in _subcomponents) {
-        [components addObject:c];
-        [c _collectSubcomponents:components];
-    }
-}
-
-#pragma mark - Appear & Disappear
-
-- (void)addAppearEvent
-{
-    _appearEvent = YES;
-    [self.ancestorScroller addScrollToListener:self];
-}
-
-- (void)addDisappearEvent
-{
-    _disappearEvent = YES;
-    [self.ancestorScroller addScrollToListener:self];
-}
-
-- (void)removeAppearEvent
-{
-    _appearEvent = NO;
-    [self.ancestorScroller removeScrollToListener:self];
-}
-
-- (void)removeDisappearEvent
-{
-    _disappearEvent = NO;
-    [self.ancestorScroller removeScrollToListener:self];
-}
-
-- (void)removePseudoTouchEvent
-{
-    _touchGesture.listenPseudoTouch = NO;
-    [self checkRemoveTouchGesture];
-}
-
-#pragma mark - Accessibility Event
-
-- (void)addAccessibilityMagicTapEvent
-{
-    _accessibilityMagicTapEvent = YES;
-}
-
-- (void)removeAccessibilityMagicTapEvent
-{
-    _accessibilityMagicTapEvent = NO;
-}
-
-#pragma mark - StopPropagation
-
-- (void)addStopPropagationEvent:(NSString *)stopPropagationName
-{
-    _listenStopPropagation = YES;
-    _stopPropagationName = stopPropagationName;
-    self.touchGesture.listenTouchMove = YES;
-}
-
-- (void)removeStopPropagationEvent
-{
-    _listenStopPropagation = NO;
-    self.touchGesture.listenTouchMove = NO;
-}
-
-#pragma mark - Click Event
-
-- (void)addClickEvent
-{
-    if (!_tapGesture) {
-        _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onClick:)];
-        _tapGesture.delegate = self;
-        _tapGesture.cancelsTouchesInView = _cancelsTouchesInView;
-        [self.view addGestureRecognizer:_tapGesture];
-    }
-}
-
-- (void)removeClickEvent
-{
-    if (_tapGesture) {
-        _tapGesture.delegate = nil;
-        if ([self isViewLoaded]) {
-            if ([self.view.gestureRecognizers containsObject:_tapGesture]) {
-                [self.view removeGestureRecognizer:_tapGesture];
-            }
-        }
-        @try {
-            [_tapGesture removeTarget:self action:@selector(onClick:)];
-        }@catch(NSException *exception) {
-            WXLog(@"%@", exception);
-        } @finally {
-            
-        }
-        _tapGesture = nil;
-    }
-}
-
-- (void)onClick:(__unused UITapGestureRecognizer *)recognizer
-{
-    NSMutableDictionary *position = [[NSMutableDictionary alloc] initWithCapacity:4];
-    CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
-    if (![self isViewLoaded]) {
-        return;
-    }
-    if (!CGRectEqualToRect(self.view.frame, CGRectZero)) {
-        CGRect frame = [self.view.superview convertRect:self.view.frame toView:self.view.window];
-        position[@"x"] = @(frame.origin.x/scaleFactor);
-        position[@"y"] = @(frame.origin.y/scaleFactor);
-        position[@"width"] = @(frame.size.width/scaleFactor);
-        position[@"height"] = @(frame.size.height/scaleFactor);
-    }
-    [self fireEvent:@"click" params:@{@"position":position}];
-}
-
-#pragma mark - Swipe event
-
-- (void)addSwipeEvent
-{
-    if (_swipeGestures) {
-        return;
-    }
-    
-    _swipeGestures = [NSMutableArray arrayWithCapacity:4];
-    
-    // It's a little weird because the UISwipeGestureRecognizer.direction property is an options-style bit mask, but each recognizer can only handle one direction
-    SEL selector = @selector(onSwipe:);
-    UISwipeGestureRecognizer *upSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
-                                                                                            action:selector];
-    upSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
-    upSwipeRecognizer.delegate = self;
-    [_swipeGestures addObject:upSwipeRecognizer];
-    [self.view addGestureRecognizer:upSwipeRecognizer];
-    
-    UISwipeGestureRecognizer *downSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
-                                                                                              action:selector];
-    downSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
-    downSwipeRecognizer.delegate = self;
-    [_swipeGestures addObject:downSwipeRecognizer];
-    [self.view addGestureRecognizer:downSwipeRecognizer];
-    
-    UISwipeGestureRecognizer *rightSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
-                                                                                               action:selector];
-    rightSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
-    rightSwipeRecognizer.delegate = self;
-    [_swipeGestures addObject:rightSwipeRecognizer];
-    [self.view addGestureRecognizer:rightSwipeRecognizer];
-    
-    UISwipeGestureRecognizer *leftSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
-                                                                                              action:selector];
-    leftSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
-    leftSwipeRecognizer.delegate = self;
-    [_swipeGestures addObject:leftSwipeRecognizer];
-    [self.view addGestureRecognizer:leftSwipeRecognizer];
-}
-
-- (void)removeSwipeEvent
-{
-    if (_swipeGestures == nil) {
-        return;
-    }
-  
-    @try {
-        for (UISwipeGestureRecognizer *recognizer in _swipeGestures) {
-            recognizer.delegate = nil;
-            if([self isViewLoaded]) {
-                if ([[self.view gestureRecognizers] containsObject:recognizer]) {
-                    [self.view removeGestureRecognizer:recognizer];
-                }
-            }
-            [recognizer removeTarget:self action:@selector(onSwipe:)];
-        }
-    }@catch(NSException *exception) {
-        WXLog(@"%@", exception);
-    }@finally {
-        
-    }
-    _swipeGestures = nil;
-}
-
-- (void)onSwipe:(UISwipeGestureRecognizer *)gesture
-{
-    if (![self isViewLoaded]) {
-        return;
-    }
-    
-    UISwipeGestureRecognizerDirection direction = gesture.direction;
-    
-    NSString *directionString;
-    switch(direction) {
-        case UISwipeGestureRecognizerDirectionLeft:
-            directionString = @"left";
-            break;
-        case UISwipeGestureRecognizerDirectionRight:
-            directionString = @"right";
-            break;
-        case UISwipeGestureRecognizerDirectionUp:
-            directionString = @"up";
-            break;
-        case UISwipeGestureRecognizerDirectionDown:
-            directionString = @"down";
-            break;
-        default:
-            directionString = @"unknown";
-            break;
-    }
-    
-    CGPoint screenLocation = [gesture locationInView:self.view.window];
-    CGPoint pageLoacation = [gesture locationInView:self.weexInstance.rootView];
-    NSDictionary *resultTouch = [self touchResultWithScreenLocation:screenLocation pageLocation:pageLoacation identifier:gesture.wx_identifier];
-    [self fireEvent:@"swipe" params:@{@"direction":directionString, @"changedTouches":resultTouch ? @[resultTouch] : @[]}];
-}
-
-#pragma mark - Long Press
-
-- (void)addLongPressEvent
-{
-    if (!_longPressGesture) {
-        _longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onLongPress:)];
-        _longPressGesture.delegate = self;
-        [self.view addGestureRecognizer:_longPressGesture];
-    }
-}
-
-- (void)removeLongPressEvent
-{
-    if (_longPressGesture) {
-        _longPressGesture.delegate = nil;
-        if ([self isViewLoaded]) {
-            if([[self.view gestureRecognizers] containsObject:_longPressGesture]) {
-                [self.view removeGestureRecognizer:_longPressGesture];
-            }
-        }
-        @try {
-            [_longPressGesture removeTarget:self action:@selector(onLongPress:)];
-        }@catch(NSException * exception) {
-            WXLog(@"%@", exception);
-        }@finally {
-            
-        }
-        _longPressGesture = nil;
-    }
-}
-
-- (void)onLongPress:(UILongPressGestureRecognizer *)gesture
-{
-    if (![self isViewLoaded]) {
-        return;
-    }
-    
-    if (gesture.state == UIGestureRecognizerStateBegan) {
-        CGPoint screenLocation = [gesture locationInView:self.view.window];
-        CGPoint pageLoacation = [gesture locationInView:self.weexInstance.rootView];
-        NSDictionary *resultTouch = [self touchResultWithScreenLocation:screenLocation pageLocation:pageLoacation identifier:gesture.wx_identifier];
-        [self fireEvent:@"longpress" params:@{@"changedTouches":resultTouch ? @[resultTouch] : @[]}];
-    } else if (gesture.state == UIGestureRecognizerStateEnded) {
-        gesture.wx_identifier = nil;
-    }
-}
-
-#pragma mark - Pan
-
-- (void)addPanGesture
-{
-    if (!_panGesture) {
-        _panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onPan:)];
-        _panGesture.delegate = self;
-        [self.view addGestureRecognizer:_panGesture];
-    }
-}
-
-- (void)addPanStartEvent
-{
-    _listenPanStart = YES;
-    [self addPanGesture];
-}
-
-- (void)addPanMoveEvent
-{
-    _listenPanMove = YES;
-    [self addPanGesture];
-}
-
-- (void)addPanEndEvent
-{
-    _listenPanEnd = YES;
-    [self addPanGesture];
-}
-
-- (void)addHorizontalPanEvent
-{
-    _listenHorizontalPan = YES;
-    [self addPanGesture];
-}
-
-- (void)addVerticalPanEvent
-{
-    _listenVerticalPan = YES;
-    [self addPanGesture];
-}
-
-
-- (void)onPan:(UIPanGestureRecognizer *)gesture
-{
-    if (![self isViewLoaded]) {
-        return;
-    }
-    
-    CGPoint screenLocation = [gesture locationInView:self.view.window];
-    CGPoint pageLoacation = [gesture locationInView:self.weexInstance.rootView];
-    NSString *eventName;
-    NSString *state = @"";
-    NSDictionary *resultTouch = [self touchResultWithScreenLocation:screenLocation pageLocation:pageLoacation identifier:gesture.wx_identifier];
-    
-    if (gesture.state == UIGestureRecognizerStateBegan) {
-        if (_listenPanStart) {
-            eventName = @"panstart";
-        }
-        state = @"start";
-    } else if (gesture.state == UIGestureRecognizerStateEnded) {
-        if (_listenPanEnd) {
-            eventName = @"panend";
-        }
-        state = @"end";
-        gesture.wx_identifier = nil;
-    } else if (gesture.state == UIGestureRecognizerStateChanged) {
-        if (_listenPanMove) {
-             eventName = @"panmove";
-        }
-        state = @"move";
-    } else if (gesture.state == UIGestureRecognizerStateCancelled) {
-        state = @"cancel";
-    }
-    
-    CGPoint translation = [_panGesture translationInView:self.view];
-    
-    if (_listenHorizontalPan && (gesture.state != UIGestureRecognizerStateBegan || fabs(translation.y) <= fabs(translation.x))) {
-        [self fireEvent:@"horizontalpan" params:@{@"state":state, @"changedTouches":resultTouch ? @[resultTouch] : @[]}];
-    }
-        
-    if (_listenVerticalPan && (gesture.state != UIGestureRecognizerStateBegan || fabs(translation.y) >= fabs(translation.x))) {
-        [self fireEvent:@"verticalpan" params:@{@"state":state, @"changedTouches":resultTouch ? @[resultTouch] : @[]}];
-    }
-        
-    if (eventName) {
-        [self fireEvent:eventName params:@{@"changedTouches":resultTouch ? @[resultTouch] : @[]}];
-    }
-}
-
-- (void)removePanStartEvent
-{
-    _listenPanStart = NO;
-    [self checkRemovePanGesture];
-}
-
-- (void)removePanMoveEvent
-{
-    _listenPanMove = NO;
-    [self checkRemovePanGesture];
-}
-
-- (void)removePanEndEvent
-{
-    _listenPanEnd = NO;
-    [self checkRemovePanGesture];
-}
-
-- (void)removeHorizontalPanEvent
-{
-    _listenHorizontalPan = NO;
-    [self checkRemovePanGesture];
-}
-
-- (void)removeVerticalPanEvent
-{
-    _listenVerticalPan = NO;
-    [self checkRemovePanGesture];
-}
-
-- (void)checkRemovePanGesture
-{
-    if (_panGesture
-        && !_listenPanStart && !_listenPanMove && !_listenPanEnd
-        && !_listenHorizontalPan && !_listenVerticalPan
-        ) {
-        
-        if ([self isViewLoaded]) {
-            if ([[self.view gestureRecognizers] containsObject:_panGesture]) {
-                [self.view removeGestureRecognizer:_panGesture];
-            }
-        }
-        
-        _panGesture.delegate = nil;
-        @try {
-            [_panGesture removeTarget:self action:@selector(onPan:)];
-        }@catch(NSException * exception) {
-            WXLog(@"%@", exception);
-        }@finally {
-            
-        }
-        _panGesture = nil;
-    }
-}
-
-#pragma mark - Touch Event
-
-- (WXTouchGestureRecognizer *)touchGesture
-{
-    if (!_touchGesture) {
-        _touchGesture = [[WXTouchGestureRecognizer alloc] initWithComponent:self];
-        _touchGesture.delegate = self;
-        [self.view addGestureRecognizer:_touchGesture];
-    }
-    return _touchGesture;
-}
-
-- (void)addTouchStartEvent
-{
-    self.touchGesture.listenTouchStart = YES;
-}
-
-- (void)addTouchMoveEvent
-{
-    self.touchGesture.listenTouchMove = YES;
-}
-
-- (void)addTouchEndEvent
-{
-    self.touchGesture.listenTouchEnd = YES;
-}
-
-- (void)addTouchCancelEvent
-{
-    self.touchGesture.listenTouchCancel = YES;
-}
-
-- (void)removeTouchStartEvent
-{
-    _touchGesture.listenTouchStart = NO;
-    [self checkRemoveTouchGesture];
-}
-
-- (void)removeTouchMoveEvent
-{
-    _touchGesture.listenTouchMove = NO;
-    [self checkRemoveTouchGesture];
-}
-
-- (void)removeTouchEndEvent
-{
-    _touchGesture.listenTouchEnd = NO;
-    [self checkRemoveTouchGesture];
-}
-
-- (void)removeTouchCancelEvent
-{
-    _touchGesture.listenTouchCancel = NO;
-    [self checkRemoveTouchGesture];
-}
-
-- (void)checkRemoveTouchGesture
-{
-    if (_touchGesture && !_touchGesture.listenTouchStart && !_touchGesture.listenTouchMove && !_touchGesture.listenTouchEnd && !_touchGesture.listenTouchCancel && !_touchGesture.listenPseudoTouch) {
-        _touchGesture.delegate = nil;
-        if ([self isViewLoaded]) {
-            if ([[self.view gestureRecognizers] containsObject:_touchGesture]) {
-                [self.view removeGestureRecognizer:_touchGesture];
-            }
-        }
-        _touchGesture = nil;
-    }
-}
-
-- (BOOL)gestureShouldStopPropagation:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    if(touch.wx_stopPropagation && [touch.wx_stopPropagation isEqualToNumber:@1]){
-        return NO;
-    }
-    else
-    {
-        if (_listenStopPropagation)
-        {
-            NSString *ref = _templateComponent ? _templateComponent.ref : self.ref;
-            CGPoint screenLocation = [touch locationInView:touch.window];
-            CGPoint pageLocation = [touch locationInView:self.weexInstance.rootView];
-            NSDictionary *resultTouch = [self touchResultWithScreenLocation:screenLocation pageLocation:pageLocation identifier:touch.wx_identifier];
-            NSString *touchState;
-            if (touch.phase == UITouchPhaseBegan) {
-                touchState = @"start";
-            }
-            else if (touch.phase == UITouchPhaseMoved){
-                touchState = @"move";
-            }
-            else{
-                touchState = @"end";
-            }
-            BOOL stopPropagation = [[WXEventManager sharedManager]stopPropagation:self.weexInstance.instanceId ref:ref type:_stopPropagationName params:@{@"changedTouches":resultTouch ? @[resultTouch] : @[],@"action":touchState}];
-            touch.wx_stopPropagation = stopPropagation ? @1 : @0;
-            
-            //only custom event on custom component will make not receive touch
-            //you can use custom-event="yes" to enable this feature
-            return _customEvent ? !stopPropagation : YES;
-        }
-    }
-    return YES;
-}
-
-#pragma mark - UIGestureRecognizerDelegate
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
-{
-    return [self gestureShouldStopPropagation:gestureRecognizer shouldReceiveTouch:touch];
-}
-
-- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
-{
-    if (gestureRecognizer == _panGesture) {
-        CGPoint translation = [_panGesture translationInView:self.view];
-        if (_listenHorizontalPan && !_listenVerticalPan && fabs(translation.y) > fabs(translation.x)) {
-            return NO;
-        }
-    }
-    return YES;
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
-{
-    NSString * panGestureRecog = [NSString stringWithFormat:@"%@%@%@%@%@%@",@"UIScrollV", @"iewPanG", @"estur",@"eRecog",@"nize",@"r"];
-    NSString * textTap = [NSString stringWithFormat:@"%@%@%@%@%@",@"UITe",@"xtTa",@"pReco",@"gniz",@"er"];
-    // trigger touches
-    if ([gestureRecognizer isKindOfClass:[WXTouchGestureRecognizer class]]) {
-        return YES;
-    }
-    // swipe and scroll
-    if ([gestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:NSClassFromString(panGestureRecog)]) {
-        return YES;
-    }
-    // onclick and textviewInput
-    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass: NSClassFromString(textTap)]) {
-        return YES;
-    }
-    
-    return NO;
-}
-
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
-{
-    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] &&
-        [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
-        if (otherGestureRecognizer.state != UIGestureRecognizerStateFailed) {
-            if ([gestureRecognizer view].wx_component != nil && [otherGestureRecognizer view].wx_component != nil) {
-                return YES;
-            }
-        }
-    }
-    
-    return NO;
-}
-
-#pragma mark - Utils
-
-- (NSDictionary *)touchResultWithScreenLocation:(CGPoint)screenLocation pageLocation:(CGPoint)pageLocation identifier:(NSNumber *)identifier
-{
-    NSMutableDictionary *resultTouch = [[NSMutableDictionary alloc] initWithCapacity:5];
-    CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
-    resultTouch[@"screenX"] = @(screenLocation.x/scaleFactor);
-    resultTouch[@"screenY"] = @(screenLocation.y/scaleFactor);
-    resultTouch[@"pageX"] = @(pageLocation.x/scaleFactor);
-    resultTouch[@"pageY"] = @(pageLocation.y/scaleFactor);
-    resultTouch[@"identifier"] = identifier;
-    
-    return resultTouch;
-}
-
-// find virtual component's root component
-- (WXComponent*)getRecycleListComponent
-{
-    if ([self isKindOfClass:[WXRecycleListComponent class]]) {
-        return self;
-    }
-    if ([self.ref isEqualToString:WX_SDK_ROOT_REF]) {
-        return nil;
-    }
-    return [self.supercomponent getRecycleListComponent];
-}
-
-@end
-
-@implementation WXTouchGestureRecognizer
-{
-    __weak WXComponent *_component;
-    NSUInteger _touchIdentifier;
-}
-
-- (instancetype)initWithTarget:(id)target action:(SEL)action
-{
-    return [self initWithComponent:nil];;
-}
-
-- (instancetype)initWithComponent:(WXComponent *)component
-{
-    if (self = [super initWithTarget:self action:@selector(touchResponse:)]) {
-        _component = component;
-        
-        _listenTouchStart = NO;
-        _listenTouchEnd = NO;
-        _listenTouchMove = NO;
-        _listenTouchCancel = NO;
-        
-        self.cancelsTouchesInView = NO;
-    }
-    
-    return self;
-}
-
-- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-{
-    [super touchesBegan:touches withEvent:event];
-    
-    if (_listenTouchStart) {
-        [self fireTouchEvent:@"touchstart" withTouches:touches];
-    }
-    if(_listenPseudoTouch) {
-        NSMutableDictionary *styles = [_component getPseudoClassStyles:@"active"];
-        [_component updatePseudoClassStyles:styles];
-    }
-
-}
-
-- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-{
-    [super touchesMoved:touches withEvent:event];
-    
-    if (_listenTouchMove) {
-        [self fireTouchEvent:@"touchmove" withTouches:touches];
-    }
-}
-
-- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-{
-    
-    [super touchesEnded:touches withEvent:event];
-    
-    if (_listenTouchEnd) {
-        [self fireTouchEvent:@"touchend" withTouches:touches];
-    }
-    if(_listenPseudoTouch) {
-        [self recoveryPseudoStyles:_component.styles];
-    }
-
-}
-
-- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-{
-    [super touchesCancelled:touches withEvent:event];
-    
-    if (_listenTouchCancel) {
-        [self fireTouchEvent:@"touchcancel" withTouches:touches];
-    }
-    if(_listenPseudoTouch) {
-        [self recoveryPseudoStyles:_component.styles];
-    }
-}
-
-- (void)fireTouchEvent:(NSString *)eventName withTouches:(NSSet<UITouch *> *)touches
-{
-    if (_component == nil) {
-        return;
-    }
-    
-    NSMutableArray *resultTouches = [NSMutableArray new];
-    
-    CGPoint accmOffset = CGPointZero;
-    UIView* rootView = _component.weexInstance.rootView;
-//    UIView* view = self.view;
-//    while (view && view != rootView) {
-//        if ([view isKindOfClass:[UIScrollView class]]) {
-//            CGPoint offset = ((UIScrollView*)view).contentOffset;
-//            accmOffset.x += offset.x;
-//            accmOffset.y += offset.y;
-//        }
-//        view = view.superview;
-//    }
-    
-    for (UITouch *touch in touches) {
-        CGPoint screenLocation = [touch locationInView:touch.window];
-        CGPoint pageLocation = [touch locationInView:rootView];
-        pageLocation.x += accmOffset.x;
-        pageLocation.y += accmOffset.y;
-      
-        if (!touch.wx_identifier) {
-            touch.wx_identifier = @(_touchIdentifier++);
-        }
-        NSDictionary *resultTouch = [_component touchResultWithScreenLocation:screenLocation pageLocation:pageLocation identifier:touch.wx_identifier];
-        NSMutableDictionary * mutableResultTouch = [resultTouch mutableCopy];
-        
-        float value = touch.force*60;
-        float maxValue = touch.maximumPossibleForce*60;
-        if (touch.maximumPossibleForce) {
-            // the forece value will be range 1 from 0.
-            [mutableResultTouch setObject:[NSNumber numberWithFloat:value/maxValue] forKey:@"force"];
-        }else {
-            [mutableResultTouch setObject:[NSNumber numberWithFloat:0.0] forKey:@"force"];
-        }
-        
-        if (mutableResultTouch) { // component is nil, mutableResultTouch will be nil
-            [resultTouches addObject:mutableResultTouch];
-        }
-    }
-    
-    [_component fireEvent:eventName params:@{@"changedTouches":resultTouches ?: @[]}];
-}
-
-- (void)recoveryPseudoStyles:(NSDictionary *)styles
-{
-    [_component recoveryPseudoStyles:styles];
-}
-
-- (void)touchResponse:(UIGestureRecognizer *)gesture
-{
-    
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.h
deleted file mode 100644
index 1663e3e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXJSFrameworkLoadProtocol.h"
-
-@interface WXJSFrameworkLoadDefaultImpl : NSObject <WXJSFrameworkLoadProtocol>
-
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.m
deleted file mode 100644
index 3d9e95c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXJSFrameworkLoadDefaultImpl.m
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXJSFrameworkLoadDefaultImpl.h"
-#import "WXLog.h"
-
-@interface WXJSFrameworkLoadDefaultImpl()
-@end
-
-@implementation WXJSFrameworkLoadDefaultImpl
-
-- (void)loadRaxFramework:(WXJSFrameworkLoadBlock)block
-{
-    [self loadJSFramework:@"weex-rax-api" block:block];
-}
-
-- (void)loadPolyfillFramework:(WXJSFrameworkLoadBlock)block
-{
-    [self loadJSFramework:@"weex-polyfill" block:block];
-}
-
-- (void)loadJSFramework:(NSString *)name block:(WXJSFrameworkLoadBlock)block
-{
-    NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:name ofType:@"js"];
-    if (path == nil) {
-        path = [[NSBundle mainBundle] pathForResource:name ofType:@"js"];
-    }
-    NSString *script = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
-    if (!script) {
-        WXLogError(@"%@ js can not found",name);
-    }
-    if (block) {
-        block(path, script);
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h
deleted file mode 100644
index 7cd156d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXNavigationProtocol.h"
-
-@interface WXNavigationDefaultImpl : NSObject <WXNavigationProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.m
deleted file mode 100644
index 40b3ff3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.m
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXNavigationDefaultImpl.h"
-#import "WXBaseViewController.h"
-#import "WXSDKManager.h"
-#import "WXComponent.h"
-#import "WXImgLoaderProtocol.h"
-#import "WXHandlerFactory.h"
-#import "WXConvert.h"
-
-@interface WXBarButton :UIButton
-
-@property (nonatomic, strong) NSString *instanceId;
-@property (nonatomic, strong) NSString *nodeRef;
-@property (nonatomic)  WXNavigationItemPosition position;
-
-@end
-
-@implementation WXBarButton
-
-@end
-
-@implementation WXNavigationDefaultImpl
-
-#pragma mark -
-#pragma mark WXNavigationProtocol
-
-- (id<WXImgLoaderProtocol>)imageLoader
-{
-    static id<WXImgLoaderProtocol> imageLoader;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        imageLoader = [WXHandlerFactory handlerForProtocol:@protocol(WXImgLoaderProtocol)];
-    });
-    return imageLoader;
-}
-
-- (id)navigationControllerOfContainer:(UIViewController *)container
-{
-    return container.navigationController;
-}
-
-- (void)pushViewControllerWithParam:(NSDictionary *)param completion:(WXNavigationResultBlock)block
-                      withContainer:(UIViewController *)container
-{
-    if (0 == [param count] || !param[@"url"] || !container) {
-        [self callback:block code:MSG_PARAM_ERR data:nil];
-        return;
-    }
-    
-    BOOL animated = YES;
-    id animatedArgument = [param objectForKey:@"animated"];
-    if (animatedArgument && [animatedArgument respondsToSelector:@selector(boolValue)]) {
-        animated = [animatedArgument boolValue];
-    }
-    
-    WXBaseViewController *vc = [[WXBaseViewController alloc]initWithSourceURL:[NSURL URLWithString:param[@"url"]]];
-    vc.hidesBottomBarWhenPushed = YES;
-    [container.navigationController pushViewController:vc animated:animated];
-    [self callback:block code:MSG_SUCCESS data:nil];
-}
-
-- (void)popViewControllerWithParam:(NSDictionary *)param completion:(WXNavigationResultBlock)block
-                     withContainer:(UIViewController *)container
-{
-    BOOL animated = YES;
-    id obj = [param objectForKey:@"animated"];
-    if (obj) {
-        animated = [WXConvert BOOL:obj];
-    }
-    
-    [container.navigationController popViewControllerAnimated:animated];
-    [self callback:block code:MSG_SUCCESS data:nil];
-}
-
-- (void)popToRootViewControllerWithParam:(NSDictionary *)param
-                              completion:(WXNavigationResultBlock)block
-                           withContainer:(UIViewController *)container
-{
-    BOOL animated = YES;
-    NSString *obj = [[param objectForKey:@"animated"] lowercaseString];
-    if (obj && [obj isEqualToString:@"false"]) {
-        animated = NO;
-    }
-    
-    [container.navigationController popToRootViewControllerAnimated:animated];
-    [self callback:block code:MSG_SUCCESS data:nil];
-}
-
-- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated
-                 withContainer:(UIViewController *)container
-{
-    if (![container isKindOfClass:[WXBaseViewController class]]) {
-        return;
-    }
-    
-    container.navigationController.navigationBarHidden = hidden;
-}
-
-- (void)setNavigationBackgroundColor:(UIColor *)backgroundColor
-                       withContainer:(UIViewController *)container
-{
-    if (backgroundColor) {
-        container.navigationController.navigationBar.barTintColor = backgroundColor;
-    }
-}
-
-- (void)setNavigationItemWithParam:(NSDictionary *)param
-                          position:(WXNavigationItemPosition)position
-                        completion:(WXNavigationResultBlock)block
-                     withContainer:(UIViewController *)container
-{
-    switch (position) {
-        case WXNavigationItemPositionLeft:
-            [self setNaviBarLeftItem:param completion:block withContainer:container];
-            break;
-        case WXNavigationItemPositionRight:
-            [self setNaviBarRightItem:param completion:block withContainer:container];
-            break;
-        case WXNavigationItemPositionMore:
-            break;
-        case WXNavigationItemPositionCenter:
-            [self setNaviBarTitle:param completion:block withContainer:container];
-            break;
-        default:
-            break;
-    }
-}
-
-- (void)clearNavigationItemWithParam:(NSDictionary *)param
-                            position:(WXNavigationItemPosition)position
-                          completion:(WXNavigationResultBlock)block
-                       withContainer:(UIViewController *)container
-{
-    switch (position) {
-        case WXNavigationItemPositionLeft:
-            [self clearNaviBarLeftItem:param completion:block withContainer:container];
-            break;
-        case WXNavigationItemPositionRight:
-            [self clearNaviBarRightItem:param completion:block withContainer:container];
-            break;
-        case WXNavigationItemPositionMore:
-            break;
-        case WXNavigationItemPositionCenter:
-            [self clearNaviBarTitle:param completion:block withContainer:container];
-            break;
-        default:
-            break;
-    }
-}
-
-- (void)setNaviBarLeftItem:(NSDictionary *)param completion:(WXNavigationResultBlock)block
-              withContainer:(UIViewController *)container
-{
-    if (0 == [param count]) {
-        [self callback:block code:MSG_PARAM_ERR data:nil];
-        return;
-    }
-    
-    UIView *view = [self barButton:param position:WXNavigationItemPositionLeft withContainer:container];
-    
-    if (!view) {
-        [self callback:block code:MSG_FAILED data:nil];
-        return;
-    }
-    
-    container.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];
-    
-    [self callback:block code:MSG_SUCCESS data:nil];
-}
-
-- (void)clearNaviBarLeftItem:(NSDictionary *) param completion:(WXNavigationResultBlock)block
-                withContainer:(UIViewController *)container
-{
-    container.navigationItem.leftBarButtonItem = nil;
-    
-    [self callback:block code:MSG_SUCCESS data:nil];
-}
-
-- (void)setNaviBarRightItem:(NSDictionary *)param completion:(WXNavigationResultBlock)block
-              withContainer:(UIViewController *)container
-{
-    if (0 == [param count]) {
-        [self callback:block code:MSG_PARAM_ERR data:nil];
-        return;
-    }
-    
-    UIView *view = [self barButton:param position:WXNavigationItemPositionRight withContainer:container];
-    
-    if (!view) {
-        [self callback:block code:MSG_FAILED data:nil];
-        return;
-    }
-    
-    container.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];
-    
-    [self callback:block code:MSG_SUCCESS data:nil];
-}
-
-- (void)clearNaviBarRightItem:(NSDictionary *) param completion:(WXNavigationResultBlock)block
-                withContainer:(UIViewController *)container
-{
-    container.navigationItem.rightBarButtonItem = nil;
-    
-    [self callback:block code:MSG_SUCCESS data:nil];
-}
-
-- (void)setNaviBarTitle:(NSDictionary *)param completion:(WXNavigationResultBlock)block
-          withContainer:(UIViewController *)container
-{
-    if (0 == [param count]) {
-        [self callback:block code:MSG_PARAM_ERR data:nil];
-        return;
-    }
-    
-    container.navigationItem.title = param[@"title"];
-    
-    [self callback:block code:MSG_SUCCESS data:nil];;
-}
-
-- (void)clearNaviBarTitle:(NSDictionary *)param completion:(WXNavigationResultBlock)block
-            withContainer:(UIViewController *)container
-{
-    container.navigationItem.title = @"";
-    
-    [self callback:block code:MSG_SUCCESS data:nil];
-}
-
-- (UIView *)barButton:(NSDictionary *)param position:(WXNavigationItemPosition)position
-        withContainer:(UIViewController *)container
-{
-    if (param[@"title"]) {
-        NSString *title = param[@"title"];
-
-        NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:18]};
-        CGSize size = [title boundingRectWithSize:CGSizeMake(70.0f, 18.0f) options: NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attribute context:nil].size;
-        
-        WXBarButton *button = [WXBarButton buttonWithType:UIButtonTypeRoundedRect];
-        button.frame = CGRectMake(0, 0, size.width, size.height);
-        button.titleLabel.font = [UIFont systemFontOfSize:16];
-        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
-        [button setTitleColor:[UIColor whiteColor]  forState:UIControlStateHighlighted];
-        [button setTitle:title forState:UIControlStateNormal];
-        [button setTitle:title forState:UIControlStateHighlighted];
-        [button addTarget:self action:@selector(onClickBarButton:) forControlEvents:UIControlEventTouchUpInside];
-        
-        button.instanceId = param[@"instanceId"];
-        button.nodeRef = param[@"nodeRef"];
-        button.position = position;
-        
-        NSString *color = param[@"titleColor"];
-        if (color) {
-            [button setTitleColor:[WXConvert UIColor:color] forState:UIControlStateNormal];
-            [button setTitleColor:[WXConvert UIColor:color] forState:UIControlStateHighlighted];
-        }
-        
-        return button;
-    }
-    else if (param[@"icon"]) {
-        NSString *icon = param[@"icon"];
-        
-        if (icon) {
-            WXBarButton *button = [WXBarButton buttonWithType:UIButtonTypeRoundedRect];
-            button.frame = CGRectMake(0, 0, 25, 25);
-            button.instanceId = param[@"instanceId"];
-            button.nodeRef = param[@"nodeRef"];
-            button.position = position;
-            [button addTarget:self action:@selector(onClickBarButton:) forControlEvents:UIControlEventTouchUpInside];
-            
-            [[self imageLoader] downloadImageWithURL:icon imageFrame:CGRectMake(0, 0, 25, 25) userInfo:@{@"instanceId":self.weexInstance.instanceId} completed:^(UIImage *image, NSError *error, BOOL finished) {
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    [button setBackgroundImage:image forState:UIControlStateNormal];
-                    [button setBackgroundImage:image forState:UIControlStateHighlighted];
-                });
-            }];
-            
-            return button;
-        }
-    }
-    
-    return nil;
-}
-
-- (UIView *)titleView:(NSDictionary *)param
-{
-    UIView *titleView = nil;
-    
-    if (param[@"title"]) {
-        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 200.0f, 20.0f)];
-        label.backgroundColor = [UIColor clearColor];
-        label.textAlignment = NSTextAlignmentCenter;
-        label.lineBreakMode = NSLineBreakByTruncatingTail;
-        label.textColor = [UIColor whiteColor];
-        label.font = [UIFont systemFontOfSize:18.0f];
-        label.text = param[@"title"];
-        
-        UIColor *titleColor = param[@"titleColor"];
-        if (titleColor) {
-            label.textColor = [WXConvert UIColor:titleColor];
-        }
-        else {
-            label.textColor = [UIColor blueColor];
-        }
-        titleView = label;
-    }
-    
-    return titleView;
-}
-
-- (void)onClickBarButton:(id)sender
-{
-    WXBarButton *button = (WXBarButton *)sender;
-    if (button.instanceId) {
-        if (button.nodeRef)
-        {
-            [[WXSDKManager bridgeMgr] fireEvent:button.instanceId ref:button.nodeRef type:@"click" params:nil domChanges:nil] ;
-        }
-        else
-        {
-            NSString *eventType;
-            switch (button.position) {
-                case WXNavigationItemPositionLeft:
-                    eventType = @"clickleftitem";
-                    break;
-                case WXNavigationItemPositionRight:
-                    eventType = @"clickrightitem";
-                    break;
-                case WXNavigationItemPositionMore:
-                    eventType = @"clickmoreitem";
-                    break;
-                default:
-                    break;
-            }
-            
-           [[WXSDKManager bridgeMgr] fireEvent:button.instanceId ref:WX_SDK_ROOT_REF type:eventType params:nil domChanges:nil];
-        }
-    }
-}
-
-- (void)callback:(WXNavigationResultBlock)block code:(NSString *)code data:(NSDictionary *)reposonData
-{
-    if (block) {
-        block(code, reposonData);
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h
deleted file mode 100644
index 7a9b1f3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXURLRewriteProtocol.h"
-
-@interface WXURLRewriteDefaultImpl : NSObject <WXURLRewriteProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.m
deleted file mode 100644
index 7f7d08f..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.m
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXURLRewriteDefaultImpl.h"
-#import "WXLog.h"
-#import "WXSDKInstance.h"
-
-static NSString *const WXURLLocalScheme = @"local";
-
-@implementation WXURLRewriteDefaultImpl
-
-- (NSURL *)rewriteURL:(NSString *)url
-     withResourceType:(WXResourceType)resourceType
-         withInstance:(WXSDKInstance *)instance
-{
-    NSURL *completeURL = [NSURL URLWithString:url];
-    if ([completeURL isFileURL]) {
-        return completeURL;
-    } else if ([self isLocalURL:completeURL]) {
-        NSString *resourceName = [[completeURL host]?:@"" stringByAppendingString:[completeURL path]];
-        NSURL *resourceURL = [[NSBundle mainBundle] URLForResource:resourceName withExtension:@""];
-        if (!resourceURL) {
-            WXLogError(@"Invalid local resource URL:%@, no resouce found.", url);
-        }
-        
-        return resourceURL;
-    } else {
-        return [instance completeURL:url];
-    }
-}
-
-- (BOOL)isLocalURL:(NSURL *)url
-{
-    return[[[url scheme] lowercaseString] isEqualToString:WXURLLocalScheme];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h
deleted file mode 100644
index 4b883f0..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-#import "WXSDKInstance.h"
-#import "WXUtility.h"
-
-#define FlexUndefined NAN
-
-#ifdef __cplusplus
-#include "layout.h"
-
-typedef WeexCore::WXCoreFlexDirection WXCoreFlexDirection;
-typedef WeexCore::WXCoreFlexWrap WXCoreFlexWrap;
-typedef WeexCore::WXCoreJustifyContent WXCoreJustifyContent;
-typedef WeexCore::WXCoreAlignItems WXCoreAlignItems;
-typedef WeexCore::WXCoreAlignSelf WXCoreAlignSelf;
-typedef WeexCore::WXCorePositionType WXCorePositionType;
-typedef WeexCore::WXCoreDirection WXCoreDirection;
-
-extern "C" {
-#endif
-    bool flexIsUndefined(float value);
-#ifdef __cplusplus
-}
-#endif
-
-#ifndef __cplusplus
-// Ensure that .m files can use css style enum definitions.
-#include "flex_enum.h"
-
-typedef enum WXCoreFlexDirection WXCoreFlexDirection;
-typedef enum WXCoreFlexWrap WXCoreFlexWrap;
-typedef enum WXCoreJustifyContent WXCoreJustifyContent;
-typedef enum WXCoreAlignItems WXCoreAlignItems;
-typedef enum WXCoreAlignSelf WXCoreAlignSelf;
-typedef enum WXCorePositionType WXCorePositionType;
-typedef enum WXCoreDirection WXCoreDirection;
-
-#endif
-
-@interface WXComponent ()
-{
-    @package
-#ifdef __cplusplus
-    WeexCore::WXCoreLayoutNode *_flexCssNode;
-#endif // __cplusplus
-
-    CGRect _calculatedFrame;
-    CGPoint _absolutePosition;
-    WXPositionType _positionType;
-    BOOL _isLastLayoutDirectionRTL;
-    BOOL _isLayoutDirectionRTL;
-}
-
-/**
- * @abstract Return the css node used to layout.
- *
- * @warning Subclasses must not override this.
- */
-#ifdef __cplusplus
-@property (nonatomic, readonly, assign) WeexCore::WXCoreLayoutNode *flexCssNode;
-#endif
-
-/**
- * @abstract Get css style value for key. The key should be of CSS standard form.
- *  This method is for convenience use in C/ObjC environment. And if you want to
- *  retrieve all style values or in C++, you could use flexCssNode directly.
- *
- *  Thread usage:
- *      This method should be invoked in component thread by WXPerformBlockOnComponentThread.
- *      Note that all initWithRef methods of WXComponent and its subclasses are performed in
- *      component thread by default. Therefore you can call this method directly in initWithRef.
- *
- *  Supported keys:
- *      width, height, min-width, min-height, max-width, max-height,
- *      margin-(left/right/top/bottom)
- *      padding-(left/right/top/bottom)
- *      border-(left/right/top/bottom)-width
- *      left, right, top, bottom
- *      flex-grow
- */
-- (float)getCssStyleValueForKey:(NSString *)key;
-
-/**
- * @abstract Get css style flex-direction. Thread usage the same as getCssStyleValueForKey.
- */
-- (WXCoreFlexDirection)getCssStyleFlexDirection;
-
-/**
- * @abstract Get css style flex-wrap. Thread usage the same as getCssStyleValueForKey.
- */
-- (WXCoreFlexWrap)getCssStyleFlexWrap;
-
-/**
- * @abstract Get css style justify-content. Thread usage the same as getCssStyleValueForKey.
- */
-- (WXCoreJustifyContent)getCssStyleJustifyContent;
-
-/**
- * @abstract Get css style align-items. Thread usage the same as getCssStyleValueForKey.
- */
-- (WXCoreAlignItems)getCssStyleAlignItems;
-
-/**
- * @abstract Get css style align-self. Thread usage the same as getCssStyleValueForKey.
- */
-- (WXCoreAlignSelf)getCssStyleAlignSelf;
-
-/**
- * @abstract Get css style position. Thread usage the same as getCssStyleValueForKey.
- */
-- (WXCorePositionType)getCssStylePositionType;
-
-/**
- * @abstract Get css layout direction. Thread usage the same as getCssStyleValueForKey.
- */
-- (WXCoreDirection)getCssDirection;
-
-/**
- * @abstract Convert layout dimension value like 'left', 'width' to style value in js considering viewport and scale.
- */
-- (NSString*)convertLayoutValueToStyleValue:(NSString*)valueName;
-
-/**
- * @abstract Get style width of a container(scroller like) with safe value. No NAN, No zero.
- */
-- (CGFloat)safeContainerStyleWidth;
-
-/**
- * @abstract Delete css node of a subcomponent.
- */
-- (void)removeSubcomponentCssNode:(WXComponent *)subcomponent;
-
-#pragma mark - RTL
-
-@property (nonatomic, assign, readonly) BOOL isDirectionRTL;
-
-// Now we scrollView RTL solution is tranform
-// so scrollView need tranform subviews when RTL by default
-// if your component view is not scrollView but also implement RTL layout by tranform,you need return YES
-- (BOOL)shouldTransformSubviewsWhenRTL;
-
-- (void)layoutDirectionDidChanged:(BOOL)isRTL;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm
deleted file mode 100644
index ef877ca..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm
+++ /dev/null
@@ -1,855 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent+Layout.h"
-#import "WXComponent_internal.h"
-#import "WXTransform.h"
-#import "WXAssert.h"
-#import "WXSDKInstance_private.h"
-#import "WXComponent+BoxShadow.h"
-#import "WXLog.h"
-#import "WXMonitor.h"
-#import "WXSDKInstance_performance.h"
-#import "WXCellComponent.h"
-#import "WXCoreBridge.h"
-
-bool flexIsUndefined(float value) {
-    return isnan(value);
-}
-
-@implementation WXComponent (Layout)
-
-#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-
-#pragma mark Public
-
-- (void)setNeedsLayout
-{
-    if (_flexCssNode != nullptr) {
-        _flexCssNode->markDirty();
-    }
-}
-
-- (BOOL)needsLayout
-{
-    if (_flexCssNode != nullptr) {
-        return _flexCssNode->isDirty();
-    }
-    else {
-        return false;
-    }
-}
-
-- (CGSize (^)(CGSize))measureBlock
-{
-    return nil;
-}
-
-- (void)layoutDidFinish
-{
-    WXAssertMainThread();
-}
-
-- (void)updateLayoutStyles:(NSDictionary*)styles
-{
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callUpdateStyle:self.weexInstance.instanceId ref:self.ref data:styles];
-    });
-}
-
-#pragma mark Private
-
-- (void)_setRenderObject:(void *)object
-{
-    if (object) {
-        _flexCssNode = static_cast<WeexCore::WXCoreLayoutNode*>(object);
-        _flexCssNode->setContext((__bridge void *)self); // bind
-        if ([self measureBlock]) {
-            _flexCssNode->setMeasureFunc(flexCssNodeMeasure);
-        }
-    }
-    else if (_flexCssNode) {
-        _flexCssNode->setContext(nullptr);
-        _flexCssNode = nullptr;
-    }
-}
-
-- (void)_updateCSSNodeStyles:(NSDictionary *)styles
-{
-    [self _fillCSSNode:styles isUpdate:YES];
-}
-
--(void)_resetCSSNodeStyles:(NSArray *)styles
-{
-    [self _resetCSSNode:styles];
-}
-
-- (void)_frameDidCalculated:(BOOL)isChanged
-{
-    WXAssertComponentThread();
-    if (isChanged && [self isKindOfClass:[WXCellComponent class]]) {
-        CGFloat mainScreenWidth = [[UIScreen mainScreen] bounds].size.width;
-        CGFloat mainScreenHeight = [[UIScreen mainScreen] bounds].size.height;
-        if (mainScreenHeight/2 < _calculatedFrame.size.height && mainScreenWidth/2 < _calculatedFrame.size.width) {
-            [self weexInstance].performance.cellExceedNum++;
-            [self.weexInstance.apmInstance updateFSDiffStats:KEY_PAGE_STATS_CELL_EXCEED_NUM withDiffValue:1];
-        }
-    }
-    
-    if ([self isViewLoaded] && isChanged && [self isViewFrameSyncWithCalculated]) {
-        
-        __weak typeof(self) weakSelf = self;
-        [self.weexInstance.componentManager _addUITask:^{
-            __strong typeof(weakSelf) strongSelf = weakSelf;
-            
-            if (strongSelf == nil) {
-                return;
-            }
-            
-            // Check again incase that this property is set to NO in another UI task.
-            if (![strongSelf isViewFrameSyncWithCalculated]) {
-                return;
-            }
-            
-            if (strongSelf->_transform && !CATransform3DEqualToTransform(strongSelf.layer.transform, CATransform3DIdentity)) {
-                // From the UIView's frame documentation:
-                // https://developer.apple.com/reference/uikit/uiview#//apple_ref/occ/instp/UIView/frame
-                // Warning : If the transform property is not the identity transform, the value of this property is undefined and therefore should be ignored.
-                // So layer's transform must be reset to CATransform3DIdentity before setFrame, otherwise frame will be incorrect
-                strongSelf.layer.transform = CATransform3DIdentity;
-            }
-            
-            if (!CGRectEqualToRect(strongSelf.view.frame,strongSelf.calculatedFrame)) {
-                strongSelf.view.frame = strongSelf.calculatedFrame;
-                strongSelf->_absolutePosition = CGPointMake(NAN, NAN);
-                [strongSelf configBoxShadow:strongSelf->_boxShadow];
-            } else {
-                if (![strongSelf equalBoxShadow:strongSelf->_boxShadow withBoxShadow:strongSelf->_lastBoxShadow]) {
-                    [strongSelf configBoxShadow:strongSelf->_boxShadow];
-                }
-            }
-            
-            [strongSelf _resetNativeBorderRadius];
-            
-            if ([WXUtility enableRTLLayoutDirection]) {
-                if ([strongSelf isDirectionRTL] != strongSelf -> _isLastLayoutDirectionRTL) {
-                    strongSelf -> _isLastLayoutDirectionRTL = [strongSelf isDirectionRTL];
-                    [strongSelf _layoutDirectionDidChanged:[strongSelf isDirectionRTL]];
-                }
-            }
-            
-            if (strongSelf->_transform) {
-                [strongSelf->_transform applyTransformForView:strongSelf.view];
-            }
-            
-            [strongSelf _adjustForRTL];
-            
-            if (strongSelf->_backgroundImage) {
-                [strongSelf setGradientLayer];
-            }
-            
-            [strongSelf setNeedsDisplay];
-        }];
-    } else if ([WXUtility enableRTLLayoutDirection]) {
-        // if frame is not change, we still need check was layoutDirection changed
-        if ([self isDirectionRTL] != _isLastLayoutDirectionRTL) {
-            self -> _isLastLayoutDirectionRTL = [self isDirectionRTL];
-            __weak typeof(self) weakSelf = self;
-            [self.weexInstance.componentManager _addUITask:^{
-                __strong typeof(weakSelf) strongSelf = weakSelf;
-                [strongSelf _layoutDirectionDidChanged:[strongSelf isDirectionRTL]];
-                if (strongSelf->_transform) {
-                    [strongSelf->_transform applyTransformForView:strongSelf.view];
-                }
-                [strongSelf _adjustForRTL];
-            }];
-        }
-    }
-}
-
-- (void)_layoutDirectionDidChanged:(BOOL)isRTL {
-    WXAssertMainThread();
-    [self layoutDirectionDidChanged:isRTL];
-}
-
-- (void)layoutDirectionDidChanged:(BOOL)isRTL {
-    
-}
-
-- (void)_layoutDidFinish
-{
-    WXAssertMainThread();
-
-    if (_positionType == WXPositionTypeSticky) {
-        [self.ancestorScroller adjustSticky];
-    }
-
-    [self layoutDidFinish];
-}
-
-#define WX_STYLE_FLEX_NODE_JUDGE_LEGAL(key) styles[key]&&!isnan([WXConvert WXPixelType:styles[key] scaleFactor:self.weexInstance.pixelScaleFactor])
-
-- (CGFloat)WXPixelType:(id)value
-{
-    return [WXConvert WXPixelType:value scaleFactor:self.weexInstance.pixelScaleFactor];
-}
-
-- (void)_fillCSSNode:(NSDictionary *)styles isUpdate:(BOOL)isUpdate
-{
-    if (_flexCssNode == nullptr) {
-        return;
-    }
-
-    BOOL needLayout = NO;
-    
-    // CSS direction for RTL Layout
-    if (styles[@"direction"]) {
-        _flexCssNode->setDirection([self fxDirection:styles[@"direction"]], isUpdate);
-        needLayout = YES;
-    }
-    
-    // flex
-    if (styles[@"flex"]) {
-        _flexCssNode->set_flex([WXConvert CGFloat:styles[@"flex"]]);
-        needLayout = YES;
-    }
-    if (isnan(_flexCssNode->getFlex())) {
-        // to make the default flex value is zero, yoga is nan, maybe this can configured by yoga config
-        _flexCssNode->set_flex(0);
-        needLayout = YES;
-    }
-    
-    if (styles[@"flexDirection"]) {
-        _flexCssNode->setFlexDirection([self fxFlexDirection:styles[@"flexDirection"]], isUpdate);
-        needLayout = YES;
-    }
-    if (styles[@"alignItems"]) {
-        _flexCssNode->setAlignItems([self fxAlign:styles[@"alignItems"]]);
-        needLayout = YES;
-    }
-    if (styles[@"alignSelf"]) {
-        _flexCssNode->setAlignSelf([self fxAlignSelf:styles[@"alignSelf"]]);
-        needLayout = YES;
-    }
-    if (styles[@"flexWrap"]) {
-        _flexCssNode->setFlexWrap([self fxWrap:styles[@"flexWrap"]]);
-        needLayout = YES;
-    }
-    if (styles[@"justifyContent"]) {
-        _flexCssNode->setJustifyContent([self fxJustify:styles[@"justifyContent"]]);
-        needLayout = YES;
-    }
-    
-    // position
-    if (styles[@"position"]) {
-        _flexCssNode->setStylePositionType([self fxPositionType:styles[@"position"]]);
-        needLayout = YES;
-    }
-    if (styles[@"top"]) {
-        _flexCssNode->setStylePosition(WeexCore::kPositionEdgeTop,
-                                       [self judgePropValuePropValue:styles[@"top"] defaultValue:NAN]);
-        needLayout = YES;
-    }
-    if (styles[@"left"]) {
-        _flexCssNode->setStylePosition(WeexCore::kPositionEdgeLeft,
-                                       [self judgePropValuePropValue:styles[@"left"] defaultValue:NAN]);
-        needLayout = YES;
-    }
-    if(styles[@"right"]) {
-        _flexCssNode->setStylePosition(WeexCore::kPositionEdgeRight,
-                                       [self judgePropValuePropValue:styles[@"right"] defaultValue:NAN]);
-        needLayout = YES;
-    }
-    if (styles[@"bottom"]) {
-        _flexCssNode->setStylePosition(WeexCore::kPositionEdgeBottom,
-                                       [self judgePropValuePropValue:styles[@"bottom"] defaultValue:NAN]);
-        needLayout = YES;
-    }
-    
-    // dimension
-    if (styles[@"width"]) {
-        _flexCssNode->setStyleWidth([self judgePropValuePropValue:styles[@"width"] defaultValue:NAN], isUpdate);
-        needLayout = YES;
-    }
-    if (styles[@"height"]) {
-        _flexCssNode->setStyleHeight([self judgePropValuePropValue:styles[@"height"] defaultValue:NAN]);
-        needLayout = YES;
-    }
-    if (styles[@"minWidth"]) {
-        _flexCssNode->setMinWidth([self judgePropValuePropValue:styles[@"minWidth"] defaultValue:NAN], isUpdate);
-        needLayout = YES;
-    }
-    if (styles[@"minHeight"]) {
-        _flexCssNode->setMinHeight([self judgePropValuePropValue:styles[@"minHeight"] defaultValue:NAN]);
-        needLayout = YES;
-    }
-    if (styles[@"maxWidth"]) {
-        _flexCssNode->setMaxWidth([self judgePropValuePropValue:styles[@"maxWidth"] defaultValue:NAN], isUpdate);
-        needLayout = YES;
-    }
-    if (styles[@"maxHeight"]) {
-        _flexCssNode->setMaxHeight([self judgePropValuePropValue:styles[@"maxHeight"] defaultValue:NAN]);
-        needLayout = YES;
-    }
-    
-    // margin
-    if (styles[@"margin"]) {
-        _flexCssNode->setMargin(WeexCore::kMarginALL,
-                                [self judgePropValuePropValue:styles[@"margin"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"marginTop"]) {
-        _flexCssNode->setMargin(WeexCore::kMarginTop,
-                                [self judgePropValuePropValue:styles[@"marginTop"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"marginBottom"]) {
-        _flexCssNode->setMargin(WeexCore::kMarginBottom,
-                                [self judgePropValuePropValue:styles[@"marginBottom"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"marginRight"]) {
-        _flexCssNode->setMargin(WeexCore::kMarginRight,
-                                [self judgePropValuePropValue:styles[@"marginRight"] defaultValue:0]);
-    }
-    if (styles[@"marginLeft"]) {
-        _flexCssNode->setMargin(WeexCore::kMarginLeft,
-                                [self judgePropValuePropValue:styles[@"marginLeft"] defaultValue:0]);
-        needLayout = YES;
-    }
-    
-    // border
-    if (styles[@"borderWidth"]) {
-        _flexCssNode->setBorderWidth(WeexCore::kBorderWidthALL,
-                                     [self judgePropValuePropValue:styles[@"borderWidth"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"borderTopWidth"]) {
-        _flexCssNode->setBorderWidth(WeexCore::kBorderWidthTop,
-                                     [self judgePropValuePropValue:styles[@"borderTopWidth"] defaultValue:0]);
-        needLayout = YES;
-    }
-    
-    if (styles[@"borderLeftWidth"]) {
-        _flexCssNode->setBorderWidth(WeexCore::kBorderWidthLeft,
-                                     [self judgePropValuePropValue:styles[@"borderLeftWidth"] defaultValue:0]);
-        needLayout = YES;
-    }
-    
-    if (styles[@"borderBottomWidth"]) {
-        _flexCssNode->setBorderWidth(WeexCore::kBorderWidthBottom,
-                                     [self judgePropValuePropValue:styles[@"borderBottomWidth"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"borderRightWidth"]) {
-        _flexCssNode->setBorderWidth(WeexCore::kBorderWidthRight,
-                                     [self judgePropValuePropValue:styles[@"borderRightWidth"] defaultValue:0]);
-        needLayout = YES;
-    }
-    
-    // padding
-    if (styles[@"padding"]) {
-        _flexCssNode->setPadding(WeexCore::kPaddingALL,
-                                 [self judgePropValuePropValue:styles[@"padding"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"paddingTop"]) {
-        _flexCssNode->setPadding(WeexCore::kPaddingTop,
-                                 [self judgePropValuePropValue:styles[@"paddingTop"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"paddingLeft"]) {
-        _flexCssNode->setPadding(WeexCore::kPaddingLeft,
-                                 [self judgePropValuePropValue:styles[@"paddingLeft"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"paddingBottom"]) {
-        _flexCssNode->setPadding(WeexCore::kPaddingBottom,
-                                 [self judgePropValuePropValue:styles[@"paddingBottom"] defaultValue:0]);
-        needLayout = YES;
-    }
-    if (styles[@"paddingRight"]) {
-        _flexCssNode->setPadding(WeexCore::kPaddingRight,
-                                 [self judgePropValuePropValue:styles[@"paddingRight"] defaultValue:0]);
-        needLayout = YES;
-    }
-    
-    if (needLayout) {
-        [self setNeedsLayout];
-    }
-}
-
-- (CGFloat)judgePropValuePropValue:(id)propValue defaultValue:(CGFloat)defaultValue
-{
-    CGFloat convertValue = (CGFloat)[WXConvert WXFlexPixelType:propValue scaleFactor:self.weexInstance.pixelScaleFactor];
-    if (!isnan(convertValue)) {
-        return convertValue;
-    }
-    return defaultValue;
-}
-
-- (float)getCssStyleValueForKey:(NSString *)key
-{
-    /*
-     *      width, height, min-width, min-height, max-width, max-height,
-     *      margin-(left/right/top/bottom)
-     *      padding-(left/right/top/bottom)
-     *      border-(left/right/top/bottom)-width
-     *      left, right, top, bottom
-     *      flex-grow
-     */
-    WXAssert(_flexCssNode != nullptr, @"Css node is null.");
-    if (_flexCssNode == nullptr) {
-        return NAN;
-    }
-    
-    std::string ckey = [key UTF8String];
-    if (ckey == "width") return _flexCssNode->getStyleWidth();
-    if (ckey == "height") return _flexCssNode->getStyleHeight();
-    if (ckey == "min-width") return _flexCssNode->getMinWidth();
-    if (ckey == "min-height") return _flexCssNode->getMinHeight();
-    if (ckey == "max-width") return _flexCssNode->getMaxWidth();
-    if (ckey == "max-height") return _flexCssNode->getMaxHeight();
-    if (ckey == "margin-left") return _flexCssNode->getMarginLeft();
-    if (ckey == "margin-right") return _flexCssNode->getMarginRight();
-    if (ckey == "margin-top") return _flexCssNode->getMarginTop();
-    if (ckey == "margin-bottom") return _flexCssNode->getMarginBottom();
-    if (ckey == "padding-left") return _flexCssNode->getPaddingLeft();
-    if (ckey == "padding-right") return _flexCssNode->getPaddingRight();
-    if (ckey == "padding-top") return _flexCssNode->getPaddingTop();
-    if (ckey == "padding-bottom") return _flexCssNode->getPaddingBottom();
-    if (ckey == "border-left-width") return _flexCssNode->getBorderWidthLeft();
-    if (ckey == "border-right-width") return _flexCssNode->getBorderWidthRight();
-    if (ckey == "border-top-width") return _flexCssNode->getBorderWidthTop();
-    if (ckey == "border-bottom-width") return _flexCssNode->getBorderWidthBottom();
-    if (ckey == "left") return _flexCssNode->getStylePositionLeft();
-    if (ckey == "right") return _flexCssNode->getStylePositionRight();
-    if (ckey == "top") return _flexCssNode->getStylePositionTop();
-    if (ckey == "bottom") return _flexCssNode->getStylePositionBottom();
-    if (ckey == "flex-grow") return _flexCssNode->getFlex();
-    
-    WXAssert(NO, @"Invalid css style key %@", key);
-    return NAN;
-}
-
-- (WXCoreFlexDirection)getCssStyleFlexDirection
-{
-    WXAssert(_flexCssNode != nullptr, @"Css node is null.");
-    return _flexCssNode ? _flexCssNode->getFlexDirection() : kFlexDirectionColumn;
-}
-
-- (WXCoreFlexWrap)getCssStyleFlexWrap
-{
-    WXAssert(_flexCssNode != nullptr, @"Css node is null.");
-    return _flexCssNode ? _flexCssNode->getFlexWrap() : kNoWrap;
-}
-
-- (WXCoreJustifyContent)getCssStyleJustifyContent
-{
-    WXAssert(_flexCssNode != nullptr, @"Css node is null.");
-    return _flexCssNode ? _flexCssNode->getJustifyContent() : kJustifyFlexStart;
-}
-
-- (WXCoreAlignItems)getCssStyleAlignItems
-{
-    WXAssert(_flexCssNode != nullptr, @"Css node is null.");
-    return _flexCssNode ? _flexCssNode->getAlignItems() : kAlignItemsStretch;
-}
-
-- (WXCoreAlignSelf)getCssStyleAlignSelf
-{
-    WXAssert(_flexCssNode != nullptr, @"Css node is null.");
-    return _flexCssNode ? _flexCssNode->getAlignSelf() : kAlignSelfAuto;
-}
-
-- (WXCorePositionType)getCssStylePositionType
-{
-    WXAssert(_flexCssNode != nullptr, @"Css node is null.");
-    return _flexCssNode ? _flexCssNode->getStylePositionType() : kRelative;
-}
-
-- (WXCoreDirection)getCssDirection
-{
-    WXAssert(_flexCssNode != nullptr, @"Css node is null.");
-    return _flexCssNode ? _flexCssNode->getDirection() : WEEXCORE_CSS_DEFAULT_DIRECTION;
-}
-
-- (NSString*)convertLayoutValueToStyleValue:(NSString*)valueName
-{
-    if (_flexCssNode == nullptr) {
-        return @"0";
-    }
-    
-    float layoutValue = 0;
-    if ([valueName isEqualToString:@"left"])
-        layoutValue = _flexCssNode->getLayoutPositionLeft();
-    else if ([valueName isEqualToString:@"right"])
-        layoutValue = _flexCssNode->getLayoutPositionRight();
-    else if ([valueName isEqualToString:@"top"])
-        layoutValue = _flexCssNode->getLayoutPositionTop();
-    else if ([valueName isEqualToString:@"bottom"])
-        layoutValue = _flexCssNode->getLayoutPositionBottom();
-    else if ([valueName isEqualToString:@"width"])
-        layoutValue = _flexCssNode->getLayoutWidth();
-    else if ([valueName isEqualToString:@"height"])
-        layoutValue = _flexCssNode->getLayoutHeight();
-    else
-        return @"0";
-    
-    layoutValue /= self.weexInstance.pixelScaleFactor;
-    return [NSString stringWithFormat:@"%f", layoutValue];
-}
-
-- (CGFloat)safeContainerStyleWidth
-{
-    if (_flexCssNode == nullptr) {
-        return 0.0f;
-    }
-    
-    CGFloat thisValue = _flexCssNode->getStyleWidth();
-    if (isnan(thisValue)) {
-        if (_flexCssNode->getParent()) {
-            thisValue = _flexCssNode->getParent()->getLayoutWidth(); // parent may be layout done
-            if (isnan(thisValue)) {
-                thisValue = _flexCssNode->getParent()->getStyleWidth();
-            }
-        }
-    }
-    
-    if (isnan(thisValue)) {
-        thisValue = self.weexInstance.frame.size.width;
-    }
-    
-    if (isnan(thisValue) || thisValue == 0.0f) {
-        thisValue = [UIScreen mainScreen].bounds.size.width;
-    }
-    
-    return thisValue;
-}
-
-#define WX_FLEX_STYLE_RESET_CSS_NODE(key, defaultValue)\
-do {\
-    WX_FLEX_STYLE_RESET_CSS_NODE_GIVEN_KEY(key,key,defaultValue)\
-} while(0);
-
-#define WX_FLEX_STYLE_RESET_CSS_NODE_GIVEN_KEY(judgeKey, propKey, defaultValue)\
-do {\
-    if (styles && [styles containsObject:@#judgeKey]) {\
-        NSMutableDictionary *resetStyleDic = [[NSMutableDictionary alloc] init];\
-        [resetStyleDic setValue:defaultValue forKey:@#propKey];\
-        [self _updateCSSNodeStyles:resetStyleDic];\
-        [self setNeedsLayout];\
-    }\
-} while(0);
-
-#define WX_FLEX_STYLE_RESET_CSS_NODE_GIVEN_DIRECTION_KEY(judgeKey, propTopKey,propLeftKey,propRightKey,propBottomKey, defaultValue)\
-do {\
-    if (styles && [styles containsObject:@#judgeKey]) {\
-        NSMutableDictionary *resetStyleDic = [[NSMutableDictionary alloc] init];\
-        [resetStyleDic setValue:defaultValue forKey:@#propTopKey];\
-        [resetStyleDic setValue:defaultValue forKey:@#propLeftKey];\
-        [resetStyleDic setValue:defaultValue forKey:@#propRightKey];\
-        [resetStyleDic setValue:defaultValue forKey:@#propBottomKey];\
-        [self _updateCSSNodeStyles:resetStyleDic];\
-        [self setNeedsLayout];\
-    }\
-} while(0);
-
-
-- (void)_resetCSSNode:(NSArray *)styles
-{
-        if (styles.count<=0) {
-            return;
-        }
-    
-        WX_FLEX_STYLE_RESET_CSS_NODE(direction, @(WeexCore::kDirectionInherit))
-    
-        WX_FLEX_STYLE_RESET_CSS_NODE(flex, @0.0)
-        WX_FLEX_STYLE_RESET_CSS_NODE(flexDirection, @(WeexCore::kFlexDirectionColumn))
-        WX_FLEX_STYLE_RESET_CSS_NODE(alignItems, @(WeexCore::kAlignItemsStretch))
-        WX_FLEX_STYLE_RESET_CSS_NODE(alignSelf, @(WeexCore::kAlignSelfAuto))
-        WX_FLEX_STYLE_RESET_CSS_NODE(flexWrap, @(WeexCore::kNoWrap))
-        WX_FLEX_STYLE_RESET_CSS_NODE(justifyContent, @(WeexCore::kJustifyFlexStart))
-        
-        // position
-        WX_FLEX_STYLE_RESET_CSS_NODE(position, @(WeexCore::kRelative))
-        WX_FLEX_STYLE_RESET_CSS_NODE(top, @(NAN))
-        WX_FLEX_STYLE_RESET_CSS_NODE(left, @(NAN))
-        WX_FLEX_STYLE_RESET_CSS_NODE(right, @(NAN))
-        WX_FLEX_STYLE_RESET_CSS_NODE(bottom, @(NAN))
-        
-        // dimension
-        WX_FLEX_STYLE_RESET_CSS_NODE(width, @(NAN))
-        WX_FLEX_STYLE_RESET_CSS_NODE(height, @(NAN))
-        WX_FLEX_STYLE_RESET_CSS_NODE(minWidth, @(NAN))
-        WX_FLEX_STYLE_RESET_CSS_NODE(minHeight, @(NAN))
-        WX_FLEX_STYLE_RESET_CSS_NODE(maxWidth, @(NAN))
-        WX_FLEX_STYLE_RESET_CSS_NODE(maxHeight, @(NAN))
-        
-        // margin
-        WX_FLEX_STYLE_RESET_CSS_NODE_GIVEN_DIRECTION_KEY(margin
-                                                         ,marginTop
-                                                         ,marginLeft
-                                                         ,marginRight
-                                                         ,marginBottom
-                                                         , @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(marginTop, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(marginLeft, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(marginRight, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(marginBottom, @(0.0))
-        
-        // border
-        WX_FLEX_STYLE_RESET_CSS_NODE_GIVEN_DIRECTION_KEY(borderWidth
-                                                         , borderTopWidth
-                                                         , borderLeftWidth
-                                                         , borderRightWidth
-                                                         , borderBottomWidth
-                                                         , @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(borderTopWidth, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(borderLeftWidth, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(borderRightWidth, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(borderBottomWidth, @(0.0))
-        
-        // padding
-        WX_FLEX_STYLE_RESET_CSS_NODE_GIVEN_DIRECTION_KEY(padding
-                                                         , paddingTop
-                                                         , paddingLeft
-                                                         , paddingRight
-                                                         , paddingBottom
-                                                         , @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(paddingTop, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(paddingLeft, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(paddingRight, @(0.0))
-        WX_FLEX_STYLE_RESET_CSS_NODE(paddingBottom, @(0.0))
-
-}
-
-#pragma mark CSS Node Override
-
-static WeexCore::WXCoreSize flexCssNodeMeasure(WeexCore::WXCoreLayoutNode *node, float width, WeexCore::MeasureMode widthMeasureMode,float height, WeexCore::MeasureMode heightMeasureMode){
-    
-    if (node->getContext() == nullptr) { //为空
-        return WeexCore::WXCoreSize();
-    }
-    WXComponent *component = (__bridge WXComponent *)(node->getContext());
-    
-    if (![component respondsToSelector:@selector(measureBlock)]) {
-        return WeexCore::WXCoreSize();
-    }
-    
-    CGSize (^measureBlock)(CGSize) = [component measureBlock];
-    
-    if (!measureBlock) {
-        return WeexCore::WXCoreSize();
-    }
-    
-    CGSize constrainedSize = CGSizeMake(width, height);
-    CGSize resultSize = measureBlock(constrainedSize);
-#ifdef DEBUG
-    WXLogDebug(@"flexLayout -> measureblock %@, resultSize:%@",
-          component.type,
-          NSStringFromCGSize(resultSize)
-          );
-#endif
-    WeexCore::WXCoreSize size;
-    size.height=(float)resultSize.height;
-    size.width=(float)resultSize.width;
-    return size;
-}
-
--(WeexCore::WXCorePositionType)fxPositionType:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        if ([value isEqualToString:@"absolute"]) {
-            return WeexCore::kAbsolute;
-        } else if ([value isEqualToString:@"relative"]) {
-            return WeexCore::kRelative;
-        } else if ([value isEqualToString:@"fixed"]) {
-            return WeexCore::kFixed;
-        } else if ([value isEqualToString:@"sticky"]) {
-            return WeexCore::kRelative;
-        }
-    }
-    return WeexCore::kRelative;
-}
-
-- (WeexCore::WXCoreDirection)fxDirection:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        if ([value isEqualToString:@"rtl"]) {
-            return WeexCore::kDirectionRTL;
-        } else if ([value isEqualToString:@"ltr"]) {
-            return WeexCore::kDirectionLTR;
-        }
-    }
-    return WeexCore::kDirectionInherit;
-}
-
-- (WeexCore::WXCoreFlexDirection)fxFlexDirection:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        if ([value isEqualToString:@"column"]) {
-            return WeexCore::kFlexDirectionColumn;
-        } else if ([value isEqualToString:@"column-reverse"]) {
-            return WeexCore::kFlexDirectionColumnReverse;
-        } else if ([value isEqualToString:@"row"]) {
-            return WeexCore::kFlexDirectionRow;
-        } else if ([value isEqualToString:@"row-reverse"]) {
-            return WeexCore::kFlexDirectionRowReverse;
-        }
-    }
-    return WeexCore::kFlexDirectionColumn;
-}
-
-//TODO
-- (WeexCore::WXCoreAlignItems)fxAlign:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        if ([value isEqualToString:@"stretch"]) {
-            return WeexCore::kAlignItemsStretch;
-        } else if ([value isEqualToString:@"flex-start"]) {
-            return WeexCore::kAlignItemsFlexStart;
-        } else if ([value isEqualToString:@"flex-end"]) {
-            return WeexCore::kAlignItemsFlexEnd;
-        } else if ([value isEqualToString:@"center"]) {
-            return WeexCore::kAlignItemsCenter;
-            //return WXCoreFlexLayout::WXCore_AlignItems_Center;
-        } else if ([value isEqualToString:@"auto"]) {
-//            return YGAlignAuto;
-        } else if ([value isEqualToString:@"baseline"]) {
-//            return YGAlignBaseline;
-        }
-    }
-    
-    return WeexCore::kAlignItemsStretch;
-}
-
-- (WeexCore::WXCoreAlignSelf)fxAlignSelf:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        if ([value isEqualToString:@"stretch"]) {
-            return WeexCore::kAlignSelfStretch;
-        } else if ([value isEqualToString:@"flex-start"]) {
-            return WeexCore::kAlignSelfFlexStart;
-        } else if ([value isEqualToString:@"flex-end"]) {
-            return WeexCore::kAlignSelfFlexEnd;
-        } else if ([value isEqualToString:@"center"]) {
-            return WeexCore::kAlignSelfCenter;
-        } else if ([value isEqualToString:@"auto"]) {
-            return WeexCore::kAlignSelfAuto;
-        } else if ([value isEqualToString:@"baseline"]) {
-            //            return YGAlignBaseline;
-        }
-    }
-    
-    return WeexCore::kAlignSelfStretch;
-}
-
-- (WeexCore::WXCoreFlexWrap)fxWrap:(id)value
-{
-    if([value isKindOfClass:[NSString class]]) {
-        if ([value isEqualToString:@"nowrap"]) {
-            return WeexCore::kNoWrap;
-        } else if ([value isEqualToString:@"wrap"]) {
-            return WeexCore::kWrap;
-        } else if ([value isEqualToString:@"wrap-reverse"]) {
-            return WeexCore::kWrapReverse;
-        }
-    }
-    return WeexCore::kNoWrap;
-}
-
-- (WeexCore::WXCoreJustifyContent)fxJustify:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        if ([value isEqualToString:@"flex-start"]) {
-            return WeexCore::kJustifyFlexStart;
-        } else if ([value isEqualToString:@"center"]) {
-            return WeexCore::kJustifyCenter;
-        } else if ([value isEqualToString:@"flex-end"]) {
-            return WeexCore::kJustifyFlexEnd;
-        } else if ([value isEqualToString:@"space-between"]) {
-            return WeexCore::kJustifySpaceBetween;
-        } else if ([value isEqualToString:@"space-around"]) {
-            return WeexCore::kJustifySpaceAround;
-        }
-    }
-    return WeexCore::kJustifyFlexStart;
-}
-
-- (void)removeSubcomponentCssNode:(WXComponent *)subcomponent
-{
-    auto node = subcomponent->_flexCssNode;
-    if (node) {
-        if (_flexCssNode) {
-            _flexCssNode->removeChild(node);
-        }
-        
-        [subcomponent _setRenderObject:nullptr];
-        
-        // unbind subcomponents of subcomponent
-        NSMutableArray* sub_subcomponents = [[NSMutableArray alloc] init];
-        [subcomponent _collectSubcomponents:sub_subcomponents];
-        for (WXComponent* c in sub_subcomponents) {
-            [c _setRenderObject:nullptr];
-        }
-        
-        [WXCoreBridge removeRenderObjectFromMap:subcomponent.weexInstance.instanceId object:node];
-        delete node; // also will delete all children recursively
-    }
-}
-
-#pragma mark - RTL
-
-- (BOOL)isDirectionRTL {
-    if (![WXUtility enableRTLLayoutDirection]) return NO;
-
-    return _isLayoutDirectionRTL;
-}
-
-- (void)_adjustForRTL {
-    if (![WXUtility enableRTLLayoutDirection]) return;
-    
-    if (self->_positionType == WXPositionTypeFixed) return;
-    
-    if (self.supercomponent && self.supercomponent.isDirectionRTL && [self.supercomponent shouldTransformSubviewsWhenRTL]) {
-        if (_transform) {
-            self.view.layer.transform = CATransform3DConcat(self.view.layer.transform, CATransform3DScale(CATransform3DIdentity, -1, 1, 1));
-        } else {
-            self.view.layer.transform = CATransform3DScale(CATransform3DIdentity, -1, 1, 1);
-        }
-    } else {
-        if (!_transform) {
-            self.view.layer.transform = CATransform3DIdentity;
-        }
-    }
-}
-
-// Now we scrollView RTL solution is tranform
-// so scrollView need tranform subviews when RTL by default
-// if your component view is not scrollView but also implement RTL layout by tranform,you need return YES
-- (BOOL)shouldTransformSubviewsWhenRTL {
-    return [self.view isKindOfClass:[UIScrollView class]];
-}
-
-- (void)_setIsLayoutRTL:(BOOL)isRTL {
-    _isLayoutDirectionRTL = isRTL;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h
deleted file mode 100644
index 869bc7f..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXResourceRequest.h"
-#import "WXResourceResponse.h"
-
-
-@interface WXResourceLoader : NSObject
-
-@property (nonatomic, strong) WXResourceRequest *request;
-
-@property (nonatomic, copy) void (^onDataSent)(unsigned long long /* bytesSent */, unsigned long long /* totalBytesToBeSent */);
-@property (nonatomic, copy) void (^onResponseReceived)(const WXResourceResponse *);
-@property (nonatomic, copy) void (^onDataReceived)(NSData *);
-@property (nonatomic, copy) void (^onFinished)(const WXResourceResponse *, NSData *);
-@property (nonatomic, copy) void (^onFailed)(NSError *);
-
-- (instancetype)initWithRequest:(WXResourceRequest *)request;
-
-- (void)start;
-
-- (void)cancel:(NSError **)error;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.m
deleted file mode 100644
index 9015625..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.m
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#import "WXResourceLoader.h"
-#import "WXResourceRequestHandler.h"
-#import "WXSDKInstance.h"
-#import "WXLog.h"
-#import "WXHandlerFactory.h"
-#import "WXSDKError.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXSDKEngine.h"
-
-//deprecated
-#import "WXNetworkProtocol.h"
-
-@interface WXResourceLoader () <WXResourceRequestDelegate>
-
-@end
-
-@implementation WXResourceLoader
-{
-    NSMutableData *_data;
-    WXResourceResponse *_response;
-}
-
-- (instancetype)initWithRequest:(WXResourceRequest *)request
-{
-    if (self = [super init]) {
-        self.request = request;
-    }
-    
-    return self;
-}
-
-- (void)setRequest:(WXResourceRequest *)request
-{
-    if (_request) {
-        [self cancel:nil];
-    }
-    
-    _request = request;
-}
-
-- (void)start
-{
-    if ([_request.URL isFileURL]) {
-        [self _handleFileURL:_request.URL];
-        return;
-    }
-    
-    id<WXResourceRequestHandler> requestHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXResourceRequestHandler)];
-    if (requestHandler) {
-        [requestHandler sendRequest:_request withDelegate:self];
-    } else if ([WXHandlerFactory handlerForProtocol:NSProtocolFromString(@"WXNetworkProtocol")]){
-        // deprecated logic
-        [self _handleDEPRECATEDNetworkHandler];
-    } else {
-        WXLogError(@"No resource request handler found!");
-    }
-}
-
-- (void)cancel:(NSError *__autoreleasing *)error
-{
-    id<WXResourceRequestHandler> requestHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXResourceRequestHandler)];
-    if ([requestHandler respondsToSelector:@selector(cancelRequest:)]) {
-        [requestHandler cancelRequest:_request];
-    } else if (error) {
-        *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:WX_ERR_CANCEL userInfo:@{NSLocalizedDescriptionKey: @"handle:%@ not respond to cancelRequest"}];
-    }
-}
-
-- (void)_handleFileURL:(NSURL *)url
-{
-    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-        NSData *fileData = [[NSFileManager defaultManager] contentsAtPath:[url path]];
-        if (self.onFinished) {
-            self.onFinished([[WXResourceResponse alloc]initWithURL:url statusCode:200 HTTPVersion:@"1.1" headerFields:nil], fileData);
-        }
-    });
-}
-
-- (void)_handleDEPRECATEDNetworkHandler
-{
-    WXLogWarning(@"WXNetworkProtocol is deprecated, use WXResourceRequestHandler instead!");
-    id networkHandler = [WXHandlerFactory handlerForProtocol:NSProtocolFromString(@"WXNetworkProtocol")];
-    __weak typeof(self) weakSelf = self;
-    [networkHandler sendRequest:_request withSendingData:^(int64_t bytesSent, int64_t totalBytes) {
-        if (weakSelf.onDataSent) {
-            weakSelf.onDataSent(bytesSent, totalBytes);
-        }
-    } withResponse:^(NSURLResponse *response) {
-        _response = (WXResourceResponse *)response;
-        if (weakSelf.onResponseReceived) {
-            weakSelf.onResponseReceived((WXResourceResponse *)response);
-        }
-    } withReceiveData:^(NSData *data) {
-        if (weakSelf.onDataReceived) {
-            weakSelf.onDataReceived(data);
-        }
-    } withCompeletion:^(NSData *totalData, NSError *error) {
-        if (error) {
-            if (weakSelf.onFailed) {
-                weakSelf.onFailed(error);
-            }
-        } else {
-            weakSelf.onFinished(_response, totalData);
-            _response = nil;
-        }
-    }];
-}
-
-#pragma mark - WXResourceRequestDelegate
-
-- (void)request:(WXResourceRequest *)request didSendData:(unsigned long long)bytesSent totalBytesToBeSent:(unsigned long long)totalBytesToBeSent
-{
-    WXLogDebug(@"request:%@ didSendData:%llu totalBytesToBeSent:%llu", request, bytesSent, totalBytesToBeSent);
-    
-    if (self.onDataSent) {
-        self.onDataSent(bytesSent, totalBytesToBeSent);
-    }
-}
-
-- (void)request:(WXResourceRequest *)request didReceiveResponse:(WXResourceResponse *)response
-{
-    WXLogDebug(@"request:%@ didReceiveResponse:%@ ", request, response);
-    
-    _response = response;
-    id<WXConfigCenterProtocol> configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-        BOOL isDefault;
-        BOOL clearResponseData = [[configCenter configForKey:@"iOS_weex_ext_config.clearResponseDataWhenDidReceiveResponse" defaultValue:@(NO) isDefault:&isDefault] boolValue];
-        if(clearResponseData) {
-            _data = nil;
-        }
-    }
-    
-    if (self.onResponseReceived) {
-        self.onResponseReceived(response);
-    }
-}
-
-- (void)request:(WXResourceRequest *)request didReceiveData:(NSData *)data
-{
-    WXLogDebug(@"request:%@ didReceiveDataLength:%ld", request, (unsigned long)data.length);
-    
-    if (!_data) {
-        _data = [NSMutableData new];
-    }
-    [_data appendData:data];
-    
-    if (self.onDataReceived) {
-        self.onDataReceived(data);
-    }
-}
-
-- (void)requestDidFinishLoading:(WXResourceRequest *)request
-{
-    WXLogDebug(@"request:%@ requestDidFinishLoading", request);
-    
-    if (self.onFinished) {
-        self.onFinished(_response, _data);
-    }
-    
-    _data = nil;
-    _response = nil;
-}
-
-- (void)request:(WXResourceRequest *)request didFailWithError:(NSError *)error
-{
-    WXLogDebug(@"request:%@ didFailWithError:%@", request, error.localizedDescription);
-    
-    if (self.onFailed) {
-        self.onFailed(error);
-    }
-    
-    _data = nil;
-    _response = nil;
-}
-
-#ifdef __IPHONE_10_0
-- (void)request:(WXResourceRequest *)request didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics
-{
-    WXLogDebug(@"request:%@ didFinishCollectingMetrics", request);
-}
-#endif
-
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h
deleted file mode 100644
index 4815137..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXWebSocketLoader : NSObject<NSCopying>
-
-@property (nonatomic, copy) void (^onOpen)(void);
-@property (nonatomic, copy) void (^onReceiveMessage)(id);
-@property (nonatomic, copy) void (^onClose)(NSInteger,NSString *,BOOL);
-@property (nonatomic, copy) void (^onFail)(NSError *);
-
-- (instancetype)initWithUrl:(NSString *)url protocol:(NSString *)protocol;
-- (void)open;
-- (void)send:(id)data;
-- (void)close;
-- (void)close:(NSInteger)code reason:(NSString *)reason;
-- (void)clear;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.m
deleted file mode 100644
index 7821ed6..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.m
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXWebSocketLoader.h"
-#import "WXWebSocketHandler.h"
-#import "WXHandlerFactory.h"
-#import "WXLog.h"
-
-@interface WXWebSocketLoader () <WXWebSocketDelegate>
-@property (nonatomic, copy) NSString *identifier;
-@property (nonatomic, copy) NSString *url;
-@property (nonatomic, copy) NSString *protocol;
-@end
-
-@implementation WXWebSocketLoader
-
-- (instancetype)initWithUrl:(NSString *)url protocol:(NSString *)protocol
-{
-    if (self = [super init]) {
-        self.url = url;
-        self.protocol = protocol;
-    }
-    return self;
-}
-
--(id)copyWithZone:(NSZone *)zone {
-    
-    WXWebSocketLoader *newClass = [[WXWebSocketLoader alloc]init];
-    newClass.onOpen = self.onOpen;
-    newClass.onReceiveMessage = self.onReceiveMessage;
-    newClass.onFail = self.onFail;
-    newClass.onClose = self.onClose;
-    newClass.protocol = self.protocol;
-    newClass.url = self.url;
-    newClass.identifier = self.identifier;
-    return newClass;
-}
-
--(NSString *)identifier
-{
-    if(!_identifier)
-    {
-        CFUUIDRef uuid = CFUUIDCreate(NULL);
-        _identifier = CFBridgingRelease(CFUUIDCreateString(NULL, uuid));
-        assert(_identifier);
-        CFRelease(uuid);
-    }
-    return _identifier;
-}
-
-- (void)open
-{
-    id<WXWebSocketHandler> requestHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXWebSocketHandler)];
-    if (requestHandler) {
-        [requestHandler open:self.url protocol:self.protocol identifier:self.identifier withDelegate:self];
-    } else {
-        WXLogError(@"No resource request handler found!");
-    }
-}
-
-- (void)send:(id)data
-{
-    id<WXWebSocketHandler> requestHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXWebSocketHandler)];
-    if (requestHandler) {
-        [requestHandler send:self.identifier data:data];
-    } else {
-        WXLogError(@"No resource request handler found!");
-    }
-}
-
-- (void)close
-{
-    id<WXWebSocketHandler> requestHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXWebSocketHandler)];
-    if (requestHandler) {
-        [requestHandler close:self.identifier];
-    } else {
-        WXLogError(@"No resource request handler found!");
-    }
-}
-
-- (void)clear
-{
-    id<WXWebSocketHandler> requestHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXWebSocketHandler)];
-    if (requestHandler) {
-        [requestHandler clear:self.identifier];
-    } else {
-        WXLogError(@"No resource request handler found!");
-    }
-}
-
-- (void)close:(NSInteger)code reason:(NSString *)reason
-{
-    id<WXWebSocketHandler> requestHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXWebSocketHandler)];
-    if (requestHandler) {
-        [requestHandler close:self.identifier code:code reason:reason];
-    } else {
-        WXLogError(@"No resource request handler found!");
-    }
-}
-
-#pragma mark - WXWebSocketDelegate
-- (void)didOpen
-{
-    if (self.onOpen) {
-        self.onOpen();
-    }
-}
-- (void)didFailWithError:(NSError *)error
-{
-    if(self.onFail) {
-        self.onFail(error);
-    }
-}
-- (void)didReceiveMessage:(id)message
-{
-    if (self.onReceiveMessage) {
-        self.onReceiveMessage(message);
-    }
-}
-- (void)didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean
-{
-    if (self.onClose) {
-        self.onClose(code,reason,wasClean);
-    }
-}
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h
deleted file mode 100644
index 80ecee8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <JavaScriptCore/JavaScriptCore.h>
-
-@class WXBridgeMethod;
-@class WXSDKInstance;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    void WXPerformBlockOnBridgeThread(void (^block)(void));
-    void WXPerformBlockSyncOnBridgeThread(void (^block) (void));
-    void WXPerformBlockOnBackupBridgeThread(void (^block)(void));
-
-    void WXPerformBlockOnBridgeThreadForInstance(void (^block)(void), NSString* instance);
-    void WXPerformBlockSyncOnBridgeThreadForInstance(void (^block) (void), NSString* instance);
-#ifdef __cplusplus
-}
-#endif
-
-@interface WXBridgeManager : NSObject
-
-/**
- *  return instance at the top of the stack.
- **/
-@property (nonatomic, weak, readonly) WXSDKInstance *topInstance;
-
-/**
- *  Create Instance Method
- *  @param instance  :   instance id
- *  @param temp  :   template data
- *  @param options   :   parameters
- *  @param data      :   external data
- **/
-- (void)createInstanceForJS:(NSString *)instance
-              template:(NSString *)temp
-               options:(NSDictionary *)options
-                  data:(id)data;
-
-/**
- *  Create Instance Method
- *  @param instance  :   instance id
- *  @param temp  :   template data
- *  @param options   :   parameters
- *  @param data      :   external data
- **/
-- (void)createInstance:(NSString *)instance
-              template:(NSString *)temp
-               options:(NSDictionary *)options
-                  data:(id)data;
-
-/**
- *  Create Instance with opcode
- *  @param instance  :   instance id
- *  @param contents  :   opcode data
- *  @param options   :   parameters
- *  @param data      :   external data
- **/
-- (void)createInstance:(NSString *)instance
-              contents:(NSData *)contents
-               options:(NSDictionary *)options
-                  data:(id)data;
-
-/**
- * @abstract return currentInstanceId
- **/
-- (NSArray *)getInstanceIdStack;
-
-/**
- *  Destroy Instance Method
- *  @param instance  :   instance id
- **/
-- (void)destroyInstance:(NSString *)instance;
-
-/**
- * Trigger full GC, for dev and debug only.
- **/
-- (void)forceGarbageCollection;
-
-/**
- *  Refresh Instance Method
- *  @param instance  :   instance id
- *  @param data      :   external data
- **/
-- (void)refreshInstance:(NSString *)instance data:(id)data;
-
-/**
- *  Unload
- **/
-- (void)unload;
-
-/**
- *  Update Instance State Method
- *  @param instance  :   instance id
- *  @param data      :   parameters
- **/
-- (void)updateState:(NSString *)instance data:(id)data;
-
-/**
- *  Execute JSFramework Script
- *  @param script    :   script code
- **/
-- (void)executeJsFramework:(NSString *)script;
-
-/**
- + *  download JS Script
- + *  @param instance    :   instance id
- + *  @param scriptUrl   :   script url
- + **/
-- (void)DownloadJS:(NSString *)instance url:(NSURL *)scriptUrl completion:(void (^)(NSString *script))complection;
-
-/**
- *  Register JS service Script
- *  @param name      :   service name
- *  @param serviceScript    :   script code
- *  @param options   :   service options
- *  @param completion : completion callback
- **/
-- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion;
-
-
-/**
- *  Register JS service Script
- *  @param name         :   service name
- *  @param serviceScriptUrl    :   script url
- *  @param options      :   service options
- *  @param completion : completion callback
- **/
--(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion;
-
-/**
- *  Unregister JS service Script
- *  @param name    :   script code
- **/
-- (void)unregisterService:(NSString *)name;
-
-/**
- *  Register Modules Method
- *  @param modules   :   module list
- **/
-- (void)registerModules:(NSDictionary *)modules;
-
-/**
- *  Register Components Method
- *  @param components   component list
- **/
-- (void)registerComponents:(NSArray* )components;
-
-/**
- *  FireEvent
- *  @param instanceId   instance id
- *  @param ref       :   node reference
- *  @param type      :   event type
- *  @param params    :   parameters in event object
- *  @param domChanges   dom value changes, used for two-way data binding
- **/
-- (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges;
-
-/**
- *  FireEvent
- *  @param instanceId   instance id
- *  @param ref       :   node reference
- *  @param type      :   event type
- *  @param params    :   parameters in event object
- *  @param domChanges   dom value changes, used for two-way data binding
- *  @param handlerArguments : arguments passed to event handler
- **/
-- (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges handlerArguments:(NSArray *)handlerArguments;
-
-- (JSValue *)fireEventWithResult:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges;
-
-/**
- * componentHook
- * @param instanceId  : instance id
- * @param componentId : compoent id
- * @param type        : component hook Type, such as life-cycle
- * @param hookPhase   : hook phase
- */
-- (void)callComponentHook:(NSString*)instanceId componentId:(NSString*)componentId type:(NSString*)type hook:(NSString*)hookPhase args:(NSArray*)args competion:(void (^)(JSValue * value))complection;
-/**
- *  callBack
- *
- *  @param instanceId instanceId
- *  @param funcId     funcId
- *  @param params     params
- *  @param keepAlive     indicate that whether this func will be reused
- */
-- (void)callBack:(NSString *)instanceId funcId:(NSString *)funcId params:(id)params keepAlive:(BOOL)keepAlive;
-
-/**
- *  Connect To WebSocket for devtool debug
- *  @param url       :   url to connect
- **/
-- (void)connectToDevToolWithUrl:(NSURL *)url;
-
-/**
- *  CallBack
- *  @param instanceId   instance id
- *  @param funcId    :   callback id
- *  @param params    :   parameters
- **/
-- (void)callBack:(NSString *)instanceId funcId:(NSString *)funcId params:(id)params;
-
-/**
- *  Connect To WebSocket for collecting log
- *  @param url       :   url to connect
- **/
-- (void)connectToWebSocket:(NSURL *)url;
-
-/**
- *  Log To WebSocket
- *  @param flag      :   the tag to identify
- *  @param message   :   message to output
- **/
-- (void)logToWebSocket:(NSString *)flag message:(NSString *)message;
-
-/**
- *  Reset Environment
- **/
-- (void)resetEnvironment;
-
-- (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params DEPRECATED_MSG_ATTRIBUTE("Use fireEvent:ref:type:params:domChanges: method instead.");
-- (void)executeJsMethod:(WXBridgeMethod *)method DEPRECATED_MSG_ATTRIBUTE();
-
-- (void)callJSMethod:(NSString *)method args:(NSArray *)args;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
deleted file mode 100644
index 9b5cfae..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
+++ /dev/null
@@ -1,693 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBridgeManager.h"
-#import "WXBridgeContext.h"
-#import "WXLog.h"
-#import "WXAssert.h"
-#import "WXBridgeMethod.h"
-#import "WXCallJSMethod.h"
-#import "WXSDKManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXServiceFactory.h"
-#import "WXResourceRequest.h"
-#import "WXResourceLoader.h"
-#import "WXDebugTool.h"
-#import "WXMonitor.h"
-#import "WXSDKInstance_performance.h"
-#import "WXThreadSafeMutableArray.h"
-#import "WXComponentManager.h"
-#import "WXCoreBridge.h"
-#import "WXDataRenderHandler.h"
-#import "WXHandlerFactory.h"
-
-@interface WXBridgeManager ()
-
-@property (nonatomic, assign) BOOL stopRunning;
-@property (nonatomic, strong) WXBridgeContext *bridgeCtx;
-@property (nonatomic, strong) WXBridgeContext *backupBridgeCtx;
-@property (nonatomic, strong) WXThreadSafeMutableArray *instanceIdStack;
-
-@end
-
-static NSThread *WXBridgeThread;
-static NSThread *WXBackupBridgeThread;
-
-@implementation WXBridgeManager
-
-+ (instancetype)sharedManager
-{
-    static id _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-    });
-    return _sharedInstance;
-}
-
-- (instancetype)init
-{
-    self = [super init];
-    if (self) {
-        _bridgeCtx = [[WXBridgeContext alloc] init];
-        _backupBridgeCtx = [[WXBridgeContext alloc] init];
-    }
-    return self;
-}
-
-- (WXSDKInstance *)topInstance
-{
-    return _bridgeCtx.topInstance;
-}
-
-- (void)unload
-{
-    _bridgeCtx = nil;
-    _backupBridgeCtx = nil;
-}
-
-#pragma mark Thread Management
-
-- (void)_runLoopThread
-{
-    [[NSRunLoop currentRunLoop] addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
-    
-    while (!_stopRunning) {
-        @autoreleasepool {
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
-        }
-    }
-}
-
-+ (NSThread *)jsThread
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        WXBridgeThread = [[NSThread alloc] initWithTarget:[[self class]sharedManager] selector:@selector(_runLoopThread) object:nil];
-        [WXBridgeThread setName:WX_BRIDGE_THREAD_NAME];
-        [WXBridgeThread setQualityOfService:[[NSThread mainThread] qualityOfService]];
-        [WXBridgeThread start];
-    });
-    
-    return WXBridgeThread;
-}
-
-+ (NSThread *)backupJsThread
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        WXBackupBridgeThread = [[NSThread alloc] initWithTarget:[[self class]sharedManager] selector:@selector(_runLoopThread) object:nil];
-        [WXBackupBridgeThread setName:WX_BACKUP_BRIDGE_THREAD_NAME];
-        [WXBackupBridgeThread setQualityOfService:[[NSThread mainThread] qualityOfService]];
-        [WXBackupBridgeThread start];
-    });
-
-    return WXBackupBridgeThread;
-}
-
-void WXPerformBlockOnBridgeThreadForInstance(void (^block)(void), NSString* instance) {
-    [WXBridgeManager _performBlockOnBridgeThread:block instance:instance];
-}
-
-void WXPerformBlockOnBridgeThread(void (^block)(void))
-{
-    [WXBridgeManager _performBlockOnBridgeThread:block instance:nil];
-}
-
-void WXPerformBlockOnBackupBridgeThread(void (^block)(void))
-{
-    [WXBridgeManager _performBlockOnBackupBridgeThread:block instance:nil];
-}
-
-+ (void)_performBlockOnBackupBridgeThread:(void (^)(void))block instance:(NSString*)instanceId
-{
-    if ([NSThread currentThread] == [self backupJsThread]) {
-        block();
-    } else {
-        [self performSelector:@selector(_performBlockOnBridgeThread:instance:)
-                     onThread:[self backupJsThread]
-                   withObject:[block copy]
-                waitUntilDone:NO];
-    }
-}
-
-+ (void)_performBlockOnBridgeThread:(void (^)(void))block instance:(NSString*)instanceId
-{
-    if ([NSThread currentThread] == [self jsThread] || [NSThread currentThread] == [self backupJsThread]) {
-        block();
-    } else {
-        WXSDKInstance* instance = nil;
-        if (instanceId) {
-            instance = [WXSDKManager instanceForID:instanceId];
-        }
-
-        if (instance && instance.useBackupJsThread) {
-            [self performSelector:@selector(_performBlockOnBridgeThread:instance:)
-                             onThread:[self backupJsThread]
-                           withObject:[block copy]
-                        waitUntilDone:NO];
-        } else {
-            [self performSelector:@selector(_performBlockOnBridgeThread:instance:)
-                             onThread:[self jsThread]
-                           withObject:[block copy]
-                        waitUntilDone:NO];
-        }
-    }
-}
-
-void WXPerformBlockSyncOnBridgeThreadForInstance(void (^block) (void), NSString* instance)
-{
-    [WXBridgeManager _performBlockSyncOnBridgeThread:block instance:instance];
-}
-
-+ (void)_performBlockSyncOnBridgeThread:(void (^)(void))block instance:(NSString*)instanceId
-{
-    if ([NSThread currentThread] == [self jsThread] || [NSThread currentThread] == [self backupJsThread]) {
-        block();
-    } else {
-        WXSDKInstance* instance = nil;
-        if (instanceId) {
-            instance = [WXSDKManager instanceForID:instanceId];
-        }
-
-        if (instance && instance.useBackupJsThread) {
-            [self performSelector:@selector(_performBlockOnBridgeThread:instance:)
-                         onThread:[self backupJsThread]
-                       withObject:[block copy]
-                    waitUntilDone:YES];
-        } else {
-            [self performSelector:@selector(_performBlockOnBridgeThread:instance:)
-                         onThread:[self jsThread]
-                       withObject:[block copy]
-                    waitUntilDone:YES];
-        }
-    }
-}
-
-#pragma mark JSBridge Management
-- (void)createInstanceForJS:(NSString *)instance
-              template:(NSString *)temp
-               options:(NSDictionary *)options
-                  data:(id)data {
-    if (!instance || !temp) return;
-    __weak typeof(self) weakSelf = self;
-    NSMutableDictionary *newOptions = [options mutableCopy] ?: [NSMutableDictionary new];
-    newOptions[@"EXEC_JS"] = @(YES);
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:instance];
-        if (!sdkInstance) {
-            return;
-        }
-        WXBridgeContext* context = sdkInstance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context createInstance:instance
-                                  template:temp
-                                   options:newOptions
-                                      data:data];
-    }, instance);
-}
-
-- (void)createInstance:(NSString *)instance
-              template:(NSString *)temp
-               options:(NSDictionary *)options
-                  data:(id)data
-{
-    if (!instance || !temp) return;
-    if (![self.instanceIdStack containsObject:instance]) {
-        if ([options[@"RENDER_IN_ORDER"] boolValue]) {
-            [self.instanceIdStack addObject:instance];
-        } else {
-            [self.instanceIdStack insertObject:instance atIndex:0];
-        }
-    }
-    //third team impl...
-    WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:instance];
-    if (sdkInstance) {
-        sdkInstance.apmInstance.isStartRender = YES;
-    }
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXBridgeContext* context = sdkInstance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context createInstance:instance
-                                  template:temp
-                                   options:options
-                                      data:data];
-    }, instance);
-}
-
-- (void)createInstance:(NSString *)instance
-              contents:(NSData *)contents
-               options:(NSDictionary *)options
-                  data:(id)data
-{
-    if (!instance || !contents) return;
-    if (![self.instanceIdStack containsObject:instance]) {
-        if ([options[@"RENDER_IN_ORDER"] boolValue]) {
-            [self.instanceIdStack addObject:instance];
-        } else {
-            [self.instanceIdStack insertObject:instance atIndex:0];
-        }
-    }
-    //third team impl...
-    WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:instance];
-    if (sdkInstance) {
-        sdkInstance.apmInstance.isStartRender = YES;
-    }
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXBridgeContext* context = sdkInstance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context createInstance:instance
-                                  contents:contents
-                                   options:options
-                                      data:data];
-    }, instance);
-}
-
-- (WXThreadSafeMutableArray *)instanceIdStack
-{
-    if (_instanceIdStack) return _instanceIdStack;
-    
-    _instanceIdStack = [[WXThreadSafeMutableArray alloc] init];
-    
-    return _instanceIdStack;
-}
-
-- (NSArray *)getInstanceIdStack;
-{
-    return [self.instanceIdStack copy];
-}
-
-- (void)destroyInstance:(NSString *)instance
-{
-    if (!instance) return;
-    [self.instanceIdStack removeObject:instance];
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:instance];
-        WXBridgeContext* context = sdkInstance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context destroyInstance:instance];
-    }, instance);
-}
-
-- (void)forceGarbageCollection
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        [weakSelf.bridgeCtx forceGarbageCollection];
-    });
-}
-
-- (void)refreshInstance:(NSString *)instance
-                   data:(NSDictionary *)data
-{
-    if (!instance) return;
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:instance];
-        WXBridgeContext* context = sdkInstance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context refreshInstance:instance data:data];
-    }, instance);
-}
-
-- (void)updateState:(NSString *)instance data:(id)data
-{
-    if (!instance) return;
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:instance];
-        WXBridgeContext* context = sdkInstance && sdkInstance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context updateState:instance data:data];
-    }, instance);
-}
-
-- (void)executeJsFramework:(NSString *)script
-{
-    if (!script) return;
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        [weakSelf.bridgeCtx executeJsFramework:script];
-    });
-    WXPerformBlockOnBackupBridgeThread(^{
-        [weakSelf.backupBridgeCtx executeJsFramework:script];
-    });
-}
-
-- (void)callJsMethod:(WXCallJSMethod *)method
-{
-    if (!method || !method.instance) return;
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXBridgeContext* context = method.instance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context executeJsMethod:method];
-    }, method.instance.instanceId);
-}
-
-- (JSValue *)callJSMethodWithResult:(WXCallJSMethod *)method
-{
-    if (!method || !method.instance) return nil;
-    __weak typeof(self) weakSelf = self;
-    __block JSValue *value;
-    WXPerformBlockSyncOnBridgeThreadForInstance(^(){
-        WXBridgeContext* context = method.instance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        value = [context excuteJSMethodWithResult:method];
-    }, method.instance.instanceId);
-    return value;
-}
-
-- (void)DownloadJS:(NSString*)instance url:(NSURL *)scriptUrl completion:(void (^)(NSString *script))complection;
-{
-    if (!scriptUrl || ![scriptUrl.absoluteString length]) {
-        if (complection) {
-            complection(nil);
-        }
-        return;
-    }
-    WXResourceRequest* request = [WXResourceRequest requestWithURL:scriptUrl];
-    WXResourceLoader* jsLoader = [[WXResourceLoader alloc] initWithRequest:request];
-    jsLoader.onFinished = ^(WXResourceResponse *response, NSData *data) {
-        NSString* jsString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-        if (complection) {
-            complection(jsString);
-        }
-    };
-    jsLoader.onFailed = ^(NSError *loadError) {
-        if (complection) {
-            complection(nil);
-        }
-
-        WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instance];
-        WXComponentManager *manager = sdkInstance.componentManager;
-        if (manager.isValid) {
-            NSString *errorMessage = [NSString stringWithFormat:@"Request to %@ occurs an error:%@, info:%@", request.URL, loadError.localizedDescription, loadError.userInfo];
-            WXSDKErrCode errorCode = WX_KEY_EXCEPTION_JS_DOWNLOAD;
-            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{NSLocalizedDescriptionKey:(errorMessage?:@"No message")}];
-            WXPerformBlockOnComponentThread(^{
-                [manager renderFailed:error];
-            });
-        }
-    };
-
-   [jsLoader start];
-}
-
-- (void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion
-{
-    if (!name || !serviceScriptUrl || !options) {
-        if (completion) {
-            completion(NO);
-        }
-        return;
-    }
-    __weak typeof(self) weakSelf = self;
-    WXResourceRequest *request = [WXResourceRequest requestWithURL:serviceScriptUrl resourceType:WXResourceTypeServiceBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy];
-    WXResourceLoader *serviceBundleLoader = [[WXResourceLoader alloc] initWithRequest:request];;
-    serviceBundleLoader.onFinished = ^(WXResourceResponse *response, NSData *data) {
-        __strong typeof(weakSelf) strongSelf = weakSelf;
-        NSString *jsServiceString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-        [strongSelf registerService:name withService:jsServiceString withOptions:options completion:completion];
-    };
-    
-    serviceBundleLoader.onFailed = ^(NSError *loadError) {
-        WXLogError(@"No script URL found");
-        if (completion) {
-            completion(NO);
-        }
-    };
-    
-    [serviceBundleLoader start];
-}
-
-- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion
-{
-    if (!name || !serviceScript || !options) {
-        if (completion) {
-            completion(NO);
-        }
-        return;
-    }
-    
-    NSString *script = [WXServiceFactory registerServiceScript:name withRawScript:serviceScript withOptions:options];
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        // save it when execute
-        [WXDebugTool cacheJsService:name withScript:serviceScript withOptions:options];
-        [weakSelf.bridgeCtx executeJsService:script withName:name];
-        if (completion) {
-            completion(YES);
-        }
-    });
-    WXPerformBlockOnBackupBridgeThread(^(){
-        [weakSelf.backupBridgeCtx executeJsService:script withName:name];
-    });
-}
-
-- (void)unregisterService:(NSString *)name
-{
-    if (!name) return;
-    
-    NSString *script = [WXServiceFactory unregisterServiceScript:name];
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        // save it when execute
-        [WXDebugTool removeCacheJsService:name];
-        [weakSelf.bridgeCtx executeJsService:script withName:name];
-    });
-    WXPerformBlockOnBackupBridgeThread(^(){
-        [weakSelf.backupBridgeCtx executeJsService:script withName:name];
-    });
-}
-
-- (void)registerModules:(NSDictionary *)modules
-{
-    if (!modules) return;
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        [weakSelf.bridgeCtx registerModules:modules];
-    });
-    WXPerformBlockOnBackupBridgeThread(^(){
-        [weakSelf.backupBridgeCtx registerModules:modules];
-    });
-}
-
-- (void)registerComponents:(NSArray *)components
-{
-    if (!components) return;
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        [weakSelf.bridgeCtx registerComponents:components];
-    });
-    WXPerformBlockOnBackupBridgeThread(^(){
-        [weakSelf.backupBridgeCtx registerComponents:components];
-    });
-}
-
-- (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params
-{
-    [self fireEvent:instanceId ref:ref type:type params:params domChanges:nil];
-}
-
-- (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges
-{
-    [self fireEvent:instanceId ref:ref type:type params:params domChanges:domChanges handlerArguments:nil];
-}
-
-- (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges handlerArguments:(NSArray *)handlerArguments
-{
-    WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-    if (instance.dataRender) {
-        id<WXDataRenderHandler> dataRenderHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXDataRenderHandler)];
-        if (dataRenderHandler) {
-            WXPerformBlockOnComponentThread(^{
-                [dataRenderHandler fireEvent:instanceId ref:ref event:type args:params?:@{} domChanges:domChanges?:@{}];
-            });
-        }
-        else {
-            WXComponentManager *manager = instance.componentManager;
-            if (manager.isValid) {
-                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                WXPerformBlockOnComponentThread(^{
-                    [manager renderFailed:error];
-                });
-            }
-        }
-        return;
-    }
-
-    if (!type || !ref) {
-        WXLogError(@"Event type and component ref should not be nil");
-        return;
-    }
-    
-    NSArray *args = @[ref, type, params?:@{}, domChanges?:@{}];
-    if (handlerArguments) {
-        NSMutableArray *newArgs = [args mutableCopy];
-        [newArgs addObject:@{@"params":handlerArguments}];
-        args = newArgs;
-    }
-    
-    if(instance && !instance.isJSCreateFinish)
-    {
-        instance.performance.fsCallEventNum++;
-    }
-    if (instance && !instance.apmInstance.isFSEnd) {
-        [instance.apmInstance updateFSDiffStats:KEY_PAGE_STATS_FS_CALL_EVENT_NUM withDiffValue:1];
-    }
-    
-    WXCallJSMethod *method = [[WXCallJSMethod alloc] initWithModuleName:nil methodName:@"fireEvent" arguments:args instance:instance];
-    [self callJsMethod:method];
-}
-
-- (void)callComponentHook:(NSString*)instanceId componentId:(NSString*)componentId type:(NSString*)type hook:(NSString*)hookPhase args:(NSArray*)args competion:(void (^)(JSValue * value))completion
-{
-     __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThreadForInstance(^{
-        if (!type || !instanceId || !hookPhase) {
-            WXLogError(@"type and instance id and hookPhase should not be nil");
-            return;
-        }
-        NSArray *newArgs = @[componentId, type, hookPhase, args?:@[]];
-        
-        WXCallJSMethod * method = [[WXCallJSMethod alloc] initWithModuleName:nil methodName:@"componentHook" arguments:newArgs instance:[WXSDKManager instanceForID:instanceId]];
-        WXSDKInstance* sdkInstance =  [WXSDKManager instanceForID:instanceId];
-        WXBridgeContext* context = sdkInstance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context callJSMethod:@"callJS" args:@[instanceId, @[method.callJSTask]] onContext:nil completion:completion];
-    }, instanceId);
-}
-
-- (JSValue *)fireEventWithResult:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges
-{
-    if (!type || !ref) {
-        WXLogError(@"Event type and component ref should not be nil");
-        return nil;
-    }
-    NSArray *args = @[ref, type, params?:@{}, domChanges?:@{}];
-    WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-    WXCallJSMethod *method = [[WXCallJSMethod alloc] initWithModuleName:nil methodName:@"fireEvent" arguments:args instance:instance];
-    return [self callJSMethodWithResult:method];
-}
-
-- (void)callBack:(NSString *)instanceId funcId:(NSString *)funcId params:(id)params keepAlive:(BOOL)keepAlive
-{
-    NSArray *args = nil;
-    if (keepAlive) {
-        args = @[[funcId copy], params? [params copy]:@"\"{}\"", @true];
-    } else {
-        args = @[[funcId copy], params? [params copy]:@"\"{}\""];
-    }
-    WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-    if (instance.wlasmRender) {
-        id<WXDataRenderHandler> dataRenderHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXDataRenderHandler)];
-        if (dataRenderHandler) {
-            id strongArgs = params ? [params copy]:@"\"{}\"";
-            WXPerformBlockOnComponentThread(^{
-                [dataRenderHandler invokeCallBack:instanceId function:funcId args:strongArgs keepAlive:keepAlive];
-            });
-        }
-        else {
-            WXComponentManager *manager = instance.componentManager;
-            if (manager.isValid) {
-                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                WXPerformBlockOnComponentThread(^{
-                    [manager renderFailed:error];
-                });
-            }
-        }
-    }
-    else {
-        WXCallJSMethod *method = [[WXCallJSMethod alloc] initWithModuleName:@"jsBridge" methodName:@"callback" arguments:args instance:instance];
-        [self callJsMethod:method];
-    }}
-
-- (void)callBack:(NSString *)instanceId funcId:(NSString *)funcId params:(id)params
-{
-    [self callBack:instanceId funcId:funcId params:params keepAlive:NO];
-}
-
-- (void)connectToDevToolWithUrl:(NSURL *)url {
-    WXPerformBlockOnBridgeThread(^(){
-        [self.bridgeCtx connectToDevToolWithUrl:url];
-    });
-}
-
-- (void)connectToWebSocket:(NSURL *)url
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        [weakSelf.bridgeCtx connectToWebSocket:url];
-    });
-}
-
-- (void)logToWebSocket:(NSString *)flag message:(NSString *)message
-{
-    if (!message) return;
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        [weakSelf.bridgeCtx logToWebSocket:flag message:message];
-    });
-}
-
-- (void)resetEnvironment
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThread(^(){
-        [weakSelf.bridgeCtx resetEnvironment];
-    });
-    WXPerformBlockOnBackupBridgeThread(^(){
-        [weakSelf.backupBridgeCtx resetEnvironment];
-    });
-}
-
-- (void)callJSMethod:(NSString *)method args:(NSArray *)args
-{
-    if (!method) return;
-
-    __weak typeof(self) weakSelf = self;
-    NSString* instanceId = args[0];
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXSDKInstance* sdkInstance = [WXSDKManager instanceForID:instanceId];
-        WXBridgeContext* context = sdkInstance && sdkInstance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context callJSMethod:method args:args onContext:nil completion:nil];
-    }, instanceId);
-}
-
-#pragma mark - Deprecated
-
-- (void)executeJsMethod:(WXCallJSMethod *)method
-{
-    if (!method || !method.instance) return;
-    
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnBridgeThreadForInstance(^(){
-        WXBridgeContext* context = method.instance.useBackupJsThread ? weakSelf.backupBridgeCtx :  weakSelf.bridgeCtx;
-        [context executeJsMethod:method];
-    }, method.instance.instanceId);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h
deleted file mode 100644
index 8e77636..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXInvocationConfig.h"
-
-@interface WXComponentConfig : WXInvocationConfig
-
-@property (nonatomic, strong) NSDictionary *properties;
-
-- (instancetype)initWithName:(NSString *)name class:(NSString *)clazz pros:(NSDictionary *)pros;
-
-@end
-
-
-@interface WXComponentFactory : NSObject
-
-/**
- * @abstract Register an affine base type to weex core. So that all subclasses of clazz will use this type to render.
- *  For example: WXNestedListComponent is a subclass of WXListComponent and uses type of 'nested-list'.
- *  It should be rendered using RenderList in weexcore.
- *
- * @param typeName weex core type identifier
- * @param clazz The WXComponent subclass to register
- */
-+ (void)registerBaseType:(NSString *)typeName withClass:(Class)clazz;
-
-/**
- * @abstract Register a component for a given name
- *
- * @param name The component name to register;
- * @param clazz The WXComponent subclass to register
- * @param pros The component properties to register
- */
-+ (void)registerComponent:(NSString *)name withClass:(Class)clazz withPros:(NSDictionary *)pros;
-
-/**
- * @abstract Register a list of components
- * @param components The components array to register, every element in array should be a dictionary,  in the form of @{@"name": @"xxx", @"class":@"yyy"}, which specifies the name and class of the component
- */
-+ (void)registerComponents:(NSArray *)components;
-
-+ (NSMutableDictionary *)componentMethodMapsWithName:(NSString *)name;
-+ (NSMutableDictionary *)componentSelectorMapsWithName:(NSString *)name;
-
-+ (SEL)methodWithComponentName:(NSString *)name withMethod:(NSString *)method isSync:(BOOL *)isSync;
-
-+ (SEL)methodWithComponentName:(NSString *)name withMethod:(NSString *)method;
-
-/**
- * @abstract Unregister all the components
- */
-+ (void)unregisterAllComponents;
-
-/**
- * @abstract Returns the class with a given component name.
- * @param name The component's name
- * @return The component's class
- */
-+ (Class)classWithComponentName:(NSString *)name;
-
-+ (WXComponentConfig *)configWithComponentName:(NSString *)name;
-
-/**
- * @abstract Returns the registered components.
- */
-+ (NSDictionary *)componentConfigs;
-
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m
deleted file mode 100644
index dca9699..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponentFactory.h"
-#import "WXAssert.h"
-#import "WXLog.h"
-#import "WXCoreBridge.h"
-#import "WXComponent.h"
-#import <objc/runtime.h>
-
-@interface WXComponentBaseType : NSObject
-
-@property (nonatomic, strong) NSString* type;
-@property (nonatomic, strong) Class clazz;
-
-@end
-
-@implementation WXComponentBaseType
-
-@end
-
-@implementation WXComponentConfig
-
-- (instancetype)initWithName:(NSString *)name class:(NSString *)clazz pros:(NSDictionary *)pros
-{
-    if (self = [super initWithName:name class:clazz]) {
-        _properties = pros;
-    }
-    
-    return self;
-}
-
-- (BOOL)isValid
-{
-    if (self.name == nil || self.clazz == nil) {
-        return NO;
-    }
-    return YES;
-}
-
-@end
-
-@implementation WXComponentFactory
-{
-    NSMutableArray<WXComponentBaseType*> *_baseTypes;
-    NSMutableDictionary *_componentConfigs;
-    NSLock *_configLock;
-}
-
-#pragma mark Life Cycle
-
-+ (instancetype)sharedInstance {
-    static id _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-    });
-    return _sharedInstance;
-}
-
-- (instancetype)init
-{
-    if(self = [super init]){
-        _baseTypes = [NSMutableArray array];
-        _componentConfigs = [NSMutableDictionary dictionary];
-        _configLock = [[NSLock alloc] init];
-    }
-    return self;
-}
-
-#pragma mark Public
-
-+ (Class)classWithComponentName:(NSString *)name
-{
-    WXComponentConfig *config = [self configWithComponentName:name];
-    if(!config || !config.clazz) {
-        return nil;
-    }
-    
-    return NSClassFromString(config.clazz);
-}
-
-+ (WXComponentConfig *)configWithComponentName:(NSString *)name
-{
-    return [[self sharedInstance] configWithComponentName:name];
-}
-
-+ (void)registerBaseType:(NSString *)typeName withClass:(Class)clazz
-{
-    [[self sharedInstance] registerBaseType:typeName withClass:clazz];
-}
-
-+ (void)registerComponent:(NSString *)name withClass:(Class)clazz withPros:(NSDictionary *)pros
-{
-    [[self sharedInstance] registerComponent:name withClass:clazz withPros:pros];
-}
-
-+ (void)registerComponents:(NSArray *)components
-{
-    [[self sharedInstance] registerComponents:components];
-}
-
-+ (void)unregisterAllComponents
-{
-    [[self sharedInstance] unregisterAllComponents];
-}
-
-+ (NSDictionary *)componentConfigs {
-    return [[self sharedInstance] getComponentConfigs];
-}
-
-+ (SEL)methodWithComponentName:(NSString *)name withMethod:(NSString *)method {
-    return [[self sharedInstance] _methodWithComponetName:name withMethod:method isSync:NULL];
-}
-
-+ (SEL)methodWithComponentName:(NSString *)name withMethod:(NSString *)method isSync:(BOOL *)isSync
-{
-    return [[self sharedInstance] _methodWithComponetName:name withMethod:method isSync:isSync];
-}
-
-+ (NSMutableDictionary *)componentMethodMapsWithName:(NSString *)name
-{
-    return [[self sharedInstance] _componentMethodMapsWithName:name];
-}
-
-+ (NSMutableDictionary *)componentSelectorMapsWithName:(NSString *)name
-{
-    return [[self sharedInstance] _componentSelectorMapsWithName:name];
-}
-
-#pragma mark Private
-
-- (NSMutableDictionary *)_componentMethodMapsWithName:(NSString *)name
-{
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    NSMutableArray *methods = [NSMutableArray array];
-    
-    [_configLock lock];
-    [dict setValue:methods forKey:@"methods"];
-    
-    WXComponentConfig *config = _componentConfigs[name];
-    void (^mBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        [methods addObject:mKey];
-    };
-    [config.asyncMethods enumerateKeysAndObjectsUsingBlock:mBlock];
-    [config.syncMethods enumerateKeysAndObjectsUsingBlock:mBlock];
-    [_configLock unlock];
-    
-    return dict;
-}
-
-- (NSMutableDictionary *)_componentSelectorMapsWithName:(NSString *)name
-{
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    NSMutableArray *methods = [NSMutableArray array];
-    
-    [_configLock lock];
-    [dict setValue:methods forKey:@"methods"];
-    
-    WXComponentConfig *config = _componentConfigs[name];
-    void (^mBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        [methods addObject:mObj];
-    };
-    [config.asyncMethods enumerateKeysAndObjectsUsingBlock:mBlock];
-    [config.syncMethods enumerateKeysAndObjectsUsingBlock:mBlock];
-    [_configLock unlock];
-    
-    return dict;
-}
-
-- (SEL)_methodWithComponetName:(NSString *)name withMethod:(NSString *)method isSync:(BOOL *)isSync
-{
-    WXAssert(name && method, @"Fail to find selector with module name and method, please check if the parameters are correct !");
-    
-    NSString *selStr = nil; SEL selector = nil;
-    WXComponentConfig *config = nil;
-    [_configLock lock];
-    config = [_componentConfigs objectForKey:name];
-    if (config.asyncMethods) {
-        selStr = [config.asyncMethods objectForKey:method];
-    }
-    if (isSync && !selStr && config.syncMethods) {
-        selStr = [config.syncMethods objectForKey:method];
-        if (selStr.length > 0) {
-            *isSync = YES;
-        }
-    }
-    if (selStr) {
-        selector = NSSelectorFromString(selStr);
-    }
-    [_configLock unlock];
-    return selector;
-}
-
-- (NSDictionary *)getComponentConfigs {
-    NSMutableDictionary *componentDic = [[NSMutableDictionary alloc] init];
-    void (^componentBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        WXComponentConfig *componentConfig = (WXComponentConfig *)mObj;
-        if ([componentConfig isValid]) {
-            NSMutableDictionary *configDic = [[NSMutableDictionary alloc] init];
-            [configDic setObject:componentConfig.name forKey:@"name"];
-            [configDic setObject:componentConfig.clazz forKey:@"clazz"];
-            if (componentConfig.properties) {
-                [configDic setObject:componentConfig.properties forKey:@"pros"];
-            }
-            [componentDic setObject:configDic forKey:componentConfig.name];
-        }
-    };
-    [_componentConfigs enumerateKeysAndObjectsUsingBlock:componentBlock];
-    return componentDic;
-}
-
-- (WXComponentConfig *)configWithComponentName:(NSString *)name
-{
-    WXAssert(name, @"Can not find config for a nil component name");
-    
-    WXComponentConfig *config = nil;
-    
-    [_configLock lock];
-    config = [_componentConfigs objectForKey:name];
-    if (!config) {
-        WXLogWarning(@"No component config for name:%@, use default config", name);
-        config = [_componentConfigs objectForKey:@"div"];
-    }
-    [_configLock unlock];
-    
-    return config;
-}
-
-- (void)registerBaseType:(NSString *)typeName withClass:(Class)clazz
-{
-    if ([typeName length] > 0 && clazz != Nil) {
-        WXComponentBaseType* typePair = [[WXComponentBaseType alloc] init];
-        typePair.type = typeName;
-        typePair.clazz = clazz;
-        [_baseTypes addObject:typePair];
-    }
-}
-
-- (void)registerAffineType:(NSString *)typeName withClass:(Class)clazz
-{
-    // iterates super classes of clazz and check if any super class matches registerd base types
-    if ([_baseTypes count] > 0 && [typeName length] > 0 && clazz != Nil) {
-        Class supercls = [clazz superclass];
-        while (supercls) {
-            if (supercls == [WXComponent class]) {
-                break;
-            }
-            
-            for (WXComponentBaseType* typePair in _baseTypes) {
-                if (supercls == typePair.clazz) {
-                    WXLogInfo(@"Type '%@' is registerd as affine type of '%@' because '%@' is subclass of '%@'.", typeName, typePair.type, clazz, supercls);
-                    [WXCoreBridge registerComponentAffineType:typeName asType:typePair.type];
-                    return; // done, use the first found affine type
-                }
-            }
-            supercls = [supercls superclass];
-        }
-    }
-}
-
-- (void)registerComponent:(NSString *)name withClass:(Class)clazz withPros:(NSDictionary *)pros
-{
-    WXAssert(name && clazz, @"name or clazz must not be nil for registering component.");
-    
-    WXComponentConfig *config = nil;
-    [_configLock lock];
-    config = [_componentConfigs objectForKey:name];
-    
-    if(config){
-        WXLogInfo(@"Overrider component name:%@ class:%@, to name:%@ class:%@",
-                  config.name, config.class, name, clazz);
-    }
-    
-    config = [[WXComponentConfig alloc] initWithName:name class:NSStringFromClass(clazz) pros:pros];
-    [_componentConfigs setValue:config forKey:name];
-    [config registerMethods];
-    [self registerAffineType:name withClass:clazz];
-    [_configLock unlock];
-}
-
-- (void)registerComponents:(NSArray *)components
-{
-    WXAssert(components, @"components array must not be nil for registering component.");
-    
-    [_configLock lock];
-    for(NSDictionary *dict in components){
-        NSString *name = dict[@"name"];
-        NSString *clazz = dict[@"class"];
-        WXAssert(name && clazz, @"name or clazz must not be nil for registering components.");
-        
-        WXComponentConfig *config = [[WXComponentConfig alloc] initWithName:name class:clazz pros:nil];
-        if(config){
-            [_componentConfigs setValue:config forKey:name];
-            [config registerMethods];
-            [self registerAffineType:name withClass:NSClassFromString(clazz)];
-        }
-    }
-    [_configLock unlock];
-}
-
-- (void)unregisterAllComponents
-{
-    [_configLock lock];
-    [_componentConfigs removeAllObjects];
-    [_configLock unlock];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
deleted file mode 100644
index 9e74572..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <CoreGraphics/CoreGraphics.h>
-#import <Foundation/Foundation.h>
-
-@class WXBridgeMethod;
-@class WXSDKInstance;
-@class WXComponent;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-void WXPerformBlockOnComponentThread(void (^block)(void));
-void WXPerformBlockSyncOnComponentThread(void (^block)(void));
-    
-#ifdef __cplusplus
-}
-#endif
-
-@interface WXComponentManager : NSObject
-
-@property (nonatomic, readonly, weak) WXSDKInstance *weexInstance;
-@property (nonatomic, readonly, assign) BOOL isValid;
-
-/**
- * @abstract initialize with weex instance
- **/
-- (instancetype)initWithWeexInstance:(WXSDKInstance *)weexInstance;
-
-/**
- * @abstract return the component thread
- **/
-+ (NSThread *)componentThread;
-
-/**
- * @abstract starting component tasks
- **/
-- (void)startComponentTasks;
-
-/**
- * @abstract tell the component manager that instance root view's frame has been changed
- **/
-- (void)rootViewFrameDidChange:(CGRect)frame;
-
-///--------------------------------------
-/// @name Component Tree Building
-///--------------------------------------
-
-/**
- * @abstract create root component
- **/
-- (void)createBody:(NSString*)ref
-              type:(NSString*)type
-            styles:(NSDictionary*)styles
-        attributes:(NSDictionary*)attributes
-            events:(NSArray*)events
-      renderObject:(void*)renderObject;
-
-/**
- * @abstract add a component to its parent
- **/
-- (void)addComponent:(NSString*)ref
-                type:(NSString*)type
-           parentRef:(NSString*)parentRef
-              styles:(NSDictionary*)styles
-          attributes:(NSDictionary*)attributes
-              events:(NSArray*)events
-               index:(NSInteger)index
-        renderObject:(void*)renderObject;
-
-/**
- * @abstract move component
- **/
-- (void)moveComponent:(NSString *)ref toSuper:(NSString *)superRef atIndex:(NSInteger)index;
-
-/**
- * @abstract remove component
- **/
-- (void)removeComponent:(NSString *)ref;
-
-/**
- * @abstract notify that a component tree is built and trigger layout,
-    may be called several times rendering a page.
- **/
-- (void)appendTreeCreateFinish:(NSString*)ref;
-
-/**
- * @abstract return component for specific ref, must be called on component thread by calling WXPerformBlockOnComponentThread
- */
-- (WXComponent *)componentForRef:(NSString *)ref;
-
-/**
- * @abstract return root component
- */
-- (WXComponent *)componentForRoot;
-
-/**
- * @abstract number of components created, must be called on component thread by calling WXPerformBlockOnComponentThread
- */
-- (NSUInteger)numberOfComponents;
-
-/**
- * @abstract add an existing component to references look-up map
- */
-- (void)addComponent:(WXComponent *)component toIndexDictForRef:(NSString *)ref;
-
-/**
- * @abstract remove an existing component to references look-up map
- */
-- (void)removeComponentForRef:(NSString *)ref;
-
-///--------------------------------------
-/// @name Updating
-///--------------------------------------
-
-/**
- * @abstract update styles
- **/
-- (void)updateStyles:(NSDictionary *)styles forComponent:(NSString *)ref;
-
-/**
- * @abstract update pseudo class styles
- **/
-- (void)updatePseudoClassStyles:(NSDictionary *)styles forComponent:(NSString *)ref;
-
-/**
- * @abstract update attributes
- **/
-- (void)updateAttributes:(NSDictionary *)attributes forComponent:(NSString *)ref;
-
-/**
- * @abstract quick check that if a component has non transition properties
- **/
-- (BOOL)isTransitionNoneOfComponent:(NSString*)ref; // for quick access
-
-/**
- * @abstract check if component with @ref has any style in @styles which is animated
- **/
-- (BOOL)hasTransitionPropertyInStyles:(NSDictionary*)styles forComponent:(NSString*)ref;
-
-/**
- * @abstract layout a component with frame output by weex core layout engine
- **/
-- (void)layoutComponent:(WXComponent*)component frame:(CGRect)frame isRTL:(BOOL)isRTL innerMainSize:(CGFloat)innerMainSize;
-
-/**
- * @abstract layout a component on platform side
- **/
-- (void)layoutComponent:(WXComponent*)component;
-
-/**
- * @abstract add event
- **/
-- (void)addEvent:(NSString *)event toComponent:(NSString *)ref;
-
-/**
- * @abstract remove event
- **/
-- (void)removeEvent:(NSString *)event fromComponent:(NSString *)ref;
-
-/**
- * @abstract scroll to specific component
- **/
-- (void)scrollToComponent:(NSString *)ref options:(NSDictionary *)options;
-
-///--------------------------------------
-/// @name Life Cycle
-///--------------------------------------
-
-/**
- * @abstract called when all doms are created
- **/
-- (void)createFinish;
-
-/**
- * @abstract called when all doms are refreshed
- **/
-- (void)refreshFinish;
-
-/**
- * @abstract called when all doms are updated
- **/
-- (void)updateFinish;
-
-/**
- * @abstract called when all doms are created and layout finished
- **/
-- (void)renderFinish;
-
-/**
- * @abstract called when render failed
- **/
-- (void)renderFailed:(NSError *)error;
-
-/**
- * @abstract unload
- **/
-- (void)unload;
-
-/**
- * @abstract invalidate component management, this can be called on main thread.
- **/
-- (void)invalidate;
-
-///--------------------------------------
-/// @name Fixed
-///--------------------------------------
-
-/**
- *  @abstract add a component which has a fixed position
- *
- *  @param fixComponent the fixed component to add
- */
-- (void)addFixedComponent:(WXComponent *)fixComponent;
-
-/**
- *  @abstract remove a component which has a fixed position
- *
- *  @param fixComponent the fixed component to remove
- */
-- (void)removeFixedComponent:(WXComponent *)fixComponent;
-
-/**
- * @abstract add a task to UI thread
- **/
-- (void)_addUITask:(void (^)(void))block;
-
-/**
- * @abstract execute a task to UI thread
- **/
-- (void)executePrerenderUITask:(NSString *)url;
-
-/**
- * @param styles a NSDictionary value, styles which will resolve
- * @param component a WXComponent value, the target which you want to resolve
- * @param isUpdateStyles a BOOL value, YES will udpate the component style property, NO will notifiy the lifeStyle of compoenent to handle, default value is NO.
- * @abstract handleStyle will be add to a queue to be executed every frame, but handleStyleOnMainThread will switch to main thread and execute imediately, you can call this for your execution time sequence.
- */
-- (void)handleStyleOnMainThread:(NSDictionary*)styles forComponent:(WXComponent *)component isUpdateStyles:(BOOL)isUpdateStyles;
-
-///--------------------------------------
-/// @name Enumerating
-///--------------------------------------
-
-/**
- * Enumerate components using breadth-first search algorithm,
- must be called on component thread by calling WXPerformBlockOnComponentThread
- */
-- (void)enumerateComponentsUsingBlock:(void (^)(WXComponent *, BOOL *stop))block;
-
-#pragma mark batch mark
-
-/**
- a start native batch tag for a group of UI operations, company with performBatchEnd
- @see performBatchEnd
- */
-- (void)performBatchBegin;
-
-/**
- an end native batch tag for a group of UI operations, company with performBatchBegin
- @see performBatchBegin
- */
-- (void)performBatchEnd;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
deleted file mode 100644
index eaea659..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.mm
+++ /dev/null
@@ -1,1217 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponentManager.h"
-#import "WXComponent.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+DataBinding.h"
-#import "WXComponentFactory.h"
-#import "WXDefine.h"
-#import "NSArray+Weex.h"
-#import "WXSDKInstance.h"
-#import "WXAssert.h"
-#import "WXUtility.h"
-#import "WXMonitor.h"
-#import "WXScrollerProtocol.h"
-#import "WXSDKManager.h"
-#import "WXSDKError.h"
-#import "WXInvocationConfig.h"
-#import "WXHandlerFactory.h"
-#import "WXValidateProtocol.h"
-#import "WXPrerenderManager.h"
-#import "WXSDKInstance_performance.h"
-#import "WXRootView.h"
-#import "WXComponent+Layout.h"
-#import "WXCoreBridge.h"
-#import "WXComponent_performance.h"
-#import "WXAnalyzerCenter.h"
-#import "WXDisplayLinkManager.h"
-
-static NSThread *WXComponentThread;
-
-/* Task scheduled on component thread and triggered every N display link ticks.
- If display link is stopped, the tasks are also suspended. */
-@interface WXComponentThreadTickTask : NSObject
-
-@property (nonatomic, assign) NSUInteger displayTickCount; // Triggered every N display link ticks
-@property (nonatomic, copy) dispatch_block_t block;
-
-@end
-
-@implementation WXComponentThreadTickTask
-
-+ (instancetype)taskWithBlock:(dispatch_block_t)block tickCount:(NSUInteger)tickCount
-{
-    WXComponentThreadTickTask* task = [[WXComponentThreadTickTask alloc] init];
-    task.displayTickCount = tickCount;
-    task.block = block;
-    return task;
-}
-
-@end
-
-#define WXAssertComponentExist(component)  WXAssert(component, @"component not exists")
-#define MAX_DROP_FRAME_FOR_BATCH   200
-
-@interface WXComponentManager () <WXDisplayLinkClient>
-@end
-
-@implementation WXComponentManager
-{
-    __weak WXSDKInstance *_weexInstance;
-    BOOL _isValid;
-    
-    BOOL _stopRunning;
-    NSUInteger _noTaskTickCount;
-    
-    // access only on component thread
-    NSMapTable<NSString *, WXComponent *> *_indexDict;
-    NSMutableArray<dispatch_block_t> *_uiTaskQueue;
-    NSMutableDictionary *_uiPrerenderTaskQueue;
-    
-    NSUInteger _displayTick;
-    NSMutableArray<WXComponentThreadTickTask*> *_displayTaskQueue;
-    
-    // vdom depth and component count statistics
-    NSUInteger _maxVdomDepth;
-    NSUInteger _maxVdomDepthReported;
-    NSUInteger _maxComponentCount;
-    NSUInteger _maxComponentCountReported;
-
-    WXComponent *_rootComponent;
-    NSMutableArray *_fixedComponents;
-
-    pthread_mutex_t _propertyMutex;
-    pthread_mutexattr_t _propertMutexAttr;
-    NSUInteger _syncUITaskCount;
-}
-
-+ (instancetype)sharedManager
-{
-    static id _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-    });
-    return _sharedInstance;
-}
-
-- (instancetype)initWithWeexInstance:(id)weexInstance
-{
-    if (self = [self init]) {
-        _weexInstance = weexInstance;
-        _syncUITaskCount = 0;
-        _indexDict = [NSMapTable strongToWeakObjectsMapTable];
-        _fixedComponents = [NSMutableArray wx_mutableArrayUsingWeakReferences];
-        _uiTaskQueue = [NSMutableArray array];
-        _displayTaskQueue = [NSMutableArray array];
-        _isValid = YES;
-        pthread_mutexattr_init(&_propertMutexAttr);
-        pthread_mutexattr_settype(&_propertMutexAttr, PTHREAD_MUTEX_RECURSIVE);
-        pthread_mutex_init(&_propertyMutex, &_propertMutexAttr);
-        
-        WXPerformBlockOnComponentThread(^{
-            // We should ensure that [WXDisplayLinkManager sharedInstance] is only invoked in component thread.
-            [self _addVdomAndComponentCountTask];
-            [self _startDisplayLink];
-        });
-    }
-    
-    return self;
-}
-
-- (instancetype)init
-{
-    if (self == [super init]) {
-        _suspend = NO;
-    }
-    return self;
-}
-
-- (void)dealloc
-{
-    [NSMutableArray wx_releaseArray:_fixedComponents];
-    pthread_mutex_destroy(&_propertyMutex);
-    pthread_mutexattr_destroy(&_propertMutexAttr);
-}
-
-#pragma mark Thread Management
-
-+ (NSThread *)componentThread
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        WXComponentThread = [[NSThread alloc] initWithTarget:[self sharedManager] selector:@selector(_runLoopThread) object:nil];
-        [WXComponentThread setName:WX_COMPONENT_THREAD_NAME];
-        [WXComponentThread setQualityOfService:[[NSThread mainThread] qualityOfService]];
-        [WXComponentThread start];
-    });
-    
-    return WXComponentThread;
-}
-
-- (void)_runLoopThread
-{
-    [[NSRunLoop currentRunLoop] addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
-    
-    while (!_stopRunning) {
-        @autoreleasepool {
-            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
-        }
-    }
-}
-
-+ (void)_performBlockOnComponentThread:(void (^)(void))block
-{
-    if([NSThread currentThread] == [self componentThread]){
-        block();
-    } else {
-        [self performSelector:@selector(_performBlockOnComponentThread:)
-                     onThread:WXComponentThread
-                   withObject:[block copy]
-                waitUntilDone:NO];
-    }
-}
-
-+ (void)_performBlockSyncOnComponentThread:(void (^)(void))block
-{
-    if([NSThread currentThread] == [self componentThread]){
-        block();
-    } else {
-        [self performSelector:@selector(_performBlockOnComponentThread:)
-                     onThread:WXComponentThread
-                   withObject:[block copy]
-                waitUntilDone:YES];
-    }
-}
-
-- (void)startComponentTasks
-{
-    [self _awakeDisplayLink];
-}
-
-- (void)rootViewFrameDidChange:(CGRect)frame
-{
-    WXAssertComponentThread();
-    CGSize size = _weexInstance.frame.size;
-    [WXCoreBridge setDefaultDimensionIntoRoot:_weexInstance.instanceId
-                                        width:size.width height:size.height
-                           isWidthWrapContent:size.width == 0.0f isHeightWrapContent:size.height == 0.0f];
-    [_rootComponent setNeedsLayout];
-    [self startComponentTasks];
-}
-
-- (void)_addUITask:(void (^)(void))block
-{
-    if(!_uiPrerenderTaskQueue){
-        _uiPrerenderTaskQueue = [NSMutableDictionary new];
-    }
-    if(self.weexInstance.needPrerender){
-        NSMutableArray<dispatch_block_t> *tasks  = [_uiPrerenderTaskQueue objectForKey:[WXPrerenderManager getTaskKeyFromUrl:self.weexInstance.scriptURL.absoluteString]];
-        if(!tasks){
-            tasks = [NSMutableArray new];
-        }
-        [tasks addObject:block];
-        [_uiPrerenderTaskQueue setObject:tasks forKey:[WXPrerenderManager getTaskKeyFromUrl:self.weexInstance.scriptURL.absoluteString]];
-    }else{
-        [_uiTaskQueue addObject:block];
-    }
-}
-
-- (void)executePrerenderUITask:(NSString *)url
-{
-    NSMutableArray *tasks  = [_uiPrerenderTaskQueue objectForKey:[WXPrerenderManager getTaskKeyFromUrl:self.weexInstance.scriptURL.absoluteString]];
-    for (id block in tasks) {
-        [_uiTaskQueue addObject:block];
-    }
-    tasks = [NSMutableArray new];
-    [_uiPrerenderTaskQueue setObject:tasks forKey:[WXPrerenderManager getTaskKeyFromUrl:self.weexInstance.scriptURL.absoluteString]];
-}
-
-#pragma mark Component Tree Building
-
-- (void)createBody:(NSString*)ref
-              type:(NSString*)type
-            styles:(NSDictionary*)styles
-        attributes:(NSDictionary*)attributes
-            events:(NSArray*)events
-      renderObject:(void*)renderObject
-{
-    WXAssertComponentThread();
-    WXAssertParam(ref);
-    WXAssertParam(type);
-    WXAssertParam(renderObject);
-    WXAssert(_rootComponent == nil, @"Create body is invoked twice.");
-    
-    _rootComponent = [self _buildComponent:ref type:type supercomponent:nil styles:styles attributes:attributes events:events renderObject:renderObject];
-    
-    CGSize size = _weexInstance.frame.size;
-    [WXCoreBridge setDefaultDimensionIntoRoot:_weexInstance.instanceId
-                                        width:size.width height:size.height
-                           isWidthWrapContent:size.width == 0.0f isHeightWrapContent:size.height == 0.0f];
-    
-    __weak typeof(self) weakSelf = self;
-    WX_MONITOR_INSTANCE_PERF_END(WXFirstScreenJSFExecuteTime, self.weexInstance);
-    [self _addUITask:^{
-        __strong typeof(self) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            return;
-        }
-        
-        strongSelf.weexInstance.rootView.wx_component = strongSelf->_rootComponent;
-        [strongSelf.weexInstance.rootView addSubview:strongSelf->_rootComponent.view];
-    }];
-}
-
-- (void)addComponent:(NSString*)ref
-                type:(NSString*)type
-           parentRef:(NSString*)parentRef
-              styles:(NSDictionary*)styles
-          attributes:(NSDictionary*)attributes
-              events:(NSArray*)events
-               index:(NSInteger)index
-        renderObject:(void*)renderObject
-{
-    WXAssertComponentThread();
-    WXAssertParam(ref);
-    WXAssertParam(type);
-    WXAssertParam(parentRef);
-    WXAssertParam(renderObject);
-    
-    WXComponent *supercomponent = [_indexDict objectForKey:parentRef];
-    WXAssertComponentExist(supercomponent);
-    
-    if (!supercomponent) {
-        WXLogWarning(@"addComponent,superRef from js never exit ! check JS action, supRef:%@", parentRef);
-        return;
-    }
-    if([WXAnalyzerCenter isInteractionLogOpen]){
-         WXLogDebug(@"wxInteractionAnalyzer: [client][addElementStart]%@,%@,%@",supercomponent.weexInstance.instanceId,type,ref);
-    }
-    
-    supercomponent.weexInstance.apmInstance.hasAddView = YES;
-    
-    WXComponent *component = [self _buildComponent:ref type:type supercomponent:supercomponent styles:styles attributes:attributes events:events renderObject:renderObject];
-    if (!supercomponent.subcomponents) {
-        index = 0;
-    } else {
-        index = (index == -1 ? supercomponent->_subcomponents.count : index);
-    }
-    if (supercomponent.ignoreInteraction) {
-        component.ignoreInteraction = YES;
-    } else {
-        if ([[attributes objectForKey:@"ignoreInteraction"] boolValue]) {
-            component.ignoreInteraction = YES;
-        } else {
-            if (component->_positionType == WXPositionTypeFixed) {
-                component.ignoreInteraction = YES;
-            } else {
-                component.ignoreInteraction = NO;
-            }
-        }
-    }
-    
-#ifdef DEBUG
-    WXLogDebug(@"flexLayout -> _recursivelyAddComponent : super:(%@,%@):[%f,%f] ,child:(%@,%@):[%f,%f],childClass:%@",
-               supercomponent.type,
-               supercomponent.ref,
-               supercomponent.flexCssNode->getStyleWidth(),
-               supercomponent.flexCssNode->getStyleHeight(),
-               component.type,
-               component.ref,
-               component.flexCssNode->getStyleWidth(),
-               component.flexCssNode->getStyleHeight(),
-               NSStringFromClass([component class])
-               );
-#endif //DEBUG
-    
-    BOOL inserted = [supercomponent _insertSubcomponent:component atIndex:index];
-    if (!inserted) {
-        // component is not inserted, ignore
-        [component _setRenderObject:nullptr]; // unbind with RenderObject
-        return;
-    }
-    
-    // use _lazyCreateView to forbid component like cell's view creating
-    if (supercomponent && component && supercomponent->_lazyCreateView) {
-        component->_lazyCreateView = YES;
-    }
-    
-    // update max vdom depth & component count, and will update apm data on next display task.
-    [self recordMaximumVirtualDom:component];
-    if ([_indexDict count] > _maxComponentCount) {
-        _maxComponentCount = [_indexDict count];
-    }
-    
-    if (!component->_isTemplate) {
-        __weak typeof(self) weakSelf = self;
-        [self _addUITask:^{
-            __strong typeof(self) strongSelf = weakSelf;
-            if (strongSelf == nil) {
-                return;
-            }
-            
-            [supercomponent insertSubview:component atIndex:index];
-        }];
-    }
-    if([WXAnalyzerCenter isInteractionLogOpen]){
-        WXLogDebug(@"wxInteractionAnalyzer: [client][addElementEnd]%@,%@,%@",supercomponent.weexInstance.instanceId,type,ref);
-    }
-}
-
-- (void)moveComponent:(NSString *)ref toSuper:(NSString *)superRef atIndex:(NSInteger)index
-{
-    WXAssertComponentThread();
-    WXAssertParam(ref);
-    WXAssertParam(superRef);
-    
-    WXComponent *component = [_indexDict objectForKey:ref];
-    WXComponent *newSupercomponent = [_indexDict objectForKey:superRef];
-    WXAssertComponentExist(component);
-    WXAssertComponentExist(newSupercomponent);
-    
-    [component _moveToSupercomponent:newSupercomponent atIndex:index];
-    __weak typeof(self) weakSelf = self;
-    [self _addUITask:^{
-        __strong typeof(self) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            return;
-        }
-        
-        [component moveToSuperview:newSupercomponent atIndex:index];
-    }];
-}
-
-- (void)removeComponent:(NSString *)ref
-{
-    WXAssertComponentThread();
-    WXAssertParam(ref);
-    
-    WXComponent *component = [_indexDict objectForKey:ref];
-    WXAssertComponentExist(component);
-    
-    if (!component) {
-        WXLogWarning(@"removeComponent ref from js never exit ! check JS action, ref :%@",ref);
-        return;
-    }
-    
-    [component _setRenderObject:nullptr]; // unbind with RenderObject
-    [component _removeFromSupercomponent];
-    
-    [_indexDict removeObjectForKey:ref];
-    
-    // remove subcomponents of component from _indexDict and unbind them
-    NSMutableArray* subcomponents = [[NSMutableArray alloc] init];
-    [component _collectSubcomponents:subcomponents];
-    for (WXComponent* c in subcomponents) {
-        [c _setRenderObject:nullptr];
-        [_indexDict removeObjectForKey:c.ref];
-    }
-    
-    __weak typeof(self) weakSelf = self;
-    [self _addUITask:^{
-        __strong typeof(self) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            return;
-        }
-        
-        if (component.supercomponent) {
-            [component.supercomponent willRemoveSubview:component];
-        }
-        [component removeFromSuperview];
-    }];
-    
-    [self _checkFixedSubcomponentToRemove:component];
-}
-
-- (void)appendTreeCreateFinish:(NSString*)ref
-{
-    WXAssertComponentThread();
-    
-    // If appending tree,force layout in case of too much tasks piling up in syncQueue
-    [self _layoutAndSyncUI];
-}
-
-- (void)recordMaximumVirtualDom:(WXComponent*) component
-{
-    WXAssertComponentExist(component);
-    if(!component){
-        return;
-    }
-    int maxDeep =0;
-    while (component) {
-        maxDeep++;
-        component = component.supercomponent;
-    }
-    
-    if (maxDeep > [self weexInstance].performance.maxVdomDeep) {
-        [self weexInstance].performance.maxVdomDeep = maxDeep;
-    }
-    
-    if (maxDeep > _maxVdomDepth) {
-        _maxVdomDepth = maxDeep;
-    }
-}
-
-- (void)_checkFixedSubcomponentToRemove:(WXComponent *)component
-{
-    for (WXComponent *subcomponent in component.subcomponents) {
-        if (subcomponent->_positionType == WXPositionTypeFixed) {
-             [self _addUITask:^{
-                 [subcomponent removeFromSuperview];
-             }];
-        }
-        
-        [self _checkFixedSubcomponentToRemove:subcomponent];
-    }
-}
-
-- (WXComponent *)componentForRef:(NSString *)ref
-{
-    WXAssertComponentThread();
-    
-    return [_indexDict objectForKey:ref];
-}
-
-- (WXComponent *)componentForRoot
-{
-    return _rootComponent;
-}
-
-- (NSUInteger)numberOfComponents
-{
-    WXAssertComponentThread();
-    
-    return _indexDict.count;
-}
-
-- (WXComponent *)_buildComponent:(NSString *)ref
-                            type:(NSString*)type
-                  supercomponent:(WXComponent *)supercomponent
-                          styles:(NSDictionary*)styles
-                      attributes:(NSDictionary*)attributes
-                          events:(NSArray*)events
-                    renderObject:(void*)renderObject
-{
-    double buildStartTime = CACurrentMediaTime()*1000;
-    
-    if (self.weexInstance.needValidate) {
-        id<WXValidateProtocol> validateHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXValidateProtocol)];
-        if (validateHandler) {
-            WXComponentValidateResult* validateResult;
-            if ([validateHandler respondsToSelector:@selector(validateWithWXSDKInstance:component:supercomponent:)]) {
-                validateResult = [validateHandler validateWithWXSDKInstance:self.weexInstance component:type supercomponent:supercomponent];
-            }
-            if (validateResult==nil || !validateResult.isSuccess) {
-                type = validateResult.replacedComponent? validateResult.replacedComponent : @"div";
-                WXLogError(@"%@",[validateResult.error.userInfo objectForKey:@"errorMsg"]);
-            }
-        }
-    }
-    
-    WXComponentConfig *config = [WXComponentFactory configWithComponentName:type];
-    BOOL isTemplate = [config.properties[@"isTemplate"] boolValue] || (supercomponent && supercomponent->_isTemplate);
-    NSDictionary *bindingStyles = nil;
-    NSDictionary *bindingAttibutes = nil;
-    NSDictionary *bindingEvents = nil;
-    NSDictionary *bindingProps = nil;
-    if (isTemplate) {
-        bindingProps = [self _extractBindingProps:&attributes];
-        bindingStyles = [self _extractBindings:&styles];
-        bindingAttibutes = [self _extractBindings:&attributes];
-        bindingEvents = [self _extractBindingEvents:&events];
-    }
-    
-    Class clazz = NSClassFromString(config.clazz);
-    WXComponent *component = [[clazz alloc] init];
-    if (component) {
-        if (renderObject) {
-            [component _setRenderObject:renderObject];
-        }
-        component = [component initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:self.weexInstance];
-        if (isTemplate) {
-            component->_isTemplate = YES;
-            [component _storeBindingsWithProps:bindingProps styles:bindingStyles attributes:bindingAttibutes events:bindingEvents];
-        }
-    }
-    
-    WXAssert(component, @"Component build failed for ref:%@, type:%@", ref, type);
-    
-    [_indexDict setObject:component forKey:component.ref];
-    [component readyToRender];// notify redyToRender event when init
-    
-    double diffTime = CACurrentMediaTime()*1000 - buildStartTime;
-    [self.weexInstance.performance recordComponentCreatePerformance:diffTime forComponent:component];
-    
-    return component;
-}
-
-- (void)addComponent:(WXComponent *)component toIndexDictForRef:(NSString *)ref
-{
-    [_indexDict setObject:component forKey:ref];
-}
-
-- (void)removeComponentForRef:(NSString *)ref
-{
-    [_indexDict removeObjectForKey:ref];
-}
-
-- (NSDictionary *)_extractBindings:(NSDictionary **)attributesOrStylesPoint
-{
-    NSDictionary *attributesOrStyles = *attributesOrStylesPoint;
-    if (!attributesOrStyles) {
-        return nil;
-    }
-    
-    NSMutableDictionary *newAttributesOrStyles = [attributesOrStyles mutableCopy];
-    NSMutableDictionary *bindingAttributesOrStyles = [NSMutableDictionary dictionary];
-    
-    [attributesOrStyles enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull attributeOrStyleName, id  _Nonnull attributeOrStyle, BOOL * _Nonnull stop) {
-        if ([WXBindingMatchIdentify isEqualToString:attributeOrStyleName] // match
-            ||  [WXBindingRepeatIdentify isEqualToString:attributeOrStyleName] // repeat
-            ||  [WXBindingOnceIdentify isEqualToString:attributeOrStyleName] // once
-            ||([attributeOrStyle isKindOfClass:[NSDictionary class]] && attributeOrStyle[WXBindingIdentify])) {  // {"attributeOrStyleName": {"@binding":"bindingExpression"}
-            bindingAttributesOrStyles[attributeOrStyleName] = attributeOrStyle;
-            [newAttributesOrStyles removeObjectForKey:attributeOrStyleName];
-        } else if ([attributeOrStyle isKindOfClass:[NSArray class]]) {
-            // {"attributeOrStyleName":[..., "string", {"@binding":"bindingExpression"}, "string", {"@binding":"bindingExpression"}, ...]
-            __block BOOL isBinding = NO;
-            [attributeOrStyle enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-                if ([obj isKindOfClass:[NSDictionary class]] && obj[WXBindingIdentify]) {
-                    isBinding = YES;
-                    *stop = YES;
-                }
-            }];
-            
-            if (isBinding) {
-                bindingAttributesOrStyles[attributeOrStyleName] = attributeOrStyle;
-                [newAttributesOrStyles removeObjectForKey:attributeOrStyleName];
-            }
-        }
-    }];
-    
-    *attributesOrStylesPoint = newAttributesOrStyles;
-    
-    return bindingAttributesOrStyles;
-}
-
-- (NSDictionary *)_extractBindingEvents:(NSArray **)eventsPoint
-{
-    NSArray *events = *eventsPoint;
-    if (events == nil) {
-        return nil;
-    }
-    NSMutableArray *newEvents = [events mutableCopy];
-    NSMutableDictionary *bindingEvents = [NSMutableDictionary dictionary];
-    [events enumerateObjectsUsingBlock:^(id  _Nonnull event, NSUInteger idx, BOOL * _Nonnull stop) {
-        if ([event isKindOfClass:[NSDictionary class]] && event[@"type"] && event[@"params"]) {
-            NSString *eventName = event[@"type"];
-            NSString *bindingParams = event[@"params"];
-            bindingEvents[eventName] = bindingParams;
-            newEvents[idx] = eventName;
-        }
-    }];
-    
-    *eventsPoint = newEvents;
-    return bindingEvents;
-}
-
-- (NSDictionary *)_extractBindingProps:(NSDictionary **)attributesPoint
-{
-    NSDictionary *attributes = *attributesPoint;
-    if (attributes == nil) {
-        return nil;
-    }
-    if (attributes[@"@componentProps"]) {
-        NSMutableDictionary *newAttributes = [attributes mutableCopy];
-        [newAttributes removeObjectForKey:@"@componentProps"];
-        *attributesPoint = newAttributes;
-        return attributes[@"@componentProps"];
-    }
-    
-    return nil;
-}
-
-#pragma mark Reset
-
-- (BOOL)isShouldReset:(id )value
-{
-    if([value isKindOfClass:[NSString class]]) {
-        if(!value || [@"" isEqualToString:value]) {
-            return YES;
-        }
-    }
-    return NO;
-}
-
-- (void)filterStyles:(NSDictionary *)styles normalStyles:(NSMutableDictionary *)normalStyles resetStyles:(NSMutableArray *)resetStyles
-{
-    for (NSString *key in styles) {
-        id value = [styles objectForKey:key];
-        if([self isShouldReset:value]) {
-            [resetStyles addObject:key];
-        }else{
-            [normalStyles setObject:styles[key] forKey:key];
-        }
-    }
-}
-
-- (void)updateStyles:(NSDictionary *)styles forComponent:(NSString *)ref
-{
-    [self handleStyles:styles forComponent:ref isUpdateStyles:YES];
-}
-
-- (void)updatePseudoClassStyles:(NSDictionary *)styles forComponent:(NSString *)ref
-{
-    [self handleStyles:styles forComponent:ref isUpdateStyles:NO];
-}
-
-- (void)handleStyleOnMainThread:(NSDictionary*)styles forComponent:(WXComponent *)component isUpdateStyles:(BOOL)isUpdateStyles
-{
-    WXAssertParam(styles);
-    WXAssertParam(component);
-    WXAssertMainThread();
-    
-    NSMutableDictionary *normalStyles = [NSMutableDictionary new];
-    NSMutableArray *resetStyles = [NSMutableArray new];
-    [self filterStyles:styles normalStyles:normalStyles resetStyles:resetStyles];
-    [component _updateStylesOnMainThread:normalStyles resetStyles:resetStyles];
-    [component readyToRender];
-    
-    WXPerformBlockOnComponentThread(^{
-        [component _updateStylesOnComponentThread:normalStyles resetStyles:resetStyles isUpdateStyles:isUpdateStyles];
-    });
-}
-
-- (void)handleStyles:(NSDictionary *)styles forComponent:(NSString *)ref isUpdateStyles:(BOOL)isUpdateStyles
-{
-    WXAssertParam(styles);
-    WXAssertParam(ref);
-    
-    WXComponent *component = [_indexDict objectForKey:ref];
-    WXAssertComponentExist(component);
-    
-    NSMutableDictionary *normalStyles = [NSMutableDictionary new];
-    NSMutableArray *resetStyles = [NSMutableArray new];
-    [self filterStyles:styles normalStyles:normalStyles resetStyles:resetStyles];
-    [component _updateStylesOnComponentThread:normalStyles resetStyles:resetStyles isUpdateStyles:isUpdateStyles];
-    [self _addUITask:^{
-        [component _updateStylesOnMainThread:normalStyles resetStyles:resetStyles];
-        [component readyToRender];
-    }];
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes forComponent:(NSString *)ref
-{
-    WXAssertParam(attributes);
-    WXAssertParam(ref);
-    
-    WXComponent *component = [_indexDict objectForKey:ref];
-    [component _updateAttributesOnComponentThread:attributes];
-    __weak typeof(self) weakSelf = self;
-    [self _addUITask:^{
-        __strong typeof(self) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            return;
-        }
-        
-        [component _updateAttributesOnMainThread:attributes];
-        [component readyToRender];
-    }];
-}
-
-- (BOOL)isTransitionNoneOfComponent:(NSString*)ref
-{
-    WXAssertComponentThread();
-    
-    WXComponent *component = [_indexDict objectForKey:ref];
-    WXAssertComponentExist(component);
-    
-    return [component _isTransitionNone];
-}
-
-- (BOOL)hasTransitionPropertyInStyles:(NSDictionary*)styles forComponent:(NSString*)ref
-{
-    WXAssertComponentThread();
-    
-    WXComponent *component = [_indexDict objectForKey:ref];
-    WXAssertComponentExist(component);
-    
-    return [component _hasTransitionPropertyInStyles:styles];
-}
-
-- (void)layoutComponent:(WXComponent*)component frame:(CGRect)frame isRTL:(BOOL)isRTL innerMainSize:(CGFloat)innerMainSize
-{
-    WXAssertComponentThread();
-    WXAssertParam(component);
-    
-    [component _setIsLayoutRTL:isRTL];
-    if (component == _rootComponent) {
-        // Synchronize view frame with root component, especially for content wrap mode.
-        WXPerformBlockOnMainThread(^{
-            if (!self.weexInstance.isRootViewFrozen &&
-                (!CGSizeEqualToSize(frame.size, self.weexInstance.frame.size) || !CGSizeEqualToSize(frame.size, self.weexInstance.rootView.frame.size))) {
-                CGRect rect = self.weexInstance.rootView.frame; // no change of origin
-                rect.size = frame.size;
-                self.weexInstance.rootView.frame = rect;
-            }
-        });
-    }
-    
-    if ([component _isCalculatedFrameChanged:frame]) {
-        [component _assignCalculatedFrame:frame];
-        [component _assignInnerContentMainSize:innerMainSize];
-        [component _frameDidCalculated:YES];
-        
-        [self _addUITask:^{
-            [component _layoutDidFinish];
-        }];
-    }
-    else {
-        CGFloat oldValue = [component _getInnerContentMainSize];
-        if (oldValue >= 0 && oldValue != innerMainSize) {
-            [component _assignCalculatedFrame:frame];
-            [component _assignInnerContentMainSize:innerMainSize];
-            [component _frameDidCalculated:YES];
-            
-            [self _addUITask:^{
-                [component _layoutDidFinish];
-            }];
-        }
-        else {
-            [component _frameDidCalculated:NO];
-        }
-    }
-}
-
-- (void)layoutComponent:(WXComponent*)component
-{
-    WXAssertComponentThread();
-    WXAssertParam(component);
-    [component _layoutPlatform];
-}
-
-- (void)addEvent:(NSString *)event toComponent:(NSString *)ref
-{
-    WXAssertComponentThread();
-    WXAssertParam(event);
-    WXAssertParam(ref);
-    
-    WXComponent *component = [_indexDict objectForKey:ref];
-    WXAssertComponentExist(component);
-    
-    [component _addEventOnComponentThread:event];
-    
-    [self _addUITask:^{
-        [component _addEventOnMainThread:event];
-    }];
-}
-
-- (void)removeEvent:(NSString *)event fromComponent:(NSString *)ref
-{
-    WXAssertComponentThread();
-    WXAssertParam(event);
-    WXAssertParam(ref);
-    
-    WXComponent *component = [_indexDict objectForKey:ref];
-    WXAssertComponentExist(component);
-    
-    [component _removeEventOnComponentThread:event];
-    
-    [self _addUITask:^{
-        [component _removeEventOnMainThread:event];
-    }];
-}
-
-- (void)scrollToComponent:(NSString *)ref options:(NSDictionary *)options
-{
-    WXAssertComponentThread();
-    WXAssertParam(ref);
-    
-    WXComponent *toComponent = [_indexDict objectForKey:ref];
-    WXAssertComponentExist(toComponent);
-
-    id<WXScrollerProtocol> scrollerComponent = toComponent.ancestorScroller;
-    if (!scrollerComponent) {
-        return;
-    }
-
-    CGFloat offset = [[options objectForKey:@"offset"] floatValue];
-    BOOL animated = YES;
-    if ([options objectForKey:@"animated"]) {
-        animated = [[options objectForKey:@"animated"] boolValue];
-    }
-    
-    [self _addUITask:^{
-        [scrollerComponent scrollToComponent:toComponent withOffset:offset animated:animated];
-    }];
-}
-
-#pragma mark Life Cycle
-
-- (void)createFinish
-{
-    WXAssertComponentThread();
-    
-    WXSDKInstance *instance  = self.weexInstance;
-    [self _addUITask:^{
-        
-        WX_MONITOR_INSTANCE_PERF_END(WXPTFirstScreenRender, instance);
-        WX_MONITOR_INSTANCE_PERF_END(WXPTAllRender, instance);
-        WX_MONITOR_SUCCESS(WXMTJSBridge);
-        WX_MONITOR_SUCCESS(WXMTNativeRender);
-    }];
-    [instance updatePerDicAfterCreateFinish];
-}
-
-- (void)updateFinish
-{
-    WXAssertComponentThread();
-    
-    WXSDKInstance *instance = self.weexInstance;
-    WXComponent *root = [_indexDict objectForKey:WX_SDK_ROOT_REF];
-    
-    [self _addUITask:^{
-        if (instance.updateFinish) {
-            instance.updateFinish(root.view);
-        }
-    }];
-}
-
-- (void)refreshFinish
-{
-    WXAssertComponentThread();
-    
-    WXSDKInstance *instance = self.weexInstance;
-    WXComponent *root = [_indexDict objectForKey:WX_SDK_ROOT_REF];
-    
-    [self _addUITask:^{
-        if (instance.refreshFinish) {
-            instance.refreshFinish(root.view);
-        }
-    }];
-}
-
-- (void)renderFinish
-{
-    WXAssertComponentThread();
-    
-    WXSDKInstance *instance  = self.weexInstance;
-    [self _addUITask:^{
-        UIView *rootView = instance.rootView;
-        [instance.performance onInstanceRenderSuccess:instance];
-        if (instance.renderFinish) {
-            instance.renderFinish(rootView);
-        }
-    }];
-}
-
-- (void)renderFailed:(NSError *)error {
-    WXAssertComponentThread();
-
-    WXSDKInstance *instance  = self.weexInstance;
-    [self _addUITask:^{
-        if (instance.onFailed) {
-            instance.onFailed(error);
-        }
-    }];
-}
-
-- (void)unload
-{
-    WXAssertComponentThread();
-    [self invalidate];
-    [self _stopDisplayLink];
-    
-    // first, unbind with underneath RenderObjects
-    {
-        NSEnumerator* enumerator = [_indexDict objectEnumerator];
-        WXComponent *component;
-        while ((component = [enumerator nextObject])) {
-            [component _setRenderObject:nullptr];
-        }
-    }
-    
-    // second, unload views and finally release components in UI thread
-    {
-        __block WXComponent* rootComponent = _rootComponent;
-        NSEnumerator *enumerator = [[_indexDict copy] objectEnumerator];
-        dispatch_async(dispatch_get_main_queue(), ^{
-            WXComponent *component;
-            while ((component = [enumerator nextObject])) {
-                [component _unloadViewWithReusing:NO];
-            }
-            rootComponent = nil; // finally release all components
-        });
-    }
-    
-    // clear containers
-    _rootComponent = nil;
-    [_indexDict removeAllObjects];
-    [_fixedComponents removeAllObjects];
-    [_uiTaskQueue removeAllObjects];
-}
-
-- (void)invalidate
-{
-    _isValid = NO;
-}
-
-- (BOOL)isValid
-{
-    return _isValid;
-}
-
-#pragma mark Display link task
-
-- (void)_addVdomAndComponentCountTask
-{
-    __weak WXComponentManager* wself = self;
-    [_displayTaskQueue addObject:[WXComponentThreadTickTask taskWithBlock:^{
-        __strong WXComponentManager* sself = wself;
-        if (sself) {
-            if (sself->_maxComponentCount != sself->_maxComponentCountReported) {
-                [sself.weexInstance.apmInstance updateMaxStats:KEY_PAGE_STATS_MAX_COMPONENT_NUM curMaxValue:sself->_maxComponentCount];
-                sself->_maxComponentCountReported = sself->_maxComponentCount;
-            }
-            
-            if (sself->_maxVdomDepth != sself->_maxVdomDepthReported) {
-                [sself.weexInstance.apmInstance updateMaxStats:KEY_PAGE_STATS_MAX_DEEP_DOM curMaxValue:sself->_maxVdomDepth];
-                sself->_maxVdomDepthReported = sself->_maxVdomDepth;
-            }
-        }
-    } tickCount:30 /* triggered about every 500ms */]];
-}
-
-- (void)_startDisplayLink
-{
-    WXAssertComponentThread();
-    [[WXDisplayLinkManager sharedInstance] registerDisplayClient:self];
-    _displayTick = 0;
-}
-
-- (void)_stopDisplayLink
-{
-    WXAssertComponentThread();
-    [[WXDisplayLinkManager sharedInstance] unregisterDisplayClient:self];
-}
-
-- (void)_suspendDisplayLink
-{
-    WXAssertComponentThread();
-    _suspend = YES;
-    [self _executeDisplayTask:YES]; // on suspend, executes every task once
-}
-
-- (void)_awakeDisplayLink
-{
-    WXAssertComponentThread();
-    _suspend = NO;
-    _displayTick = 0;
-}
-
-- (void)_handleDisplayLink
-{
-    WXAssertComponentThread();
-    
-    [self _layoutAndSyncUI];
-    
-    if (!_suspend) {
-        // execute tasks in _displayTaskQueue
-        _displayTick ++;
-        [self _executeDisplayTask:NO];
-    }
-}
-
-- (void)_executeDisplayTask:(BOOL)onSuspend
-{
-    for (WXComponentThreadTickTask* task in _displayTaskQueue) {
-        if (onSuspend || (_displayTick % task.displayTickCount == 0)) {
-            if (task.block) {
-                task.block();
-            }
-        }
-    }
-}
-
-- (void)_layoutAndSyncUI
-{
-    [self _layout];
-    if(_uiTaskQueue.count > 0){
-        [self _syncUITasks];
-        _noTaskTickCount = 0;
-    } else {
-        // suspend display link when there's no task for 1 second, in order to save CPU time.
-        _noTaskTickCount ++;
-        if (_noTaskTickCount > 60) {
-            [self _suspendDisplayLink];
-        }
-    }
-}
-
-- (void)_layout
-{
-    [WXCoreBridge layoutPage:_weexInstance.instanceId forced:[_rootComponent needsLayout]];
-}
-
-- (void) _printFlexComponentFrame:(WXComponent *)component
-{
-#ifdef DEBUG
-    WXLogDebug(@"node ref:%@, type:%@ , frame:%@",
-          component.ref,
-          component.type,
-          NSStringFromCGRect(component.view.layer.frame)
-          );
-#endif
-    
-    for (WXComponent *childComponent in component.subcomponents) {
-        [self _printFlexComponentFrame:childComponent];
-    }
-}
-
-- (void)_syncUITasks
-{
-    NSInteger mismatchBeginIndex = _uiTaskQueue.count;
-    for (NSInteger i = _uiTaskQueue.count - 1;i >= 0;i --) {
-        if (_uiTaskQueue[i] == WXPerformUITaskBatchEndBlock) {
-            _syncUITaskCount = 0;
-            // clear when find the matches for end and begin tag
-            break;
-        }
-        if (_uiTaskQueue[i] == WXPerformUITaskBatchBeginBlock) {
-            mismatchBeginIndex = i;
-            break;
-        }
-    }
-    
-    if (mismatchBeginIndex == _uiTaskQueue.count) {
-        // here we get end tag or there are not begin and end directives
-    } else {
-        _syncUITaskCount ++;
-        // we only find begin tag but missing end tag,
-        if (_syncUITaskCount > (MAX_DROP_FRAME_FOR_BATCH)) {
-            // when the wait times come to MAX_DROP_FRAME_FOR_BATCH, we will pop all the stashed operations for user experience.
-            mismatchBeginIndex = _uiTaskQueue.count;
-            _syncUITaskCount = 0;
-        }
-    }
-    
-    if (mismatchBeginIndex > 0) {
-        NSArray<dispatch_block_t> *blocks = [_uiTaskQueue subarrayWithRange:NSMakeRange(0, mismatchBeginIndex)];
-        [_uiTaskQueue removeObjectsInRange:NSMakeRange(0, mismatchBeginIndex)];
-        if (blocks.count) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                for(dispatch_block_t block in blocks) {
-                    block();
-                }
-            });
-        }
-    }
-}
-
-#pragma mark Fixed 
-
-- (void)addFixedComponent:(WXComponent *)fixComponent
-{
-    pthread_mutex_lock(&_propertyMutex);
-    [_fixedComponents addObject:fixComponent];
-    pthread_mutex_unlock(&_propertyMutex);
-}
-
-- (void)removeFixedComponent:(WXComponent *)fixComponent
-{
-    pthread_mutex_lock(&_propertyMutex);
-    [_fixedComponents removeObject:fixComponent];
-    pthread_mutex_unlock(&_propertyMutex);
-}
-
-#pragma mark Enumerating
-
-- (void)enumerateComponentsUsingBlock:(void (^)(WXComponent *, BOOL *stop))block
-{
-    if (block == nil || _rootComponent == nil) {
-        return;
-    }
-    
-    NSMutableArray* components = [[NSMutableArray alloc] init];
-    [components addObject:_rootComponent];
-    
-    while ([components count] > 0) {
-        BOOL stop = NO;
-        
-        NSArray* thisLevelComponents = [components copy];
-        [components removeAllObjects];
-        
-        // enumerate thisLevelComponents and add next level components to components
-        for (WXComponent* c in thisLevelComponents) {
-            block(c, &stop);
-            if (stop) {
-                break;
-            }
-            
-            for (WXComponent* nextLevelComponent in c->_subcomponents) {
-                [components addObject:nextLevelComponent];
-            }
-        }
-        
-        if (stop) {
-            break;
-        }
-    }
-}
-
-static void (^WXPerformUITaskBatchBeginBlock)(void) = ^ () {
-#if DEBUG
-    WXLogDebug(@"directive BatchBeginBlock");
-#endif
-};
-static void (^WXPerformUITaskBatchEndBlock)(void) = ^ () {
-#if DEBUG
-    WXLogDebug(@"directive BatchEndBlock");
-#endif
-};
-
-- (void)performBatchBegin
-{
-    [self _addUITask:WXPerformUITaskBatchBeginBlock];
-}
-
-- (void)performBatchEnd
-{
-    [self _addUITask:WXPerformUITaskBatchEndBlock];
-}
-
-- (void)handleDisplayLink {
-    [self _handleDisplayLink];
-}
-
-@synthesize suspend=_suspend;
-
-
-@end
-
-void WXPerformBlockOnComponentThread(void (^block)(void))
-{
-    [WXComponentManager _performBlockOnComponentThread:block];
-}
-
-void WXPerformBlockSyncOnComponentThread(void (^block)(void))
-{
-    [WXComponentManager _performBlockSyncOnComponentThread:block];
-}
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h
deleted file mode 100644
index 556d366..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol WXDatePickerManagerDelegate <NSObject>
-@optional
-- (void)fetchDatePickerValue:(NSString *)value;
-@end
-
-@interface WXDatePickerManager : NSObject
-
-@property (nonatomic, weak) id<WXDatePickerManagerDelegate> delegate;
-
--(void)show;
--(void)hide;
--(void)updateDatePicker:(NSDictionary *)attributes;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.m
deleted file mode 100644
index 7439b6b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.m
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXDatePickerManager.h"
-#import <UIKit/UIDatePicker.h>
-#import <UIKit/UIKit.h>
-#import "WXConvert.h"
-#import "WXUtility.h"
-
-#define WXPickerHeight 266
-
-@interface WXDatePickerManager() <UIGestureRecognizerDelegate>
-
-@property(nonatomic,strong)UIDatePicker *datePicker;
-@property(nonatomic,strong)UIView *backgroudView;
-@property(nonatomic,strong)UIView *datePickerView;
-@property(nonatomic,copy)NSString *type;
-@property(nonatomic)BOOL isAnimating;
-
-@end
-
-@implementation WXDatePickerManager
-@synthesize datePicker;
-
-- (instancetype)init
-{
-    self = [super init];
-    if (self) {
-        if(!self.backgroudView)
-        {
-            self.backgroudView = [self createBackgroundView];
-            UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hide)];
-            if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"11.0") && WX_SYS_VERSION_LESS_THAN(@"11.1")) {
-                tapGesture.delegate = self;
-            }
-            [self.backgroudView addGestureRecognizer:tapGesture];
-        }
-        
-        if(!self.datePickerView)
-        {
-            self.datePickerView = [self createDatePickerView];
-        }
-        
-        if(!datePicker)
-        {
-            datePicker = [[UIDatePicker alloc]init];
-        }
-        
-        datePicker.datePickerMode=UIDatePickerModeDate;
-        CGRect pickerFrame = CGRectMake(0, 44, [UIScreen mainScreen].bounds.size.width, WXPickerHeight-44);
-        datePicker.backgroundColor = [UIColor whiteColor];
-        datePicker.frame = pickerFrame;
-        UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44)];
-        [toolBar setBackgroundColor:[UIColor whiteColor]];
-        UIBarButtonItem* noSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
-        noSpace.width=10;
-        UIBarButtonItem* doneBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
-        UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-        UIBarButtonItem* cancelBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)];
-        [toolBar setItems:[NSArray arrayWithObjects:noSpace,cancelBtn,flexSpace,doneBtn,noSpace, nil]];
-        [self.datePickerView addSubview:datePicker];
-        [self.datePickerView addSubview:toolBar];
-        [self.backgroudView addSubview:self.datePickerView];
-    }
-    return self;
-}
-
-- (void)updateDatePicker:(NSDictionary *)attributes
-{
-    NSString *type = [WXConvert NSString:attributes[@"type"]];
-    if(type)
-    {
-        _type = type;
-        if( [_type isEqualToString:@"date"])
-        {
-            self.datePicker.datePickerMode = UIDatePickerModeDate;
-            NSString *value = [WXConvert NSString:attributes[@"value"]];
-            if(value)
-            {
-                NSDate *date = [WXUtility dateStringToDate:value];
-                if(date)
-                {
-                    self.datePicker.date =date;
-                }
-            }
-            NSString *max = [WXConvert NSString:attributes[@"max"]];
-            if(max)
-            {
-                NSDate *date = [WXUtility dateStringToDate:max];
-                if(date)
-                {
-                    self.datePicker.maximumDate =date;
-                }
-            }
-            NSString *min = [WXConvert NSString:attributes[@"min"]];
-            if(min)
-            {
-                NSDate *date = [WXUtility dateStringToDate:min];
-                if(date)
-                {
-                    self.datePicker.minimumDate =date;
-                }
-            }
-        }else if([_type isEqualToString:@"time"])
-        {
-            self.datePicker.datePickerMode = UIDatePickerModeTime;
-            NSString *value = [WXConvert NSString:attributes[@"value"]];
-            if(value)
-            {
-                NSDate *date = [WXUtility timeStringToDate:value];
-                if(date)
-                {
-                    self.datePicker.date = date;
-                }
-            }
-        }
-    }
-}
-
--(UIView *)createBackgroundView
-{
-    UIView *view = [UIView new];
-    view.frame = [UIScreen mainScreen].bounds;
-    view.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.4];
-    return view;
-}
-
--(UIView *)createDatePickerView
-{
-    UIView *view = [UIView new];
-    view.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width, WXPickerHeight);
-    view.backgroundColor = [UIColor whiteColor];
-    return view;
-}
-
--(void)show
-{
-    UIWindow *window = [UIApplication sharedApplication].keyWindow;
-    [window addSubview:self.backgroudView];
-    UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, self.datePicker);
-    if(self.isAnimating)
-    {
-        return;
-    }
-    self.isAnimating = YES;
-    self.backgroudView.hidden = NO;
-    [UIView animateWithDuration:0.35f animations:^{
-        self.datePickerView.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height - WXPickerHeight, [UIScreen mainScreen].bounds.size.width, WXPickerHeight);
-        self.backgroudView.alpha = 1;
-    } completion:^(BOOL finished) {
-        self.isAnimating = NO;
-    }];
-}
-
--(void)hide
-{
-    if(self.isAnimating)
-    {
-        return;
-    }
-    self.isAnimating = YES;
-    [UIView animateWithDuration:0.35f animations:^{
-        self.datePickerView.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width, WXPickerHeight);
-        self.backgroudView.alpha = 0;
-    } completion:^(BOOL finished) {
-        self.backgroudView.hidden = YES;
-        self.isAnimating = NO;
-        [self.backgroudView removeFromSuperview];
-        
-        // move focus to original view;
-        if ([self.delegate isKindOfClass:[WXComponent class]]) {
-            UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, ((WXComponent*)self.delegate).view);
-        }else if ([self.delegate isKindOfClass:[UIView class]]) {
-            UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, (UIView*)self.delegate);
-        }
-    }];
-}
-
--(void)cancel:(id)sender
-{
-    [self hide];
-}
-
--(void)done:(id)sender
-{
-    [self hide];
-    if (self.delegate && [self.delegate respondsToSelector:@selector(fetchDatePickerValue:)]) {
-        NSString *value = @"";
-        if([_type isEqualToString:@"time"])
-        {
-            value = [WXUtility timeToString:self.datePicker.date];
-        }else if([_type isEqualToString:@"date"])
-        {
-            value = [WXUtility dateToString:self.datePicker.date];
-        }
-        [self.delegate fetchDatePickerValue:value];
-    }
-    
-}
-
-#pragma mark - UIGestureRecognizerDelegate
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
-    if (self.datePickerView && [touch.view isDescendantOfView:self.datePickerView]) {
-        return NO;
-    }
-    return YES;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.h
deleted file mode 100644
index e657202..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol WXDisplayLinkClient <NSObject>
-/**
- * @abstract defalut is NO
- **/
-@property (nonatomic) BOOL suspend;
-
-- (void)handleDisplayLink;
-
-@end
-
-@interface WXDisplayLinkManager : NSObject
-/**
- * @abstract create WXDisplayLinkManager instance
- **/
-+ (instancetype)sharedInstance;
-
-/**
- * @abstract add WXDisplayLinkClient to array
- **/
-- (void)registerDisplayClient:(id<WXDisplayLinkClient>)client;
-
-/**
- * @abstract remove WXDisplayLinkClient to array
- **/
-- (void)unregisterDisplayClient:(id<WXDisplayLinkClient>)client;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.m
deleted file mode 100644
index b53e47b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXDisplayLinkManager.m
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXDisplayLinkManager.h"
-#import <UIKit/UIKit.h>
-#import "WXAssert.h"
-
-@implementation WXDisplayLinkManager
-{
-    CADisplayLink *_displayLink;
-    NSMutableArray<id<WXDisplayLinkClient>>* _displayArray;
-}
-
-+ (instancetype)sharedInstance {
-    WXAssertComponentThread();
-
-    static WXDisplayLinkManager *_sharedDisplayLinkManager = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        _sharedDisplayLinkManager = [[self alloc] init];
-    });
-    [_sharedDisplayLinkManager _startDisplayLink];
-    return _sharedDisplayLinkManager;
-}
-
-- (instancetype)init
-{
-    if (self == [super init]) {
-        _displayArray = [NSMutableArray array];
-    }
-    return self;
-}
-
-- (void)registerDisplayClient:(id<WXDisplayLinkClient>)client
-{
-    WXAssertComponentThread();
-
-    if ([_displayArray containsObject:client]) {
-        return;
-    }
-    [_displayArray addObject:client];
-}
-
-- (void)unregisterDisplayClient:(id<WXDisplayLinkClient>)client
-{
-    WXAssertComponentThread();
-
-    [_displayArray removeObject:client];
-    if ([_displayArray count] == 0) {
-        [self _stopDisplayLink];
-    }
-}
-
-- (void)_startDisplayLink
-{    
-    if (!_displayLink) {
-        _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(_handleDisplayLink)];
-        [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
-    }
-}
-
-- (void)_stopDisplayLink
-{
-    if (_displayLink) {
-        [_displayLink invalidate];
-        _displayLink = nil;
-    }
-}
-
-- (void)_handleDisplayLink
-{
-    for (id<WXDisplayLinkClient> client in _displayArray) {
-        if (!client.suspend) {
-            [client handleDisplayLink];
-        }
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h
deleted file mode 100644
index ded9bc7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXExtendCallNativeManager : NSObject
-
-+ (id)sendExtendCallNativeEvent:(NSDictionary *)parameters;
-+ (void)registerExtendCallNative:(NSString *)name withClass:(Class)clazz;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.m
deleted file mode 100644
index 17b1541..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.m
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXExtendCallNativeManager.h"
-#import "WXExtendCallNativeProtocol.h"
-#import <objc/runtime.h>
-
-@interface WXExtendCallNativeManager ()
-
-@property (nonatomic, strong) NSMutableDictionary *names;
-
-@end
-
-@implementation WXExtendCallNativeManager
-{
-    NSLock *_configLock;
-}
-+ (instancetype) sharedInstance{
-    
-    static WXExtendCallNativeManager *instance = nil;
-    static dispatch_once_t once;
-    
-    dispatch_once(&once, ^{
-        instance = [[WXExtendCallNativeManager alloc] initPrivate];
-    });
-    
-    return instance;
-}
-
-- (instancetype) initPrivate{
-    self = [super init];
-    if(self){
-        _configLock = [[NSLock alloc] init];
-        self.names = [NSMutableDictionary new];
-    }
-    
-    return self;
-}
-
-+ (void)registerExtendCallNative:(NSString *)name withClass:(Class)clazz
-{
-    [[WXExtendCallNativeManager sharedInstance].names setObject:NSStringFromClass(clazz) forKey:name];
-}
-
-+ (Class)classWithExtendCallNativeName:(NSString *)name
-{
-    NSString *clazz = [[WXExtendCallNativeManager sharedInstance].names objectForKey:name];
-    return NSClassFromString(clazz);
-}
-
-+(id)sendExtendCallNativeEvent:(NSDictionary *)parameters
-{
-    if(parameters[@"className"]){
-        Class<WXExtendCallNativeProtocol> receiveClass = [self classWithExtendCallNativeName:parameters[@"className"]];
-        if(receiveClass && class_conformsToProtocol(receiveClass,@protocol(WXExtendCallNativeProtocol))){
-            BOOL receivedItem = [receiveClass checkParameters:parameters];
-            if(receivedItem){
-                return [receiveClass excuteCallNative:parameters];
-            }
-        }
-    }
-    return @(-1);
-}
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h
deleted file mode 100644
index a733c6d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXHandlerFactory : NSObject
-
-/**
- * @abstract Register a handler for a given handler instance and specific protocol
- *
- * @param handler The handler instance to register
- *
- * @param protocol The protocol to confirm
- *
- */
-+ (void)registerHandler:(id)handler withProtocol:(Protocol *)protocol;
-
-/**
- * @abstract Returns the handler for a given protocol
- *
- **/
-+ (id)handlerForProtocol:(Protocol *)protocol;
-
-/**
- * @abstract Returns the registered handlers.
- */
-+ (NSDictionary *)handlerConfigs;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.m
deleted file mode 100644
index 7bbbbe4..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.m
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXHandlerFactory.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXNavigationDefaultImpl.h"
-#import "WXAssert.h"
-
-@interface WXHandlerFactory ()
-
-@property (nonatomic, strong) WXThreadSafeMutableDictionary *handlers;
-
-@end
-
-@implementation WXHandlerFactory
-
-+ (instancetype)sharedInstance {
-    static WXHandlerFactory* _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-        _sharedInstance.handlers = [[WXThreadSafeMutableDictionary alloc] init];
-    });
-    return _sharedInstance;
-}
-
-+ (void)registerHandler:(id)handler withProtocol:(Protocol *)protocol
-{
-    WXAssert(handler && protocol, @"Handler or protocol for registering can not be nil.");
-    WXAssertProtocol(handler, protocol);
-        
-    [[WXHandlerFactory sharedInstance].handlers setObject:handler forKey:NSStringFromProtocol(protocol)];
-}
-
-+ (id)handlerForProtocol:(Protocol *)protocol
-{
-    WXAssert(protocol, @"Can not find handler for a nil protocol");
-    
-    id handler = [[WXHandlerFactory sharedInstance].handlers objectForKey:NSStringFromProtocol(protocol)];
-    return handler;
-}
-
-+ (NSDictionary *)handlerConfigs {
-    return [WXHandlerFactory sharedInstance].handlers;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h
deleted file mode 100644
index ba3f014..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "WXBridgeMethod.h"
-
-@interface WXInvocationConfig : NSObject
-
-@property (nonatomic, strong) NSString *name;
-@property (nonatomic, strong) NSString *clazz;
-/**
- *  The methods map
- **/
-@property (nonatomic, strong) NSMutableDictionary *asyncMethods;
-@property (nonatomic, strong) NSMutableDictionary *syncMethods;
-
-- (instancetype)initWithName:(NSString *)name class:(NSString *)clazz;
-- (void)registerMethods;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.m
deleted file mode 100644
index 809279b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.m
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXInvocationConfig.h"
-#import "WXLog.h"
-#import "WXSDKInstance.h"
-#import "WXSDKManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXMonitor.h"
-#import "WXSDKError.h"
-#import "WXComponentFactory.h"
-#import "WXModuleFactory.h"
-#import "WXUtility.h"
-
-#import <objc/runtime.h>
-
-@interface WXInvocationConfig()
-@end
-
-@implementation WXInvocationConfig
-
-- (instancetype)init
-{
-    
-    if (self = [super init]) {
-        _asyncMethods = [NSMutableDictionary new];
-        _syncMethods = [NSMutableDictionary new];
-    }
-    
-    return self;
-}
-
-- (instancetype)initWithName:(NSString *)name class:(NSString *)clazz
-{
-    if (self = [self init]) {
-        _name = name;
-        _clazz = clazz;
-    }
-    return self;
-}
-
-- (void)registerMethods
-{
-    Class currentClass = NSClassFromString(_clazz);
-    
-    if (!currentClass) {
-        WXLogWarning(@"The module class [%@] doesn't exit!", _clazz);
-        return;
-    }
-    
-    while (currentClass != [NSObject class]) {
-        unsigned int methodCount = 0;
-        Method *methodList = class_copyMethodList(object_getClass(currentClass), &methodCount);
-        for (unsigned int i = 0; i < methodCount; i++) {
-            NSString *selStr = [NSString stringWithCString:sel_getName(method_getName(methodList[i])) encoding:NSUTF8StringEncoding];
-            BOOL isSyncMethod = NO;
-            if ([selStr hasPrefix:@"wx_export_method_sync_"]) {
-                isSyncMethod = YES;
-            } else if ([selStr hasPrefix:@"wx_export_method_"]) {
-                isSyncMethod = NO;
-            } else {
-                continue;
-            }
-            
-            NSString *name = nil, *method = nil;
-            SEL selector = NSSelectorFromString(selStr);
-            if ([currentClass respondsToSelector:selector]) {
-                method = ((NSString* (*)(id, SEL))[currentClass methodForSelector:selector])(currentClass, selector);
-            }
-            
-            if (method.length <= 0) {
-                WXLogWarning(@"The module class [%@] doesn't has any method!", _clazz);
-                continue;
-            }
-            
-            NSRange range = [method rangeOfString:@":"];
-            if (range.location != NSNotFound) {
-                name = [method substringToIndex:range.location];
-            } else {
-                name = method;
-            }
-            
-            NSMutableDictionary *methods = isSyncMethod ? _syncMethods : _asyncMethods;
-            [methods setObject:method forKey:name];
-        }
-        
-        free(methodList);
-        currentClass = class_getSuperclass(currentClass);
-    }
-    
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h
deleted file mode 100644
index 53e6f0d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXModuleFactory : NSObject
-
-/**
- * @abstract Returns the class of specific module
- *
- * @param name The module name
- *
- **/
-+ (Class)classWithModuleName:(NSString *)name;
-
-/**
- * @abstract Returns the instance method implemented by the module 
- *
- * @param name The module name
- *
- * @param method The module method
- *
- **/
-+ (SEL)selectorWithModuleName:(NSString *)name methodName:(NSString *)method isSync:(BOOL *)isSync;
-
-/**
- * @abstract Registers a module for a given name and the implemented class
- *
- * @param name The module name to register
- *
- * @param clazz The module class to register
- *
- **/
-+ (NSString *)registerModule:(NSString *)name withClass:(Class)clazz;
-
-/**
- * @abstract Returns the export methods in the specific module
- *
- * @param name The module name
- **/
-+ (NSMutableDictionary *)moduleMethodMapsWithName:(NSString *)name;
-
-/**
- * @abstract Returns the export Selector in the specific module
- *
- * @param name The Selector name
- **/
-+ (NSMutableDictionary *)moduleSelectorMapsWithName:(NSString *)name;
-
-/**
- * @abstract Returns the registered modules.
- */
-+ (NSDictionary *) moduleConfigs;
-       
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.m
deleted file mode 100644
index 6a05afd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.m
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleFactory.h"
-#import "WXAssert.h"
-#import "WXLog.h"
-#import "WXInvocationConfig.h"
-
-#import <objc/runtime.h>
-#import <objc/message.h>
-
-/************************************************************************************************/
-
-@interface WXModuleConfig : WXInvocationConfig
-
-@end
-
-@implementation WXModuleConfig
-
-@end
-
-@interface WXModuleFactory ()
-
-@property (nonatomic, strong)  NSMutableDictionary  *moduleMap;
-@property (nonatomic, strong)  NSLock   *moduleLock;
-
-@end
-
-@implementation WXModuleFactory
-
-static WXModuleFactory *_sharedInstance = nil;
-
-#pragma mark Private Methods
-
-+ (WXModuleFactory *)_sharedInstance
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        if (!_sharedInstance) {
-            _sharedInstance = [[self alloc] init];
-        }
-    });
-    return _sharedInstance;
-}
-
-+ (instancetype)allocWithZone:(struct _NSZone *)zone
-{
-    if (!_sharedInstance) {
-        _sharedInstance = [super allocWithZone:zone];
-    }
-    return _sharedInstance;
-}
-
-- (instancetype)init
-{
-    @synchronized(self) {
-        self = [super init];
-        if (self) {
-            _moduleMap = [NSMutableDictionary dictionary];
-            _moduleLock = [[NSLock alloc] init];
-        }
-    }
-    return self;
-}
-
-- (Class)_classWithModuleName:(NSString *)name
-{
-    WXAssert(name, @"Fail to find class with module name, please check if the parameter are correct !");
-    
-    WXModuleConfig *config = nil;
-    
-    [_moduleLock lock];
-    config = [_moduleMap objectForKey:name];
-    [_moduleLock unlock];
-    
-    if (!config || !config.clazz) return nil;
-    
-    return NSClassFromString(config.clazz);
-}
-
-- (SEL)_selectorWithModuleName:(NSString *)name methodName:(NSString *)method isSync:(BOOL *)isSync
-{
-    WXAssert(name && method, @"Fail to find selector with module name and method, please check if the parameters are correct !");
-    
-    NSString *selectorString = nil;;
-    WXModuleConfig *config = nil;
-    
-    [_moduleLock lock];
-    config = [_moduleMap objectForKey:name];
-    if (config.syncMethods) {
-        selectorString = [config.syncMethods objectForKey:method];
-        if (selectorString && isSync) {
-            *isSync = YES;
-        }
-    }
-    if (!selectorString && config.asyncMethods) {
-        selectorString = [config.asyncMethods objectForKey:method];;
-    }
-    [_moduleLock unlock];
-    
-    return NSSelectorFromString(selectorString);
-}
-
-- (NSString *)_registerModule:(NSString *)name withClass:(Class)clazz
-{
-    WXAssert(name && clazz, @"Fail to register the module, please check if the parameters are correct !");
-    
-    [_moduleLock lock];
-    //allow to register module with the same name;
-    WXModuleConfig *config = [[WXModuleConfig alloc] init];
-    config.name = name;
-    config.clazz = NSStringFromClass(clazz);
-    [config registerMethods];
-    [_moduleMap setValue:config forKey:name];
-    [_moduleLock unlock];
-    
-    return name;
-}
-
-- (NSMutableDictionary *)_moduleMethodMapsWithName:(NSString *)name
-{
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    NSMutableArray *methods = [self _defaultModuleMethod];
-    
-    [_moduleLock lock];
-    [dict setValue:methods forKey:name];
-    
-    WXModuleConfig *config = _moduleMap[name];
-    void (^mBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        [methods addObject:mKey];
-    };
-    [config.syncMethods enumerateKeysAndObjectsUsingBlock:mBlock];
-    [config.asyncMethods enumerateKeysAndObjectsUsingBlock:mBlock];
-    [_moduleLock unlock];
-    
-    return dict;
-}
-
-- (NSMutableDictionary *)_moduleSelctorMapsWithName:(NSString *)name
-{
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    NSMutableArray *methods = [self _defaultModuleMethod];
-    
-    [_moduleLock lock];
-    [dict setValue:methods forKey:name];
-    
-    WXModuleConfig *config = _moduleMap[name];
-    void (^mBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        [methods addObject:mObj];
-    };
-    [config.syncMethods enumerateKeysAndObjectsUsingBlock:mBlock];
-    [config.asyncMethods enumerateKeysAndObjectsUsingBlock:mBlock];
-    [_moduleLock unlock];
-    
-    return dict;
-}
-
-// module common method
-- (NSMutableArray*)_defaultModuleMethod
-{
-    return [NSMutableArray arrayWithObjects:@"addEventListener",@"removeAllEventListeners", nil];
-}
-
-- (NSDictionary *)_getModuleConfigs {
-    NSMutableDictionary *moduleDic = [[NSMutableDictionary alloc] init];
-    void (^moduleBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
-        WXModuleConfig *moduleConfig = (WXModuleConfig *)mObj;
-        if (moduleConfig.clazz && moduleConfig.name) {
-            [moduleDic setObject:moduleConfig.clazz forKey:moduleConfig.name];
-        }
-    };
-    [_moduleMap enumerateKeysAndObjectsUsingBlock:moduleBlock];
-    return moduleDic;
-}
-
-#pragma mark Public Methods
-
-+ (NSDictionary *)moduleConfigs {
-    return [[self _sharedInstance] _getModuleConfigs];
-}
-
-+ (Class)classWithModuleName:(NSString *)name
-{
-    return [[self _sharedInstance] _classWithModuleName:name];
-}
-
-+ (SEL)selectorWithModuleName:(NSString *)name methodName:(NSString *)method isSync:(BOOL *)isSync
-{
-    return [[self _sharedInstance] _selectorWithModuleName:name methodName:method isSync:isSync];
-}
-
-+ (NSString *)registerModule:(NSString *)name withClass:(Class)clazz
-{
-    return [[self _sharedInstance] _registerModule:name withClass:clazz];
-}
-
-+ (NSMutableDictionary *)moduleMethodMapsWithName:(NSString *)name
-{
-    return [[self _sharedInstance] _moduleMethodMapsWithName:name];
-}
-
-+ (NSMutableDictionary *)moduleSelectorMapsWithName:(NSString *)name
-{
-    return [[self _sharedInstance] _moduleSelctorMapsWithName:name];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h
deleted file mode 100644
index dab77ca..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXSDKInstance.h"
-
-@interface WXRuleManager : NSObject
-
-@property(nonatomic, weak)WXSDKInstance *instance;
-
-+ (WXRuleManager *)sharedInstance;
-
-- (void)addRule:(NSString *)type rule:(NSDictionary *)rule;
-
-- (WXThreadSafeMutableDictionary *)getRule:(NSString *)type;
-
-- (void)removeRule:(NSString *)type rule:(NSDictionary *)rule;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m
deleted file mode 100644
index 0e2fb87..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRuleManager.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXUtility.h"
-#import "WXConvert.h"
-#import "WXHandlerFactory.h"
-#import "WXURLRewriteProtocol.h"
-#import "WXComponentManager.h"
-#import "WXDefine.h"
-#import "WXSDKEngine.h"
-
-@interface WXRuleManager()
-@property (nonatomic, strong) WXThreadSafeMutableDictionary *fontStorage;
-@end
-
-@implementation WXRuleManager
-
-static WXRuleManager *_sharedInstance = nil;
-
-+ (WXRuleManager *)sharedInstance
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        if (!_sharedInstance) {
-            _sharedInstance = [[self alloc] init];
-            _sharedInstance.fontStorage = [[WXThreadSafeMutableDictionary alloc] init];
-        }
-    });
-    return _sharedInstance;
-}
-
-- (void)removeRule:(NSString *)type rule:(NSDictionary *)rule
-{
-    if ([type isEqualToString:@"fontFace"]) {
-        if (rule[@"fontFamily"]) {
-            [_fontStorage removeObjectForKey:rule[@"fontFamily"]];
-        } else {
-            [_fontStorage removeAllObjects];
-        }
-    }
-}
-
-- (void)addRule:(NSString*)type rule:(NSDictionary *)rule
-{
-    if ([type isEqualToString:@"fontFace"] && [rule[@"src"] isKindOfClass:[NSString class]]) {
-        if (rule[@"src"] && rule[@"fontFamily"] && ![WXUtility isBlankString:rule[@"src"]]) {
-            NSString *ruleSrc = [WXConvert NSString:rule[@"src"]];
-            if (!ruleSrc) {
-                WXLogError(@"%@ is illegal for font src",rule[@"src"]);
-                return;
-            }
-            NSUInteger start = [rule[@"src"] rangeOfString:@"url('"].location + @"url('".length;
-            NSUInteger end  = [rule[@"src"] rangeOfString:@"')" options:NSBackwardsSearch].location;
-            if (end <= start || start == NSNotFound || end == NSNotFound) {
-                WXLogWarning(@"font url is not specified");
-                return;
-            }
-            
-            NSString *fontSrc = [rule[@"src"] substringWithRange:NSMakeRange(start, end-start)];
-            NSString *newURL = [fontSrc copy];
-            WX_REWRITE_URL(fontSrc, WXResourceTypeFont, self.instance)
-            
-            if (!newURL) {
-                return;
-            }
-            
-            fontSrc = newURL;
-            WXThreadSafeMutableDictionary * fontFamily = [self.fontStorage objectForKey:rule[@"fontFamily"]];
-            if (fontFamily && [fontFamily[@"tempSrc"] isEqualToString:fontSrc]) {
-                // if the new src is same as src in dictionary , ignore it, or update it
-                return;
-            }
-            if (!fontFamily) {
-                fontFamily = [[WXThreadSafeMutableDictionary alloc] init];
-            }
-            NSURL *fontURL = [NSURL URLWithString:fontSrc];
-            if (!fontURL) {
-                // if the fontSrc string is illegal, the fontURL will be nil
-                return;
-            }
-            if([fontURL isFileURL]){
-                [fontFamily setObject:fontSrc forKey:@"src"];
-            }else {
-                [fontFamily setObject:fontSrc forKey:@"tempSrc"];
-            }
-            
-            [_fontStorage setObject:fontFamily forKey:rule[@"fontFamily"]];
-            // remote font file
-            NSString* instanceId = self.instance ? (self.instance.instanceId ?: @"") : @"";
-            NSString *fontfile = [NSString stringWithFormat:@"%@/%@",WX_FONT_DOWNLOAD_DIR,[WXUtility md5:[fontURL absoluteString]]];
-            if ([WXUtility isFileExist:fontfile]) {
-                // if has been cached, load directly
-                [fontFamily setObject:[NSURL fileURLWithPath:fontfile] forKey:@"localSrc"];
-                [[NSNotificationCenter defaultCenter] postNotificationName:WX_ICONFONT_READY_NOTIFICATION object:nil userInfo:@{@"instanceId": instanceId, @"fontFamily": rule[@"fontFamily"], @"filePath": fontfile}];
-                return;
-            }
-            __weak typeof(self) weakSelf = self;
-            [WXUtility getIconfont:fontURL completion:^(NSURL * _Nonnull url, NSError * _Nullable error) {
-                if (!error && url) {
-                    // load success
-                    WXThreadSafeMutableDictionary * dictForFontFamily = [weakSelf.fontStorage objectForKey:rule[@"fontFamily"]];
-                    NSString *fontSrc = [dictForFontFamily objectForKey:@"tempSrc"];
-                    if (fontSrc) {
-                        // only remote font will be mark as tempSrc
-                        [dictForFontFamily setObject:fontSrc forKey:@"src"];
-                    }
-                    [dictForFontFamily setObject:url forKey:@"localSrc"];
-                    
-                    [[NSNotificationCenter defaultCenter] postNotificationName:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil userInfo:@{@"fontFamily":rule[@"fontFamily"]}];
-                    [[NSNotificationCenter defaultCenter] postNotificationName:WX_ICONFONT_READY_NOTIFICATION object:nil userInfo:@{@"instanceId": instanceId, @"fontFamily": rule[@"fontFamily"], @"filePath": [url path]}];
-                } else {
-                    //there was some errors during loading
-                    WXLogError(@"load font failed %@",error.description);
-                }
-            }];
-        }
-    }
-}
-
-- (WXThreadSafeMutableDictionary *)getRule:(NSString *)type
-{
-    if ([type isEqualToString:@"fontFace"]) {
-        return _fontStorage;
-    }
-    
-    return nil;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h
deleted file mode 100644
index 9f8e454..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSDKInstance.h"
-#import "WXBridgeManager.h"
-
-@class WXModuleManager;
-
-@interface WXSDKManager : NSObject
-
-/**
- *@abstract Returns sdk manager
- */
-+ (WXSDKManager *)sharedInstance;
-/**
- * @abstract Returns bridge manager
- **/
-+ (WXBridgeManager *)bridgeMgr;
-
-/**
- * @abstract Returns weex instance for specific identifier
- **/
-+ (WXSDKInstance *)instanceForID:(NSString *)identifier;
-
-/**
- * @abstract Returns weex instance for specific identifier
- **/
-+ (void)storeInstance:(WXSDKInstance *)instance forID:(NSString *)identifier;
-
-/**
- * @abstract Returns weex instance for specific identifier
- **/
-+ (void)removeInstanceforID:(NSString *)identifier;
-
-/**
- * @abstract unload
- **/
-+ (void)unload;
-
-/**
- * @abstract Returns module manager
- **/
-+ (WXModuleManager *)moduleMgr DEPRECATED_MSG_ATTRIBUTE();
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m
deleted file mode 100644
index de71a29..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSDKManager.h"
-#import "WXThreadSafeMutableDictionary.h"
-
-@interface WXSDKManager ()
-
-@property (nonatomic, strong) WXBridgeManager *bridgeMgr;
-
-@property (nonatomic, strong) WXThreadSafeMutableDictionary *instanceDict;
-
-@end
-
-@implementation WXSDKManager
-
-static WXSDKManager *_sharedInstance = nil;
-
-+ (WXSDKManager *)sharedInstance
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        if (!_sharedInstance) {
-            _sharedInstance = [[self alloc] init];
-            _sharedInstance.instanceDict = [[WXThreadSafeMutableDictionary alloc] init];
-        }
-    });
-    return _sharedInstance;
-}
-
-- (instancetype)init
-{
-    if (self = [super init]){
-        _bridgeMgr = [[WXBridgeManager alloc] init];
-    }
-    return self;
-}
-
-+ (WXBridgeManager *)bridgeMgr
-{
-    WXBridgeManager* result = [self sharedInstance].bridgeMgr;
-    if (result == nil) {
-        // devtool may invoke "unload" and set bridgeMgr to nil
-        result = [[WXBridgeManager alloc] init];
-        [self sharedInstance].bridgeMgr = result;
-    }
-    return result;
-}
-
-+ (id)instanceForID:(NSString *)identifier
-{
-    return [[self sharedInstance].instanceDict objectForKey:identifier];
-}
-
-+ (void)storeInstance:(WXSDKInstance *)instance forID:(NSString *)identifier
-{
-    [[self sharedInstance].instanceDict setObject:instance forKey:identifier];
-}
-
-+ (void)removeInstanceforID:(NSString *)identifier
-{
-    if (identifier) {
-        [[self sharedInstance].instanceDict removeObjectForKey:identifier];
-    }
-}
-
-+ (void)unload
-{
-    for (NSString *instanceID in [[self sharedInstance].instanceDict allKeys]) {
-        WXSDKInstance *instance = [[self sharedInstance].instanceDict objectForKey:instanceID];
-        [instance destroyInstance];
-    }
-    [[self sharedInstance].bridgeMgr unload];
-    [self sharedInstance].bridgeMgr = nil;
-}
-
-+ (WXModuleManager *)moduleMgr
-{
-    return nil;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h
deleted file mode 100644
index c61c6b9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXServiceFactory : NSObject
-
-/**
- * @abstract Registers a service for a given name, js code and options
- *
- * @param name The service name to register
- *
- * @param options The service options to register
- *
- * @param serviceScript service js code to invoke
- *
- * @return script
- *
- */
-+ (NSString *)registerServiceScript:(NSString *)name withRawScript:(NSString *)serviceScript withOptions:(NSDictionary *)options;
-
-
-/**
- * @abstract Unregisters a service for a given name
- *
- * @param name The service name to register
- *
- * @return script
- *
- */
-+ (NSString *)unregisterServiceScript:(NSString *)name;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.m
deleted file mode 100644
index bf061a6..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.m
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXServiceFactory.h"
-#import "WXAssert.h"
-#import "WXLog.h"
-
-#import <objc/runtime.h>
-
-@implementation WXServiceFactory
-{
-
-}
-
-#pragma mark Life Cycle
-
-+ (instancetype)sharedInstance {
-    static id _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-    });
-    return _sharedInstance;
-}
-
-- (instancetype)init
-{
-    if(self = [super init]){
-
-    }
-    return self;
-}
-
-#pragma mark Public
-/**
- * @abstract Unregisters a component for a given name
- *
- * @param name The service name to register
- *
- * @return script
- *
- */
-+ (NSString *)registerServiceScript:(NSString *)name withRawScript:(NSString *)serviceScript withOptions:(NSDictionary *)options
-{
-    NSDictionary *dic = [[self sharedInstance] registerServiceScript:name withRawScript:serviceScript withOptions:options];
-    return [dic objectForKey:@"script"];
-}
-
-
-+ (NSString *)unregisterServiceScript:(NSString *)name
-{
-    return [[self sharedInstance] unregisterServiceScript:name];
-}
-
-
-#pragma mark Private
-
-- (NSDictionary *)registerServiceScript:(NSString *)name withRawScript:(NSString *)serviceScript withOptions:(NSDictionary *)options
-{
-    WXAssert(name && options && serviceScript, @"name or options or code must not be nil for registering service.");
-    
-    NSDictionary *serverConfig = @{
-                                   @"name": name,
-                                   @"options": options,
-                                   @"script": [self registerService:name withRawScript:serviceScript withOptions:options]
-                                   };
-    
-    return serverConfig;
-}
-
-- (NSString *) registerService:(NSString *)name withRawScript:(NSString *)serviceScript withOptions:(NSDictionary *)options {
-    NSError *error;
-    
-    // setup options for service
-    NSMutableDictionary *optionDic = [NSMutableDictionary dictionaryWithDictionary:options];
-    [optionDic setObject:name forKey:@"serviceName"];
-    NSData *optionsData = [NSJSONSerialization dataWithJSONObject:optionDic options:NSJSONWritingPrettyPrinted error:&error];
-    NSString *optionsString = [[NSString alloc] initWithData:optionsData encoding:NSUTF8StringEncoding];
-    
-    // setup global function to service
-    NSString *funcString = @"{"
-                            @"register: global.registerService,"
-                            @"unregister: global.unregisterService"
-                            @"}";
-    
-    NSString *script = [NSString stringWithFormat:@";(function(service, options){\n;%@;\n})(%@, %@);"
-                        , serviceScript, funcString, optionsString];
-    return script;
-}
-
-- (NSString *) unregisterServiceScript: (NSString *) name
-{
-    NSString *script = [NSString stringWithFormat:@";global.unregisterService('%@');", name];
-    return script;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h
deleted file mode 100644
index 63c4a5a..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-#import "WXNavigationProtocol.h"
-
-@interface WXComponent (Navigation)
-
-- (void)setNavigationBarHidden:(BOOL)hidden;
-
-- (void)setNavigationBackgroundColor:(UIColor *)backgroundColor;
-
-- (void)setNavigationItemWithParam:(NSDictionary *)param position:(WXNavigationItemPosition)position;
-
-- (void)setNavigationWithStyles:(NSDictionary *)styles;
-    
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.m
deleted file mode 100644
index df205d7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.m
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent+Navigation.h"
-#import "WXComponent_internal.h"
-#import "WXSDKInstance_private.h"
-#import "WXBaseViewController.h"
-#import "WXHandlerFactory.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-
-#define kBarTintColor @"barTintColor"
-#define kBarItemText @"title"
-#define kBarItemTextColor @"titleColor"
-#define kBarItemIcon  @"icon"
-
-#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-
-@implementation WXComponent (Navigation)
-
-- (id<WXNavigationProtocol>)navigator
-{
-    id<WXNavigationProtocol> navigator = [WXHandlerFactory handlerForProtocol:@protocol(WXNavigationProtocol)];
-    return navigator;
-}
-
-// navigtion configuration
-- (void)_setupNavBarWithStyles:(NSMutableDictionary *)styles attributes:(NSMutableDictionary *)attributes
-{
-    NSString *dataRole = attributes[@"dataRole"];
-    if (dataRole && [dataRole isEqualToString:@"navbar"]) {
-        styles[@"visibility"] = @"hidden";
-        styles[@"position"] = @"fixed";
-        
-        self.weexInstance.naviBarStyles = [NSMutableDictionary new];
-        
-        [self setNavigationBarHidden:NO];
-        
-        NSString *backgroundColor = styles[@"backgroundColor"];
-        [self setNavigationBackgroundColor:[WXConvert UIColor:backgroundColor]];
-    }
-    
-    NSString *position = attributes[@"naviItemPosition"];
-    if (position) {
-        NSMutableDictionary *data = [NSMutableDictionary new];
-        [data setObject:_type forKey:@"type"];
-        [data setObject:styles forKey:@"style"];
-        [data setObject:attributes forKey:@"attr"];
-        
-        if ([position isEqualToString:@"left"]) {
-            [self setNavigationItemWithParam:data position:WXNavigationItemPositionLeft];
-        }
-        else if ([position isEqualToString:@"right"]) {
-            [self setNavigationItemWithParam:data position:WXNavigationItemPositionRight];
-        }
-        else if ([position isEqualToString:@"center"]) {
-            [self setNavigationItemWithParam:data position:WXNavigationItemPositionCenter];
-        }
-    }
-}
-
-- (void)_updateNavBarAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"data-role"]) {
-        NSString *dataRole = attributes[@"data-role"];
-        if ([dataRole isEqualToString:@"navbar"]) {
-            [self setNavigationBarHidden:NO];
-            
-            NSDictionary *style = self.styles[@"style"];
-            NSString *backgroundColor = style[@"backgroundColor"];
-            [self setNavigationBackgroundColor:[WXConvert UIColor:backgroundColor]];
-        }
-    }
-}
-
-
-- (void)setNavigationBarHidden:(BOOL)hidden
-{
-    UIViewController *container = self.weexInstance.viewController;
-    id<WXNavigationProtocol> navigator = [self navigator];
-    
-    WXPerformBlockOnMainThread(^{
-        [navigator setNavigationBarHidden:hidden animated:NO withContainer:container];
-    });
-}
-
-- (void)setNavigationBackgroundColor:(UIColor *)backgroundColor
-{
-    if (!backgroundColor) return;
-    
-    NSMutableDictionary *styles = self.weexInstance.naviBarStyles;
-    [styles setObject:backgroundColor forKey:kBarTintColor];
-    
-    UIViewController *container = self.weexInstance.viewController;
-    id<WXNavigationProtocol> navigator = [self navigator];
-    
-    WXPerformBlockOnMainThread(^{
-        [navigator setNavigationBackgroundColor:backgroundColor withContainer:container];
-    });
-}
-
-- (void)setNavigationItemWithParam:(NSDictionary *)param position:(WXNavigationItemPosition)position
-{
-    if (!param)  return;
-    
-    __weak __block typeof(WXComponent) *weakSelf = self;
-    
-    NSArray *array = @[@"center",@"right",@"left",@"more"];
-    
-    [self _parse:param resultBlock:^(NSDictionary *dict) {
-        NSMutableDictionary *styles = weakSelf.weexInstance.naviBarStyles;
-        [styles setObject:dict forKey: array[position]];
-        
-        UIViewController *container = weakSelf.weexInstance.viewController;
-        id<WXNavigationProtocol> navigator = [weakSelf navigator];
-        
-        WXPerformBlockOnMainThread(^{
-            [navigator setNavigationItemWithParam:dict position:position completion:nil withContainer:container];
-        });
-    }];
-}
-
-- (void)setNavigationWithStyles:(NSDictionary *)styles
-{
-    UIViewController *container = self.weexInstance.viewController;
-    id<WXNavigationProtocol> navigator = [self navigator];
-
-    if (styles) {
-        [navigator setNavigationBarHidden:NO animated:NO withContainer:container];
-        [navigator setNavigationBackgroundColor:styles[kBarTintColor] withContainer:container];
-        
-        NSArray *array = @[@"center",@"right",@"left",@"more"];
-        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-            [navigator setNavigationItemWithParam:styles[obj] position:idx completion:nil withContainer:container];
-        }];
-    }
-    else {
-        [navigator setNavigationBarHidden:YES animated:NO withContainer:container];
-    }
-}
-
-- (void)_parse:(NSDictionary *)param resultBlock:(void(^)(NSDictionary *))result
-{
-    NSMutableDictionary *dict = [NSMutableDictionary new];
-    NSString *type = param[@"type"];
-    
-    [dict setObject:self.weexInstance.instanceId forKey:@"instanceId"];
-    [dict setObject:self.ref forKey:@"nodeRef"];
-    
-    if ([type isEqualToString:@"text"]) {
-        NSDictionary *attr = param[@"attr"];
-        NSString *title = attr[@"value"];
-        if (title) {
-            [dict setObject:title forKey:kBarItemText];
-        }
-        
-        NSDictionary *style = param[@"style"];
-        NSString *color = style[@"color"];
-        if (color) {
-            [dict setObject:color forKey:kBarItemTextColor];
-        }
-    }
-    else if ([type isEqualToString:@"image"]) {
-        NSDictionary *attr = param[@"attr"];
-        NSString *src = attr[@"src"];
-        if (src) {
-            [dict setObject:src forKey:kBarItemIcon];
-        }
-    }
-    result(dict);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
deleted file mode 100644
index d96aae5..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXType.h"
-
-@class WXSDKInstance;
-
-typedef enum : NSUInteger {
-    WXDisplayTypeNone,
-    WXDisplayTypeBlock
-} WXDisplayType;
-
-typedef enum : NSUInteger {
-    WXComponentViewCreatedCallback,
-    WXComponentUpdateStylesCallback
-} WXComponentCallbackType;
-
-/**
- * @abstract the component callback , result can be string or dictionary.
- * @discussion callback data to js, the id of callback function will be removed to save memory.
- */
-typedef void (^WXCallback)(_Nonnull id result);
-// DEPRECATED_MSG_ATTRIBUTE("use WXKeepAliveCallback, you can specify keep the callback or not, if keeped, it can be called multi times, or it will be removed after called.")
-
-/**
- * @abstract the component callback , result can be string or dictionary.
- * @discussion callback data to js, you can specify the keepAlive parameter to keep callback function id keepalive or not. If the keepAlive is true, it won't be removed unitl instance destroyed, so you can call it repetitious.
- */
-typedef void (^WXKeepAliveCallback)(_Nonnull id result, BOOL keepAlive);
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface WXComponent : NSObject <NSCopying>
-
-///--------------------------------------
-/// @name Component Hierarchy Management
-///--------------------------------------
-
-/**
- *  @abstract Initializes a new component using the specified  properties.
- *
- *  @param ref          the identity string of component
- *  @param type         component type
- *  @param styles       component's styles
- *  @param attributes   component's attributes
- *  @param events       component's events
- *  @param weexInstance the weexInstance with which the component associated
- *
- *  @return A WXComponent instance.
- */
-- (instancetype)initWithRef:(NSString *)ref
-                       type:(NSString*)type
-                     styles:(nullable NSDictionary *)styles
-                 attributes:(nullable NSDictionary *)attributes
-                     events:(nullable NSArray *)events
-               weexInstance:(WXSDKInstance *)weexInstance;
-
-/**
- *  @abstract The component's identifier string.
- */
-@property (nonatomic, readonly, strong) NSString *ref;
-
-/**
- *  @abstract The component's type string.
- */
-@property (nonatomic, readonly, copy) NSString *type;
-
-/**
- *  @abstract The component's type.
- */
-@property (nonatomic, assign) WXComponentType componentType;
-
-/**
- *  @abstract The component's styles.
- */
-@property (nonatomic, readonly, strong) NSDictionary *styles;
-
-/**
- *  @abstract The component's pseudoClassStyles.
- */
-@property (nonatomic, readonly, strong) NSDictionary *pseudoClassStyles;
-
-/**
- *  @abstract The component's attributes.
- */
-@property (nonatomic, readonly, strong) NSDictionary *attributes;
-
-/**
- *  @abstract The component's events.
- */
-@property (nonatomic, readonly, strong) NSArray *events;
-
-/**
- *  @abstract The reference to
- */
-@property (nonatomic, readonly, weak, nullable) WXSDKInstance *weexInstance;
-
-/**
- * @abstract The component's subcomponents.
- */
-@property (nonatomic, readonly, strong, nullable) NSArray<WXComponent *> *subcomponents;
-
-/**
- * @abstract The component's supercomponent.
- */
-@property (nonatomic, readonly, weak, nullable) WXComponent *supercomponent;
-
-///--------------------------------------
-/// @name Layout
-///--------------------------------------
-
-/**
- * @abstract Return the calculated frame.
- *
- * @warning Subclasses must not override this.
- */
-@property(nonatomic, readonly, assign) CGRect calculatedFrame;
-
-/**
- * @abstract Tell if component's view frame will keep synchronized with calculatedFrame. 
- * Default Value is YES.
- */
-@property(nonatomic, assign) BOOL isViewFrameSyncWithCalculated;
-
-///**
-// * @abstract Return the calculated absolute position.
-// *
-// * @warning Subclasses must not override this.
-// */
-//@property(nonatomic, assign) CGPoint absolutePosition;
-
-/**
- * @abstract Invalidates the component's layout and marks it as needing an update.
- *
- * @discussion You can call this method to indicate that the layout of a component has changed and must be updated. Weex typically calls this method automatically when the layout-related styles change or when subcomponents are added or removed.
- *
- */
-- (void)setNeedsLayout;
-
-/**
- * @abstract Returns a Boolean indicating whether the component has been marked as needing a layout update.
- *
- * @return YES if the component has been marked as requiring a layout update.
- *
- */
-- (BOOL)needsLayout;
-
-/**
- * @abstract return a measure block for measure component's layout
- *
- * constrainedSize: The maximum size the receiver should fit in.
- *
- * @return A block which will ask the component to measure and return the size that best fits for a constrained size.
- *
- * @discussion Subclasses can override this method to perform their own layout behaviour.  Weex will use the returned block to measure the component's layout, ignoring its own layout mechanism.
- *
- */
-- (nullable CGSize (^)(CGSize constrainedSize))measureBlock;
-
-/**
- *  The callback of the component
- *
- *  When the callbackType is WXComponentViewCreatedCallback, the result type is UIView.
- *  When the callbackType is WXComponentUpdateStylesCallback, the result type is NSDictionary.
- *
- *  @return A block that takes component, callbackType and a result.
- **/
-@property (nonatomic, copy) void (^componentCallback)(WXComponent *component, WXComponentCallbackType callbackType, id result);
-
-/**
- * @abstract Called on main thread when the component has just laid out.
- */
-- (void)layoutDidFinish;
-
-/**
- * @abstract Update component's CSS style values for external components.
- *  Could be called in any thread and will be scheduled to component thread.
- */
-- (void)updateLayoutStyles:(NSDictionary*)styles;
-
-///--------------------------------------
-/// @name View Management
-///--------------------------------------
-
-/**
- * @abstract The view that the component manages.
- *
- * @discussion If you access this property and its value is currently nil, the component automatically calls the loadView method and returns the resulting view.
- *
- * @warning It must be on accessed on the main thread.Subclasses must not override this;
- */
-@property(nonatomic, readonly, strong) UIView *view;
-
-/**
- * @abstract The layer that the component manages.
- *
- * @discussion The layer property is also lazily initialized, similar to the view property.
- *
- * @warning It must be on accessed on the main thread. Subclasses must not override this;
- */
-@property(nonatomic, readonly, strong) CALayer *layer;
-
-/**
- * @abstract Creates the view that the component manages.
- *
- * @return View to be created
- *
- * @discussion This method loads or creates a view and assigns it to the view property. This is where subclasses should create their custom view hierarchy. Should never be called directly.The method is called on the main thread.
- *
- * @warning Your custom implementation of this method should not call super
- */
-- (UIView *)loadView;
-
-/**
- * @abstract Returns a Boolean value indicating whether the view is currently loaded.
- */
-- (BOOL)isViewLoaded;
-
-/**
- * @abstract Called before the load of component'€™s view .
- *
- * @discussion This is before -loadView. The method is called on the main thread.
- */
-- (void)viewWillLoad;
-
-/**
- * @abstract Called after the component'€™s view is loaded and set.
- *
- * @discussion This is after -loadView. This is the best time to perform additional initialization like adding gesture recognizers to the view.The method is called on the main thread.
- */
-- (void)viewDidLoad;
-
-/**
- * @abstract Called just before releasing the component'€™s view.The method is called on the main thread.
- */
-- (void)viewWillUnload;
-
-/**
- * @abstract Called when the component'€™s view is released.The method is called on the main thread.
- */
-- (void)viewDidUnload;
-
-/**
- * @abstract Inserts a subview at the specified index.
- *
- * @param subcomponent The subcomponent whose view will be inserted in the component's view.
- * @param index        The index in the array of the subcomponents property at which to insert the view. subcomponent indices start at 0 and cannot be greater than the number of subcomponents.
- *
- * @discussion This will insert subcomponent's view to the view hierachy by default, it can be overrided to change the view hierachy. The method is called on the main thread.
- */
-- (void)insertSubview:(WXComponent *)subcomponent atIndex:(NSInteger)index;
-
-/**
- * @abstract Tells the component that a subcomponent's view is about to be removed.
- *
- * @discussion The method is called on the main thread.
- */
-- (void)willRemoveSubview:(WXComponent *)component;
-
-/**
- * @abstract Remove the component's view from its superview.
- *
- * @discussion The method is called on the main thread.
- */
-- (void)removeFromSuperview;
-
-/**
- * @abstract Moves the subview to a new super component in the scene. The node maintains its current position in scene coordinates.
- *
- * @param newSupercomponent An WXComponent object to move the component to
- * @param index             The index in the array of the subcomponents property at which to insert the view. subcomponent indices start at 0 and cannot be greater than the number of subcomponents.
- */
-- (void)moveToSuperview:(WXComponent *)newSupercomponent atIndex:(NSUInteger)index;
-
-///--------------------------------------
-/// @name Events
-///--------------------------------------
-
-/**
- * @abstract Fire an event to the component in Javascript.
- *
- * @param eventName The name of the event to fire
- * @param params The parameters to fire with
- **/
-- (void)fireEvent:(NSString *)eventName params:(nullable NSDictionary *)params;
-
-/**
- * @abstract Fire an event to the component and tell Javascript which value has been changed. 
- * Used for two-way data binding.
- *
- * @param eventName The name of the event to fire
- * @param params The parameters to fire with
- * @param domChanges The values has been changed, used for two-way data binding.
- **/
-- (void)fireEvent:(NSString *)eventName params:(nullable NSDictionary *)params domChanges:(nullable NSDictionary *)domChanges;
-
-///--------------------------------------
-/// @name Updating
-///--------------------------------------
-
-/**
- * @abstract Called when component's style are updated
- *
- * @param styles The updated style dictionary
- * @discussion It can be overrided to handle specific style updating. The method is called on the main thread.
- **/
-- (void)updateStyles:(NSDictionary *)styles;
-
-/**
- * @abstract Called when component's style are reset
- *
- * @param styles The reset style's elements
- * @discussion It can be overrided to handle specific style reseting. The method is called on the main thread.
- **/
-- (void)resetStyles:(NSArray *)styles;
-
-/**
- * @abstract Called when component's attributes are updated
- *
- * @param attributes The updated attributes dictionary
- * @discussion It can be overrided to handle specific attribute updating. The method is called on the main thread.
- **/
-- (void)updateAttributes:(NSDictionary *)attributes;
-
-/**
- * @abstract Called when adding an event to the component
- *
- * @param eventName The added event's name
- * @discussion It can be overrided to handle specific event adding. The method is called on the main thread.
- **/
-- (void)addEvent:(NSString *)eventName;
-
-/**
- * @abstract Called when removing an event from the component
- *
- * @param eventName The removed event's name
- * @discussion It can be overrided to handle specific event removing. The method is called on the main thread.
- **/
-- (void)removeEvent:(NSString *)eventName;
-
-/**
- * @abstract Update component's transform with native transform struct
- **/
-- (void)setNativeTransform:(CGAffineTransform)transform;
-
-///--------------------------------------
-/// @name Display
-///--------------------------------------
-
-@property (nonatomic, assign) WXDisplayType displayType;
-
-/**
- * @abstract Marks the view as needing display. The method should be called on the main thread.
- * @discussion You can use this method to notify the system that your component's contents need to be redrawn. This method makes a note of the request and returns immediately. The component is not actually redrawn until the next drawing cycle, at which point all invalidated components are updated.
- *
- */
-- (void)setNeedsDisplay;
-
-/**
- * @abstract Returns a Boolean indicating whether the component needs to be drawn by `drawRect:`
- */
-- (BOOL)needsDrawRect;
-
-/**
- * @abstract Draws the component’s image within the passed-in rectangle.
- * @parameter rect The rectangle which is the entire visible bounds of your component. 
- * @return A UIImage containing the contents of the current bitmap graphics context.
- * @discussion 
- * Subclasses that use technologies such as Core Graphics and UIKit to draw their own component’s content should override this method and implement their drawing code there. You do not need to override this method if your component sets its content in superclass's way.
- * By the time this method is called, UIKit has configured the drawing environment appropriately for your view and you can simply call whatever drawing methods and functions you need to render your content. Specifically, Weex creates and configures a graphics context for drawing and adjusts the transform of that context so that its origin matches the origin of your components’s bounds rectangle. You can get a reference to the graphics context using the `UIGraphicsGetCurrentContext` function, but do not establish a strong reference to the graphics context because it can change between calls to the drawRect: method.
- * If you already have an image that represents the content of the component, then you should just return the image and do no drawing, otherwise you should draw your content in the current context and return nil.
- * You should never call this method directly yourself. To invalidate part of your component's content, and thus cause that portion to be redrawn, call the `setNeedsDisplay` method instead.
- */
-- (UIImage *)drawRect:(CGRect)rect;
-
-/**
- * @abstract Called when a component finishes drawing its content.
- * @discussion Do not call this method directly. Weex calls this method at appropriate times to finish updating the component's content.
- * Subclasses can override this method to perform additional work on components that were rendered.
- */
-- (void)didFinishDrawingLayer:(BOOL)success;
-
-/**
- * readyToRender, do not use it, will be deprecated soon
- */
-- (void)readyToRender;
-
-/**
- * @abstract trigger display if you do not have a WXLayer
- */
-- (void)triggerDisplay;
-
-/**
- * @abstract Creates a  graphics context with the specified bounds, the context will be used for `drawRect:` in compositing environment
- * @discussion You can override this method to use your own graphics context.
- */
-- (CGContextRef)beginDrawContext:(CGRect)bounds;
-
-/**
- * @abstract Removes the current graphics context and returns an image based on the contents of the current graphics context.
- * @discussion You can override this method to use your own graphics context. The image will be set to layer,  if your drawing system do not have layer and do not need image, returning nil is fine.
- */
-- (UIImage *)endDrawContext:(CGContextRef)context;
-
-/**
- * @abstract Return a shapelayer when compoent need border radius.(Especially video components)
- *
- * @discussion You can add this shadelayer to your view.layer attached to component.
- *
- */
-- (CAShapeLayer *)drawBorderRadiusMaskLayer:(CGRect)rect;
-
-///--------------------------------------
-/// @name Data Binding
-///--------------------------------------
-
-/**
- * @abstract Update binding data for the component
- * @parameter binding data to update
- */
-- (void)updateBindingData:(NSDictionary *)data;
-
-///--------------------------------------
-/// @name Heron
-///--------------------------------------
-
-/**
- * @abstract Unload native view of embeded component in Heron mode.
- */
-- (void)unloadNativeView;
-
-@end
-
-@interface WXComponent (Deprecated)
-
-typedef UIImage * _Nonnull(^WXDisplayBlock)(CGRect bounds, BOOL(^isCancelled)(void));
-typedef void(^WXDisplayCompletionBlock)(CALayer *layer, BOOL finished);
-
-/**
- * @abstract Return a block to be called to draw layer.
- *
- * @discussion The block returned will be called on any thread.
- *
- */
-- (WXDisplayBlock)displayBlock DEPRECATED_MSG_ATTRIBUTE("use drawRect: method instead.");
-
-/**
- * @abstract Return a block to be called while drawing is finished.
- *
- * @discussion The block returned will be called on main thread.
- *
- */
-- (WXDisplayCompletionBlock)displayCompletionBlock DEPRECATED_MSG_ATTRIBUTE("use didFinishDrawingLayer: method instead.");
-
-@end
-
-@interface UIView (WXComponent)
-
-@property (nonatomic, weak) WXComponent *wx_component;
-
-@property (nonatomic, weak) NSString *wx_ref;
-
-@end
-
-@interface CALayer (WXComponent)
-
-@property (nonatomic, weak) WXComponent *wx_component;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
deleted file mode 100644
index 3a6da5e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent.mm
+++ /dev/null
@@ -1,973 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-#import "WXComponent_internal.h"
-#import "WXComponentManager.h"
-#import "WXSDKManager.h"
-#import "WXSDKInstance.h"
-#import "WXSDKInstance_private.h"
-#import "WXDefine.h"
-#import "WXLog.h"
-#import "WXWeakObjectWrapper.h"
-#import "WXUtility.h"
-#import "WXConvert.h"
-#import "WXMonitor.h"
-#import "WXAssert.h"
-#import "WXTransform.h"
-#import "WXRoundedRect.h"
-#import <pthread/pthread.h>
-#import "WXComponent+PseudoClassManagement.h"
-#import "WXComponent+BoxShadow.h"
-#import "WXComponent+Events.h"
-#import "WXComponent+Layout.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXSDKEngine.h"
-#import "WXSDKInstance_performance.h"
-#import "WXComponent_performance.h"
-#import "WXCoreBridge.h"
-
-#pragma clang diagnostic ignored "-Wincomplete-implementation"
-#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-static BOOL bInited = NO;
-static BOOL bNeedRemoveEvents = YES;
-
-@interface WXComponent () <UIGestureRecognizerDelegate>
-
-@end
-
-@implementation WXComponent
-{
-@private
-    NSString *_ref;
-    NSMutableDictionary *_styles;
-    NSMutableDictionary *_attributes;
-    NSMutableArray *_events;
-    
-    // Protects properties styles/attributes/events/subcomponents which will be accessed from multiple threads.
-    pthread_mutex_t _propertyMutex;
-    pthread_mutexattr_t _propertMutexAttr;
-    
-    __weak WXComponent *_supercomponent;
-    __weak id<WXScrollerProtocol> _ancestorScroller;
-    __weak WXSDKInstance *_weexInstance;
-}
-
-@synthesize transform = _transform;
-
-#pragma mark Life Cycle
-
-- (instancetype)initWithRef:(NSString *)ref
-                       type:(NSString *)type
-                     styles:(NSDictionary *)styles
-                 attributes:(NSDictionary *)attributes
-                     events:(NSArray *)events
-               weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super init]) {
-        pthread_mutexattr_init(&_propertMutexAttr);
-        pthread_mutexattr_settype(&_propertMutexAttr, PTHREAD_MUTEX_RECURSIVE);
-        pthread_mutex_init(&_propertyMutex, &_propertMutexAttr);
-        
-        _ref = ref;
-        _type = type;
-        _weexInstance = weexInstance;
-        _componentType = WXComponentTypeCommon;
-        _styles = [self parseStyles:styles];
-        _attributes = attributes ? [NSMutableDictionary dictionaryWithDictionary:attributes] : [NSMutableDictionary dictionary];
-        _events = events ? [NSMutableArray arrayWithArray:events] : [NSMutableArray array];
-        _subcomponents = [NSMutableArray array];
-        _absolutePosition = CGPointMake(NAN, NAN);
-        
-        _displayType = WXDisplayTypeBlock;
-        _isViewFrameSyncWithCalculated = YES;
-        _ariaHidden = nil;
-        _accessible = nil;
-        _accessibilityHintContent = nil;
-        _cancelsTouchesInView = YES;
-        
-        _async = NO;
-        
-        if (styles[kWXTransitionProperty]) {
-            _transition = [[WXTransition alloc]initWithStyles:styles];
-        }
-
-        //TODO set indicator style 
-        if ([type isEqualToString:@"indicator"]) {
-            _styles[@"position"] = @"absolute";
-            if (!_styles[@"left"] && !_styles[@"right"]) {
-                _styles[@"left"] = @0.0f;
-            }
-            if (!_styles[@"top"] && !_styles[@"bottom"]) {
-                _styles[@"top"] = @0.0f;
-            }
-        }
-        
-        if (attributes[@"ariaHidden"]) {
-            
-            _ariaHidden = [WXConvert NSString:attributes[@"ariaHidden"]];
-        }
-        if (attributes[@"role"]) {
-            _roles = attributes[@"role"];
-        }
-        if (attributes[@"ariaLabel"]) {
-            _ariaLabel = [WXConvert NSString:attributes[@"ariaLabel"]];
-        }
-        if (attributes[@"accessible"]) {
-            _accessible = [WXConvert NSString:attributes[@"accessible"]];
-        }
-        if(attributes[@"accessibilityHint"]) {
-            _accessibilityHintContent = [WXConvert NSString:attributes[@"accessibilityHint"]];
-        }
-        if (attributes[@"groupAccessibilityChildren"]) {
-            _groupAccessibilityChildren = [WXConvert NSString:attributes[@"groupAccessibilityChildren"]];
-        }
-        
-        if (attributes[@"testId"]) {
-            _testId = [WXConvert NSString:attributes[@"testId"]];
-        }
-        
-        //may be removed when this feature is stable
-        if (attributes[@"clipRadius"])
-        {
-            _clipRadius = [WXConvert NSString:attributes[@"clipRadius"]];
-        }
-        
-        if (attributes[@"customEvent"]) {
-            _customEvent = [WXConvert BOOL:attributes[@"customEvent"]];
-        }
-        
-        if (attributes[@"cancelsTouchesInView"]) {
-            _cancelsTouchesInView = [WXConvert BOOL:attributes[@"cancelsTouchesInView"]];
-        }
-
-        
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> init component: ref : %@ , styles: %@",ref,styles);
-        WXLogDebug(@"flexLayout -> init component: ref : %@ , attributes: %@",ref,attributes);
-#endif
-        [self _setupNavBarWithStyles:_styles attributes:_attributes];
-
-        [self _initViewPropertyWithStyles:_styles];
-        [self _initCompositingAttribute:_attributes];
-        [self _handleBorders:styles isUpdating:NO];
-        
-        if (!bInited) {
-            id<WXConfigCenterProtocol> configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-            if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-                bNeedRemoveEvents = [[configCenter configForKey:@"iOS_weex_ext_config.removeEventsOfWXComponentWhenDealloc" defaultValue:@(YES) isDefault:NULL] boolValue];
-                bInited = YES;
-            }
-        }
-    }
-    
-    return self;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    static std::atomic<long> __copy(0);
-    long copyId = __copy ++;
-    copyId %= (1024 * 1024);
-    NSString *copyRef = [NSString stringWithFormat:@"%ldcopy_of%@", copyId, _isTemplate ? self.ref : self->_templateComponent.ref];
-    
-    // first, copy weex core render object
-    void* copiedRenderObject = [WXCoreBridge copyRenderObject:_flexCssNode replacedRef:copyRef];
-    WXAssert(copiedRenderObject != nullptr, @"cannot copy render object.");
-    
-    // second, alloc new WXComponent
-    WXComponent *component = [[self class] allocWithZone:zone];
-    [component _setRenderObject:copiedRenderObject];
-    component = [component initWithRef:copyRef type:self.type styles:self.styles attributes:self.attributes events:self.events weexInstance:self.weexInstance];
-    if (_isTemplate) {
-        component->_templateComponent = self;
-    }
-    else {
-        component->_templateComponent = self->_templateComponent;
-    }
-    component->_calculatedFrame = self.calculatedFrame;
-    
-    // third, copy children
-    NSUInteger count = [self.subcomponents count];
-    for (NSInteger i = 0; i < count; i ++) {
-        WXComponent *subcomponentCopy = [[self.subcomponents objectAtIndex:i] copy];
-        BOOL inserted = [component _insertSubcomponent:subcomponentCopy atIndex:i];
-        if (inserted) {
-            // add to layout tree
-            [WXCoreBridge addChildRenderObject:subcomponentCopy->_flexCssNode toParent:component->_flexCssNode];
-        }
-        else {
-            WXLogError(@"fail to insert copied component.");
-        }
-    }
-    
-    WXPerformBlockOnComponentThread(^{
-        [self.weexInstance.componentManager addComponent:component toIndexDictForRef:copyRef];
-    });
-    
-    return component;
-}
-
-- (UIAccessibilityTraits)_parseAccessibilityTraitsWithTraits:(UIAccessibilityTraits)trait roles:(NSString*)roleStr
-{
-    UIAccessibilityTraits newTrait = trait;
-    for (NSString * role in [roleStr componentsSeparatedByString:@" "]) {
-        newTrait |= [WXConvert WXUIAccessibilityTraits: role];
-    }
-    
-    return newTrait;
-}
-
-- (void)dealloc
-{
-    if (_positionType == WXPositionTypeFixed) {
-        [self.weexInstance.componentManager removeFixedComponent:self];
-    }
-    
-    // remove all gesture and all
-    if (_isTemplate && self.attributes[@"@templateId"]) {
-        [[WXSDKManager bridgeMgr] callComponentHook:_weexInstance.instanceId componentId:self.attributes[@"@templateId"] type:@"lifecycle" hook:@"destroy" args:nil competion:nil];
-    }
-    if (_tapGesture) {
-        [_tapGesture removeTarget:nil action:NULL];
-    }
-    if ([_swipeGestures count]) {
-        for (UISwipeGestureRecognizer *swipeGestures in _swipeGestures) {
-            [swipeGestures removeTarget:nil action:NULL];
-        }
-    }
-    
-    if (_longPressGesture) {
-        [_longPressGesture removeTarget:nil action:NULL];
-    }
-    
-    if (_panGesture) {
-        [_panGesture removeTarget:nil action:NULL];
-    }
-    
-    if (_bindingExpressions != nullptr) {
-        for (WXJSExpression* expr : *_bindingExpressions) {
-            if (expr != nullptr) {
-                delete expr;
-            }
-        }
-        delete _bindingExpressions;
-    }
-
-    pthread_mutex_destroy(&_propertyMutex);
-    pthread_mutexattr_destroy(&_propertMutexAttr);
-}
-
-- (NSDictionary *)styles
-{
-    NSDictionary *styles;
-    pthread_mutex_lock(&_propertyMutex);
-    styles = [_styles copy];
-    pthread_mutex_unlock(&_propertyMutex);
-    return styles;
-}
-
-- (NSDictionary *)pseudoClassStyles
-{
-    NSDictionary *pseudoClassStyles;
-    pthread_mutex_lock(&_propertyMutex);
-    pseudoClassStyles = [_pseudoClassStyles copy];
-    pthread_mutex_unlock(&_propertyMutex);
-    
-    return pseudoClassStyles;
-}
-
-- (NSString *)type
-{
-    return _type;
-}
-
-- (NSDictionary *)attributes
-{
-    NSDictionary *attributes;
-    pthread_mutex_lock(&_propertyMutex);
-    attributes = [_attributes copy];
-    pthread_mutex_unlock(&_propertyMutex);
-    
-    return attributes;
-}
-
-- (NSArray *)events
-{
-    NSArray *events;
-    pthread_mutex_lock(&_propertyMutex);
-    events = [_events copy];
-    pthread_mutex_unlock(&_propertyMutex);
-    
-    return events;
-}
-
-- (void)setDisplayType:(WXDisplayType)displayType
-{
-    if (_displayType != displayType) {
-        _displayType = displayType;
-        if (displayType == WXDisplayTypeNone) {
-            [self _removeFromSupercomponent];
-            WXPerformBlockOnMainThread(^{
-                [self removeFromSuperview];
-            });
-        } else {
-            WXPerformBlockOnMainThread(^{
-                [self _buildViewHierarchyLazily];
-                // TODO: insert into the correct index
-                [self.supercomponent.view addSubview:self.view];
-            });
-        }
-        [self setNeedsLayout];
-    }
-}
-
-- (WXSDKInstance *)weexInstance
-{
-    return _weexInstance;
-}
-
-- (NSString *)description
-{
-    return [NSString stringWithFormat:@"<%@:%p ref=%@> %@", _type, self, _ref, _view];
-}
-
-#pragma mark Property
-
-- (UIView *)view
-{
-    if (_componentType != WXComponentTypeCommon) {
-        return nil;
-    }
-    if ([self isViewLoaded]) {
-        return _view;
-    } else {
-        WXAssertMainThread();
-        
-        // compositing child will be drew by its composited ancestor
-        if (_isCompositingChild) {
-            return nil;
-        }
-        
-        [self viewWillLoad];
-        
-        _view = [self loadView];
-#ifdef DEBUG
-        WXLogDebug(@"flexLayout -> loadView:addr-(%p),componentRef-(%@)",_view,self.ref);
-#endif
-        _layer = _view.layer;
-        _view.frame = [self _fixIllegalFrame:_calculatedFrame];
-        _view.hidden = _visibility == WXVisibilityShow ? NO : YES;
-        _view.clipsToBounds = _clipToBounds;
-        if (![self _needsDrawBorder]) {
-            _layer.borderColor = _borderTopColor.CGColor;
-            _layer.borderWidth = _borderTopWidth;
-            [self _resetNativeBorderRadius];
-            _layer.opacity = _opacity;
-            _view.backgroundColor = _backgroundColor;
-        }
-
-        if (_backgroundImage) {
-            [self setGradientLayer];
-        }
-
-        if (_transform) {
-            [_transform applyTransformForView:_view];
-        }
-        
-        [self _adjustForRTL];
-        
-        if (_boxShadow) {
-            [self configBoxShadow:_boxShadow];
-        }
-        
-        _view.wx_component = self;
-        _view.wx_ref = self.ref;
-        _layer.wx_component = self;
-        
-        if (_roles) {
-            [_view setAccessibilityTraits:[self _parseAccessibilityTraitsWithTraits:self.view.accessibilityTraits roles:_roles]];
-        }
-        
-        if (_testId) {
-            _view.accessibilityIdentifier = _testId;
-        }
-        
-        if (_accessibilityHintContent) {
-            [_view setAccessibilityHint:_accessibilityHintContent];
-        }
-        
-        if (_ariaLabel) {
-            _view.accessibilityLabel = _ariaLabel;
-        }
-        if (_accessible) {
-            [_view setIsAccessibilityElement:[WXConvert BOOL:_accessible]];
-        }
-        
-        if (_ariaHidden) {
-            [_view setAccessibilityElementsHidden:[WXConvert BOOL:_ariaHidden]];
-        }
-        if (_groupAccessibilityChildren) {
-            [_view setShouldGroupAccessibilityChildren:[WXConvert BOOL:_groupAccessibilityChildren]];
-        }
-        
-        [self _initEvents:self.events];
-        [self _initPseudoEvents:_isListenPseudoTouch];
-        
-        if (_positionType == WXPositionTypeSticky) {
-            [self.ancestorScroller addStickyComponent:self];
-        }
-        
-        if (self.supercomponent && self.supercomponent->_async) {
-            self->_async = YES;
-        }
-        
-        [self setNeedsDisplay];
-        [[NSNotificationCenter defaultCenter] postNotificationName:WX_COMPONENT_NOTIFICATION_VIEW_LOADED object:self];
-        [self viewDidLoad];
-        
-        if (_lazyCreateView) {
-            [self _buildViewHierarchyLazily];
-        }
-
-        [self _handleFirstScreenTime];
-        
-        [self.weexInstance.performance onViewLoad:self];
-        return _view;
-    }
-}
-
-- (CGRect)_fixIllegalFrame:(CGRect)frame{
-    CGPoint origin = frame.origin;
-    CGSize size = frame.size;
-    CGRect fixedFrame = CGRectMake(isnan(origin.x)?0.0f:origin.x
-                                   , isnan(origin.y)?0.0f:origin.y
-                                   , isnan(size.width)?0.0f:size.width
-                                   , isnan(size.height)?0.0f:size.height);
-    return fixedFrame;
-}
-
-- (void)_buildViewHierarchyLazily
-{
-    if (self.supercomponent && !((WXComponent *)self.supercomponent)->_lazyCreateView) {
-        NSArray *subcomponents = ((WXComponent *)self.supercomponent).subcomponents;
-        
-        NSInteger index = [subcomponents indexOfObject:self];
-        if (index != NSNotFound) {
-            [(WXComponent *)self.supercomponent insertSubview:self atIndex:index];
-        }
-    }
-    
-    NSArray *subcomponents = self.subcomponents;
-    for (int i = 0; i < subcomponents.count; i++) {
-        WXComponent *subcomponent = subcomponents[i];
-        [self insertSubview:subcomponent atIndex:i];
-    }
-}
-
-- (void)_resetNativeBorderRadius
-{
-    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:_calculatedFrame topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
-    _layer.cornerRadius = borderRect.radii.topLeft;
-}
-
-- (void)_handleFirstScreenTime
-{
-    if (WX_MONITOR_INSTANCE_PERF_IS_RECORDED(WXPTFirstScreenRender, self.weexInstance)) {
-        return;
-    }
-    CGPoint absolutePosition = [self.supercomponent.view convertPoint:_view.frame.origin toView:_weexInstance.rootView];
-    if (absolutePosition.y + _view.frame.size.height > self.weexInstance.rootView.frame.size.height + 1) {
-        WX_MONITOR_INSTANCE_PERF_END(WXPTFirstScreenRender, self.weexInstance);
-    }
-}
-
-- (BOOL)_isAffineTypeAs:(NSString *)type
-{
-    return [WXCoreBridge isComponentAffineType:_type asType:type];
-}
-
-- (CALayer *)layer
-{
-    return _layer;
-}
-
-- (CGRect)calculatedFrame
-{
-    return _calculatedFrame;
-}
-
-- (CGFloat)_getInnerContentMainSize
-{
-    return -1.0f;
-}
-
-- (void)_assignInnerContentMainSize:(CGFloat)value
-{
-}
-
-- (BOOL)_isCalculatedFrameChanged:(CGRect)frame
-{
-    return !CGRectEqualToRect(frame, _calculatedFrame);
-}
-
-- (void)_layoutPlatform
-{
-}
-
-- (void)_assignCalculatedFrame:(CGRect)frame
-{
-    _calculatedFrame = frame;
-}
-
-- (CGPoint)absolutePosition
-{
-    return _absolutePosition;
-}
-
-- (void)_addEventParams:(NSDictionary *)params
-{
-    pthread_mutex_lock(&_propertyMutex);
-    if (!_eventParameters) {
-        _eventParameters = [NSMutableDictionary dictionary];
-    }
-    [_eventParameters addEntriesFromDictionary:params];
-    pthread_mutex_unlock(&_propertyMutex);
-}
-
-- (NSArray *)_paramsForEvent:(NSString *)eventName
-{
-    NSArray *params;
-    pthread_mutex_lock(&_propertyMutex);
-    params = _eventParameters[eventName];
-    pthread_mutex_unlock(&_propertyMutex);
-    
-    return params;
-}
-
-#pragma mark Component Hierarchy 
-
-- (NSArray<WXComponent *> *)subcomponents
-{
-    NSArray<WXComponent *> *subcomponents;
-    pthread_mutex_lock(&_propertyMutex);
-    subcomponents = [_subcomponents copy];
-    pthread_mutex_unlock(&_propertyMutex);
-    
-    return subcomponents;
-}
-
-- (WXComponent *)supercomponent
-{
-    return _supercomponent;
-}
-
-- (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    WXAssert(subcomponent, @"The subcomponent to insert to %@ at index %d must not be nil", self, index);
-    
-    if (subcomponent == nil) {
-        return NO;
-    }
-    
-    if (index > [_subcomponents count]) {
-        WXLogError(@"the index of inserted %ld is out of range as the current is %lu", (long)index, (unsigned long)[_subcomponents count]);
-        return NO;
-    }
-    
-    subcomponent->_supercomponent = self;
-    
-    pthread_mutex_lock(&_propertyMutex);
-    [_subcomponents insertObject:subcomponent atIndex:index];
-    pthread_mutex_unlock(&_propertyMutex);
-    
-    if (subcomponent->_positionType == WXPositionTypeFixed) {
-        [self.weexInstance.componentManager addFixedComponent:subcomponent];
-    }
-    
-    if (_useCompositing || _isCompositingChild) {
-        subcomponent->_isCompositingChild = YES;
-    }
-    
-    [self setNeedsLayout];
-    
-    return YES;
-}
-
-- (void)_removeSubcomponent:(WXComponent *)subcomponent removeCssNode:(BOOL)removeCssNode
-{
-    pthread_mutex_lock(&_propertyMutex);
-    [_subcomponents removeObject:subcomponent];
-    if (removeCssNode) {
-        [self removeSubcomponentCssNode:subcomponent];
-    }
-    pthread_mutex_unlock(&_propertyMutex);
-}
-
-- (void)_removeFromSupercomponent
-{
-    [self _removeFromSupercomponent:YES]; // really do remove
-}
-
-- (void)_removeFromSupercomponent:(BOOL)remove
-{
-    [self.supercomponent _removeSubcomponent:self removeCssNode:remove];
-    [self.supercomponent setNeedsLayout];
-    
-    if (_positionType == WXPositionTypeFixed) {
-        [self.weexInstance.componentManager removeFixedComponent:self];
-    }
-    if (_positionType == WXPositionTypeSticky) {
-        [self.ancestorScroller removeStickyComponent:self];
-    }
-}
-
-- (void)_moveToSupercomponent:(WXComponent *)newSupercomponent atIndex:(NSUInteger)index
-{
-    [self _removeFromSupercomponent:NO]; // no remove underlayer render object
-    [newSupercomponent _insertSubcomponent:self atIndex:index];
-}
-
-- (void)_didInserted
-{
-}
-
-- (id<WXScrollerProtocol>)ancestorScroller
-{
-    if(!_ancestorScroller) {
-        WXComponent *supercomponent = self.supercomponent;
-        while (supercomponent) {
-            if([supercomponent conformsToProtocol:@protocol(WXScrollerProtocol)]) {
-                _ancestorScroller = (id<WXScrollerProtocol>)supercomponent;
-                break;
-            }
-            supercomponent = supercomponent.supercomponent;
-        }
-    }
-    
-    return _ancestorScroller;
-}
-
-#pragma mark Updating
-
-- (BOOL)_isTransitionNone
-{
-    return _transition == nil || _transition.transitionOptions == WXTransitionOptionsNone;
-}
-
-- (BOOL)_hasTransitionPropertyInStyles:(NSDictionary *)styles
-{
-    return [_transition _hasTransitionOptionInStyles:styles];
-}
-
-- (void)_updateStylesOnComponentThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles isUpdateStyles:(BOOL)isUpdateStyles
-{
-    BOOL isTransitionTag = _transition ? [self _isTransitionTag:styles] : NO;
-    if (isTransitionTag) {
-        [_transition _handleTransitionWithStyles:[styles mutableCopy] resetStyles:resetStyles target:self];
-    } else {
-        styles = [self parseStyles:styles];
-        [self resetPseudoClassStyles:resetStyles];
-        [self _updateCSSNodeStyles:styles];
-        [self _resetCSSNodeStyles:resetStyles];
-    }
-    if (isUpdateStyles) {
-        [self _modifyStyles:styles];
-        if ([self needsLayout]) {
-            // call update style may take effect on layout, maybe the component
-            // displaylink has been paused, so we need to restart the component task, and it will auto-pause when task queue is empty.
-            [self.weexInstance.componentManager startComponentTasks];
-        }
-    }
-}
-
-- (BOOL)_isTransitionTag:(NSDictionary *)styles
-{
-    BOOL yesOrNo = false;
-    if (_transition.transitionOptions != WXTransitionOptionsNone) {
-        yesOrNo = true;
-    }
-    return yesOrNo;
-}
-
-- (BOOL)_isTransitionOnMainThreadStyles:(NSDictionary *)styles
-{
-    BOOL yesOrNo = false;
-    if (_transition.transitionOptions != WXTransitionOptionsNone) {
-        if ((_transition.transitionOptions & WXTransitionOptionsBackgroundColor &&styles[@"backgroundColor"])
-            ||(_transition.transitionOptions & WXTransitionOptionsTransform &&styles[@"transform"])
-            ||(_transition.transitionOptions & WXTransitionOptionsOpacity &&styles[@"opacity"])) {
-            yesOrNo = true;
-        }
-    }
-    return yesOrNo;
-}
-
-- (void)_modifyStyles:(NSDictionary *)styles
-{
-    pthread_mutex_lock(&_propertyMutex);
-    [_styles addEntriesFromDictionary:styles];
-    pthread_mutex_unlock(&_propertyMutex);
-}
-
-- (void)_updateAttributesOnComponentThread:(NSDictionary *)attributes
-{
-    pthread_mutex_lock(&_propertyMutex);
-    [_attributes addEntriesFromDictionary:attributes];
-    pthread_mutex_unlock(&_propertyMutex);
-}
-
-- (void)_addEventOnComponentThread:(NSString *)eventName
-{
-    pthread_mutex_lock(&_propertyMutex);
-    [_events addObject:eventName];
-    pthread_mutex_unlock(&_propertyMutex);
-}
-
-- (void)_removeEventOnComponentThread:(NSString *)eventName
-{
-    pthread_mutex_lock(&_propertyMutex);
-    [_events removeObject:eventName];
-    pthread_mutex_unlock(&_propertyMutex);
-}
-
-- (void)_updateStylesOnMainThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles
-{
-    WXAssertMainThread();
-    if (![self _isTransitionOnMainThreadStyles:styles]) {
-        [self _updateViewStyles:styles];
-    } else {
-        [self _transitionUpdateViewProperty:styles];
-    }
-#ifdef DEBUG
-    NSDictionary *copySelfStyle = [NSDictionary dictionaryWithDictionary:self.styles];
-    WXLogDebug(@"flexLayout -> ref:%@ style before : %@",self.ref,copySelfStyle);
-    
-    if (styles) {
-        WXLogDebug(@"flexLayout -> ref:%@ update styles : %@",self.ref,styles);
-    }
-    
-    if (resetStyles) {
-        WXLogDebug(@"flexLayout -> ref:%@ update resetStyles : %@",self.ref,resetStyles);
-    }
-#endif
-    
-    [self _resetStyles:resetStyles];
-    [self _handleBorders:styles isUpdating:YES];
-    [self updateStyles:styles];
-    [self resetStyles:resetStyles];
-    
-#ifdef DEBUG
-    //self.styles may change
-    copySelfStyle = [NSDictionary dictionaryWithDictionary:self.styles];
-    WXLogDebug(@"flexLayout -> ref:%@ style after : %@",self.ref,copySelfStyle);
-#endif
-}
-
-- (void)_updateAttributesOnMainThread:(NSDictionary *)attributes
-{
-    WXAssertMainThread();
-    
-    [self _updateNavBarAttributes:attributes];
-    
-    [self updateAttributes:attributes];
-    [self _configWXComponentA11yWithAttributes:attributes];
-}
-
-- (void)updateStyles:(NSDictionary *)styles
-{
-    WXAssertMainThread();
-
-    if (self.componentCallback) {
-        self.componentCallback(self, WXComponentUpdateStylesCallback, styles);
-    }
-}
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    WXAssertMainThread();
-}
-
-- (void)setNativeTransform:(CGAffineTransform)transform
-{
-    WXAssertMainThread();
-    
-    self.transform = [[WXTransform alloc] initWithNativeTransform:CATransform3DMakeAffineTransform(transform) instance:self.weexInstance];
-    if (!CGRectEqualToRect(self.calculatedFrame, CGRectZero)) {
-        [_transform applyTransformForView:_view];
-        [self _adjustForRTL];
-        [_layer setNeedsDisplay];
-    }
-}
-
-- (void)readyToRender
-{
-    if (self.weexInstance.trackComponent) {
-        [self.supercomponent readyToRender];
-    }
-}
-
-
-- (void)setGradientLayer
-{
-    if (CGRectEqualToRect(self.view.frame, CGRectZero)) {
-        return;
-    }
-    NSDictionary * linearGradient = [WXUtility linearGradientWithBackgroundImage:_backgroundImage];
-    if (!linearGradient) {
-        return ;
-    }
-    
-    __weak typeof(self) weakSelf = self;
-    dispatch_async(dispatch_get_main_queue(), ^{
-        __strong typeof(self) strongSelf = weakSelf;
-        if(strongSelf) {
-            UIColor * startColor = (UIColor*)linearGradient[@"startColor"];
-            UIColor * endColor = (UIColor*)linearGradient[@"endColor"];
-            CAGradientLayer * gradientLayer = [WXUtility gradientLayerFromColors:@[startColor, endColor] locations:nil frame:strongSelf.view.bounds gradientType:(WXGradientType)[linearGradient[@"gradientType"] integerValue]];
-            if (gradientLayer) {
-                _backgroundColor = [UIColor colorWithPatternImage:[strongSelf imageFromLayer:gradientLayer]];
-                strongSelf.view.backgroundColor = _backgroundColor;
-                [strongSelf setNeedsDisplay];
-            }
-        }
-    });
-}
-
-- (void)_configWXComponentA11yWithAttributes:(NSDictionary *)attributes
-{
-    WX_CHECK_COMPONENT_TYPE(self.componentType)
-    if (attributes[@"role"]){
-        _roles = attributes[@"role"];
-        [self.view setAccessibilityTraits:[self _parseAccessibilityTraitsWithTraits:self.view.accessibilityTraits roles:_roles]];
-    }
-    if (attributes[@"ariaHidden"]) {
-        _ariaHidden = [WXConvert NSString:attributes[@"ariaHidden"]];
-        [self.view setAccessibilityElementsHidden:[WXConvert BOOL:_ariaHidden]];
-    }
-    if (attributes[@"accessible"]) {
-        _accessible = [WXConvert NSString:attributes[@"accessible"]];
-        [self.view setIsAccessibilityElement:[WXConvert BOOL:_accessible]];
-    }
-    if (attributes[@"ariaLabel"]) {
-        _ariaLabel = [WXConvert NSString:attributes[@"ariaLabel"]];
-        self.view.accessibilityValue = _ariaLabel;
-    }
-    if (attributes[@"accessibilityHint"]) {
-        _accessibilityHintContent = [WXConvert NSString:attributes[@"accessibilityHint"]];
-        [self.view setAccessibilityHint:_accessibilityHintContent];
-    }
-    
-    if (attributes[@"groupAccessibilityChildren"]) {
-        _groupAccessibilityChildren = [WXConvert NSString:attributes[@"groupAccessibilityChildren"]];
-        [self.view setShouldGroupAccessibilityChildren:[WXConvert BOOL:_groupAccessibilityChildren]];
-    }
-
-    
-    if (attributes[@"testId"]) {
-        [self.view setAccessibilityIdentifier:[WXConvert NSString:attributes[@"testId"]]];
-    }
-
-}
-
-- (UIImage *)imageFromLayer:(CALayer *)layer
-{
-    UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0);
-    [layer renderInContext:UIGraphicsGetCurrentContext()];
-    UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
-    return outputImage;
-}
-
-#pragma mark Reset
-- (void)resetStyles:(NSArray *)styles
-{
-    WXAssertMainThread();
-}
-
-#pragma mark Layout
-
-/**
- *  @see WXComponent+Layout.m
- */
-
-#pragma mark View Management
-
-/**
- *  @see WXComponent+ViewManagement.m
- */
-
-#pragma mark Events
-
-/**
- *  @see WXComponent+Events.m
- */
-
-#pragma mark Display
-
-/**
- *  @see WXComponent+Display.m
- */
-
-@end
-
-
-@implementation UIView (WXComponent)
-
-- (WXComponent *)wx_component
-{
-    WXWeakObjectWrapper *weakWrapper = objc_getAssociatedObject(self, @selector(wx_component));
-    return [weakWrapper weakObject];
-}
-
-- (void)setWx_component:(WXComponent *)wx_component
-{
-    id weakWrapper = [[WXWeakObjectWrapper alloc] initWithWeakObject:wx_component];
-    objc_setAssociatedObject(self, @selector(wx_component), weakWrapper, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-- (NSString *)wx_ref
-{
-    WXWeakObjectWrapper *weakWrapper = objc_getAssociatedObject(self, @selector(wx_ref));
-    return [weakWrapper weakObject];
-}
-
-- (void)setWx_ref:(NSString *)wx_ref
-{
-    id weakWrapper = [[WXWeakObjectWrapper alloc] initWithWeakObject:wx_ref];
-    objc_setAssociatedObject(self, @selector(wx_ref), weakWrapper, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-@end
-
-@implementation CALayer (WXComponents_new)
-
-- (WXComponent *)wx_component
-{
-    WXWeakObjectWrapper *weakWrapper = objc_getAssociatedObject(self, @selector(wx_component));
-    return [weakWrapper weakObject];
-}
-
-- (void)setWx_component:(WXComponent *)wx_component
-{
-    id weakWrapper = [[WXWeakObjectWrapper alloc] initWithWeakObject:wx_component];
-    objc_setAssociatedObject(self, @selector(wx_component), weakWrapper, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent_performance.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent_performance.h
deleted file mode 100644
index bbc18cf..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXComponent_performance.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXComponent()
-
-@property (nonatomic,assign) BOOL hasAdd;
-@property (nonatomic,assign) BOOL ignoreInteraction;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
deleted file mode 100644
index c5b14ab..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXJSExceptionInfo : NSObject
-/**
- * instance id
- */
-@property(nonatomic,strong) NSString * instanceId;
-/**
- * the URL where the exception occurred
- */
-@property(nonatomic,strong) NSString * bundleUrl;
-/**
- * error code
- */
-@property(nonatomic,strong) NSString * errorCode;
-/**
- * the function name of exception
- */
-@property(nonatomic,strong) NSString * functionName;
-/**
- * exception detail;
- */
-@property(nonatomic,strong) NSString * exception;
-/**
- * extend filed
- */
-@property(nonatomic,strong) NSMutableDictionary * userInfo;
-/**
- * weex sdk version
- */
-@property(nonatomic,strong, readonly) NSString * sdkVersion;
-/**
- * js framework verison
- */
-@property(nonatomic,strong, readonly) NSString * jsfmVersion;
-
-
-/**
- * @abstract Initializes a WXJSException instance
- * @param instanceId the id of instance
- * @param bundleUrl the page URL where the exception occurred
- * @param errorCode error Code
- * @param exception exception detail
- * @param userInfo  extend field
- */
-- (instancetype)initWithInstanceId:(NSString *)instanceId
-                         bundleUrl:(NSString *)bundleUrl
-                         errorCode:(NSString *)errorCode
-                      functionName:(NSString *)functionName
-                         exception:(NSString *)exception
-                          userInfo:(NSMutableDictionary *)userInfo;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.m
deleted file mode 100644
index 84883c6..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.m
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXJSExceptionInfo.h"
-#import "WXAppConfiguration.h"
-#import "WXDefine.h"
-
-@implementation WXJSExceptionInfo
-
-- (instancetype)initWithInstanceId:(NSString *)instanceId
-                         bundleUrl:(NSString *)bundleUrl
-                         errorCode:(NSString *)errorCode
-                      functionName:(NSString *)functionName
-                         exception:(NSString *)exception
-                          userInfo:(NSMutableDictionary *)userInfo
-{
-    if (self = [super init]) {
-        self.instanceId = instanceId;
-        self.bundleUrl = bundleUrl;
-        self.errorCode = errorCode;
-        self.exception = exception;
-        self.userInfo = userInfo;
-        self.functionName = functionName;
-        _jsfmVersion = [WXAppConfiguration JSFrameworkVersion];
-        _sdkVersion = WX_SDK_VERSION;
-    }
-    return self;
-}
-
-- (NSString *)description {
-    return [NSString stringWithFormat:@"instanceId:%@ bundleUrl:%@ errorCode:%@ functionName:%@ exception:%@ userInfo:%@ jsfmVersion:%@ sdkVersion:%@", _instanceId?:@"", _bundleUrl?:@"", _errorCode?:@"", _functionName?:@"", _exception?:@"", _userInfo?:@"", _jsfmVersion, _sdkVersion];
-}
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
deleted file mode 100644
index c28a2d6..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import "WXComponent.h"
-#import "WXJSExceptionInfo.h"
-#import "WXResourceResponse.h"
-#import "WXResourceRequest.h"
-#import "WXBridgeProtocol.h"
-#import "WXApmForInstance.h"
-#import "WXComponentManager.h"
-
-extern NSString *const bundleUrlOptionKey;
-
-@interface WXSDKInstance : NSObject
-
-/**
- * Init instance and render it using iOS native views.
- * It is the same as initWithRenderType:@"platform"
- **/
-- (instancetype)init;
-
-/**
- * Init instance with custom render type.
- **/
-- (instancetype)initWithRenderType:(NSString*)renderType;
-
-/**
- * The render type. Default is "platform"
- **/
-@property (nonatomic, strong, readonly) NSString* renderType;
-
-/**
- * Returns YES when self.renderType != "platform"
- **/
-@property (nonatomic, assign, readonly) BOOL isCustomRenderType;
-
-/*
- * For weex containers in view controller(main containers), we may need to release render buffer
- * of custom render type page to save memory.
- */
-@property (nonatomic, assign) BOOL isMainContainerStack;
-
-/**
- * The viewControler which the weex bundle is rendered in.
- **/
-@property (nonatomic, weak) UIViewController *viewController;
-
-/**
- * The Native root container used to bear the view rendered by weex file. 
- * The root view is controlled by WXSDKInstance, so you can only get it, but not change it.
- **/
-@property (nonatomic, strong) UIView *rootView;
-
-/**
- * Component can freeze the rootview frame through the variable isRootViewFrozen
- * If Component want to freeze the rootview frame, set isRootViewFrozen YES, weex will not change the rootview frame when layout,or set NO.
- **/
-@property (nonatomic, assign) BOOL isRootViewFrozen;
-
-/**
- * Which indicates current instance needs to be validated or not to load,default value is false.
- **/
-@property (nonatomic, assign) BOOL needValidate;
-
-/**
- * Which indicates current instance use backup JS thread run,default value is false.
- **/
-@property (nonatomic, assign) BOOL useBackupJsThread;
-
-/**
- * The scriptURL of weex bundle.
- **/
-@property (nonatomic, strong) NSURL *scriptURL;
-
-/**
- * The parent instance.
- **/
-@property (nonatomic, weak) WXSDKInstance *parentInstance;
-
-/**
- * The node reference of parent instance.
- **/
-@property (nonatomic, weak) NSString *parentNodeRef;
-
-/**
- * The unique id to identify current weex instance.
- **/
-@property (nonatomic, strong) NSString *instanceId;
-
-/**
- * Which indicates current instance needs to be prerender or not,default value is false.
- **/
-@property (nonatomic, assign) BOOL needPrerender;
-
-/**
- * Custom info.
- **/
-@property (nonatomic, strong) NSDictionary* containerInfo;
-
-/**
- * Whether this instance is rendered or not. Please MUST not render an instance twice even if you have called destroyInstance.
- **/
-@property (nonatomic, assign, readonly) BOOL isRendered;
-
-/**
- * Get component manager of this instance. You can manipulate components then.
- **/
-@property (nonatomic, readonly, strong) WXComponentManager *componentManager;
-
-/**
- * The state of current instance.
- **/
-typedef NS_ENUM(NSInteger, WXState) {//state.code
-    WeexInstanceAppear = 100,
-    WeexInstanceDisappear,
-    WeexInstanceForeground,
-    WeexInstanceBackground,
-    WeexInstanceMemoryWarning,
-    WeexInstanceBindChanged,
-    WeexInstanceDestroy
-};
-
-
-typedef NS_ENUM(NSInteger, WXErrorType) {//error.domain
-    TemplateErrorType = 1,
-};
-
-typedef NS_ENUM(NSInteger, WXErrorCode) {//error.code
-    PlatformErrorCode = 1000,
-    OSVersionErrorCode,
-    AppVersionErrorCode,
-    WeexSDKVersionErrorCode,
-    DeviceModelErrorCode,
-    FrameworkVersionErrorCode,
-};
-
-
-@property (nonatomic, assign) WXState state;
-
-/**
- *  The callback triggered when the instance finishes creating the body.
- *
- *  @return A block that takes a UIView argument, which is the root view
- **/
-@property (nonatomic, copy) void (^onCreate)(UIView *);
-
-/**
- *  The callback triggered when the root container's frame has changed.
- *
- *  @return A block that takes a UIView argument, which is the root view
- **/
-@property (nonatomic, copy) void (^onLayoutChange)(UIView *);
-
-/**
- *  The callback triggered when the instance finishes rendering.
- *
- *  @return A block that takes a UIView argument, which is the root view
- **/
-@property (nonatomic, copy) void (^renderFinish)(UIView *);
-
-/**
- *  The callback triggered when the instance finishes refreshing weex view.
- *
- *  @return A block that takes a UIView argument, which is the root view
- **/
-@property (nonatomic, copy) void (^refreshFinish)(UIView *);
-
-/**
- * bundleType is the DSL type
- */
-@property (nonatomic, strong) NSString * bundleType;
-
-/**
- *  Which decide whether to use data render,default value is false
- */
-@property (nonatomic, assign, readonly) BOOL dataRender;
-
-/**
- *  Which decide whether to use binary code render, default value is false
- */
-@property (nonatomic, assign, readonly) BOOL wlasmRender;
-    
-/**
- *  The callback triggered when the instance fails to render.
- *
- *  @return A block that takes a NSError argument, which is the error occured
- **/
-@property (nonatomic, copy) void (^onFailed)(NSError *error);
-
-/**
- *
- *  @return instance runtime JavaScript.
- *  you must call it in brige thread. Learn more at WXPerformBlockOnBridgeThread
- **/
-- (id<WXBridgeProtocol>)instanceJavaScriptContext;
-
-/**
- *  The callback triggered when js occurs runtime error while executing.
- *
- *  @return A block that takes a WXJSExceptionInfo argument, which is the exception info
- **/
-@property (nonatomic, copy) void (^onJSRuntimeException)(WXJSExceptionInfo * jsException);
-
-/**
- *  The callback triggered when the instacne executes scrolling .
- *
- *  @return A block that takes a CGPoint argument, which is content offset of the scroller
- **/
-@property (nonatomic, copy) void (^onScroll)(CGPoint contentOffset);
-
-/**
- * the callback to be run repeatedly while the instance is rendering.
- *
- * @return A block that takes a CGRect argument, which is the rect rendered
- **/
-@property (nonatomic, copy) void (^onRenderProgress)(CGRect renderRect);
-
-/**
- * The callback triggered when the bundleJS request finished in the renderWithURL.
- * @return A block that takes response which the server response,request which send to server,data which the server returned and an error
- */
-@property (nonatomic, copy) void(^onJSDownloadedFinish)(WXResourceResponse *response,WXResourceRequest *request,NSData *data, NSError* error);
-
-/**
- * The callback triggered when the bundleJS request finished in the renderWithURL. If the callback returns YES, the render process will terminate.
- * @return A block that takes response which the server response,request which send to server,data which the server returned and an error
- */
-@property (nonatomic, copy) BOOL (^onRenderTerminateWhenJSDownloadedFinish)(WXResourceResponse *response,WXResourceRequest *request,NSData *data, NSError* error);
-
-@property(nonatomic,strong) NSDictionary* continerInfo;
-
-/**
- *  the frame of current instance.
- **/
-@property (nonatomic, assign) CGRect frame;
-
-/**
- *  the info stored by user.
- */
-@property (atomic, strong) NSMutableDictionary *userInfo;
-
-/**
- *  scale factor from css unit to device pixel.
- */
-@property (nonatomic, assign, readonly) CGFloat pixelScaleFactor;
-
-/**
- * track component render
- */
-@property (nonatomic, assign)BOOL trackComponent;
-/**
- * Renders weex view with bundle url.
- *
- * @param url The url of bundle rendered to a weex view.
- **/
-- (void)renderWithURL:(NSURL *)url;
-
-/**
- * Renders weex view with bundle url and some others.
- *
- * @param url The url of bundle rendered to a weex view.
- *
- * @param options The params passed by user
- *
- * @param data The data the bundle needs when rendered.  Defalut is nil.
- **/
-- (void)renderWithURL:(NSURL *)url options:(NSDictionary *)options data:(id)data;
-
-///**
-// * Renders weex view with resource request.
-// *
-// * @param request The resource request specifying the URL to render with.
-// *
-// * @param options The params passed by user.
-// *
-// * @param data The data the bundle needs when rendered.  Defalut is nil.
-// **/
-//- (void)renderWithRequest:(WXResourceRequest *)request options:(NSDictionary *)options data:(id)data;
-
-/**
- * Renders weex view with source string of bundle and some others.
- *
- * @param options The params passed by user.
- *
- * @param data The data the bundle needs when rendered. Defalut is nil.
- **/
-- (void)renderView:(id)source options:(NSDictionary *)options data:(id)data;
-
-/**
- * Reload the js bundle from the current URL and rerender.
- *
- * @param forcedReload when this parameter is true, the js bundle will always be reloaded from the server. If it is false, the instance may reload the js bundle from its cache. Default is false.
- *
- **/
-- (void)reload:(BOOL)forcedReload;
-
-/**
- * Refreshes current instance components' layout after setting custom view port/device width.
- **/
-- (void)reloadLayout;
-
-/**
- * Refreshes current instance with data.
- *
- * @param data The data the bundle needs when rendered.
- **/
-- (void)refreshInstance:(id)data;
-
-/**
- * Destroys current instance. An instance destroyed should not be used for rendering again, please create another instance.
- **/
-- (void)destroyInstance;
-
-/**
- * Trigger full GC, for dev and debug only.
- **/
-- (void)forceGarbageCollection;
-
-/**
- * get module instance by class
- */
-- (id)moduleForClass:(Class)moduleClass;
-
-/**
- * get Component instance by ref, must be called on component thread by calling WXPerformBlockOnComponentThread
- */
-- (WXComponent *)componentForRef:(NSString *)ref;
-
-/**
- * Number of components created, must be called on component thread by calling WXPerformBlockOnComponentThread
- */
-- (NSUInteger)numberOfComponents;
-
-/**
- * Enumerate components using breadth-first search algorithm,
- must be called on component thread by calling WXPerformBlockOnComponentThread
- */
-- (void)enumerateComponentsUsingBlock:(void (^)(WXComponent *component, BOOL *stop))block;
-
-/**
- * check whether the module eventName is registered
- */
-- (BOOL)checkModuleEventRegistered:(NSString*)event moduleClassName:(NSString*)moduleClassName;
-
-/**
- * fire module event;
- * @param module which module you fire event to
- * @param eventName the event name
- * @param params event params
- */
-- (void)fireModuleEvent:(Class)module eventName:(NSString *)eventName params:(NSDictionary*)params;
-
-/**
- * fire global event
- */
-- (void)fireGlobalEvent:(NSString *)eventName params:(NSDictionary *)params;
-
-/**
- * complete url based with bundle url
- */
-- (NSURL *)completeURL:(NSString *)url;
-
-/**
- * jsbundle str ,may be nil (weak)
- */
-- (NSString*) bundleTemplate;
-
-/**
- * application performance statistics
- */
-@property (nonatomic, strong) NSString *bizType;
-@property (nonatomic, strong) NSString *pageName;
-@property (nonatomic, weak) id pageObject;
-
-//Deprecated, use @WXApmForInstance
-@property (nonatomic, strong) NSMutableDictionary *performanceDict;
-@property (nonatomic, strong) WXApmForInstance* apmInstance;
-
-@property (nonatomic, assign) BOOL appearState;
-
-/*
- * For custom render page to release/restore OpenGL resources, etc.
- */
-- (void)willAppear;
-- (void)didDisappear;
-
-/**
- * Raw css styles are dropped after applied to layout nodes in WeexCore.
- * If a page needs hot refresh(without recreating instance and reload js) after screen orientation changes or
- * after setting custom view-port-width/screen-width/, you need to call setPageNeedsRawCssStyles to store all css styles
- * internally for later use. Or you can use MetaModule's setPageArguments method and provide "reserveCssStyles" as "true" before rendering the page.
- */
-- (void)setPageKeepRawCssStyles;
-- (void)isKeepingRawCssStyles:(void(^)(BOOL))callback;
-
-/**
- * Set additional argument value for WeexCore
- */
-- (void)setPageArgument:(NSString*)key value:(NSString*)value;
-
-/**
- * Set specific required page width and height to prevent this page using global values.
- */
-- (void)setPageRequiredWidth:(CGFloat)width height:(CGFloat)height;
-
-/**
- * Set specific required view port width prevent this page using global value (750px).
- */
-- (void)setViewportWidth:(CGFloat)width;
-
-/** 
- * Deprecated 
- */
-@property (nonatomic, strong) NSDictionary *properties DEPRECATED_MSG_ATTRIBUTE();
-@property (nonatomic, assign) NSTimeInterval networkTime DEPRECATED_MSG_ATTRIBUTE();
-@property (nonatomic, copy) void (^updateFinish)(UIView *);
-
-@end
-
-@interface WXSDKInstance (Deprecated)
-
-- (void)finishPerformance DEPRECATED_MSG_ATTRIBUTE();
-- (void)reloadData:(id)data  DEPRECATED_MSG_ATTRIBUTE("Use refreshInstance: method instead.");
-- (void)creatFinish DEPRECATED_MSG_ATTRIBUTE();
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
deleted file mode 100644
index b01c263..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ /dev/null
@@ -1,1128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSDKInstance.h"
-#import "WXSDKInstance_private.h"
-#import "WXSDKManager.h"
-#import "WXSDKError.h"
-#import "WXMonitor.h"
-#import "WXAppMonitorProtocol.h"
-#import "WXNetworkProtocol.h"
-#import "WXModuleFactory.h"
-#import "WXHandlerFactory.h"
-#import "WXDebugTool.h"
-#import "WXUtility.h"
-#import "WXAssert.h"
-#import "WXLog.h"
-#import "WXView.h"
-#import "WXRootView.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXResourceRequest.h"
-#import "WXResourceResponse.h"
-#import "WXResourceLoader.h"
-#import "WXSDKEngine.h"
-#import "WXValidateProtocol.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXTextComponent.h"
-#import "WXConvert.h"
-#import "WXPrerenderManager.h"
-#import "WXJSExceptionProtocol.h"
-#import "WXExceptionUtils.h"
-#import "WXMonitor.h"
-#import "WXBridgeContext.h"
-#import "WXJSCoreBridge.h"
-#import "WXSDKInstance_performance.h"
-#import "WXPageEventNotifyEvent.h"
-#import "WXCoreBridge.h"
-#import <WeexSDK/WXDataRenderHandler.h>
-
-#define WEEX_LITE_URL_SUFFIX           @"wlasm"
-#define WEEX_RENDER_TYPE_PLATFORM       @"platform"
-
-NSString *const bundleUrlOptionKey = @"bundleUrl";
-NSString *const bundleResponseUrlOptionKey = @"bundleResponseUrl";
-
-NSTimeInterval JSLibInitTime = 0;
-
-typedef enum : NSUInteger {
-    WXLoadTypeNormal,
-    WXLoadTypeBack,
-    WXLoadTypeForward,
-    WXLoadTypeReload,
-    WXLoadTypeReplace
-} WXLoadType;
-
-@implementation WXSDKInstance
-{
-    NSDictionary *_options;
-    id _jsData;
-    
-    WXResourceLoader *_mainBundleLoader;
-    WXComponentManager *_componentManager;
-    UIView *_rootView;
-    WXThreadSafeMutableDictionary *_moduleEventObservers;
-    BOOL _performanceCommit;
-    BOOL _debugJS;
-    id<WXBridgeProtocol> _instanceJavaScriptContext; // sandbox javaScript context
-    BOOL _defaultDataRender;
-}
-
-- (void)dealloc
-{
-    [_moduleEventObservers removeAllObjects];
-    [self removeObservers];
-}
-
-- (instancetype)init
-{
-    return [self initWithRenderType:WEEX_RENDER_TYPE_PLATFORM];
-}
-
-- (instancetype)initWithRenderType:(NSString*)renderType
-{
-    self = [super init];
-    if (self) {
-        _renderType = renderType;
-        _appearState = YES;
-        
-        NSInteger instanceId = 0;
-        @synchronized(bundleUrlOptionKey) {
-            static NSInteger __instance = 0;
-            instanceId = __instance % (1024*1024);
-            __instance += 2; // always add by 2 as even number
-        }
-        
-        _instanceId = [NSString stringWithFormat:@"%ld", (long)instanceId];
-        
-        if (self.isCustomRenderType) {
-            // check render type is available
-            NSSet* availableRenderTypes = [WXCustomPageBridge getAvailableCustomRenderTypes];
-            if ([availableRenderTypes containsObject:_renderType]) {
-                // custom render page, we use odd instanceId, and (instanceId + 1) is sure not used by other pages.
-                _instanceId = [NSString stringWithFormat:@"%ld", (long)(instanceId + 1)];
-                [WXCoreBridge setPageArgument:_instanceId key:@"renderType" value:_renderType];
-            }
-            else {
-                WXLogError(@"Unsupported render type '%@'. Regress to platform target.", _renderType);
-                _renderType = WEEX_RENDER_TYPE_PLATFORM;
-            }
-        }
-        
-        // TODO self is retained here.
-        [WXSDKManager storeInstance:self forID:_instanceId];
-        
-        _bizType = @"";
-        _pageName = @"";
-        
-        _performanceDict = [WXThreadSafeMutableDictionary new];
-        _moduleInstances = [WXThreadSafeMutableDictionary new];
-        _styleConfigs = [NSMutableDictionary new];
-        _attrConfigs = [NSMutableDictionary new];
-        _moduleEventObservers = [WXThreadSafeMutableDictionary new];
-        _trackComponent = NO;
-        _performanceCommit = NO;
-        
-        _performance = [[WXPerformance alloc] init];
-        _apmInstance = [[WXApmForInstance alloc] init];
-        
-        [_apmInstance setProperty:KEY_PAGE_PROPERTIES_UIKIT_TYPE withValue:_renderType?: WEEX_RENDER_TYPE_PLATFORM];
-        
-        _defaultDataRender = NO;
-        
-        _useBackupJsThread = NO;
-
-        [self addObservers];
-    }
-    return self;
-}
-
-- (BOOL)isCustomRenderType
-{
-    return ![_renderType isEqualToString:WEEX_RENDER_TYPE_PLATFORM];
-}
-
-- (id<WXBridgeProtocol>)instanceJavaScriptContext
-{
-    _debugJS = [WXDebugTool isDevToolDebug];
-    
-    Class bridgeClass = _debugJS ? NSClassFromString(@"WXDebugger") : [WXJSCoreBridge class];
-    
-    if (_instanceJavaScriptContext && [_instanceJavaScriptContext isKindOfClass:bridgeClass]) {
-        return _instanceJavaScriptContext;
-    }
-    
-    WXAssertBridgeThread();
-    if (_instanceJavaScriptContext) {
-        _instanceJavaScriptContext = nil;
-    }
-    
-    // WXDebugger is a singleton actually and should not call its init twice.
-    _instanceJavaScriptContext = _debugJS ? [NSClassFromString(@"WXDebugger") alloc] : [[WXJSCoreBridge alloc] initWithoutDefaultContext];
-    if (!_debugJS) {
-        id<WXBridgeProtocol> jsBridge = [[WXSDKManager bridgeMgr] valueForKeyPath:@"bridgeCtx.jsBridge"];
-        if (_useBackupJsThread) {
-              jsBridge = [[WXSDKManager bridgeMgr] valueForKeyPath:@"backupBridgeCtx.jsBridge"];
-        }
-        JSContext* globalContex = jsBridge.javaScriptContext;
-        JSContextGroupRef contextGroup = JSContextGetGroup([globalContex JSGlobalContextRef]);
-        JSClassDefinition classDefinition = kJSClassDefinitionEmpty;
-        classDefinition.attributes = kJSClassAttributeNoAutomaticPrototype;
-        JSClassRef globalObjectClass = JSClassCreate(&classDefinition);
-        JSGlobalContextRef sandboxGlobalContextRef = JSGlobalContextCreateInGroup(contextGroup, globalObjectClass);
-        JSClassRelease(globalObjectClass);
-        JSContext * instanceContext = [JSContext contextWithJSGlobalContextRef:sandboxGlobalContextRef];
-        JSGlobalContextRelease(sandboxGlobalContextRef);
-        [WXBridgeContext mountContextEnvironment:instanceContext];
-        [_instanceJavaScriptContext setJSContext:instanceContext];
-    }
-    
-    if ([_instanceJavaScriptContext respondsToSelector:@selector(setWeexInstanceId:)]) {
-        [_instanceJavaScriptContext setWeexInstanceId:_instanceId];
-    }
-    if (!_debugJS) {
-        [[NSNotificationCenter defaultCenter] postNotificationName:WX_INSTANCE_JSCONTEXT_CREATE_NOTIFICATION object:_instanceJavaScriptContext.javaScriptContext];
-    }
-    
-    return _instanceJavaScriptContext;
-}
-
-- (NSString *)description
-{
-    // get _rootView.frame in JS thread may cause deaklock.
-    return [NSString stringWithFormat:@"<%@: %p; id = %@; rootView = %p; url= %@>", NSStringFromClass([self class]), self, _instanceId, (__bridge void*)_rootView, _scriptURL];
-}
-
-#pragma mark Public Mehtods
-
-- (UIView *)rootView
-{
-    return _rootView;
-}
-
-- (void)setFrame:(CGRect)frame
-{
-#ifdef DEBUG
-    WXLogDebug(@"flexLayout -> setFrame :%@,instance :%@",NSStringFromCGRect(frame),self);
-#endif
-    if (!CGRectEqualToRect(frame, _frame)) {
-        _frame = frame;
-        CGFloat screenHeight =  [[UIScreen mainScreen] bounds].size.height;
-        if (screenHeight>0) {
-            CGFloat pageRatio = frame.size.height/screenHeight *100;
-            self.apmInstance.pageRatio = pageRatio>100?100:pageRatio;
-        }
-        WXPerformBlockOnMainThread(^{
-            if (_rootView) {
-                _rootView.frame = frame;
-                WXPerformBlockOnComponentThread(^{
-                    [self.componentManager rootViewFrameDidChange:frame];
-                });
-            }
-        });
-    }
-}
-
-- (void)setViewportWidth:(CGFloat)viewportWidth
-{
-    _viewportWidth = viewportWidth;
-    
-    // notify weex core
-    NSString* pageId = _instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge setViewportWidth:pageId width:viewportWidth];
-    });
-}
-
-- (void)setPageKeepRawCssStyles
-{
-    [self setPageArgument:@"reserveCssStyles" value:@"true"];
-}
-
-- (void)isKeepingRawCssStyles:(void(^)(BOOL))callback {
-    NSString* pageId = _instanceId;
-    WXPerformBlockOnComponentThread(^{
-        if (callback) {
-            callback([WXCoreBridge isKeepingRawCssStyles:pageId]);
-        }
-    });
-}
-
-- (void)setPageArgument:(NSString*)key value:(NSString*)value
-{
-    NSString* pageId = _instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge setPageArgument:pageId key:key value:value];
-    });
-}
-
-- (void)setScriptURL:(NSURL *)scriptURL
-{
-    _scriptURL = scriptURL;
-    [WXCoreBridge setPageArgument:_instanceId key:@"url" value:[_scriptURL absoluteString]];
-}
-
-- (void)setPageRequiredWidth:(CGFloat)width height:(CGFloat)height
-{
-    _screenSize = CGSizeMake(width, height);
-    
-    // notify weex core
-    NSString* pageId = _instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge setPageRequired:pageId width:width height:height];
-    });
-}
-
-- (void)renderWithURL:(NSURL *)url
-{
-    [self renderWithURL:url options:nil data:nil];
-}
-
-- (void)_checkPageName
-{
-    if (nil == self.pageName || [self.pageName isEqualToString:@""]) {
-        self.pageName = [self.scriptURL isFileURL] ? self.scriptURL.path.lastPathComponent: self.scriptURL.absoluteString;
-    }
-    if (nil == self.pageName || [self.pageName isEqualToString:@""]) {
-        self.pageName = NSStringFromClass(self.viewController.class)?:@"unkonwPageCauseUnsetNameAndUrlAndVc";
-    }
-}
-
-- (void)renderWithURL:(NSURL *)url options:(NSDictionary *)options data:(id)data
-{
-    if (!url) {
-        WXLogError(@"Url must be passed if you use renderWithURL");
-        return;
-    }
-    [WXCoreBridge install];
-
-    self.scriptURL = url;
-    [self _checkPageName];
-    [self.apmInstance startRecord:self.instanceId];
-    self.apmInstance.isStartRender = YES;
-    
-    self.needValidate = [[WXHandlerFactory handlerForProtocol:@protocol(WXValidateProtocol)] needValidate:url];
-    WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeMainBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy];
-    [self _renderWithRequest:request options:options data:data];
-
-    NSURL* nsURL = [NSURL URLWithString:options[@"DATA_RENDER_JS"]];
-    [self _downloadAndExecScript:nsURL];
-}
-
-- (void)renderView:(id)source options:(NSDictionary *)options data:(id)data
-{
-    _options = [options isKindOfClass:[NSDictionary class]] ? options : nil;
-    _jsData = data;
-    [WXCoreBridge install];
-
-    self.needValidate = [[WXHandlerFactory handlerForProtocol:@protocol(WXValidateProtocol)] needValidate:self.scriptURL];
-
-    if ([source isKindOfClass:[NSString class]]) {
-        WXLogDebug(@"Render source: %@, data:%@", self, [WXUtility JSONString:data]);
-        [self _renderWithMainBundleString:source];
-    } else if ([source isKindOfClass:[NSData class]]) {
-        [self _renderWithData:source];
-    }
-    NSURL* nsURL = [NSURL URLWithString:options[@"DATA_RENDER_JS"]];
-    [self _downloadAndExecScript:nsURL];
-}
-
-- (void)_downloadAndExecScript:(NSURL *)url {
-    [[WXSDKManager bridgeMgr] DownloadJS:_instanceId url:url completion:^(NSString *script) {
-        if (!script) {
-            return;
-        }
-        if (self.dataRender) {
-            id<WXDataRenderHandler> dataRenderHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXDataRenderHandler)];
-            if (dataRenderHandler) {
-                [[WXSDKManager bridgeMgr] createInstanceForJS:_instanceId template:script options:_options data:_jsData];
-
-                NSString* instanceId = self.instanceId;
-                WXPerformBlockOnComponentThread(^{
-                    [dataRenderHandler DispatchPageLifecycle:instanceId];
-                });
-            }
-            else {
-                if (self.componentManager.isValid) {
-                    WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
-                    NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                    WXPerformBlockOnComponentThread(^{
-                        [self.componentManager renderFailed:error];
-                    });
-                }
-            }
-            return;
-        }
-    }];
-}
-
-- (NSString *) bundleTemplate
-{
-    return self.mainBundleString;
-}
-
-- (void)_renderWithData:(NSData *)contents
-{
-    if (!self.instanceId) {
-        WXLogError(@"Fail to find instance!");
-        return;
-    }
-    
-    if (_isRendered) {
-        [WXExceptionUtils commitCriticalExceptionRT:self.instanceId errCode:[NSString stringWithFormat:@"%d", WX_ERR_RENDER_TWICE] function:@"_renderWithData:" exception:[NSString stringWithFormat:@"instance is rendered twice"] extParams:nil];
-        return;
-    }
-
-    //some case , with out render (url)
-    [self.apmInstance startRecord:self.instanceId];
-    self.apmInstance.isStartRender = YES;
-    if (self.dataRender) {
-        [self.apmInstance setProperty:KEY_PAGE_PROPERTIES_RENDER_TYPE withValue:@"eagle"];
-    }
-
-    self.performance.renderTimeOrigin = CACurrentMediaTime()*1000;
-    [WXCoreBridge setPageArgument:_instanceId key:@"renderTimeOrigin" value:[NSString stringWithFormat:@"%lld", (long long)([[NSDate date] timeIntervalSince1970] * 1000)]];
-    self.performance.renderUnixTimeOrigin = [WXUtility getUnixFixTimeMillis];
-    [self.apmInstance onStage:KEY_PAGE_STAGES_RENDER_ORGIGIN];
-
-    if (![WXUtility isBlankString:self.pageName]) {
-        WXLog(@"Start rendering page:%@", self.pageName);
-    } else {
-        WXLogWarning(@"WXSDKInstance's pageName should be specified.");
-        id<WXJSExceptionProtocol> jsExceptionHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXJSExceptionProtocol)];
-        if ([jsExceptionHandler respondsToSelector:@selector(onRuntimeCheckException:)]) {
-            WXRuntimeCheckException * runtimeCheckException = [WXRuntimeCheckException new];
-            runtimeCheckException.exception = @"We highly recommend you to set pageName.\n Using WXSDKInstance * instance = [WXSDKInstance new]; instance.pageName = @\"your page name\" to fix it";
-            [jsExceptionHandler onRuntimeCheckException:runtimeCheckException];
-        }
-    }
-
-    id<WXPageEventNotifyEventProtocol> pageEvent = [WXSDKEngine handlerForProtocol:@protocol(WXPageEventNotifyEventProtocol)];
-    if ([pageEvent respondsToSelector:@selector(pageStart:)]) {
-        [pageEvent pageStart:self.instanceId];
-    }
-
-    WX_MONITOR_INSTANCE_PERF_START(WXPTFirstScreenRender, self);
-    WX_MONITOR_INSTANCE_PERF_START(WXPTAllRender, self);
-
-    NSMutableDictionary *dictionary = [_options mutableCopy];
-    if ([WXLog logLevel] >= WXLogLevelLog) {
-        dictionary[@"debug"] = @(YES);
-    }
-
-    WXPerformBlockOnMainThread(^{
-        if (self.isCustomRenderType) {
-            self->_rootView = [WXCustomPageBridge createPageRootView:self.instanceId pageType:self.renderType frame:self.frame];
-        }
-        else {
-            self->_rootView = [[WXRootView alloc] initWithFrame:self.frame];
-            ((WXRootView*)(self->_rootView)).instance = self;
-        }
-        
-        if (self.onCreate) {
-            self.onCreate(self->_rootView);
-        }
-    });
-    // ensure default modules/components/handlers are ready before create instance
-    [WXSDKEngine registerDefaults];
-    [[NSNotificationCenter defaultCenter] postNotificationName:WX_SDKINSTANCE_WILL_RENDER object:self];
-
-    if ([self _handleConfigCenter]) {
-        int wxErrorCode = 9999;
-        NSError * error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:wxErrorCode userInfo:nil];
-        if (self.onFailed) {
-            self.onFailed(error);
-        }
-        [self.apmInstance setProperty:KEY_PROPERTIES_ERROR_CODE withValue:[@(wxErrorCode) stringValue]];
-        return;
-    }
-
-    [[WXSDKManager bridgeMgr] createInstance:self.instanceId contents:contents options:dictionary data:_jsData];
-
-    // WX_MONITOR_PERF_SET(WXPTBundleSize, [data length], self);
-    _isRendered = YES;
-}
-
-- (void)_renderWithMainBundleString:(NSString *)mainBundleString
-{
-    if (!self.instanceId) {
-        WXLogError(@"Fail to find instance!");
-        return;
-    }
-    
-    if (_isRendered) {
-        [WXExceptionUtils commitCriticalExceptionRT:self.instanceId errCode:[NSString stringWithFormat:@"%d", WX_ERR_RENDER_TWICE] function:@"_renderWithMainBundleString:" exception:[NSString stringWithFormat:@"instance is rendered twice"] extParams:nil];
-        return;
-    }
-
-    //some case , with out render (url)
-    [self _checkPageName];
-    [self.apmInstance startRecord:self.instanceId];
-    self.apmInstance.isStartRender = YES;
-    if (self.dataRender) {
-        [self.apmInstance setProperty:KEY_PAGE_PROPERTIES_RENDER_TYPE withValue:@"eagle"];
-    }
-    
-    self.performance.renderTimeOrigin = CACurrentMediaTime()*1000;
-    [WXCoreBridge setPageArgument:_instanceId key:@"renderTimeOrigin" value:[NSString stringWithFormat:@"%lld", (long long)([[NSDate date] timeIntervalSince1970] * 1000)]];
-    self.performance.renderUnixTimeOrigin = [WXUtility getUnixFixTimeMillis];
-    [self.apmInstance onStage:KEY_PAGE_STAGES_RENDER_ORGIGIN];
-    
-    if (![WXUtility isBlankString:self.pageName]) {
-        WXLog(@"Start rendering page:%@", self.pageName);
-    } else {
-        WXLogWarning(@"WXSDKInstance's pageName should be specified.");
-        id<WXJSExceptionProtocol> jsExceptionHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXJSExceptionProtocol)];
-        if ([jsExceptionHandler respondsToSelector:@selector(onRuntimeCheckException:)]) {
-            WXRuntimeCheckException * runtimeCheckException = [WXRuntimeCheckException new];
-            runtimeCheckException.exception = @"We highly recommend you to set pageName.\n Using WXSDKInstance * instance = [WXSDKInstance new]; instance.pageName = @\"your page name\" to fix it";
-            [jsExceptionHandler onRuntimeCheckException:runtimeCheckException];
-        }
-    }
-    if (!self.userInfo) {
-        self.userInfo = [NSMutableDictionary new];
-    }
-    if (!self.userInfo[@"jsMainBundleStringContentLength"]) {
-        self.userInfo[@"jsMainBundleStringContentLength"] = @([mainBundleString length]);
-    }
-    if (!self.userInfo[@"jsMainBundleStringContentLength"]) {
-        self.userInfo[@"jsMainBundleStringContentMd5"] = [WXUtility md5:mainBundleString];
-    }
-    
-    id<WXPageEventNotifyEventProtocol> pageEvent = [WXSDKEngine handlerForProtocol:@protocol(WXPageEventNotifyEventProtocol)];
-    if ([pageEvent respondsToSelector:@selector(pageStart:)]) {
-        [pageEvent pageStart:self.instanceId];
-    }
-
-    WX_MONITOR_INSTANCE_PERF_START(WXPTFirstScreenRender, self);
-    WX_MONITOR_INSTANCE_PERF_START(WXPTAllRender, self);
-    
-    NSMutableDictionary *dictionary = [_options mutableCopy];
-    if ([WXLog logLevel] >= WXLogLevelLog) {
-        dictionary[@"debug"] = @(YES);
-    }
-    
-    if ([WXDebugTool getReplacedBundleJS]) {
-        mainBundleString = [WXDebugTool getReplacedBundleJS];
-    }
-    
-    WXPerformBlockOnMainThread(^{
-        if (self.isCustomRenderType) {
-            self->_rootView = [WXCustomPageBridge createPageRootView:self.instanceId pageType:self.renderType frame:self.frame];
-        }
-        else {
-            self->_rootView = [[WXRootView alloc] initWithFrame:self.frame];
-            ((WXRootView*)(self->_rootView)).instance = self;
-        }
-        
-        if (self.onCreate) {
-            self.onCreate(self->_rootView);
-        }
-    });
-    // ensure default modules/components/handlers are ready before create instance
-    [WXSDKEngine registerDefaults];
-    [[NSNotificationCenter defaultCenter] postNotificationName:WX_SDKINSTANCE_WILL_RENDER object:self];
-    
-    _mainBundleString = mainBundleString;
-    if ([self _handleConfigCenter]) {
-        int wxErrorCode = 9999;
-        NSError * error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:wxErrorCode userInfo:nil];
-        if (self.onFailed) {
-            self.onFailed(error);
-        }
-        [self.apmInstance setProperty:KEY_PROPERTIES_ERROR_CODE withValue:[@(wxErrorCode) stringValue]];
-        return;
-    }
-    
-    [[WXSDKManager bridgeMgr] createInstance:self.instanceId template:mainBundleString options:dictionary data:_jsData];
-    
-    WX_MONITOR_PERF_SET(WXPTBundleSize, [mainBundleString lengthOfBytesUsingEncoding:NSUTF8StringEncoding], self);
-    
-    _isRendered = YES;
-}
-
-- (BOOL)_handleConfigCenter
-{
-    id configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {		
-        BOOL enableRTLLayoutDirection = [[configCenter configForKey:@"iOS_weex_ext_config.enableRTLLayoutDirection" defaultValue:@(YES) isDefault:NULL] boolValue];
-        [WXUtility setEnableRTLLayoutDirection:enableRTLLayoutDirection];
-    }
-    return NO;
-}
-
-- (void)renderWithMainBundleString:(NSNotification*)notification
-{
-    [self _renderWithMainBundleString:_mainBundleString];
-}
-
-- (void)_renderWithRequest:(WXResourceRequest *)request options:(NSDictionary *)options data:(id)data;
-{
-    NSURL *url = request.URL;
-    self.scriptURL = url;
-    _jsData = data;
-    if (![options isKindOfClass:[NSDictionary class]]) {
-        options = @{};
-    }
-    NSMutableDictionary *newOptions = [options mutableCopy] ?: [NSMutableDictionary new];
-    
-    if (!newOptions[bundleUrlOptionKey]) {
-        newOptions[bundleUrlOptionKey] = url.absoluteString;
-    }
-
-    if ( [url.absoluteString containsString:@"__data_render=true"]) {
-        newOptions[@"DATA_RENDER"] = @(YES);
-    }
-
-    if ([url.absoluteString hasSuffix:WEEX_LITE_URL_SUFFIX] || [url.absoluteString containsString:@"__eagle=true"]) {
-        newOptions[@"WLASM_RENDER"] = @(YES);
-    }
-
-    // compatible with some wrong type, remove this hopefully in the future.
-    if ([newOptions[bundleUrlOptionKey] isKindOfClass:[NSURL class]]) {
-        WXLogWarning(@"Error type in options with key:bundleUrl, should be of type NSString, not NSURL!");
-        newOptions[bundleUrlOptionKey] = ((NSURL*)newOptions[bundleUrlOptionKey]).absoluteString;
-    }
-    _options = [newOptions copy];
-    request.userAgent = [WXUtility userAgent];
-    
-    WX_MONITOR_INSTANCE_PERF_START(WXPTJSDownload, self);
-    __weak typeof(self) weakSelf = self;
-    _mainBundleLoader = [[WXResourceLoader alloc] initWithRequest:request];;
-     [self.apmInstance onStage:KEY_PAGE_STAGES_DOWN_BUNDLE_START];
-    _mainBundleLoader.onFinished = ^(WXResourceResponse *response, NSData *data) {
-        __strong typeof(weakSelf) strongSelf = weakSelf;
-        if (strongSelf == nil) {
-            return;
-        }
-
-        NSMutableDictionary* optionsCopy = [strongSelf->_options mutableCopy];
-        optionsCopy[bundleResponseUrlOptionKey] = [response.URL absoluteString];
-        strongSelf->_options = [optionsCopy copy];
-        
-        NSError *error = nil;
-        if ([response isKindOfClass:[NSHTTPURLResponse class]] && ((NSHTTPURLResponse *)response).statusCode != 200) {
-            error = [NSError errorWithDomain:WX_ERROR_DOMAIN
-                                        code:((NSHTTPURLResponse *)response).statusCode
-                                    userInfo:@{@"message":@"status code error."}];
-            if (strongSelf.onFailed) {
-                strongSelf.onFailed(error);
-            }
-        }
-        
-        if (strongSelf.onJSDownloadedFinish) {
-            strongSelf.onJSDownloadedFinish(response, request, data, error);
-        }
-        
-        if (error) {
-            [WXExceptionUtils commitCriticalExceptionRT:strongSelf.instanceId
-                                                errCode:[NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_JS_DOWNLOAD]
-                                               function:@"_renderWithRequest:options:data:"
-                                              exception:[NSString stringWithFormat:@"download bundle error :%@",[error localizedDescription]]
-                                              extParams:nil];
-        
-            strongSelf.apmInstance.isDownLoadFailed = YES;
-            [strongSelf.apmInstance setProperty:KEY_PROPERTIES_ERROR_CODE withValue:[@(WX_KEY_EXCEPTION_JS_DOWNLOAD) stringValue]];
-            return;
-        }
-
-        if (!data) {
-            NSString *errorMessage = [NSString stringWithFormat:@"Request to %@ With no data return", request.URL];
-            WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, WX_ERR_JSBUNDLE_DOWNLOAD, errorMessage, strongSelf.pageName);
-            [WXExceptionUtils commitCriticalExceptionRT:strongSelf.instanceId
-                                                errCode:[NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_JS_DOWNLOAD]
-                                               function:@"_renderWithRequest:options:data:"
-                                              exception:errorMessage
-                                              extParams:nil];
-            
-            if (strongSelf.onFailed) {
-                strongSelf.onFailed(error);
-            }
-            strongSelf.apmInstance.isDownLoadFailed = YES;
-            [strongSelf.apmInstance setProperty:KEY_PROPERTIES_ERROR_CODE withValue:[@(WX_KEY_EXCEPTION_JS_DOWNLOAD) stringValue]];
-            return;
-        }
-        
-        if (([newOptions[@"DATA_RENDER"] boolValue] && [newOptions[@"RENDER_WITH_BINARY"] boolValue]) || [newOptions[@"WLASM_RENDER"] boolValue]) {
-            [strongSelf.apmInstance onStage:KEY_PAGE_STAGES_DOWN_BUNDLE_END];
-            [strongSelf _renderWithData:data];
-            return;
-        }
-
-        NSString *jsBundleString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-        if (!jsBundleString) {
-            WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, WX_ERR_JSBUNDLE_STRING_CONVERT, @"data converting to string failed.", strongSelf.pageName)
-            [strongSelf.apmInstance setProperty:KEY_PROPERTIES_ERROR_CODE withValue:[@(WX_ERR_JSBUNDLE_STRING_CONVERT) stringValue]];
-            return;
-        }
-        if (!strongSelf.userInfo) {
-            strongSelf.userInfo = [NSMutableDictionary new];
-        }
-        
-        NSUInteger bundleSize = [jsBundleString length];
-        [strongSelf.apmInstance updateDiffStats:KEY_PAGE_STATS_BUNDLE_SIZE withDiffValue:bundleSize];
-        
-        strongSelf.userInfo[@"jsMainBundleStringContentLength"] = @(bundleSize);
-        strongSelf.userInfo[@"jsMainBundleStringContentMd5"] = [WXUtility md5:jsBundleString];
-
-        WX_MONITOR_SUCCESS_ON_PAGE(WXMTJSDownload, strongSelf.pageName);
-        WX_MONITOR_INSTANCE_PERF_END(WXPTJSDownload, strongSelf);
-        
-        if (strongSelf.onRenderTerminateWhenJSDownloadedFinish) {
-            if (strongSelf.onRenderTerminateWhenJSDownloadedFinish(response, request, data, error)) {
-                return;
-            }
-        }
-        
-        [strongSelf.apmInstance onStage:KEY_PAGE_STAGES_DOWN_BUNDLE_END];
-        [strongSelf.apmInstance updateExtInfoFromResponseHeader:response.allHeaderFields];
-        [strongSelf _renderWithMainBundleString:jsBundleString];
-        [WXMonitor performanceFinishWithState:DebugAfterRequest instance:strongSelf];
-    };
-    
-    _mainBundleLoader.onFailed = ^(NSError *loadError) {
-        NSString *errorMessage = [NSString stringWithFormat:@"Request to %@ occurs an error:%@, info:%@", request.URL, loadError.localizedDescription, loadError.userInfo];
-        long wxErrorCode = [loadError.domain isEqualToString:NSURLErrorDomain] && loadError.code == NSURLErrorNotConnectedToInternet ? WX_ERR_NOT_CONNECTED_TO_INTERNET : WX_ERR_JSBUNDLE_DOWNLOAD;
-
-        WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, wxErrorCode, errorMessage, weakSelf.pageName);
-        
-    
-        NSMutableDictionary *allUserInfo = [[NSMutableDictionary alloc] initWithDictionary:error.userInfo];
-        [allUserInfo addEntriesFromDictionary:loadError.userInfo];
-        NSError *errorWithReportMsg = [NSError errorWithDomain:error.domain
-                                             code:error.code
-                                         userInfo:allUserInfo];
-      
-        if (weakSelf.onFailed) {
-            weakSelf.onFailed(errorWithReportMsg);
-        }
-        [weakSelf.apmInstance setProperty:KEY_PROPERTIES_ERROR_CODE withValue:[@(wxErrorCode) stringValue]];
-    };
-    
-    [_mainBundleLoader start];
-}
-
-- (void)reload:(BOOL)forcedReload
-{
-    // TODO: [self unload]
-    if (!_scriptURL) {
-        WXLogError(@"No script URL found while reloading!");
-        return;
-    }
-    
-    NSURLRequestCachePolicy cachePolicy = forcedReload ? NSURLRequestReloadIgnoringCacheData : NSURLRequestUseProtocolCachePolicy;
-    WXResourceRequest *request = [WXResourceRequest requestWithURL:_scriptURL resourceType:WXResourceTypeMainBundle referrer:_scriptURL.absoluteString cachePolicy:cachePolicy];
-    [self _renderWithRequest:request options:_options data:_jsData];
-}
-
-- (void)reloadLayout
-{
-    NSString* pageId = _instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge reloadPageLayout:pageId];
-    });
-}
-
-- (void)refreshInstance:(id)data
-{
-    WXLogDebug(@"refresh instance: %@, data:%@", self, [WXUtility JSONString:data]);
-    
-    if (!self.instanceId) {
-        WXLogError(@"Fail to find instance!");
-        return;
-    }
-    
-    [[WXSDKManager bridgeMgr] refreshInstance:self.instanceId data:data];
-}
-
-- (void)destroyInstance
-{
-    [self.apmInstance endRecord];
-    NSString *url = @"";
-    if ([WXPrerenderManager isTaskExist:[self.scriptURL absoluteString]]) {
-        url = [self.scriptURL absoluteString];
-    }
-    if (!self.instanceId) {
-        WXLogError(@"Fail to find instance!");
-        return;
-    }
-    
-    id<WXPageEventNotifyEventProtocol> pageEvent = [WXSDKEngine handlerForProtocol:@protocol(WXPageEventNotifyEventProtocol)];
-    if ([pageEvent respondsToSelector:@selector(pageDestroy:)]) {
-        [pageEvent pageDestroy:self.instanceId];
-    }
-    [[NSNotificationCenter defaultCenter] postNotificationName:WX_INSTANCE_WILL_DESTROY_NOTIFICATION object:nil userInfo:@{@"instanceId":self.instanceId}];
-
-    [WXPrerenderManager removePrerenderTaskforUrl:[self.scriptURL absoluteString]];
-    [WXPrerenderManager destroyTask:self.instanceId];
-    [[WXSDKManager bridgeMgr] destroyInstance:self.instanceId];
-    
-    WXComponentManager* componentManager = self.componentManager;
-    NSString* instanceId = self.instanceId;
-    
-    /* Custom render target, currently we manage the pages by ourselves not by WeexCore.
-     We remove the WeexCore page immediately so that any later render commands will be ignored. */
-    if ([WXCustomPageBridge isCustomPage:instanceId]) {
-        [[WXCustomPageBridge sharedInstance] invalidatePage:instanceId];
-    }
-    
-    WXPerformBlockOnComponentThread(^{
-        // Destroy components and views in main thread. Unbind with underneath RenderObjects.
-        [componentManager unload];
-        
-        // Destroy weexcore c++ page and objects.
-        [WXCoreBridge closePage:instanceId];
-        
-        // Destroy heron render target page
-        if ([WXCustomPageBridge isCustomPage:instanceId]) {
-            [[WXCustomPageBridge sharedInstance] removePage:instanceId];
-        }
-        
-        // Reading config from orange for Release instance in Main Thread or not, for Bug #15172691 +{
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [WXSDKManager removeInstanceforID:instanceId];
-        });
-        //+}
-    });
-    
-    if (url.length > 0) {
-        [WXPrerenderManager addGlobalTask:url callback:nil];
-    }
-}
-
-- (void)forceGarbageCollection
-{
-    [[WXSDKManager bridgeMgr] forceGarbageCollection];
-}
-
-- (void)updateState:(WXState)state
-{
-    if (!self.instanceId) {
-        WXLogError(@"Fail to find instance!");
-        return;
-    }
-    
-    if (!_performanceCommit && state == WeexInstanceDisappear) {
-        [self updatePerDicBeforExit];
-        WX_MONITOR_INSTANCE_PERF_COMMIT(self);
-        _performanceCommit = YES;
-    }
-    
-    NSMutableDictionary *data = [NSMutableDictionary dictionary];
-    [data setObject:[NSString stringWithFormat:@"%ld",(long)state] forKey:@"state"];
-    //[[WXSDKManager bridgeMgr] updateState:self.instanceId data:data];
-    
-    // First post internal notification
-    [[NSNotificationCenter defaultCenter] postNotificationName:WX_INSTANCE_NOTIFICATION_UPDATE_STATE_INTERNAL object:self userInfo:data];
-    [[NSNotificationCenter defaultCenter] postNotificationName:WX_INSTANCE_NOTIFICATION_UPDATE_STATE object:self userInfo:data];
-}
-
-- (id)moduleForClass:(Class)moduleClass
-{
-    if (!moduleClass)
-        return nil;
-    
-    id<WXModuleProtocol> moduleInstance = self.moduleInstances[NSStringFromClass(moduleClass)];
-    if (!moduleInstance) {
-        moduleInstance = [[moduleClass alloc] init];
-        if ([moduleInstance respondsToSelector:@selector(setWeexInstance:)])
-            [moduleInstance setWeexInstance:self];
-        self.moduleInstances[NSStringFromClass(moduleClass)] = moduleInstance;
-    }
-    
-    return moduleInstance;
-}
-
-- (WXComponent *)componentForRef:(NSString *)ref
-{
-    WXAssertComponentThread();
-    
-    return [_componentManager componentForRef:ref];
-}
-
-- (NSUInteger)numberOfComponents
-{
-    WXAssertComponentThread();
-    
-    return [_componentManager numberOfComponents];
-}
-
-- (void)enumerateComponentsUsingBlock:(void (^)(WXComponent *, BOOL *stop))block
-{
-    WXAssertComponentThread();
-    
-    [_componentManager enumerateComponentsUsingBlock:block];
-}
-
-- (void)fireGlobalEvent:(NSString *)eventName params:(NSDictionary *)params
-{
-    if (!params){
-        params = [NSDictionary dictionary];
-    }
-    NSDictionary * userInfo = @{
-            @"weexInstance":self.instanceId,
-            @"param":params
-    };
-    [[NSNotificationCenter defaultCenter] postNotificationName:eventName object:self userInfo:userInfo];
-}
-
-- (void)fireModuleEvent:(Class)module eventName:(NSString *)eventName params:(NSDictionary*)params
-{
-    NSDictionary * userInfo = @{
-                                @"moduleId":NSStringFromClass(module)?:@"",
-                                @"param":params?:@{},
-                                @"eventName":eventName
-                                };
-    
-    [[NSNotificationCenter defaultCenter] postNotificationName:WX_MODULE_EVENT_FIRE_NOTIFICATION object:self userInfo:userInfo];
-}
-
-- (CGFloat)pixelScaleFactor
-{
-    CGFloat usingScreenWidth = _screenSize.width > 0 ? _screenSize.width : [WXCoreBridge getDeviceSize].width;
-    CGFloat usingViewPort = _viewportWidth > 0 ? _viewportWidth : WXDefaultScreenWidth;
-    return usingScreenWidth / usingViewPort;
-}
-    
-- (BOOL)wlasmRender {
-    if ([_options[@"WLASM_RENDER"] boolValue]) {
-        return YES;
-    }
-    return NO;
-}
-
-- (BOOL)dataRender
-{
-    if ([_options[@"DATA_RENDER"] boolValue] || [_options[@"WLASM_RENDER"] boolValue]) {
-        return YES;
-    }
-    return _defaultDataRender;
-}
-
-- (NSURL *)completeURL:(NSString *)url
-{
-    if (!_scriptURL) {
-        return [NSURL URLWithString:url];
-    }
-    if ([url hasPrefix:@"//"] && [_scriptURL isFileURL]) {
-        return [NSURL URLWithString:url];
-    }
-    if (!url) {
-        return nil;
-    }
-    NSURL *result = [NSURL URLWithString:url relativeToURL:_scriptURL];
-    if (result) {
-        return result;
-    }
-    // if result is nil, try url-encode the 'url' string.
-    return [NSURL URLWithString:[url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]] relativeToURL:_scriptURL];
-}
-
-- (BOOL)checkModuleEventRegistered:(NSString*)event moduleClassName:(NSString*)moduleClassName
-{
-    NSDictionary * observer = [_moduleEventObservers objectForKey:moduleClassName];
-    return observer && observer[event]? YES:NO;
-}
-
-#pragma mark Private Methods
-
-- (void)_addModuleEventObserversWithModuleMethod:(WXModuleMethod *)method
-{
-    if ([method.arguments count] < 2) {
-        WXLogError(@"please check your method parameter!!");
-        return;
-    }
-    if(![method.arguments[0] isKindOfClass:[NSString class]]) {
-        // arguments[0] will be event name, so it must be a string type value here.
-        return;
-    }
-    NSMutableArray * methodArguments = [method.arguments mutableCopy];
-    if ([methodArguments count] == 2) {
-        [methodArguments addObject:@{@"once": @false}];
-    }
-    if (![methodArguments[2] isKindOfClass:[NSDictionary class]]) {
-        //arguments[2] is the option value, so it must be a dictionary.
-        return;
-    }
-    Class moduleClass =  [WXModuleFactory classWithModuleName:method.moduleName];
-    NSMutableDictionary * option = [methodArguments[2] mutableCopy];
-    [option setObject:method.moduleName forKey:@"moduleName"];
-    // the value for moduleName in option is for the need of callback
-    [self addModuleEventObservers:methodArguments[0] callback:methodArguments[1] option:option moduleClassName:NSStringFromClass(moduleClass)];
-}
-
-- (void)addModuleEventObservers:(NSString*)event callback:(NSString*)callbackId option:(NSDictionary *)option moduleClassName:(NSString*)moduleClassName
-{
-    BOOL once = [[option objectForKey:@"once"] boolValue];
-    NSString * moduleName = [option objectForKey:@"moduleName"];
-    NSMutableDictionary * observer = nil;
-    NSDictionary * callbackInfo = @{@"callbackId":callbackId,@"once":@(once),@"moduleName":moduleName};
-    if(![self checkModuleEventRegistered:event moduleClassName:moduleClassName]) {
-        //had not registered yet
-        observer = [NSMutableDictionary new];
-        [observer setObject:[@{event:[@[callbackInfo] mutableCopy]} mutableCopy] forKey:moduleClassName];
-        if (_moduleEventObservers[moduleClassName]) { //support multi event
-            [_moduleEventObservers[moduleClassName] addEntriesFromDictionary:observer[moduleClassName]];
-        }else {
-            [_moduleEventObservers addEntriesFromDictionary:observer];
-        }
-    } else {
-        observer = _moduleEventObservers[moduleClassName];
-        [[observer objectForKey:event] addObject:callbackInfo];
-    }
-}
-
-- (void)_removeModuleEventObserverWithModuleMethod:(WXModuleMethod *)method
-{
-    if (![method.arguments count] && [method.arguments[0] isKindOfClass:[NSString class]]) {
-        return;
-    }
-    Class moduleClass =  [WXModuleFactory classWithModuleName:method.moduleName];
-    [self removeModuleEventObserver:method.arguments[0] moduleClassName:NSStringFromClass(moduleClass)];
-}
-
-- (void)removeModuleEventObserver:(NSString*)event moduleClassName:(NSString*)moduleClassName
-{
-    if (![self checkModuleEventRegistered:event moduleClassName:moduleClassName]) {
-        return;
-    }
-    [_moduleEventObservers[moduleClassName] removeObjectForKey:event];
-}
-
-- (void)moduleEventNotification:(NSNotification *)notification
-{
-    NSMutableDictionary *moduleEventObserversCpy = (NSMutableDictionary *)CFBridgingRelease(CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFDictionaryRef)_moduleEventObservers, kCFPropertyListMutableContainers));// deep
-    NSDictionary * userInfo = notification.userInfo;
-    NSMutableArray * listeners = [moduleEventObserversCpy[userInfo[@"moduleId"]] objectForKey:userInfo[@"eventName"]];
-    if (![listeners isKindOfClass:[NSArray class]]) {
-        return;
-        // something wrong
-    }
-    for (int i = 0;i < [listeners count]; i ++) {
-        NSDictionary * callbackInfo = listeners[i];
-        NSString *callbackId = callbackInfo[@"callbackId"];
-        BOOL once = [callbackInfo[@"once"] boolValue];
-        NSDictionary * retData = @{@"type":userInfo[@"eventName"],
-                                   @"module":callbackInfo[@"moduleName"],
-                                   @"data":userInfo[@"param"]};
-        [[WXSDKManager bridgeMgr] callBack:self.instanceId funcId:callbackId params:retData keepAlive:!once];
-        // if callback function is not once, then it is keepalive
-        if (once) {
-            NSMutableArray * moduleEventListener = [_moduleEventObservers[userInfo[@"moduleId"]] objectForKey:userInfo[@"eventName"]];
-            [moduleEventListener removeObject:callbackInfo];
-            if ([moduleEventListener count] == 0) {
-                [self removeModuleEventObserver:userInfo[@"eventName"] moduleClassName:userInfo[@"moduleId"]];
-            }
-            // if callback function is once. clear it after fire it.
-        }
-    }
-}
-
-- (void)addObservers
-{
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moduleEventNotification:) name:WX_MODULE_EVENT_FIRE_NOTIFICATION object:nil];
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:nil];
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
-    [self addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:NULL];
-}
-
-- (void)removeObservers
-{
-    @try {
-        [self removeObserver:self forKeyPath:@"state" context:NULL];
-        [[NSNotificationCenter defaultCenter] removeObserver:self];
-    }
-    @catch (NSException *exception) {
-    }
-}
-
-- (void)applicationWillResignActive:(NSNotification*)notification
-{
-    [self fireGlobalEvent:WX_APPLICATION_WILL_RESIGN_ACTIVE params:nil];
-}
-
-- (void)applicationDidBecomeActive:(NSNotification*)notification
-{
-    [self fireGlobalEvent:WX_APPLICATION_DID_BECOME_ACTIVE params:nil];
-}
-
-- (WXComponentManager *)componentManager
-{
-    if (!_componentManager) {
-        _componentManager = [[WXComponentManager alloc] initWithWeexInstance:self];
-    }
-    
-    return _componentManager;
-}
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
-{
-    if ([keyPath isEqualToString:@"state"]) {
-        WXState state = [change[@"new"] longValue];
-        [self updateState:state];
-        
-        if (state == WeexInstanceDestroy) {
-            [self destroyInstance];
-        }
-    }
-}
-
-- (void)willAppear
-{
-    if (self.isCustomRenderType) {
-        if (!self.appearState) {
-            // do create window,
-            [[NSNotificationCenter defaultCenter] postNotificationName:WX_INSTANCE_NOTIFICATION_CHANGE_VISIBILITY_INTERNAL object:self userInfo:@{@"visible": @(YES)}];
-            self.appearState = YES;
-        }
-    }
-}
-
-- (void)didDisappear
-{
-    if (self.isCustomRenderType) {
-        if (self.appearState) {
-            // do destroy window
-            [[NSNotificationCenter defaultCenter] postNotificationName:WX_INSTANCE_NOTIFICATION_CHANGE_VISIBILITY_INTERNAL object:self userInfo:@{@"visible": @(NO)}];
-            self.appearState = NO;
-        }
-    }
-}
-
-@end
-
-@implementation WXSDKInstance (Deprecated)
-
-# pragma mark - Deprecated
-
-- (void)reloadData:(id)data
-{
-    [self refreshInstance:data];
-}
-
-- (void)finishPerformance
-{
-    //deprecated
-}
-
-- (void)creatFinish
-{
-    
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.h
deleted file mode 100644
index c9fca16..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-//Deprecated, use @WXApmForInstance
-
-#import "WXSDKInstance.h"
-#import "WXImageComponent.h"
-
-@interface WXPerformance : NSObject
-
-
-@property (nonatomic, assign) double renderUnixTimeOrigin;
-@property (nonatomic, assign) double renderTimeOrigin;
-@property (nonatomic, assign) double jsCreateFinishTime;
-
-//firsrScreen call jsMethod totalTime
-@property (nonatomic, assign) double fsCallJsTime;
-//firsrScreen call jsMethod totalNum
-@property (nonatomic, assign) double fsCallJsNum;
-//firsrScreen call nativeMethod totalTime
-@property (nonatomic, assign) double fsCallNativeTime;
-//firsrScreen call nativeMethod totalNum
-@property (nonatomic, assign) double fsCallNativeNum;
-//firsrScreen call event totalNum
-@property (nonatomic, assign) double fsCallEventNum;
-//firsrScreen request netWrork totalNum
-@property (nonatomic, assign) double fsReqNetNum;
-//
-@property (nonatomic, assign) double cellExceedNum;
-//max dom deep
-@property (nonatomic, assign) double maxVdomDeep;
-//unMatch img in imgView num
-@property (nonatomic, assign) double imgWrongSizeNum;
-//call setTimeOut Num
-@property (nonatomic, assign) double timerNum;
-//time of user could interace : firsrScreen view or async load veiew(net lazyload) are show)
-@property (nonatomic, assign) double interactionTime;
-
-//in interactionTime ,add component count
-@property (nonatomic,assign) double interactionAddCount;
-@property (nonatomic,assign) double interactionLimitAddOpCount;
-
-//all componentCreate count in instance life
-@property (nonatomic,assign) double componentCount;
-//all componentCreate time in instance life
-@property (nonatomic,assign) double componentCreateTime;
-
-@property (nonatomic,assign) double newFsRenderTime;
-@property (nonatomic,assign) long lastRealInteractionTime;
-//for performance record
-
-- (void)onViewLoad:(WXComponent *)targetComponent;
-- (void)recordComponentCreatePerformance:(double) diffTime forComponent:(WXComponent *)targetComponent;
-- (void)onInstanceRenderSuccess:(WXSDKInstance*) instance;
-
-@end
-
-
-@interface WXSDKInstance ()
-
-@property (nonatomic, assign) BOOL isJSCreateFinish;
-//Deprecated, use @WXApmForInstance
-@property (nonatomic,strong) WXPerformance* performance;
-
-@end
-
-@interface WXSDKInstance (Performance)
-
-- (void) updatePerDicAfterCreateFinish;
-- (void) updatePerDicBeforExit;
-@end
-
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.m
deleted file mode 100644
index a5ebcf2..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_performance.m
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSDKInstance_performance.h"
-#import "WXMonitor.h"
-#import "WXRootView.h"
-#import "WXLog.h"
-#import "WXComponent_performance.h"
-#import "WXTextComponent.h"
-#import "WXCellComponent.h"
-#import "WXImageComponent.h"
-#import "WXUtility.h"
-#import "WXAnalyzerCenter+Transfer.h"
-
-@interface WXPerformance()
-@property (nonatomic, assign) bool hasRecordFsRenderTimeByPosition;
-@property (nonatomic, assign) double interactionAddCountRecord;
-@end
-
-@implementation WXPerformance
-
-- (void) recordComponentCreatePerformance:(double) diffTime forComponent:(WXComponent *)targetComponent
-{
-    self.componentCount++;
-    self.componentCreateTime+=diffTime;
-}
-
-/** on UI thread **/
-- (void)onViewLoad:(WXComponent *)targetComponent
-{
-    if (targetComponent.hasAdd || targetComponent.ignoreInteraction) {
-        return;
-    }
-    targetComponent.hasAdd = true;
-    double modifyTime =  CACurrentMediaTime()*1000;
-    
-    __weak WXComponent* weakComponent = targetComponent;
-    __weak WXPerformance* weakSelf = self;
-    
-    dispatch_async(dispatch_get_main_queue(), ^{
-        __strong WXComponent* strongComponent = weakComponent;
-        __strong WXPerformance* strongSelf = weakSelf;
-        
-        if (nil == strongComponent || nil == strongSelf) {
-            return;
-        }
-        
-        if(![strongSelf _verifyComponent:strongComponent]){
-            return;
-        }
-        strongSelf.interactionAddCountRecord++;
-        [strongSelf _handleRenderTime:strongComponent withModifyTime:modifyTime];
-    });
-}
-
-- (void) _handleRenderTime:(WXComponent*)targetComponent withModifyTime:(double)modifyTime
-{
-    if (nil == targetComponent) {
-        return;
-    }
-    double diff = modifyTime - self.renderTimeOrigin;
-    if (diff > 8000) {
-        return;
-    }
-    if ([targetComponent.type isEqualToString:@"_root"]) {
-        return;
-    }
-    
-    if (diff < self.interactionTime) {
-        //useless calulcate ,for imporove performance
-        return;
-    }
-    
-    CGRect absoluteFrame = [targetComponent.view.superview convertRect:targetComponent.view.frame toView:targetComponent.weexInstance.rootView];
-    CGRect rootFrame = targetComponent.weexInstance.rootView.frame;
-    
-    if (!self.hasRecordFsRenderTimeByPosition && absoluteFrame.origin.y+absoluteFrame.size.height > rootFrame.size.height +1 && ![self _isViewGroup:targetComponent] ) {
-        self.newFsRenderTime = diff;
-        self.hasRecordFsRenderTimeByPosition = true;
-        [targetComponent.weexInstance.apmInstance onStage:KEY_PAGE_STAGES_NEW_FSRENDER];
-    }
-    
-    UIView *root = targetComponent.weexInstance.rootView;
-    if (root && [root isKindOfClass:[WXRootView class]]) {
-        WXRootView* wxRootView = (WXRootView *)root;
-        if ([wxRootView isHasEvent]) {
-            return;
-        }
-    }
-    
-    if ([targetComponent.type isEqualToString:@"videoplus"]) {
-        return;
-    }
-    
-    bool inScreen = CGRectIntersectsRect(rootFrame, absoluteFrame);
-    if (!inScreen) {
-        return;
-    }
-    
-    if (!targetComponent.weexInstance.apmInstance.hasRecordFirstInterationView) {
-        targetComponent.weexInstance.apmInstance.hasRecordFirstInterationView = YES;
-        [targetComponent.weexInstance.apmInstance onStage:KEY_PAGE_STAGES_FIRST_INTERACTION_VIEW];
-    }
-    [WXAnalyzerCenter transferInteractionInfo:targetComponent];
-    [targetComponent.weexInstance.apmInstance onStage:KEY_PAGE_STAGES_INTERACTION];
-    self.interactionLimitAddOpCount++;
-    self.interactionAddCount = self.interactionAddCountRecord;
-    [targetComponent.weexInstance.apmInstance updateMaxStats:KEY_PAGE_STATS_I_SCREEN_VIEW_COUNT curMaxValue:self.interactionLimitAddOpCount];
-    [targetComponent.weexInstance.apmInstance updateMaxStats:KEY_PAGE_STATS_I_ALL_VIEW_COUNT curMaxValue:self.interactionAddCount];
-    self.interactionTime = self.interactionTime < diff ? diff :self.interactionTime;
-}
-
-- (bool) _verifyComponent:(WXComponent*)targetComponent
-{
-    bool isViewloaded = targetComponent && targetComponent.weexInstance && [targetComponent isViewLoaded];
-    
-    if (!isViewloaded) {
-        return false;
-    }
-    
-    UIView* curView = targetComponent.view;
-    while (curView != nil) {
-        if (curView == targetComponent.weexInstance.rootView) {
-            return true;
-        }
-        curView = curView.superview;
-    }
-    return false;
-}
-
-- (bool) _isViewGroup:(WXComponent *)targetComponent
-{
-    UIView* targetView = targetComponent.view;
-    
-    bool isViewGroup = true;
-    if ([targetComponent isKindOfClass:WXTextComponent.class]
-        || [targetView isKindOfClass:UILabel.class]
-        || [targetView isKindOfClass:UITextView.class]
-        || [targetView isKindOfClass:UIPickerView.class]
-        || [targetView isKindOfClass:UIProgressView.class]
-        || [targetView isKindOfClass:UIPickerView.class]
-        || [targetView isKindOfClass:UIImageView.class]
-        || [targetView isKindOfClass:UIButton.class]
-        || [targetView isKindOfClass:UIDatePicker.class]
-        || [targetView isKindOfClass:UITextField.class]
-        || [targetView isKindOfClass:UISwitch.class]
-        || [targetView isKindOfClass:UIActivityIndicatorView.class]) {
-        
-        isViewGroup =false;
-    }
-    return isViewGroup;
-}
-
-- (void)onInstanceRenderSuccess:(WXSDKInstance*) instance;
-{
-    if (self.hasRecordFsRenderTimeByPosition) {
-        return;
-    }
-    self.newFsRenderTime = CACurrentMediaTime()*1000 - self.renderTimeOrigin;
-    [instance.apmInstance onStage:KEY_PAGE_STAGES_NEW_FSRENDER];
-}
-
-@end
-
-@implementation WXSDKInstance (Performance)
-
-- (void) updatePerDicAfterCreateFinish
-{
-    [WXMonitor performanceFinishWithState:DebugAfterFSFinish instance:self];
-    self.performance.jsCreateFinishTime =  CACurrentMediaTime()*1000;
-    self.isJSCreateFinish = TRUE;
-    WX_MONITOR_PERF_SET(WXPTFsCallJsNum, self.performance.fsCallJsNum, self);
-    WX_MONITOR_PERF_SET(WXPTFsCallJsTime, self.performance.fsCallJsTime, self);
-    WX_MONITOR_PERF_SET(WXPTFsCallNativeNum, self.performance.fsCallNativeNum, self);
-    WX_MONITOR_PERF_SET(WXPTFsCallNativeTime, self.performance.fsCallNativeTime, self);
-    WX_MONITOR_PERF_SET(WXPTFsReqNetNum, self.performance.fsReqNetNum, self);
-    WX_MONITOR_PERF_SET(WXPTTimerNum, self.performance.timerNum, self);
-}
-
-
-- (void)updatePerDicBeforExit
-{
-    WX_MONITOR_PERF_SET(WXPTCellExceedNum,self.performance.cellExceedNum,self);
-    WX_MONITOR_PERF_SET(WXPTMaxDeepVDom,self.performance.maxVdomDeep,self);
-    WX_MONITOR_PERF_SET(WXPTImgWrongSizeNum,self.performance.imgWrongSizeNum,self);
-    WX_MONITOR_PERF_SET(WXPTInteractionTime,self.performance.interactionTime,self);
-    WX_MONITOR_PERF_SET(WXPTComponentCount,self.performance.componentCount,self);
-    WX_MONITOR_PERF_SET(WXPTComponentCreateTime,self.performance.componentCreateTime,self);
-    WX_MONITOR_PERF_SET(WXPTInteractionAddCount,self.performance.interactionAddCount,self);
-    WX_MONITOR_PERF_SET(WXPTInteractionLimitAddCount,self.performance.interactionLimitAddOpCount,self);
-    WX_MONITOR_PERF_SET(WXPNewFSRenderTime,self.performance.newFsRenderTime,self);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
deleted file mode 100644
index 25680da..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSDKInstance.h"
-#import "WXModuleMethod.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import <JavaScriptCore/JavaScriptCore.h>
-
-@interface WXSDKInstance ()
-
-@property (nonatomic, assign) CGFloat viewportWidth; // view port width this instance is using
-@property (nonatomic, assign) CGSize screenSize; // screen size this instance is using
-
-@property (nonatomic, strong) WXThreadSafeMutableDictionary *moduleInstances;
-@property (nonatomic, strong) NSMutableDictionary *naviBarStyles;
-@property (nonatomic, strong) NSMutableDictionary *styleConfigs;
-@property (nonatomic, strong) NSMutableDictionary *attrConfigs;
-@property (nonatomic, strong) NSString *mainBundleString;
-
-// add monitor information
-@property (nonatomic, strong) NSString *callCreateInstanceContext;
-@property (nonatomic, strong) NSString *createInstanceContextResult;
-@property (nonatomic, strong) NSString *executeRaxApiResult;
-
-- (void)addModuleEventObservers:(NSString*)event callback:(NSString*)callbackId option:(NSDictionary*)option moduleClassName:(NSString*)moduleClassName;
-- (void)_addModuleEventObserversWithModuleMethod:(WXModuleMethod*)method;
-- (void)removeModuleEventObserver:(NSString*)event moduleClassName:(NSString*)moduleClassName;
-- (void)_removeModuleEventObserverWithModuleMethod:(WXModuleMethod*)method;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h
deleted file mode 100644
index 3a5b2ec..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXAnimationModule : NSObject <WXModuleProtocol>
-- (void)animation:(WXComponent *)targetComponent args:(NSDictionary *)args callback:(WXModuleKeepAliveCallback)callback;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
deleted file mode 100644
index 7c77455..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXAnimationModule.h"
-#import "WXSDKInstance_private.h"
-#import "WXComponent_internal.h"
-#import "WXConvert.h"
-#import "WXTransform.h"
-#import "WXUtility.h"
-#import "WXLength.h"
-#import "WXTransition.h"
-#import "WXComponent+Layout.h"
-
-@interface WXAnimationInfo : NSObject<NSCopying>
-
-@property (nonatomic, weak) WXComponent *target;
-@property (nonatomic, strong) NSString *propertyName;
-@property (nonatomic, strong) id fromValue;
-@property (nonatomic, strong) id toValue;
-@property (nonatomic, assign) double duration;
-@property (nonatomic, assign) double delay;
-@property (nonatomic, strong) CAMediaTimingFunction *timingFunction;
-@property (nonatomic, assign) CGPoint originAnchorPoint;
-@end
-
-@implementation WXAnimationInfo
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    WXAnimationInfo *info = [[WXAnimationInfo allocWithZone:zone] init];
-    info.target = self.target;
-    info.propertyName = self.propertyName;
-    info.fromValue = self.fromValue;
-    info.toValue = self.toValue;
-    info.duration = self.duration;
-    info.delay = self.delay;
-    info.timingFunction = self.timingFunction;
-    return info;
-}
-
-@end
-
-#if __IPHONE_OS_VERSION_MAX_ALLOWED < 100000
-// CAAnimationDelegate is not available before iOS 10 SDK
-@interface WXAnimationDelegate : NSObject 
-#else
-@interface WXAnimationDelegate : NSObject <CAAnimationDelegate>
-#endif
-
-@property (nonatomic, copy) void (^finishBlock)(BOOL);
-@property (nonatomic, strong) WXAnimationInfo *animationInfo;
-
-- (instancetype)initWithAnimationInfo:(WXAnimationInfo *)info finishBlock:(void(^)(BOOL))finishBlock;
-
-@end
-
-@implementation WXAnimationDelegate
-
-- (instancetype)initWithAnimationInfo:(WXAnimationInfo *)info finishBlock:(void (^)(BOOL))finishBlock
-{
-    if (self = [super init]) {
-        _animationInfo = info;
-        _finishBlock = finishBlock;
-    }
-    return self;
-}
-
-- (void)animationDidStart:(CAAnimation *)anim
-{
-    [self applyTransform];
-}
-
--(void)applyTransform
-{
-    if (!_animationInfo.target || ![_animationInfo.target isViewLoaded]) {
-        return;
-    }
-    if ([_animationInfo.propertyName hasPrefix:@"transform"]) {
-        WXTransform *transform = _animationInfo.target->_transform;
-        [transform applyTransformForView:_animationInfo.target.view];
-        [_animationInfo.target _adjustForRTL];
-    } else if ([_animationInfo.propertyName isEqualToString:@"backgroundColor"]) {
-        _animationInfo.target.view.layer.backgroundColor = (__bridge CGColorRef _Nullable)(_animationInfo.toValue);
-    } else if ([_animationInfo.propertyName isEqualToString:@"opacity"]) {
-        _animationInfo.target.view.layer.opacity = [_animationInfo.toValue floatValue];
-    } else if ([_animationInfo.propertyName hasPrefix:@"bounds.size"]) {
-        CGRect newBounds = _animationInfo.target.view.layer.bounds;
-        if ([_animationInfo.propertyName isEqualToString:@"bounds.size.width"]) {
-            newBounds.size = CGSizeMake([_animationInfo.toValue floatValue], newBounds.size.height);
-        }else if ([_animationInfo.propertyName isEqualToString:@"bounds.size.height"]) {
-            newBounds.size = CGSizeMake(newBounds.size.width,[_animationInfo.toValue floatValue]);
-        }
-        _animationInfo.target.view.layer.bounds = newBounds;
-    }
-}
-
-- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
-{
-    if (!_animationInfo.target) {
-        return;
-    }
-    
-    if ([_animationInfo.propertyName hasPrefix:@"bounds.size"]) {
-        /*
-         * http://ronnqvi.st/about-the-anchorpoint/
-         */
-        //
-        CGRect originFrame = _animationInfo.target.view.layer.frame;
-        _animationInfo.target.view.layer.anchorPoint = _animationInfo.originAnchorPoint;
-        _animationInfo.target.view.layer.frame = originFrame;
-    }
-    [_animationInfo.target.layer removeAnimationForKey:_animationInfo.propertyName];
-    
-    if (_finishBlock) {
-        _finishBlock(flag);
-    }
-}
-
-@end
-
-@interface WXAnimationModule ()
-
-@property (nonatomic, assign) BOOL isAnimationedSuccess;
-
-@end
-
-@implementation WXAnimationModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(transition:args:callback:))
-
-- (void)transition:(NSString *)nodeRef args:(NSDictionary *)args callback:(WXModuleKeepAliveCallback)callback
-{
-    _isAnimationedSuccess = YES;
-    WXPerformBlockOnComponentThread(^{
-        if (nodeRef == nil || ![nodeRef isKindOfClass:[NSString class]] ||
-            ![args isKindOfClass:[NSDictionary class]]) {
-            if (callback) {
-                NSDictionary *message = @{@"result":@"Fail",
-                                          @"message":@"Argument type error."};
-                callback(message, NO);
-            }
-            return;
-        }
-        
-        NSArray *stringArray = [nodeRef componentsSeparatedByString:@"@"];
-        if ([stringArray count] == 0) {
-            if (callback) {
-                NSDictionary *message = @{@"result":@"Fail",
-                                          @"message":@"Node ref format error."};
-                callback(message, NO);
-            }
-            return;
-        }
-        
-        WXComponent *targetComponent = [self.weexInstance componentForRef:stringArray[0]];
-        if (!targetComponent) {
-            if (callback) {
-                NSDictionary *message = @{@"result":@"Fail",
-                                          @"message":[NSString stringWithFormat:@"No component find for ref:%@", nodeRef]};
-                callback(message, NO);
-            }
-            return;
-        }
-        WXPerformBlockOnMainThread(^{
-            [self animation:targetComponent args:args callback:callback];
-        });
-    });
-}
-
-- (NSArray<WXAnimationInfo *> *)animationInfoArrayFromArgs:(NSDictionary *)args target:(WXComponent *)target
-                                                needLayout:(BOOL* _Nonnull)needLayout
-                                                transition:(WXTransition* _Nonnull *)transition
-                                             transitionDic:(NSMutableDictionary* _Nonnull *)transitionDic
-{
-    UIView *view = target.view;
-    CALayer *layer = target.layer;
-    NSMutableArray<WXAnimationInfo *> *infos = [NSMutableArray new];
-
-    double duration = [args[@"duration"] doubleValue] / 1000;
-    double delay = [args[@"delay"] doubleValue] / 1000;
-    if (args[@"needLayout"]) {
-        *needLayout = [WXConvert BOOL:args[@"needLayout"]];
-        if (*needLayout) {
-            *transition = [WXTransition new];
-            *transitionDic = [NSMutableDictionary new];
-            (*transition).filterStyles = [NSMutableDictionary new];
-            (*transition).oldFilterStyles = [NSMutableDictionary new];
-        }
-    }
-    CAMediaTimingFunction *timingFunction = [WXConvert CAMediaTimingFunction:args[@"timingFunction"]];
-    NSDictionary *styles = args[@"styles"];
-    for (NSString *property in styles) {
-        WXAnimationInfo *info = [WXAnimationInfo new];
-        info.duration = duration;
-        info.delay = delay;
-        info.timingFunction = timingFunction;
-        info.target = target;
-        
-        id value = styles[property];
-        if ([property isEqualToString:@"transform"]) {
-            NSString *transformOrigin = styles[@"transformOrigin"];
-            WXTransform *wxTransform = [[WXTransform alloc] initWithCSSValue:value origin:transformOrigin instance:self.weexInstance];
-            WXTransform *oldTransform = target->_transform;
-            if (wxTransform.rotateAngle != oldTransform.rotateAngle) {
-                WXAnimationInfo *newInfo = [info copy];
-                newInfo.propertyName = @"transform.rotation";
-                /**
-                 Rotate >= 180 degree not working on UIView block animation, have not found any more elegant solution than using CAAnimation
-                 See http://stackoverflow.com/questions/9844925/uiview-infinite-360-degree-rotation-animation
-                 **/
-                newInfo.fromValue = @(oldTransform.rotateAngle);
-                newInfo.toValue = [NSNumber numberWithDouble:wxTransform.rotateAngle];
-                [infos addObject:newInfo];
-            }
-            if (wxTransform.rotateX != oldTransform.rotateX)
-            {
-                WXAnimationInfo *newInfo = [info copy];
-                newInfo.propertyName = @"transform.rotation.x";
-                newInfo.fromValue = @(oldTransform.rotateX);
-                newInfo.toValue = [NSNumber numberWithDouble:wxTransform.rotateX];
-                 [infos addObject:newInfo];
-            }
-            if (wxTransform.rotateY != oldTransform.rotateY)
-            {
-                WXAnimationInfo *newInfo = [info copy];
-                newInfo.propertyName = @"transform.rotation.y";
-                newInfo.fromValue = @(oldTransform.rotateY);
-                newInfo.toValue = [NSNumber numberWithDouble:wxTransform.rotateY];
-                [infos addObject:newInfo];
-            }
-            if (wxTransform.rotateZ != oldTransform.rotateZ)
-            {
-                WXAnimationInfo *newInfo = [info copy];
-                newInfo.propertyName = @"transform.rotation.z";
-                newInfo.fromValue = @(oldTransform.rotateZ);
-                newInfo.toValue = [NSNumber numberWithDouble:wxTransform.rotateZ];
-                [infos addObject:newInfo];
-            }
-            
-            if (wxTransform.scaleX != oldTransform.scaleX) {
-                WXAnimationInfo *newInfo = [info copy];
-                newInfo.propertyName = @"transform.scale.x";
-                newInfo.fromValue = @(oldTransform.scaleX);
-                newInfo.toValue = @(wxTransform.scaleX);
-                [infos addObject:newInfo];
-            }
-            
-            if (wxTransform.scaleY != oldTransform.scaleY) {
-                WXAnimationInfo *newInfo = [info copy];
-                newInfo.propertyName = @"transform.scale.y";
-                newInfo.fromValue = @(oldTransform.scaleY);
-                newInfo.toValue = @(wxTransform.scaleY);
-                [infos addObject:newInfo];
-            }
-            
-            if ((wxTransform.translateX && ![wxTransform.translateX isEqualToLength:oldTransform.translateX]) || (!wxTransform.translateX && oldTransform.translateX)) {
-                WXAnimationInfo *newInfo = [info copy];
-                newInfo.propertyName = @"transform.translation.x";
-                newInfo.fromValue = @([oldTransform.translateX valueForMaximum:view.bounds.size.width]);
-                newInfo.toValue = @([wxTransform.translateX valueForMaximum:view.bounds.size.width]);
-                [infos addObject:newInfo];
-            }
-            
-            if ((wxTransform.translateY && ![wxTransform.translateY isEqualToLength:oldTransform.translateY]) || (!wxTransform.translateY && oldTransform.translateY)) {
-                WXAnimationInfo *newInfo = [info copy];
-                newInfo.propertyName = @"transform.translation.y";
-                newInfo.fromValue = @([oldTransform.translateY valueForMaximum:view.bounds.size.height]);
-                newInfo.toValue = @([wxTransform.translateY valueForMaximum:view.bounds.size.height]);
-                [infos addObject:newInfo];
-            }
-            target.transform = wxTransform;
-        } else if ([property isEqualToString:@"backgroundColor"]) {
-            info.propertyName = @"backgroundColor";
-            info.fromValue = (__bridge id)(layer.backgroundColor);
-            info.toValue = (__bridge id)[WXConvert CGColor:value];
-            [infos addObject:info];
-        } else if ([property isEqualToString:@"opacity"]) {
-            info.propertyName = @"opacity";
-            info.fromValue = @(layer.opacity);
-            info.toValue = @([value floatValue]);
-            [infos addObject:info];
-        } else if ([property isEqualToString:@"width"]) {
-            if (*needLayout) {
-                [self transitionWithArgs:args withProperty:property target:target transition:*transition transitionDic:*transitionDic];
-            }
-            else
-            {
-                info.propertyName = @"bounds.size.width";
-                info.fromValue = @(layer.bounds.size.width);
-                CGRect newBounds = layer.bounds;
-                newBounds.size = CGSizeMake([WXConvert WXPixelType:value scaleFactor:self.weexInstance.pixelScaleFactor], newBounds.size.height);
-                info.toValue = @(newBounds.size.width);
-                [infos addObject:info];
-            }
-        } else if ([property isEqualToString:@"height"]) {
-            if (*needLayout) {
-                [self transitionWithArgs:args withProperty:property target:target transition:*transition transitionDic:*transitionDic];
-            }
-            else
-            {
-                info.propertyName = @"bounds.size.height";
-                info.fromValue = @(layer.bounds.size.height);
-                CGRect newBounds = layer.bounds;
-                newBounds.size = CGSizeMake(newBounds.size.width, [WXConvert WXPixelType:value scaleFactor:self.weexInstance.pixelScaleFactor]);
-                info.toValue = @(newBounds.size.height);
-                [infos addObject:info];
-            }
-        }
-    }
-    return infos;
-}
-
-- (void)transitionWithArgs:(NSDictionary *)args withProperty:(NSString *)property target:(WXComponent *)target
-                transition:(WXTransition*)transition
-             transitionDic:(NSMutableDictionary*)transitionDic
-{
-    [transition.filterStyles setObject:args[@"styles"][property] forKey:property];
-    
-    id oldStyleValue = target.styles[property];
-    if (oldStyleValue == nil) {
-        oldStyleValue = [target convertLayoutValueToStyleValue:property];
-    }
-    if (oldStyleValue == nil) {
-        oldStyleValue = @"0.0";
-    }
-    [transition.oldFilterStyles setObject:oldStyleValue ?:@0 forKey:property];
-    
-    [target _modifyStyles:@{property:args[@"styles"][property]}];
-    [transitionDic setObject:@([args[@"duration"] doubleValue]) forKey:kWXTransitionDuration];
-    [transitionDic setObject:@([args[@"delay"] doubleValue]) forKey:kWXTransitionDelay];
-    [transitionDic setObject:args[@"timingFunction"] forKey:kWXTransitionTimingFunction];
-}
-
-- (void)animation:(WXComponent *)targetComponent args:(NSDictionary *)args callback:(WXModuleKeepAliveCallback)callback
-{
-    /**
-       UIView-style animation functions support the standard timing functions,
-       but they don’t allow you to specify your own cubic Bézier curve. 
-       CATransaction can be used instead to force these animations to use the supplied CAMediaTimingFunction to pace animations.
-     **/
-    [CATransaction begin];
-    [CATransaction setAnimationTimingFunction:[WXConvert CAMediaTimingFunction:args[@"timingFunction"]]];
-    [CATransaction setCompletionBlock:^{
-        if (callback) {
-            NSDictionary *message;
-            if (_isAnimationedSuccess) {
-                message = @{@"result":@"Success",
-                            @"message":@"Success"};
-            }
-            else
-            {
-                message = @{@"result":@"Fail",
-                            @"message":@"Animation did not complete"};
-            }
-            callback(message,NO);
-        }
-    }];
-    
-    BOOL needLayout = NO;
-    WXTransition* transition = nil;
-    NSMutableDictionary* transitionDic = nil;
-    NSArray<WXAnimationInfo *> *infos = [self animationInfoArrayFromArgs:args target:targetComponent needLayout:&needLayout transition:&transition transitionDic:&transitionDic];
-    for (WXAnimationInfo *info in infos) {
-        [self _createCAAnimation:info];
-    }
-    
-    [CATransaction commit];
-    if (needLayout && transition) {
-        WXPerformBlockOnComponentThread(^{
-            [transition _handleTransitionWithStyles:transitionDic resetStyles:nil target:targetComponent];
-        });
-    }
-}
-
-- (void)_createCAAnimation:(WXAnimationInfo *)info
-{
-    CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:info.propertyName];
-    animation.fromValue = info.fromValue;
-    animation.toValue = info.toValue;
-    animation.duration = info.duration;
-    animation.beginTime = CACurrentMediaTime() + info.delay;
-    animation.timingFunction = info.timingFunction;
-    animation.removedOnCompletion = NO;
-    animation.fillMode = kCAFillModeForwards;
-    
-    WXAnimationDelegate *delegate = [[WXAnimationDelegate alloc] initWithAnimationInfo:info finishBlock:^(BOOL isFinish) {
-        if (!isFinish) {
-            _isAnimationedSuccess = isFinish;
-        }
-    }];
-    animation.delegate = delegate;
-    
-    CALayer *layer = info.target.layer;
-    if ([info.propertyName hasPrefix:@"bounds"]) {
-        info.originAnchorPoint = layer.anchorPoint;
-        CGRect originFrame = layer.frame;
-         /*
-          * if anchorPoint changed, the origin of layer's frame will change
-          * http://ronnqvi.st/about-the-anchorpoint/
-         */
-        layer.anchorPoint = CGPointZero;
-        layer.frame = originFrame;
-    }
-    
-    if(!WXFloatGreaterThan(animation.duration, 0)){
-        if([delegate respondsToSelector:@selector(applyTransform)]) {
-            [delegate applyTransform];
-        }
-    } else {
-        CATransform3D transform = layer.transform;
-        if (info.target->_transform.perspective && !isinf(info.target->_transform.perspective)) {
-            transform.m34 = -1.0/info.target->_transform.perspective*[UIScreen mainScreen].scale;
-            layer.transform = transform;
-        }
-        [layer addAnimation:animation forKey:info.propertyName];
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h
deleted file mode 100644
index 15375fe..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXCanvasModule : NSObject <WXModuleProtocol>
-
-- (UIImage *) getImage:(NSString *)imageURL;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.m
deleted file mode 100644
index 58c58a8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.m
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXCanvasModule.h"
-#import "WXCanvasComponent.h"
-#import "WXSDKManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXUtility.h"
-
-@interface WXCanvasModule()
-@property (nonatomic, strong) NSMutableDictionary *cacheMap;
-@property (nonatomic, strong) EAGLContext *glcontext;
-@end
-
-@implementation WXCanvasModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(addDrawActions:actions:))
-WX_EXPORT_METHOD(@selector(initTexture:callbackId:))
-
-- (instancetype) init
-{
-    _cacheMap = [NSMutableDictionary new];
-    _glcontext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
-    [EAGLContext setCurrentContext:_glcontext];
-    return [super init];
-}
-
-- (void) dealloc
-{
-    [_cacheMap removeAllObjects];
-    _cacheMap = nil;
-}
-
-- (void)performBlockWithCanvas:(NSString *)elemRef block:(void (^)(WXCanvasComponent *))block
-{
-    if (!elemRef) {
-        return;
-    }
-
-    __weak typeof(self) weakSelf = self;
-
-    WXPerformBlockOnComponentThread(^{
-        WXCanvasComponent *canvas = (WXCanvasComponent *)[weakSelf.weexInstance componentForRef:elemRef];
-        if (!canvas) {
-            return;
-        }
-
-        [weakSelf performSelectorOnMainThread:@selector(doBlock:) withObject:^() {
-            block(canvas);
-        } waitUntilDone:NO];
-    });
-}
-
-
-- (void)doBlock:(void (^)(void))block
-{
-    block();
-}
-
-- (void)addDrawActions:(NSString *)elemRef actions:(NSArray *)actions
-{
-    [self performBlockWithCanvas:elemRef block:^(WXCanvasComponent *canvas) {
-        [canvas addDrawActions:actions canvasModule:self];
-    }];
-}
-
-
--(UIImage *) getImage:(NSString *)imageURL {
-    NSString *key = [NSString stringWithFormat:@"image~%@", imageURL];
-    if ([_cacheMap objectForKey:key]) {
-        return (UIImage *)[_cacheMap objectForKey:key];
-    }
-    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];
-
-    if (image != nil) {
-        [_cacheMap setObject:image forKey:key];
-    }
-    return image;
-}
-
--(void) initTexture:(NSString *)imgURL callbackId:(NSInteger)callbackId
-{
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-        UIImage *image = [weakSelf getImage:imgURL];
-        NSDictionary *data = @{
-                               @"url": imgURL,
-                               @"width": @(image.size.width),
-                               @"height": @(image.size.height)
-                               };
-
-        [[WXSDKManager bridgeMgr] callBack:self.weexInstance.instanceId funcId:[@(callbackId) stringValue] params:[WXUtility JSONString:data]];
-    });
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h
deleted file mode 100644
index 31e1f7a..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXClipboardModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.m
deleted file mode 100644
index 7b7fcb1..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.m
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXClipboardModule.h"
-
-@implementation WXClipboardModule
-
-WX_EXPORT_METHOD(@selector(setString:))
-WX_EXPORT_METHOD(@selector(getString:))
-
-- (dispatch_queue_t)targetExecuteQueue {
-    return dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
-}
-
-- (void)setString:(NSString *)content
-{
-    UIPasteboard *clipboard = [UIPasteboard generalPasteboard];
-    clipboard.string = (content ? : @"");
-}
-
-- (void)getString:(WXModuleKeepAliveCallback)callback{
-    UIPasteboard *clipboard = [UIPasteboard generalPasteboard];
-    NSDictionary *result = [@{} mutableCopy];
-    if(clipboard.string)
-    {
-        [result setValue:clipboard.string forKey:@"data"];
-        [result setValue:@"success" forKey:@"result"];
-    }else
-    {
-        [result setValue:@"" forKey:@"data"];
-        [result setValue:@"fail" forKey:@"result"];
-    }
-    if (callback) {
-        callback(result, NO);
-    }
-
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.h
deleted file mode 100644
index f3f35d2..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-/**
- Redirect and output log to console.
- */
-@interface WXConsoleLogModule : NSObject <WXModuleProtocol>
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.m
deleted file mode 100644
index eacc8a4..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXConsoleLogModule.m
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXConsoleLogModule.h"
-#import "WXLog.h"
-
-#if !TARGET_OS_WATCH
-#import <asl.h>
-#endif
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-@interface WXConsoleLogHandler : NSObject<WXLogProtocol>
-
-@property (nonatomic, assign) WXLogLevel logLevel;
-
-+ (WXConsoleLogHandler *)sharedInstance;
-
-- (WXLogLevel)logLevel;
-
-- (void)log:(WXLogFlag)flag message:(NSString *)message;
-
-@end
-
-@implementation WXConsoleLogHandler
-
-+ (WXConsoleLogHandler *)sharedInstance
-{
-    static dispatch_once_t onceToken;
-    static WXConsoleLogHandler* instance = nil;
-    dispatch_once(&onceToken, ^{
-        instance = [[WXConsoleLogHandler alloc] init];
-    });
-    return instance;
-}
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-        _logLevel = WXLogLevelAll;
-    }
-    return self;
-}
-
-- (WXLogLevel)logLevel
-{
-    return _logLevel;
-}
-
-- (void)log:(WXLogFlag)flag message:(NSString *)message
-{
-#if !TARGET_OS_WATCH
-    dispatch_async(dispatch_get_main_queue(), ^{
-        asl_log_message(ASL_LEVEL_NOTICE, "%s", [message UTF8String]);
-    });
-#else
-    printf("\n%s\n", [message UTF8String]);
-#endif
-}
-
-@end
-
-@implementation WXConsoleLogModule
-
-WX_EXPORT_METHOD(@selector(switchLogLevel:callback:))
-
-- (void)switchLogLevel:(NSString*)logLevel callback:(WXKeepAliveCallback)callback {
-    static id<WXLogProtocol> OriginalLogger = nil;
-    
-    // When first invoke WXConsoleLogModule we record original logger
-    if (OriginalLogger == nil) {
-        OriginalLogger = [WXLog getCurrentExternalLog];
-    }
-    
-    if ([logLevel isEqualToString:@"off"]) {
-        [WXLog registerExternalLog:OriginalLogger];
-    }
-    else if ([logLevel isEqualToString:@"error"]) {
-        [WXConsoleLogHandler sharedInstance].logLevel = WXLogLevelError;
-        [WXLog registerExternalLog:[WXConsoleLogHandler sharedInstance]];
-    }
-    else if ([logLevel isEqualToString:@"warning"]) {
-        [WXConsoleLogHandler sharedInstance].logLevel = WXLogLevelWarning;
-        [WXLog registerExternalLog:[WXConsoleLogHandler sharedInstance]];
-    }
-    else if ([logLevel isEqualToString:@"info"]) {
-        [WXConsoleLogHandler sharedInstance].logLevel = WXLogLevelInfo;
-        [WXLog registerExternalLog:[WXConsoleLogHandler sharedInstance]];
-    }
-    else if ([logLevel isEqualToString:@"debug"]) {
-        [WXConsoleLogHandler sharedInstance].logLevel = WXLogLevelDebug;
-        [WXLog registerExternalLog:[WXConsoleLogHandler sharedInstance]];
-    }
-    
-    if (callback) {
-        callback(@{}, NO);
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXDomModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXDomModule.h
deleted file mode 100644
index 0345521..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXDomModule.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleProtocol.h"
-
-@interface WXDomModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
deleted file mode 100644
index dd4c51e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXDomModule.h"
-#import "WXComponent+Layout.h"
-#import "WXDefine.h"
-#import "WXSDKManager.h"
-#import "WXComponentManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXLog.h"
-#import "WXModuleProtocol.h"
-#import "WXUtility.h"
-#import "WXRuleManager.h"
-#import "WXSDKInstance.h"
-#import "WXRecycleListComponent.h"
-#import "WXCoreBridge.h"
-#import <objc/message.h>
-
-@interface WXDomModule ()
-
-@end
-
-@implementation WXDomModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(createBody:))
-WX_EXPORT_METHOD(@selector(addElement:element:atIndex:))
-WX_EXPORT_METHOD(@selector(removeElement:))
-WX_EXPORT_METHOD(@selector(moveElement:parentRef:index:))
-WX_EXPORT_METHOD(@selector(addEvent:event:))
-WX_EXPORT_METHOD(@selector(removeEvent:event:))
-WX_EXPORT_METHOD(@selector(createFinish))
-WX_EXPORT_METHOD(@selector(updateFinish))
-WX_EXPORT_METHOD(@selector(refreshFinish))
-WX_EXPORT_METHOD(@selector(scrollToElement:options:))
-WX_EXPORT_METHOD(@selector(updateStyle:styles:))
-WX_EXPORT_METHOD(@selector(updateAttrs:attrs:))
-WX_EXPORT_METHOD(@selector(addRule:rule:))
-WX_EXPORT_METHOD(@selector(getComponentRect:callback:))
-WX_EXPORT_METHOD(@selector(getLayoutDirection:callback:))
-WX_EXPORT_METHOD(@selector(updateComponentData:componentData:callback:))
-WX_EXPORT_METHOD(@selector(beginBatchMark))
-WX_EXPORT_METHOD(@selector(endBatchMark))
-
-- (void)performBlockOnComponentManager:(void(^)(WXComponentManager *))block
-{
-    if (!block) {
-        return;
-    }
-    __weak typeof(self) weakSelf = self;
-    
-    WXPerformBlockOnComponentThread(^{
-        WXComponentManager *manager = weakSelf.weexInstance.componentManager;
-        if (!manager.isValid) {
-            return;
-        }
-        [manager startComponentTasks];
-        block(manager);
-    });
-}
-
-- (void)performSelectorOnRuleManager:(void(^)(void))block{
-    if (!block) {
-        return;
-    }
-    WXPerformBlockOnComponentThread(^{
-        block();
-    });
-}
-
-- (void)beginBatchMark
-{
-    [self performBlockOnComponentManager:^(WXComponentManager *manager) {
-        [manager performBatchBegin];
-    }];
-}
-
-- (void)endBatchMark
-{
-    [self performBlockOnComponentManager:^(WXComponentManager * manager) {
-        [manager performBatchEnd];
-    }];
-}
-
-- (NSThread *)targetExecuteThread
-{
-    return [WXComponentManager componentThread];
-}
-
-- (void)createBody:(NSDictionary *)bodyData
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callCreateBody:instanceId data:bodyData];
-    });
-}
-
-- (void)addElement:(NSString *)parentRef element:(NSDictionary *)elementData atIndex:(NSInteger)index
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callAddElement:instanceId parentRef:parentRef data:elementData index:(int)index];
-    });
-}
-
-- (void)removeElement:(NSString *)ref
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callRemoveElement:instanceId ref:ref];
-    });
-}
-
-- (void)moveElement:(NSString *)ref parentRef:(NSString *)parentRef index:(NSInteger)index
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callMoveElement:instanceId ref:ref parentRef:parentRef index:(int)index];
-    });
-}
-
-- (void)addEvent:(NSString *)ref event:(NSString *)event
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callAddEvent:instanceId ref:ref event:event];
-    });
-}
-
-- (void)removeEvent:(NSString *)ref event:(NSString *)event
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callRemoveEvent:instanceId ref:ref event:event];
-    });
-}
-
-- (void)createFinish
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callCreateFinish:instanceId];
-    });
-}
-
-- (void)updateFinish
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callUpdateFinish:instanceId];
-    });
-}
-
-- (void)refreshFinish
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callRefreshFinish:instanceId];
-    });
-}
-
-- (void)scrollToElement:(NSString *)elemRef options:(NSDictionary *)dict
-{
-    [self performBlockOnComponentManager:^(WXComponentManager *manager) {
-        [manager scrollToComponent:elemRef options:dict];
-    }];
-}
-
-- (void)updateStyle:(NSString *)ref styles:(NSDictionary *)styles
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callUpdateStyle:instanceId ref:ref data:styles];
-    });
-}
-
-- (void)updateAttrs:(NSString *)ref attrs:(NSDictionary *)attrs
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    WXPerformBlockOnComponentThread(^{
-        [WXCoreBridge callUpdateAttrs:instanceId ref:ref data:attrs];
-    });
-}
-
-- (void)addRule:(NSString*)type rule:(NSDictionary *)rule {
-    if ([WXUtility isBlankString:type] || ![rule count]) {
-        return;
-    }
-    
-    [self performSelectorOnRuleManager:^{
-        [WXRuleManager sharedInstance].instance = weexInstance;
-        [[WXRuleManager sharedInstance] addRule:type rule:rule];
-    }];
-}
-
-- (void)getComponentRect:(NSString*)ref callback:(WXModuleKeepAliveCallback)callback {
-    if (ref == nil || ![ref isKindOfClass:[NSString class]]) {
-        if (callback) {
-            callback(@{@"result": @(NO), @"errMsg": @"Illegal parameter, ref must be a string."}, false);
-        }
-        return;
-    }
-    
-    [self performBlockOnComponentManager:^(WXComponentManager * manager) {
-        if ([ref isEqualToString:@"viewport"]) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                UIView* rootView = manager.weexInstance.rootView;
-                CGRect rootRect = [rootView.superview convertRect:rootView.frame toView:rootView];
-                NSMutableDictionary *callbackRsp = [self _componentRectInfoWithViewFrame:rootRect];
-                [callbackRsp setObject:@(true) forKey:@"result"];
-                if (callback) {
-                    callback(callbackRsp, false);
-                }
-            });
-        } else {
-            WXComponent *component = [manager componentForRef:ref];
-            dispatch_async(dispatch_get_main_queue(), ^{
-                UIView *rootView = manager.weexInstance.rootView;
-                NSMutableDictionary * callbackRsp = nil;
-                if (!component) {
-                    callbackRsp = [NSMutableDictionary new];
-                    [callbackRsp setObject:@(false) forKey:@"result"];
-                    [callbackRsp setObject:[NSString stringWithFormat:@"Illegal parameter, no ref about \"%@\" can be found", ref] forKey:@"errMsg"];
-                } else {
-                    CGRect componentRect = CGRectZero;
-                    // if current component view is not loaded or it hasn't been inserted to its superview, so the position cannot be obtained correct except width and height
-                    if ([component isViewLoaded] && component.view.superview) {
-                        componentRect = [component.view.superview convertRect:component.view.frame toView:rootView];
-                    } else {
-                        componentRect = component.calculatedFrame;
-                    }
-                    callbackRsp = [self _componentRectInfoWithViewFrame:componentRect];
-                    [callbackRsp setObject:@(true)forKey:@"result"];
-                }
-                if (callback) {
-                    callback(callbackRsp, false);
-                }
-            });
-
-        }
-    }];
-}
-
-- (void)getLayoutDirection:(NSString*)ref callback:(WXModuleKeepAliveCallback)callback {
-    [self performBlockOnComponentManager:^(WXComponentManager * manager) {
-        if ([ref isEqualToString:@"viewport"]) {
-            dispatch_async(dispatch_get_main_queue(), ^{
-                NSString *direction = [WXUtility getEnvLayoutDirection] == WXLayoutDirectionRTL ? @"rtl" : @"ltr";
-                if (callback) {
-                    callback(direction, false);
-                }
-            });
-        } else {
-            WXComponent *component = [manager componentForRef:ref];
-            dispatch_async(dispatch_get_main_queue(), ^{
-                NSString *direction = @"unknow";
-                if (component) {
-                    direction = [component isDirectionRTL] ? @"rtl" : @"ltr";
-                }
-                if (callback) {
-                    callback(direction, false);
-                }
-            });
-        }
-    }];
-}
-
-- (void)updateComponentData:(NSString*)componentDataId componentData:(NSDictionary*)componentData callback:(NSString*)callbackId
-{
-    NSString *recycleListComponentRef = [[componentDataId componentsSeparatedByString:@"@"] objectAtIndex:0];
-    if (!recycleListComponentRef) {
-        return;
-    }
-    SEL selector = _cmd;
-    [self performBlockOnComponentManager:^(WXComponentManager *manager) {
-        WXRecycleListComponent *recycleListComponent = (WXRecycleListComponent*)[manager componentForRef:recycleListComponentRef];
-        ((void*(*)(id,SEL,NSString*,NSDictionary*,NSString*))objc_msgSend)(recycleListComponent, selector, componentDataId, componentData,callbackId);
-    }];
-}
-
-- (void)destroyInstance
-{
-    NSString* instanceId = self.weexInstance.instanceId;
-    [self performBlockOnComponentManager:^(WXComponentManager *manager) {
-        [manager invalidate];
-        [manager unload];
-        
-        // Destroy weexcore c++ page and objects.
-        [WXCoreBridge closePage:instanceId];
-    }];
-}
-
-- (NSMutableDictionary*)_componentRectInfoWithViewFrame:(CGRect)componentRect
-{
-    CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
-    NSMutableDictionary *callbackRsp = [NSMutableDictionary new];
-    [callbackRsp setObject:@{
-                             @"width":@(componentRect.size.width /scaleFactor),
-                             @"height":@(componentRect.size.height / scaleFactor),
-                             @"bottom":@(CGRectGetMaxY(componentRect) / scaleFactor),
-                             @"left":@(componentRect.origin.x / scaleFactor),
-                             @"right":@(CGRectGetMaxX(componentRect) / scaleFactor),
-                             @"top":@(componentRect.origin.y / scaleFactor)
-                             } forKey:@"size"];
-    return callbackRsp;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h
deleted file mode 100644
index 2808863..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXGlobalEventModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.m
deleted file mode 100644
index 2ef61a7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.m
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXGlobalEventModule.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXThreadSafeMutableArray.h"
-#import "WXLog.h"
-#import "WXSDKManager.h"
-
-@interface WXGlobalEventModule()
-@property WXThreadSafeMutableDictionary *eventCallback;
-@end
-@implementation WXGlobalEventModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(addEventListener:callback:))
-WX_EXPORT_METHOD(@selector(removeEventListener:))
-
-- (instancetype)init {
-    if (self = [super init]) {
-        _eventCallback = [WXThreadSafeMutableDictionary new];
-    }
-    return self;
-}
-
-- (void)addEventListener:(NSString *)event callback:(WXModuleKeepAliveCallback)callback
-{
-    WXThreadSafeMutableArray * array = nil;
-    if (_eventCallback[event]) {
-        if (callback) {
-            [_eventCallback[event] addObject:callback];
-        }
-    } else {
-        array = [[WXThreadSafeMutableArray alloc] init];
-        if (callback) {
-            [array addObject:callback];
-        }
-        _eventCallback[event] = array;
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fireGlobalEvent:) name:event object:nil];
-    }
-}
-
-- (void)removeEventListener:(NSString *)event
-{
-    if (_eventCallback[event]) {
-        [_eventCallback removeObjectForKey:event];
-        [[NSNotificationCenter defaultCenter] removeObserver:self name:event object:nil];
-    } else {
-        WXLogWarning(@"eventName \"%@\" doesn't exist", event);
-    }
-}
-
-- (void)fireGlobalEvent:(NSNotification *)notification
-{
-    NSDictionary * userInfo = notification.userInfo;
-    NSString * userWeexInstanceId = userInfo[@"weexInstance"];
-    /*
-     1. The userWeexInstanceId param will be passed by globalEvent module notification.
-     2. The notification is posted by native user using NotificationCenter, native user don't need care about what the userWeexInstanceId is. What you do is to addEventListener in weex file using globalEvent module, and then post notification anywhere.
-     */
-    WXSDKInstance * userWeexInstance = [WXSDKManager instanceForID:userWeexInstanceId];
-     // In case that userInstanceId exists but instance has been dealloced
-    if (!userWeexInstanceId || userWeexInstance == weexInstance) {
-        
-        for (WXModuleKeepAliveCallback callback in _eventCallback[notification.name]) {
-            callback(userInfo[@"param"], true);
-        }
-    }
-}
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-    [_eventCallback removeAllObjects];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h
deleted file mode 100644
index 6f0e0d9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleProtocol.h"
-
-@interface WXInstanceWrap : NSObject <WXModuleProtocol>
-
-- (void)error:(NSInteger)type code:(NSInteger)code info:(NSString *)info;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.m
deleted file mode 100644
index ff336f1..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.m
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXInstanceWrap.h"
-#import "WXEmbedComponent.h"
-
-@implementation WXInstanceWrap
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(error:code:info:))
-WX_EXPORT_METHOD(@selector(refresh))
-
-- (void)error:(NSInteger)type code:(NSInteger)code info:(NSString *)info
-{
-    NSString *domain = [NSString stringWithFormat:@"%ld", (long)type];
-    NSDictionary *userInfo = @{ NSLocalizedDescriptionKey:info };
-    NSError *error = [NSError errorWithDomain:domain code:code userInfo:userInfo];
-    if (weexInstance.onFailed)
-        weexInstance.onFailed(error);
-}
-
-- (void)refresh
-{
-    if (self.weexInstance.parentInstance) {
-        WXSDKInstance *instance = self.weexInstance.parentInstance;
-        NSString *nodeRef = self.weexInstance.parentNodeRef;
-        WXEmbedComponent *embedComponent= (WXEmbedComponent *)[instance componentForRef:nodeRef];
-        [embedComponent refreshWeex];
-    }
-    else {
-        UIViewController *controller = self.weexInstance.viewController;
-        if ([controller respondsToSelector:@selector(refreshWeex)]) {
-            [controller performSelector:@selector(refreshWeex) withObject:nil];
-        }
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.h
deleted file mode 100644
index 79d9464..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-/**
- Provide system language information.
- */
-@interface WXLocaleModule : NSObject <WXModuleProtocol>
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.m
deleted file mode 100644
index 7f48edd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXLocaleModule.m
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXLocaleModule.h"
-
-@implementation WXLocaleModule
-
-WX_EXPORT_METHOD(@selector(getLanguage:))
-WX_EXPORT_METHOD_SYNC(@selector(getLanguageSync))
-WX_EXPORT_METHOD_SYNC(@selector(getLanguages))
-
-/**
- Get preferred language of the user
- */
-- (void)getLanguage:(WXKeepAliveCallback)callback {
-    if (callback) {
-        callback([NSLocale preferredLanguages][0], NO);
-    }
-}
-
-/**
- Get preferred language of the user
- */
-- (NSString *)getLanguageSync {
-    return [NSLocale preferredLanguages][0];
-}
-
-/**
- Get an array of strings representing the user's preferred languages
- */
-- (NSArray<NSString *> *)getLanguages {
-	return [NSLocale preferredLanguages];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h
deleted file mode 100644
index 7ba6639..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXMetaModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m
deleted file mode 100644
index 92c3599..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#import "WXMetaModule.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXSDKInstance_private.h"
-
-@implementation WXMetaModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD_SYNC(@selector(setViewport:))
-
-- (void)setViewport:(NSDictionary *)viewportArguments
-{
-    CGFloat viewportWidthFloat = 0.f;
-    id viewportWidth = viewportArguments[@"width"];
-    if ([viewportWidth isKindOfClass:[NSString class]]) {
-        if ([viewportWidth isEqualToString:@"device-width"]) {
-            viewportWidthFloat = [WXUtility portraitScreenSize].width;
-        } else if ([viewportWidth isEqualToString:@"device-height"]) {
-            viewportWidthFloat = [WXUtility portraitScreenSize].height;
-        } else {
-            viewportWidthFloat = [WXConvert CGFloat:viewportWidth];
-        }
-    } else {
-        viewportWidthFloat = [WXConvert CGFloat:viewportWidth];
-    }
-    
-    if (viewportWidthFloat > 0) {
-        self.weexInstance.viewportWidth = viewportWidthFloat;
-    }
-    
-    id widthId = viewportArguments[@"deviceWidth"];
-    id heightId = viewportArguments[@"deviceHeight"];
-    float width = [widthId floatValue];
-    float height = [heightId floatValue];
-    if (width > 0) {
-        [self.weexInstance setPageRequiredWidth:width height:height];
-    }
-    
-    id reserveCssStyles = viewportArguments[@"reserveCssStyles"];
-    if ([reserveCssStyles boolValue]) {
-        [self.weexInstance setPageArgument:@"reserveCssStyles" value:@"true"];
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h
deleted file mode 100644
index 41582f2..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXModalUIModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.m
deleted file mode 100644
index f78e696..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.m
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModalUIModule.h"
-#import <objc/runtime.h>
-#import "WXUtility.h"
-#import "WXAssert.h"
-
-typedef enum : NSUInteger {
-    WXModalTypeToast = 1,
-    WXModalTypeAlert,
-    WXModalTypeConfirm,
-    WXModalTypePrompt
-} WXModalType;
-
-@interface WXToastInfo : NSObject
-
-@property (nonatomic, strong) UIView *toastView;
-@property (nonatomic, weak) UIView *superView;
-@property (nonatomic, weak) WXSDKInstance *instance;
-@property (nonatomic, assign) double duration;
-
-@end
-
-@implementation WXToastInfo
-
-@end
-
-@interface WXToastManager : NSObject
-
-@property (strong, nonatomic) NSMutableArray<WXToastInfo *> *toastQueue;
-@property (strong, nonatomic) UIView *toastingView;
-
-+ (WXToastManager *)sharedManager;
-
-@end
-
-@implementation WXToastManager
-
-+ (WXToastManager *)sharedManager{
-    static WXToastManager * shareInstance;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        shareInstance = [[WXToastManager alloc] init];
-        shareInstance.toastQueue = [NSMutableArray new];
-    });
-    return shareInstance;
-}
-
-@end
-
-@interface WXModalUIModule () <UIAlertViewDelegate>
-
-@end
-
-@implementation WXModalUIModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(toast:))
-WX_EXPORT_METHOD(@selector(alert:callback:))
-WX_EXPORT_METHOD(@selector(confirm:callback:))
-WX_EXPORT_METHOD(@selector(prompt:callback:))
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-    }
-    
-    return self;
-}
-
-- (void)dealloc
-{
-}
-
-#pragma mark - Toast
-
-static const double WXToastDefaultDuration = 3.0;
-static const CGFloat WXToastDefaultFontSize = 16.0;
-static const CGFloat WXToastDefaultWidth = 230.0;
-static const CGFloat WXToastDefaultHeight = 30.0;
-static const CGFloat WXToastDefaultPadding = 30.0;
-
-- (void)toast:(NSDictionary *)param
-{
-    NSString *message = [self stringValue:param[@"message"]];
-    
-    if (!message) return;
-    
-    double duration = [param[@"duration"] doubleValue];
-    if (duration <= 0) {
-        duration = WXToastDefaultDuration;
-    }
-    
-    WXPerformBlockOnMainThread(^{
-        [self toast:message duration:duration];
-    });
-}
-
-- (void)toast:(NSString *)message duration:(double)duration
-{
-    WXAssertMainThread();
-    UIView *superView = self.weexInstance.rootView.window;
-    if (!superView) {
-        superView =  self.weexInstance.rootView;
-    }
-    UIView *toastView = [self toastViewForMessage:message superView:superView];
-    WXToastInfo *info = [WXToastInfo new];
-    info.instance = self.weexInstance;
-    info.toastView = toastView;
-    info.superView = superView;
-    info.duration = duration;
-    [[WXToastManager sharedManager].toastQueue addObject:info];
-    
-    if (![WXToastManager sharedManager].toastingView) {
-        [self showToast:toastView superView:superView duration:duration];
-    }
-}
-
-- (UIView *)toastViewForMessage:(NSString *)message superView:(UIView *)superView
-{
-    CGFloat padding = WXToastDefaultPadding;
-    UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(padding/2, padding/2, WXToastDefaultWidth, WXToastDefaultHeight)];
-    messageLabel.numberOfLines =  0;
-    messageLabel.textAlignment = NSTextAlignmentCenter;
-    messageLabel.text = message;
-    messageLabel.font = [UIFont boldSystemFontOfSize:WXToastDefaultFontSize];
-    messageLabel.lineBreakMode = NSLineBreakByTruncatingTail;
-    messageLabel.textColor = [UIColor whiteColor];
-    messageLabel.backgroundColor = [UIColor clearColor];
-    [messageLabel sizeToFit];
-
-    UIView *toastView = [[UIView alloc] initWithFrame:
-                         CGRectMake(
-                                    (superView.frame.size.width-messageLabel.frame.size.width-padding)/2,
-                                    (superView.frame.size.height-messageLabel.frame.size.height-padding)/2,
-                                    messageLabel.frame.size.width+padding,
-                                    messageLabel.frame.size.height+padding
-                                    )];
-    
-    CGPoint point = CGPointZero;
-    UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
-    
-    // adjust to screen orientation
-    UIInterfaceOrientation orientation = (UIInterfaceOrientation)[[UIApplication sharedApplication] statusBarOrientation];
-    switch (orientation) {
-        case UIDeviceOrientationPortrait: {
-            point = CGPointMake(window.frame.size.width/2, window.frame.size.height/2);
-            break;
-        }
-        case UIDeviceOrientationPortraitUpsideDown: {
-            toastView.transform = CGAffineTransformMakeRotation(M_PI);
-            float width = window.frame.size.width;
-            float height = window.frame.size.height;
-            point = CGPointMake(width/2, height/2);
-            break;
-        }
-        case UIDeviceOrientationLandscapeLeft: {
-            toastView.transform = CGAffineTransformMakeRotation(M_PI/2); //rotation in radians
-            point = CGPointMake(window.frame.size.width/2, window.frame.size.height/2);
-            break;
-        }
-        case UIDeviceOrientationLandscapeRight: {
-            toastView.transform = CGAffineTransformMakeRotation(-M_PI/2);
-            point = CGPointMake(window.frame.size.width/2, window.frame.size.height/2);
-            break;
-        }
-        default:
-            break;
-    }
-    
-    toastView.center = point;
-    toastView.frame = CGRectIntegral(toastView.frame);
-    
-    [toastView addSubview:messageLabel];
-    toastView.layer.cornerRadius = 7;
-    toastView.backgroundColor=[UIColor colorWithWhite:0 alpha:0.7];
-    
-    return toastView;
-}
-
-- (void)showToast:(UIView *)toastView superView:(UIView *)superView duration:(double)duration
-{
-    if (!toastView || !superView) {
-        return;
-    }
-    
-    [WXToastManager sharedManager].toastingView = toastView;
-    [superView addSubview:toastView];
-    __weak typeof(self) weakSelf = self;
-    [UIView animateWithDuration:0.2 delay:duration options:UIViewAnimationOptionCurveEaseInOut animations:^{
-        toastView.transform = CGAffineTransformConcat(toastView.transform, CGAffineTransformMakeScale(0.8, 0.8)) ;
-    } completion:^(BOOL finished) {
-        [UIView animateWithDuration:0.2 delay:0.2 options:UIViewAnimationOptionCurveEaseInOut animations:^{
-            toastView.alpha = 0;
-        } completion:^(BOOL finished){
-            [toastView removeFromSuperview];
-            [WXToastManager sharedManager].toastingView = nil;
-            
-            NSMutableArray *queue = [WXToastManager sharedManager].toastQueue;
-            if (queue.count > 0) {
-                [queue removeObjectAtIndex:0];
-                
-                // remove invalid toasts
-                for (NSInteger i = [queue count] - 1; i >= 0; i --) {
-                    WXToastInfo *info = queue[i];
-                    if (info.instance == nil) {
-                        [queue removeObjectAtIndex:i];
-                    }
-                }
-                
-                if (queue.count > 0) {
-                    WXToastInfo *info = [queue firstObject];
-                    [weakSelf showToast:info.toastView superView:info.superView duration:info.duration];
-                }
-            }
-        }];
-    }];
-}
-
-#pragma mark - Alert
-
-- (void)alert:(NSDictionary *)param callback:(WXModuleKeepAliveCallback)callback
-{
-    NSString *message = [self stringValue:param[@"message"]];
-    NSString *okTitle = [self stringValue:param[@"okTitle"]];
-    
-    if ([WXUtility isBlankString:okTitle]) {
-        okTitle = @"OK";
-    }
-
-    [self alert:message okTitle:nil cancelTitle:okTitle defaultText:nil type:WXModalTypeAlert callback:callback];
-}
-
-#pragma mark - Confirm
-
-- (void)confirm:(NSDictionary *)param callback:(WXModuleKeepAliveCallback)callback
-{
-    NSString *message = [self stringValue:param[@"message"]];
-    NSString *okTitle = [self stringValue:param[@"okTitle"]];
-    NSString *cancelTitle = [self stringValue:param[@"cancelTitle"]];
-    
-    if ([WXUtility isBlankString:okTitle]) {
-        okTitle = @"OK";
-    }
-    if ([WXUtility isBlankString:cancelTitle]) {
-        cancelTitle = @"Cancel";
-    }
-
-    [self alert:message okTitle:okTitle cancelTitle:cancelTitle defaultText:nil type:WXModalTypeConfirm callback:callback];
-}
-
-#pragma mark - Prompt
-
-- (void)prompt:(NSDictionary *)param callback:(WXModuleKeepAliveCallback)callback
-{
-    NSString *message = [self stringValue:param[@"message"]];
-    NSString *defaultValue = [self stringValue:param[@"default"]];
-    NSString *okTitle = [self stringValue:param[@"okTitle"]];
-    NSString *cancelTitle = [self stringValue:param[@"cancelTitle"]];
-    
-    if ([WXUtility isBlankString:okTitle]) {
-        okTitle = @"OK";
-    }
-    if ([WXUtility isBlankString:cancelTitle]) {
-        cancelTitle = @"Cancel";
-    }
-    
-    [self alert:message okTitle:okTitle cancelTitle:cancelTitle defaultText:defaultValue type:WXModalTypePrompt callback:callback];
-}
-
-#pragma mark - Private
-
-- (void)alert:(NSString *)message okTitle:(NSString *)okTitle cancelTitle:(NSString *)cancelTitle defaultText:(NSString *)defaultText type:(WXModalType)type callback:(WXModuleKeepAliveCallback)callback
-{
-    if (!message) {
-        if (callback) {
-            callback(@"Error: message should be passed correctly.",NO);
-        }
-        return;
-    }
-    
-    __weak WXModalUIModule* wModuleSelf = self;
-    
-    WXPerformBlockOnMainThread(^{
-        __strong WXModalUIModule* sModuleSelf = wModuleSelf;
-        
-        if (sModuleSelf) {
-            void (^handleAction)(UIAlertController*, UIAlertAction*) = ^(UIAlertController* alertView, UIAlertAction* action) {
-                if (callback) {
-                    id result = @"";
-                    switch (type) {
-                        case WXModalTypeAlert: {
-                            break;
-                        }
-                        case WXModalTypeConfirm: {
-                            result = action.title ?: @"";
-                            break;
-                        }
-                        case WXModalTypePrompt: {
-                            NSString *clickTitle = action.title ?: @"";
-                            NSString *text = [alertView.textFields firstObject].text ?: @"";
-                            result = @{ @"result": clickTitle, @"data": text };
-                            break;
-                        }
-                        default:
-                            break;
-                    }
-                    
-                    callback(result, NO);
-                }
-            };
-            
-            UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"" message:message preferredStyle:UIAlertControllerStyleAlert];
-            __weak UIAlertController* weakAlertView = alertView;
-            
-            UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelTitle ?: @"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
-                handleAction(weakAlertView, action);
-            }];
-            
-            UIAlertAction *OKAction = nil;
-            if (okTitle) {
-                OKAction = [UIAlertAction actionWithTitle:okTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
-                    handleAction(weakAlertView, action);
-                }];
-            }
-            
-            if (type == WXModalTypePrompt) {
-                [alertView addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
-                    textField.placeholder = defaultText ?: @"";
-                }];
-            }
-            
-            [alertView addAction:cancelAction];
-            
-            if (OKAction) {
-                [alertView addAction:OKAction];
-            }
-            
-            UIViewController* selfVC = sModuleSelf.weexInstance.viewController;
-            if (selfVC == nil) {
-                selfVC = [UIApplication sharedApplication].delegate.window.rootViewController;
-                WXLogWarning(@"Unable to find view controller for instance. Use Application root vc to show AlertViewController.");
-            }
-            
-            if (selfVC) {
-                [selfVC presentViewController:alertView animated:YES completion:nil];
-            }
-        }
-    });
-}
-
-- (NSString*)stringValue:(id)value
-{
-    if ([value isKindOfClass:[NSString class]]) {
-        return value;
-    }
-    if ([value isKindOfClass:[NSNumber class]]) {
-        return [value stringValue];
-    }
-    return nil;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h
deleted file mode 100644
index bed001e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "WXModuleProtocol.h"
-
-@interface WXNavigatorModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.m
deleted file mode 100644
index 0a58c1f..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.m
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXNavigatorModule.h"
-#import "WXSDKManager.h"
-#import "WXUtility.h"
-#import "WXBaseViewController.h"
-#import "WXNavigationProtocol.h"
-#import "WXHandlerFactory.h"
-#import "WXConvert.h"
-
-@implementation WXNavigatorModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(open:success:failure:))
-WX_EXPORT_METHOD(@selector(close:success:failure:))
-WX_EXPORT_METHOD(@selector(push:callback:))
-WX_EXPORT_METHOD(@selector(pop:callback:))
-WX_EXPORT_METHOD(@selector(setNavBarBackgroundColor:callback:))
-WX_EXPORT_METHOD(@selector(setNavBarLeftItem:callback:))
-WX_EXPORT_METHOD(@selector(clearNavBarLeftItem:callback:))
-WX_EXPORT_METHOD(@selector(setNavBarRightItem:callback:))
-WX_EXPORT_METHOD(@selector(clearNavBarRightItem:callback:))
-WX_EXPORT_METHOD(@selector(setNavBarMoreItem:callback:))
-WX_EXPORT_METHOD(@selector(clearNavBarMoreItem:callback:))
-WX_EXPORT_METHOD(@selector(setNavBarTitle:callback:))
-WX_EXPORT_METHOD(@selector(clearNavBarTitle:callback:))
-WX_EXPORT_METHOD(@selector(setNavBarHidden:callback:))
-
-- (id<WXNavigationProtocol>)navigator
-{
-    id<WXNavigationProtocol> navigator = [WXHandlerFactory handlerForProtocol:@protocol(WXNavigationProtocol)];
-    return navigator;
-}
-
-#pragma mark Weex Application Interface
-
-- (void)open:(NSDictionary *)param success:(WXModuleCallback)success failure:(WXModuleCallback)failure
-{
-    id<WXNavigationProtocol> navigator = [self navigator];
-    UIViewController *container = self.weexInstance.viewController;
-    if (navigator && [navigator respondsToSelector:@selector(open:success:failure:withContainer:)]) {
-        [navigator open:param success:success failure:failure withContainer:container];
-    }
-}
-    
-- (void)close:(NSDictionary *)param success:(WXModuleCallback)success failure:(WXModuleCallback)failure
-{
-    id<WXNavigationProtocol> navigator = [self navigator];
-    UIViewController *container = self.weexInstance.viewController;
-    if (navigator && [navigator respondsToSelector:@selector(close:success:failure:withContainer:)]) {
-        [navigator close:param success:success failure:failure withContainer:container];
-    }
-}
-    
-- (void)push:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    id<WXNavigationProtocol> navigator = [self navigator];
-    UIViewController *container = self.weexInstance.viewController;
-    [navigator pushViewControllerWithParam:param completion:^(NSString *code, NSDictionary *responseData) {
-        if (callback && code) {
-            callback(code);
-        }
-    } withContainer:container];
-}
-
-- (void)pop:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    id<WXNavigationProtocol> navigator = [self navigator];
-    UIViewController *container = self.weexInstance.viewController;
-    [navigator popViewControllerWithParam:param completion:^(NSString *code, NSDictionary *responseData) {
-        if (callback && code) {
-            callback(code);
-        }
-    } withContainer:container];
-}
-
-- (void)setNavBarHidden:(NSDictionary*)param callback:(WXModuleCallback)callback
-{
-    NSString *result = MSG_FAILED;
-    if ([[NSArray arrayWithObjects:@"0",@"1",@0,@1, nil] containsObject:param[@"hidden"]]) {
-        id<WXNavigationProtocol> navigator = [self navigator];
-        [navigator setNavigationBarHidden:[param[@"hidden"] boolValue] animated:[param[@"animated"] boolValue] withContainer:self.weexInstance.viewController];
-        result = MSG_SUCCESS;
-    }
-    if (callback) {
-        callback(result);
-    }
-}
-
-#pragma mark Navigation Setup
-
-- (void)setNavBarBackgroundColor:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    NSString *backgroundColor = param[@"backgroundColor"];
-    if (!backgroundColor) {
-        if (callback) {
-            callback(MSG_PARAM_ERR);
-        }
-    }
-    
-    id<WXNavigationProtocol> navigator = [self navigator];
-    UIViewController *container = self.weexInstance.viewController;
-    [navigator setNavigationBackgroundColor:[WXConvert UIColor:backgroundColor] withContainer:container];
-    if (callback) {
-        callback(MSG_SUCCESS);
-    }
-}
-
-- (void)setNavBarRightItem:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    [self setNavigationItemWithParam:param position:WXNavigationItemPositionRight withCallback:callback];
-}
-
-- (void)clearNavBarRightItem:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    [self clearNavigationItemWithParam:param position:WXNavigationItemPositionRight withCallback:callback];
-}
-
-- (void)setNavBarLeftItem:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    [self setNavigationItemWithParam:param position:WXNavigationItemPositionLeft withCallback:callback];
-}
-
-- (void)clearNavBarLeftItem:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    [self clearNavigationItemWithParam:param position:WXNavigationItemPositionLeft withCallback:callback];
-}
-
-- (void)setNavBarMoreItem:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    [self setNavigationItemWithParam:param position:WXNavigationItemPositionMore withCallback:callback];
-}
-
-- (void)clearNavBarMoreItem:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    [self clearNavigationItemWithParam:param position:WXNavigationItemPositionMore withCallback:callback];
-}
-
-- (void)setNavBarTitle:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    [self setNavigationItemWithParam:param position:WXNavigationItemPositionCenter withCallback:callback];
-}
-
-- (void)clearNavBarTitle:(NSDictionary *)param callback:(WXModuleCallback)callback
-{
-    [self clearNavigationItemWithParam:param position:WXNavigationItemPositionCenter withCallback:callback];
-}
-
-- (void)setNavigationItemWithParam:(NSDictionary *)param position:(WXNavigationItemPosition)position withCallback:(WXModuleCallback)callback
-{
-    id<WXNavigationProtocol> navigator = [self navigator];
-    UIViewController *container = self.weexInstance.viewController;
-    
-    NSMutableDictionary *mutableParam = [param mutableCopy];
-    
-    if (self.weexInstance.instanceId) {
-        [mutableParam setObject:self.weexInstance.instanceId forKey:@"instanceId"];
-    }
-    
-    [navigator setNavigationItemWithParam:mutableParam position:position completion:^(NSString *code, NSDictionary *responseData) {
-        if (callback && code) {
-            callback(code);
-        }
-    } withContainer:container];
-}
-
-- (void)clearNavigationItemWithParam:(NSDictionary *)param position:(WXNavigationItemPosition)position withCallback:(WXModuleCallback)callback
-{
-    id<WXNavigationProtocol> navigator = [self navigator];
-    UIViewController *container = self.weexInstance.viewController;
-    [navigator clearNavigationItemWithParam:param position:position completion:^(NSString *code, NSDictionary *responseData) {
-        if (callback && code) {
-            callback(code);
-        }
-    } withContainer:container];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h
deleted file mode 100644
index 8856a42..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXPickerModule : NSObject <WXModuleProtocol,UIPickerViewDelegate>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m
deleted file mode 100644
index 7538c41..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXPickerModule.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXComponentManager.h"
-#import <UIKit/UIPickerView.h>
-#import <UIKit/UIDatePicker.h>
-#import <UIKit/UIKit.h>
-
-#define WXPickerHeight 266
-#define WXPickerToolBarHeight 44
-
-@interface WXPickerModule() <UIGestureRecognizerDelegate>
-
-@property (nonatomic, strong)NSString * pickerType;
-// when resign the picker ,then the focus will be.
-@property (nonatomic, strong)UIView * focusToView;
-//picker
-@property(nonatomic,strong)UIPickerView *picker;
-@property(nonatomic,strong)UIView *backgroundView;
-@property(nonatomic,strong)UIView *pickerView;
-
-//custom
-@property(nonatomic,copy)NSString *title;
-@property(nonatomic,strong)UIColor *titleColor;
-@property(nonatomic,copy)NSString *cancelTitle;
-@property(nonatomic,copy)NSString *confirmTitle;
-@property(nonatomic,strong)UIColor *cancelTitleColor;
-@property(nonatomic,strong)UIColor *confirmTitleColor;
-@property(nonatomic,strong)UIColor *titleBackgroundColor;
-@property(nonatomic)CGFloat height;
-@property(nonatomic,strong)UIColor *textColor;
-@property(nonatomic,strong)UIColor *selectionColor;
-//data
-@property(nonatomic,copy)NSArray *items;
-@property(nonatomic)BOOL isAnimating;
-@property(nonatomic)NSInteger index;
-@property(nonatomic,copy)WXModuleKeepAliveCallback callback;
-
-//date picker
-@property(nonatomic,strong)UIDatePicker *datePicker;
-@property(nonatomic)UIDatePickerMode datePickerMode;
-
-@end
-
-@implementation WXPickerModule
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(pick:callback:))
-WX_EXPORT_METHOD(@selector(pickDate:callback:))
-WX_EXPORT_METHOD(@selector(pickTime:callback:))
-
-#pragma mark -
-#pragma mark Single Picker
--(void)dealloc
-{
-    [NSObject cancelPreviousPerformRequestsWithTarget:self];
-
-    if (nil != _backgroundView.superview) {
-        UIView* backgroundView =  _backgroundView;
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [backgroundView removeFromSuperview];
-        });
-    }
-}
-
--(void)pick:(NSDictionary *)options callback:(WXModuleKeepAliveCallback)callback
-{
-    if (UIAccessibilityIsVoiceOverRunning()) {
-        [self handleA11yFocusback:options];
-    }
-    
-    _pickerType = @"picker";
-    NSArray *items = @[];
-    NSInteger index = 0 ;
-  
-    if (options[@"items"]) {
-        items = options[@"items"];
-    }
-    if (options[@"index"]) {
-        index = [WXConvert NSInteger:options[@"index"]];
-    }
-    if (options[@"title"]) {
-        self.title = [WXConvert NSString:options[@"title"]];
-    }
-    if (options[@"titleColor"]) {
-        self.titleColor = [WXConvert UIColor:options[@"titleColor"]];
-    }
-    if (options[@"cancelTitle"]) {
-        self.cancelTitle = [WXConvert NSString:options[@"cancelTitle"]];
-    }
-    if (options[@"confirmTitle"]) {
-        self.confirmTitle = [WXConvert NSString:options[@"confirmTitle"]];
-    }
-    if (options[@"cancelTitleColor"]) {
-        self.cancelTitleColor = [WXConvert UIColor:options[@"cancelTitleColor"]];
-    }
-    if (options[@"confirmTitleColor"]) {
-        self.confirmTitleColor = [WXConvert UIColor:options[@"confirmTitleColor"]];
-    }
-    if (options[@"titleBackgroundColor"]) {
-        self.titleBackgroundColor = [WXConvert UIColor:options[@"titleBackgroundColor"]];
-    }
-    if (options[@"textColor"]) {
-        self.textColor = [WXConvert UIColor:options[@"textColor"]];
-    }
-    if (options[@"selectionColor"]) {
-        self.selectionColor = [WXConvert UIColor:options[@"selectionColor"]];
-    }
-    if (options[@"height"]) {
-        self.height = [WXConvert CGFloat:options[@"height"]];
-    }
-    if (items && [items count]>0 && [self isRightItems:items]) {
-        [self createPicker:items index:index];
-        self.callback = callback;
-    } else {
-        if (callback) {
-            callback(@{ @"result": @"error" },NO);
-        }
-        self.callback = nil;
-    }
-}
-
-- (void)handleA11yFocusback:(NSDictionary*)options
-{
-    __weak typeof(self) weakSelf = self;
-    if (options[@"sourceRef"] && [options[@"sourceRef"] isKindOfClass:[NSString class]]) {
-        WXPerformBlockOnComponentThread(^{
-            WXComponent * focusBackComponent = [weakSelf.weexInstance componentForRef:options[@"sourceRef"]];
-            WXPerformBlockOnMainThread(^{
-                weakSelf.focusToView = focusBackComponent.view;
-            });
-        });
-    }
-}
-
--(void)SetColorDelay:(NSNumber *)number
-{
-    if(self.selectionColor) {
-        UILabel *labelSelected = (UILabel*)[self.picker viewForRow:[number integerValue] forComponent:0.3];
-        [labelSelected setBackgroundColor:self.selectionColor];
-    }
-}
-
--(void)createPicker:(NSArray *)items index:(NSInteger)index
-{
-    [self configPickerView];
-    self.items = [items copy];
-    self.index = index;
-    if (items && index < [items count]) {
-        [self.picker selectRow:index inComponent:0 animated:NO];
-        [self performSelector:@selector(SetColorDelay:) withObject:[NSNumber numberWithInteger:self.index] afterDelay:0.3];
-        
-    } else if(items && [items count]>0) {
-        [self.picker selectRow:0 inComponent:0 animated:NO];
-        [self performSelector:@selector(SetColorDelay:) withObject:[NSNumber numberWithInteger:0] afterDelay:0.3];
-
-    }
-    [self show];
-}
-
--(void)show
-{
-    [[[UIApplication sharedApplication] keyWindow] endEditing:YES];  //hide keyboard
-    UIWindow *window = [UIApplication sharedApplication].keyWindow;
-    [window addSubview:self.backgroundView];
-    if (self.isAnimating) {
-        return;
-    }
-    self.isAnimating = YES;
-    self.backgroundView.hidden = NO;
-    UIView * focusView = self.picker;
-    if([_pickerType isEqualToString:@"picker"]) {
-        focusView = self.picker;
-    } else {
-        focusView = self.datePicker;
-    }
-    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, focusView);
-    [UIView animateWithDuration:0.35f animations:^{
-        self.pickerView.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height - WXPickerHeight, [UIScreen mainScreen].bounds.size.width, WXPickerHeight);
-        self.backgroundView.alpha = 1;
-        
-    } completion:^(BOOL finished) {
-        self.isAnimating = NO;
-        
-    }];
-}
-
--(void)hide
-{
-    if (self.isAnimating) {
-        return;
-    }
-    self.isAnimating = YES;
-    [UIView animateWithDuration:0.35f animations:^{
-        self.pickerView.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width, WXPickerHeight);
-        self.backgroundView.alpha = 0;
-    } completion:^(BOOL finished) {
-        self.backgroundView.hidden = YES;
-        self.isAnimating = NO;
-        if (!_focusToView) {
-            _focusToView = self.backgroundView.superview;
-        }
-        UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, _focusToView);
-        [self.backgroundView removeFromSuperview];
-    }];
-}
-
--(void)cancel:(id)sender
-{
-    [self hide];
-    if (self.callback) {
-        self.callback(@{ @"result": @"cancel"},NO);
-        self.callback=nil;
-    }
-}
-
--(void)done:(id)sender
-{
-    [self hide];
-    if (self.callback) {
-        self.callback(@{ @"result": @"success",@"data":[NSNumber numberWithInteger:self.index]},NO);
-        self.callback=nil;
-    }
-}
-
--(BOOL)isRightItems:(NSArray *)array
-{
-    for (id value in array) {
-        if([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]]) {
-            continue;
-        }else {
-            return NO;
-        }
-    }
-    return YES;
-}
-
--(NSString *)convertItem:(id)value
-{
-    if ([value isKindOfClass:[NSNumber class]]) {
-        return [NSString stringWithFormat:@"%ld",[value longValue]];
-    }
-    return value;
-}
-
-#pragma mark -
-#pragma mark Picker View
-
--(void)configPickerView
-{
-    self.backgroundView = [self createbackgroundView];
-    UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hide)];
-    if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"11.0") && WX_SYS_VERSION_LESS_THAN(@"11.1")) {
-        tapGesture.delegate = self;
-    }
-    [self.backgroundView addGestureRecognizer:tapGesture];
-    self.pickerView = [self createPickerView];
-    UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, WXPickerToolBarHeight)];
-    toolBar.barTintColor = self.titleBackgroundColor?self.titleBackgroundColor:[UIColor whiteColor];
-    
-    
-    
-    UIBarButtonItem* noSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
-    noSpace.width=10;
-    
-    UIBarButtonItem* doneBtn ;
-    if (self.confirmTitle.length >0) {
-        doneBtn = [[UIBarButtonItem alloc] initWithTitle:self.confirmTitle style:UIBarButtonItemStylePlain target:self action:@selector(done:)];
-    }else {
-       doneBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
-    }
-    if(self.confirmTitleColor){
-        doneBtn.tintColor = self.confirmTitleColor;
-    }
-    UIBarButtonItem *cancelBtn;
-    if (self.cancelTitle.length >0) {
-        cancelBtn = [[UIBarButtonItem alloc] initWithTitle:self.cancelTitle style:UIBarButtonItemStylePlain target:self action:@selector(cancel:)];
-    }else {
-        cancelBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)];
-    }
-    if(self.cancelTitleColor){
-        cancelBtn.tintColor = self.cancelTitleColor;
-    }
-    UIBarButtonItem* flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-    [toolBar setItems:[NSArray arrayWithObjects:noSpace,cancelBtn,flexSpace,doneBtn,noSpace, nil]];
-    UILabel *titleLabel = [UILabel new];
-    titleLabel.frame = CGRectMake(0, 0, 200, WXPickerToolBarHeight);
-    titleLabel.center = toolBar.center;
-    titleLabel.textAlignment = NSTextAlignmentCenter;
-    if(self.titleColor){
-        titleLabel.textColor = self.titleColor;
-    }
-    if(self.title.length>0){
-        titleLabel.text = self.title;
-        [toolBar addSubview:titleLabel];
-    }
-    [self.pickerView addSubview:toolBar];
-    self.picker = [[UIPickerView alloc]init];
-    self.picker.delegate = self;
-    CGFloat height = WXPickerHeight;
-    if (WXFloatEqual(self.height, 0)){
-        height = self.height>WXPickerToolBarHeight?self.height:WXPickerHeight;
-    }
-    CGRect pickerFrame = CGRectMake(0, WXPickerToolBarHeight, [UIScreen mainScreen].bounds.size.width, height-WXPickerToolBarHeight);
-    self.picker.backgroundColor = [UIColor whiteColor];
-    self.picker.frame = pickerFrame;
-    [self.pickerView addSubview:self.picker];
-    [self.backgroundView addSubview:self.pickerView];
-}
-
--(UIView *)createPickerView
-{
-    UIView *view = [UIView new];
-    CGFloat height = WXPickerHeight;
-    if (WXFloatEqual(self.height, 0)){
-        height = self.height>WXPickerToolBarHeight?self.height:WXPickerHeight;
-    }
-    view.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width, height);
-    view.backgroundColor = [UIColor whiteColor];
-    return view;
-}
-
--(UIView *)createbackgroundView
-{
-    UIView *view = [UIView new];
-    view.frame = [UIScreen mainScreen].bounds;
-    view.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.4];
-    return view;
-}
-
-#pragma mark -
-#pragma UIPickerDelegate
-- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
-{
-    return [self.items count];
-}
-
-- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
-{
-    return 44.0f;
-}
-
-- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
-{
-    return [self convertItem:self.items[row]];
-}
-
-- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
-{
-    self.index = row;
-    if(self.selectionColor) {
-        UILabel *labelSelected = (UILabel*)[pickerView viewForRow:row forComponent:component];
-        [labelSelected setBackgroundColor:self.selectionColor];
-    }
-}
-
--(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
-{
-    
-    UILabel *label = (id)view;
-    
-    if (!label)
-    {
-        
-        label= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
-        label.textAlignment = NSTextAlignmentCenter;
-        UIColor *color = self.textColor?self.textColor:[UIColor blackColor];
-        label.textColor = color;
-        label.text = [self convertItem:self.items[row]];
-    }
-    
-    return label;
-}
-
-
-#pragma mark -
-#pragma Date & Time Picker
--(void)pickDate:(NSDictionary *)options callback:(WXModuleKeepAliveCallback)callback
-{
-    if (UIAccessibilityIsVoiceOverRunning()) {
-        [self handleA11yFocusback:options];
-    }
-    _pickerType = @"pickDate";
-    self.datePickerMode = UIDatePickerModeDate;
-    [self datepick:options callback:callback];
-}
-
--(void)pickTime:(NSDictionary *)options callback:(WXModuleKeepAliveCallback)callback
-{
-    if (UIAccessibilityIsVoiceOverRunning()) {
-        [self handleA11yFocusback:options];
-    }
-    _pickerType = @"pickTime";
-    self.datePickerMode = UIDatePickerModeTime;
-    [self datepick:options callback:callback];
-}
-    
--(void)datepick:(NSDictionary *)options callback:(WXModuleKeepAliveCallback)callback
-{
-    if ((UIDatePickerModeTime == self.datePickerMode) || (UIDatePickerModeDate == self.datePickerMode)) {
-        [self createDatePicker:options callback:callback];
-    } else {
-        if (callback) {
-            callback(@{ @"result": @"error" },NO);
-        }
-        self.callback = nil;
-    }
-}
-
-- (void)createDatePicker:(NSDictionary *)options callback:(WXModuleKeepAliveCallback)callback
-{
-    self.callback = callback;
-    self.datePicker = [[UIDatePicker alloc]init];
-    if (UIDatePickerModeDate == self.datePickerMode) {
-        self.datePicker.datePickerMode = UIDatePickerModeDate;
-        NSString *value = [WXConvert NSString:options[@"value"]];
-        if (value) {
-            NSDate *date = [WXUtility dateStringToDate:value];
-            if (date) {
-                self.datePicker.date =date;
-            }
-        }
-        NSString *max = [WXConvert NSString:options[@"max"]];
-        if (max) {
-            NSDate *date = [WXUtility dateStringToDate:max];
-            if (date) {
-                self.datePicker.maximumDate =date;
-            }
-        }
-        NSString *min = [WXConvert NSString:options[@"min"]];
-        if (min) {
-            NSDate *date = [WXUtility dateStringToDate:min];
-            if (date) {
-                self.datePicker.minimumDate =date;
-            }
-        }
-    } else if (UIDatePickerModeTime == self.datePickerMode) {
-        self.datePicker.datePickerMode = UIDatePickerModeTime;
-        NSString *value = [WXConvert NSString:options[@"value"]];
-        if (value) {
-            NSDate *date = [WXUtility timeStringToDate:value];
-            if (date) {
-                self.datePicker.date = date;
-            }
-        }
-    }
-    [self configDatePickerView];
-    [self show];
-}
-
--(void)configDatePickerView
-{
-    self.backgroundView = [self createbackgroundView];
-    UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hide)];
-    if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"11.0") && WX_SYS_VERSION_LESS_THAN(@"11.1")) {
-        tapGesture.delegate = self;
-    }
-    [self.backgroundView addGestureRecognizer:tapGesture];
-    self.pickerView = [self createPickerView];
-    UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, WXPickerToolBarHeight)];
-    [toolBar setBackgroundColor:[UIColor whiteColor]];
-    UIBarButtonItem* noSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
-    noSpace.width=10;
-    UIBarButtonItem* doneBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneDatePicker:)];
-    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-    UIBarButtonItem* cancelBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelDatePicker:)];
-    [toolBar setItems:[NSArray arrayWithObjects:noSpace,cancelBtn,flexSpace,doneBtn,noSpace, nil]];
-    [self.pickerView addSubview:toolBar];
-    CGRect pickerFrame = CGRectMake(0, WXPickerToolBarHeight, [UIScreen mainScreen].bounds.size.width, WXPickerHeight-WXPickerToolBarHeight);
-    self.datePicker.frame = pickerFrame;
-    self.datePicker.backgroundColor = [UIColor whiteColor];
-    [self.pickerView addSubview:self.datePicker];
-    [self.backgroundView addSubview:self.pickerView];
-}
-    
--(void)cancelDatePicker:(id)sender
-{
-    [self hide];
-    if (self.callback) {
-        self.callback(@{ @"result": @"cancel"},NO);
-        self.callback = nil;
-    }
-}
-
--(void)doneDatePicker:(id)sender
-{
-    [self hide];
-    NSString *value = @"";
-    if (UIDatePickerModeTime == self.datePicker.datePickerMode) {
-        value = [WXUtility timeToString:self.datePicker.date];
-    } else if(UIDatePickerModeDate == self.datePicker.datePickerMode)
-    {
-        value = [WXUtility dateToString:self.datePicker.date];
-    }
-    if (self.callback) {
-        self.callback(@{ @"result": @"success",@"data":value},NO);
-        self.callback=nil;
-    }
-}
-
-#pragma mark - UIGestureRecognizerDelegate
-- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
-    if (self.pickerView && [touch.view isDescendantOfView:self.pickerView]) {
-        return NO;
-    }
-    return YES;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
deleted file mode 100644
index 3f04e46..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@class WXModuleMethod;
-
-@interface WXPrerenderManager : NSObject
-
-- (instancetype) init NS_UNAVAILABLE;
-
-/**
- *  @abstract add prerender task
- *
- *  @param url The prerender url string
- *
- *  @param instanceId  The instanceId that its instance add prerender task
- *
- *  @param callback  the module method callback
- *
- **/
-+ (void) addTask:(NSString *) url instanceId:(NSString *)instanceId callback:(WXModuleKeepAliveCallback)callback;
-
-/**
- *  @abstract add prerender task
- *
- *  @param url The prerender url string
- *
- *  @param callback  the module method callback
- *
- **/
-+ (void) addGlobalTask:(NSString *) url callback:(WXModuleKeepAliveCallback)callback;
-
-/**
- *  @abstract Returns true if url is exist in task .
- *
- **/
-+ (BOOL) isTaskExist:(NSString *)url;
-
-/**
- *  @abstract Returns true if task ready.
- *
- **/
-+ (BOOL)isTaskReady:(NSString *)url;
-/**
- *  @abstract Returns key from url .
- *
- **/
-+ (NSString *)getTaskKeyFromUrl:(NSString *)url;
-
-/**
- *  @abstract Returns error if url is prerender fail .
- *
- **/
-+ (NSError *)errorFromUrl:(NSString *)url;
-
-/**
- *  @abstract excute render from prerender cache .
- * @discussion this method should be excuted after oncreat and onfail block created
- *
- **/
-+ (void) renderFromCache:(NSString *)url;
-
-/**
- *  @abstract Returns prerender root view .
- *
- **/
-+ (UIView *)viewFromUrl:(NSString *)url;
-
-/**
- *  @abstract Returns prerender instance .
- *
- **/
-+ (id)instanceFromUrl:(NSString *)url;
-
-/**
- *  @abstract Remove prerender task by url .
- *
- **/
-+ (void)removePrerenderTaskforUrl:(NSString *)url;
-
-/**
- *  @abstract store prerender module task by url .
- *
- **/
-+ (void)storePrerenderModuleTasks:(WXModuleMethod *)prerenderModuleTask forUrl:(NSString *)url;
-
-/**
- *  @abstract destroy task , it will destroy instance also.
- *
- **/
-+ (void)destroyTask:(NSString *)parentInstanceId;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m
deleted file mode 100644
index a85518c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXPrerenderManager.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXModuleMethod.h"
-#import "WXBridgeManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXBridgeManager.h"
-#import "WXSDKEngine.h"
-#import "WXUtility.h"
-
-static NSString *const MSG_PRERENDER_INTERNAL_ERROR = @"internal_error";
-static NSString *const MSG_PRERENDER_SUCCESS = @"success";
-
-@interface WXPrerenderTask:NSObject
-
-@property (nonatomic, strong) WXSDKInstance *instance;
-@property (nonatomic, strong) UIView *view;
-@property (nonatomic, copy) NSString *parentInstanceId;
-@property (nonatomic, copy) NSString *url;
-@property (nonatomic, strong) NSMutableArray *moduleTasks;
-@property (nonatomic, strong) NSError *error;
-@property (nonatomic, assign) WXState state;
-@property (nonatomic, strong) NSDate *beginDate;
-@property (nonatomic) long long cacheTime;
-@property (nonatomic) BOOL isCache;  // if set cache , the cachetime is no use.
-
-@end
-@implementation WXPrerenderTask
-@end
-
-
-@interface WXPrerenderManager()
-
-@property (nonatomic, strong) NSMutableArray *cachedUrlList;
-@property (nonatomic, strong) dispatch_queue_t queue;
-@property (nonatomic, strong) NSMutableDictionary<NSString *, WXPrerenderTask*> *prerenderTasks;
-@property (nonatomic) NSInteger maxCacheNumber;
-
-@end
-
-@implementation WXPrerenderManager
-
-+ (instancetype) sharedInstance{
-    
-    static WXPrerenderManager *instance = nil;
-    static dispatch_once_t once;
-    
-    dispatch_once(&once, ^{
-        instance = [[WXPrerenderManager alloc] initPrivate];
-    });
-    
-    return instance;
-}
-
-- (instancetype) initPrivate{
-    self = [super init];
-    if(self){
-        self.cachedUrlList = [[NSMutableArray alloc] init];
-        self.queue = dispatch_queue_create("Prerender", DISPATCH_QUEUE_SERIAL);
-        self.prerenderTasks = [[NSMutableDictionary alloc] init];
-    }
-    
-    return self;
-}
-
-- (void) dealloc{
-    self.cachedUrlList = nil;
-    self.prerenderTasks = nil;
-}
-
-+ (void) addTask:(NSString *)url instanceId:(NSString *)instanceId callback:(WXModuleKeepAliveCallback)callback{
-    NSURL *newUrl = [NSURL URLWithString:url];
-    if(!newUrl){
-        if(callback){
-            callback(@{@"url":url,@"message":MSG_PRERENDER_INTERNAL_ERROR,@"result":@"error"}, NO);
-        }
-        return;
-    }
-    
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    __weak WXPrerenderManager *weakSelf = manager;
-    dispatch_async(manager.queue, ^{
-        [weakSelf prerender:newUrl instanceId:instanceId isCache:NO callback:callback];
-    });
-}
-
-+ (void) addGlobalTask:(NSString *) url callback:(WXModuleKeepAliveCallback)callback
-{
-    NSURL *newUrl = [NSURL URLWithString:url];
-    if(!newUrl){
-        if(callback){
-            callback(@{@"url":url,@"message":MSG_PRERENDER_INTERNAL_ERROR,@"result":@"error"}, NO);
-        }
-        return;
-    }
-    
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    __weak WXPrerenderManager *weakSelf = manager;
-    dispatch_async(manager.queue, ^{
-        [weakSelf prerender:newUrl instanceId:@"" isCache:YES callback:callback];
-    });
-}
-
--(BOOL)isSwitchOn
-{
-    BOOL switchOn = YES; // defautle YES
-    id configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-        id switchOnValue = [configCenter configForKey:@"iOS_weex_prerender_config.is_switch_on" defaultValue:@true isDefault:NULL];
-        if(switchOnValue){
-            switchOn = [switchOnValue boolValue];
-        }
-        if(!switchOn){
-            return NO;
-        }
-    }
-    return YES;
-}
-
-- (void) prerender:(NSURL *)url instanceId:(NSString *)instanceId isCache:(BOOL)isCache callback:(WXModuleKeepAliveCallback) callback{
-
-    NSString *str = url.absoluteString;
-    if(str.length==0){
-        if(callback){
-            callback(@{@"url":[url absoluteString],@"message":MSG_PRERENDER_INTERNAL_ERROR,@"result":@"error"}, NO);
-        }
-        return;
-    }
-    WXPrerenderTask *task = [WXPrerenderTask new];
-    id configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-    if(![self isSwitchOn]){
-        if(callback){
-            callback(@{@"url":[url absoluteString],@"message":MSG_PRERENDER_INTERNAL_ERROR,@"result":@"error"}, NO);
-        }
-        return;
-    }
-    task.beginDate = [NSDate date];
-    task.cacheTime = 300000;
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-        long long time = [[configCenter configForKey:@"iOS_weex_prerender_config.cacheTime" defaultValue:@300000 isDefault:NULL] longLongValue];
-        if(time){
-            task.cacheTime = time;
-        }
-    }
-    self.maxCacheNumber = 5;
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-        NSInteger max = [[configCenter configForKey:@"iOS_weex_prerender_config.max_cache_num" defaultValue:@5 isDefault:NULL] integerValue];
-        if(max){
-            self.maxCacheNumber = max;
-        }
-    }
-    if(self.prerenderTasks && self.prerenderTasks.count<self.maxCacheNumber){
-        [self.prerenderTasks setObject:task forKey:[WXPrerenderManager getTaskKeyFromUrl:url.absoluteString]];
-        WXPerformBlockOnMainThread(^{
-            WXSDKInstance *instance = [[WXSDKInstance alloc] init];
-            instance.needPrerender = YES;
-            task.instance = instance;
-            task.parentInstanceId = instanceId;
-            task.url = url.absoluteString;
-            task.isCache = isCache;
-            WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-            __weak typeof(self) weakSelf = manager;
-            instance.onCreate = ^(UIView *view) {
-                WXPrerenderTask *task = [weakSelf.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url.absoluteString]];
-                task.view = view;
-                if(task){
-                    [weakSelf.prerenderTasks setObject:task forKey:[WXPrerenderManager getTaskKeyFromUrl:url.absoluteString]];
-                }
-            };
-            
-            instance.onFailed = ^(NSError *error) {
-                WXPrerenderTask *task  = [weakSelf.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url.absoluteString]];
-                task.error = error;
-                if(task){
-                    [weakSelf.prerenderTasks setObject:task forKey:[WXPrerenderManager getTaskKeyFromUrl:url.absoluteString]];
-                }
-            };
-            [instance renderWithURL:url options:@{@"bundleUrl":url.absoluteString} data:nil];
-        });
-        if(callback){
-            callback(@{@"url":url.absoluteString,@"message":MSG_PRERENDER_SUCCESS,@"result":@"success"}, NO);
-        }
-    }
-}
-
-+ (BOOL)isTaskReady:(NSString *)url{
-    return [[WXPrerenderManager sharedInstance]isTaskReady:url];
-}
-- (BOOL)isTaskReady:(NSString *)url
-{
-    if( !url ||url.length == 0){
-        return NO;
-    }
-    WXPrerenderTask *task  = [self.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-    if(!task ){
-        return NO;
-    }
-    if(![self isSwitchOn]){
-        return NO;
-    }
-    // compare cache time with begin time
-    NSTimeInterval time = [[NSDate date] timeIntervalSinceDate:task.beginDate];
-    if(time > task.cacheTime && !task.isCache){
-        return NO;
-    }
-    
-    if(!task.view)  // view not exist ,not prerender
-    {
-        return NO;
-    }
-    if(task ){
-        return YES;
-    }
-    return NO;
-}
-
-+ (BOOL)isTaskExist:(NSString *)url{
-    if( !url ||url.length == 0){
-        return NO;
-    }
-    id configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-        BOOL switchOn = NO; // defautle NO
-        id switchOnValue = [configCenter configForKey:@"iOS_weex_prerender_config.is_switch_on" defaultValue:@YES isDefault:NULL];
-        if(switchOnValue){
-            switchOn = [switchOnValue boolValue];
-        }
-        if(!switchOn){
-            return NO;
-        }
-        
-        id urlsValue = [configCenter configForKey:@"iOS_weex_prerender_config.urls" defaultValue:NULL isDefault:NULL];
-        if(urlsValue){
-            NSData *data = [urlsValue dataUsingEncoding:NSUTF8StringEncoding];
-            NSError *error = nil;
-            NSArray *urls = [WXUtility JSONObject:data error:&error];
-            if(urls && [urls count]>0){
-                for (NSString *configUrl in urls) {
-                    if(configUrl && [[WXPrerenderManager getTaskKeyFromUrl:configUrl] isEqualToString:[WXPrerenderManager getTaskKeyFromUrl:url]]) {
-                            return YES;
-                        }
-                }
-                
-            }
-        }
-        
-    }
-    
-    return NO;
-}
-
-- (BOOL)isTaskExist:(NSString *)url
-{
-    if( !url ||url.length == 0){
-        return NO;
-    }
-    WXPrerenderTask *task  = [self.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-    if(task ){
-        return YES;
-    }
-    return NO;
-}
-
-+ (void)renderFromCache:(NSString *)url
-{
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    if([manager isTaskReady:url])
-    {
-        WXPrerenderTask *task  = [manager.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-        
-        UIView *view = [self viewFromUrl:url];
-        NSError *error = [self errorFromUrl:url];
-        if(task.instance.onCreate){
-            task.instance.onCreate(view);
-        }
-        if(error && task.instance.onFailed){
-            task.instance.onFailed(error);
-        }
-        WXPerformBlockOnComponentThread(^{
-            [task.instance.componentManager startComponentTasks];
-            [task.instance.componentManager executePrerenderUITask:url];
-            task.instance.needPrerender = NO;
-        });
-        WXPerformBlockOnBridgeThreadForInstance(^{
-            [WXPrerenderManager excuteModuleTasksForUrl:url];
-        }, task.instance.instanceId);
-    }
-}
-
-+ (UIView *)viewFromUrl:(NSString *)url
-{
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    WXPrerenderTask *task  = [manager.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-    return task.view;
-}
-
-+ (NSError *)errorFromUrl:(NSString *)url
-{
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    WXPrerenderTask *task  = [manager.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-    return task.error;
-}
-
-+ (id )instanceFromUrl:(NSString *)url
-{
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    WXPrerenderTask *task  = [manager.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-    return task.instance;
-}
-
-+ (void)removePrerenderTaskforUrl:(NSString *)url
-{
-    if (url.length > 0) {
-        WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-        if(manager.prerenderTasks && [manager.prerenderTasks count]>0){
-            WXPrerenderTask *task  = [manager.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-            if(task){
-                [manager.prerenderTasks removeObjectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-            }
-        }
-    }
-}
-
-+ (void)storePrerenderModuleTasks:(WXModuleMethod *)method forUrl:(NSString *)url
-{
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    WXPrerenderTask *task = [manager.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-    if (!task.moduleTasks){
-        task.moduleTasks = [NSMutableArray new];
-    }
-    [task.moduleTasks addObject:method];
-    if(task){
-        [manager.prerenderTasks setObject:task forKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-    }
-}
-
-+ (void)excuteModuleTasksForUrl:(NSString *)url
-{
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    WXPrerenderTask *task = [manager.prerenderTasks objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
-    
-    if (task.moduleTasks && [task.moduleTasks count]>0){
-        for (WXModuleMethod *method in task.moduleTasks) {
-            [method invoke];
-        }
-    }
-}
-
-+ (NSString *)getTaskKeyFromUrl:(NSString *)url
-{
-    NSURL *newUrl = [NSURL URLWithString:url];
-    NSString * newUrlStr = @"";
-    if(url){
-        newUrlStr =  [NSString stringWithFormat:@"%@/%@",newUrl.host,newUrl.path?:@""];
-    }
-    return newUrlStr;
-}
-
-
-+ (void)destroyTask:(NSString *)parentInstanceId
-{
-    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    if(!manager.prerenderTasks || [manager.prerenderTasks count] == 0){
-        return;
-    }
-    
-    [manager.prerenderTasks enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
-        WXPrerenderTask *task = manager.prerenderTasks[key];
-        if ([task.parentInstanceId isEqualToString:parentInstanceId]) {
-            [manager removeTask:task];
-        }
-    }];
-}
-
-- (void)removeTask:(WXPrerenderTask *)task
-{
-    [task.instance destroyInstance];
-    if(self.prerenderTasks && [self.prerenderTasks count] > 0 && task.url.length > 0){
-        [self.prerenderTasks removeObjectForKey:[WXPrerenderManager getTaskKeyFromUrl:task.url]];
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h
deleted file mode 100644
index 89a02d9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleProtocol.h"
-
-@interface WXStorageModule : NSObject <WXModuleProtocol>
-
-- (void)length:(WXModuleCallback)callback;
-
-- (void)getAllKeys:(WXModuleCallback)callback;
-
-- (void)setItem:(NSString *)key value:(NSString *)value callback:(WXModuleCallback)callback;
-
-- (void)setItemPersistent:(NSString *)key value:(NSString *)value callback:(WXModuleCallback)callback;
-
-- (void)getItem:(NSString *)key callback:(WXModuleCallback)callback;
-
-- (void)removeItem:(NSString *)key callback:(WXModuleCallback)callback;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.m
deleted file mode 100644
index 8853dbc..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.m
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXStorageModule.h"
-#import "WXSDKManager.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXThreadSafeMutableArray.h"
-#import <CommonCrypto/CommonCrypto.h>
-#import "WXUtility.h"
-
-static NSString * const WXStorageDirectory            = @"wxstorage";
-static NSString * const WXStorageFileName             = @"wxstorage.plist";
-static NSString * const WXStorageInfoFileName         = @"wxstorage.info.plist";
-static NSString * const WXStorageIndexFileName        = @"wxstorage.index.plist";
-static NSUInteger const WXStorageLineLimit            = 1024;
-static NSUInteger const WXStorageTotalLimit           = 5 * 1024 * 1024;
-static NSString * const WXStorageThreadName           = @"com.taobao.weex.storage";
-static NSString * const WXStorageNullValue            = @"#{eulaVlluNegarotSXW}";
-
-@implementation WXStorageModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(length:))
-WX_EXPORT_METHOD(@selector(getItem:callback:))
-WX_EXPORT_METHOD(@selector(setItem:value:callback:))
-WX_EXPORT_METHOD(@selector(setItemPersistent:value:callback:))
-WX_EXPORT_METHOD(@selector(getAllKeys:))
-WX_EXPORT_METHOD(@selector(removeItem:callback:))
-
-#pragma mark - Export
-
-- (dispatch_queue_t)targetExecuteQueue {
-    return [WXStorageModule storageQueue];
-}
-
-- (void)length:(WXModuleCallback)callback
-{
-    if (callback) {
-        callback(@{@"result":@"success",@"data":@([[WXStorageModule memory] count])});
-    }
-}
-
-- (void)getAllKeys:(WXModuleCallback)callback
-{
-    if (callback) {
-        callback(@{@"result":@"success",@"data":[WXStorageModule memory].allKeys});
-    }
-}
-
-- (void)getItem:(NSString *)key callback:(WXModuleCallback)callback
-{
-    if ([self checkInput:key]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"key must a string or number!"}); // forgive my english
-        }
-        return;
-    }
-    
-    if ([key isKindOfClass:[NSNumber class]]) {
-        key = [((NSNumber *)key) stringValue]; // oh no!
-    }
-    
-    if ([WXUtility isBlankString:key]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"invalid_param"});
-        }
-        return ;
-    }
-    
-    NSString *value = [self.memory objectForKey:key];
-    if ([WXStorageNullValue isEqualToString:value]) {
-        value = [[WXUtility globalCache] objectForKey:key];
-        if (!value) {
-            NSString *filePath = [WXStorageModule filePathForKey:key];
-            NSString *contents = [WXUtility stringWithContentsOfFile:filePath];
-            if (contents) {
-                [[WXUtility globalCache] setObject:contents forKey:key cost:contents.length];
-                value = contents;
-            }
-        }
-    }
-    if (!value) {
-        [self executeRemoveItem:key];
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"undefined"});
-        }
-        return;
-    }
-    [self updateTimestampForKey:key];
-    [self updateIndexForKey:key];
-    if (callback) {
-        callback(@{@"result":@"success",@"data":value});
-    }
-}
-
-- (void)setItem:(NSString *)key value:(NSString *)value callback:(WXModuleCallback)callback
-{
-    if ([self checkInput:key]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"key must a string or number!"});
-        }
-        return;
-    }
-    if ([self checkInput:value]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"value must a string or number!"});
-        }
-        return;
-    }
-    
-    if ([key isKindOfClass:[NSNumber class]]) {
-        key = [((NSNumber *)key) stringValue];
-    }
-    
-    if ([value isKindOfClass:[NSNumber class]]) {
-        value = [((NSNumber *)value) stringValue];
-    }
-    
-    if ([WXUtility isBlankString:key]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"invalid_param"});
-        }
-        return ;
-    }
-    [self setObject:value forKey:key persistent:NO callback:callback];
-}
-
-- (void)setItemPersistent:(NSString *)key value:(NSString *)value callback:(WXModuleCallback)callback
-{
-    if ([self checkInput:key]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"key must a string or number!"});
-        }
-        return;
-    }
-    if ([self checkInput:value]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"value must a string or number!"});
-        }
-        return;
-    }
-    
-    if ([key isKindOfClass:[NSNumber class]]) {
-        key = [((NSNumber *)key) stringValue];
-    }
-    
-    if ([value isKindOfClass:[NSNumber class]]) {
-        value = [((NSNumber *)value) stringValue];
-    }
-    
-    if ([WXUtility isBlankString:key]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"invalid_param"});
-        }
-        return ;
-    }
-    [self setObject:value forKey:key persistent:YES callback:callback];
-}
-
-- (void)removeItem:(NSString *)key callback:(WXModuleCallback)callback
-{
-    if ([self checkInput:key]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"key must a string or number!"});
-        }
-        return;
-    }
-    
-    if ([key isKindOfClass:[NSNumber class]]) {
-        key = [((NSNumber *)key) stringValue];
-    }
-    
-    if ([WXUtility isBlankString:key]) {
-        if (callback) {
-            callback(@{@"result":@"failed",@"data":@"invalid_param"});
-        }
-        return ;
-    }
-    BOOL removed = [self executeRemoveItem:key];
-    if (removed) {
-        if (callback) {
-            callback(@{@"result":@"success"});
-        }
-    } else {
-        if (callback) {
-            callback(@{@"result":@"failed"});
-        }
-    }
-}
-
-- (BOOL)executeRemoveItem:(NSString *)key {
-    if ([WXStorageNullValue isEqualToString:self.memory[key]]) {
-        [self.memory removeObjectForKey:key];
-        NSDictionary *dict = [self.memory copy];
-        [self write:dict toFilePath:[WXStorageModule filePath]];
-        dispatch_async([WXStorageModule storageQueue], ^{
-            NSString *filePath = [WXStorageModule filePathForKey:key];
-            [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
-            [[WXUtility globalCache] removeObjectForKey:key];
-        });
-    } else if (self.memory[key]) {
-        [self.memory removeObjectForKey:key];
-        NSDictionary *dict = [self.memory copy];
-        [self write:dict toFilePath:[WXStorageModule filePath]];
-    } else {
-        return NO;
-    }
-    [self removeInfoForKey:key];
-    [self removeIndexForKey:key];
-    return YES;
-}
-
-#pragma mark - Utils
-- (void)setObject:(NSString *)obj forKey:(NSString *)key persistent:(BOOL)persistent callback:(WXModuleCallback)callback {
-    NSString *filePath = [WXStorageModule filePathForKey:key];
-    if (obj.length <= WXStorageLineLimit) {
-        if ([WXStorageNullValue isEqualToString:self.memory[key]]) {
-            [[WXUtility globalCache] removeObjectForKey:key];
-            [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
-        }
-        self.memory[key] = obj;
-        NSDictionary *dict = [self.memory copy];
-        [self write:dict toFilePath:[WXStorageModule filePath]];
-        [self setInfo:@{@"persistent":@(persistent),@"size":@(obj.length)} ForKey:key];
-        [self updateIndexForKey:key];
-        [self checkStorageLimit];
-        if (callback) {
-            callback(@{@"result":@"success"});
-        }
-        return;
-    }
-    
-    [[WXUtility globalCache] setObject:obj forKey:key cost:obj.length];
-    
-    if (![WXStorageNullValue isEqualToString:self.memory[key]]) {
-        self.memory[key] = WXStorageNullValue;
-        NSDictionary *dict = [self.memory copy];
-        [self write:dict toFilePath:[WXStorageModule filePath]];
-    }
-    
-    dispatch_async([WXStorageModule storageQueue], ^{
-        [obj writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:NULL];
-    });
-    
-    [self setInfo:@{@"persistent":@(persistent),@"size":@(obj.length)} ForKey:key];
-    [self updateIndexForKey:key];
-    
-    [self checkStorageLimit];
-    if (callback) {
-        callback(@{@"result":@"success"});
-    }
-}
-
-- (void)checkStorageLimit {
-    NSInteger size = [self totalSize] - WXStorageTotalLimit;
-    if (size > 0) {
-        [self removeItemsBySize:size];
-    }
-}
-
-- (void)removeItemsBySize:(NSInteger)size {
-    NSArray *indexs = [[self indexs] copy];
-    if (size < 0 || indexs.count == 0) {
-        return;
-    }
-    
-    NSMutableArray *removedKeys = [NSMutableArray array];
-    for (NSInteger i = 0; i < indexs.count; i++) {
-        NSString *key = indexs[i];
-        NSDictionary *info = [self getInfoForKey:key];
-        
-        // persistent data, can't be removed
-        if ([info[@"persistent"] boolValue]) {
-            continue;
-        }
-        
-        [removedKeys addObject:key];
-        size -= [info[@"size"] integerValue];
-        
-        if (size < 0) {
-            break;
-        }
-    }
-    
-    // actually remove data
-    for (NSString *key in removedKeys) {
-        [self executeRemoveItem:key];
-    }
-}
-
-- (void)write:(NSDictionary *)dict toFilePath:(NSString *)filePath{
-    [dict writeToFile:filePath atomically:YES];
-}
-
-+ (NSString *)filePathForKey:(NSString *)key
-{
-    NSString *safeFileName = [WXUtility md5:key];
-    
-    return [[WXStorageModule directory] stringByAppendingPathComponent:safeFileName];
-}
-
-+ (void)setupDirectory{
-    BOOL isDirectory = NO;
-    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[WXStorageModule directory] isDirectory:&isDirectory];
-    if (!isDirectory && !fileExists) {
-        [[NSFileManager defaultManager] createDirectoryAtPath:[WXStorageModule directory]
-                                  withIntermediateDirectories:YES
-                                                   attributes:nil
-                                                        error:NULL];
-    }
-}
-
-+ (NSString *)directory {
-    static NSString *storageDirectory = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        storageDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
-        storageDirectory = [storageDirectory stringByAppendingPathComponent:WXStorageDirectory];
-    });
-    return storageDirectory;
-}
-
-+ (NSString *)filePath {
-    static NSString *storageFilePath = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        storageFilePath = [[WXStorageModule directory] stringByAppendingPathComponent:WXStorageFileName];
-    });
-    return storageFilePath;
-}
-
-+ (NSString *)infoFilePath {
-    static NSString *infoFilePath = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        infoFilePath = [[WXStorageModule directory] stringByAppendingPathComponent:WXStorageInfoFileName];
-    });
-    return infoFilePath;
-}
-
-+ (NSString *)indexFilePath {
-    static NSString *indexFilePath = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        indexFilePath = [[WXStorageModule directory] stringByAppendingPathComponent:WXStorageIndexFileName];
-    });
-    return indexFilePath;
-}
-
-+ (dispatch_queue_t)storageQueue {
-    static dispatch_queue_t storageQueue;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        storageQueue = dispatch_queue_create("com.taobao.weex.storage", DISPATCH_QUEUE_SERIAL);
-    });
-    return storageQueue;
-}
-
-+ (WXThreadSafeMutableDictionary<NSString *, NSString *> *)memory {
-    static WXThreadSafeMutableDictionary<NSString *,NSString *> *memory;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        [WXStorageModule setupDirectory];
-        
-        if ([[NSFileManager defaultManager] fileExistsAtPath:[WXStorageModule filePath]]) {
-            NSDictionary *contents = [NSDictionary dictionaryWithContentsOfFile:[WXStorageModule filePath]];
-            if (contents) {
-                memory = [[WXThreadSafeMutableDictionary alloc] initWithDictionary:contents];
-            }
-        }
-        if (!memory) {
-            memory = [WXThreadSafeMutableDictionary new];
-        }
-//        [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:nil usingBlock:^(__unused NSNotification *note) {
-//            [memory removeAllObjects];
-//        }];
-    });
-    return memory;
-}
-
-+ (WXThreadSafeMutableDictionary<NSString *, NSDictionary *> *)info {
-    static WXThreadSafeMutableDictionary<NSString *,NSDictionary *> *info;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        [WXStorageModule setupDirectory];
-        
-        if ([[NSFileManager defaultManager] fileExistsAtPath:[WXStorageModule infoFilePath]]) {
-            NSDictionary *contents = [NSDictionary dictionaryWithContentsOfFile:[WXStorageModule infoFilePath]];
-            if (contents) {
-                info = [[WXThreadSafeMutableDictionary alloc] initWithDictionary:contents];
-            }
-        }
-        if (!info) {
-            info = [WXThreadSafeMutableDictionary new];
-        }
-    });
-    return info;
-}
-
-+ (WXThreadSafeMutableArray *)indexs {
-    static WXThreadSafeMutableArray *indexs;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        [WXStorageModule setupDirectory];
-        
-        if ([[NSFileManager defaultManager] fileExistsAtPath:[WXStorageModule indexFilePath]]) {
-            NSArray *contents = [NSArray arrayWithContentsOfFile:[WXStorageModule indexFilePath]];
-            if (contents) {
-                indexs = [[WXThreadSafeMutableArray alloc] initWithArray:contents];
-            }
-        }
-        if (!indexs) {
-            indexs = [WXThreadSafeMutableArray new];
-        }
-    });
-    return indexs;
-}
-
-- (WXThreadSafeMutableDictionary<NSString *, NSString *> *)memory {
-    return [WXStorageModule memory];
-}
-
-- (WXThreadSafeMutableDictionary<NSString *, NSDictionary *> *)info {
-    return [WXStorageModule info];
-}
-
-- (WXThreadSafeMutableArray *)indexs {
-    return [WXStorageModule indexs];
-}
-
-- (BOOL)checkInput:(id)input{
-    return !([input isKindOfClass:[NSString class]] || [input isKindOfClass:[NSNumber class]]);
-}
-
-#pragma mark
-#pragma mark - Storage Info method
-- (NSDictionary *)getInfoForKey:(NSString *)key {
-    NSDictionary *info = [[self info] objectForKey:key];
-    if (!info) {
-        return nil;
-    }
-    return info;
-}
-
-- (void)setInfo:(NSDictionary *)info ForKey:(NSString *)key {
-    NSAssert(info, @"info must not be nil");
-    
-    // save info for key
-    NSMutableDictionary *newInfo = [NSMutableDictionary dictionaryWithDictionary:info];
-    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970];
-    [newInfo setObject:@(interval) forKey:@"ts"];
-    
-    [[self info] setObject:[newInfo copy] forKey:key];
-    NSDictionary *dict = [[self info] copy];
-    [self write:dict toFilePath:[WXStorageModule infoFilePath]];
-}
-
-- (void)removeInfoForKey:(NSString *)key {
-    [[self info] removeObjectForKey:key];
-    NSDictionary *dict = [[self info] copy];
-    [self write:dict toFilePath:[WXStorageModule infoFilePath]];
-}
-
-- (void)updateTimestampForKey:(NSString *)key {
-    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970];
-    NSDictionary *info = [[self info] objectForKey:key];
-    if (!info) {
-        info = @{@"persistent":@(NO),@"size":@(0),@"ts":@(interval)};
-    } else {
-        NSMutableDictionary *newInfo = [NSMutableDictionary dictionaryWithDictionary:info];
-        [newInfo setObject:@(interval) forKey:@"ts"];
-        info = [newInfo copy];
-    }
-    
-    [[self info] setObject:info forKey:key];
-    NSDictionary *dict = [[self info] copy];
-    [self write:dict toFilePath:[WXStorageModule infoFilePath]];
-}
-
-- (NSInteger)totalSize {
-    NSInteger totalSize = 0;
-    for (NSDictionary *info in [self info].allValues) {
-        totalSize += (info[@"size"] ? [info[@"size"] integerValue] : 0);
-    }
-    return totalSize;
-}
-
-#pragma mark
-#pragma mark - Storage Index method
-- (void)updateIndexForKey:(NSString *)key {
-    [[self indexs] removeObject:key];
-    [[self indexs] addObject:key];
-    [self write:[[self indexs] copy] toFilePath:[WXStorageModule indexFilePath]];
-}
-
-- (void)removeIndexForKey:(NSString *)key {
-    [[self indexs] removeObject:key];
-    [self write:[[self indexs] copy] toFilePath:[WXStorageModule indexFilePath]];
-}
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h
deleted file mode 100644
index 41aef2b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXStreamModule : NSObject <WXModuleProtocol>
-
-- (void)fetch:(NSDictionary *)options callback:(WXModuleKeepAliveCallback)callback progressCallback:(WXModuleKeepAliveCallback)progressCallback;
-- (void)sendHttp:(NSDictionary*)param callback:(WXModuleKeepAliveCallback)callback DEPRECATED_MSG_ATTRIBUTE("Use fetch method instead.");
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m
deleted file mode 100644
index fa1e303..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXStreamModule.h"
-#import "WXSDKManager.h"
-#import "WXUtility.h"
-#import "WXHandlerFactory.h"
-#import "WXNetworkProtocol.h"
-#import "WXURLRewriteProtocol.h"
-#import "WXResourceLoader.h"
-#import "WXSDKEngine.h"
-#import "WXSDKInstance_performance.h"
-#import "WXMonitor.h"
-
-@implementation WXStreamModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(sendHttp:callback:))
-WX_EXPORT_METHOD(@selector(fetch:callback:progressCallback:))
-WX_EXPORT_METHOD(@selector(fetchWithArrayBuffer:options:callback:progressCallback:))
-
-- (void)fetch:(NSDictionary *)options callback:(WXModuleKeepAliveCallback)callback progressCallback:(WXModuleKeepAliveCallback)progressCallback
-{
-    __block NSInteger received = 0;
-    __block NSHTTPURLResponse *httpResponse = nil;
-    __block NSMutableDictionary * callbackRsp =[[NSMutableDictionary alloc] init];
-    __block NSString *statusText = @"ERR_CONNECT_FAILED";
-    
-    //build stream request
-    WXResourceRequest * request = [self _buildRequestWithOptions:options callbackRsp:callbackRsp];
-    if (!request) {
-        if (callback) {
-            callback(callbackRsp, NO);
-        }
-        // failed with some invaild inputs
-        return ;
-    }
-    
-    // notify to start request state
-    if (progressCallback) {
-        progressCallback(callbackRsp, TRUE);
-    }
-    
-    WXResourceLoader *loader = [[WXResourceLoader alloc] initWithRequest:request];
-    __weak typeof(self) weakSelf = self;
-    loader.onResponseReceived = ^(const WXResourceResponse *response) {
-        httpResponse = (NSHTTPURLResponse*)response;
-        if (weakSelf) {
-            [callbackRsp setObject:@{ @"HEADERS_RECEIVED" : @2 } forKey:@"readyState"];
-            [callbackRsp setObject:[NSNumber numberWithInteger:httpResponse.statusCode] forKey:@"status"];
-            [callbackRsp setObject:httpResponse.allHeaderFields forKey:@"headers"];
-            statusText = [WXStreamModule _getStatusText:httpResponse.statusCode];
-            [callbackRsp setObject:statusText forKey:@"statusText"];
-            [callbackRsp setObject:[NSNumber numberWithInteger:received] forKey:@"length"];
-            if (progressCallback) {
-                progressCallback(callbackRsp, TRUE);
-            }
-        }
-    };
-    
-    loader.onDataReceived = ^(NSData *data) {
-        if (weakSelf) {
-            [callbackRsp setObject:@{ @"LOADING" : @3 } forKey:@"readyState"];
-            received += [data length];
-            [callbackRsp setObject:[NSNumber numberWithInteger:received] forKey:@"length"];
-            if (progressCallback) {
-                progressCallback(callbackRsp, TRUE);
-            }
-        }
-    };
-    
-    loader.onFinished = ^(const WXResourceResponse * response, NSData *data) {
-        if (weakSelf && callback) {
-             [weakSelf _loadFinishWithResponse:[response copy] data:data callbackRsp:callbackRsp];
-             callback(callbackRsp, NO);
-        }
-    };
-    
-    loader.onFailed = ^(NSError *error) {
-        if (weakSelf && callback) {
-            [weakSelf _loadFailedWithError:error callbackRsp:callbackRsp];
-            callback(callbackRsp, NO);
-        }
-    };
-    
-    [loader start];
-}
-
-- (void)fetchWithArrayBuffer:(id)arrayBuffer options:(NSDictionary *)options callback:(WXModuleKeepAliveCallback)callback progressCallback:(WXModuleKeepAliveCallback)progressCallback
-{
-    NSMutableDictionary *newOptions = [options mutableCopy];
-    if([arrayBuffer isKindOfClass:[NSDictionary class]]){
-        NSData *sendData = [WXUtility base64DictToData:arrayBuffer];
-        if(sendData){
-            [newOptions setObject:sendData forKey:@"body"];
-        }
-    }
-    [self fetch:newOptions callback:callback progressCallback:progressCallback];
-}
-
-- (WXResourceRequest*)_buildRequestWithOptions:(NSDictionary*)options callbackRsp:(NSMutableDictionary*)callbackRsp
-{
-    // parse request url
-    NSString *urlStr = [options objectForKey:@"url"];
-    if (![urlStr isKindOfClass:[NSString class]]) {
-        if (callbackRsp) {
-            [callbackRsp setObject:@(-1) forKey:@"status"];
-            [callbackRsp setObject:@NO forKey:@"ok"];
-        }
-        return nil;
-    }
-    
-    NSString *newURL = [urlStr copy];
-    WX_REWRITE_URL(urlStr, WXResourceTypeLink, self.weexInstance)
-    urlStr = newURL;
-    
-    if (!options || [WXUtility isBlankString:urlStr]) {
-        [callbackRsp setObject:@(-1) forKey:@"status"];
-        [callbackRsp setObject:@NO forKey:@"ok"];
-        
-        return nil;
-    }
-    
-    if (self.weexInstance && !weexInstance.isJSCreateFinish) {
-        self.weexInstance.performance.fsReqNetNum++;
-    }
-    
-    WXResourceRequest *request = [WXResourceRequest requestWithURL:[NSURL URLWithString:urlStr] resourceType:WXResourceTypeOthers referrer:nil cachePolicy:NSURLRequestUseProtocolCachePolicy];
-    
-    // parse http method
-    NSString *method = [options objectForKey:@"method"];
-    if ([WXUtility isBlankString:method]) {
-        // default HTTP method is GET
-        method = @"GET";
-    }
-    request.HTTPMethod = method;
-    
-    //parse responseType
-    NSString *responseType = [options objectForKey:@"type"];
-    if ([responseType isKindOfClass:[NSString class]]) {
-        [callbackRsp setObject:responseType? responseType.lowercaseString:@"" forKey:@"responseType"];
-    }
-    
-    //parse timeout
-    if ([options valueForKey:@"timeout"]){
-        //the time unit is ms
-        [request setTimeoutInterval:([[options valueForKey:@"timeout"] floatValue])/1000];
-    }
-    
-    //install client userAgent
-    request.userAgent = [WXUtility userAgent];
-    
-    // parse custom http headers
-    NSDictionary *headers = [options objectForKey:@"headers"];
-    for (NSString *header in headers) {
-        NSString *value = [headers objectForKey:header];
-        [request setValue:value forHTTPHeaderField:header];
-    }
-    
-    //parse custom body
-    if ([options objectForKey:@"body"]) {
-        NSData * body = nil;
-        if ([[options objectForKey:@"body"] isKindOfClass:[NSString class]]) {
-            // compatible with the string body
-            body = [[options objectForKey:@"body"] dataUsingEncoding:NSUTF8StringEncoding];
-        }
-        if ([[options objectForKey:@"body"] isKindOfClass:[NSDictionary class]]) {
-            body = [[WXUtility JSONString:[options objectForKey:@"body"]] dataUsingEncoding:NSUTF8StringEncoding];
-        }
-        if (!body) {
-            [callbackRsp setObject:@(-1) forKey:@"status"];
-            [callbackRsp setObject:@NO forKey:@"ok"];
-            return nil;
-        }
-        
-        [request setHTTPBody:body];
-    }
-    
-    [callbackRsp setObject:@{ @"OPENED": @1 } forKey:@"readyState"];
-    
-    return request;
-}
-
-- (void)_loadFailedWithError:(NSError*)error callbackRsp:(NSMutableDictionary*)callbackRsp
-{
-    [callbackRsp removeObjectForKey:@"readyState"];
-    [callbackRsp removeObjectForKey:@"length"];
-    [callbackRsp removeObjectForKey:@"keepalive"];
-    [callbackRsp removeObjectForKey:@"responseType"];
-    
-    [callbackRsp setObject:@(-1) forKey:@"status"];
-    [callbackRsp setObject:[NSString stringWithFormat:@"%@(%ld)",[error localizedDescription], (long)[error code]] forKey:@"data"];
-    NSString * statusText = @"";
-    
-    switch ([error code]) {
-        case -1000:
-        case -1002:
-        case -1003:
-            statusText = @"ERR_INVALID_REQUEST";
-            break;
-        default:
-            break;
-    }
-    [callbackRsp setObject:statusText forKey:@"statusText"];
-    
-}
-- (void)_loadFinishWithResponse:(WXResourceResponse*)response data:(NSData*)data callbackRsp:(NSMutableDictionary*)callbackRsp
-{
-    [callbackRsp removeObjectForKey:@"readyState"];
-    [callbackRsp removeObjectForKey:@"length"];
-    [callbackRsp removeObjectForKey:@"keepalive"];
-    
-    [callbackRsp setObject:((NSHTTPURLResponse*)response).statusCode >= 200 && ((NSHTTPURLResponse*)response).statusCode <= 299 ? @YES : @NO forKey:@"ok"];
-    
-    NSString *responseData = [self _stringfromData:data encode:((NSHTTPURLResponse*)response).textEncodingName];
-    NSString * responseType = [callbackRsp objectForKey:@"responseType"];
-    [callbackRsp removeObjectForKey:@"responseType"];
-    if ([responseType isEqualToString:@"json"] || [responseType isEqualToString:@"jsonp"]) {
-        //handle json format
-        if ([responseType isEqualToString:@"jsonp"]) {
-            //TODO: to be more elegant
-            NSUInteger start = [responseData rangeOfString:@"("].location + 1 ;
-            NSUInteger end = [responseData rangeOfString:@")" options:NSBackwardsSearch].location;
-            if (end < [responseData length] && end > start) {
-                responseData = [responseData substringWithRange:NSMakeRange(start, end-start)];
-            }
-        }
-        id jsonObj = [self _JSONObjFromData:[responseData dataUsingEncoding:NSUTF8StringEncoding]];
-        if (jsonObj) {
-            [callbackRsp setObject:jsonObj forKey:@"data"];
-        }
-        
-    } else {
-        // return original Data
-        if (responseData) {
-            [callbackRsp setObject:responseData forKey:@"data"];
-        }
-    }
-}
-
-- (NSString*)_stringfromData:(NSData *)data encode:(NSString *)encoding
-{
-    NSMutableString *responseData = nil;
-    if (data) {
-        if (!encoding) {
-            encoding = @"utf-8";
-        }
-        CFStringEncoding cfStrEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)encoding);
-        if (cfStrEncoding == kCFStringEncodingInvalidId) {
-            WXLogError(@"not supported encode");
-        } else {
-            NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(cfStrEncoding);
-            responseData = [[NSMutableString alloc]initWithData:data encoding:encoding];
-        }
-    }
-    return responseData;
-}
-
-- (id)_JSONObjFromData:(NSData *)data
-{
-    NSError * error = nil;
-    id jsonObj = [WXUtility JSONObject:data error:&error];
-    if (error) {
-        WXLogDebug(@"%@", [error description]);
-    }
-    return jsonObj;
-}
-
-+ (NSString*)_getStatusText:(NSInteger)code
-{    
-    switch (code) {
-        case -1:
-            return @"ERR_INVALID_REQUEST";
-        case 100:
-            return @"Continue";
-            break;
-        case 101:
-            return @"Switching Protocol";
-        case 102:
-            return @"Processing";
-            
-        case 200:
-            return @"OK";
-        case 201:
-            return @"Created";
-        case 202:
-            return @"Accepted";
-        case 203:
-            return @"Non-Authoritative Information";
-        case 204:
-            return @"No Content";
-        case 205:
-            return @" Reset Content";
-        case 206:
-            return @"Partial Content";
-        case 207:
-            return @"Multi-Status";
-        case 208:
-            return @"Already Reported";
-        case 226:
-            return @"IM Used";
-            
-        case 300:
-            return @"Multiple Choices";
-        case 301:
-            return @"Moved Permanently";
-        case 302:
-            return @"Found";
-        case 303:
-            return @"See Other";
-        case 304:
-            return @"Not Modified";
-        case 305:
-            return @"Use Proxy";
-        case 306:
-            return @"Switch Proxy";
-        case 307:
-            return @"Temporary Redirect";
-        case 308:
-            return @"Permanent Redirect";
-            
-        case 400:
-            return @"Bad Request";
-        case 401:
-            return @"Unauthorized";
-        case 402:
-            return @"Payment Required";
-        case 403:
-            return @"Forbidden";
-        case 404:
-            return @"Not Found";
-        case 405:
-            return @"Method Not Allowed";
-        case 406:
-            return @"Not Acceptable";
-        case 407:
-            return @"Proxy Authentication Required";
-        case 408:
-            return @"Request Timeout";
-        case 409:
-            return @"Conflict";
-        case 410:
-            return @"Gone";
-        case 411:
-            return @"Length Required";
-        case 412:
-            return @"Precondition Failed";
-        case 413:
-            return @"Payload Too Large";
-        case 414:
-            return @"URI Too Long";
-        case 415:
-            return @"Unsupported Media Type";
-        case 416:
-            return @"Range Not Satisfiable";
-        case 417:
-            return @"Expectation Failed";
-        case 418:
-            return @"I'm a teapot";
-        case 421:
-            return @"Misdirected Request";
-        case 422:
-            return @"Unprocessable Entity";
-        case 423:
-            return @"Locked";
-        case 424:
-            return @"Failed Dependency";
-        case 426:
-            return @"Upgrade Required";
-        case 428:
-            return @"Precondition Required";
-        case 429:
-            return @"Too Many Requests";
-        case 431:
-            return @"Request Header Fields Too Large";
-        case 451:
-            return @"Unavailable For Legal Reasons";
-            
-        case 500:
-            return @"Internal Server Error";
-        case 501:
-            return @"Not Implemented";
-        case 502:
-            return @"Bad Gateway";
-        case 503:
-            return @"Service Unavailable";
-        case 504:
-            return @"Gateway Timeout";
-        case 505:
-            return @"HTTP Version Not Supported";
-        case 506:
-            return @"Variant Also Negotiates";
-        case 507:
-            return @"Insufficient Storage";
-        case 508:
-            return @"Loop Detected";
-        case 510:
-            return @"Not Extended";
-        case 511:
-            return @"Network Authentication Required";
-        default:
-            break;
-    }
-    
-    return @"Unknown";
-}
-
-#pragma mark - Deprecated
-
-- (void)sendHttp:(NSDictionary*)param callback:(WXModuleKeepAliveCallback)callback
-{
-    NSString* method = [param objectForKey:@"method"];
-    NSString* urlStr = [param objectForKey:@"url"];
-    NSDictionary* headers = [param objectForKey:@"header"];
-    NSString* body = [param objectForKey:@"body"];
-    
-    NSURL *url = [NSURL URLWithString:urlStr];
-    
-    //TODO:referrer
-    WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeOthers referrer:nil cachePolicy:NSURLRequestUseProtocolCachePolicy];
-    request.HTTPMethod = method;
-    request.timeoutInterval = 60.0;
-    request.userAgent = [WXUtility userAgent];
-    
-    for (NSString *key in headers) {
-        NSString *value = [headers objectForKey:key];
-        [request setValue:value forHTTPHeaderField:key];
-    }
-    [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
-    
-    WXResourceLoader *loader = [[WXResourceLoader alloc] initWithRequest:request];
-    loader.onFinished = ^(const WXResourceResponse * response, NSData *data) {
-        NSString* responseData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-        callback(responseData,NO);
-    };
-    
-    loader.onFailed = ^(NSError *error) {
-        if (callback) {
-            callback(nil,NO);
-        }
-    };
-
-    [loader start];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h
deleted file mode 100644
index dab8601..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXTimerModule : NSObject <WXModuleProtocol>
-
-- (NSMutableDictionary *)timers;
-
-- (void)createTimerWithCallback:(NSString *)callbackID time:(NSTimeInterval)milliseconds target:(id)target selector:(SEL)selector shouldRepeat:(BOOL)shouldRepeat;
-
-- (void)clearTimeout:(NSString *)callbackID;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
deleted file mode 100644
index e6c158f..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXTimerModule.h"
-#import "WXSDKManager.h"
-#import "WXLog.h"
-#import "WXAssert.h"
-#import "WXMonitor.h"
-#import "WXSDKInstance_performance.h"
-#import "WXSDKError.h"
-#import "WXExceptionUtils.h"
-
-@interface WXTimerTarget : NSObject
-
-- (instancetype)initWithCallback:(NSString *)callbackID shouldRepeat:(BOOL)shouldRepeat weexInstance:(WXSDKInstance *)weexInstance;
-
-@end
-
-@implementation WXTimerTarget
-{
-    NSString * _callbackID;
-    __weak WXSDKInstance *_weexInstance;
-    BOOL _shouldRepeat;
-}
-
-- (instancetype)initWithCallback:(NSString *)callbackID shouldRepeat:(BOOL)shouldRepeat weexInstance:(WXSDKInstance *)weexInstance
-{
-    if (self = [super init]) {
-        _callbackID = callbackID;
-        _weexInstance = weexInstance;
-        _shouldRepeat = shouldRepeat;
-        
-        if (weexInstance && !weexInstance.isJSCreateFinish) {
-            weexInstance.performance.timerNum++;
-            [weexInstance.apmInstance updateFSDiffStats:KEY_PAGE_STATS_FS_TIMER_NUM withDiffValue:1];
-        }
-    }
-    
-    return self;
-}
-
-- (void)trigger
-{
-    [[WXSDKManager bridgeMgr] callBack:_weexInstance.instanceId funcId:_callbackID params:nil keepAlive:_shouldRepeat];
-}
-
-+ (void) checkExcuteInBack:(NSString*) instanceId
-{
-    //todo,if instance is nil or instance has detroy ,can't record timer in back.....
-    WXSDKInstance* instance = [WXSDKManager instanceForID:instanceId];
-    if (nil == instance) {
-        return;
-    }
-    if (instance.state == WeexInstanceBackground || instance.state == WeexInstanceDisappear
-        || instance.state == WeexInstanceDestroy) {
-        [instance.apmInstance updateDiffStats:KEY_PAGE_TIMER_BACK_NUM withDiffValue:1];
-    }
-}
-
-@end
-
-@implementation WXTimerModule
-{
-    BOOL _tooManyTimersReported;
-    NSMutableDictionary *_timers;
-}
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(setTimeout:time:))
-WX_EXPORT_METHOD(@selector(clearTimeout:))
-WX_EXPORT_METHOD(@selector(setInterval:time:))
-WX_EXPORT_METHOD(@selector(clearInterval:))
-
-- (instancetype)init
-{
-    if (self = [super init]) {
-        _timers = [NSMutableDictionary dictionary];
-    }
-    
-    return self;
-}
-
-- (void)createTimerWithCallback:(NSString *)callbackID time:(NSTimeInterval)milliseconds shouldRepeat:(BOOL)shouldRepeat
-{
-    WXAssert(callbackID, @"callbackID for timer must not be nil.");
-    
-    if (milliseconds == 0 && !shouldRepeat) {
-        [[WXSDKManager bridgeMgr] callBack:self.weexInstance.instanceId funcId:callbackID params:nil keepAlive:NO];
-    }
-    
-    WXTimerTarget *target = [[WXTimerTarget alloc] initWithCallback:callbackID shouldRepeat:shouldRepeat weexInstance:self.weexInstance];
-    
-    [self createTimerWithCallback:callbackID time:milliseconds target:target selector:@selector(trigger) shouldRepeat:shouldRepeat];
-}
-
-# pragma mark Timer API
-
-- (void)setTimeout:(NSString *)callbackID time:(NSTimeInterval)time
-{
-    [self createTimerWithCallback:callbackID time:time shouldRepeat:NO];
-}
-
-- (void)setInterval:(NSString *)callbackID time:(NSTimeInterval)time
-{
-    [self createTimerWithCallback:callbackID time:time shouldRepeat:YES];
-}
-
-- (void)clearTimeout:(NSString *)callbackID
-{
-    if (!callbackID) {
-        WXLogError(@"no callbackID for clearTimeout/clearInterval");
-        return;
-    }
-    
-    NSTimer *timer = _timers[callbackID];
-    if (!timer) {
-        WXLogWarning(@"no timer found for callbackID:%@", callbackID);
-        return;
-    }
-
-    [timer invalidate];
-    [_timers removeObjectForKey:callbackID];
-}
-
-- (void)clearInterval:(NSString *)callbackID
-{
-    [self clearTimeout:callbackID];
-}
-
-- (void)dealloc
-{
-    if (_timers) {
-        for (NSString *callbackID in _timers) {
-            NSTimer *timer = _timers[callbackID];
-            [timer invalidate];
-        }
-        if([_timers count]>0){
-             [_timers removeAllObjects];
-        }
-        _timers = nil;
-    }
-}
-
-# pragma mark Unit Test
-
-- (void)createTimerWithCallback:(NSString *)callbackID time:(NSTimeInterval)milliseconds target:(id)target selector:(SEL)selector shouldRepeat:(BOOL)shouldRepeat {
-    
-    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:milliseconds/1000.0f target:target selector:selector userInfo:nil repeats:shouldRepeat];
-    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
-    
-    if (!_timers[callbackID]) {
-        _timers[callbackID] = timer;
-        
-        if ([_timers count] > 30) {
-            // remove invalid timers
-            NSMutableArray* invalidTimerIds = [[NSMutableArray alloc] init];
-            for (NSString *cbId in _timers) {
-                NSTimer *timer = _timers[cbId];
-                if (![timer isValid]) {
-                    [invalidTimerIds addObject:cbId];
-                }
-            }
-            [_timers removeObjectsForKeys:invalidTimerIds];
-            
-            // If alive timer count still exceeds 30, we report once for this page.
-            if ([_timers count] > 30) {
-                if (!_tooManyTimersReported) {
-                    [WXExceptionUtils commitCriticalExceptionRT:self.weexInstance.instanceId errCode:[NSString stringWithFormat:@"%d", WX_KEY_EXCEPTION_TOO_MANY_TIMERS] function:@"" exception:@"Too many timers." extParams:nil];
-                    _tooManyTimersReported = YES;
-                }
-            }
-        }
-    }
-}
-
-- (NSMutableDictionary *)timers
-{
-    return _timers;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTransition.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTransition.h
deleted file mode 100644
index 70ec131..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTransition.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#define kWXTransitionDuration                   @"transitionDuration"
-#define kWXTransitionProperty                   @"transitionProperty"
-#define kWXTransitionDelay                      @"transitionDelay"
-#define kWXTransitionTimingFunction             @"transitionTimingFunction"
-
-typedef NS_OPTIONS(NSUInteger, WXTransitionOptions) {
-    WXTransitionOptionsNone             = 0,
-    WXTransitionOptionsWidth            = 1 << 0,
-    WXTransitionOptionsHeight           = 1 << 1,
-    WXTransitionOptionsRight            = 1 << 2,
-    WXTransitionOptionsLeft             = 1 << 3,
-    WXTransitionOptionsBottom           = 1 << 4,
-    WXTransitionOptionsTop              = 1 << 5,
-    WXTransitionOptionsBackgroundColor  = 1 << 6,
-    WXTransitionOptionsTransform        = 1 << 7,
-    WXTransitionOptionsOpacity          = 1 << 8
-};
-
-
-@interface WXTransitionInfo : NSObject
-@property (nonatomic, strong) id fromValue;
-@property (nonatomic, strong) id toValue;
-@property (nonatomic, strong) id perValue;
-@property (nonatomic, strong) NSString *propertyName;
-@end
-
-@interface WXTransition : NSObject
-@property (nonatomic,strong) NSMutableDictionary *oldFilterStyles;
-@property (nonatomic,strong) NSMutableDictionary *filterStyles;
-@property (nonatomic,strong) NSMutableArray *propertyArray;
-@property (nonatomic,assign) WXTransitionOptions transitionOptions;
-- (instancetype) initWithStyles:(NSDictionary *)styles;
-- (void)_handleTransitionWithStyles:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles  target:(WXComponent *)targetComponent;
-- (BOOL)_hasTransitionOptionInStyles:(NSDictionary *)styles;
-@end
-
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm
deleted file mode 100644
index 15a9e11..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXTransition.mm
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#define SOLVE_EPS(dur) (1. / (1000. * (dur)))
-
-#import <QuartzCore/CATransaction.h>
-#import <QuartzCore/CADisplayLink.h>
-#import "WXComponentManager.h"
-#import "WXSDKInstance.h"
-#import "WXComponent+Layout.h"
-#import "WXComponent_internal.h"
-#import "WXTransition.h"
-#import "WXUtility.h"
-#import "WXAssert.h"
-#import "WXSDKInstance_private.h"
-#import "WXLength.h"
-
-@implementation WXTransitionInfo
-@end
-
-@interface WXTransition()
-{
-    double ax;
-    double bx;
-    double cx;
-    
-    double ay;
-    double by;
-    double cy;
-    
-    float _transitionDuration;
-    float _transitionDelay;
-    NSUInteger _transitionCount;
-    
-    CAMediaTimingFunction *_transitionTimingFunction;
-    CADisplayLink *_transitionDisplayLink;
-
-    NSMutableDictionary *_filterStyles;
-    NSMutableDictionary *_oldFilterStyles;
-}
-@property (nonatomic,weak) WXComponent *targetComponent;
-@end
-
-@implementation WXTransition
-
-- (instancetype)initWithStyles:(NSDictionary *)styles
-{
-    if (self = [super init]) {
-        NSString *property = styles[kWXTransitionProperty];
-        NSArray *properties = [property componentsSeparatedByString:@","];
-        for (NSString *string in properties) {
-            _transitionOptions |= [self transitionOptionsFromString:string];
-        }
-    }
-    return self;
-}
-
-#pragma mark - HandleStyle
-- (WXTransitionOptions)transitionOptionsFromString:(NSString *)string
-{
-    static NSDictionary<NSString*, NSNumber*> *options = @{
-                                                           @"width": @(WXTransitionOptionsWidth),
-                                                           @"height": @(WXTransitionOptionsHeight),
-                                                           @"right": @(WXTransitionOptionsRight),
-                                                           @"left": @(WXTransitionOptionsLeft),
-                                                           @"bottom": @(WXTransitionOptionsBottom),
-                                                           @"top": @(WXTransitionOptionsTop),
-                                                           @"backgroundColor": @(WXTransitionOptionsBackgroundColor),
-                                                           @"transform": @(WXTransitionOptionsTransform),
-                                                           @"opacity": @(WXTransitionOptionsOpacity)
-                                                           };
-    return options[string].integerValue;
-}
-
-- (void)_handleTransitionWithStyles:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles target:(WXComponent *)targetComponent
-{
-    BOOL isRunning = [self _isTransitionRunning];
-    if (isRunning) {
-        [self _rollBackTransitionWithStyles:styles];
-    }
-    else
-    {
-        [self _suspendTransitionDisplayLink];
-    }
-    
-    if (!targetComponent) {
-        return;
-    }
-    
-    _filterStyles = _filterStyles ?:[NSMutableDictionary new];
-    _oldFilterStyles = _oldFilterStyles ?: [NSMutableDictionary new];
-    NSMutableDictionary *futileStyles = [NSMutableDictionary new];
-    
-    for (NSString *key in styles) {
-        if (self.transitionOptions & [self transitionOptionsFromString:key]) {
-            [_filterStyles setObject:styles[key] forKey:key];
-            if (![key isEqualToString:@"transform"]) {
-                if (!isRunning) {
-                    /* style value may not be in component.styles, so we must get
-                     value from layout and convert it to style value. */
-                    id styleValue = targetComponent.styles[key];
-                    if (styleValue == nil) {
-                        styleValue = [targetComponent convertLayoutValueToStyleValue:key];
-                    }
-                    [_oldFilterStyles setObject:styleValue forKey:key];
-                }
-            }
-        }
-        else
-        {
-            [futileStyles setObject:styles[key] forKey:key];
-        }
-    }
-    [self updateFutileStyles:futileStyles resetStyles:nil target:targetComponent];
-
-    _targetComponent = targetComponent;
-    NSMutableDictionary *componentStyles = [NSMutableDictionary dictionaryWithDictionary:styles];
-    [componentStyles addEntriesFromDictionary:targetComponent.styles];
-
-    _transitionDuration = componentStyles[kWXTransitionDuration] ? [WXConvert CGFloat:componentStyles[kWXTransitionDuration]] : 0;
-    _transitionDelay = componentStyles[kWXTransitionDelay] ? [WXConvert CGFloat:componentStyles[kWXTransitionDelay]] : 0;
-    _transitionTimingFunction = [WXConvert CAMediaTimingFunction:componentStyles[kWXTransitionTimingFunction]];
-    
-    if (_transitionDuration == 0 ) {
-        [self updateFutileStyles:_filterStyles resetStyles:nil target:targetComponent];
-        return;
-    }
-    
-    if (![[NSString stringWithFormat:@"%@",_transitionTimingFunction] isEqualToString: kCAMediaTimingFunctionLinear]) {
-        float vec[4] = {0.};
-        [_transitionTimingFunction getControlPointAtIndex:1 values:&vec[0]];
-        [_transitionTimingFunction getControlPointAtIndex:2 values:&vec[2]];
-        [self unitBezierp1x:vec[0] p1y:vec[1] p2x:vec[2] p2y:vec[3]];
-    }
-    
-    [self _resloveTransitionProperty];
-    [self performSelector:@selector(_startTransitionDisplayLink) withObject:self afterDelay:_transitionDelay/1000];
-}
-
-- (BOOL)_hasTransitionOptionInStyles:(NSDictionary *)styles
-{
-    for (NSString *key in styles) {
-        if (self.transitionOptions & [self transitionOptionsFromString:key]) {
-            return YES;
-        }
-    }
-    return NO;
-}
-
-- (void)updateFutileStyles:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles target:(WXComponent *)targetComponent
-{
-    if (!targetComponent) {
-        return;
-    }
-    [targetComponent _updateCSSNodeStyles:styles];
-    [targetComponent _resetCSSNodeStyles:resetStyles];
-    WXPerformBlockOnMainThread(^{
-        [targetComponent _updateViewStyles:styles];
-    });
-}
-
-- (void)_rollBackTransitionWithStyles:(NSDictionary *)styles
-{
-    _transitionDuration = _transitionCount * 1000 / 60;
-    _transitionCount = 0;
-    _propertyArray = nil;
-}
-
-- (void)_resloveTransitionProperty
-{
-    if (_filterStyles.count == 0) {
-        return;
-    }
-    for (NSString * name  in _filterStyles.allKeys) {
-        [self _dealTransitionWithProperty:name];
-    }
-}
-
-- (void)_dealTransitionWithProperty:(NSString *)singleProperty
-{
-    if (_filterStyles[singleProperty])
-    {
-        if (!_propertyArray) {
-            _propertyArray = [NSMutableArray new];
-        }
-        if ([singleProperty isEqualToString:@"backgroundColor"]) {
-            WXTransitionInfo *info = [WXTransitionInfo new];
-            info.fromValue = [self _dealWithColor:[WXConvert UIColor:_oldFilterStyles[singleProperty]]];
-            info.toValue = [self _dealWithColor:[WXConvert UIColor:_filterStyles[singleProperty]]];
-            info.perValue = [self _calculatePerColorRGB1:info.toValue RGB2:info.fromValue];
-            info.propertyName = singleProperty;
-            [_propertyArray addObject:info];
-        }
-        else if ([singleProperty isEqualToString:@"transform"]) {
-            NSString *transformOrigin = _filterStyles[@"transformOrigin"];
-            WXTransform *wxTransform = [[WXTransform alloc] initWithCSSValue:_filterStyles[singleProperty] origin:transformOrigin instance:_targetComponent.weexInstance];
-            WXTransform *oldTransform = _targetComponent?_targetComponent->_transform:wxTransform;
-            if (wxTransform.rotateAngle != oldTransform.rotateAngle) {
-                WXTransitionInfo *info = [WXTransitionInfo new];
-                info.propertyName = @"transform.rotation";
-                info.fromValue = @(oldTransform.rotateAngle);
-                info.toValue = [NSNumber numberWithDouble:wxTransform.rotateAngle];
-                info.perValue = @([info.toValue doubleValue] - [info.fromValue doubleValue]);
-                [_propertyArray addObject:info];
-            }
-            if (wxTransform.rotateX != oldTransform.rotateX)
-            {
-                WXTransitionInfo *info = [WXTransitionInfo new];
-                info.propertyName = @"transform.rotation.x";
-                info.fromValue = @(oldTransform.rotateX);
-                info.toValue = [NSNumber numberWithDouble:wxTransform.rotateX];
-                info.perValue = @([info.toValue doubleValue] - [info.fromValue doubleValue]);
-                [_propertyArray addObject:info];
-            }
-            if (wxTransform.rotateY != oldTransform.rotateY)
-            {
-                WXTransitionInfo *info = [WXTransitionInfo new];
-                info.propertyName = @"transform.rotation.y";
-                info.fromValue = @(oldTransform.rotateY);
-                info.toValue = [NSNumber numberWithDouble:wxTransform.rotateY];
-                info.perValue = @([info.toValue doubleValue] - [info.fromValue doubleValue]);
-                [_propertyArray addObject:info];
-            }
-            if (wxTransform.rotateZ != oldTransform.rotateZ)
-            {
-                WXTransitionInfo *info = [WXTransitionInfo new];
-                info.propertyName = @"transform.rotation.z";
-                info.fromValue = @(oldTransform.rotateZ);
-                info.toValue = [NSNumber numberWithDouble:wxTransform.rotateZ];
-                info.perValue = @([info.toValue doubleValue] - [info.fromValue doubleValue]);
-                [_propertyArray addObject:info];
-            }
-            if (wxTransform.scaleX != oldTransform.scaleX) {
-                WXTransitionInfo *info = [WXTransitionInfo new];
-                info.propertyName = @"transform.scale.x";
-                info.fromValue = @(oldTransform.scaleX);
-                info.toValue = @(wxTransform.scaleX);
-                info.perValue = @([info.toValue doubleValue] - [info.fromValue doubleValue]);
-                [_propertyArray addObject:info];
-            }
-            if (wxTransform.scaleY != oldTransform.scaleY) {
-                WXTransitionInfo *info = [WXTransitionInfo new];
-                info.propertyName = @"transform.scale.y";
-                info.fromValue = @(oldTransform.scaleY);
-                info.toValue = @(wxTransform.scaleY);
-                info.perValue = @([info.toValue doubleValue] - [info.fromValue doubleValue]);
-                [_propertyArray addObject:info];
-            }
-            if (wxTransform.translateX && [wxTransform.translateX floatValue] !=[oldTransform.translateX floatValue]) {
-                WXTransitionInfo *info = [WXTransitionInfo new];
-                info.propertyName = @"transform.translation.x";
-                info.fromValue = @([oldTransform.translateX floatValue]);
-                info.toValue = @([wxTransform.translateX floatValue]);
-                info.perValue = @([wxTransform.translateX floatValue] - [oldTransform.translateX floatValue]);
-                [_propertyArray addObject:info];
-            }
-            if (wxTransform.translateY && [wxTransform.translateY floatValue] !=[oldTransform.translateY floatValue]) {
-                WXTransitionInfo *info = [WXTransitionInfo new];
-                info.propertyName = @"transform.translation.y";
-                info.fromValue = @([oldTransform.translateY floatValue]);
-                info.toValue = @([wxTransform.translateY floatValue]);
-                info.perValue = @([wxTransform.translateY floatValue] - [oldTransform.translateY floatValue]);
-                [_propertyArray addObject:info];
-            }
-            _targetComponent.transform = wxTransform;
-        }
-        else
-        {
-            WXTransitionInfo *info = [WXTransitionInfo new];
-            info.fromValue = @(_oldFilterStyles[singleProperty] ? [WXConvert CGFloat:_oldFilterStyles[singleProperty]] : 0);
-            info.toValue = @(_filterStyles[singleProperty] ? [WXConvert CGFloat:_filterStyles[singleProperty]] : 0 );
-            info.perValue = @([info.toValue doubleValue] - [info.fromValue doubleValue]);
-            info.propertyName = singleProperty;
-            [_propertyArray addObject:info];
-        }
-    }
-}
-
-- (NSArray *)_dealWithColor:(UIColor *)color
-{
-    CGFloat R, G, B, A;
-    [color getRed:&R green:&G blue:&B alpha:&A];
-    return @[@(R),@(G),@(B),@(A)];
-}
-
-- (NSArray *)_calculatePerColorRGB1:(NSArray *)RGB1 RGB2:(NSArray *)RGB2
-{
-    CGFloat R = [RGB1[0] doubleValue] - [RGB2[0] doubleValue];
-    CGFloat G = [RGB1[1] doubleValue] - [RGB2[1] doubleValue];
-    CGFloat B = [RGB1[2] doubleValue] - [RGB2[2] doubleValue];
-    CGFloat A = [RGB1[3] doubleValue] - [RGB2[3] doubleValue];
-    return @[@(R),@(G),@(B),@(A)];
-}
-
-- (void)_calculatetransitionProcessingStyle
-{
-    if (_targetComponent == nil) {
-        return;
-    }
-    
-    if (_propertyArray.count == 0) {
-        return;
-    }
-
-    // Bugfix: https://github.com/apache/incubator-weex/issues/2347
-    NSUInteger frameCount = MAX(_transitionDuration * 60 / 1000, 1);
-    NSUInteger currentFrame = _transitionCount + 1;
-    double per = (double)currentFrame / frameCount; //linear
-    if (currentFrame < frameCount && ![[NSString stringWithFormat:@"%@",_transitionTimingFunction] isEqualToString: kCAMediaTimingFunctionLinear]) {
-        per = [self solveWithx:per epsilon:SOLVE_EPS(_transitionDuration)];
-    }
-
-    NSString *transformString = [NSString string];
-    for (WXTransitionInfo *info in _propertyArray) {
-        if ([info.propertyName isEqualToString:@"backgroundColor"]) {
-            NSArray *array = @[
-                               @([info.fromValue[0] floatValue] + [info.perValue[0] floatValue] * per),
-                               @([info.fromValue[1] floatValue] + [info.perValue[1] floatValue] * per),
-                               @([info.fromValue[2] floatValue] + [info.perValue[2] floatValue] * per),
-                               @([info.fromValue[3] floatValue] + [info.perValue[3] floatValue] * per)];
-            UIColor *color = [UIColor colorWithRed:[array[0] floatValue] green:[array[1] floatValue] blue:[array[2] floatValue] alpha:[array[3] floatValue]];
-            WXPerformBlockOnMainThread(^{
-                _targetComponent.view.backgroundColor = color;
-                [_targetComponent.view setNeedsDisplay];
-            });
-            NSString *colorString = [WXConvert HexWithColor:color];
-            [_oldFilterStyles setObject:colorString forKey:info.propertyName];
-        }
-        else if ([info.propertyName hasPrefix:@"transform"])
-        {
-            double currentValue = [info.fromValue doubleValue] + [info.perValue doubleValue] * per;
-            NSString *newString = [NSString string];
-            if ([info.propertyName isEqualToString:@"transform.rotation"]) {
-                newString = [NSString stringWithFormat:@"rotate(%lfdeg)",currentValue * 180.0 / M_PI];
-                transformString = [transformString stringByAppendingFormat:@" %@",newString];
-            }
-            if ([info.propertyName isEqualToString:@"transform.rotation.x"]) {
-                newString = [NSString stringWithFormat:@"rotateX(%lfdeg)",currentValue * 180.0 / M_PI];
-                transformString = [transformString stringByAppendingFormat:@" %@",newString];
-            }
-            if ([info.propertyName isEqualToString:@"transform.rotation.y"]) {
-                newString = [NSString stringWithFormat:@"rotateY(%lfdeg)",currentValue * 180.0 / M_PI];
-                transformString = [transformString stringByAppendingFormat:@" %@",newString];
-            }
-            if ([info.propertyName isEqualToString:@"transform.rotation.z"]) {
-                newString = [NSString stringWithFormat:@"rotateZ(%lfdeg)",currentValue * 180.0 / M_PI];
-                transformString = [transformString stringByAppendingFormat:@" %@",newString];
-            }
-            if ([info.propertyName isEqualToString:@"transform.scale.x"]) {
-                newString = [NSString stringWithFormat:@"scaleX(%lf)",currentValue];
-                transformString = [transformString stringByAppendingFormat:@" %@",newString];
-            }
-            if ([info.propertyName isEqualToString:@"transform.scale.y"]) {
-                newString = [NSString stringWithFormat:@"scaleY(%lf)",currentValue];
-                transformString = [transformString stringByAppendingFormat:@" %@",newString];
-            }
-            if ([info.propertyName isEqualToString:@"transform.translation.x"]) {
-                newString = [NSString stringWithFormat:@"translateX(%lfpx)",currentValue / (_targetComponent.weexInstance.pixelScaleFactor?_targetComponent.weexInstance.pixelScaleFactor:[WXUtility defaultPixelScaleFactor])];
-                transformString = [transformString stringByAppendingFormat:@" %@",newString];
-            }
-            if ([info.propertyName isEqualToString:@"transform.translation.y"]) {
-                newString = [NSString stringWithFormat:@"translateY(%lfpx)",currentValue / (_targetComponent.weexInstance.pixelScaleFactor?_targetComponent.weexInstance.pixelScaleFactor:[WXUtility defaultPixelScaleFactor])];
-                transformString = [transformString stringByAppendingFormat:@" %@",newString];
-            }
-            [_oldFilterStyles setObject:transformString forKey:@"transform"];
-        }
-        else
-        {
-            double currentValue = [info.fromValue doubleValue] + [info.perValue doubleValue] * per;
-            [_oldFilterStyles setObject:@(currentValue) forKey:info.propertyName];
-        }
-    }
-    
-    /* _oldFilterStyles could be modified in current thread while _updateViewStyles uses it in main thread.
-     This may lead to crash in _updateViewStyles because the dictionary items may be retained or
-     released multiple times by code like styles[@"transform"]. So we copy _oldFilterStyles and use a duplicate.*/
-    NSDictionary* dupStyles = [NSDictionary dictionaryWithDictionary:_oldFilterStyles];
-    WXPerformBlockOnMainThread(^{
-        [_targetComponent _updateViewStyles:dupStyles];
-    });
-    [_targetComponent _updateCSSNodeStyles:_oldFilterStyles];
-    [_targetComponent.weexInstance.componentManager startComponentTasks];
-}
-
-#pragma mark CADisplayLink
-- (void)_startTransitionDisplayLink
-{
-    WXAssertComponentThread();
-    if (!_transitionDisplayLink) {
-        _transitionDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(_handleTransitionDisplayLink)];
-        [_transitionDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
-    }
-    else{
-        [self _awakeTransitionDisplayLink];
-    }
-}
-
-- (void)_stopTransitionDisplayLink
-{
-    WXAssertComponentThread();
-    if (_transitionDisplayLink) {
-        [_transitionDisplayLink invalidate];
-        _transitionDisplayLink = nil;
-    }
-}
-
-- (BOOL)_isTransitionRunning
-{
-    WXAssertComponentThread();
-    BOOL yesOrNo = NO;
-    if (!_transitionDisplayLink.paused && _transitionCount >= 5) {
-        yesOrNo = YES;
-    }
-    return yesOrNo;
-}
-
-- (void)_suspendTransitionDisplayLink
-{
-    WXAssertComponentThread();
-    if(_transitionDisplayLink && !_transitionDisplayLink.paused){
-        _transitionDisplayLink.paused = YES;
-    }
-}
-
-- (void)_awakeTransitionDisplayLink
-{
-    WXAssertComponentThread();
-    if (_transitionDisplayLink && _transitionDisplayLink.paused) {
-        _transitionDisplayLink.paused = NO;
-    }
-}
-
-- (void)_handleTransitionDisplayLink
-{
-    WXAssertComponentThread();
-    int count = MAX(_transitionDuration * 60 / 1000, 1);
-    if (_transitionCount >= count) {
-        [self _suspendTransitionDisplayLink];
-        [self _resetProcessAnimationParameter];
-        return;
-    }
-    else
-    {
-        [self _calculatetransitionProcessingStyle];
-    }
-    _transitionCount ++;
-}
-
-- (void)_resetProcessAnimationParameter
-{
-    _transitionCount = 0;
-    _transitionDuration = 0;
-    _propertyArray = nil;
-    _oldFilterStyles = nil;
-    _filterStyles= nil;
-}
-
-- (NSMutableDictionary *)_filterStyles
-{
-    return self.filterStyles;
-}
-
-- (NSMutableDictionary *)_oldFilterStyles
-{
-    return self.oldFilterStyles;
-}
-
-#pragma mark UnitBezierp
-- (void)unitBezierp1x:(double)p1x p1y:(double)p1y p2x:(double)p2x p2y:(double)p2y
-{
-    cx = 3.0 * p1x;
-    bx = 3.0 * (p2x - p1x) - cx;
-    ax = 1.0 - cx -bx;
-    
-    cy = 3.0 * p1y;
-    by = 3.0 * (p2y - p1y) - cy;
-    ay = 1.0 - cy - by;
-}
-
-- (double)sampleCurveX:(double)t
-{
-    return ((ax * t + bx) * t + cx) * t;
-}
-
-- (double)sampleCurveY:(double)t
-{
-    return ((ay * t + by) * t + cy) * t;
-}
-
-- (double)sampleCurveDerivativeX:(double)t
-{
-    return (3.0 * ax * t + 2.0 * bx) * t + cx;
-}
-
-- (double)solveCurveX:(double)x epsilon:(double)epsilon
-{
-    double t0;
-    double t1;
-    double t2;
-    double x2;
-    double d2;
-    int i;
-    
-    for (t2 = x, i = 0; i < 8; i++) {
-        x2 = [self sampleCurveX:t2] - x;
-        if (fabs (x2) < epsilon)
-            return t2;
-        d2 = [self sampleCurveDerivativeX:t2];
-        if (fabs(d2) < 1e-6)
-            break;
-        t2 = t2 - x2 / d2;
-    }
-    t0 = 0.0;
-    t1 = 1.0;
-    t2 = x;
-    
-    if (t2 < t0)
-        return t0;
-    if (t2 > t1)
-        return t1;
-    
-    while (t0 < t1) {
-        x2 = [self sampleCurveX:t2];
-        if (fabs(x2 - x) < epsilon)
-            return t2;
-        if (x > x2)
-            t0 = t2;
-        else
-            t1 = t2;
-        t2 = (t1 - t0) * .5 + t0;
-    }
-    return t2;
-}
-
-- (double)solveWithx:(double)x epsilon:(double)epsilon
-{
-    return [self sampleCurveY:([self solveCurveX:x epsilon:epsilon])];
-}
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.h
deleted file mode 100644
index 274c310..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXVoiceOverModule : NSObject<WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.m
deleted file mode 100644
index 05e270e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXVoiceOverModule.m
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXVoiceOverModule.h"
-#import "WXUtility.h"
-#import "WXComponent_internal.h"
-#import "WXComponentManager.h"
-#import "WXThreadSafeMutableDictionary.h"
-
-@implementation WXVoiceOverModule
-{
-    BOOL _voiceOverStatus;
-    WXThreadSafeMutableDictionary * _announcementCallback;
-}
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(read:callback:))
-WX_EXPORT_METHOD(@selector(focusToElement:))
-WX_EXPORT_METHOD_SYNC(@selector(isVoiceOverOn))
-- (instancetype)init
-{
-    if ([super init]) {
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(voiceOverStatusListener) name:UIAccessibilityVoiceOverStatusChanged object:nil];
-        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(voiceOverAnnounceFinish:) name:UIAccessibilityAnnouncementDidFinishNotification object:nil];
-        _voiceOverStatus = UIAccessibilityIsVoiceOverRunning();
-        _announcementCallback = [WXThreadSafeMutableDictionary new];
-    }
-    return self;
-}
-- (void)read:(NSDictionary*)param callback:(WXKeepAliveCallback)callback
-{
-    if (![param isKindOfClass:[NSDictionary class]]) {
-        WXLogError(@"first param must be json type");
-        return;
-    }
-    NSString * string = nil;
-    if (param[@"value"]) {
-        string = [WXConvert NSString:param[@"value"]];
-    }
-    
-    if (!string ) {
-        NSString * errorDesc = @"you didn't specify any value to read";
-        WXLogError(@"%@", errorDesc);
-        if (callback) {
-            callback(@{@"success":@false,@"errorDesc": errorDesc}, NO);
-        }
-        return;
-    }
-    
-    if (![self isVoiceOverOn]) {
-        NSString * errorDesc = @"please check the voice status";
-        WXLogInfo(@"%@",errorDesc);
-        if (callback) {
-            callback(@{@"success":@false, @"errorDesc":errorDesc}, NO);
-        }
-        return;
-    }
-    
-    float delay = 0.5;
-    if (param[@"delay"]) {
-        delay = [param[@"delay"] floatValue];
-    }
-    if (callback) {
-        NSMutableArray * callbacks = (NSMutableArray*)_announcementCallback[string];
-        if (callbacks) {
-            [callbacks addObject:callback];
-        } else {
-            callbacks = [NSMutableArray arrayWithObject:callback];
-        }
-        [_announcementCallback setObject:callbacks forKey:string];
-    }
-    
-    if ([string isKindOfClass:[NSString class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
-            UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, string);
-        });
-    }
-}
-
-- (void)voiceOverAnnounceFinish:(NSNotification*)notification
-{
-    NSString * string = notification.userInfo[UIAccessibilityAnnouncementKeyStringValue];
-    if (!_announcementCallback[string]) {
-        return;
-    }
-    BOOL announcementResult = [notification.userInfo[UIAccessibilityAnnouncementKeyWasSuccessful] boolValue];
-    
-    
-    NSMutableArray * callbacks = (NSMutableArray*)_announcementCallback[string];
-    if(![callbacks count]) {
-        return;
-    }
-    
-    for (WXKeepAliveCallback callback in callbacks) {
-        callback(@{@"success":@(announcementResult),
-                   @"value":string}, NO);
-    }
-}
-
-- (void)focusToElement:(NSString *)ref {
-    WXPerformBlockOnComponentThread(^{
-        WXComponent * compoent = [weexInstance componentForRef:ref];
-        if (compoent) {
-            WXPerformBlockOnMainThread(^{
-                UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, compoent.view);
-            });
-        }
-    });
-}
-
-- (BOOL)isVoiceOverOn
-{
-    return UIAccessibilityIsVoiceOverRunning();
-}
-
-- (void)voiceOverStatusListener
-{
-    if (_voiceOverStatus != [self isVoiceOverOn]) {
-        _voiceOverStatus = [self isVoiceOverOn];
-        if ([weexInstance checkModuleEventRegistered:@"WXVoiceOverStatusChanged" moduleClassName:NSStringFromClass([self class])]) {
-            
-            [weexInstance fireModuleEvent:[self class] eventName:@"WXVoiceOverStatusChanged" params:@{@"status":[self isVoiceOverOn]?@"on":@"off"}];
-        }
-    }
-}
-
-- (void)dealloc {
-    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIAccessibilityVoiceOverStatusChanged object:nil];
-    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIAccessibilityAnnouncementDidFinishNotification object:nil];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
deleted file mode 100644
index dd1d765..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@interface WXWebSocketModule : NSObject <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
deleted file mode 100644
index 90c3102..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXWebSocketModule.h"
-#import "WXUtility.h"
-#import "WXWebSocketHandler.h"
-#import "WXHandlerFactory.h"
-#import "WXWebSocketLoader.h"
-#import "WXConvert.h"
-
-@interface WXWebSocketModule()
-
-@property(nonatomic,copy)WXModuleKeepAliveCallback errorCallBack;
-@property(nonatomic,copy)WXModuleKeepAliveCallback messageCallBack;
-@property(nonatomic,copy)WXModuleKeepAliveCallback openCallBack;
-@property(nonatomic,copy)WXModuleKeepAliveCallback closeCallBack;
-
-@end
-
-@implementation WXWebSocketModule
-{
-    WXWebSocketLoader *loader;
-}
-WX_EXPORT_METHOD(@selector(WebSocket:protocol:))
-WX_EXPORT_METHOD(@selector(send:))
-WX_EXPORT_METHOD(@selector(close:reason:))
-WX_EXPORT_METHOD(@selector(onerror:))
-WX_EXPORT_METHOD(@selector(onmessage:))
-WX_EXPORT_METHOD(@selector(onopen:))
-WX_EXPORT_METHOD(@selector(onclose:))
-
-@synthesize weexInstance;
-
-- (void)WebSocket:(NSString *)url protocol:(NSString *)protocol
-{
-    // check url
-    NSURL* theURL = [NSURL URLWithString:url];
-    if (theURL == nil) {
-        return;
-    }
-    NSString *scheme = theURL.scheme.lowercaseString;
-    if (!([scheme isEqualToString:@"ws"] || [scheme isEqualToString:@"http"] ||
-          [scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"])) {
-        return;
-    }
-    
-    if(loader)
-    {
-        [loader clear];
-    }
-    loader = [[WXWebSocketLoader alloc] initWithUrl:url protocol:protocol];
-    __weak typeof(self) weakSelf = self;
-    loader.onReceiveMessage = ^(id message) {
-        if (weakSelf) {
-            NSMutableDictionary *dic = [NSMutableDictionary new];
-            if([message isKindOfClass:[NSString class]]) {
-                [dic setObject:message forKey:@"data"];
-            }else if([message isKindOfClass:[NSData class]]){
-                [dic setObject:[WXUtility dataToBase64Dict:message] forKey:@"data"];
-            }
-            if (weakSelf.messageCallBack) {
-                weakSelf.messageCallBack(dic,true);;
-            }
-        }
-    };
-    loader.onOpen = ^() {
-        if (weakSelf) {
-            if (weakSelf.openCallBack) {
-                NSMutableDictionary *dict = [NSMutableDictionary new];
-                weakSelf.openCallBack(dict,true);;
-            }
-        }
-    };
-    loader.onFail = ^(NSError *error) {
-        if (weakSelf) {
-            WXLogError(@":( Websocket Failed With Error %@", error);
-            NSMutableDictionary *dict = [NSMutableDictionary new];
-            [dict setObject:error.userInfo?[WXUtility JSONString:error.userInfo]:@"" forKey:@"data"];
-            if (weakSelf.errorCallBack) {
-                weakSelf.errorCallBack(dict, true);
-            }
-        }
-    };
-    loader.onClose = ^(NSInteger code,NSString *reason,BOOL wasClean) {
-        if (weakSelf) {
-            if (weakSelf.closeCallBack) {
-                WXLogInfo(@"Websocket colse ");
-                NSMutableDictionary * callbackRsp = [[NSMutableDictionary alloc] init];
-                [callbackRsp setObject:[NSNumber numberWithInteger:code] forKey:@"code"];
-                [callbackRsp setObject:reason?reason:@"" forKey:@"reason"];
-                [callbackRsp setObject:wasClean?@true:@false forKey:@"wasClean"];
-                if (weakSelf.closeCallBack) {
-                    weakSelf.closeCallBack(callbackRsp,false);
-                }
-            }
-        }
-    };
-    
-    [loader open];
-}
-
-- (void)send:(id)data
-{
-    if([data isKindOfClass:[NSString class]]){
-        [loader send:data];
-    }else if([data isKindOfClass:[NSDictionary class]]){
-        NSData *sendData = [WXUtility base64DictToData:data];
-        if(sendData){
-            [loader send:sendData];
-        }
-    }
-}
-
-- (void)close
-{
-    [loader close];
-}
-
-- (void)close:(NSString *)code reason:(NSString *)reason
-{
-    if([WXUtility isBlankString:code])
-    {
-        [loader close];
-        return;
-    }
-    [loader close:[code integerValue] reason:reason];
-}
-
-- (void)onerror:(WXModuleKeepAliveCallback)callback
-{
-    self.errorCallBack = callback;
-}
-
-- (void)onmessage:(WXModuleKeepAliveCallback)callback
-{
-    self.messageCallBack = callback;
-}
-
-- (void)onopen:(WXModuleKeepAliveCallback)callback
-{
-    self.openCallBack = callback;
-}
-
-- (void)onclose:(WXModuleKeepAliveCallback)callback
-{
-    self.closeCallBack = callback;
-}
-
--(void)dealloc
-{
-    [loader clear];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h
deleted file mode 100644
index 5366a85..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-#import "WXDomModule.h"
-
-@interface WXWebViewModule : WXDomModule <WXModuleProtocol>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.m
deleted file mode 100644
index 20a3be3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.m
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXWebViewModule.h"
-#import "WXWebComponent.h"
-#import "WXSDKManager.h"
-#import "WXSDKInstance_private.h"
-
-@implementation WXWebViewModule
-
-@synthesize weexInstance;
-
-WX_EXPORT_METHOD(@selector(notifyWebview:data:))
-WX_EXPORT_METHOD(@selector(postMessage:data:))
-WX_EXPORT_METHOD(@selector(reload:))
-WX_EXPORT_METHOD(@selector(goBack:))
-WX_EXPORT_METHOD(@selector(goForward:))
-
-- (void)performBlockWithWebView:(NSString *)elemRef block:(void (^)(WXWebComponent *))block {
-    if (!elemRef) {
-        return;
-    }
-
-    __weak typeof(self) weakSelf = self;
-    
-    WXPerformBlockOnComponentThread(^{
-        WXWebComponent *webview = (WXWebComponent *)[weakSelf.weexInstance componentForRef:elemRef];
-        if (!webview) {
-            return;
-        }
-        
-        [weakSelf performSelectorOnMainThread:@selector(doBlock:) withObject:^() {
-            block(webview);
-        } waitUntilDone:NO];
-    });
-}
-
-- (void)doBlock:(void (^)(void))block {
-    block();
-}
-
-- (void)notifyWebview:(NSString *)elemRef data:(NSDictionary *)data {
-    [self performBlockWithWebView:elemRef block:^void (WXWebComponent *webview) {
-        [webview notifyWebview:data];
-    }];
-}
-
-- (void)postMessage:(NSString *)elemRef data:(NSDictionary *)data {
-    [self performBlockWithWebView:elemRef block:^void (WXWebComponent *webview) {
-        [webview postMessage:data];
-    }];
-}
-
-
-- (void)reload:(NSString *)elemRef {
-    [self performBlockWithWebView:elemRef block:^void (WXWebComponent *webview) {
-        [webview reload];
-    }];
-}
-
-- (void)goBack:(NSString *)elemRef {
-    [self performBlockWithWebView:elemRef block:^void (WXWebComponent *webview) {
-        [webview goBack];
-    }];
-}
-
-- (void)goForward:(NSString *)elemRef {
-    [self performBlockWithWebView:elemRef block:^void (WXWebComponent *webview) {
-        [webview goForward];
-    }];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter+Transfer.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter+Transfer.h
deleted file mode 100644
index 65b0fbe..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter+Transfer.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSDKInstance.h"
-#import "WXMonitor.h"
-#import "WXAnalyzerCenter.h"
-
-@interface WXAnalyzerCenter (Transfer)
-
-+ (void) transferPerformance:(NSString*)instanceId withType:(NSString*) type andKey:(NSString*) key andValue:(id)value;
-+ (void) transferInteractionInfo:(WXComponent*)targetComponent;
-+ (void) transErrorInfo:(WXJSExceptionInfo *)errorInfo;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.h
deleted file mode 100644
index 4b5a61b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXAnalyzerProtocol.h"
-
-@interface WXAnalyzerCenter : NSObject
-
-+(NSMutableArray<WXAnalyzerProtocol> *) getAnalyzerList;
-
-+(void) addWxAnalyzer:(id<WXAnalyzerProtocol>)handler;
-
-+(void) rmWxAnalyzer:(id<WXAnalyzerProtocol>)handler;
-
-+(void) setOpen:(BOOL)isOpen;
-+(BOOL) isOpen;
-
-+(void) switchInteractionLog:(BOOL) isOpen;
-+(BOOL) isInteractionLogOpen;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.m
deleted file mode 100644
index dff871c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXAnalyzerCenter.m
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXAnalyzerCenter.h"
-#import "WXAnalyzerProtocol.h"
-#import "WXAppMonitorProtocol.h"
-#import "WXSDKManager.h"
-#import "WXLog.h"
-#import "WXAnalyzerCenter.h"
-#import "WXAnalyzerCenter+Transfer.h"
-#import "WXUtility.h"
-#import "WXSDKInstance_performance.h"
-#import "WXCoreBridge.h"
-#import "WXBridgeManager.h"
-#import "WXBridgeContext.h"
-
-
-#define MODULE_WX_APM  @"wxapm"
-
-@interface WXAnalyzerCenter ()
-{
-    BOOL _interactionLogSwitch;
-}
-@property (nonatomic, strong) NSMutableArray<WXAnalyzerProtocol> *analyzerList;
-@property (nonatomic, assign) BOOL anzlyzerSwitch;
-@end
-
-@implementation WXAnalyzerCenter
-
-+ (instancetype) sharedInstance{
-
-    static WXAnalyzerCenter *instance = nil;
-    static dispatch_once_t once;
-
-    dispatch_once(&once, ^{
-        instance = [[WXAnalyzerCenter alloc] init];
-        instance.analyzerList= [NSMutableArray<WXAnalyzerProtocol> new];
-        instance.anzlyzerSwitch = NO;
-    });
-
-    return instance;
-}
-
-+ (void) transferPerformance:(NSString*)instanceId withType:(NSString*) type andKey:(NSString*) key andValue:(id)value
-{
-    if (![self isOpen] || !instanceId) {
-        return;
-    }
-
-    if ([self isInteractionLogOpen] && [type isEqualToString:@"stage"]) {
-        WXLogDebug(@"wxInteractionAnalyzer : [client][stage],%@,%@,%@",instanceId,key,value);
-    }
-
-    NSMutableArray* analyzerList = [self getAnalyzerList];
-    if (nil == analyzerList) {
-        return;
-    }
-    
-    NSDictionary* dic =  @{
-                            @"group":MODULE_WX_APM,
-                            @"module":instanceId,
-                            @"type":type,
-                            @"data":@{key:value}
-                            };
-    for (id analyzer in analyzerList) {
-        if ([analyzer respondsToSelector:(@selector(transfer:))]){
-            [analyzer performSelector:@selector(transfer:) withObject:dic];
-        }
-    }
-}
-
-+ (void) transferInteractionInfo:(WXComponent*)targetComponent
-{
-    if (![self isOpen]) {
-        return;
-    }
-    NSMutableArray* analyzerList = [self getAnalyzerList];
-    if (nil == analyzerList) {
-        return;
-    }
-    
-    long renderOriginDiffTime = [WXUtility getUnixFixTimeMillis] - targetComponent.weexInstance.performance.renderUnixTimeOrigin;
-    
-    NSDictionary* dic =  @{
-                           @"group":MODULE_WX_APM,
-                           @"module":targetComponent.weexInstance.instanceId,
-                           @"type":@"wxinteraction",
-                           @"data":@{
-                                   @"renderOriginDiffTime":@(renderOriginDiffTime),
-                                   @"type":targetComponent.type,
-                                   @"ref":targetComponent.ref,
-                                   @"style":targetComponent.styles,
-                                   @"attrs":targetComponent.attributes
-                                   }
-                           };
-    for (id analyzer in analyzerList) {
-        if ([analyzer respondsToSelector:(@selector(transfer:))]){
-            [analyzer performSelector:@selector(transfer:) withObject:dic];
-        }
-    }
-    if ([self isInteractionLogOpen]) {
-        WXLogDebug(@"wxInteractionAnalyzer : [client][wxinteraction]%@",dic);
-    }
-}
-
-+(void)transErrorInfo:(WXJSExceptionInfo *)errorInfo
-{
-    if (![self isOpen] || !errorInfo) {
-        return;
-    }
-
-    WXSDKInstance *instance = [WXSDKManager instanceForID:errorInfo.instanceId];
-    if (!instance) {
-        return;
-    }
-    NSMutableArray* analyzerList = [self getAnalyzerList];
-    if (nil == analyzerList) {
-        return;
-    }
-
-    NSDictionary *dic= @{
-                         @"errorCode":errorInfo.errorCode?:@"-1",
-                         @"errorGroup":@"",
-                         @"errorMsg":errorInfo.exception?:@"unSetException",
-                         @"instanceId":instance.instanceId,
-                         @"url":[instance.scriptURL absoluteString]?:@"unSetscriptURL",
-                         @"group":GROUP_ANALYZER,
-                         @"module":MODULE_ERROR,
-                         @"type":TYPE_JS_ERROR
-                        };
-    
-    for (id analyzer in analyzerList) {
-        if ([analyzer respondsToSelector:(@selector(transfer:))]){
-            [analyzer performSelector:@selector(transfer:) withObject:dic];
-        }
-    }
-}
-
-+ (void) addWxAnalyzer:(id<WXAnalyzerProtocol>)handler
-{
-    if (!handler) {
-        return;
-    }
-    [[WXAnalyzerCenter sharedInstance].analyzerList addObject:handler];
-}
-
-+ (void) rmWxAnalyzer:(id<WXAnalyzerProtocol>)handler
-{
-    if (!handler) {
-        return;
-    }
-    [[WXAnalyzerCenter sharedInstance].analyzerList removeObject:handler];
-}
-
-+ (NSMutableArray<WXAnalyzerProtocol> *)getAnalyzerList
-{
-    return [WXAnalyzerCenter sharedInstance].analyzerList;
-}
-
-
-+ (void)setOpen:(BOOL)isOpen
-{
-    [WXAnalyzerCenter sharedInstance].anzlyzerSwitch = isOpen;
-}
-
-+ (BOOL)isOpen
-{
-     return [WXAnalyzerCenter sharedInstance].anzlyzerSwitch;
-}
-
-+(void) switchInteractionLog:(BOOL) isOpen
-{
-    if ([WXAnalyzerCenter sharedInstance]->_interactionLogSwitch == isOpen) {
-        return;
-    }
-    [WXAnalyzerCenter sharedInstance]->_interactionLogSwitch = isOpen;
-    [WXCoreBridge registerCoreEnv:@"switchInteractionLog" withValue:isOpen?@"true":@"false"];
-#ifdef DEBUG
-    [WXLog setLogLevel: isOpen?WXLogLevelDebug:WXLogLevelLog];
-#else
-     [WXLog setLogLevel: isOpen?WXLogLevelDebug:WXLogLevelWarning];
-#endif
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wundeclared-selector"
-    if ([WXSDKManager.bridgeMgr respondsToSelector:@selector(bridgeCtx)]) {
-        id bridgeCtx = [WXSDKManager.bridgeMgr performSelector:@selector(bridgeCtx) withObject:nil];
-        if (nil != bridgeCtx && [bridgeCtx respondsToSelector:@selector(callJSMethod:args:)]) {
-            WXPerformBlockOnBridgeThread(^(){
-                NSArray* args = @[isOpen?@(1):@(0)];
-                [bridgeCtx performSelector:@selector(callJSMethod:args:) withObject:@"switchInteractionLog" withObject:args];
-            });
-        }
-    }
-    if ([WXSDKManager.bridgeMgr respondsToSelector:@selector(backupBridgeCtx)]) {
-        id backupBridgeCtx = [WXSDKManager.bridgeMgr performSelector:@selector(backupBridgeCtx) withObject:nil];
-        if (nil != backupBridgeCtx && [backupBridgeCtx respondsToSelector:@selector(callJSMethod:args:)]) {
-            WXPerformBlockOnBackupBridgeThread(^(){
-                NSArray* args = @[isOpen?@(1):@(0)];
-                [backupBridgeCtx performSelector:@selector(callJSMethod:args:) withObject:@"switchInteractionLog" withObject:args];
-            });
-        }
-    }
-#pragma clang diagnostic pop
-}
-
-+(BOOL) isInteractionLogOpen
-{
-    return [WXAnalyzerCenter sharedInstance]->_interactionLogSwitch;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h
deleted file mode 100644
index ee4d52c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXJSExceptionInfo.h"
-
-@interface WXExceptionUtils : NSObject
-
-+ (void)commitCriticalExceptionRT:(NSString *)instanceId errCode:(NSString *)errCode function:(NSString *)function exception:(NSString *)exception extParams:(NSDictionary *)extParams;
-
-+ (void)commitCriticalExceptionRT:(WXJSExceptionInfo*)jsExceptionInfo;
-
-+ (void)removeExceptionHistory:(NSString *)instanceId;
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.m
deleted file mode 100644
index c913d33..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXExceptionUtils.m
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXExceptionUtils.h"
-#import "WXJSExceptionProtocol.h"
-#import "WXHandlerFactory.h"
-#import "WXSDKEngine.h"
-#import "WXSDKError.h"
-#import "WXJSExceptionInfo.h"
-#import "WXUtility.h"
-#import "WXSDKManager.h"
-#import "WXAnalyzerCenter+Transfer.h"
-#import "WXComponentManager.h"
-
-
-
-@implementation WXExceptionUtils
-
-static NSMutableDictionary *recordExceptionHistory = nil;
-
-+ (void)commitCriticalExceptionRT:(NSString *)instanceId errCode:(NSString *)errCode function:(NSString *)function exception:(NSString *)exception extParams:(NSDictionary *)extParams{
-    WXLogError(@"Weex exception errCode: %@ function: %@ message: %@", errCode, function, exception);
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        recordExceptionHistory = [[NSMutableDictionary alloc] init];
-    });
-
-    NSMutableDictionary* extInfo = [[NSMutableDictionary alloc] initWithDictionary:extParams];
-    WXPerformBlockOnComponentThread(^{
-        NSString *bundleUrlCommit = @"BundleUrlDefault";
-        NSString *instanceIdCommit = @"InstanceIdDefalut";
-        WXSDKInstance *instance = nil;
-        if(![WXUtility isBlankString:instanceId]){
-            instanceIdCommit = instanceId;
-            instance = [WXSDKManager instanceForID:instanceId];
-        }
-
-        NSString *targetException = exception.length > 200 ? [exception substringWithRange:NSMakeRange(0, 200)] : exception;
-        NSMutableSet *exceptionSet = [recordExceptionHistory objectForKey:instanceIdCommit];
-        if (!exceptionSet) {
-            exceptionSet = [[NSMutableSet alloc] init];
-            [recordExceptionHistory setObject:exceptionSet forKey:instanceIdCommit];
-        } else if ([exceptionSet containsObject:targetException]) {
-            return;
-        }
-        [exceptionSet addObject:targetException];
-
-        if(instance){
-            bundleUrlCommit = instance.pageName?:instance.scriptURL.absoluteString;
-            if(nil == bundleUrlCommit || [@"" isEqualToString:bundleUrlCommit]){
-                bundleUrlCommit = @"instanceUnSetPageNameOrUrl";
-            }
-
-            if (instance.containerInfo && instance.containerInfo.count >0) {
-                [extInfo addEntriesFromDictionary:instance.containerInfo];
-            }
-            if (nil != instance.viewController) {
-                [extInfo setObject:NSStringFromClass(instance.viewController.class)?:@"unKnowVCName" forKey:KEY_PAGE_PROPERTIES_CONTAINER_NAME];
-            }
-            [extInfo setObject:[self _convertInstanceStageToStr:instance] forKey:@"wxStageList"];
-            [extInfo setObject:instance.pageName?:@"unKnowPageNameCaseUnSet" forKey:@"wxBundlePageName"];
-            NSString* bundleTemplateCommit = @"has recycle";
-            if (nil != instance.bundleTemplate) {
-                NSUInteger strLength = instance.bundleTemplate.length;
-                bundleTemplateCommit = [instance.bundleTemplate substringWithRange:NSMakeRange(0, strLength>300?300:strLength)];
-            }
-            [extInfo setObject:bundleTemplateCommit forKey:@"wxTemplateOfBundle"];
-            [extInfo setObject:[instance.apmInstance templateInfo] forKey:@"templateInfo"];
-            NSNumber* pageStartTime = [instance.apmInstance.stageDic objectForKey:KEY_PAGE_STAGES_DOWN_BUNDLE_START];
-            if (nil == pageStartTime) {
-                pageStartTime = [instance.apmInstance.stageDic objectForKey:KEY_PAGE_STAGES_RENDER_ORGIGIN];
-            }
-            if (nil != pageStartTime) {
-                long useTime = [WXUtility getUnixFixTimeMillis] - pageStartTime.longValue;
-                [extInfo setObject:@(useTime) forKey:@"wxUseTime"];
-            }
-
-        }else if([instanceIdCommit hasPrefix:@"WX_KEY_EXCEPTION"]){
-            bundleUrlCommit = instanceId;
-        }
-
-        WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo alloc] initWithInstanceId:instanceIdCommit bundleUrl:bundleUrlCommit errorCode:errCode functionName:function exception:exception userInfo: [extInfo mutableCopy]];
-        
-//        //record top5 erromsg ,if errorType is not WX_RENDER_ERROR
-//        WXSDKErrorType type = [WXSDKErrCodeUtil getErrorTypeByCode:errCode.intValue];
-//        if (type != WX_RENDER_ERROR && nil != instance) {
-//            [instance.apmInstance recordErrorMsg:jsExceptionInfo];
-//        }
-        [WXExceptionUtils commitCriticalExceptionRT:jsExceptionInfo];
-    });
-}
-
-+ (void)commitCriticalExceptionRT:(WXJSExceptionInfo *)jsExceptionInfo{
-    
-    WXPerformBlockOnComponentThread(^ {
-        id<WXJSExceptionProtocol> jsExceptionHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXJSExceptionProtocol)];
-        if ([jsExceptionHandler respondsToSelector:@selector(onJSException:)]) {
-            [jsExceptionHandler onJSException:jsExceptionInfo];
-        }
-        if ([WXAnalyzerCenter isOpen]) {
-            [WXAnalyzerCenter transErrorInfo:jsExceptionInfo];
-        }
-    });
-}
-
-+ (NSString*) _convertInstanceStageToStr:(WXSDKInstance *)instance
-{
-    if (nil == instance || !instance.apmInstance.isOpenApm) {
-        return @"";
-    }
-    NSDictionary<NSString*,NSNumber*>* stageDic = instance.apmInstance.stageDic;
-    if (!stageDic || stageDic.count <=0 ) {
-        return @"emptyStageRecord";
-    }
-    NSString* stageStr = @"";
-    NSArray<NSString *> *keysArray = [stageDic allKeys];
-    for (int i=0; i<keysArray.count; i++) {
-        NSString* key = [keysArray objectAtIndex:i];
-        NSNumber* time = [stageDic objectForKey:key];
-        if (nil!=key && nil != time ) {
-            stageStr = [stageStr stringByAppendingFormat:@"-> %@:%@",key,time];
-        }else{
-             stageStr = [stageStr stringByAppendingFormat:@"-> nilKeyOrValue"];
-        }
-    }
-    return stageStr;
-}
-
-+ (void)removeExceptionHistory:(NSString *)instanceId {
-    WXPerformBlockOnComponentThread(^{
-        if (recordExceptionHistory) {
-            [recordExceptionHistory removeObjectForKey:instanceId];
-        }
-    });
-}
-
-
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h
deleted file mode 100644
index 395535d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import <Foundation/Foundation.h>
-#import "WXDefine.h"
-#import "WXSDKError.h"
-
-@class WXSDKInstance;
-
-typedef enum : NSUInteger {
-    // global
-    WXPTInitalize = 0,
-    WXPTInitalizeSync,
-    WXPTFrameworkExecute,
-    // instance
-    WXPTJSDownload,
-    WXPTJSCreateInstance,
-    WXFirstScreenJSFExecuteTime,
-    WXPTFirstScreenRender,
-    WXPTAllRender,
-    WXPTBundleSize,
-    //new point
-    //doc see @WXPerformance
-    WXPTFsCallJsTime,
-    WXPTFsCallJsNum,
-    WXPTFsCallNativeTime,
-    WXPTFsCallNativeNum,
-    WXPTFsCallEventNum,
-    WXPTFsReqNetNum,
-    WXPTCellExceedNum,
-    WXPTMaxDeepVDom,
-    WXPTImgWrongSizeNum,
-    WXPTTimerNum,
-    WXPTInteractionTime,
-    WXPTWrongImgSize,
-    WXPTInteractionAddCount,
-    WXPTInteractionLimitAddCount,
-    WXPTComponentCount,
-    WXPTComponentCreateTime,
-    WXPNewFSRenderTime,
-    //end
-    WXPTEnd
-} WXPerformanceTag;
-
-typedef enum : NSUInteger {
-    WXMTJSFramework,
-    WXMTJSDownload,
-    WXMTJSBridge,
-    WXMTNativeRender,
-    WXMTJSService,
-} WXMonitorTag;
-
-typedef NS_ENUM(NSInteger, CommitState)
-{
-    MonitorCommit,
-    
-    //just use on Debug mode
-    DebugAfterRequest,
-    DebugAfterFSFinish,
-    DebugAfterExist,
-    DebugOnRealTime
-};
-
-#define WX_MONITOR_SUCCESS_ON_PAGE(tag, pageName) [WXMonitor monitoringPointDidSuccess:tag onPage:pageName];
-#define WX_MONITOR_FAIL_ON_PAGE(tag, errorCode, errorMessage, pageName) \
-NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN \
-                                     code:errorCode \
-                                 userInfo:@{NSLocalizedDescriptionKey:(errorMessage?:@"No message")}]; \
-[WXMonitor monitoringPoint:tag didFailWithError:error onPage:pageName];
-
-#define WX_MONITOR_SUCCESS(tag) WX_MONITOR_SUCCESS_ON_PAGE(tag, nil)
-#define WX_MONITOR_FAIL(tag, errorCode, errorMessage) WX_MONITOR_FAIL_ON_PAGE(tag, errorCode, errorMessage, nil)
-
-#define WX_MONITOR_PERF_START(tag) [WXMonitor performancePoint:tag willStartWithInstance:nil];
-#define WX_MONITOR_PERF_END(tag) [WXMonitor performancePoint:tag didEndWithInstance:nil];
-#define WX_MONITOR_INSTANCE_PERF_START(tag, instance) [WXMonitor performancePoint:tag willStartWithInstance:instance];
-#define WX_MONITOR_INSTANCE_PERF_END(tag, instance) [WXMonitor performancePoint:tag didEndWithInstance:instance];
-#define WX_MONITOR_PERF_SET(tag, value, instance) [WXMonitor performancePoint:tag didSetValue:value withInstance:instance];
-#define WX_MONITOR_INSTANCE_PERF_IS_RECORDED(tag, instance) [WXMonitor performancePoint:tag isRecordedWithInstance:instance]
-#define WX_MONITOR_INSTANCE_PERF_COMMIT(instance) [WXMonitor performanceFinish:instance]
-
-//DEPRECATED_ATTRIBUTE
-@interface WXMonitor : NSObject
-
-+ (void)performancePoint:(WXPerformanceTag)tag willStartWithInstance:(WXSDKInstance *)instance;
-+ (void)performancePoint:(WXPerformanceTag)tag didEndWithInstance:(WXSDKInstance *)instance;
-+ (void)performancePoint:(WXPerformanceTag)tag didSetValue:(double)value withInstance:(WXSDKInstance *)instance;
-+ (BOOL)performancePoint:(WXPerformanceTag)tag isRecordedWithInstance:(WXSDKInstance *)instance;
-+ (void)performanceFinish:(WXSDKInstance *)instance;
-
-+ (void)monitoringPointDidSuccess:(WXMonitorTag)tag onPage:(NSString *)pageName;
-+ (void)monitoringPoint:(WXMonitorTag)tag didFailWithError:(NSError *)error onPage:(NSString *)pageName;
-
-+ (void)performanceFinishWithState:(CommitState) state instance:(WXSDKInstance *)instance;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
deleted file mode 100644
index 297b31f..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXMonitor.h"
-#import "WXSDKEngine.h"
-#import "WXSDKInstance.h"
-#import "WXAppMonitorProtocol.h"
-#import "WXHandlerFactory.h"
-#import "WXLog.h"
-#import "WXUtility.h"
-#import "WXComponentManager.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXAppConfiguration.h"
-#import "WXAnalyzerProtocol.h"
-#import "WXSDKInstance_performance.h"
-#import "WXAnalyzerCenter+Transfer.h"
-
-static NSString *const kStartKey = @"start";
-static NSString *const kEndKey = @"end";
-
-@implementation WXMonitor
-
-#pragma mark - Performance Monitor
-
-static WXThreadSafeMutableDictionary *globalPerformanceDict;
-
-+ (void)performancePoint:(WXPerformanceTag)tag willStartWithInstance:(WXSDKInstance *)instance
-{
-    NSMutableDictionary *performanceDict = [self performanceDictForInstance:instance];
-    NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:2];
-    dict[kStartKey] = @(CACurrentMediaTime() * 1000);
-    performanceDict[@(tag)] = dict;
-    [dict setValue:@(tag) forKey:@"tag"];
-}
-
-+ (void)performancePoint:(WXPerformanceTag)tag didEndWithInstance:(WXSDKInstance *)instance
-{
-    NSMutableDictionary *performanceDict = [self performanceDictForInstance:instance];
-    NSMutableDictionary *dict = performanceDict[@(tag)];
-    if (!dict) {
-        WXLogDebug(@"Performance point:%ld, in instance:%@, did not have a start", (unsigned long)tag, instance.instanceId);
-        return;
-    }
-    
-    if (dict[kEndKey]) {
-        // not override.
-        return;
-    }
-    
-    dict[kEndKey] = @(CACurrentMediaTime() * 1000);
-    if (tag == WXPTFirstScreenRender) {
-        [instance.apmInstance onStage:KEY_PAGE_STAGES_FSRENDER];
-        instance.apmInstance.isFSEnd = YES;
-    }
-
-//    if (tag == WXPTAllRender) {
-//        [self performanceFinish:instance];
-//    }
-}
-
-+ (void)performancePoint:(WXPerformanceTag)tag didSetValue:(double)value withInstance:(WXSDKInstance *)instance
-{
-    NSMutableDictionary *performanceDict = [self performanceDictForInstance:instance];
-    if (performanceDict[@(tag)]) {
-        return;
-    }
-    NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:2];
-    dict[kStartKey] = @(0);
-    dict[kEndKey] = @(value);
-    performanceDict[@(tag)] = dict;
-}
-
-+ (BOOL)performancePoint:(WXPerformanceTag)tag isRecordedWithInstance:(WXSDKInstance *)instance
-{
-    NSMutableDictionary *performanceDict = [self performanceDictForInstance:instance];
-    if (!performanceDict) {
-        return NO;
-    }
-    
-    NSMutableDictionary *dict = performanceDict[@(tag)];
-    return dict && dict[kStartKey] && dict[kEndKey];
-}
-
-+ (void)performanceFinish:(WXSDKInstance *)instance
-{
-    [self performanceFinishWithState:MonitorCommit instance:instance];
-}
-
-+ (void)performanceFinishWithState:(CommitState) state instance:(WXSDKInstance *)instance
-{
-    BOOL collectValue = (state == MonitorCommit)?TRUE:[WXAnalyzerCenter isOpen];
-    if(!collectValue){
-        return;
-    }
-    NSMutableDictionary *commitDict = [NSMutableDictionary dictionary];
-    
-    commitDict[BIZTYPE] = instance.bizType ?: @"";
-    commitDict[PAGENAME] = instance.pageName ?: @"";
-    
-    commitDict[WXSDKVERSION] = WX_SDK_VERSION;
-    commitDict[JSLIBVERSION] = [WXAppConfiguration JSFrameworkVersion];
-    commitDict[JSLIBSIZE] = [NSNumber numberWithUnsignedInteger:[WXAppConfiguration JSFrameworkLibSize]];
-    
-    if (instance.userInfo[@"weex_bundlejs_connectionType"]) {
-        commitDict[@"connectionType"] = instance.userInfo[@"weex_bundlejs_connectionType"];
-    }
-    
-    if (instance.userInfo[@"weex_bundlejs_requestType"]) {
-        commitDict[@"requestType"] = instance.userInfo[@"weex_bundlejs_requestType"];
-    }
-    
-    if (instance.userInfo[@"weex_bundlejs_networkType"]) {
-        commitDict[NETWORKTYPE] = instance.userInfo[@"weex_bundlejs_networkType"];
-    }
-    
-    if (instance.userInfo[@"weex_bundlejs_cacheType"]) {
-        commitDict[CACHETYPE] = instance.userInfo[@"weex_bundlejs_cacheType"];
-    }
-    
-    if (instance.userInfo[CACHEPROCESSTIME]) {
-        commitDict[CACHEPROCESSTIME] = instance.userInfo[CACHEPROCESSTIME];
-    }
-    
-    if (instance.userInfo[CACHERATIO]) {
-        commitDict[CACHERATIO] = instance.userInfo[CACHERATIO];
-    }
-    if (instance.userInfo[WXCUSTOMMONITORINFO]) {
-        if([instance.userInfo[WXCUSTOMMONITORINFO] isKindOfClass:[NSDictionary class]]) {
-            commitDict[WXCUSTOMMONITORINFO] = [WXUtility JSONString:instance.userInfo[WXCUSTOMMONITORINFO]];
-        }else if([instance.userInfo[WXCUSTOMMONITORINFO] isKindOfClass:[NSString class]]) {
-            commitDict[WXCUSTOMMONITORINFO] = instance.userInfo[WXCUSTOMMONITORINFO];
-        }
-    }
-    WXPerformBlockOnComponentThread(^{
-        WXPerformBlockOnMainThread(^{
-            [self commitPerformanceWithDict:commitDict instance:instance comitState:state];
-        });
-    });
-}
-
-+ (void)commitPerformanceWithDict:(NSMutableDictionary *)commitDict instance:(WXSDKInstance *)instance comitState:(CommitState) state
-{
-    static NSDictionary *commitKeyDict;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        // non-standard perf commit names, remove this hopefully.
-        commitKeyDict = @{
-                          @(WXPTInitalize) : SDKINITTIME,
-                          @(WXPTInitalizeSync) : SDKINITINVOKETIME,
-                          @(WXPTFrameworkExecute) : JSLIBINITTIME,
-                          @(WXPTJSDownload) : NETWORKTIME,
-                          @(WXPTJSCreateInstance) : COMMUNICATETIME,
-                          @(WXFirstScreenJSFExecuteTime) : FIRSETSCREENJSFEXECUTETIME,
-                          @(WXPTFirstScreenRender) : SCREENRENDERTIME,
-                          @(WXPTAllRender) : TOTALTIME,
-                          @(WXPTBundleSize) : JSTEMPLATESIZE,
-                           @(WXPTFsCallJsTime): M_FS_CALL_JS_TIME,
-                           @(WXPTFsCallJsNum): M_FS_CALL_JS_NUM,
-                           @(WXPTFsCallNativeTime): M_FS_CALL_NATIVE_TIME,
-                           @(WXPTFsCallNativeNum): M_FS_CALL_NATIVE_NUM,
-                           @(WXPTFsCallEventNum): M_FS_CALL_EVENT_NUM,
-                           @(WXPTMaxDeepVDom): M_MAX_DEEP_VDOM,
-                           @(WXPTImgWrongSizeNum): M_IMG_WRONG_SIZE_NUM,
-                           @(WXPTTimerNum): M_TIMER_NUM,
-                          @(WXPTCellExceedNum):M_CELL_EXCEED_NUM,
-                          @(WXPTWrongImgSize):M_IMG_WRONG_SIZE_NUM,
-                          @(WXPTInteractionTime):M_INTERACTION_TIME,
-                          @(WXPTFsReqNetNum):M_FS_REQUEST_NET_NUM,
-                          @(WXPTComponentCreateTime):M_COMPONENT_TIME,
-                          @(WXPTComponentCount):COMPONENTCOUNT,
-                          @(WXPTInteractionAddCount):M_INTERACTION_ADD_COUNT,
-                          @(WXPTInteractionLimitAddCount):M_INTERACTION_LIMIT_ADD_COUNT,
-                          @(WXPNewFSRenderTime):M_NEW_FS_RENDER_TIME
-                          };
-    });
-    
-    for (int tag = 0; tag < WXPTEnd; tag++) {
-        NSMutableDictionary *performanceDict = tag <= WXPTFrameworkExecute ? globalPerformanceDict : instance.performanceDict;
-        NSMutableDictionary *keyDict = performanceDict[@(tag)];
-        if (!keyDict || ![keyDict isKindOfClass:[NSMutableDictionary class]]) {
-            continue;
-        }
-        
-        NSNumber *start = keyDict[kStartKey];
-        NSNumber *end = keyDict[kEndKey];
-        
-        if (!start || !end) {
-            if (state == MonitorCommit) {
-                WXLogDebug(@"Performance point:%d, in instance:%@, did not have a start or end", tag, instance);
-            }
-            continue;
-        }
-        
-        NSString *commitKey = commitKeyDict[@(tag)];
-        if (commitKey) {
-             commitDict[commitKey] = @([end integerValue] - [start integerValue]);
-        }else{
-            WXLogWarning(@"commitKey is nil with tag :%d",tag);
-        }
-    }
-    
-    commitDict[@"instanceId"] = [instance instanceId]?:@"";
-    
-    //new performance point
-//    if (!commitDict[SCREENRENDERTIME] && commitDict[TOTALTIME]) {
-//        commitDict[SCREENRENDERTIME] = commitDict[TOTALTIME];
-//    }
-    
-    commitDict[CALLCREATEINSTANCETIME] = commitDict[COMMUNICATETIME];
-    commitDict[COMMUNICATETOTALTIME] = commitDict[TOTALTIME];
-    
-    if (commitDict[SCREENRENDERTIME]) {
-        commitDict[FSRENDERTIME] = commitDict[SCREENRENDERTIME];
-    }
-    else {
-        commitDict[FSRENDERTIME] = @"-1";
-    }
-    if(state == MonitorCommit)
-    {
-        id<WXAppMonitorProtocol> appMonitor = [WXHandlerFactory handlerForProtocol:@protocol(WXAppMonitorProtocol)];
-        if (appMonitor && [appMonitor respondsToSelector:@selector(commitAppMonitorArgs:)]){
-            [appMonitor commitAppMonitorArgs:commitDict];
-        }
-        
-        [self printPerformance:commitDict];
-    }
-}
-
-+ (NSMutableDictionary *)performanceDictForInstance:(WXSDKInstance *)instance
-{
-    NSMutableDictionary *performanceDict;
-    if (!instance) {
-        if (!globalPerformanceDict) {
-            globalPerformanceDict = [WXThreadSafeMutableDictionary dictionary];
-        }
-        performanceDict = globalPerformanceDict;
-    } else {
-        performanceDict = instance.performanceDict;
-    }
-    
-    return performanceDict;
-}
-
-+ (void)printPerformance:(NSDictionary *)commitDict
-{
-    if ([WXLog logLevel] < WXLogLevelLog) {
-        return;
-    }
-    
-    NSMutableString *performanceString = [NSMutableString stringWithString:@"Performance:"];
-    for (NSString *commitKey in commitDict) {
-        [performanceString appendFormat:@"\n    %@: %@,", commitKey, commitDict[commitKey]];
-    }
-    
-    WXLog(@"%@", performanceString);
-}
-
-#pragma mark - Error Monitor
-
-+ (void)monitoringPointDidSuccess:(WXMonitorTag)tag onPage:(NSString *)pageName
-{
-    [self monitoringPoint:tag isSuccss:YES error:nil onPage:pageName];
-}
-
-+ (void)monitoringPoint:(WXMonitorTag)tag didFailWithError:(NSError *)error onPage:(NSString *)pageName
-{
-    [self monitoringPoint:tag isSuccss:NO error:error onPage:pageName];
-}
-
-+ (void)monitoringPoint:(WXMonitorTag)tag isSuccss:(BOOL)success error:(NSError *)error onPage:(NSString *)pageName
-{
-    if (!success) {
-        WXLogError(@"%@", error.localizedDescription);
-    }
-    
-    id<WXAppMonitorProtocol> appMonitorHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXAppMonitorProtocol)];
-    if ([appMonitorHandler respondsToSelector:@selector(commitAppMonitorAlarm:monitorPoint:success:errorCode:errorMsg:arg:)]) {
-        NSString *errorCodeStr = [NSString stringWithFormat:@"%ld", (long)error.code];
-        
-        static NSDictionary *monitorNameDict;
-        static dispatch_once_t onceToken;
-        dispatch_once(&onceToken, ^{
-            monitorNameDict = @{
-                                @(WXMTJSFramework) : @"jsFramework",
-                                @(WXMTJSDownload) : @"jsDownload",
-                                @(WXMTJSBridge) : @"jsBridge",
-                                @(WXMTNativeRender) : @"domModule"
-                                };
-        });
-        
-        pageName = pageName ? : [WXSDKEngine topInstance].pageName;
-        [appMonitorHandler commitAppMonitorAlarm:@"weex" monitorPoint:monitorNameDict[@(tag)] success:success errorCode:errorCodeStr errorMsg:error.localizedDescription arg:pageName];
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h
deleted file mode 100644
index 8719350..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-typedef enum : NSUInteger {
-    WXResourceTypeMainBundle,
-    WXResourceTypeServiceBundle,
-    WXResourceTypeImage,
-    WXResourceTypeFont,
-    WXResourceTypeVideo,
-    WXResourceTypeLink,
-    WXResourceTypeOthers
-} WXResourceType;
-
-
-@interface WXResourceRequest : NSMutableURLRequest
-
-@property (nonatomic, strong) id taskIdentifier;
-@property (nonatomic, assign) WXResourceType type;
-
-@property (nonatomic, strong) NSString *referrer;
-@property (nonatomic, strong) NSString *userAgent;
-
-+ (instancetype)requestWithURL:(NSURL *)url
-                  resourceType:(WXResourceType)type
-                      referrer:(NSString *)referrer
-                   cachePolicy:(NSURLRequestCachePolicy)cachePolicy;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.m
deleted file mode 100644
index 9227f8c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.m
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXResourceRequest.h"
-
-static NSString * const kHTTPHeaderNameUserAgent = @"User-Agent";
-static NSString * const kHTTPHeaderNameReferrer = @"Referer"; // The misspelling referer originated in the original proposal by computer "scientist" Phillip Hallam-Baker to incorporate the field into the HTTP specification. ╮(╯_╰)╭
-
-@implementation WXResourceRequest
-
-+ (instancetype)requestWithURL:(NSURL *)url
-                  resourceType:(WXResourceType)type
-                      referrer:(NSString *)referrer
-                   cachePolicy:(NSURLRequestCachePolicy)cachePolicy
-{
-    return [[self alloc] initWithURL:url resourceType:type referrer:referrer cachePolicy:cachePolicy];
-}
-
-- (instancetype)initWithURL:(NSURL *)url
-               resourceType:(WXResourceType)type
-                   referrer:(NSString *)referrer cachePolicy:(NSURLRequestCachePolicy)cachePolicy
-{
-    if (self = [super initWithURL:url]) {
-        self.type = type;
-        self.cachePolicy = cachePolicy;
-        [self setValue:referrer forHTTPHeaderField:kHTTPHeaderNameReferrer];
-    }
-    
-    return self;
-}
-
-- (NSString *)referrer
-{
-    return [self valueForHTTPHeaderField:kHTTPHeaderNameReferrer];
-}
-
-- (void)setReferrer:(NSString *)referrer
-{
-    [self setValue:referrer forHTTPHeaderField:kHTTPHeaderNameReferrer];
-}
-
-- (NSString *)userAgent
-{
-    return [self valueForHTTPHeaderField:kHTTPHeaderNameUserAgent];
-}
-
-- (void)setUserAgent:(NSString *)userAgent
-{
-    [self setValue:userAgent forHTTPHeaderField:kHTTPHeaderNameUserAgent];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h
deleted file mode 100644
index 6230f7f..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import <Foundation/Foundation.h>
-#import "WXResourceRequest.h"
-#import "WXResourceResponse.h"
-
-@protocol WXResourceRequestDelegate <NSObject>
-
-// Periodically informs the delegate of the progress of sending content to the server.
-- (void)request:(WXResourceRequest *)request didSendData:(unsigned long long)bytesSent totalBytesToBeSent:(unsigned long long)totalBytesToBeSent;
-
-// Tells the delegate that the request received the initial reply (headers) from the server.
-- (void)request:(WXResourceRequest *)request didReceiveResponse:(WXResourceResponse *)response;
-
-// Tells the delegate that the request has received some of the expected data.
-- (void)request:(WXResourceRequest *)request didReceiveData:(NSData *)data;
-
-// Tells the delegate that the request finished transferring data.
-- (void)requestDidFinishLoading:(WXResourceRequest *)request;
-
-// Tells the delegate that the request failed to load successfully.
-- (void)request:(WXResourceRequest *)request didFailWithError:(NSError *)error;
-    
-// Tells the delegate that when complete statistics information has been collected for the task.
-#ifdef __IPHONE_10_0
-- (void)request:(WXResourceRequest *)request didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
-#endif
-
-@end
-
-@protocol WXResourceRequestHandler <NSObject>
-
-// Send a resource request with a delegate
-- (void)sendRequest:(WXResourceRequest *)request withDelegate:(id<WXResourceRequestDelegate>)delegate;
-
-@optional
-
-// Cancel the ongoing request
-- (void)cancelRequest:(WXResourceRequest *)request;
-
-@end
-
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h
deleted file mode 100644
index 978ea26..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import <Foundation/Foundation.h>
-#import "WXResourceRequestHandler.h"
-
-@interface WXResourceRequestHandlerDefaultImpl : NSObject <WXResourceRequestHandler>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m
deleted file mode 100644
index 48276f7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import "WXResourceRequestHandlerDefaultImpl.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXAppConfiguration.h"
-
-@interface WXResourceRequestHandlerDefaultImpl () <NSURLSessionDataDelegate>
-
-@end
-
-@implementation WXResourceRequestHandlerDefaultImpl
-{
-    NSURLSession *_session;
-    WXThreadSafeMutableDictionary<NSURLSessionDataTask *, id<WXResourceRequestDelegate>> *_delegates;
-}
-
-#pragma mark - WXResourceRequestHandler
-
-- (void)sendRequest:(WXResourceRequest *)request withDelegate:(id<WXResourceRequestDelegate>)delegate
-{
-    if (!_session) {
-        NSURLSessionConfiguration *urlSessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
-        if ([WXAppConfiguration customizeProtocolClasses].count > 0) {
-            NSArray *defaultProtocols = urlSessionConfig.protocolClasses;
-            urlSessionConfig.protocolClasses = [[WXAppConfiguration customizeProtocolClasses] arrayByAddingObjectsFromArray:defaultProtocols];
-        }
-        _session = [NSURLSession sessionWithConfiguration:urlSessionConfig
-                                                 delegate:self
-                                            delegateQueue:[NSOperationQueue mainQueue]];
-        _delegates = [WXThreadSafeMutableDictionary new];
-    }
-    
-    NSURLSessionDataTask *task = [_session dataTaskWithRequest:request];
-    request.taskIdentifier = task;
-    [_delegates setObject:delegate forKey:task];
-    [task resume];
-}
-
-- (void)cancelRequest:(WXResourceRequest *)request
-{
-    if ([request.taskIdentifier isKindOfClass:[NSURLSessionTask class]]) {
-        NSURLSessionTask *task = (NSURLSessionTask *)request.taskIdentifier;
-        [task cancel];
-        [_delegates removeObjectForKey:task];
-    }
-}
-
-#pragma mark - NSURLSessionTaskDelegate & NSURLSessionDataDelegate
-
-- (void)URLSession:(NSURLSession *)session
-              task:(NSURLSessionTask *)task
-   didSendBodyData:(int64_t)bytesSent
-    totalBytesSent:(int64_t)totalBytesSent
-totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
-{
-    id<WXResourceRequestDelegate> delegate = [_delegates objectForKey:task];
-    [delegate request:(WXResourceRequest *)task.originalRequest didSendData:bytesSent totalBytesToBeSent:totalBytesExpectedToSend];
-}
-
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)task
-didReceiveResponse:(NSURLResponse *)response
- completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
-{
-    id<WXResourceRequestDelegate> delegate = [_delegates objectForKey:task];
-    [delegate request:(WXResourceRequest *)task.originalRequest didReceiveResponse:(WXResourceResponse *)response];
-    completionHandler(NSURLSessionResponseAllow);
-}
-
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)task didReceiveData:(NSData *)data
-{
-    id<WXResourceRequestDelegate> delegate = [_delegates objectForKey:task];
-    [delegate request:(WXResourceRequest *)task.originalRequest didReceiveData:data];
-}
-
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
-{
-    id<WXResourceRequestDelegate> delegate = [_delegates objectForKey:task];
-    if (error) {
-        [delegate request:(WXResourceRequest *)task.originalRequest didFailWithError:error];
-    }else {
-        [delegate requestDidFinishLoading:(WXResourceRequest *)task.originalRequest];
-    }
-    [_delegates removeObjectForKey:task];
-}
-
-#ifdef __IPHONE_10_0
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics
-{
-    id<WXResourceRequestDelegate> delegate = [_delegates objectForKey:task];
-    [delegate request:(WXResourceRequest *)task.originalRequest didFinishCollectingMetrics:metrics];
-}
-#endif
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h
deleted file mode 100644
index b20fb95..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import <Foundation/Foundation.h>
-
-@interface WXResourceResponse : NSHTTPURLResponse
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.m
deleted file mode 100644
index 66177f1..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.m
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import "WXResourceResponse.h"
-
-@implementation WXResourceResponse
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.h
deleted file mode 100644
index 1e254dd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXJSExceptionInfo.h"
-
-#pragma mark - const static string
-
-extern NSString* const WEEX_PAGE_TOPIC;
-
-/************** properties *****************/
-extern NSString* const KEY_PROPERTIES_ERROR_CODE;
-extern NSString* const KEY_PAGE_PROPERTIES_BIZ_ID;
-extern NSString* const KEY_PAGE_PROPERTIES_BUBDLE_URL;
-extern NSString* const KEY_PAGE_PROPERTIES_JSLIB_VERSION;
-extern NSString* const KEY_PAGE_PROPERTIES_WEEX_VERSION;
-extern NSString* const KEY_PAGE_PROPERTIES_REQUEST_TYPE;
-extern NSString* const KEY_PAGE_PROPERTIES_Z_CACHE_INFO;
-extern NSString* const KEY_PAGE_PROPERTIES_JS_FM_INIT;
-extern NSString* const KEY_PAGE_PROPERTIES_BUNDLE_TYPE;
-extern NSString* const KEY_PAGE_PROPERTIES_CONTAINER_NAME;
-extern NSString* const KEY_PAGE_PROPERTIES_INSTANCE_TYPE;
-extern NSString* const KEY_PAGE_PROPERTIES_PARENT_PAGE;
-extern NSString* const KEY_PAGE_PROPERTIES_RENDER_TYPE;
-extern NSString* const KEY_PAGE_PROPERTIES_UIKIT_TYPE;
-
-
-///************** stages *****************/
-extern NSString* const KEY_PAGE_STAGES_START;
-extern NSString* const KEY_PAGE_STAGES_DOWN_BUNDLE_START;
-extern NSString* const KEY_PAGE_STAGES_DOWN_BUNDLE_END;
-extern NSString* const KEY_PAGE_STAGES_CUSTOM_PREPROCESS_START;
-extern NSString* const KEY_PAGE_STAGES_CUSTOM_PREPROCESS_END;
-extern NSString* const KEY_PAGE_STAGES_RENDER_ORGIGIN;
-extern NSString* const KEY_PAGE_STAGES_LOAD_BUNDLE_START;
-extern NSString* const KEY_PAGE_STAGES_LOAD_BUNDLE_END;
-extern NSString* const KEY_PAGE_STAGES_EXECUTE_BUNDLE_END;
-extern NSString* const KEY_PAGE_STAGES_EXECUTE_JSON_START;
-extern NSString* const KEY_PAGE_STAGES_EXECUTE_JSON_END;
-extern NSString* const KEY_PAGE_STAGES_CREATE_FINISH;
-extern NSString* const KEY_PAGE_STAGES_FSRENDER;
-extern NSString* const KEY_PAGE_STAGES_NEW_FSRENDER;
-extern NSString* const KEY_PAGE_STAGES_INTERACTION;
-extern NSString* const KEY_PAGE_STAGES_DESTROY;
-
-///************** stats *****************/
-extern NSString* const KEY_PAGE_STATS_BUNDLE_SIZE;
-extern NSString* const KEY_PAGE_STATS_FS_CALL_JS_TIME;
-extern NSString* const KEY_PAGE_STATS_FS_CALL_JS_NUM;
-extern NSString* const KEY_PAGE_STATS_FS_TIMER_NUM;
-extern NSString* const KEY_PAGE_STATS_FS_CALL_NATIVE_TIME;
-extern NSString* const KEY_PAGE_STATS_FS_CALL_NATIVE_NUM;
-extern NSString* const KEY_PAGE_STATS_FS_CALL_EVENT_NUM;
-extern NSString* const KEY_PAGE_STATS_FS_REQUEST_NUM;
-
-extern NSString* const KEY_PAGE_STATS_SCROLLER_NUM;
-extern NSString* const KEY_PAGE_STATS_CELL_EXCEED_NUM;
-extern NSString* const KEY_PAGE_STATS_CELL_UN_RE_USE_NUM;
-extern NSString* const KEY_PAGE_STATS_CELL_DATA_UN_RECYCLE_NUM;
-extern NSString* const KEY_PAGE_STATS_EMBED_COUNT;
-extern NSString* const KEY_PAGE_STATS_LARGE_IMG_COUNT;
-
-extern NSString* const KEY_PAGE_STATS_MAX_DEEP_VIEW;
-extern NSString* const KEY_PAGE_STATS_MAX_DEEP_DOM;
-extern NSString* const KEY_PAGE_STATS_MAX_COMPONENT_NUM;
-extern NSString* const KEY_PAGE_STATS_WRONG_IMG_SIZE_COUNT;
-extern NSString* const KEY_PAGE_STATS_IMG_UN_RECYCLE_NUM;
-
-extern NSString* const KEY_PAGE_STATS_I_SCREEN_VIEW_COUNT;
-extern NSString* const KEY_PAGE_STATS_I_ALL_VIEW_COUNT;
-
-extern NSString* const KEY_PAGE_STATS_I_COMPONENT_CREATE_COUNT;
-extern NSString* const KEY_PAGE_ANIM_BACK_NUM;
-extern NSString* const KEY_PAGE_TIMER_BACK_NUM;
-extern NSString* const KEY_PAGE_STATS_ACTUAL_DOWNLOAD_TIME;
-
-extern NSString* const KEY_PAGE_STATS_IMG_LOAD_NUM;
-extern NSString* const KEY_PAGE_STATS_IMG_LOAD_SUCCESS_NUM;
-extern NSString* const KEY_PAGE_STATS_IMG_LOAD_FAIL_NUM;
-extern NSString* const KEY_PAGE_STATS_NET_NUM;
-extern NSString* const KEY_PAGE_STATS_NET_SUCCESS_NUM;
-extern NSString* const KEY_PAGE_STATS_NET_FAIL_NUM;
-extern NSString* const KEY_PAGE_STAGES_FIRST_INTERACTION_VIEW;
-extern NSString* const KEY_PAGE_STATS_BODY_RATIO;
-
-///************** value *****************/
-extern NSString* const VALUE_ERROR_CODE_DEFAULT;
-
-
-
-@interface WXApmForInstance : NSObject
-
-@property (nonatomic, assign) BOOL isFSEnd;
-@property (nonatomic,assign)  BOOL isOpenApm;
-@property (nonatomic, assign) BOOL isStartRecord;
-@property (nonatomic, assign) BOOL hasAddView;
-@property (nonatomic, assign) BOOL isDegrade;
-@property (nonatomic, assign) BOOL isStartRender;
-@property (nonatomic,assign)  BOOL  hasRecordFirstInterationView;
-@property (nonatomic, assign) BOOL isDownLoadFailed;
-@property (nonatomic,assign) double pageRatio;
-
-#pragma mark - basic method
-
-- (void) onEvent:(NSString *)name withValue:(id)value;
-- (void) onStage:(NSString *)name;
-- (void) onStageWithTime:(NSString*)name time:(long)unixTime;
-- (void) setProperty:(NSString *)name withValue:(id)value;
-- (void) setStatistic:(NSString *)name withValue:(double)value;
-
-#pragma mark - instance record 
-
-- (void) startRecord:(NSString*) instanceId;
-- (void) endRecord;
-- (void) updateFSDiffStats:(NSString *)name withDiffValue:(double)diff;
-- (void) updateDiffStats:(NSString *)name withDiffValue:(double)diff;
-- (void) updateMaxStats:(NSString *)name curMaxValue:(double)maxValue;
-- (void) updateExtInfoFromResponseHeader:(NSDictionary*) extInfo;
-- (void) forceSetInteractionTime:(long) unixTime;
-
-
-#pragma mark - called by IWXHttpAdapter implementer
-
-- (void) actionNetRequest;
-- (void) actionNetRequestResult:(bool)succeed withErrorCode:(NSString*)errorCode;
-
-#pragma mark - called by IWXImgLoaderAdapter implementer
-- (void) actionImgLoad;
-- (void) actionImgLoadResult:(bool)succeed withErrorCode:(NSString*)errorCode;
-
-#pragma mark record top5 errorMsg
-- (void) recordErrorMsg:(WXJSExceptionInfo *)exception;
-- (NSDictionary<NSString*,NSNumber*>*) stageDic;
-
-#pragma mark templateinfo
-- (NSString*) templateInfo;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.m
deleted file mode 100644
index 85946c7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Performance/WXApmForInstance.m
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXApmForInstance.h"
-#import "WXApmProtocol.h"
-#import "WXHandlerFactory.h"
-#import "WXSDKManager.h"
-#import "WXAppConfiguration.h"
-#import "WXUtility.h"
-#import "WXComponentManager.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXSDKEngine.h"
-#import "WXSDKError.h"
-#import "WXExceptionUtils.h"
-#import "WXSDKInstance_performance.h"
-#import "WXAnalyzerCenter+Transfer.h"
-
-
-#pragma mark - const static string
-
-NSString* const WEEX_PAGE_TOPIC = @"weex_page";
-
-/************** properties *****************/
-NSString* const KEY_PROPERTIES_ERROR_CODE = @"wxErrorCode";
-NSString* const KEY_PAGE_PROPERTIES_BIZ_ID = @"wxBizID";
-NSString* const KEY_PAGE_PROPERTIES_BUBDLE_URL = @"wxBundleUrl";
-NSString* const KEY_PAGE_PROPERTIES_JSLIB_VERSION  = @"wxJSLibVersion";
-NSString* const KEY_PAGE_PROPERTIES_WEEX_VERSION  = @"wxSDKVersion";
-NSString* const KEY_PAGE_PROPERTIES_REQUEST_TYPE  = @"wxRequestType";
-NSString* const KEY_PAGE_PROPERTIES_Z_CACHE_INFO  = @"wxZCacheInfo";
-NSString* const KEY_PAGE_PROPERTIES_JS_FM_INIT  = @"wxJsFrameworkInit";
-NSString* const KEY_PAGE_PROPERTIES_BUNDLE_TYPE = @"wxBundleType";
-NSString* const KEY_PAGE_PROPERTIES_CONTAINER_NAME = @"wxContainerName";
-NSString* const KEY_PAGE_PROPERTIES_INSTANCE_TYPE = @"wxInstanceType";
-NSString* const KEY_PAGE_PROPERTIES_PARENT_PAGE = @"wxParentPage";
-NSString* const KEY_PAGE_PROPERTIES_RENDER_TYPE = @"wxRenderType";
-NSString* const KEY_PAGE_PROPERTIES_UIKIT_TYPE = @"wxUIKitType";
-
-
-
-///************** stages *****************/
-NSString* const KEY_PAGE_STAGES_START = @"wxRecordStart";
-NSString* const KEY_PAGE_STAGES_DOWN_BUNDLE_START  = @"wxStartDownLoadBundle";
-NSString* const KEY_PAGE_STAGES_DOWN_BUNDLE_END  = @"wxEndDownLoadBundle";
-NSString* const KEY_PAGE_STAGES_CUSTOM_PREPROCESS_START  = @"wxCustomPreprocessStart";
-NSString* const KEY_PAGE_STAGES_CUSTOM_PREPROCESS_END  = @"wxCustomPreprocessEnd";
-NSString* const KEY_PAGE_STAGES_RENDER_ORGIGIN  = @"wxRenderTimeOrigin";
-NSString* const KEY_PAGE_STAGES_LOAD_BUNDLE_START  = @"wxStartLoadBundle";
-NSString* const KEY_PAGE_STAGES_LOAD_BUNDLE_END  = @"wxEndLoadBundle";
-NSString* const KEY_PAGE_STAGES_EXECUTE_BUNDLE_END  = @"wxEndExecuteBundle";
-NSString* const KEY_PAGE_STAGES_EXECUTE_JSON_START = @"wxStartExecuteJson";
-NSString* const KEY_PAGE_STAGES_EXECUTE_JSON_END = @"wxEndExecuteJson";
-NSString* const KEY_PAGE_STAGES_CREATE_FINISH = @"wxJSBundleCreateFinish";
-NSString* const KEY_PAGE_STAGES_FSRENDER  = @"wxFsRender";
-NSString* const KEY_PAGE_STAGES_NEW_FSRENDER = @"wxNewFsRender";
-NSString* const KEY_PAGE_STAGES_INTERACTION  = @"wxInteraction";
-NSString* const KEY_PAGE_STAGES_DESTROY  = @"wxDestroy";
-
-///************** stats *****************/
-NSString* const KEY_PAGE_STATS_BUNDLE_SIZE  = @"wxBundleSize";
-NSString* const KEY_PAGE_STATS_FS_CALL_JS_TIME  = @"wxFSCallJsTotalTime";
-NSString* const KEY_PAGE_STATS_FS_CALL_JS_NUM  = @"wxFSCallJsTotalNum";
-NSString* const KEY_PAGE_STATS_FS_TIMER_NUM = @"wxFSTimerCount";
-NSString* const KEY_PAGE_STATS_FS_CALL_NATIVE_TIME = @"wxFSCallNativeTotalTime";
-NSString* const KEY_PAGE_STATS_FS_CALL_NATIVE_NUM = @"wxFSCallNativeTotalNum";
-NSString* const KEY_PAGE_STATS_FS_CALL_EVENT_NUM = @"wxFSCallEventTotalNum";
-NSString* const KEY_PAGE_STATS_FS_REQUEST_NUM = @"wxFSRequestNum";
-
-NSString* const KEY_PAGE_STATS_SCROLLER_NUM = @"wxScrollerCount";
-NSString* const KEY_PAGE_STATS_CELL_EXCEED_NUM = @"wxCellExceedNum";
-NSString* const KEY_PAGE_STATS_CELL_UN_RE_USE_NUM = @"wxCellUnReUseCount";
-NSString* const KEY_PAGE_STATS_CELL_DATA_UN_RECYCLE_NUM = @"wxCellDataUnRecycleCount";
-NSString* const KEY_PAGE_STATS_EMBED_COUNT=@"wxEmbedCount";
-NSString* const KEY_PAGE_STATS_LARGE_IMG_COUNT=@"wxLargeImgMaxCount";
-
-NSString* const KEY_PAGE_STATS_MAX_DEEP_VIEW = @"wxMaxDeepViewLayer";
-NSString* const KEY_PAGE_STATS_MAX_DEEP_DOM = @"wxMaxDeepVDomLayer";
-NSString* const KEY_PAGE_STATS_MAX_COMPONENT_NUM = @"wxMaxComponentCount";
-NSString* const KEY_PAGE_STATS_WRONG_IMG_SIZE_COUNT = @"wxWrongImgSizeCount";
-NSString* const KEY_PAGE_STATS_IMG_UN_RECYCLE_NUM = @"wxImgUnRecycleCount";
-
-NSString* const KEY_PAGE_STATS_I_SCREEN_VIEW_COUNT = @"wxInteractionScreenViewCount";
-NSString* const KEY_PAGE_STATS_I_ALL_VIEW_COUNT = @"wxInteractionAllViewCount";
-
-NSString* const KEY_PAGE_STATS_I_COMPONENT_CREATE_COUNT = @"wxInteractionComponentCreateCount";
-NSString* const KEY_PAGE_ANIM_BACK_NUM = @"wxAnimationInBackCount";
-NSString* const KEY_PAGE_TIMER_BACK_NUM = @"wxTimerInBackCount";
-NSString* const KEY_PAGE_STATS_ACTUAL_DOWNLOAD_TIME = @"wxActualNetworkTime";
-
-NSString* const KEY_PAGE_STATS_IMG_LOAD_NUM = @"wxImgLoadCount";
-NSString* const KEY_PAGE_STATS_IMG_LOAD_SUCCESS_NUM = @"wxImgLoadSuccessCount";
-NSString* const KEY_PAGE_STATS_IMG_LOAD_FAIL_NUM = @"wxImgLoadFailCount";
-NSString* const KEY_PAGE_STATS_NET_NUM  = @"wxNetworkRequestCount";
-NSString* const KEY_PAGE_STATS_NET_SUCCESS_NUM = @"wxNetworkRequestSuccessCount";
-NSString* const KEY_PAGE_STATS_NET_FAIL_NUM = @"wxNetworkRequestFailCount";
-NSString* const KEY_PAGE_STAGES_FIRST_INTERACTION_VIEW = @"wxFirstInteractionView";
-NSString* const KEY_PAGE_STATS_BODY_RATIO = @"wxBodyRatio";
-
-///************** value *****************/
-NSString* const VALUE_ERROR_CODE_DEFAULT = @"0";
-
-@interface WXApmForInstance ()
-{
-    BOOL _isRecord;
-    BOOL _isEnd;
-    NSDictionary* _responseHeader;
-    BOOL _hasRecordInteractionTime;
-    BOOL _hasRecordDownLoadStart;
-    BOOL _hasRecordDownLoadEnd;
-    BOOL _forceRecordInteractionTime;
-}
-
-@property (nonatomic,strong) id<WXApmProtocol> apmProtocolInstance;
-@property (nonatomic,strong) NSString* instanceId;
-@property (nonatomic,strong) NSMutableDictionary<NSString*,NSNumber*>* recordStatsMap;
-@property (nonatomic,strong) NSMutableDictionary<NSString*,NSNumber*>* recordStageMap;
-@property (nonatomic,strong) NSMutableArray<WXJSExceptionInfo*>* errorList;
-@end
-
-@implementation WXApmForInstance
-
-
-- (instancetype) init
-{
-    self = [super init];
-    if (self) {
-        _recordStatsMap = [[NSMutableDictionary alloc] init];
-        _recordStageMap = [[NSMutableDictionary alloc] init];
-        _errorList = [[NSMutableArray alloc] init];
-        _isOpenApm = [self _loadApmSwitch];
-        if (_isOpenApm) {
-            id<WXApmGeneratorProtocol> generater = [WXHandlerFactory handlerForProtocol:@protocol(WXApmGeneratorProtocol)];
-            _apmProtocolInstance = [generater gengratorApmInstance:WEEX_PAGE_TOPIC];
-        }
-    }
-    return self;
-}
-
-- (void) onEvent:(NSString *)name withValue:(id)value
-{
-    if (nil == _apmProtocolInstance || _isEnd) {
-        return;
-    }
-    [self.apmProtocolInstance onEvent:name withValue:value];
-}
-
-- (void) onStage:(NSString *)name
-{
-    if(_isEnd){
-        return;
-    }
-    [self onStageWithTime:name time:[WXUtility getUnixFixTimeMillis]];
-}
-
-- (void) onStageWithTime:(NSString*)name time:(long)unixTime
-{
-    if(_isEnd){
-        return;
-    }
-    if ([WXAnalyzerCenter isOpen]) {
-        [WXAnalyzerCenter transferPerformance:self.instanceId withType:@"stage" andKey:name andValue:@(unixTime)];
-    }
-
-    if (nil == _apmProtocolInstance) {
-        return;
-    }
-    if ([KEY_PAGE_STAGES_DOWN_BUNDLE_START isEqualToString:name]) {
-        if (_hasRecordDownLoadStart) {
-            return;
-        }
-        _hasRecordDownLoadStart = YES;
-    }
-    if ([KEY_PAGE_STAGES_DOWN_BUNDLE_END isEqualToString:name]) {
-        if (_hasRecordDownLoadEnd) {
-            return;
-        }
-        _hasRecordDownLoadEnd = YES;
-    }
-    
-    if ([KEY_PAGE_STAGES_INTERACTION isEqualToString:name]) {
-        _hasRecordInteractionTime = YES;
-        if (_forceRecordInteractionTime) {
-            return;
-        }
-    }
-    [self.apmProtocolInstance onStage:name withValue:unixTime];
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-        [weakSelf.recordStageMap setObject:@(unixTime) forKey:name];
-    });
-}
-
-- (void) setProperty:(NSString *)name withValue:(id)value
-{
-    if(_isEnd){
-        return;
-    }
-    
-    if ([WXAnalyzerCenter isOpen]) {
-        [WXAnalyzerCenter transferPerformance:self.instanceId withType:@"properties" andKey:name andValue:value];
-    }
-    
-    if (nil == _apmProtocolInstance) {
-        return;
-    }
-   
-    [self.apmProtocolInstance addProperty:name withValue:value];
-}
-
-- (void) setStatistic:(NSString *)name withValue:(double)value
-{
-    if(_isEnd){
-        return;
-    }
-    if ([WXAnalyzerCenter isOpen]) {
-        [WXAnalyzerCenter transferPerformance:self.instanceId withType:@"stats" andKey:name andValue:@(value)];
-    }
-    if (nil == _apmProtocolInstance) {
-        return;
-    }
-  
-    [self.apmProtocolInstance addStatistic:name withValue:value];
-}
-
-#pragma mark - instance record
-
-- (void) startRecord:(NSString*) instanceId
-{
-    if (_isRecord || ![self _shouldRecordInfo]) {
-        return;
-    }
-  
-    _isRecord = YES;
-    _instanceId = instanceId;
-    
-    if (nil != _apmProtocolInstance) {
-        [self.apmProtocolInstance onStart:instanceId topic:WEEX_PAGE_TOPIC];
-    }
-    [self onStage:KEY_PAGE_STAGES_START];
-    WXSDKInstance* instance = [WXSDKManager instanceForID:instanceId];
-    if (nil == instance) {
-        return;
-    }
-
-    for (NSString* key in instance.continerInfo) {
-        id value = [instance.continerInfo objectForKey:key];
-        [self setProperty:key withValue:value];
-    }
-
-    [self setProperty:KEY_PAGE_PROPERTIES_CONTAINER_NAME withValue:NSStringFromClass(instance.viewController.class)?:@"unknownVCName"];
-    [self setProperty:KEY_PAGE_PROPERTIES_INSTANCE_TYPE withValue:@"page"];
-    [self setProperty:KEY_PAGE_PROPERTIES_BIZ_ID withValue: instance.pageName?:@"unknownPageName"];
-    [self setProperty:KEY_PAGE_PROPERTIES_BUBDLE_URL withValue:instance.scriptURL.absoluteString?:@"unknownUrl"];
-    [self setProperty:KEY_PROPERTIES_ERROR_CODE withValue:VALUE_ERROR_CODE_DEFAULT];
-    [self setProperty:KEY_PAGE_PROPERTIES_JSLIB_VERSION withValue:[WXAppConfiguration JSFrameworkVersion]?:@"unknownJSFrameworkVersion"];
-    [self setProperty:KEY_PAGE_PROPERTIES_WEEX_VERSION withValue:WX_SDK_VERSION];
-    if (self.pageRatio >0) {
-        [self setStatistic:KEY_PAGE_STATS_BODY_RATIO withValue:self.pageRatio];
-    }
-    
-    //for apm protocl
-    //iOS/Android we default recycle img when imgView disapper form screen
-    //but in Android ,js can switch recycle or not
-    [self updateDiffStats:KEY_PAGE_STATS_IMG_UN_RECYCLE_NUM withDiffValue:0];
-}
-
-- (void) endRecord
-{
-    if (_isEnd) {
-        return;
-    }
-    _isEnd = YES;
-    [self onStage:KEY_PAGE_STAGES_DESTROY];
-    if (nil != _apmProtocolInstance) {
-         [self.apmProtocolInstance onEnd];
-    }
-    
-    WXLogInfo(@"apm data: %@", self.recordStageMap);
-    NSNumber* stageRenderOrigin = self.recordStageMap[KEY_PAGE_STAGES_RENDER_ORGIGIN];
-    NSNumber* stageInteraction = self.recordStageMap[KEY_PAGE_STAGES_INTERACTION];
-    if (stageRenderOrigin && stageInteraction) {
-        WXLogInfo(@"apm interaction time(ms): %lld", [stageInteraction longLongValue] - [stageRenderOrigin longLongValue]);
-    }
-}
-
-- (void) updateFSDiffStats:(NSString *)name withDiffValue:(double)diff
-{
-    [self updateDiffStats:name withDiffValue:diff];
-}
-
-- (void) updateDiffStats:(NSString *)name withDiffValue:(double)diff
-{
-    if (![self _shouldRecordInfo]) {
-        return;
-    }
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-        NSNumber* preNumber = [weakSelf.recordStatsMap objectForKey:name];
-        double preVal = nil == preNumber?0:preNumber.doubleValue;
-        double currentVal = preVal + diff;
-        [weakSelf.recordStatsMap setObject:@(currentVal) forKey:name];
-        [weakSelf setStatistic:name withValue:currentVal];
-    });
-}
-
-- (void) updateMaxStats:(NSString *)name curMaxValue:(double)currentValue
-{
-    if (![self _shouldRecordInfo]) {
-        return;
-    }
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-        NSNumber* maxNumber = [weakSelf.recordStatsMap objectForKey:name];
-        double maxVal = nil == maxNumber?0:maxNumber.doubleValue;
-        
-        if (maxVal < currentValue) {
-            maxVal = currentValue;
-            [weakSelf.recordStatsMap setObject:@(maxVal) forKey:name];
-            [weakSelf setStatistic:name withValue:maxVal];
-        }
-    });
-}
-
-- (void) updateExtInfoFromResponseHeader:(NSDictionary*) extInfo
-{
-    _responseHeader = extInfo;
-    
-    if (![self _shouldRecordInfo] || nil == extInfo) {
-        return;
-    }
-    
-    id wxRequestType = [extInfo objectForKey:KEY_PAGE_PROPERTIES_REQUEST_TYPE];
-    if (nil != wxRequestType && [wxRequestType isKindOfClass: NSString.class]) {
-        [self setProperty:KEY_PAGE_PROPERTIES_REQUEST_TYPE withValue:wxRequestType];
-    }
-    
-    id wxNetLibDownBundleTime = [extInfo objectForKey:KEY_PAGE_STATS_ACTUAL_DOWNLOAD_TIME];
-    if (nil != wxNetLibDownBundleTime && [wxNetLibDownBundleTime isKindOfClass: NSNumber.class]) {
-        double value = ((NSNumber *)wxNetLibDownBundleTime).doubleValue;
-        [self  setStatistic:KEY_PAGE_STATS_ACTUAL_DOWNLOAD_TIME withValue:value];
-    }
-    
-    id wxZcacheInfo = [extInfo objectForKey:@"X-ZCache-Info"];
-    if (nil !=wxZcacheInfo && [wxZcacheInfo isKindOfClass: NSString.class]) {
-        [self setProperty:KEY_PAGE_PROPERTIES_Z_CACHE_INFO withValue:wxZcacheInfo];
-    }
-}
-
-#pragma mark - called by IWXHttpAdapter implementer
-
-- (void) actionNetRequest
-{
-    if (![self _shouldRecordInfo]) {
-        return;
-    }
-    if (!self.isFSEnd) {
-        [self updateFSDiffStats:KEY_PAGE_STATS_FS_REQUEST_NUM withDiffValue:1];
-    }
-    [self updateDiffStats:KEY_PAGE_STATS_NET_NUM withDiffValue:1];
-}
-
-- (void) actionNetRequestResult:(bool)succeed withErrorCode:(NSString*)errorCode
-{
-    if (![self _shouldRecordInfo]) {
-        return;
-    }
-    if (succeed) {
-        [self updateDiffStats:KEY_PAGE_STATS_NET_SUCCESS_NUM withDiffValue:1];
-    } else {
-        [self updateDiffStats:KEY_PAGE_STATS_NET_FAIL_NUM withDiffValue:1];
-    }
-}
-
-#pragma mark - called by IWXImgLoaderAdapter implementer
-
-- (void) actionImgLoad
-{
-    if (![self _shouldRecordInfo]) {
-        return;
-    }
-    [self updateDiffStats:KEY_PAGE_STATS_IMG_LOAD_NUM withDiffValue:1];
-}
-
-- (void) actionImgLoadResult:(bool)succeed withErrorCode:(NSString*)errorCode
-{
-    if (![self _shouldRecordInfo]) {
-        return;
-    }
-    if (succeed) {
-        [self updateDiffStats:KEY_PAGE_STATS_IMG_LOAD_SUCCESS_NUM withDiffValue:1];
-    } else {
-        [self updateDiffStats:KEY_PAGE_STATS_IMG_LOAD_FAIL_NUM withDiffValue:1];
-    }
-}
-
-- (BOOL) _shouldRecordInfo
-{
-    if (_isEnd) {
-        return NO;
-    }
-    return self.apmProtocolInstance != nil || [WXAnalyzerCenter isOpen];
-}
-
-- (void) recordErrorMsg:(WXJSExceptionInfo *)exception
-{
-    if (nil == exception || !self.isOpenApm) {
-        return;
-    }
-    __weak typeof(self) weakSelf = self;
-    WXPerformBlockOnComponentThread(^{
-        if (weakSelf.errorList.count > 5) {
-            [weakSelf.errorList removeObjectAtIndex:0];
-            [weakSelf.errorList addObject:exception];
-        }
-    });
-}
-
-- (NSArray<WXJSExceptionInfo*>*) topExceptionList
-{
-    return self.errorList;
-}
-
-- (void) _checkScreenEmptyAndReport
-{
-//    if(self.isDownLoadFailed || self.hasAddView || !self.isStartRender || self.isDegrade){
-//        return;
-//    }
-//    if (![self _isReportEmptyScreenError]) {
-//        return;
-//    }
-//    __weak WXApmForInstance* weakSelf = self;
-//    WXPerformBlockOnComponentThread(^{
-//        __strong WXApmForInstance* strongSelf = weakSelf;
-//        if (nil == strongSelf) {
-//            return;
-//        }
-//        if (nil == [strongSelf.stageDic objectForKey:KEY_PAGE_STAGES_CREATE_FINISH]) {
-//            return;
-//        }
-//        long curTime = [WXUtility getUnixFixTimeMillis];
-//        NSNumber* startExecJsTime = [strongSelf.stageDic objectForKey:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
-//        if (nil == startExecJsTime) {
-//            return;
-//        }
-//        long jsExecTime = curTime - startExecJsTime.longValue;
-//        if (jsExecTime < 4000) {
-//            return;
-//        }
-//
-//        NSString *codeStr = [NSString stringWithFormat:@"%d",WX_KEY_EXCEPTION_EMPTY_SCREEN_JS];
-//        NSDictionary* extInfo = @{
-//            @"wxBeginRender":@(strongSelf.isStartRender),
-//            @"wxHasAddView":@(strongSelf.hasAddView),
-//            @"wxHasDegrade":@(strongSelf.isDegrade),
-//            @"wxJSExecTime":@(jsExecTime)
-//            };
-//        NSString* errorMsg;
-//        if(self.errorList.count<=0){
-//            errorMsg = @"whiteScreen :never add view until page destroy(js has execute > 3s)";
-//        }else {
-//            errorMsg = [NSString stringWithFormat:@"writeScreen :history exception :%@",[strongSelf _convertTopExceptionListToStr]];
-//        }
-//        [WXExceptionUtils commitCriticalExceptionRT:strongSelf.instanceId errCode:codeStr function:@"_checkScreenEmptyAndReport"
-//                                          exception:errorMsg extParams:extInfo];
-//    });
-}
-
-- (NSString *)_convertTopExceptionListToStr
-{
-    if (!self.isOpenApm) {
-        return @"";
-    }
-   
-    NSString* errorStr = @"";
-    for (WXJSExceptionInfo* exception in self.errorList) {
-        errorStr = [errorStr stringByAppendingFormat:
-                    @"%@ -> code:%@,func:%@,exception:%@ ========>",
-                    errorStr,exception.errorCode,exception.functionName,exception.exception
-                    ];
-    }
-    return errorStr;
-}
-
-- (NSDictionary<NSString*,NSNumber*>*) stageDic
-{
-    return self.recordStageMap;
-}
-
-- (BOOL) _loadApmSwitch
-{
-    BOOL openApm = YES;
-    id<WXConfigCenterProtocol> configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-    
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-        openApm = [[configCenter configForKey:@"iOS_weex_ext_config.open_apm" defaultValue:@(YES) isDefault:NULL] boolValue];
-    }
-    return openApm;
-}
-
-- (BOOL) _isReportEmptyScreenError
-{
-    BOOL report = YES;
-    id<WXConfigCenterProtocol> configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-    
-    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-        report = [[configCenter configForKey:@"iOS_weex_ext_config.report_write_screen" defaultValue:@(YES) isDefault:NULL] boolValue];
-    }
-    return report;
-}
-
-- (NSString*) templateInfo
-{
-    
-    NSString* headerStr = [WXUtility JSONString:_responseHeader];
-    NSString* bundleVerfiInfo = nil;
-    WXSDKInstance* instance = [WXSDKManager instanceForID:self.instanceId];
-    if (nil != instance) {
-        bundleVerfiInfo = [WXUtility JSONString:instance.userInfo];
-    }
-    NSString* info = [NSString stringWithFormat:@"bundleVerfiInfo :%@, httpHeaderInfo:%@",bundleVerfiInfo?:@"unSetVerfiInfo",headerStr?:@"unSetHeader"];
-    return info;
-}
-
-- (void) forceSetInteractionTime:(long) unixTime
-{
-    [self onStageWithTime:KEY_PAGE_STAGES_INTERACTION time:unixTime];
-    _forceRecordInteractionTime=YES;
-}
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAnalyzerProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAnalyzerProtocol.h
deleted file mode 100644
index 6663c80..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAnalyzerProtocol.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXAppMonitorProtocol.h"
-
-#define GROUP_ANALYZER          @"WXAnalyzer"
-#define MODULE_PERFORMANCE      @"WXPerformance"
-#define MODULE_ERROR            @"WXError"
-#define TYPE_MEASURE_REAL       @"measure_real_time"
-#define TYPE_DIMEN_REAL         @"dimen_real_time"
-#define  TYPE_JS_ERROR          @"js"
-
-@protocol WXAnalyzerProtocol <NSObject>
-
-
-@required
-/**
- @param value  = @{
-                    @"group":group,
-                    @"module":module,
-                    @"type":type,
-                    @"data":jsonData
-                };
- */
-- (void)transfer:(NSDictionary *) value;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXApmProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXApmProtocol.h
deleted file mode 100644
index 42643f0..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXApmProtocol.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-
-@protocol WXApmProtocol <NSObject>
-
-/**
- * start record
- *
- * @param instanceId instanceId
- */
-@required
-- (void) onStart:(NSString*)instanceId topic:(NSString*)topic;
-
-/**
- * pause apm record (apm ext mem / fps)
- */
-@required
-- (void) pauseApmRecord;
-
-/**
- * resume apm record (apm ext mem / fps)
- */
-@required
-- (void) resumeApmRecord;
-
-/**
- * end record
- */
-@required
-- (void) onEnd;
-
-/**
- * record event
- */
-@required
-- (void) onEvent:(NSString *)name withValue:(id)value;   
-
-/**
- * record stage
- */
-@required
-- (void) onStage:(NSString *)name withValue:(long)timestamp;
-
-/**
- * record property
- */
-@required
-- (void) addProperty:(NSString *)name withValue:(id)value;
-
-/**
- * record statistic
- */
-@required
-- (void) addStatistic:(NSString *)name withValue:(double)value;
-
-@required
-- (void) onSubProcedureBegin:(NSString*)subProcedureName;
-
-@required
-- (void) onSubProcedureEndSucceed:(NSString*)subProcedureName;
-
-@required
-- (void) onSubProcedureEndFailed:(NSString*)subProcedureName;
-
-/**
- * record biz properties
- */
-@required
-- (void) addBiz:(NSString *)bizID withValue:(NSDictionary *)properties;
-
-/**
- * record biz stage
- */
-@required
-- (void) addBizStage:(NSString *)bizID withValue:(NSDictionary *)stage;
-
-@end
-
-@protocol WXApmGeneratorProtocol <NSObject>
-
-@required
-- (id<WXApmProtocol>)gengratorApmInstance:(NSString *) type;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h
deleted file mode 100644
index 7112097..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleProtocol.h"
-
-/**  dimenValue  */
-#define BIZTYPE             @"bizType"
-#define PAGENAME            @"pageName"
-#define WXSDKVERSION        @"WXSDKVersion"
-#define JSLIBVERSION        @"JSLibVersion"
-#define JSLIBSIZE           @"JSLibSize"
-#define WXREQUESTTYPE       @"requestType"
-#define WXCONNECTIONTYPE    @"connectionType"
-#define NETWORKTYPE         @"networkType"
-#define CACHETYPE           @"cacheType"
-#define WXCUSTOMMONITORINFO @"customMonitorInfo"
-
-/**  measureValue  */
-
-#define SDKINITTIME         @"SDKInitTime"
-#define SDKINITINVOKETIME   @"SDKInitInvokeTime"
-#define JSLIBINITTIME       @"JSLibInitTime"
-#define JSTEMPLATESIZE      @"JSTemplateSize"
-#define NETWORKTIME         @"networkTime"
-#define COMMUNICATETIME     @"communicateTime"
-#define SCREENRENDERTIME    @"screenRenderTime"
-#define TOTALTIME           @"totalTime"
-#define FIRSETSCREENJSFEXECUTETIME  @"firstScreenJSFExecuteTime"
-
-#define CALLCREATEINSTANCETIME  @"callCreateInstanceTime"
-#define COMMUNICATETOTALTIME    @"communicateTotalTime"
-#define FSRENDERTIME    @"fsRenderTime"
-#define COMPONENTCOUNT      @"componentCount"
-#define M_COMPONENT_TIME    @"componentCreateTime"
-
-#define CACHEPROCESSTIME    @"cacheProcessTime"
-#define CACHERATIO          @"cacheRatio"
-
-//todo new point
-#define M_FS_CALL_JS_TIME       @"fsCallJsTotalTime"
-#define M_FS_CALL_JS_NUM        @"fsCallJsTotalNum"
-#define M_FS_CALL_NATIVE_TIME   @"fsCallNativeTotalTime"
-#define M_FS_CALL_NATIVE_NUM    @"fsCallNativeTotalNum"
-#define M_FS_CALL_EVENT_NUM     @"fsCallEventTotalNum"
-#define M_FS_REQUEST_NET_NUM    @"fsRequestNum"
-#define M_CELL_EXCEED_NUM       @"cellExceedNum"
-#define M_MAX_DEEP_VDOM         @"maxDeepVDomLayer"
-#define M_IMG_WRONG_SIZE_NUM    @"imgSizeCount"
-#define M_TIMER_NUM             @"timerCount"
-#define M_WRONG_IMG_NUM         @"imgSizeCount"
-#define M_INTERACTION_TIME      @"interactionTime"
-#define M_INTERACTION_ADD_COUNT    @"interactionViewAddCount"
-#define M_INTERACTION_LIMIT_ADD_COUNT    @"interactionViewAddLimitCount"
-#define M_NEW_FS_RENDER_TIME             @"newFsRenderTime"
-
-
-@protocol WXAppMonitorProtocol <WXModuleProtocol>
-
-- (void)commitAppMonitorArgs:(NSDictionary *)args;
-
-- (void)commitAppMonitorAlarm:(NSString *)pageName monitorPoint:(NSString *)monitorPoint success:(BOOL)success errorCode:(NSString *)errorCode errorMsg:(NSString *)errorMsg arg:(NSString *)arg;
-
-@optional
-
-- (void)commitMonitorWithPage:(NSString *)pageName monitorPoint:(NSString *)monitorPoint args:(NSDictionary *)args;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
deleted file mode 100644
index b3d1019..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <JavaScriptCore/JavaScriptCore.h>
-
-typedef NSInteger(^WXJSCallNative)(NSString *instance, NSArray *tasks, NSString *callback);
-typedef NSInteger(^WXJSCallAddElement)(NSString *instanceId,  NSString *parentRef, NSDictionary *elementData, NSInteger index);
-typedef NSInteger(^WXJSCallCreateBody)(NSString *instanceId, NSDictionary *bodyData);
-typedef NSInteger(^WXJSCallRemoveElement)(NSString *instanceId,NSString *ref);
-typedef NSInteger(^WXJSCallMoveElement)(NSString *instanceId,NSString *ref,NSString *parentRef,NSInteger index);
-typedef NSInteger(^WXJSCallUpdateAttrs)(NSString *instanceId,NSString *ref,NSDictionary *attrsData);
-typedef NSInteger(^WXJSCallUpdateStyle)(NSString *instanceId,NSString *ref,NSDictionary *stylesData);
-typedef NSInteger(^WXJSCallAddEvent)(NSString *instanceId,NSString *ref,NSString *event);
-typedef NSInteger(^WXJSCallRemoveEvent)(NSString *instanceId,NSString *ref,NSString *event);
-typedef NSInteger(^WXJSCallCreateFinish)(NSString *instanceId);
-typedef NSInteger(^WXJSCallRefreshFinish)(NSString *instanceId);
-typedef NSInteger(^WXJSCallUpdateFinish)(NSString *instanceId);
-typedef NSInvocation *(^WXJSCallNativeModule)(NSString *instanceId, NSString *moduleName, NSString *methodName, NSArray *args, NSDictionary *options);
-typedef void (^WXJSCallNativeComponent)(NSString *instanceId, NSString *componentRef, NSString *methodName, NSArray *args, NSDictionary *options);
-typedef NSInteger(^WXJSCallUpdateComponentData)(NSString *instanceId, NSString *componentId, NSString *jsonData);
-
-@protocol WXBridgeProtocol <NSObject>
-
-@property (nonatomic, readonly) JSValue* exception;
-
-/**
- * Executes the js framework code in javascript engine
- * You can do some setup in this method
- */
-- (void)executeJSFramework:(NSString *)frameworkScript;
-
-/**
- * Executes the js code in javascript engine
- * You can do some setup in this method
- */
-- (void)executeJavascript:(NSString *)script;
-
-/**
- * Executes global js method with specific arguments
- */
-- (JSValue *)callJSMethod:(NSString *)method args:(NSArray*)args;
-
-/**
- * Reset js engine environment, called when any environment variable is changed.
- */
-- (void)resetEnvironment;
-
-@optional
-
-/**
- * Remove instance's timer.
- */
--(void)removeTimers:(NSString *)instance;
-
-/**
- * Called when garbage collection is wanted by sdk.
- */
-- (void)garbageCollect;
-
-@required
-
-/**
- * Register callback when call __updateComponentData tasks occur. only use for data render
- */
-- (void)registerCallUpdateComponentData:(WXJSCallUpdateComponentData)callUpdateComponentData;
-
-/**
- * Register callback when call native tasks occur
- */
-- (void)registerCallNative:(WXJSCallNative)callNative;
-
-/**
- * Register callback when addElement tasks occur
- */
-- (void)registerCallAddElement:(WXJSCallAddElement)callAddElement;
-
-/**
- * Register callback when createBody tasks occur
- */
-- (void)registerCallCreateBody:(WXJSCallCreateBody)callCreateBody;
-
-/**
- * Register callback when removeElement tasks occur
- */
-- (void)registerCallRemoveElement:(WXJSCallRemoveElement)callRemoveElement;
-
-/**
- * Register callback when removeElement tasks occur
- */
-- (void)registerCallMoveElement:(WXJSCallMoveElement)callMoveElement;
-
-/**
- * Register callback when updateAttrs tasks occur
- */
-- (void)registerCallUpdateAttrs:(WXJSCallUpdateAttrs)callUpdateAttrs;
-
-/**
- * Register callback when updateStyle tasks occur
- */
-- (void)registerCallUpdateStyle:(WXJSCallUpdateStyle)callUpdateStyle;
-
-/**
- * Register callback when addEvent tasks occur
- */
-- (void)registerCallAddEvent:(WXJSCallAddEvent)callAddEvent;
-
-/**
- * Register callback when removeEvent tasks occur
- */
-- (void)registerCallRemoveEvent:(WXJSCallRemoveEvent)callRemoveEvent;
-
-/**
- * Register callback when createFinish tasks occur
-*/
-- (void)registerCallCreateFinish:(WXJSCallCreateFinish)callCreateFinish;
-
-/**
- * Register callback for global js function `callNativeModule`
- */
-- (void)registerCallNativeModule:(WXJSCallNativeModule)callNativeModuleBlock;
-
-/**
- * Register callback for global js function `callNativeComponent`
- */
-- (void)registerCallNativeComponent:(WXJSCallNativeComponent)callNativeComponentBlock;
-
-@optional
-
-/**
- * Register callback when refreshFinish tasks occur
- */
-- (void)registerCallRefreshFinish:(WXJSCallRefreshFinish)callRefreshFinish;
-
-/**
- * Register callback when updateFinish tasks occur
- */
-- (void)registerCallUpdateFinish:(WXJSCallUpdateFinish)callUpdateFinish;
-
-/*
- * Executes the specified JavaScript code, treating the specified URL as its source location.
- * Evaluating a script runs any top-level code and adds function or object definitions to the brige’s global object.
- * The sourceURL parameter is informative only; debuggers may use this URL when reporting exceptions.
- @param script   The JavaScript source code to evaluate.
- @param sourceURL A URL to be considered as the script’s origin.
- @return ReturnsThe last value generated by the script. Note that a script can result in the JavaScript value undefined.
- */
-- (JSValue *)executeJavascript:(NSString *)script withSourceURL:(NSURL*)sourceURL;
-
-
-@property (nonatomic, strong) NSString* weexInstanceId;
-
-/**
- set JavaScriptContext
- */
-- (void)setJSContext:(JSContext*)context;
-
-/*
- * javaScript runtime context
- */
-- (JSContext*)javaScriptContext;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXConfigCenterProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXConfigCenterProtocol.h
deleted file mode 100644
index d6210f4..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXConfigCenterProtocol.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-@protocol WXConfigCenterProtocol <NSObject>
-
-/**
- get config from config center handler
- @param key the key for config
- @param defaultValue default value for key if the key does not exist.
- @param isDefault whether the value is default value
- @return the value for config key
- */
-- (id)configForKey:(NSString*)key defaultValue:(id)defaultValue isDefault:(BOOL*)isDefault;
-
-@optional
-/**
- get group config from config center handler
- @param group the groupName for config
-*/
-
-- (id)configForGroup:(NSString*)group;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h
deleted file mode 100644
index 1875e79..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol WXDestroyProtocol <NSObject>
-
-/**
- *  @abstract execute unload function before dealloc
- */
-- (void)unload;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h
deleted file mode 100644
index ea20753..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleProtocol.h"
-
-@protocol WXEventModuleProtocol<WXModuleProtocol>
-
-- (void)openURL:(NSString *)url;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h
deleted file mode 100644
index c920b73..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import <Foundation/Foundation.h>
-
-@protocol WXExtendCallNativeProtocol <NSObject>
-
-@required
-
-/**
- * @abstract check parameters
- *
- * @param parameters the checked parameters.
- *
- * @return YES or NO.
- *
- */
-+ (BOOL)checkParameters:(NSDictionary *)parameters;
-
-/**
- * @abstract excuteCallNative
- *
- * @param parameters the checked parameters.
- *
- * @return A value.
- *
- */
-+ (id)excuteCallNative:(NSDictionary *)parameters;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
deleted file mode 100644
index d2b6f51..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleProtocol.h"
-#import "WXType.h"
-
-@protocol WXImageOperationProtocol <NSObject>
-
-- (void)cancel;
-
-@end
-
-typedef NS_ENUM(NSInteger, WXImageLoaderCacheType) {
-    /**
-     * The image wasn't available the imageLoad caches, but was downloaded from the web.
-     */
-    WXImageLoaderCacheTypeNone,
-    /**
-     * The image was obtained from the disk cache.
-     */
-    WXImageLoaderCacheTypeDisk,
-    /**
-     * The image was obtained from the memory cache.
-     */
-    WXImageLoaderCacheTypeMemory
-};
-
-@protocol WXImgLoaderProtocol <WXModuleProtocol>
-
-/**
- * @abstract Creates a image download handler with a given URL
- *
- * @param url The URL of the image to download
- *
- * @param imageFrame  The frame of the image you want to set
- *
- * @param options : The options to be used for this download
- *
- * @param completedBlock : A block called once the download is completed.
- *                 image : the image which has been download to local.
- *                 error : the error which has happened in download.
- *              finished : a Boolean value indicating whether download action has finished.
- */
-- (id<WXImageOperationProtocol>)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)options completed:(void(^)(UIImage *image,  NSError *error, BOOL finished))completedBlock;
-
-@optional
-
-/**
- * @abstract Creates a image download handler with a given URL
- *
- * @param imageView UIImageView to display the image
- *
- * @param url The URL of the image to download
- *
- * @param placeholder The image to be set initially, until the image request finishes.
- *
- * @param options : The options to be used for download operation
- *
- * @param progressBlock : A block called while the download start
- *
- * @param completedBlock : A block called once the download is completed.
- *                 image : the image which has been download to local.
- *                 error : the error which has happened in download.
- *              finished : a Boolean value indicating whether download action has finished.
- */
-- (void)setImageViewWithURL:(UIImageView*)imageView
-                        url:(NSURL *)url
-           placeholderImage:(UIImage *)placeholder
-                    options:(NSDictionary*)options
-                   progress:(void(^)(NSInteger receivedSize, NSInteger expectedSize))progressBlock
-                  completed:(void(^)(UIImage *image, NSError *error, WXImageLoaderCacheType cacheType, NSURL *imageURL))completedBlock;
-
-/**
- * Cancel the current download image
- */
-- (void)cancelCurrentImageLoad:(UIImageView*)imageView;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h
deleted file mode 100644
index dd91aed..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXJSExceptionInfo.h"
-
-typedef WXJSExceptionInfo WXRuntimeCheckException;
-
-@protocol WXJSExceptionProtocol <NSObject>
-
-/**
- * report js exception
- *
- * @param exception WXJSExceptionInfo
- */
-
-- (void)onJSException:(WXJSExceptionInfo*) exception;
-
-
-@optional
-
-/**
- * report runtime check exception, this is optional for this protocol
- */
-- (void)onRuntimeCheckException:(WXRuntimeCheckException*)exception;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSFrameworkLoadProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSFrameworkLoadProtocol.h
deleted file mode 100644
index b8df2d7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXJSFrameworkLoadProtocol.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-typedef void (^WXJSFrameworkLoadBlock)(NSString *path, NSString *script);
-
-@protocol WXJSFrameworkLoadProtocol <NSObject>
-
-- (void)loadRaxFramework:(WXJSFrameworkLoadBlock)block;
-- (void)loadPolyfillFramework:(WXJSFrameworkLoadBlock)block;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h
deleted file mode 100644
index 4c8f877..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import "WXDefine.h"
-#import "WXSDKInstance.h"
-
-#define MSG_SUCCESS     @"WX_SUCCESS"
-#define MSG_NO_HANDLER  @"WX_NO_HANDLER"
-#define MSG_NO_PERMIT   @"WX_NO_PERMISSION"
-#define MSG_FAILED      @"WX_FAILED"
-#define MSG_PARAM_ERR   @"WX_PARAM_ERR"
-#define MSG_EXP         @"WX_EXCEPTION"
-
-@protocol WXModuleProtocol <NSObject>
-
-/**
- * @abstract the module callback , result can be string or dictionary.
- * @discussion callback data to js, the id of callback function will be removed to save memory.
- */
-typedef void (^WXModuleCallback)(id result);
-//DEPRECATED_MSG_ATTRIBUTE("use WXModuleKeepAliveCallback, you can specify keep the callback or not, if keeped, it can be called multi times, or it will be removed after called.")
-
-/**
- * @abstract the module callback , result can be string or dictionary.
- * @discussion callback data to js, you can specify the keepAlive parameter to keep callback function id keepalive or not. If the keepAlive is true, it won't be removed until instance destroyed, so you can call it repetitious.
- */
-typedef void (^WXModuleKeepAliveCallback)(id result, BOOL keepAlive);
-
-#define WX_EXPORT_MODULE(module) 
-
-@optional
-
-/**
- *  @abstract returns the execute queue for the module
- *
- *  @return dispatch queue that module's methods will be invoked on
- *
- *  @discussion the implementation is optional. Implement it if you want to execute module actions in the special queue.
- *  Default dispatch queue will be the main queue.
- *
- */
-- (dispatch_queue_t)targetExecuteQueue;
-
-/**
- *  @abstract returns the execute thread for the module
- *
- *  @return  thread that module's methods will be invoked on
- *
- *  @discussion the implementation is optional. If you want to execute module actions in the special thread, you can create a new one. 
- *  If `targetExecuteQueue` is implemented,  the queue returned will be respected first.
- *  Default is the main thread.
- *
- */
-- (NSThread *)targetExecuteThread;
-
-/**
- *  @abstract the instance bind to this module. It helps you to get many useful properties related to the instance.
- */
-@property (nonatomic, weak) WXSDKInstance *weexInstance;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h
deleted file mode 100644
index 22ad3e9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXModuleProtocol.h"
-
-/**
- * This enum is used to define the position of navbar item.
- */
-typedef NS_ENUM(NSInteger, WXNavigationItemPosition) {
-    WXNavigationItemPositionCenter = 0x00,
-    WXNavigationItemPositionRight,
-    WXNavigationItemPositionLeft,
-    WXNavigationItemPositionMore
-};
-
-/**
- * @abstract The callback after executing navigator operations. The code has some status such as 'WX_SUCCESS'、'WX_FAILED' etc. The responseData
- * contains some useful info you can handle.
- */
-typedef void (^WXNavigationResultBlock)(NSString *code, NSDictionary * responseData);
-
-@protocol WXNavigationProtocol <WXModuleProtocol>
-
-/**
- * @abstract Returns the navigation controller.
- *
- * @param container The target controller.
- */
-- (id)navigationControllerOfContainer:(UIViewController *)container;
-
-/**
- * @abstract Sets the navigation bar hidden.
- *
- * @param hidden If YES, the navigation bar is hidden.
- *
- * @param animated Specify YES to animate the transition or NO if you do not want the transition to be animated.
- *
- * @param container The navigation controller.
- *
- */
-- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated
-                 withContainer:(UIViewController *)container;
-
-/**
- * @abstract Sets the background color of navigation bar.
- *
- * @param backgroundColor The background color of navigation bar.
- *
- * @param container The target controller.
- *
- */
-- (void)setNavigationBackgroundColor:(UIColor *)backgroundColor
-                       withContainer:(UIViewController *)container;
-
-/**
- * @abstract Sets the item in navigation bar.
- *
- * @param param The data which is passed to the implementation of the protocol.
- *
- * @param position The value indicates the position of item.
- *
- * @param block A block called once the action is completed.
- *
- * @param container The target controller.
- *
- */
-- (void)setNavigationItemWithParam:(NSDictionary *)param
-                          position:(WXNavigationItemPosition)position
-                        completion:(WXNavigationResultBlock)block
-                     withContainer:(UIViewController *)container;
-
-/**
- * @abstract Clears the item in navigation bar.
- *
- * @param param The data which is passed to the implementation of the protocol.
- *
- * @param position The value indicates the position of item.
- *
- * @param block A block called once the action is completed.
- *
- * @param container The target controller.
- *
- */
-- (void)clearNavigationItemWithParam:(NSDictionary *)param
-                            position:(WXNavigationItemPosition)position
-                          completion:(WXNavigationResultBlock)block
-                       withContainer:(UIViewController *)container;
-
-/**
- * @abstract Pushes a view controller onto the receiver’s stack.
- *
- * @param param The data which is passed to the implementation of the protocol.
- *
- * @param block A block called once the action is completed.
- *
- * @param container The target controller.
- *
- */
-- (void)pushViewControllerWithParam:(NSDictionary *)param
-                         completion:(WXNavigationResultBlock)block
-                      withContainer:(UIViewController *)container;
-
-/**
- * @abstract Pops the top view controller from the navigation stack.
- *
- * @param param The data which is passed to the implementation of the protocol.
- *
- * @param block A block called once the action is completed.
- *
- * @param container The target controller.
- *
- */
-- (void)popViewControllerWithParam:(NSDictionary *)param
-                        completion:(WXNavigationResultBlock)block
-                     withContainer:(UIViewController *)container;
-
-    
-@optional
-    
-/**
- * @abstract open the resource at the specified URL which supports many common schemes, including the http, https, tel and mailto schemes.
- *
- * @param param The data which is passed to the implementation of the protocol.
- *
- * @param success A block called once the action is completed successfully.
- *
- * @param failure A block called once the action failed to be completed.
- *
- * @param container The target controller.
- *
- */
-- (void)open:(NSDictionary *)param success:(WXModuleCallback)success
-                                   failure:(WXModuleCallback)failure
-                             withContainer:(UIViewController *)container;
-
-
-/**
-  * @abstract close the current weex page
-  *
-  * @param param The data which is passed to the implementation of the protocol.
-  *
-  * @param success A block called once the action is completed successfully.
-  *
-  * @param failure A block called once the action failed to be completed.
-  *
-  * @param container The target controller.
-  *
-  */
-- (void)close:(NSDictionary *)param success:(WXModuleCallback)success
-                                   failure:(WXModuleCallback)failure
-                             withContainer:(UIViewController *)container;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h
deleted file mode 100644
index 18256da..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-__attribute__ ((deprecated("Use WXResourceRequestHandler instead")))
-@protocol WXNetworkProtocol <NSObject>
-
-/**
- * @abstract send request
- *
- * @param request The URL Request
- *
- * @param sendDataCallback  This block is called periodically to notify the progress.
- *
- * @param responseCallback  This block is called when receiving a response and no further messages will be received until the completion block is called. 
- *
- * @param receiveDataCallback This block is called when data is available.
- *
- * @param completionCallback This block is called when the last message related to a specific task is sent.
- */
-- (id)sendRequest:(NSURLRequest *)request withSendingData:(void (^)(int64_t bytesSent, int64_t totalBytes))sendDataCallback
-                                             withResponse:(void (^)(NSURLResponse *response))responseCallback
-                                          withReceiveData:(void (^)(NSData *data))receiveDataCallback
-                                          withCompeletion:(void (^)(NSData *totalData, NSError *error))completionCallback;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXPageEventNotifyEvent.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXPageEventNotifyEvent.h
deleted file mode 100644
index d21633d..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXPageEventNotifyEvent.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXJSExceptionInfo.h"
-
-@protocol WXPageEventNotifyEventProtocol <NSObject>
-
-- (void)hitTest:(CGPoint)point withEvent:(UIEvent *)event withView:(UIView*)view;
-
-- (void)notifyScrollEvent:(NSString*)instanceId from:(CGPoint)from to:(CGPoint)to;
-
-- (void)pageStart:(NSString*)instanceId;
-
-- (void)pageDestroy:(NSString*)instanceId;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h
deleted file mode 100644
index 002c0f9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXType.h"
-
-@class WXComponent;
-@protocol WXScrollerProtocol <NSObject>
-
-/**
- * @abstract add sticky component
- */
-- (void)addStickyComponent:(WXComponent *)sticky;
-
-/**
- * @abstract remove sticky component
- */
-- (void)removeStickyComponent:(WXComponent *)sticky;
-
-/**
- * @abstract adjust sticky components
- */
-- (void)adjustSticky;
-
-/**
- * @abstract add scroll listener
- */
-- (void)addScrollToListener:(WXComponent *)target;
-
-/**
- * @abstract remove scroll listener
- */
-- (void)removeScrollToListener:(WXComponent *)target;
-
-- (void)scrollToComponent:(WXComponent *)component withOffset:(CGFloat)offset animated:(BOOL)animated;
-
-- (BOOL)isNeedLoadMore;
-
-- (void)loadMore;
-
-- (CGPoint)contentOffset;
-
-- (void)setContentOffset:(CGPoint)contentOffset;
-- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
-
-- (CGSize)contentSize;
-
-- (void)setContentSize:(CGSize)size;
-
-- (UIEdgeInsets)contentInset;
-
-- (void)setContentInset:(UIEdgeInsets)contentInset;
-
-- (void)resetLoadmore;
-
-- (void)addScrollDelegate:(id<UIScrollViewDelegate>)delegate;
-- (void)removeScrollDelegate:(id<UIScrollViewDelegate>)delegate;
-
-- (WXScrollDirection)scrollDirection;
-
-@optional
-
-- (NSString*)refreshType;
-- (BOOL)requestGestureShouldStopPropagation:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
-/**
- * @abstract adjust for RTL
- */
-- (void)adjustForRTL;
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h
deleted file mode 100644
index 55b9604..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-@protocol WXTextComponentProtocol
-
-@property (nonatomic, strong) NSTextStorage *textStorage;
-@property (nonatomic, assign) UIEdgeInsets border;
-@property (nonatomic, assign) UIEdgeInsets padding;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h
deleted file mode 100644
index b17dbd7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXResourceRequest.h"
-
-@class WXSDKInstance;
-
-#define WX_REWRITE_URL(url, resourceType, instance)\
-do {\
-    id<WXURLRewriteProtocol> rewriteHandler = [WXSDKEngine handlerForProtocol:@protocol(WXURLRewriteProtocol)];\
-    if ([rewriteHandler respondsToSelector:@selector(rewriteURL:withResourceType:withInstance:)]) {\
-        newURL = [[rewriteHandler rewriteURL:url withResourceType:resourceType withInstance:instance].absoluteString copy];\
-    }\
-} while(0);
-
-
-@protocol WXURLRewriteProtocol <NSObject>
-
-/**
- * @abstract rewrite and complete URL
- *
- * @param url The original URL to be rewritten
- *
- * @param resourceType resource type which the url is sent for
- *
- * @param instance related instance
- *
- * @return a new url
- */
-- (NSURL *)rewriteURL:(NSString *)url withResourceType:(WXResourceType)resourceType withInstance:(WXSDKInstance *)instance;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h
deleted file mode 100644
index 4284f18..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXSDKInstance.h"
-
-
-@interface WXValidateResult : NSObject
-
-@property(nonatomic,assign)BOOL            isSuccess;
-@property(nonatomic,strong)NSError*        error;
-
-@end
-
-@interface WXModuleValidateResult : WXValidateResult
-
-@end
-
-@interface WXComponentValidateResult :WXValidateResult
-
-@property(nonatomic,copy)NSString* replacedComponent;
-
-@end
-
-
-@protocol WXValidateProtocol <NSObject>
-
--(BOOL)needValidate:(NSURL*) bundleUrl;
-
--(WXModuleValidateResult *)validateWithWXSDKInstance:(WXSDKInstance *)wxsdkInstance module:(NSString*) moduel method:(NSString *)method args:(NSArray *)args options:(NSDictionary *)options;
-
--(WXComponentValidateResult *)validateWithWXSDKInstance:(WXSDKInstance *)wxsdkInstance component:(NSString *)componentName supercomponent:(WXComponent *)supercomponent;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Supporting Files/WeexSDK-Prefix.pch b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Supporting Files/WeexSDK-Prefix.pch
deleted file mode 100644
index 5b3dab0..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Supporting Files/WeexSDK-Prefix.pch
+++ /dev/null
@@ -1,11 +0,0 @@
-//
-//  Prefix header
-//
-//  The contents of this file are implicitly included at the beginning of every source file.
-//
-
-#ifdef __OBJC__
-    #import <Foundation/Foundation.h>
-    #import <UIKit/UIKit.h>
-    #import "WXDefine.h"
-#endif
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h
deleted file mode 100644
index 50445b8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface NSArray (Weex)
-
-- (id)wx_safeObjectAtIndex:(NSUInteger)index;
-
-@end
-
-@interface NSMutableArray (Weex)
-
-+ (id)wx_mutableArrayUsingWeakReferences;
-
-+ (id)wx_mutableArrayUsingWeakReferencesWithCapacity:(NSUInteger)capacity;
-+ (void)wx_releaseArray:(id)array;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.m
deleted file mode 100644
index f77ba90..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.m
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "NSArray+Weex.h"
-
-@implementation NSArray (Weex)
-
-- (id)wx_safeObjectAtIndex:(NSUInteger)index
-{
-    if (index >= self.count) {
-        return nil;
-    }
-    
-    return [self objectAtIndex:index];
-}
-
-@end
-
-@implementation NSMutableArray (Weex)
-
-// It's quite ingenius, using a Category to allow the creation of a mutable array that does no retain/release by backing it with a CFArray with proper callbacks.http://stackoverflow.com/questions/4692161/non-retaining-array-for-delegates
-+ (id)wx_mutableArrayUsingWeakReferences {
-    return [self wx_mutableArrayUsingWeakReferencesWithCapacity:0];
-}
-
-+ (id)wx_mutableArrayUsingWeakReferencesWithCapacity:(NSUInteger)capacity {
-    CFArrayCallBacks callbacks = {0, NULL, NULL, CFCopyDescription, CFEqual};
-    // We create a weak reference array
-    return (__bridge id)(CFArrayCreateMutable(0, capacity, &callbacks));
-}
-
-+ (void)wx_releaseArray:(id)array {
-    
-    CFBridgingRelease((__bridge CFArrayRef _Nullable)(array));
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h
deleted file mode 100644
index 3c11c3a..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#import <Foundation/Foundation.h>
-
-@interface NSObject (WXSwizzle)
-
-+ (BOOL)weex_swizzle:(Class)originalClass Method:(SEL)originalSelector withMethod:(SEL)swizzledSelector;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.m
deleted file mode 100644
index 061ad5b..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.m
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "NSObject+WXSwizzle.h"
-#import <objc/runtime.h>
-
-@implementation NSObject (WXSwizzle)
-
-+ (BOOL)weex_swizzle:(Class)originalClass Method:(SEL)originalSelector withMethod:(SEL)swizzledSelector
-{
-    if (!(originalClass && originalSelector && swizzledSelector)) {
-        return NO;
-    }
-    
-    Class class = [self class];
-    
-    Method originalMethod = class_getInstanceMethod(originalClass, originalSelector);
-    Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
-    
-    BOOL didAddMethod = class_addMethod(originalClass, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
-    
-    if (didAddMethod) {
-        class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
-    } else {
-        method_exchangeImplementations(originalMethod, swizzledMethod);
-    }
-    
-    return YES;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h
deleted file mode 100644
index 87d05dd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface NSTimer (Weex)
-
-+ (NSTimer *)wx_scheduledTimerWithTimeInterval:(NSTimeInterval)interval
-                                         block:(void(^)(void))block
-                                       repeats:(BOOL)repeats;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.m
deleted file mode 100644
index 5cd7d42..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.m
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "NSTimer+Weex.h"
-
-@implementation NSTimer (Weex)
-
-+ (NSTimer *)wx_scheduledTimerWithTimeInterval:(NSTimeInterval)interval
-                                         block:(void(^)(void))block
-                                       repeats:(BOOL)repeats
-{
-    return [self scheduledTimerWithTimeInterval:interval
-                                         target:self
-                                       selector:@selector(blockInvoke:)
-                                       userInfo:[block copy]
-                                        repeats:repeats];
-}
-
-+ (void)blockInvoke:(NSTimer*)timer
-{
-    void (^block)(void) = timer.userInfo;
-    if (block) {
-        block();
-    }
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h
deleted file mode 100644
index c7c6854..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXAppConfiguration : NSObject
-
-/**
- * @abstract Group or organization of your app, default value is nil.
- */
-+ (NSString *)appGroup;
-+ (void)setAppGroup:(NSString *) appGroup;
-
-/**
- * @abstract Name of your app, default is value for CFBundleDisplayName in main bundle.
- */
-+ (NSString *)appName;
-+ (void)setAppName:(NSString *)appName;
-
-/**
- * @abstract Version of your app, default is value for CFBundleShortVersionString in main bundle.
- */
-+ (NSString *)appVersion;
-+ (void)setAppVersion:(NSString *)appVersion;
-
-/**
- * @abstract External user agent of your app, all requests sent by weex will set the user agent on header,  default value is nil.
- */
-+ (NSString *)externalUserAgent;
-+ (void)setExternalUserAgent:(NSString *)userAgent;
-
-/**
- * @abstract JSFrameworkVersion
- */
-+ (NSString *)JSFrameworkVersion;
-+ (void)setJSFrameworkVersion:(NSString *)JSFrameworkVersion;
-
-/**
- + * @abstract JSFrameworkLibSize
- + */
-+ (NSUInteger)JSFrameworkLibSize;
-+ (void)setJSFrameworkLibSize:(NSUInteger)JSFrameworkLibSize;
-
-/*
- *  @abstract customizeProtocolClasses
- */
-+ (NSArray*)customizeProtocolClasses;
-+ (void)setCustomizeProtocolClasses:(NSArray*)customizeProtocolClasses;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.m
deleted file mode 100644
index 07e68d2..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.m
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXAppConfiguration.h"
-
-@interface WXAppConfiguration ()
-
-@property (nonatomic, strong) NSString * appGroup;
-@property (nonatomic, strong) NSString * appName;
-@property (nonatomic, strong) NSString * appVersion;
-@property (nonatomic, strong) NSString * externalUA;
-@property (nonatomic, strong) NSString * JSFrameworkVersion;
-@property (nonatomic, assign) NSUInteger JSFrameworkLibSize;
-@property (nonatomic, strong) NSArray  * customizeProtocolClasses;
-@end
-
-@implementation WXAppConfiguration
-
-+ (instancetype)sharedConfiguration
-{
-    static id _sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-    });
-    return _sharedInstance;
-}
-
-+ (NSString *)appGroup
-{
-    return [WXAppConfiguration sharedConfiguration].appGroup;
-}
-
-+ (void)setAppGroup:(NSString *)appGroup
-{
-    [WXAppConfiguration sharedConfiguration].appGroup = appGroup;
-}
-
-+ (NSString *)appName
-{
-    return [WXAppConfiguration sharedConfiguration].appName ?: [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
-}
-
-+ (void)setAppName:(NSString *)appName
-{
-    [WXAppConfiguration sharedConfiguration].appName = appName;
-}
-
-+ (NSString *)appVersion
-{
-    return [WXAppConfiguration sharedConfiguration].appVersion ?: [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
-}
-
-+ (void)setAppVersion:(NSString *)appVersion
-{
-    [WXAppConfiguration sharedConfiguration].appVersion = appVersion;
-}
-
-+ (NSString *)externalUserAgent
-{
-    return [WXAppConfiguration sharedConfiguration].externalUA;
-}
-
-+ (void)setExternalUserAgent:(NSString *)userAgent
-{
-    [WXAppConfiguration sharedConfiguration].externalUA = userAgent;
-}
-
-+ (NSString *)JSFrameworkVersion
-{
-    return [WXAppConfiguration sharedConfiguration].JSFrameworkVersion ?: @"";
-}
-
-+ (void)setJSFrameworkVersion:(NSString *)JSFrameworkVersion
-{
-    [WXAppConfiguration sharedConfiguration].JSFrameworkVersion = JSFrameworkVersion;
-}
-
-+ (NSUInteger)JSFrameworkLibSize
-{
-    return [WXAppConfiguration sharedConfiguration].JSFrameworkLibSize;
-}
-
-+ (void)setJSFrameworkLibSize:(NSUInteger)JSFrameworkLibSize
-{
-    [WXAppConfiguration sharedConfiguration].JSFrameworkLibSize = JSFrameworkLibSize;
-}
-
-+ (NSArray*)customizeProtocolClasses{
-    return [WXAppConfiguration sharedConfiguration].customizeProtocolClasses;
-}
-
-+ (void)setCustomizeProtocolClasses:(NSArray *)customizeProtocolClasses{
-    [WXAppConfiguration sharedConfiguration].customizeProtocolClasses = customizeProtocolClasses;
-}
-
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAssert.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAssert.h
deleted file mode 100644
index f856ec8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAssert.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXDefine.h"
-
-WX_EXTERN_C_BEGIN
-
-void WXAssertInternal(NSString *func, NSString *file, int lineNum, NSString *format, ...);
-
-#if DEBUG
-#define WXAssert(condition, ...) \
-do{\
-    if(!(condition)){\
-        WXAssertInternal(@(__func__), @(__FILE__), __LINE__, __VA_ARGS__);\
-    }\
-}while(0)
-#else
-#define WXAssert(condition, ...)
-#endif
-
-/**
- *  @abstract macro for asserting that a parameter is required.
- */
-#define WXAssertParam(name) WXAssert(name, \
-@"the parameter '%s' is required", #name)
-
-/**
- *  @abstract macro for asserting if the handler conforms to the protocol
- */
-#define WXAssertProtocol(handler, protocol) WXAssert([handler conformsToProtocol:protocol], \
-@"handler:%@ does not conform to protocol:%@", handler, protocol)
-
-/**
- *  @abstract macro for asserting that the object is kind of special class.
- */
-#define WXAssertClass(name,className) WXAssert([name isKindOfClass:[className class]], \
-@"the variable '%s' is not a kind of '%s' class", #name,#className)
-
-/**
- *  @abstract macro for asserting that we are running on the main thread.
- */
-#define WXAssertMainThread() WXAssert([NSThread isMainThread], \
-@"must be called on the main thread")
-
-/**
- *  @abstract macro for asserting that we are running on the component thread.
- */
-#define WXAssertComponentThread() \
-WXAssert([[NSThread currentThread].name isEqualToString:WX_COMPONENT_THREAD_NAME], \
-@"must be called on the component thread")
-
-/**
- *  @abstract macro for asserting that we are running on the bridge thread.
- */
-#define WXAssertBridgeThread() \
-WXAssert([[NSThread currentThread].name isEqualToString:WX_BRIDGE_THREAD_NAME] || [[NSThread currentThread].name isEqualToString:WX_BACKUP_BRIDGE_THREAD_NAME], \
-@"must be called on the bridge thread")
-
-#define WXAssertNotReached() \
-WXAssert(NO, @"should never be reached")
-
-WX_EXTERN_C_END
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAssert.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAssert.m
deleted file mode 100644
index 006327e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXAssert.m
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXAssert.h"
-#import "WXLog.h"
-
-void WXAssertInternal(NSString *func, NSString *file, int lineNum, NSString *format, ...)
-{
-    va_list args;
-    va_start(args, format);
-    NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
-    va_end(args);
-    
-    WXLogError(@"%@", message);
-    [[NSAssertionHandler currentHandler] handleFailureInFunction:func file:file lineNumber:lineNum description:format, message];
-}
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
deleted file mode 100644
index 499d625..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXInnerLayer.h"
-
-@interface WXBoxShadow : NSObject
-
-@property(nonatomic,strong,nullable) UIColor *shadowColor;
-@property CGSize shadowOffset;
-@property CGFloat shadowRadius;
-@property BOOL isInset;
-@property (nonatomic, strong, nullable)WXInnerLayer *innerLayer;
-@property CGFloat shadowOpacity;
-
-/**
- *  @abstract get boxshadow from string and adapter phone screen
- *
- *  @param string the boxshadow string
- *
- *  @param scaleFactor the boxshadow set last time
- *
- *  @return A WXBoxShadow object
- */
-+(WXBoxShadow *_Nullable)getBoxShadowFromString:(NSString *_Nullable)string scaleFactor:(CGFloat)scaleFactor;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m
deleted file mode 100644
index dbf7941..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXBoxShadow.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-
-@implementation WXBoxShadow
-- (instancetype)init
-{
-    self = [super init];
-    
-    if (self) {
-        self.shadowRadius = 0.0f;
-        self.isInset = NO;
-        self.shadowOffset = CGSizeZero;
-        self.shadowOpacity = 1.0f;
-    }
-    
-    return self;
-}
-
-+ (NSArray *)getBoxShadowElementsByBlank:(NSString *)string
-{
-    string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
-    NSError *error = nil;
-    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\s{2,}" options:NSRegularExpressionCaseInsensitive error:&error];
-    
-    NSArray *arr = [regex matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, [string length])];
-    
-    arr = [[arr reverseObjectEnumerator] allObjects];
-    for (NSTextCheckingResult *str in arr) {
-        string = [string stringByReplacingCharactersInRange:[str range] withString:@" "];
-    }
-    NSArray *array = [string componentsSeparatedByString:@" "];
-    return array;
-}
-
-+(WXBoxShadow *_Nullable)getBoxShadowFromString:(NSString *_Nullable)string scaleFactor:(CGFloat)scaleFactor
-{
-    if ([string length] == 0) {
-        return nil;
-    }
-    WXBoxShadow *boxShadow = [WXBoxShadow new];
-    
-    //parse color
-    if ([string rangeOfString:@"rgb"].location != NSNotFound) {
-        NSRange begin = [string rangeOfString:@"rgb"];
-        NSRange end = [string rangeOfString:@")"];
-        if (begin.location < end.location && end.location < [string length]) {
-            NSRange range = NSMakeRange(begin.location, end.location-begin.location + 1);
-            NSString *str = [string substringWithRange:range];
-            UIColor *color = [WXConvert UIColor:str];
-            if (color && [color isKindOfClass:[UIColor class]]) {
-                boxShadow.shadowColor = color;
-            }
-            string = [string stringByReplacingOccurrencesOfString:str withString:@""];// remove color string
-        }
-    } else {
-        NSArray *boxShadowElements = [self getBoxShadowElementsByBlank:string];
-        NSString *str = [boxShadowElements lastObject];
-        UIColor *color = [WXConvert UIColor:str];
-        if (color && [color isKindOfClass:[UIColor class]]) {
-            boxShadow.shadowColor = color;
-        }
-        string = [string stringByReplacingOccurrencesOfString:str withString:@""];// remove color string
-    }
-
-    // parse remain BoxShadow Elements
-    NSMutableArray *remainBoxShadowElements = [[self getBoxShadowElementsByBlank:string] mutableCopy];
-    
-    if (remainBoxShadowElements && [remainBoxShadowElements count] > 0) {
-        if ([@"inset" isEqualToString: remainBoxShadowElements[0]])
-        {
-            boxShadow.isInset = YES;
-            [remainBoxShadowElements removeObjectAtIndex:0];
-            
-        }
-        
-        for (int i = 0; i < [remainBoxShadowElements count]; i++) {
-            switch (i) {
-                case 0:
-                {
-                    CGSize size = boxShadow.shadowOffset;
-                    size.width = [WXConvert WXPixelType:remainBoxShadowElements[0] scaleFactor:scaleFactor];
-                    boxShadow.shadowOffset = size;
-                }
-                    break;
-                case 1:
-                {
-                    CGSize size = boxShadow.shadowOffset;
-                    size.height = [WXConvert WXPixelType:remainBoxShadowElements[1] scaleFactor:scaleFactor];
-                    boxShadow.shadowOffset = size;
-                }
-                    break;
-                case 2:
-                {
-                    boxShadow.shadowRadius = [WXConvert WXPixelType:remainBoxShadowElements[2] scaleFactor:scaleFactor];
-                }
-                    break;
-                    
-                default:
-                    break;
-            }
-        }
-        
-        if (boxShadow.isInset) {
-            if (!boxShadow.innerLayer) {
-                boxShadow.innerLayer = [[WXInnerLayer alloc] init];
-            }
-            boxShadow.innerLayer.boxShadowColor = boxShadow.shadowColor;
-            boxShadow.innerLayer.boxShadowOffset = boxShadow.shadowOffset;
-            boxShadow.innerLayer.boxShadowRadius = boxShadow.shadowRadius;
-            boxShadow.innerLayer.boxShadowOpacity = boxShadow.shadowOpacity;
-        }
-    }
-    return boxShadow;
-}
-
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
deleted file mode 100644
index 3b83f5c..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-#import <objc/runtime.h>
-#import "WXLog.h"
-#import "WXType.h"
-
-@class WXLength;
-@class WXBoxShadow;
-@interface WXConvert : NSObject
-
-+ (BOOL)BOOL:(id)value;
-
-/**
- *  @abstract       convert value to CGFloat value
- *  @param value    value
- *  @return         CGFloat value
- */
-+ (CGFloat)CGFloat:(id)value;
-
-/**
- *  @abstract       convert value to CGFloat value, notice that it will return nan if input value is unsupported
- *  @param value    value
- *  @return         CGFloat value or nan(unsupported input)
- */
-+ (CGFloat)flexCGFloat:(id)value;
-
-+ (NSUInteger)NSUInteger:(id)value;
-+ (NSInteger)NSInteger:(id)value;
-+ (NSString *)NSString:(id)value;
-
-/**
- *  750px Adaptive
- */
-typedef CGFloat WXPixelType;
-// @parameter scaleFactor: please use weexInstance's pixelScaleFactor property
-+ (WXPixelType)WXPixelType:(id)value scaleFactor:(CGFloat)scaleFactor;
-// WXPixelType that use flexCGFloat to convert
-+ (WXPixelType)WXFlexPixelType:(id)value scaleFactor:(CGFloat)scaleFactor;
-
-
-+ (UIViewContentMode)UIViewContentMode:(id)value;
-+ (WXImageQuality)WXImageQuality:(id)value;
-+ (WXImageSharp)WXImageSharp:(id)value;
-+ (UIAccessibilityTraits)WXUIAccessibilityTraits:(id)value;
-
-+ (UIColor *)UIColor:(id)value;
-+ (CGColorRef)CGColor:(id)value;
-+ (NSString *)HexWithColor:(UIColor *)color;
-+ (WXBorderStyle)WXBorderStyle:(id)value;
-typedef BOOL WXClipType;
-+ (WXClipType)WXClipType:(id)value;
-+ (WXPositionType)WXPositionType:(id)value;
-
-+ (WXTextStyle)WXTextStyle:(id)value;
-/**
- * @abstract UIFontWeightRegular ,UIFontWeightBold,etc are not support by the system which is less than 8.2. weex sdk set the float value.
- *
- * @param value support normal,blod,100,200,300,400,500,600,700,800,900
- *
- * @return A float value.
- *
- */
-+ (CGFloat)WXTextWeight:(id)value;
-+ (WXTextDecoration)WXTextDecoration:(id)value;
-+ (NSTextAlignment)NSTextAlignment:(id)value;
-+ (UIReturnKeyType)UIReturnKeyType:(id)value;
-
-+ (WXScrollDirection)WXScrollDirection:(id)value;
-+ (UITableViewRowAnimation)UITableViewRowAnimation:(id)value;
-
-+ (UIViewAnimationOptions)UIViewAnimationTimingFunction:(id)value;
-+ (CAMediaTimingFunction *)CAMediaTimingFunction:(id)value;
-
-+ (WXVisibility)WXVisibility:(id)value;
-
-+ (WXGradientType)gradientType:(id)value;
-
-+ (WXLength *)WXLength:(id)value isFloat:(BOOL)isFloat scaleFactor:(CGFloat)scaleFactor;
-+ (WXBoxShadow *)WXBoxShadow:(id)value scaleFactor:(CGFloat)scaleFactor;
-
-@end
-
-@interface WXConvert (Deprecated)
-
-+ (WXPixelType)WXPixelType:(id)value DEPRECATED_MSG_ATTRIBUTE("Use [WXConvert WXPixelType:scaleFactor:] instead");
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
deleted file mode 100644
index befe205..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
+++ /dev/null
@@ -1,878 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXBoxShadow.h"
-#import "WXLength.h"
-#import "WXAssert.h"
-#import "WXSDKEngine.h"
-
-@implementation WXConvert
-
-#pragma mark Number & String & Collection
-
-#define WX_NUMBER_CONVERT(type, op) \
-+ (type)type:(id)value {\
-    if([value respondsToSelector:@selector(op)]){\
-        return (type)[value op];\
-    } else {\
-        NSString * strval = [NSString stringWithFormat:@"%@",value];\
-        return (type)[self uint64_t: strval];\
-    }\
-}
-
-WX_NUMBER_CONVERT(BOOL, boolValue)
-WX_NUMBER_CONVERT(int, intValue)
-WX_NUMBER_CONVERT(short, shortValue)
-WX_NUMBER_CONVERT(int64_t, longLongValue)
-WX_NUMBER_CONVERT(uint8_t, unsignedShortValue)
-WX_NUMBER_CONVERT(uint16_t, unsignedIntValue)
-WX_NUMBER_CONVERT(uint32_t, unsignedLongValue)
-WX_NUMBER_CONVERT(float, floatValue)
-WX_NUMBER_CONVERT(double, doubleValue)
-WX_NUMBER_CONVERT(NSInteger, integerValue)
-WX_NUMBER_CONVERT(NSUInteger, unsignedIntegerValue)
-
-
-
-//unsignedLongLongValue
-+ (uint64_t)uint64_t:(id)value {\
-    NSString * strval = [NSString stringWithFormat:@"%@",value];
-    unsigned long long ullvalue = strtoull([strval UTF8String], NULL, 10);
-    return ullvalue;
-}
-
-+ (CGFloat)CGFloat:(id)value
-{
-    if ([value isKindOfClass:[NSString class]]) {
-        NSString *valueString = (NSString *)value;
-        if ([valueString hasSuffix:@"px"] || [valueString hasSuffix:@"wx"]) {
-            valueString = [valueString substringToIndex:(valueString.length - 2)];
-        }
-        if ([value hasPrefix:@"env(safe-area-inset-"] &&[value hasSuffix:@")"]){
-            NSUInteger start = [value rangeOfString:@"env(safe-area-inset-"].location +@"env(safe-area-inset-".length;
-            NSUInteger end = [value rangeOfString:@")" options:NSBackwardsSearch].location;
-            value = [value substringWithRange:NSMakeRange(start, end-start)];
-            return [self safeAreaInset:value];
-        }
-        return [valueString doubleValue];
-    }
-    
-    return [self double:value];
-}
-
-+ (CGFloat)flexCGFloat:(id)value
-{
-    if ([value isKindOfClass:[NSString class]]) {
-        NSString *valueString = (NSString *)value;
-        if (valueString.length <=0) {
-            return NAN;
-        }
-        if ([valueString hasSuffix:@"px"] || [valueString hasSuffix:@"wx"]) {
-            valueString = [valueString substringToIndex:(valueString.length - 2)];
-        }
-        if ([value hasPrefix:@"env(safe-area-inset-"] &&[value hasSuffix:@")"]){
-            NSUInteger start = [value rangeOfString:@"env(safe-area-inset-"].location +@"env(safe-area-inset-".length;
-            NSUInteger end = [value rangeOfString:@")" options:NSBackwardsSearch].location;
-            value = [value substringWithRange:NSMakeRange(start, end-start)];
-            return [self safeAreaInset:value];
-        }
-        //value maybe not number ,such as 100%
-        if (![WXConvert checkStringIsRealNum:valueString]) {
-            return NAN;
-        }
-        return [valueString doubleValue];
-    }
-    return [self double:value];
-}
-
-+ (BOOL)checkStringIsRealNum:(NSString *)checkedNumString {
-    NSScanner* scan = [NSScanner scannerWithString:checkedNumString];
-    int intVal;
-    BOOL isInt = [scan scanInt:&intVal] && [scan isAtEnd];
-    if (isInt) {
-        return YES;
-    }
-    float floatVal;
-    BOOL isFloat = [scan scanFloat:&floatVal] && [scan isAtEnd];
-    if (isFloat) {
-        return YES;
-    }
-    
-    return NO;
-}
-
-+ (CGFloat)safeAreaInset:(NSString*)value
-{
-    static NSArray * directionArray = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        directionArray = [NSArray arrayWithObjects:@"top",@"right",@"bottom",@"left", nil];
-    });
-    if ([directionArray containsObject:value]) {
-        __block UIEdgeInsets safeAreaInsets = UIEdgeInsetsZero;
-#if __IPHONE_11_0
-        if (@available(iOS 11.0, *)) {
-            WXSDKInstance * topInstance = [WXSDKEngine topInstance];
-            WXPerformBlockSyncOnMainThread(^{
-                safeAreaInsets = topInstance.rootView.safeAreaInsets;
-            });
-            
-        } else {
-            // Fallback on earlier versions
-        }
-#endif
-        NSUInteger key = [directionArray indexOfObject:value];
-        CGFloat retValue = 0;
-        switch (key) {
-            case 0:
-                retValue = safeAreaInsets.top;
-                break;
-            case 1:
-                retValue = safeAreaInsets.right;
-                break;
-            case 2:
-                retValue = safeAreaInsets.bottom;
-                break;
-            case 3:
-                retValue = safeAreaInsets.left;
-                break;
-            default:
-                break;
-        }
-        return retValue;
-    }
-    return 0;
-}
-
-+ (NSString *)NSString:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        return value;
-    } else if([value isKindOfClass:[NSNumber class]]){
-        return [((NSNumber *)value) stringValue];
-    } else if (value != nil) {
-        WXLogError(@"Convert Error:%@ can not be converted to string", value);
-    }
-    
-    return nil;
-}
-
-+ (WXPixelType)WXPixelType:(id)value scaleFactor:(CGFloat)scaleFactor
-{
-    CGFloat pixel = [self CGFloat:value];
-    
-    if ([value isKindOfClass:[NSString class]] && ([value hasSuffix:@"wx"]|| [value hasPrefix:@"env(safe-area-inset-"])) {
-        return pixel;
-    }
-    return pixel * scaleFactor;
-}
-
-+ (WXPixelType)WXFlexPixelType:(id)value scaleFactor:(CGFloat)scaleFactor
-{
-    CGFloat pixel = [self flexCGFloat:value];
-    
-    if ([value isKindOfClass:[NSString class]] && ([value hasSuffix:@"wx"]|| [value hasPrefix:@"env(safe-area-inset-"])) {
-        return pixel;
-    }
-    return pixel * scaleFactor;
-}
-
-#pragma mark Style
-
-+ (UIColor *)UIColor:(id)value
-{
-    // 1. check cache
-    static NSCache *colorCache;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        colorCache = [[NSCache alloc] init];
-        colorCache.countLimit = 64;
-    });
-    
-    if ([value isKindOfClass:[NSNull class]] || !value) {
-        return nil;
-    }
-    
-    UIColor *color = [colorCache objectForKey:value];
-    if (color) {
-        return color;
-    }
-    
-    // Default color is white
-    double red = 255, green = 255, blue = 255, alpha = 1.0;
-    
-    if([value isKindOfClass:[NSString class]]){
-        // 2. check if is color keyword or transparent
-        static NSDictionary *knownColors;
-        static dispatch_once_t onceTokenKnownColors;
-        dispatch_once(&onceTokenKnownColors, ^{
-            knownColors = @{
-                            // https://www.w3.org/TR/css3-color/#svg-color
-                            @"aliceblue": @"#f0f8ff",
-                            @"antiquewhite": @"#faebd7",
-                            @"aqua": @"#00ffff",
-                            @"aquamarine": @"#7fffd4",
-                            @"azure": @"#f0ffff",
-                            @"beige": @"#f5f5dc",
-                            @"bisque": @"#ffe4c4",
-                            @"black": @"#000000",
-                            @"blanchedalmond": @"#ffebcd",
-                            @"blue": @"#0000ff",
-                            @"blueviolet": @"#8a2be2",
-                            @"brown": @"#a52a2a",
-                            @"burlywood": @"#deb887",
-                            @"cadetblue": @"#5f9ea0",
-                            @"chartreuse": @"#7fff00",
-                            @"chocolate": @"#d2691e",
-                            @"coral": @"#ff7f50",
-                            @"cornflowerblue": @"#6495ed",
-                            @"cornsilk": @"#fff8dc",
-                            @"crimson": @"#dc143c",
-                            @"cyan": @"#00ffff",
-                            @"darkblue": @"#00008b",
-                            @"darkcyan": @"#008b8b",
-                            @"darkgoldenrod": @"#b8860b",
-                            @"darkgray": @"#a9a9a9",
-                            @"darkgrey": @"#a9a9a9",
-                            @"darkgreen": @"#006400",
-                            @"darkkhaki": @"#bdb76b",
-                            @"darkmagenta": @"#8b008b",
-                            @"darkolivegreen": @"#556b2f",
-                            @"darkorange": @"#ff8c00",
-                            @"darkorchid": @"#9932cc",
-                            @"darkred": @"#8b0000",
-                            @"darksalmon": @"#e9967a",
-                            @"darkseagreen": @"#8fbc8f",
-                            @"darkslateblue": @"#483d8b",
-                            @"darkslategray": @"#2f4f4f",
-                            @"darkslategrey": @"#2f4f4f",
-                            @"darkturquoise": @"#00ced1",
-                            @"darkviolet": @"#9400d3",
-                            @"deeppink": @"#ff1493",
-                            @"deepskyblue": @"#00bfff",
-                            @"dimgray": @"#696969",
-                            @"dimgrey": @"#696969",
-                            @"dodgerblue": @"#1e90ff",
-                            @"firebrick": @"#b22222",
-                            @"floralwhite": @"#fffaf0",
-                            @"forestgreen": @"#228b22",
-                            @"fuchsia": @"#ff00ff",
-                            @"gainsboro": @"#dcdcdc",
-                            @"ghostwhite": @"#f8f8ff",
-                            @"gold": @"#ffd700",
-                            @"goldenrod": @"#daa520",
-                            @"gray": @"#808080",
-                            @"grey": @"#808080",
-                            @"green": @"#008000",
-                            @"greenyellow": @"#adff2f",
-                            @"honeydew": @"#f0fff0",
-                            @"hotpink": @"#ff69b4",
-                            @"indianred": @"#cd5c5c",
-                            @"indigo": @"#4b0082",
-                            @"ivory": @"#fffff0",
-                            @"khaki": @"#f0e68c",
-                            @"lavender": @"#e6e6fa",
-                            @"lavenderblush": @"#fff0f5",
-                            @"lawngreen": @"#7cfc00",
-                            @"lemonchiffon": @"#fffacd",
-                            @"lightblue": @"#add8e6",
-                            @"lightcoral": @"#f08080",
-                            @"lightcyan": @"#e0ffff",
-                            @"lightgoldenrodyellow": @"#fafad2",
-                            @"lightgray": @"#d3d3d3",
-                            @"lightgrey": @"#d3d3d3",
-                            @"lightgreen": @"#90ee90",
-                            @"lightpink": @"#ffb6c1",
-                            @"lightsalmon": @"#ffa07a",
-                            @"lightseagreen": @"#20b2aa",
-                            @"lightskyblue": @"#87cefa",
-                            @"lightslategray": @"#778899",
-                            @"lightslategrey": @"#778899",
-                            @"lightsteelblue": @"#b0c4de",
-                            @"lightyellow": @"#ffffe0",
-                            @"lime": @"#00ff00",
-                            @"limegreen": @"#32cd32",
-                            @"linen": @"#faf0e6",
-                            @"magenta": @"#ff00ff",
-                            @"maroon": @"#800000",
-                            @"mediumaquamarine": @"#66cdaa",
-                            @"mediumblue": @"#0000cd",
-                            @"mediumorchid": @"#ba55d3",
-                            @"mediumpurple": @"#9370db",
-                            @"mediumseagreen": @"#3cb371",
-                            @"mediumslateblue": @"#7b68ee",
-                            @"mediumspringgreen": @"#00fa9a",
-                            @"mediumturquoise": @"#48d1cc",
-                            @"mediumvioletred": @"#c71585",
-                            @"midnightblue": @"#191970",
-                            @"mintcream": @"#f5fffa",
-                            @"mistyrose": @"#ffe4e1",
-                            @"moccasin": @"#ffe4b5",
-                            @"navajowhite": @"#ffdead",
-                            @"navy": @"#000080",
-                            @"oldlace": @"#fdf5e6",
-                            @"olive": @"#808000",
-                            @"olivedrab": @"#6b8e23",
-                            @"orange": @"#ffa500",
-                            @"orangered": @"#ff4500",
-                            @"orchid": @"#da70d6",
-                            @"palegoldenrod": @"#eee8aa",
-                            @"palegreen": @"#98fb98",
-                            @"paleturquoise": @"#afeeee",
-                            @"palevioletred": @"#db7093",
-                            @"papayawhip": @"#ffefd5",
-                            @"peachpuff": @"#ffdab9",
-                            @"peru": @"#cd853f",
-                            @"pink": @"#ffc0cb",
-                            @"plum": @"#dda0dd",
-                            @"powderblue": @"#b0e0e6",
-                            @"purple": @"#800080",
-                            @"rebeccapurple": @"#663399",
-                            @"red": @"#ff0000",
-                            @"rosybrown": @"#bc8f8f",
-                            @"royalblue": @"#4169e1",
-                            @"saddlebrown": @"#8b4513",
-                            @"salmon": @"#fa8072",
-                            @"sandybrown": @"#f4a460",
-                            @"seagreen": @"#2e8b57",
-                            @"seashell": @"#fff5ee",
-                            @"sienna": @"#a0522d",
-                            @"silver": @"#c0c0c0",
-                            @"skyblue": @"#87ceeb",
-                            @"slateblue": @"#6a5acd",
-                            @"slategray": @"#708090",
-                            @"slategrey": @"#708090",
-                            @"snow": @"#fffafa",
-                            @"springgreen": @"#00ff7f",
-                            @"steelblue": @"#4682b4",
-                            @"tan": @"#d2b48c",
-                            @"teal": @"#008080",
-                            @"thistle": @"#d8bfd8",
-                            @"tomato": @"#ff6347",
-                            @"turquoise": @"#40e0d0",
-                            @"violet": @"#ee82ee",
-                            @"wheat": @"#f5deb3",
-                            @"white": @"#ffffff",
-                            @"whitesmoke": @"#f5f5f5",
-                            @"yellow": @"#ffff00",
-                            @"yellowgreen": @"#9acd32",
-                            
-                            // https://www.w3.org/TR/css3-color/#transparent
-                            @"transparent": @"rgba(0,0,0,0)",
-                            };
-        });
-        NSString *rgba = knownColors[value];
-        if (!rgba) {
-            rgba = value;
-        }
-        
-        if ([rgba hasPrefix:@"#"]) {
-            // #fff
-            if ([rgba length] == 4) {
-              unichar f =   [rgba characterAtIndex:1];
-              unichar s =   [rgba characterAtIndex:2];
-              unichar t =   [rgba characterAtIndex:3];
-              rgba = [NSString stringWithFormat:@"#%C%C%C%C%C%C", f, f, s, s, t, t];
-            }
-            
-            // 3. #rrggbb
-            uint32_t colorValue = 0;
-            sscanf(rgba.UTF8String, "#%x", &colorValue);
-            red     = ((colorValue & 0xFF0000) >> 16) / 255.0;
-            green   = ((colorValue & 0x00FF00) >> 8) / 255.0;
-            blue    = (colorValue & 0x0000FF) / 255.0;
-        } else if ([rgba hasPrefix:@"rgb("]) {
-            // 4. rgb(r,g,b)
-            int r,g,b;
-            sscanf(rgba.UTF8String, "rgb(%d,%d,%d)", &r, &g, &b);
-            red = r / 255.0;
-            green = g / 255.0;
-            blue = b / 255.0;
-        } else if ([rgba hasPrefix:@"rgba("]) {
-            // 5. rgba(r,g,b,a)
-            int r,g,b;
-            sscanf(rgba.UTF8String, "rgba(%d,%d,%d,%lf)", &r, &g, &b, &alpha);
-            red = r / 255.0;
-            green = g / 255.0;
-            blue = b / 255.0;
-        }
-        
-    } else if([value isKindOfClass:[NSNumber class]]) {
-        NSUInteger colorValue = [value unsignedIntegerValue];
-        red     = ((colorValue & 0xFF0000) >> 16) / 255.0;
-        green   = ((colorValue & 0x00FF00) >> 8) / 255.0;
-        blue    = (colorValue & 0x0000FF) / 255.0;
-    }
-    
-    color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
-    // 6. cache color
-    if (color && value) {
-        [colorCache setObject:color forKey:value];
-    }
-    
-    return color;
-}
-
-+ (CGColorRef)CGColor:(id)value
-{
-    UIColor *color = [self UIColor:value];
-    return [color CGColor];
-}
-
-+ (NSString *)HexWithColor:(UIColor *)color
-{
-    uint hex;
-    CGFloat red, green, blue, alpha;
-    if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
-        [color getWhite:&red alpha:&alpha];
-        green = red;
-        blue = red;
-    }
-    red = roundf(red * 255.f);
-    green = roundf(green * 255.f);
-    blue = roundf(blue * 255.f);
-    alpha = roundf(alpha * 255.f);
-    hex =  ((uint)red << 16) | ((uint)green << 8) | ((uint)blue);
-    return [NSString stringWithFormat:@"#%02x", hex];
-}
-
-+ (WXBorderStyle)WXBorderStyle:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        if ([value isEqualToString:@"solid"]) {
-            return WXBorderStyleSolid;
-        } else if ([value isEqualToString:@"dotted"]) {
-            return WXBorderStyleDotted;
-        } else if ([value isEqualToString:@"dashed"]) {
-            return WXBorderStyleDashed;
-        }
-    }
-    
-    return WXBorderStyleSolid;
-}
-
-+ (WXClipType)WXClipType:(id)value
-{
-    if([value isKindOfClass:[NSString class]]) {
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"visible"]) {
-            return NO;
-        } else if ([string isEqualToString:@"hidden"]) {
-            return YES;
-        }
-    }
-    
-    return NO;
-}
-
-+ (WXPositionType)WXPositionType:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        if ([value isEqualToString:@"relative"]) {
-            return WXPositionTypeRelative;
-        } else if ([value isEqualToString:@"absolute"]) {
-            return WXPositionTypeAbsolute;
-        } else if ([value isEqualToString:@"sticky"]) {
-            return WXPositionTypeSticky;
-        } else if ([value isEqualToString:@"fixed"]) {
-            return WXPositionTypeFixed;
-        }
-    }
-    
-    return WXPositionTypeRelative;
-}
-
-#pragma mark Text
-
-+ (NSTextAlignment)NSTextAlignment:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"left"])
-            return NSTextAlignmentLeft;
-        else if ([string isEqualToString:@"center"])
-            return NSTextAlignmentCenter;
-        else if ([string isEqualToString:@"right"])
-            return NSTextAlignmentRight;
-    }
-    return NSTextAlignmentNatural;
-}
-
-+ (UIReturnKeyType)UIReturnKeyType:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"defalut"])
-            return UIReturnKeyDefault;
-        else if ([string isEqualToString:@"go"])
-            return UIReturnKeyGo;
-        else if ([string isEqualToString:@"next"])
-            return UIReturnKeyNext;
-        else if ([string isEqualToString:@"search"])
-            return UIReturnKeySearch;
-        else if ([string isEqualToString:@"send"])
-            return UIReturnKeySend;
-        else if ([string isEqualToString:@"done"])
-            return UIReturnKeyDone;
-    }
-    return UIReturnKeyDefault;
-}
-
-+ (WXTextStyle)WXTextStyle:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"normal"])
-            return WXTextStyleNormal;
-        else if ([string isEqualToString:@"italic"])
-            return WXTextStyleItalic;
-    }
-    return WXTextStyleNormal;
-}
-
-+ (CGFloat)WXTextWeight:(id)value
-{
-    NSString *string = [WXConvert NSString:value];
-    if (!string)
-        return UIFontWeightRegular;
-    else if ([string isEqualToString:@"normal"])
-        return UIFontWeightRegular;
-    else if ([string isEqualToString:@"bold"])
-        return UIFontWeightBold;
-    else if ([string isEqualToString:@"100"])
-        return UIFontWeightUltraLight;
-    else if ([string isEqualToString:@"200"])
-        return UIFontWeightThin;
-    else if ([string isEqualToString:@"300"])
-        return UIFontWeightLight;
-    else if ([string isEqualToString:@"400"])
-        return UIFontWeightRegular;
-    else if ([string isEqualToString:@"500"])
-        return UIFontWeightMedium;
-    else if ([string isEqualToString:@"600"])
-        return UIFontWeightSemibold;
-    else if ([string isEqualToString:@"700"])
-        return UIFontWeightBold;
-    else if ([string isEqualToString:@"800"])
-        return UIFontWeightHeavy;
-    else if ([string isEqualToString:@"900"])
-        return UIFontWeightBlack;
-        
-    return UIFontWeightRegular;
-}
-
-+ (WXTextDecoration)WXTextDecoration:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"none"])
-            return WXTextDecorationNone;
-        else if ([string isEqualToString:@"underline"])
-            return WXTextDecorationUnderline;
-        else if ([string isEqualToString:@"line-through"])
-            return WXTextDecorationLineThrough;
-    }
-    return WXTextDecorationNone;
-}
-
-#pragma mark Image
-
-+ (UIViewContentMode)UIViewContentMode:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"cover"])
-            return UIViewContentModeScaleAspectFill;
-        else if ([string isEqualToString:@"contain"])
-            return UIViewContentModeScaleAspectFit;
-        else if ([string isEqualToString:@"stretch"])
-            return UIViewContentModeScaleToFill;
-    }
-    return UIViewContentModeScaleToFill;
-}
-
-+ (WXImageQuality)WXImageQuality:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"original"])
-            return WXImageQualityOriginal;
-        else if ([string isEqualToString:@"normal"])
-            return  WXImageQualityNormal;
-        else if ([string isEqualToString:@"low"])
-            return  WXImageQualityLow;
-        else if ([string isEqualToString:@"high"])
-            return  WXImageQualityHigh;
-    }
-    
-    return  WXImageQualityNone;
-}
-
-+ (WXImageSharp)WXImageSharp:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"sharpen"])
-            return WXImageSharpening;
-        else if ([string isEqualToString:@"unsharpen"])
-            return WXImageSharpeningNone;
-    }
-    return  WXImageSharpeningNone;
-}
-
-#pragma mark Scroller
-
-+ (WXScrollDirection)WXScrollDirection:(id)value
-{
-    if([value isKindOfClass:[NSString class]]){
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"none"])
-            return WXScrollDirectionNone;
-        else if ([string isEqualToString:@"vertical"])
-            return WXScrollDirectionVertical;
-        else if ([string isEqualToString:@"horizontal"])
-            return WXScrollDirectionHorizontal;
-    }
-    return WXScrollDirectionVertical;
-}
-
-+ (UITableViewRowAnimation)UITableViewRowAnimation:(id)value
-{
-    if ([value isKindOfClass:[NSString class]]) {
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"none"]) {
-            return UITableViewRowAnimationNone;
-        } else if ([string isEqualToString:@"default"]) {
-            return UITableViewRowAnimationFade;
-        }
-    }
-    
-    return UITableViewRowAnimationNone;
-}
-
-#pragma mark Animation
-
-+ (UIViewAnimationOptions)UIViewAnimationTimingFunction:(id)value
-{
-    if (![value isKindOfClass:[NSString class]]) {
-        return UIViewAnimationOptionCurveEaseInOut;
-    }
-    
-    static NSDictionary *timingFunctionMapping;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        timingFunctionMapping = @{
-                    @"ease-in":@(UIViewAnimationOptionCurveEaseIn),
-                    @"ease-out":@(UIViewAnimationOptionCurveEaseOut),
-                    @"ease-in-out":@(UIViewAnimationOptionCurveEaseInOut),
-                    @"linear":@(UIViewAnimationOptionCurveLinear)
-                    };
-    });
-    
-    return [timingFunctionMapping[value] unsignedIntegerValue];
-}
-
-+ (CAMediaTimingFunction *)CAMediaTimingFunction:(id)value
-{
-    if (![value isKindOfClass:[NSString class]]) {
-        return nil;
-    }
-    
-    static NSDictionary *mapping;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        mapping = @{
-            @"ease-in":kCAMediaTimingFunctionEaseIn,
-            @"ease-out":kCAMediaTimingFunctionEaseOut,
-            @"ease-in-out":kCAMediaTimingFunctionEaseInEaseOut,
-            @"linear":kCAMediaTimingFunctionLinear,
-            @"ease":kCAMediaTimingFunctionDefault
-        };
-    });
-    
-    NSString *timingFunction = mapping[value];
-    if ([timingFunction length] > 0) {
-        return [CAMediaTimingFunction functionWithName:timingFunction];
-    }
-    
-    if ([value hasPrefix:@"cubic-bezier"]) {
-        float x1, y1, x2, y2;
-        sscanf(((NSString *)value).UTF8String, "cubic-bezier(%f,%f,%f,%f)", &x1, &y1, &x2, &y2);
-        return [CAMediaTimingFunction functionWithControlPoints:x1 :y1 :x2 :y2];
-    }
-    
-    return [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
-}
-
-#pragma mark Visibility
-
-+ (WXVisibility)WXVisibility:(id)value
-{
-    if ([value isKindOfClass:[NSString class]]) {
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"visible"]) {
-            return WXVisibilityShow;
-        } else if ([string isEqualToString:@"hidden"]) {
-            return WXVisibilityHidden;
-        }
-    }
-    
-    return  WXVisibilityShow;
-}
-
-#pragma mark Gradient Color
-
-+ (WXGradientType)gradientType:(id)value
-{
-    WXGradientType type = WXGradientTypeToRight;
-    
-    if ([value isKindOfClass:[NSString class]]) {
-        NSString *string = (NSString *)value;
-        
-        if ([string isEqualToString:@"totop"]) {
-            type = WXGradientTypeToTop;
-        }
-        else if ([string isEqualToString:@"tobottom"]) {
-            type = WXGradientTypeToBottom;
-        }
-        else if ([string isEqualToString:@"toleft"]) {
-            type = WXGradientTypeToLeft;
-        }
-        if ([string isEqualToString:@"toright"]) {
-            type = WXGradientTypeToRight;
-        }
-        else if ([string isEqualToString:@"totopleft"]) {
-            type = WXGradientTypeToTopleft;
-        }
-        else if ([string isEqualToString:@"tobottomright"]) {
-            type = WXGradientTypeToBottomright;
-        }
-    }
-    return type;
-}
-
-#pragma mark - Length
-
-+ (WXLength *)WXLength:(id)value isFloat:(BOOL)isFloat scaleFactor:(CGFloat)scaleFactor
-{
-    if (!value) {
-        return nil;
-    }
-    
-    WXLengthType type = WXLengthTypeFixed;
-    if ([value isKindOfClass:[NSString class]]) {
-        if ([value isEqualToString:@"auto"]) {
-            type = WXLengthTypeAuto;
-        } else if ([value isEqualToString:@"normal"]){
-            type = WXLengthTypeNormal;
-        } else if ([value hasSuffix:@"%"]) {
-            type = WXLengthTypePercent;
-        }
-    } else if (![value isKindOfClass:[NSNumber class]]) {
-        WXAssert(NO, @"Unsupported type:%@ for WXLength", NSStringFromClass([value class]));
-    }
-    
-    if (isFloat) {
-        return [WXLength lengthWithFloat:([value floatValue] * scaleFactor) type:type];
-    } else {
-        return [WXLength lengthWithInt:([value intValue] * scaleFactor) type:type];
-    }
-}
-
-+ (WXBoxShadow *)WXBoxShadow:(id)value scaleFactor:(CGFloat)scaleFactor
-{
-    NSString *boxShadow = @"";
-    if([value isKindOfClass:[NSString class]]){
-        boxShadow = value;
-    } else if([value isKindOfClass:[NSNumber class]]){
-        boxShadow =  [((NSNumber *)value) stringValue];
-    } else if (value != nil) {
-        boxShadow = nil;
-        WXLogError(@"Convert Error:%@ can not be converted to boxshadow type", value);
-    }
-    if (boxShadow) {
-        return [WXBoxShadow getBoxShadowFromString:boxShadow scaleFactor:scaleFactor];
-    }
-    return nil;
-}
-
-+ (UIAccessibilityTraits)WXUIAccessibilityTraits:(id)value
-{
-    UIAccessibilityTraits accessibilityTrait = UIAccessibilityTraitNone;
-    if (![value isKindOfClass:[NSString class]]) {
-        return accessibilityTrait;
-    }
-    NSString * role = value;
-    if ([role isEqualToString:@"button"]) {
-        accessibilityTrait = UIAccessibilityTraitButton;
-    } else if ([role isEqualToString:@"link"]) {
-        accessibilityTrait = UIAccessibilityTraitLink;
-    } else if ([role isEqualToString:@"img"]) {
-        accessibilityTrait = UIAccessibilityTraitImage;
-    } else if ([role isEqualToString:@"search"]) {
-        accessibilityTrait = UIAccessibilityTraitSearchField;
-    } else if ([role isEqualToString:@"tab"]) {
-#ifdef __IPHONE_10_0
-        if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
-            accessibilityTrait = UIAccessibilityTraitTabBar;
-        }
-#endif
-    } else if ([role isEqualToString:@"frequentUpdates"]) {
-        accessibilityTrait = UIAccessibilityTraitUpdatesFrequently;
-    } else if ([role isEqualToString:@"startsMedia"]) {
-        accessibilityTrait = UIAccessibilityTraitStartsMediaSession;
-    } else if ([role isEqualToString:@"allowsDirectInteraction"]) {
-        accessibilityTrait = UIAccessibilityTraitAllowsDirectInteraction;
-    } else if ([role isEqualToString:@"summary"]) {
-        accessibilityTrait = UIAccessibilityTraitSummaryElement;
-    } else if ([role isEqualToString:@"header"]) {
-        accessibilityTrait = UIAccessibilityTraitHeader;
-    } else if ([role isEqualToString:@"keyboardKey"]) {
-        accessibilityTrait = UIAccessibilityTraitKeyboardKey;
-    } else if ([role isEqualToString:@"disabled"]) {
-        accessibilityTrait = UIAccessibilityTraitNotEnabled;
-    } else if ([role isEqualToString:@"playSound"]) {
-        accessibilityTrait = UIAccessibilityTraitPlaysSound;
-    } else if ([role isEqualToString:@"selected"]) {
-        accessibilityTrait = UIAccessibilityTraitSelected;
-    } else if ([role isEqualToString:@"pageTurn"]) {
-        accessibilityTrait = UIAccessibilityTraitCausesPageTurn;
-    } else if ([role isEqualToString:@"text"]) {
-        accessibilityTrait = UIAccessibilityTraitStaticText;
-    }
-    
-    return accessibilityTrait;
-}
-
-@end
-
-@implementation WXConvert (Deprecated)
-
-+ (WXPixelType)WXPixelType:(id)value
-{
-    CGFloat pixel = [self WXPixelType:value scaleFactor:1.0];
-    
-    return pixel * WXScreenResizeRadio();
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.h
deleted file mode 100644
index 33b5f59..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-#ifndef __WX_CONVERT_UTILITY_H__
-#define __WX_CONVERT_UTILITY_H__
-
-#if defined __cplusplus
-#include <map>
-#include <unordered_map>
-#include <set>
-
-#define NSSTRING(cstr) ((__bridge_transfer NSString*)(CFStringCreateWithCString(NULL, (const char *)(cstr), kCFStringEncodingUTF8)))
-#define NSSTRING_NO_COPY(cstr) ((__bridge_transfer NSString*)(CFStringCreateWithCStringNoCopy(NULL, (const char *)(cstr), kCFStringEncodingUTF8, kCFAllocatorNull)))
-
-NSString* _Nullable TO_JSON(id _Nullable object);
-
-id _Nonnull TO_OBJECT(NSString* _Nonnull s);
-
-NSMutableDictionary* _Nonnull NSDICTIONARY(std::map<std::string, std::string>* _Nullable map);
-
-NSMutableDictionary* _Nonnull NSDICTIONARY(std::unordered_map<std::string, std::string>* _Nullable map);
-
-NSMutableDictionary* _Nonnull NSDICTIONARY(std::vector<std::pair<std::string, std::string>>* _Nullable vec);
-
-NSMutableArray* _Nonnull NSARRAY(std::set<std::string>* _Nullable set);
-
-NSMutableArray* _Nonnull NSARRAY(std::vector<std::unordered_map<std::string, std::string>> refs);
-
-void ConvertToCString(id _Nonnull obj, void (^ _Nonnull callback)(const char* _Nullable));
-
-#endif
-
-#endif
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.mm
deleted file mode 100644
index bec9105..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXConvertUtility.mm
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXConvertUtility.h"
-#import "WXLog.h"
-#import "WXAssert.h"
-#include <vector>
-#include <string>
-
-static NSString* const JSONSTRING_SUFFIX = @"\t\n\t\r";
-
-#if 0
-
-void _detectObjectRecursion(id object, NSMutableSet* nodes)
-{
-    if (object == nil) {
-        return;
-    }
-    if ([object isKindOfClass:[NSString class]] ||
-        [object isKindOfClass:[NSNumber class]] ||
-        [object isKindOfClass:[NSNull class]]) {
-        return;
-    }
-    
-    if ([object isKindOfClass:[NSArray class]]) {
-        for (id subobj in object) {
-            if ([nodes containsObject:subobj]) {
-                NSLog(@"Find recursion.");
-            }
-            [nodes addObject:subobj];
-            _detectObjectRecursion(subobj, nodes);
-            [nodes removeObject:subobj];
-        }
-    }
-    else if ([object isKindOfClass:[NSDictionary class]]) {
-        NSArray* allKeys = [object allKeys];
-        for (id key in allKeys) {
-            id subobj = object[key];
-            if ([nodes containsObject:subobj]) {
-                NSLog(@"Find recursion.");
-            }
-            [nodes addObject:subobj];
-            _detectObjectRecursion(subobj, nodes);
-            [nodes removeObject:subobj];
-        }
-    }
-}
-
-#endif
-
-NSString* TO_JSON(id object)
-{
-    if (object == nil) {
-        return nil;
-    }
-    
-    @try {
-        if ([object isKindOfClass:[NSArray class]] || [object isKindOfClass:[NSDictionary class]]) {
-            
-#if 0
-            NSMutableSet* nodes = [[NSMutableSet alloc] init];
-            _detectObjectRecursion(object, nodes);
-#endif
-            
-            NSError *error = nil;
-            NSData *data = [NSJSONSerialization dataWithJSONObject:object
-                                                           options:0
-                                                             error:&error];
-            
-            if (error) {
-                WXLogError(@"%@", error);
-                WXAssert(NO, @"Fail to convert object to json. %@", error);
-                return nil;
-            }
-            
-            return [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] stringByAppendingString:JSONSTRING_SUFFIX]; // add suffix so that we know this is a json string
-        }
-    } @catch (NSException *exception) {
-        WXLogError(@"%@", exception);
-        WXAssert(NO, @"Fail to convert object to json. %@", exception);
-        return nil;
-    }
-    
-    return nil;
-}
-
-id TO_OBJECT(NSString* s)
-{
-    if ([s hasSuffix:JSONSTRING_SUFFIX]) {
-        if ([s length] == [JSONSTRING_SUFFIX length]) {
-            return [NSNull null];
-        }
-        
-        // s is a json string
-        @try {
-            NSError* error = nil;
-            id jsonObj = [NSJSONSerialization JSONObjectWithData:[s dataUsingEncoding:NSUTF8StringEncoding]
-                                                         options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves
-                                                           error:&error];
-            
-            if (jsonObj == nil) {
-                WXLogError(@"%@", error);
-                WXAssert(NO, @"Fail to convert json to object. %@", error);
-            }
-            else {
-                return jsonObj;
-            }
-        } @catch (NSException *exception) {
-            WXLogError(@"%@", exception);
-            WXAssert(NO, @"Fail to convert json to object. %@", exception);
-        }
-    }
-    return s; // return s instead
-}
-
-NSMutableDictionary* NSDICTIONARY(std::map<std::string, std::string>* map)
-{
-    if (map == nullptr || map->size() == 0)
-        return [[NSMutableDictionary alloc] init];
-    
-    NSMutableDictionary* result = [[NSMutableDictionary alloc] initWithCapacity:map->size()];
-    for (auto it = map->begin(); it != map->end(); it ++) {
-        id object = TO_OBJECT(NSSTRING(it->second.c_str()));
-        if (object) {
-            [result setObject:object forKey:NSSTRING(it->first.c_str())];
-        }
-    }
-    return result;
-}
-
-NSMutableDictionary* NSDICTIONARY(std::unordered_map<std::string, std::string>* map)
-{
-    if (map == nullptr || map->size() == 0)
-        return [[NSMutableDictionary alloc] init];
-    
-    NSMutableDictionary* result = [[NSMutableDictionary alloc] initWithCapacity:map->size()];
-    for (auto it = map->begin(); it != map->end(); it ++) {
-        id object = TO_OBJECT(NSSTRING(it->second.c_str()));
-        if (object) {
-            [result setObject:object forKey:NSSTRING(it->first.c_str())];
-        }
-    }
-    return result;
-}
-
-NSMutableDictionary* NSDICTIONARY(std::vector<std::pair<std::string, std::string>>* vec)
-{
-    if (vec == nullptr || vec->size() == 0)
-        return [[NSMutableDictionary alloc] init];
-    
-    NSMutableDictionary* result = [[NSMutableDictionary alloc] initWithCapacity:vec->size()];
-    for (auto& p : *vec) {
-        id object = TO_OBJECT(NSSTRING(p.second.c_str()));
-        if (object) {
-            [result setObject:object forKey:NSSTRING(p.first.c_str())];
-        }
-    }
-    return result;
-}
-
-NSMutableArray* NSARRAY(std::set<std::string>* set)
-{
-    if (set == nullptr || set->size() == 0)
-        return [[NSMutableArray alloc] init];
-    
-    NSMutableArray* result = [[NSMutableArray alloc] initWithCapacity:set->size()];
-    for (auto& s : *set) {
-        id object = TO_OBJECT(NSSTRING(s.c_str()));
-        if (object) {
-            [result addObject:object];
-        }
-    }
-    return result;
-}
-
-NSMutableArray* NSARRAY(std::vector<std::unordered_map<std::string, std::string>> refs)
-{
-    if (refs.size() == 0)
-        return [[NSMutableArray alloc] init];
-
-    NSMutableArray* ns_array = [[NSMutableArray alloc] initWithCapacity:refs.size()];
-    for (auto it : refs) {
-        [ns_array addObject:NSDICTIONARY(&it)];
-    }
-    return ns_array;
-}
-
-void ConvertToCString(id _Nonnull obj, void (^callback)(const char*))
-{
-    if ([obj isKindOfClass:[NSString class]]) {
-        callback([obj UTF8String]);
-    }
-    else if ([obj isKindOfClass:[NSNumber class]]) {
-        callback([[(NSNumber*)obj stringValue] UTF8String]);
-    }
-    else if ([obj isKindOfClass:[NSNull class]]) {
-        callback([JSONSTRING_SUFFIX UTF8String]);
-    }
-    else {
-        NSString* jsonstring = TO_JSON(obj);
-        if (jsonstring != nil) {
-            callback([jsonstring UTF8String]);
-        }
-    }
-}
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
deleted file mode 100644
index a9b9dcf..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef __WX_DEFINE_H__
-#define __WX_DEFINE_H__
-
-#define WX_SDK_VERSION @"0.24.0"
-
-#if defined(__cplusplus)
-#define WX_EXTERN extern "C" __attribute__((visibility("default")))
-#else
-#define WX_EXTERN extern __attribute__((visibility("default")))
-#endif
-
-/*
- * Concatenate preprocessor tokens a and b without expanding macro definitions
- * (however, if invoked from a macro, macro arguments are expanded).
- */
-#define WX_CONCAT(a, b)   a ## b
-/*
- * Concatenate preprocessor tokens a and b after macro-expanding them.
- */
-#define WX_CONCAT_WRAPPER(a, b)    WX_CONCAT(a, b)
-
-#define WX_CONCAT_TRIPLE(a, b, c) a ## b ## c
-
-#define WX_NSSTRING_HELPER(x) #x
-#define WX_NSSTRING(x) @WX_NSSTRING_HELPER(x)
-
-#define WX_SDK_ROOT_REF     @"_root"
-
-#define WX_TEXT_FONT_SIZE   (32.0 * self.weexInstance.pixelScaleFactor)
-
-#define WX_UPDATE_CONFIG(prefix, name, configs) \
-NSString *selStr = [NSString stringWithFormat:@"%@_%@", prefix, name];\
-SEL selector = NSSelectorFromString(selStr);\
-Class clazz = WX_COMPONENT_CLASS(_properties[@"type"]);\
-if ([clazz respondsToSelector:selector]) {\
-    configs = ((NSArray *(*)(id, SEL))objc_msgSend)(clazz, selector);\
-}\
-
-#define WX_TYPE_KEYPATH(config, name, type, parts, vKey) \
-type = [config[0] stringByAppendingString:@":"];\
-NSString *keyPath = config.count > 1 ? config[1] : nil;\
-if(keyPath){\
-    parts = [keyPath componentsSeparatedByString:@"."];\
-    vKey = parts.lastObject;\
-parts = [parts subarrayWithRange:(NSRange){0, parts.count - 1}];\
-} else {\
-    vKey = name;\
-}
-
-#define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0]
-#define RGB_A(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
-
-#define ScreenWidth  ([[UIScreen mainScreen] bounds].size.width)
-
-#define WX_ERROR_DOMAIN @"WXErrorDomain"
-
-#define WX_APPLICATION_WILL_RESIGN_ACTIVE @"WXApplicationWillResignActiveEvent"
-
-#define WX_APPLICATION_DID_BECOME_ACTIVE @"WXApplicationDidBecomeActiveEvent"
-
-#define WX_INSTANCE_NOTIFICATION_UPDATE_STATE @"WXInstUpdateState"
-#define WX_INSTANCE_NOTIFICATION_UPDATE_STATE_INTERNAL @"WXInstUpdateStateInternal"
-
-#define WX_INSTANCE_NOTIFICATION_CHANGE_VISIBILITY_INTERNAL @"WXInstChangeVisibilityInternal"
-
-#define WX_COMPONENT_NOTIFICATION_VIEW_LOADED    @"WXComponentViewLoaded"
-
-#define WX_INSTANCE_WILL_DESTROY_NOTIFICATION     @"WXSDKInstanceWillDestroyNotification"
-
-#define WX_SDKINSTANCE_WILL_RENDER    @"WXSDKInstanceWillRender"
-
-#define WX_COMPONENT_THREAD_NAME @"com.taobao.weex.component"
-
-#define WX_BRIDGE_THREAD_NAME @"com.taobao.weex.bridge"
-
-#define WX_BACKUP_BRIDGE_THREAD_NAME @"com.taobao.weex.backup.bridge"
-
-#define WX_FONT_DOWNLOAD_DIR [[WXUtility cacheDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"wxdownload"]]
-
-#define WX_EXPORT_METHOD_INTERNAL(method, token) \
-+ (NSString *)WX_CONCAT_WRAPPER(token, __LINE__) { \
-    return NSStringFromSelector(method); \
-}
-
-#define WX_MODULE_EVENT_FIRE_NOTIFICATION  @"WX_MODULE_EVENT_FIRE_NOTIFICATION"
-#define WX_ICONFONT_DOWNLOAD_NOTIFICATION  @"WX_ICONFONT_DOWNLOAD_FINISH_NOTIFICATION"
-#define WX_ICONFONT_READY_NOTIFICATION     @"WX_ICONFONT_READY_NOTIFICATION"
-
-#define WX_INSTANCE_JSCONTEXT_CREATE_NOTIFICATION @"WX_INSTANCE_JSCONTEXT_CREATE_NOTIFICATION"
-
-/**
- *  @abstract export public method
- */
-#define WX_EXPORT_METHOD(method) WX_EXPORT_METHOD_INTERNAL(method,wx_export_method_)
-
-/**
- *  @abstract export public method, support sync return value
- *  @warning the method can only be called on js thread
- */
-#define WX_EXPORT_METHOD_SYNC(method) WX_EXPORT_METHOD_INTERNAL(method,wx_export_method_sync_)
-
-/** extern "C" makes a function-name in C++ have 'C' linkage (compiler does not mangle the name)
- * so that client C code can link to (i.e use) your function using a 'C' compatible header file that contains just the declaration of your function.
- *  http://stackoverflow.com/questions/1041866/in-c-source-what-is-the-effect-of-extern-c
- */
-#ifdef __cplusplus
-# define WX_EXTERN_C_BEGIN extern "C" {
-# define WX_EXTERN_C_END   }
-#else
-# define WX_EXTERN_C_BEGIN
-# define WX_EXTERN_C_END
-#endif
-
-/**
- *  @abstract Compared with system version of current device
- *
- *  @return YES if greater than or equal to the system verison, otherwise, NO.
- *
- */
-#define WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
-
-/**
- *  @abstract Compared with system version of current device
- *
- *  @return YES if greater than the system verison, otherwise, NO.
- *
- */
-#define WX_SYS_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
-
-/**
- *  @abstract Compared with system version of current device
- *
- *  @return YES if equal to the system verison, otherwise, NO.
- *
- */
-#define WX_SYS_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
-
-/**
- *  @abstract Compared with system version of current device
- *
- *  @return YES if less than the system verison, otherwise, NO.
- *
- */
-#define WX_SYS_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
-
-/**
- *  @abstract Compared with system version of current device
- *
- *  @return YES if less than or equal to the system verison, otherwise, NO.
- *
- */
-#define WX_SYS_LESS_THAN_OR_EQUAL_TO(v)             ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
-
-/**
- *  @abstract Estimate component's type. If the type isn't equal to WXComponentTypeCommon, then return.
- */
-#define WX_CHECK_COMPONENT_TYPE(type)\
-do {\
-if (type != WXComponentTypeCommon) {\
-return;\
-}\
-} while (0);
-
-
-
-#if __has_attribute(objc_requires_super)
-    #define WX_REQUIRES_SUPER __attribute__((objc_requires_super))
-#else
-    #define WX_REQUIRES_SUPER
-#endif
-
-#endif
-
-WX_EXTERN_C_BEGIN
-
-NSString* GetWeexSDKVersion(void);
-NSString* GetWeexSDKBuildTime(void);
-unsigned long GetWeexSDKBuildTimestamp(void);
-
-WX_EXTERN_C_END
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.h
deleted file mode 100644
index 88b20df..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol WXDiffable <NSObject>
-
-- (BOOL)weex_isEqualTo:(id<WXDiffable>)object;
-
-@end
-
-@interface WXDiffUpdateIndex : NSObject
-
-@property (nonatomic, assign, readonly) NSUInteger oldIndex;
-@property (nonatomic, assign, readonly) NSUInteger newIndex;
-
-@end
-
-@interface WXDiffResult : NSObject
-
-@property (nonatomic, strong, readonly) NSIndexSet *inserts;
-@property (nonatomic, strong, readonly) NSIndexSet *deletes;
-@property (nonatomic, strong, readonly) NSArray<WXDiffUpdateIndex *> *updates;
-
-- (BOOL)hasChanges;
-
-- (instancetype)initWithInserts:(NSIndexSet *)inserts
-                        deletes:(NSIndexSet *)deletes
-                        updates:(NSArray<WXDiffUpdateIndex *> *)updates;
-
-@end
-
-@interface WXDiffUtil : NSObject
-
-+ (WXDiffResult *)diffWithMinimumDistance:(NSArray<id<WXDiffable>> *)newArray oldArray:(NSArray<id<WXDiffable>> *)oldArray;
-
-@end
-
-@interface NSNumber (WXDiffable) <WXDiffable>
-
-@end
-
-@interface NSString (WXDiffable) <WXDiffable>
-
-@end
-
-@interface NSArray (WXDiffable) <WXDiffable>
-
-@end
-
-@interface NSDictionary (WXDiffable) <WXDiffable>
-
-@end
-
-@interface NSNull (WXDiffable) <WXDiffable>
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.m
deleted file mode 100644
index 1423cf5..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.m
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXDiffUtil.h"
-#import "WXLog.h"
-
-typedef enum : NSUInteger {
-    WXDiffOperationDoNothing,
-    WXDiffOperationUpdate,
-    WXDiffOperationDelete,
-    WXDiffOperationInsert
-} WXDiffOperation;
-
-@implementation WXDiffUpdateIndex
-
-- (instancetype)initWithOldIndex:(NSUInteger)oldIndex newIndex:(NSUInteger)newIndex
-{
-    if (self = [super init]) {
-        _oldIndex = oldIndex;
-        _newIndex = newIndex;
-    }
-    
-    return self;
-}
-
-@end
-
-@implementation WXDiffResult
-
-- (instancetype)initWithInserts:(NSIndexSet *)inserts
-                        deletes:(NSIndexSet *)deletes
-                        updates:(NSArray<WXDiffUpdateIndex *> *)updates
-{
-    if (self = [super init]) {
-        _inserts = [inserts copy];
-        _deletes = [deletes copy];
-        _updates = [updates copy];
-    }
-    
-    return self;
-}
-
-- (BOOL)hasChanges
-{
-    return _updates.count > 0 || _inserts.count > 0 || _deletes.count > 0;
-}
-
-- (NSString *)description
-{
-    return [NSString stringWithFormat:@"<%@: %p; %lu inserts; %lu deletes; %lu updates", NSStringFromClass([self class]), self, (unsigned long)_inserts.count, (unsigned long)_deletes.count, (unsigned long)_updates.count];
-}
-
-
-@end
-
-@implementation WXDiffUtil
-
-+ (WXDiffResult *)diffWithMinimumDistance:(NSArray<id<WXDiffable>> *)newArray oldArray:(NSArray<id<WXDiffable>> *)oldArray
-{
-    // Using the levenshtein algorithm
-    // https://en.wikipedia.org/wiki/Levenshtein_distance
-    
-    int oldSize = (int)(oldArray.count + 1);
-    int newSize = (int)(newArray.count + 1);
-    
-    int **matrix = malloc(oldSize * sizeof(int *));
-    for (int i = 0; i < oldSize; i++) {
-        matrix[i] = malloc(newSize * sizeof(int));
-    }
-    
-    matrix[0][0] = 0;
-    
-    for (int i = 1; i < oldSize; i++) {
-        matrix[i][0] = i;
-    }
-    
-    for (int j = 1; j < newSize; j++) {
-        matrix[0][j] = j;
-    }
-    
-    for (int oldIndex = 1; oldIndex < oldSize; oldIndex ++) {
-        for (int newIndex = 1; newIndex < newSize; newIndex ++) {
-            if ([oldArray[oldIndex - 1] weex_isEqualTo:newArray[newIndex - 1]]) {
-                matrix[oldIndex][newIndex] = matrix[oldIndex - 1][newIndex - 1];
-            } else {
-                int updateCost = matrix[oldIndex - 1][newIndex - 1] + 1;
-                int insertCost = matrix[oldIndex][newIndex - 1] + 1;
-                int deleteCost = matrix[oldIndex - 1][newIndex] + 1;
-                matrix[oldIndex][newIndex] = MIN(MIN(insertCost, deleteCost), updateCost);
-            }
-        }
-    }
-    
-#if DEBUG
-    [self _printMatrix:matrix rowSize:oldSize columnSize:newSize];
-#endif
-    
-    NSMutableArray *updates = [NSMutableArray array];
-    NSMutableIndexSet *inserts = [NSMutableIndexSet indexSet];
-    NSMutableIndexSet *deletes = [NSMutableIndexSet indexSet];
-    int oldIndex = oldSize - 1;
-    int newIndex = newSize - 1;
-    while (oldIndex != 0 || newIndex != 0) {
-        WXDiffOperation operation = [self _operationInMatrix:matrix newIndex:newIndex oldIndex:oldIndex];
-        switch (operation) {
-            case WXDiffOperationUpdate:
-                newIndex --;
-                oldIndex --;
-                [updates addObject:[[WXDiffUpdateIndex alloc] initWithOldIndex:oldIndex newIndex:newIndex]];
-                break;
-            case WXDiffOperationDelete:
-                oldIndex --;
-                [deletes addIndex:oldIndex];
-                break;
-            case WXDiffOperationInsert:
-                newIndex --;
-                [inserts addIndex:newIndex];
-                break;
-            case WXDiffOperationDoNothing:
-                newIndex --;
-                oldIndex --;
-                break;
-        }
-    }
-    
-    for (int i = 0; i < oldSize; i++) {
-        free(matrix[i]);
-    }
-    free(matrix);
-    
-    WXDiffResult *result = [[WXDiffResult alloc] initWithInserts:inserts deletes:deletes updates:updates];
-    return result;
-}
-
-+ (WXDiffOperation)_operationInMatrix:(int **)matrix newIndex:(int)newIndex oldIndex:(int)oldIndex
-{
-    if (newIndex == 0) {
-        return WXDiffOperationDelete;
-    }
-    
-    if (oldIndex == 0) {
-        return WXDiffOperationInsert;
-    }
-    
-    int cost = matrix[oldIndex][newIndex];
-    
-    int costBeforeInsert = matrix[oldIndex][newIndex - 1];
-    if (costBeforeInsert + 1 == cost) {
-        return WXDiffOperationInsert;
-    }
-    
-    int costBeforDelete = matrix[oldIndex - 1][newIndex];
-    if (costBeforDelete + 1 == cost) {
-        return WXDiffOperationDelete;
-    }
-    
-    int costBeforUpdate = matrix[oldIndex - 1][newIndex - 1];
-    if (costBeforUpdate + 1 == cost) {
-        return WXDiffOperationUpdate;
-    }
-    
-    return WXDiffOperationDoNothing;
-}
-
-+ (void)_printMatrix:(int **)matrix rowSize:(int)rowSize columnSize:(int)columnSize
-{
-    for (int i = 0; i < rowSize; i ++) {
-        NSMutableArray *array = [NSMutableArray array];
-        for (int j = 0; j < columnSize; j ++) {
-            int value = matrix[i][j];
-            NSString *result;
-            if (value < 10) {
-                result = [NSString stringWithFormat:@"0%i", value];
-            } else {
-                result = [NSString stringWithFormat:@"%i", value];
-            }
-            [array addObject:result];
-        }
-        WXLogDebug(@"%@", [array componentsJoinedByString:@" "]);
-    }
-}
-
-@end
-
-@implementation NSNumber (WXDiffable)
-
-- (BOOL)weex_isEqualTo:(id<WXDiffable>)object
-{
-    return [self isEqual:object];
-}
-
-@end
-
-@implementation NSString (WXDiffable)
-
-- (BOOL)weex_isEqualTo:(id<WXDiffable>)object
-{
-    return [self isEqual:object];
-}
-
-@end
-
-@implementation NSArray (WXDiffable)
-
-- (BOOL)weex_isEqualTo:(id<WXDiffable>)object
-{
-    if (![object isKindOfClass:[NSArray class]]) {
-        return NO;
-    }
-    
-    NSArray *array = (NSArray *)object;
-    if (self.count != array.count) {
-        return NO;
-    }
-    
-    __block BOOL isEqual = YES;
-    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-        id obj2 = [self objectAtIndex:idx];
-        if ([obj conformsToProtocol:@protocol(WXDiffable)] && [obj2 conformsToProtocol:@protocol(WXDiffable)]) {
-            if (![obj weex_isEqualTo:obj2]) {
-                isEqual = NO;
-                *stop = YES;
-            }
-        } else {
-            isEqual = NO;
-            *stop = YES;
-        }
-    }];
-    
-    return isEqual;
-}
-
-@end
-
-@implementation NSDictionary (WXDiffable)
-
-- (BOOL)weex_isEqualTo:(id<WXDiffable>)object
-{
-    if (![object isKindOfClass:[NSDictionary class]]) {
-        return NO;
-    }
-    
-    NSDictionary *dictionary = (NSDictionary *)object;
-    if (self.count != dictionary.count) {
-        return NO;
-    }
-    
-    __block BOOL isEqual = YES;
-    [dictionary enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-        id obj2 = [self objectForKey:key];
-        if (obj2 && [obj2 conformsToProtocol:@protocol(WXDiffable)] && [obj conformsToProtocol:@protocol(WXDiffable)]) {
-            if (![obj weex_isEqualTo:obj2]) {
-                isEqual = NO;
-                *stop = YES;
-            }
-        } else {
-            isEqual = NO;
-            *stop = YES;
-        }
-    }];
-    
-    return isEqual;
-}
-
-@end
-
-@implementation NSNull (WXDiffable)
-
-- (BOOL)weex_isEqualTo:(id<WXDiffable>)object
-{
-    if ([object isKindOfClass:[NSNull class]]) {
-        return YES;
-    }
-    return NO;
-}
-
-@end
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLength.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLength.h
deleted file mode 100644
index a66ba4e..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLength.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-typedef enum : NSUInteger {
-    WXLengthTypeFixed,
-    WXLengthTypePercent,
-    WXLengthTypeAuto,
-    WXLengthTypeNormal
-} WXLengthType;
-
-@interface WXLength : NSObject
-
-+ (instancetype)lengthWithFloat:(float)value type:(WXLengthType)type;
-
-+ (instancetype)lengthWithInt:(int)value type:(WXLengthType)type;
-
-- (float)valueForMaximum:(float)maximumValue;
-
-- (int)intValue;
-
-- (float)floatValue;
-
-- (BOOL)isEqualToLength:(WXLength *)length;
-
-- (BOOL)isFixed;
-
-- (BOOL)isPercent;
-
-- (BOOL)isAuto;
-
-- (BOOL)isNormal;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLength.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLength.m
deleted file mode 100644
index 9524733..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLength.m
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXLength.h"
-#import "WXAssert.h"
-
-@implementation WXLength
-{
-    float _floatValue;
-    int _intValue;
-    WXLengthType _type;
-    BOOL _isFloat;
-}
-
-+ (instancetype)lengthWithFloat:(float)value type:(WXLengthType)type
-{
-    WXLength *length = [WXLength new];
-    length->_floatValue = value;
-    length->_type = type;
-    length->_isFloat = YES;
-    return length;
-}
-
-+ (instancetype)lengthWithInt:(int)value type:(WXLengthType)type
-{
-    WXLength *length = [WXLength new];
-    length->_intValue = value;
-    length->_type = type;
-    length->_isFloat = NO;
-    return length;
-}
-
-- (float)valueForMaximum:(float)maximumValue
-{
-    
-    switch (_type) {
-        case WXLengthTypeFixed:
-            return _isFloat ? _floatValue : _intValue;
-        case WXLengthTypePercent:
-            return maximumValue * (_isFloat ? _floatValue : _intValue) / 100.0;
-        case WXLengthTypeAuto:
-            return maximumValue;
-        default:
-            WXAssertNotReached();
-            return 0;
-    }
-}
-
-- (int)intValue
-{
-    WXAssert(!_isFloat, @"call `intValue` for non-int length");
-    return _intValue;
-}
-
-- (float)floatValue
-{
-    WXAssert(_isFloat,  @"call `floatValue` for non-float length");
-    return _floatValue;
-}
-
-- (BOOL)isEqualToLength:(WXLength *)length
-{
-    return length && _type == length->_type && _isFloat == length->_isFloat
-    && _floatValue == length->_floatValue && _intValue == length->_intValue;
-}
-
-- (BOOL)isFixed
-{
-    return _type == WXLengthTypeFixed;
-}
-
-- (BOOL)isPercent
-{
-    return _type == WXLengthTypePercent;
-}
-
-- (BOOL)isAuto
-{
-    return _type == WXLengthTypeAuto;
-}
-
-- (BOOL)isNormal
-{
-    return _type == WXLengthTypeNormal;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLog.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLog.h
deleted file mode 100644
index e6fa666..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLog.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#define WXLogLevel WeexLogLevel
-
-typedef NS_ENUM(NSInteger, WXLogFlag) {
-    WXLogFlagError      = 1 << 0,
-    WXLogFlagWarning    = 1 << 1,
-    WXLogFlagInfo       = 1 << 2,
-    WXLogFlagLog        = 1 << 3,
-    WXLogFlagDebug      = 1 << 4
-};
-
-/**
- *  Use Log levels to filter logs.
- */
-typedef NS_ENUM(NSUInteger, WeexLogLevel){
-    /**
-     *  No logs
-     */
-    WXLogLevelOff       = 0,
-    
-    /**
-     *  Error only
-     */
-    WXLogLevelError     = WXLogFlagError,
-    
-    /**
-     *  Error and warning
-     */
-    WXLogLevelWarning   = WXLogLevelError | WXLogFlagWarning,
-    
-    /**
-     *  Error, warning and info
-     */
-    WXLogLevelInfo      = WXLogLevelWarning | WXLogFlagInfo,
-    
-    /**
-     *  Log, warning info
-     */
-    WXLogLevelLog       = WXLogFlagLog | WXLogLevelInfo,
-    
-    /**
-     *  Error, warning, info and debug logs
-     */
-    WXLogLevelDebug     = WXLogLevelLog | WXLogFlagDebug,
-    
-    /**
-     *  All
-     */
-    WXLogLevelAll       = NSUIntegerMax
-};
-
-/**
- *  External log protocol, which is used to output the log to the external.
- */
-@protocol WXLogProtocol <NSObject>
-
-@required
-
-/**
- * External log level.
- */
-- (WXLogLevel)logLevel;
-
-- (void)log:(WXLogFlag)flag message:(NSString *)message;
-
-@end
-
-@interface WXLog : NSObject
-
-+ (WXLogLevel)logLevel;
-
-+ (void)setLogLevel:(WXLogLevel)level;
-
-+ (NSString *)logLevelString;
-
-+ (void)setLogLevelString:(NSString *)levelString;
-
-//+ (void)log:(WXLogFlag)flag file:(const char *)fileName line:(NSUInteger)line format:(NSString *)format, ... NS_FORMAT_FUNCTION(4,5);
-
-+ (void)log:(WXLogFlag)flag file:(const char *)fileName line:(NSUInteger)line message:(NSString *)message;
-
-+ (void)devLog:(WXLogFlag)flag file:(const char *)fileName line:(NSUInteger)line format:(NSString *)format, ... NS_FORMAT_FUNCTION(4,5);
-
-+ (void)registerExternalLog:(id<WXLogProtocol>)externalLog;
-
-+ (id<WXLogProtocol>)getCurrentExternalLog;
-
-@end
-
-#define WX_FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
-
- 
-#define WX_LOG(flag, fmt, ...)          \
-do {                                    \
-    [WXLog devLog:flag                     \
-             file:WX_FILENAME              \
-             line:__LINE__                 \
-           format:(fmt), ## __VA_ARGS__];  \
-} while(0)
-
-extern void _WXLogObjectsImpl(NSString *severity, NSArray *arguments);
-
-#define WXLog(format,...)               WX_LOG(WXLogFlagLog, format, ##__VA_ARGS__)
-#define WXLogDebug(format, ...)         WX_LOG(WXLogFlagDebug, format, ##__VA_ARGS__)
-#define WXLogInfo(format, ...)          WX_LOG(WXLogFlagInfo, format, ##__VA_ARGS__)
-#define WXLogWarning(format, ...)       WX_LOG(WXLogFlagWarning, format ,##__VA_ARGS__)
-#define WXLogError(format, ...)         WX_LOG(WXLogFlagError, format, ##__VA_ARGS__)
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLog.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
deleted file mode 100644
index e782f22..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXLog.h"
-#import "WXUtility.h"
-#import "WXAssert.h"
-#import "WXSDKManager.h"
-
-// Xcode does NOT natively support colors in the Xcode debugging console.
-// You'll need to install the XcodeColors plugin to see colors in the Xcode console.
-// https://github.com/robbiehanson/XcodeColors
-//
-// The following is documentation from the XcodeColors project:
-//
-//
-// How to apply color formatting to your log statements:
-//
-// To set the foreground color:
-// Insert the ESCAPE_SEQ into your string, followed by "fg124,12,255;" where r=124, g=12, b=255.
-//
-// To set the background color:
-// Insert the ESCAPE_SEQ into your string, followed by "bg12,24,36;" where r=12, g=24, b=36.
-//
-// To reset the foreground color (to default value):
-// Insert the ESCAPE_SEQ into your string, followed by "fg;"
-//
-// To reset the background color (to default value):
-// Insert the ESCAPE_SEQ into your string, followed by "bg;"
-//
-// To reset the foreground and background color (to default values) in one operation:
-// Insert the ESCAPE_SEQ into your string, followed by ";"
-
-#ifdef DEBUG
-static const WXLogLevel defaultLogLevel = WXLogLevelLog;
-#else
-static const WXLogLevel defaultLogLevel = WXLogLevelWarning;
-#endif
-
-static id<WXLogProtocol> _externalLog;
-
-static BOOL _logToWebSocket = NO;
-
-@interface WXSafeLog : NSObject
-/**
- * @abstract This is a safer but slower log to resolve DEBUG log crash when there is a retain cycle in the object
- */
-+ (NSString *)getLogMessage:(NSString *)format arguments:(va_list)args;
-
-@end
-
-@implementation WXLog
-{
-    WXLogLevel _logLevel;
-}
-
-+ (instancetype)sharedInstance
-{
-    static WXLog *_sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        if (NSClassFromString(@"WXDebugLoggerBridge")) {
-            _logToWebSocket = YES;
-        }
-        _sharedInstance = [[self alloc] init];
-        _sharedInstance->_logLevel = defaultLogLevel;
-    });
-    return _sharedInstance;
-}
-
-+ (void)setLogLevel:(WXLogLevel)level
-{
-    ((WXLog*)[self sharedInstance])->_logLevel = level;
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
-    Class propertyClass = NSClassFromString(@"WXTracingViewControllerManager");
-    SEL sel = NSSelectorFromString(@"loadTracingView");
-    if(propertyClass && [propertyClass respondsToSelector:sel]){
-        [propertyClass performSelector:sel];
-    }
-#pragma clang diagnostic pop
-}
-
-+ (WXLogLevel)logLevel
-{
-    return ((WXLog*)[self sharedInstance])->_logLevel;
-}
-
-+ (NSString *)logLevelString
-{
-    NSDictionary *logLevelEnumToString =
-    @{
-      @(WXLogLevelOff) : @"off",
-      @(WXLogLevelError) : @"error",
-      @(WXLogLevelWarning) : @"warn",
-      @(WXLogLevelInfo) : @"info",
-      @(WXLogLevelLog) : @"log",
-      @(WXLogLevelDebug) : @"debug",
-      @(WXLogLevelAll) : @"debug"
-      };
-    return [logLevelEnumToString objectForKey:@([self logLevel])];
-}
-
-+ (void)setLogLevelString:(NSString *)levelString
-{
-    NSDictionary *logLevelStringToEnum =
-    @{
-      @"all" : @(WXLogLevelAll),
-      @"error" : @(WXLogLevelError),
-      @"warn" : @(WXLogLevelWarning),
-      @"info" : @(WXLogLevelInfo),
-      @"debug" : @(WXLogLevelDebug),
-      @"log" : @(WXLogLevelLog)
-    };
-
-    [self setLogLevel:[logLevelStringToEnum[levelString] unsignedIntegerValue]];
-}
-
-+ (void)log:(WXLogFlag)flag file:(const char *)fileName line:(NSUInteger)line message:(NSString *)message
-{
-    NSString *flagString;
-    switch (flag) {
-        case WXLogFlagError:
-            flagString = @"error";
-            break;
-        case WXLogFlagWarning:
-            flagString = @"warn";
-            break;
-        case WXLogFlagDebug:
-            flagString = @"debug";
-            break;
-        case WXLogFlagLog:
-            flagString = @"log";
-            break;
-        default:
-            flagString = @"info";
-            break;
-    }
-
-    NSString *logMessage = [NSString stringWithFormat:@"<Weex>[%@]%s:%lu, %@", flagString, fileName, (unsigned long)line, message];
-
-    if ([_externalLog logLevel] & flag) {
-        [_externalLog log:flag message:logMessage];
-    }
-
-    if (_logToWebSocket) {
-        [[WXSDKManager bridgeMgr] logToWebSocket:flagString message:message];
-    }
-
-    if ([WXLog logLevel] & flag) {
-        NSLog(@"%@", logMessage);
-    }
-}
-
-+ (void)devLog:(WXLogFlag)flag file:(const char *)fileName line:(NSUInteger)line format:(NSString *)format, ... {
-    if ([WXLog logLevel] & flag || [_externalLog logLevel] & flag) {
-        if (!format) {
-            return;
-        }
-        NSString *flagString = @"log";
-        switch (flag) {
-            case WXLogFlagError:
-                flagString = @"error";
-                break;
-            case WXLogFlagWarning:
-                flagString = @"warn";
-                break;
-            case WXLogFlagDebug:
-                flagString = @"debug";
-                break;
-            case WXLogFlagLog:
-                flagString = @"log";
-                break;
-            default:
-                flagString = @"info";
-                break;
-        }
-
-        va_list args;
-        va_start(args, format);
-		NSString *message = @"";
-		if (flag == WXLogFlagDebug) {
-			message = [WXSafeLog getLogMessage:format arguments:args];
-		} else {
-			message = [[NSString alloc] initWithFormat:format arguments:args];
-		}
-        va_end(args);
-
-        Class WXLogClass = NSClassFromString(@"WXDebugger");
-        if (WXLogClass) {
-            NSArray *messageAry = [NSArray arrayWithObjects:message, nil];
-            SEL selector = NSSelectorFromString(@"coutLogWithLevel:arguments:");
-            NSMethodSignature *methodSignature = [WXLogClass instanceMethodSignatureForSelector:selector];
-            if (methodSignature == nil) {
-                NSString *info = [NSString stringWithFormat:@"%@ not found", NSStringFromSelector(selector)];
-                [NSException raise:@"Method invocation appears abnormal" format:info, nil];
-            }
-            NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
-            [invocation setTarget:[WXLogClass alloc]];
-            [invocation setSelector:selector];
-            [invocation setArgument:&flagString atIndex:2];
-            [invocation setArgument:&messageAry atIndex:3];
-            [invocation invoke];
-        }
-
-        [self log:flag file:fileName line:line message:message];
-    }
-}
-
-#pragma mark - External Log
-
-+ (void)registerExternalLog:(id<WXLogProtocol>)externalLog
-{
-    _externalLog = externalLog;
-}
-
-+ (id<WXLogProtocol>)getCurrentExternalLog
-{
-    return _externalLog;
-}
-
-@end
-
-#pragma mark - WXSafeLog
-
-static void dealWithValue(NSMutableString *result, id value, NSMutableSet *outSet);
-static NSUInteger getParamCount(NSString *format, NSMutableDictionary *outDict)
-{
-    static NSMutableSet *possibleTwoSet = nil;
-    static NSMutableSet *possibleThreeSet = nil;
-    static NSMutableSet *possibleTwo = nil;
-    static NSMutableSet *possibleThree = nil;
-
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        NSArray *longArray = @[@"ld"];
-        NSArray *longLongArray = @[@"lld"];
-        NSDictionary *coolDict = @{@"long":longArray, @"long long":longLongArray};
-        possibleTwoSet = [NSMutableSet set];
-        possibleThreeSet = [NSMutableSet set];
-        possibleTwo = [NSMutableSet set];
-        possibleThree = [NSMutableSet set];
-        for (NSString * key in coolDict.allKeys) {
-            NSArray *array = coolDict[key];
-            for (NSString * value in array) {
-                if (value.length == 2) {
-                    [possibleTwoSet addObject:value];
-                    NSString *sub = [value substringWithRange:NSMakeRange(0,1)];
-                    if (![possibleTwo containsObject:sub]) {
-                        [possibleTwo addObject:sub];
-                    }
-                } else if (value.length == 3) {
-                    [possibleThreeSet addObject:value];
-                    NSString *sub = [value substringWithRange:NSMakeRange(0,2)];
-                    if (![possibleThree containsObject:sub]) {
-                        [possibleThree addObject:sub];
-                    }
-                }
-            }
-        }
-    });
-
-    NSUInteger paramCount = 0;
-    NSUInteger formatLength = [format length];
-    NSRange searchRange = NSMakeRange(0, formatLength);
-    NSRange paramRange = [format rangeOfString:@"%" options:0 range:searchRange];
-
-    while (paramRange.location != NSNotFound)
-    {
-        NSString *subString = @" ";
-        NSUInteger location = paramRange.location;
-        do {
-            location ++;
-            subString = [format substringWithRange:NSMakeRange(location, 1)];
-        } while (([subString compare:@"0"] != NSOrderedAscending && [subString compare:@"9"] != NSOrderedDescending) || [subString compare:@"."] == NSOrderedSame);
-        if ([possibleTwo containsObject:subString]) {
-            NSString *subString3 = [format substringWithRange:NSMakeRange(location, 2)];
-            if ([possibleThree containsObject:subString3]) {
-                NSString *subString4 = [format substringWithRange:NSMakeRange(location, 3)];
-                if ([possibleThreeSet containsObject:subString4]) {
-                    subString = subString4;
-                }
-            } else {
-                NSString *subString2 = [format substringWithRange:NSMakeRange(location, 2)];
-                if ([possibleTwoSet containsObject:subString2]) {
-                    subString = subString2;
-                }
-            }
-        }
-        [outDict setObject:subString forKey:@(paramCount)];
-        paramCount++;
-        searchRange.location = paramRange.location + 1;
-        searchRange.length = formatLength - searchRange.location;
-
-        paramRange = [format rangeOfString:@"%" options:0 range:searchRange];
-    }
-    return paramCount;
-}
-
-static NSString *dealWithDictionary(NSDictionary *dict, NSMutableSet *outSet)
-{
-    NSMutableString *result = [NSMutableString new];
-    [result appendString:@" { "];
-    int i = 0;
-    for (id key in dict.allKeys) {
-        if ([key isKindOfClass:[NSDictionary class]] || [key isKindOfClass:[NSArray class]] || [key isKindOfClass:[NSSet class]]) {
-            [result appendString:@"(invalid Dictionary key) : ( )"];
-        } else {
-            [result appendString:[NSString stringWithFormat:@"%@ : ", key]];
-            id value = [dict objectForKey:key];
-            NSNumber *pointerValue = [NSNumber numberWithLong:(long)value];
-            if ([outSet containsObject:pointerValue]) {
-                [result appendString:@"(Found Retain Cycle!!!)"];
-            } else {
-                dealWithValue(result, value, outSet);
-            }
-        }
-        i++;
-        if (i < dict.allKeys.count) {
-            [result appendString:@" , "];
-        }
-    }
-    [result appendString:@" } "];
-    return result;
-}
-
-static NSString *dealWithArray(NSArray *array, NSMutableSet *outSet)
-{
-    NSMutableString *result = [NSMutableString new];
-    [result appendString:@" [ "];
-    int i = 0;
-    for (id value in array) {
-        NSNumber *pointerValue = [NSNumber numberWithLong:(long)value];
-        if ([outSet containsObject:pointerValue]) {
-            [result appendString:@"(Found Retain Cycle!!!)"];
-        } else {
-            dealWithValue(result, value, outSet);
-        }
-        i++;
-        if (i < array.count) {
-            [result appendString:@" , "];
-        }
-    }
-    [result appendString:@" ] "];
-    return result;
-}
-
-static NSString *dealWithSet(NSSet *set, NSMutableSet *outSet)
-{
-    NSMutableString *result = [NSMutableString new];
-    [result appendString:@" ( "];
-    int i = 0;
-    for (id value in set) {
-        NSNumber *pointerValue = [NSNumber numberWithLong:(long)value];
-        if ([outSet containsObject:pointerValue]) {
-            [result appendString:@"(Found Retain Cycle!!!)"];
-        } else {
-            dealWithValue(result, value, outSet);
-        }
-        i++;
-        if (i < set.count) {
-            [result appendString:@" , "];
-        }
-    }
-    [result appendString:@" ) "];
-    return result;
-}
-
-static void dealWithValue(NSMutableString *result, id value, NSMutableSet *outSet)
-{
-    NSNumber *pointerValue = [NSNumber numberWithLong:(long)value];
-    if (pointerValue.longValue > 100000) {
-        [outSet addObject:pointerValue];
-    }
-    if ([value isKindOfClass:[NSArray class]]) {
-        NSString *tempString = dealWithArray((NSArray *)value, outSet);
-        [result appendString:tempString];
-    } else if ([value isKindOfClass:[NSDictionary class]]) {
-        [result appendString:dealWithDictionary((NSDictionary *)value, outSet)];
-    } else if ([value isKindOfClass:[NSSet class]]) {
-        [result appendString:dealWithSet((NSSet *)value, outSet)];
-    } else {
-        [result appendString:[NSString stringWithFormat:@"%@", value]];
-    }
-}
-
-@implementation WXSafeLog
-
-+ (NSString *)getLogMessage:(NSString *)format arguments:(va_list)args
-{
-    NSMutableString *mutableFormat = [NSMutableString stringWithString:format];
-    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
-    NSUInteger count = getParamCount(format, dict);
-    NSMutableArray<NSString *> *replacedDict = [NSMutableArray array];
-    for (NSUInteger i = 0; i < count; i++) {
-        if ([dict[@(i)] isEqualToString:@"@"]) {
-            NSMutableSet *outSet = [NSMutableSet set];
-            __unsafe_unretained id obj = va_arg(args, id);
-            NSString *output = @"";
-            if (obj) {
-                if ([obj isKindOfClass:[NSDictionary class]]) {
-                    output = dealWithDictionary((NSDictionary *)obj, outSet);
-                } else if ([obj isKindOfClass:[NSArray class]]) {
-                    output = dealWithArray((NSArray *)obj, outSet);
-                } else if ([obj isKindOfClass:[NSSet class]]) {
-                    output = dealWithSet((NSSet *)obj, outSet);
-                } else {
-                    output = [NSString stringWithFormat:@"%@", obj];
-                }
-            }
-            [replacedDict addObject:output];
-        } else {
-            NSString *logFormat = dict[@(i)];
-            if (logFormat.length == 1) {
-#define LEN 2
-                char tempChar[LEN];
-                memset(tempChar, 0, LEN);
-                [logFormat getCString:tempChar maxLength:LEN encoding:NSASCIIStringEncoding];
-                switch(tempChar[0]) {
-                    case '%':
-                    case 'c':
-//Suppress "Second argument to 'va_arg' is of promotable type 'char'; this va_arg has undefined behavior because arguments will be promoted to 'int'" warning
-//                        va_arg(args, char);
-                        va_arg(args, int);
-                        break;
-                    case 'd':
-                    case 'D':
-                        va_arg(args, int);
-                        break;
-                    case 'f':
-                    case 'F':
-                        va_arg(args, double);
-                        break;
-                    case 'C':
-//                        va_arg(args, unichar);
-                        va_arg(args, int);
-                        break;
-                    case 's':
-                        va_arg(args, char *);
-                        break;
-                    case 'S':
-                        va_arg(args, unichar *);
-                        break;
-                    case 'p':
-                        va_arg(args, void *);
-                        break;
-                    default:
-                        va_arg(args, void *);
-                        break;
-                }
-            } else {
-                static NSDictionary *map;
-                static dispatch_once_t onceToken;
-                dispatch_once(&onceToken, ^{
-                    map = @{
-                            @"ld":@"long", \
-                            @"lld":@"long long", \
-                            };
-                });
-                NSString *type = map[dict[@(i)]];
-                if ([type isEqualToString:@"long"]) {
-                    va_arg(args, long);
-                } else if ([type isEqualToString:@"long long"]) {
-                    va_arg(args, long long);
-                }
-            }
-        }
-    }
-    NSString *prefix = @"#$~";
-    NSString *suffix = @"~$#";
-    NSString *replace = [NSString stringWithFormat:@"%@%%p%@", prefix, suffix];
-    [mutableFormat replaceOccurrencesOfString:@"%@" withString:replace options:NSLiteralSearch range:NSMakeRange(0, mutableFormat.length)];
-    NSMutableString *result = [[NSMutableString alloc] initWithFormat:mutableFormat arguments:args];
-    int j = 0;
-    NSRange range, range1, range2;
-    range1 = [result rangeOfString:prefix options:NSLiteralSearch];
-    range2 = [result rangeOfString:suffix options:NSLiteralSearch];
-    range = NSMakeRange(range1.location, range2.location+range2.length - range1.location);
-    while(range1.length>0 && range2.length>0) {
-        [result replaceCharactersInRange:range withString:replacedDict[j++]];
-        range1 = [result rangeOfString:prefix options:NSLiteralSearch];
-        range2 = [result rangeOfString:suffix options:NSLiteralSearch];
-        range = NSMakeRange(range1.location, range2.location+range2.length - range1.location);
-    }
-    return result;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h
deleted file mode 100644
index e77c943..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-@interface WXSimulatorShortcutManager : NSObject
-
-+ (void)registerSimulatorShortcutWithKey:(NSString *)key modifierFlags:(UIKeyModifierFlags)flags action:(dispatch_block_t)action;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.m
deleted file mode 100644
index 966ac86..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.m
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXSimulatorShortcutManager.h"
-#import "WXUtility.h"
-#import <objc/message.h>
-
-#if TARGET_OS_SIMULATOR
-
-@interface UIEvent (WXSimulatorShortcutManager)
-
-@property (nonatomic, strong) NSString *_modifiedInput;
-@property (nonatomic, strong) NSString *_unmodifiedInput;
-@property (nonatomic, assign) UIKeyModifierFlags _modifierFlags;
-@property (nonatomic, assign) BOOL _isKeyDown;
-@property (nonatomic, assign) long _keyCode;
-
-@end
-
-@interface WXKeyInput : NSObject
-
-@property (nonatomic, strong) NSString *key;
-@property (nonatomic, assign) UIKeyModifierFlags flags;
-
-@end
-
-@implementation WXKeyInput
-
-+ (instancetype)keyInputForKey:(NSString *)key flags:(UIKeyModifierFlags)flags
-{
-    WXKeyInput *keyInput = [[self alloc] init];
-    if (keyInput) {
-        keyInput.key = key;
-        keyInput.flags = flags;
-    }
-    return keyInput;
-}
-
-- (BOOL)isEqual:(id)object
-{
-    BOOL isEqual = NO;
-    if ([object isKindOfClass:[WXKeyInput class]]) {
-        WXKeyInput *keyInput = (WXKeyInput *)object;
-        isEqual = [self.key isEqualToString:keyInput.key] && self.flags == keyInput.flags;
-    }
-    return isEqual;
-}
-
-@end
-
-
-@implementation WXSimulatorShortcutManager
-{
-    NSCache *_actions;
-}
-
-+ (instancetype)sharedManager
-{
-    static WXSimulatorShortcutManager *_sharedInstance = nil;
-    static dispatch_once_t oncePredicate;
-    dispatch_once(&oncePredicate, ^{
-        _sharedInstance = [[self alloc] init];
-        _sharedInstance->_actions = [[NSCache alloc] init];
-        SEL handleKeyEventSelector = NSSelectorFromString(@"handleKeyUIEvent:");
-        SEL replacedSelector = WXSwizzledSelectorForSelector(handleKeyEventSelector);
-        WXSwizzleInstanceMethodWithBlock([UIApplication class], handleKeyEventSelector, ^(UIApplication *application, UIEvent *event) {
-            [[[self class] sharedManager] handleKeyUIEvent:event];
-            ((void(*)(id, SEL, id))objc_msgSend)(application, replacedSelector, event);
-        }, replacedSelector);
-    });
-    return _sharedInstance;
-}
-
-+ (void)registerSimulatorShortcutWithKey:(NSString *)key modifierFlags:(UIKeyModifierFlags)flags action:(dispatch_block_t)action
-{
-    WXKeyInput *keyInput = [WXKeyInput keyInputForKey:key flags:flags];
-    [[WXSimulatorShortcutManager sharedManager]->_actions setObject:action forKey:keyInput];
-}
-
-- (void)handleKeyUIEvent:(UIEvent *)event
-{
-    BOOL isKeyDown = NO;
-    NSString *modifiedInput = nil;
-    NSString *unmodifiedInput = nil;
-    UIKeyModifierFlags flags = 0;
-    if ([event respondsToSelector:NSSelectorFromString(@"_isKeyDown")]) {
-        isKeyDown = [event _isKeyDown];
-    }
-    
-    if ([event respondsToSelector:NSSelectorFromString(@"_modifiedInput")]) {
-        modifiedInput = [event _modifiedInput];
-    }
-    
-    if ([event respondsToSelector:NSSelectorFromString(@"_unmodifiedInput")]) {
-        unmodifiedInput = [event _unmodifiedInput];
-    }
-    
-    if ([event respondsToSelector:NSSelectorFromString(@"_modifierFlags")]) {
-        flags = [event _modifierFlags];
-    }
-    
-    if (isKeyDown && [modifiedInput length] > 0) {
-        WXKeyInput *keyInput = [WXKeyInput keyInputForKey:unmodifiedInput flags:flags];
-        dispatch_block_t block = [_actions objectForKey:keyInput];
-        if (block) {
-            block();
-        }
-    }
-}
-
-@end
-
-#endif
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h
deleted file mode 100644
index 8e21b35..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/**
- *  @abstract a thread-safe counter
- */
-@interface WXThreadSafeCounter : NSObject
-
-@property (atomic, readonly) int32_t value;
-
-- (int32_t)increase;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.m
deleted file mode 100644
index ce3f485..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.m
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXThreadSafeCounter.h"
-#import <libkern/OSAtomic.h>
-
-@implementation WXThreadSafeCounter{
-    int32_t _value;
-}
-
-- (int32_t)value
-{
-    return _value;
-}
-
-- (int32_t)increase {
-    return OSAtomicIncrement32(&_value);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h
deleted file mode 100644
index 25de537..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/**
- *  @abstract Thread safe NSMutableArray
- */
-@interface WXThreadSafeMutableArray : NSMutableArray
-
-/* WXThreadSafeMutableArray inherites from NSMutableArray for backward capability.
- Keep in mind that only the following methods are thread safe guaranteed.
- And MUST not use other methods provideded by NSMutableArray. */
-
-- (instancetype)init;
-- (instancetype)initWithCapacity:(NSUInteger)numItems;
-- (instancetype)initWithArray:(NSArray *)array;
-- (instancetype)initWithCoder:(NSCoder *)aDecoder;
-- (instancetype)initWithObjects:(const id [])objects count:(NSUInteger)cnt;
-
-- (NSUInteger)count;
-- (id)objectAtIndex:(NSUInteger)index;
-- (id)objectAtIndexedSubscript:(NSUInteger)index;
-- (id)firstObject;
-- (id)lastObject;
-- (BOOL)containsObject:(id)anObject;
-- (NSEnumerator *)objectEnumerator;
-- (NSEnumerator *)reverseObjectEnumerator;
-- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
-- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)index;
-- (void)addObject:(id)anObject;
-- (void)removeObject:(id)anObject;
-- (void)removeObjectAtIndex:(NSUInteger)index;
-- (void)removeLastObject;
-- (void)removeAllObjects;
-- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
-- (NSUInteger)indexOfObject:(id)anObject;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.m
deleted file mode 100644
index c7e0517..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.m
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXThreadSafeMutableArray.h"
-#import <pthread/pthread.h>
-
-@interface WXThreadSafeMutableArray ()
-{
-    NSMutableArray* _array;
-    pthread_mutex_t _safeThreadArrayMutex;
-    pthread_mutexattr_t _safeThreadArrayMutexAttr;
-}
-
-@end
-
-@implementation WXThreadSafeMutableArray
-
-- (instancetype)initCommon
-{
-    self = [super init];
-    if (self) {
-        pthread_mutexattr_init(&(_safeThreadArrayMutexAttr));
-        pthread_mutexattr_settype(&(_safeThreadArrayMutexAttr), PTHREAD_MUTEX_RECURSIVE); // must use recursive lock
-        pthread_mutex_init(&(_safeThreadArrayMutex), &(_safeThreadArrayMutexAttr));
-    }
-    return self;
-}
-
-- (instancetype)init
-{
-    self = [self initCommon];
-    if (self) {
-        _array = [NSMutableArray array];
-    }
-    return self;
-}
-
-- (instancetype)initWithCapacity:(NSUInteger)numItems
-{
-    self = [self initCommon];
-    if (self) {
-        _array = [NSMutableArray arrayWithCapacity:numItems];
-    }
-    return self;
-}
-
-- (instancetype)initWithArray:(NSArray *)array
-{
-    self = [self initCommon];
-    if (self) {
-        _array = [NSMutableArray arrayWithArray:array];
-    }
-    return self;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)aDecoder
-{
-    self = [self initCommon];
-    if (self) {
-        _array = [[NSMutableArray alloc] initWithCoder:aDecoder];
-    }
-    return self;
-}
-
-- (instancetype)initWithObjects:(const id [])objects count:(NSUInteger)cnt
-{
-    self = [self initCommon];
-    if (self) {
-        _array = [NSMutableArray array];
-        for (NSUInteger i = 0; i < cnt; ++i) {
-            [_array addObject:objects[i]];
-        }
-    }
-    return self;
-}
-
-- (NSUInteger)count
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array count];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (id)objectAtIndex:(NSUInteger)index
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array objectAtIndex:index];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (id)objectAtIndexedSubscript:(NSUInteger)index
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array objectAtIndexedSubscript:index];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (id)firstObject
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array firstObject];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (id)lastObject
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array lastObject];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (BOOL)containsObject:(id)anObject
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array containsObject:anObject];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (NSEnumerator *)objectEnumerator
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array objectEnumerator];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (NSEnumerator *)reverseObjectEnumerator
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array reverseObjectEnumerator];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        [_array insertObject:anObject atIndex:index];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)index
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        [_array setObject:anObject atIndexedSubscript:index];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)addObject:(id)anObject
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        [_array addObject:anObject];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)removeObject:(id)anObject
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        [_array removeObject:anObject];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)removeObjectAtIndex:(NSUInteger)index
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        [_array removeObjectAtIndex:index];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)removeLastObject
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        [_array removeLastObject];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)removeAllObjects
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        [_array removeAllObjects];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        [_array replaceObjectAtIndex:index withObject:anObject];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (NSUInteger)indexOfObject:(id)anObject
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array indexOfObject:anObject];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (id)copy
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadArrayMutex);
-        return [_array copy];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadArrayMutex);
-    }
-}
-
-- (void)dealloc
-{
-    pthread_mutex_destroy(&_safeThreadArrayMutex);
-    pthread_mutexattr_destroy(&_safeThreadArrayMutexAttr);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h
deleted file mode 100644
index edad2f7..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/**
- *  @abstract Thread safe NSMutableDictionary
- */
-@interface WXThreadSafeMutableDictionary<KeyType, ObjectType> : NSMutableDictionary
-
-/* WXThreadSafeMutableDictionary inherites from NSMutableDictionary for backward capability.
- Keep in mind that only the following methods are thread safe guaranteed.
- And MUST not use other methods provideded by NSMutableDictionary. */
-
-- (instancetype)init;
-- (instancetype)initWithCapacity:(NSUInteger)numItems;
-- (instancetype)initWithDictionary:(NSDictionary *)dictionary;
-- (instancetype)initWithCoder:(NSCoder *)aDecoder;
-- (instancetype)initWithObjects:(const id [])objects forKeys:(const id<NSCopying> [])keys count:(NSUInteger)cnt;
-
-- (NSUInteger)count;
-- (id)objectForKey:(id)key;
-- (id)objectForKeyedSubscript:(id)key;
-- (NSEnumerator *)keyEnumerator;
-- (void)setObject:(id)anObject forKey:(id<NSCopying>)aKey;
-- (void)setObject:(id)anObject forKeyedSubscript:(id <NSCopying>)key;
-- (NSArray *)allKeys;
-- (NSArray *)allValues;
-- (void)removeObjectForKey:(id)aKey;
-- (void)removeAllObjects;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m
deleted file mode 100644
index 6f31fb9..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXThreadSafeMutableDictionary.h"
-#import <pthread/pthread.h>
-
-@interface WXThreadSafeMutableDictionary ()
-{
-    NSMutableDictionary* _dict;
-    pthread_mutex_t _safeThreadDictionaryMutex;
-    pthread_mutexattr_t _safeThreadDictionaryMutexAttr;
-}
-
-@end
-
-@implementation WXThreadSafeMutableDictionary
-
-- (instancetype)initCommon
-{
-    self = [super init];
-    if (self) {
-        pthread_mutexattr_init(&(_safeThreadDictionaryMutexAttr));
-        pthread_mutexattr_settype(&(_safeThreadDictionaryMutexAttr), PTHREAD_MUTEX_RECURSIVE); // must use recursive lock
-        pthread_mutex_init(&(_safeThreadDictionaryMutex), &(_safeThreadDictionaryMutexAttr));
-    }
-    return self;
-}
-
-- (instancetype)init
-{
-    self = [self initCommon];
-    if (self) {
-        _dict = [NSMutableDictionary dictionary];
-    }
-    return self;
-}
-
-- (instancetype)initWithCapacity:(NSUInteger)numItems
-{
-    self = [self initCommon];
-    if (self) {
-        _dict = [NSMutableDictionary dictionaryWithCapacity:numItems];
-    }
-    return self;
-}
-
-- (instancetype)initWithDictionary:(NSDictionary *)dictionary
-{
-    self = [self initCommon];
-    if (self) {
-        _dict = [NSMutableDictionary dictionaryWithDictionary:dictionary];
-    }
-    return self;
-}
-
-- (instancetype)initWithCoder:(NSCoder *)aDecoder
-{
-    self = [self initCommon];
-    if (self) {
-        _dict = [[NSMutableDictionary alloc] initWithCoder:aDecoder];
-    }
-    return self;
-}
-
-- (instancetype)initWithObjects:(const id [])objects forKeys:(const id<NSCopying> [])keys count:(NSUInteger)cnt
-{
-    self = [self initCommon];
-    if (self) {
-        _dict = [NSMutableDictionary dictionary];
-        for (NSUInteger i = 0; i < cnt; ++i) {
-            _dict[keys[i]] = objects[i];
-        }
-        
-    }
-    return self;
-}
-
-- (NSUInteger)count
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        return [_dict count];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-}
-
-- (id)objectForKey:(id)key
-{
-    if (nil == key) {
-        return nil;
-    }
-    
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        return [_dict objectForKey:key];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-}
-
-- (id)objectForKeyedSubscript:(id)key
-{
-    if (nil == key) {
-        return nil;
-    }
-    
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        return [_dict objectForKeyedSubscript:key];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-}
-
-- (NSEnumerator *)keyEnumerator
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        return [_dict keyEnumerator];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-}
-
-- (void)setObject:(id)anObject forKey:(id<NSCopying>)aKey
-{
-    id originalObject = nil; // make sure that object is not released in lock
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        originalObject = [_dict objectForKey:aKey];
-        [_dict setObject:anObject forKey:aKey];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-    originalObject = nil;
-}
-
-- (void)setObject:(id)anObject forKeyedSubscript:(id <NSCopying>)key
-{
-    id originalObject = nil; // make sure that object is not released in lock
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        originalObject = [_dict objectForKey:key];
-        [_dict setObject:anObject forKeyedSubscript:key];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-    originalObject = nil;
-}
-
-- (NSArray *)allKeys
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        return [_dict allKeys];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-}
-
-- (NSArray *)allValues
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        return [_dict allValues];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-}
-
-- (void)removeObjectForKey:(id)aKey
-{
-    id originalObject = nil; // make sure that object is not released in lock
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        originalObject = [_dict objectForKey:aKey];
-        if (originalObject) {
-            [_dict removeObjectForKey:aKey];
-        }
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-    originalObject = nil;
-}
-
-- (void)removeAllObjects
-{
-    NSArray* allValues = nil; // make sure that objects are not released in lock
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        allValues = [_dict allValues];
-        [_dict removeAllObjects];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-    allValues = nil;
-}
-
-- (id)copy
-{
-    @try {
-        pthread_mutex_lock(&_safeThreadDictionaryMutex);
-        return [_dict copy];
-    }
-    @finally {
-        pthread_mutex_unlock(&_safeThreadDictionaryMutex);
-    }
-}
-
-- (void)dealloc
-{
-    pthread_mutex_destroy(&_safeThreadDictionaryMutex);
-    pthread_mutexattr_destroy(&_safeThreadDictionaryMutexAttr);
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXType.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXType.h
deleted file mode 100644
index 2ef5c84..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXType.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-typedef NS_ENUM(NSUInteger, WXLayoutDirection) {
-    WXLayoutDirectionLTR,
-    WXLayoutDirectionRTL,
-    WXLayoutDirectionAuto,
-};
-
-typedef NS_ENUM(NSUInteger, WXComponentType) {
-    WXComponentTypeCommon = 0,
-    WXComponentTypeVirtual
-};
-
-typedef NS_ENUM(NSUInteger, WXScrollDirection) {
-    WXScrollDirectionVertical,
-    WXScrollDirectionHorizontal,
-    WXScrollDirectionNone,
-};
-
-typedef NS_ENUM(NSUInteger, WXTextStyle) {
-    WXTextStyleNormal = 0,
-    WXTextStyleItalic
-};
-
-typedef NS_ENUM(NSInteger, WXTextDecoration) {
-    WXTextDecorationNone = 0,
-    WXTextDecorationUnderline,
-    WXTextDecorationLineThrough
-};
-
-typedef NS_ENUM(NSInteger, WXImageQuality) {
-    WXImageQualityOriginal = -1,
-    WXImageQualityLow = 0,
-    WXImageQualityNormal,
-    WXImageQualityHigh,
-    WXImageQualityNone,
-};
-
-typedef NS_ENUM(NSInteger, WXImageSharp) {
-    WXImageSharpeningNone = 0,
-    WXImageSharpening
-};
-
-typedef NS_ENUM(NSInteger, WXVisibility) {
-    WXVisibilityShow = 0,
-    WXVisibilityHidden
-};
-
-typedef NS_ENUM(NSInteger, WXBorderStyle) {
-    WXBorderStyleNone = 0,
-    WXBorderStyleDotted,
-    WXBorderStyleDashed,
-    WXBorderStyleSolid
-};
-
-typedef NS_ENUM(NSInteger, WXPositionType) {
-    WXPositionTypeRelative = 0,
-    WXPositionTypeAbsolute,
-    WXPositionTypeSticky,
-    WXPositionTypeFixed
-};
-
-typedef NS_ENUM(NSInteger, WXGradientType) {
-    WXGradientTypeToTop = 0,
-    WXGradientTypeToBottom,
-    WXGradientTypeToLeft,
-    WXGradientTypeToRight,
-    WXGradientTypeToTopleft,
-    WXGradientTypeToBottomright,
-};
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
deleted file mode 100644
index 71c77d5..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-#import "WXDefine.h"
-#import "WXType.h"
-#import "WXLog.h"
-#import "WXSDKInstance.h"
-
-// The default screen width which helps us to calculate the real size or scale in different devices.
-static const CGFloat WXDefaultScreenWidth = 750.0;
-
-#define WX_ENUMBER_CASE(_invoke, idx, code, obj, _type, op, _flist) \
-case code:{\
-    _type *_tmp = malloc(sizeof(_type));\
-    memset(_tmp, 0, sizeof(_type));\
-    *_tmp = [obj op];\
-    [_invoke setArgument:_tmp atIndex:(idx) + 2];\
-    *(_flist + idx) = _tmp;\
-    break;\
-}
-#define WX_EPCHAR_CASE(_invoke, idx, code, obj, _type, op, _flist) \
-case code:{\
-    _type *_tmp = (_type  *)[obj op];\
-    [_invoke setArgument:&_tmp atIndex:(idx) + 2];\
-    *(_flist + idx) = 0;\
-    break;\
-}\
-
-#define WX_ALLOC_FLIST(_ppFree, _count) \
-do {\
-    _ppFree = (void *)malloc(sizeof(void *) * (_count));\
-    memset(_ppFree, 0, sizeof(void *) * (_count));\
-} while(0)
-
-#define WX_FREE_FLIST(_ppFree, _count) \
-do {\
-    for(int i = 0; i < (_count); i++){\
-        if(*(_ppFree + i ) != 0) {\
-            free(*(_ppFree + i));\
-        }\
-    }\
-    free(_ppFree);\
-}while(0)
-
-#define WX_ARGUMENTS_SET(_invocation, _sig, idx, _obj, _ppFree) \
-do {\
-    const char *encode = [_sig getArgumentTypeAtIndex:(idx) + 2];\
-    switch(encode[0]){\
-        WX_EPCHAR_CASE(_invocation, idx, _C_CHARPTR, _obj, char *, UTF8String, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_INT, _obj, int, intValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_SHT, _obj, short, shortValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_LNG, _obj, long, longValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_LNG_LNG, _obj, long long, longLongValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_UCHR, _obj, unsigned char, unsignedCharValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_UINT, _obj, unsigned int, unsignedIntValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_USHT, _obj, unsigned short, unsignedShortValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_ULNG, _obj, unsigned long, unsignedLongValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_ULNG_LNG, _obj,unsigned long long, unsignedLongLongValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_FLT, _obj, float, floatValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_DBL, _obj, double, doubleValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_BOOL, _obj, bool, boolValue, _ppFree)\
-        WX_ENUMBER_CASE(_invocation, idx, _C_CHR, _obj, char, charValue, _ppFree)\
-        default: { [_invocation setArgument:&_obj atIndex:(idx) + 2]; *(_ppFree + idx) = 0; break;}\
-    }\
-}while(0)
-
-#define WXPointEqualToPoint __WXPointEqualToPoint
-CG_INLINE bool
-__WXPointEqualToPoint(CGPoint point1, CGPoint point2)
-{
-    return fabs (point1.x - point2.x) < 0.00001 && fabs (point1.y - point2.y) < 0.00001;
-}
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-/**
- * @abstract execute asynchronous action block on the main thread.
- *
- */
-void WXPerformBlockOnMainThread( void (^ _Nonnull block)(void));
-
-/**
- * @abstract execute synchronous action block on the main thread.
- *
- */
-void WXPerformBlockSyncOnMainThread( void (^ _Nonnull block)(void));
-
-/**
- * @abstract execute action block on the specific thread.
- *
- */
-void WXPerformBlockOnThread(void (^ _Nonnull block)(void), NSThread *_Nonnull thread);
-
-/**
- * @abstract swizzling methods.
- *
- */
-void WXSwizzleInstanceMethod(_Nonnull Class className, _Nonnull SEL original, _Nonnull SEL replaced);
-
-void WXSwizzleInstanceMethodWithBlock(_Nonnull Class className, _Nonnull SEL original, _Nonnull id block, _Nonnull SEL replaced);
-
-_Nonnull SEL WXSwizzledSelectorForSelector(_Nonnull SEL selector);
-    
-#ifdef __cplusplus
-}
-#endif
-
-@interface WXUtility : NSObject
-
-+ (void)performBlock:(void (^_Nonnull)(void))block onThread:(NSThread *_Nonnull)thread;
-
-/**
- * @abstract Returns the environment of current application, you can get some necessary properties such as appVersion、sdkVersion、appName etc.
- *
- * @return A dictionary object which contains these properties.
- *
- */
-+ (NSDictionary *_Nonnull)getEnvironment;
-
-+ (NSDictionary *_Nonnull)getDebugEnvironment;
-
-+ (WXLayoutDirection)getEnvLayoutDirection;
-
-/**
- * @abstract UserAgent Generation
- *
- * @return A ua string by splicing (deviceName、appVersion、sdkVersion、externalField、screenSize)
- *
- */
-+ (NSString *_Nonnull)userAgent;
-
-/**
- * @abstract JSON Decode Method
- *
- * @param json String.
- *
- * @return A json object by decoding json string.
- *
- */
-+ (id _Nullable)objectFromJSON:(NSString * _Nonnull)json;
-
-#define WXDecodeJson(json)  [WXUtility objectFromJSON:json]
-
-/**
- * @abstract JSON Encode Method
- *
- * @param object Object.
- *
- * @return A json string by encoding json object.
- *
- */
-+ (NSString * _Nullable)JSONString:(id _Nonnull)object;
-
-#define WXEncodeJson(obj)  [WXUtility JSONString:obj]
-
-/**
- * @abstract Returns a Foundation object from given JSON data. A Foundation object from the JSON data in data, or nil if an error occurs.
- *
- * @param data A data object containing JSON data.
- * @param error If an error occurs, upon return contains an NSError object that describes the problem.
- *
- * @return A Foundation object from the JSON data in data, or nil if an error occurs.
- *
- */
-+ (id _Nullable)JSONObject:(NSData * _Nonnull)data error:(NSError * __nullable * __nullable)error;
-
-#define WXJSONObjectFromData(data) [WXUtility JSONObject:data error:nil]
-/**
- * @abstract JSON Object Copy Method
- *
- * @param object Object.
- *
- * @return A json object by copying.
- *
- */
-+ (id _Nullable)copyJSONObject:(id _Nonnull)object;
-
-#define WXCopyJson(obj)     [WXUtility copyJSONObject:obj]
-
-/**
- *
- *  Checks if a String is whitespace, empty ("") or nil
- *  @code
- *    [WXUtility isBlankString: nil]       = true
- *    [WXUtility isBlankString: ""]        = true
- *    [WXUtility isBlankString: " "]       = true
- *    [WXUtility isBlankString: "bob"]     = false
- *    [WXUtility isBlankString: "  bob  "] = false
- *  @endcode
- *  @param string the String to check, may be null
- *
- *  @return true if the String is null, empty or whitespace
- */
-+ (BOOL)isBlankString:(NSString * _Nullable)string ;
-
-
-/**
- check a point is valid or not. A zero point is also valid
-
- @param point a point value to check
- @return true if point.x and point.y are all valid value for a number.
- */
-+ (BOOL)isValidPoint:(CGPoint)point;
-
-/**
- * @abstract Returns a standard error object
- *
- * @param code code.
- *
- * @param message message.
- *
- * @return A error object type of NSError.
- *
- */
-+ (NSError * _Nonnull)errorWithCode:(NSInteger)code message:(NSString * _Nullable)message;
-
-/**
- * @abstract Returns a Font Object by setting some properties such as size、weight、style and fontFamily.
- *
- * @param size font size
- *
- * @param textWeight font weight
- *
- * @param textStyle  The type of WXTextStyle (Normal or Italic).
- *
- * @param fontFamily font family
- *
- * @param scaleFactor please use instance's scale factor
- *
- * @return A font object according to the above params.
- *
- */
-+ (UIFont *_Nonnull)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *_Nullable)fontFamily scaleFactor:(CGFloat)scaleFactor;
-
-+ (UIFont *_Nonnull)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *_Nullable)fontFamily scaleFactor:(CGFloat)scaleFactor useCoreText:(BOOL)useCoreText;
-
-/**
- * @abstract download remote font from specified url
- * @param fontURL for remote font
- *
- */
-+ (void)getIconfont:(NSURL * _Nonnull)fontURL completion:( void(^ _Nullable )(NSURL * _Nonnull url, NSError * _Nullable error)) completionBlock;
-
-/**
- * @abstract Returns the main screen's size when the device is in portrait mode,.
- */
-+ (CGSize)portraitScreenSize;
-
-/**
- * @abstract Returns the default pixel scale factor
- * @discussion If orientation is equal to landscape, the value is caculated as follows: WXScreenSize().height / WXDefaultScreenWidth, otherwise, WXScreenSize().width / WXDefaultScreenWidth.
- */
-+ (CGFloat)defaultPixelScaleFactor;
-
-#if defined __cplusplus
-extern "C" {
-#endif
-/**
- * @abstract Returns the scale of the main screen.
- *
- */
-CGFloat WXScreenScale(void);
-
-/**
- * @abstract Returns a Round float coordinates to the main screen pixel.
- *
- */
-CGFloat WXRoundPixelValue(CGFloat value);
-
-/**
- * @abstract Returns a Floor float coordinates to the main screen pixel.
- *
- */
-CGFloat WXFloorPixelValue(CGFloat value);
-
-/**
- * @abstract Returns a Ceil float coordinates to the main screen pixel.
- *
- */
-CGFloat WXCeilPixelValue(CGFloat value);
-    
-#if defined __cplusplus
-};
-#endif
-    
-/**
- *  @abstract check whether the file is exist
- *
- */
-
-+ (BOOL)isFileExist:(NSString * _Nonnull)filePath;
-/**
- *  @abstract Returns the document directory path.
- *
- */
-+ (NSString *_Nonnull)documentDirectory;
-
-#define WXDocumentPath     [WXUtility documentDirectory]
-
-/**
- *  @abstract Returns the system cache directory path.
- *
- */
-+ (NSString *_Nonnull)cacheDirectory;
-
-#define WXCachePath     [WXUtility cacheDirectory]
-
-/**
- *  @abstract Returns the system library directory path.
- *
- */
-+ (NSString *_Nonnull)libraryDirectory;
-
-#define WXLibraryPath  [WXUtility libraryDirectory]
-
-/**
- *  @abstract Returns the global cache whose size is 5M.
- *
- */
-+ (NSCache *_Nonnull)globalCache;
-
-#define WXGlobalCache   [WXUtility globalCache]
-
-+ (NSURL *_Nonnull)urlByDeletingParameters:(NSURL *_Nonnull)url;
-
-/**
- *  @abstract Returns the contents of file.
- *
- */
-+ (NSString *_Nullable)stringWithContentsOfFile:(NSString *_Nonnull)filePath;
-
-/**
- *  @abstract Returns md5 string.
- *
- */
-+ (NSString *_Nullable)md5:(NSString *_Nullable)string;
-
-/**
- *  @abstract Returns Creates a Universally Unique Identifier (UUID) string.
- *
- */
-+ (NSString *_Nullable)uuidString;
-
-/**
- *  @abstract convert date string with formatter yyyy-MM-dd to date.
- *
- */
-+ (NSDate *_Nullable)dateStringToDate:(NSString *_Nullable)dateString;
-
-/**
- *  @abstract convert time string with formatter HH:mm to date.
- *
- */
-+ (NSDate *_Nullable)timeStringToDate:(NSString *_Nullable)timeString;
-
-/**
- *  @abstract convert date to date string with formatter yyyy-MM-dd .
- *
- */
-+ (NSString *_Nullable)dateToString:(NSDate *_Nullable)date;
-
-/**
- *  @abstract convert date to time string with formatter HH:mm .
- *
- */
-+ (NSString *_Nullable)timeToString:(NSDate *_Nullable)date;
-
-/**
- *  @abstract get the repeat substring number of string.
- *
- */
-+ (NSUInteger)getSubStringNumber:(NSString *_Nullable)string subString:(NSString *_Nullable)subString;
-
-/**
- *  @abstract Returns a resized pixel which is calculated according to the WXScreenResizeRadio.
- *
- */
-CGFloat WXPixelScale(CGFloat value, CGFloat scaleFactor);
-
-CGFloat WXScreenResizeRadio(void) DEPRECATED_MSG_ATTRIBUTE("Use [WXUtility defaultPixelScaleFactor] instead");
-CGFloat WXPixelResize(CGFloat value) DEPRECATED_MSG_ATTRIBUTE("Use WXPixelScale Instead");
-CGRect WXPixelFrameResize(CGRect value) DEPRECATED_MSG_ATTRIBUTE("Use WXPixelScale Instead");
-CGPoint WXPixelPointResize(CGPoint value) DEPRECATED_MSG_ATTRIBUTE("Use WXPixelScale Instead");
-+ (UIFont  * _Nullable )fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString * _Nullable)fontFamily DEPRECATED_MSG_ATTRIBUTE("Use +[WXUtility fontWithSize:textWeight:textStyle:fontFamily:scaleFactor:]");
-
-
-/**
- @discusstion construct a gradientLayer from the colors locations, gradientType
- @param colors The array of UIColor objects defining the color of each gradient
- stop. Defaults to nil
- @param locations An optional array of NSNumber objects defining the location of each
-  gradient stop as a value in the range [0,1].
- @param frame the layer frame
- @param gradientType WXGradientType value specify the gradient location
- @return gradient layer
- */
-+ (CAGradientLayer *_Nullable)gradientLayerFromColors:(NSArray*_Nullable)colors
-                                           locations:(NSArray*_Nullable)locations
-                                               frame:(CGRect)frame
-                                        gradientType:(WXGradientType)gradientType;
-
-/**
- @discusstion parse gradient-color string to a dictionary, then you can get gradientLayer from @see gradientLayerFromColors:colors:locations:frame:locations
- @param backgroundImage  linear-gradient string like linear-gradient(to right, #a80077,rgba(200, 54, 54, 0.5))
- @return dictionary with endColor, startColor and gradientType value
- @code
-    NSDictionary * linearGradient = [self linearGradientWithBackgroundImage:@"linear-gradient(to right, #a80077,rgba(200, 54, 54, 0.5))"];
-    CAGradientLayer * gradientLayer = [self gradientLayerFromColors:@[linearGradient[@"startColor"], linearGradient[@"endColor"]],nil,bounds,[linearGradient[@"gradientType"] integerValue]];
- @endcode
- */
-+ (NSDictionary *_Nullable)linearGradientWithBackgroundImage:(NSString *_Nullable)backgroundImage;
-
-#if defined __cplusplus
-extern "C" {
-#endif
-    
-/**
- *  @abstract compare float a and b, if a equal b, return true,or reture false.
- *
- */
-BOOL WXFloatEqual(CGFloat a, CGFloat b);
-/**
- *  @abstract compare float a and b, user give the compare precision, if a equal b, return true,or reture false.
- *
- */
-BOOL WXFloatEqualWithPrecision(CGFloat a, CGFloat b ,double precision);
-/**
- *  @abstract compare float a and b, if a less than b, return true,or reture false.
- *
- */
-BOOL WXFloatLessThan(CGFloat a, CGFloat b);
-/**
- *  @abstract compare float a and b,user give the compare precision, if a less than b,return true,or reture false.
- *
- */
-BOOL WXFloatLessThanWithPrecision(CGFloat a, CGFloat b,double precision);
-/**
- *  @abstract compare float a and b, if a great than b, return true,or reture false.
- *
- */
-BOOL WXFloatGreaterThan(CGFloat a, CGFloat b);
-/**
- *  @abstract compare float a and b, user give the compare precision,if a great than b, return true,or reture false.
- *
- */
-BOOL WXFloatGreaterThanWithPrecision(CGFloat a,CGFloat b,double precision);
-
-#if defined __cplusplus
-};
-#endif
-
-/**
- *  @abstract convert returnKeyType to type string .
- *
- */
-+ (NSString *_Nullable)returnKeyType:(UIReturnKeyType)type;
-
-/**
- *  @abstract custorm monitor info
- *
- */
-+ (void)customMonitorInfo:(WXSDKInstance *_Nullable)instance key:(NSString * _Nonnull)key value:(id _Nonnull)value;
-
-/**
- *  @abstract format to base64 dictionary
- *
- */
-+ (NSDictionary *_Nonnull)dataToBase64Dict:(NSData *_Nullable)data;
-
-/**
- *  @abstract format to data
- *
- */
-+ (NSData *_Nonnull)base64DictToData:(NSDictionary *_Nullable)base64Dict;
-
-+ (void)setEnableRTLLayoutDirection:(BOOL)value;
-
-+ (BOOL)enableRTLLayoutDirection;
-
-+ (long) getUnixFixTimeMillis;
-
-+ (NSArray<NSString *> *_Nullable)extractPropertyNamesOfJSValueObject:(JSValue *_Nullable)jsvalue;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m
deleted file mode 100644
index 28119f0..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m
+++ /dev/null
@@ -1,1110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXUtility.h"
-#import "WXLog.h"
-#import "WXSDKEngine.h"
-#import "WXAppConfiguration.h"
-#import "WXThreadSafeMutableDictionary.h"
-#import "WXRuleManager.h"
-#import "WXSDKEngine.h"
-#import "WXConvert.h"
-#import "WXResourceRequest.h"
-#import "WXResourceLoader.h"
-#import <objc/runtime.h>
-#import <objc/message.h>
-#import <sys/utsname.h>
-#import <UIKit/UIScreen.h>
-#import <Security/Security.h>
-#import <CommonCrypto/CommonCrypto.h>
-#import <CoreText/CoreText.h>
-#import "WXAppMonitorProtocol.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXTextComponent.h"
-#import "WXAssert.h"
-
-#define KEY_PASSWORD  @"com.taobao.Weex.123456"
-#define KEY_USERNAME_PASSWORD  @"com.taobao.Weex.weex123456"
-
-static BOOL enableRTLLayoutDirection = YES;
-
-void WXPerformBlockOnMainThread(void (^ _Nonnull block)(void))
-{
-    if (!block) return;
-    
-    if ([NSThread isMainThread]) {
-        block();
-    } else {
-        dispatch_async(dispatch_get_main_queue(), ^{
-            block();
-        });
-    }
-}
-
-void WXPerformBlockSyncOnMainThread(void (^ _Nonnull block)(void))
-{
-    if (!block) return;
-    
-    if ([NSThread isMainThread]) {
-        block();
-    } else {
-        dispatch_sync(dispatch_get_main_queue(), ^{
-            block();
-        });
-    }
-}
-
-void WXPerformBlockOnThread(void (^ _Nonnull block)(void), NSThread *thread)
-{
-    [WXUtility performBlock:block onThread:thread];
-}
-
-void WXSwizzleInstanceMethod(Class className, SEL original, SEL replaced)
-{
-    Method originalMethod = class_getInstanceMethod(className, original);
-    Method newMethod = class_getInstanceMethod(className, replaced);
-    
-    BOOL didAddMethod = class_addMethod(className, original, method_getImplementation(newMethod), method_getTypeEncoding(newMethod));
-    if (didAddMethod) {
-        class_replaceMethod(className, replaced, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
-    } else {
-        method_exchangeImplementations(originalMethod, newMethod);
-    }
-}
-
-void WXSwizzleInstanceMethodWithBlock(Class class, SEL original, id block, SEL replaced)
-{
-    Method originalMethod = class_getInstanceMethod(class, original);
-    IMP implementation = imp_implementationWithBlock(block);
-    
-    class_addMethod(class, replaced, implementation, method_getTypeEncoding(originalMethod));
-    Method newMethod = class_getInstanceMethod(class, replaced);
-    method_exchangeImplementations(originalMethod, newMethod);
-}
-
-SEL WXSwizzledSelectorForSelector(SEL selector)
-{
-    return NSSelectorFromString([NSString stringWithFormat:@"wx_swizzle_%x_%@", arc4random(), NSStringFromSelector(selector)]);
-}
-
-CGFloat WXScreenScale(void)
-{
-    static CGFloat _scale;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        _scale = [UIScreen mainScreen].scale;
-    });
-    return _scale;
-}
-
-CGFloat WXPixelScale(CGFloat value, CGFloat scaleFactor)
-{
-    return WXCeilPixelValue(value * scaleFactor);
-}
-
-CGFloat WXRoundPixelValue(CGFloat value)
-{
-    CGFloat scale = WXScreenScale();
-    return round(value * scale) / scale;
-}
-
-CGFloat WXCeilPixelValue(CGFloat value)
-{
-    CGFloat scale = WXScreenScale();
-    return ceil(value * scale) / scale;
-}
-
-CGFloat WXFloorPixelValue(CGFloat value)
-{
-    CGFloat scale = WXScreenScale();
-    return floor(value * scale) / scale;
-}
-
-@implementation WXUtility
-
-+ (void)performBlock:(void (^)(void))block onThread:(NSThread *)thread
-{
-    if (!thread || !block) return;
-    
-    if ([NSThread currentThread] == thread) {
-        block();
-    } else {
-        [self performSelector:@selector(_performBlock:)
-                     onThread:thread
-                   withObject:[block copy]
-                waitUntilDone:NO];
-    }
-}
-
-+ (void)_performBlock:(void (^)(void))block
-{
-    block();
-}
-
-+ (WXLayoutDirection)getEnvLayoutDirection {
-    // We not use the below technique, because your app maybe not support the first preferredLanguages
-    // _sysLayoutDirection = [NSLocale characterDirectionForLanguage:[[NSLocale preferredLanguages] objectAtIndex:0]] == NSLocaleLanguageDirectionRightToLeft ? WXLayoutDirectionRTL : WXLayoutDirectionLTR;
-    return [UIView userInterfaceLayoutDirectionForSemanticContentAttribute:UISemanticContentAttributeUnspecified] == UIUserInterfaceLayoutDirectionRightToLeft ? WXLayoutDirectionRTL : WXLayoutDirectionLTR;
-}
-
-+ (NSDictionary *)getEnvironment
-{
-    NSString *platform = @"iOS";
-    NSString *sysVersion = [[UIDevice currentDevice] systemVersion] ?: @"";
-    NSString *weexVersion = WX_SDK_VERSION;
-    NSString *machine = [self deviceName] ? : @"";
-    NSString *appVersion = [WXAppConfiguration appVersion] ? : @"";
-    NSString *appName = [WXAppConfiguration appName] ? : @"";
-    
-    CGFloat deviceWidth = [self portraitScreenSize].width;
-    CGFloat deviceHeight = [self portraitScreenSize].height;
-    CGFloat scale = [[UIScreen mainScreen] scale];
-    
-    NSMutableDictionary *data = [NSMutableDictionary dictionaryWithDictionary:@{
-                                    @"platform":platform,
-                                    @"osName":platform, //osName is eaqual to platorm name in native
-                                    @"osVersion":sysVersion,
-                                    @"weexVersion":weexVersion,
-                                    @"deviceModel":machine,
-                                    @"appName":appName,
-                                    @"appVersion":appVersion,
-                                    @"deviceWidth":@(deviceWidth * scale),
-                                    @"deviceHeight":@(deviceHeight * scale),
-                                    @"scale":@(scale),
-                                    @"layoutDirection": [self getEnvLayoutDirection] == WXLayoutDirectionRTL ? @"rtl" : @"ltr"
-                                }];
-    
-    if ([[[UIDevice currentDevice] systemVersion] integerValue] >= 11) {
-        id configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
-        if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
-            // update
-            BOOL isDefault = YES;
-            BOOL jsfmEnableNativePromiseOnIOS11AndLater = [[configCenter configForKey:@"iOS_weex_ext_config.jsfmEnableNativePromiseOnIOS11AndLater" defaultValue:@(NO) isDefault:&isDefault] boolValue];
-            if (!isDefault) {
-                // has this config explicitly
-                data[@"__enable_native_promise__"] = @(jsfmEnableNativePromiseOnIOS11AndLater);
-            }
-        }
-    }
-    
-    NSDictionary* customEnvironment = [WXSDKEngine customEnvironment];
-    if (customEnvironment) {
-        [data addEntriesFromDictionary:customEnvironment];
-    }
-    
-    return data;
-}
-
-+ (NSDictionary *)getDebugEnvironment {
-    NSString *platform = @"iOS";
-    NSString *weexVersion = [WXSDKEngine SDKEngineVersion];
-    NSString *machine = [self registeredDeviceName] ? : @"";
-    NSString *appName = [WXAppConfiguration appName] ? : @"";
-    NSString *deviceID = [self getDeviceID];
-    NSMutableDictionary *data = [NSMutableDictionary dictionaryWithDictionary:@{
-                                                            @"platform":platform,
-                                                            @"weexVersion":weexVersion,
-                                                            @"model":machine,
-                                                            @"name":appName,
-                                                            @"deviceId":deviceID,
-                                                        }];
-    return data;
-}
-
-+ (NSString *)userAgent
-{
-    // Device UA
-    NSString *deviceUA = [NSString stringWithFormat:@"%@(iOS/%@)", [self deviceName]?:@"UNKNOWN", [[UIDevice currentDevice] systemVersion]]?:@"0.0.0";
-    
-    // App UA
-    NSString *appUA = [NSString stringWithFormat:@"%@(%@/%@)", [WXAppConfiguration appGroup]?:@"WeexGroup", [WXAppConfiguration appName]?:@"WeexApp", [WXAppConfiguration appVersion]?:@"0.0.0"];
-
-    // Weex UA
-    NSString *weexUA = [NSString stringWithFormat:@"Weex/%@", WX_SDK_VERSION];
-    
-    // external UA
-    NSString *externalUA = [WXAppConfiguration externalUserAgent] ? [NSString stringWithFormat:@" %@", [WXAppConfiguration externalUserAgent]] : @"";
-    
-    // Screen Size
-    CGFloat w = [[UIScreen mainScreen] bounds].size.width;
-    CGFloat h = [[UIScreen mainScreen] bounds].size.height;
-    CGFloat s = [[UIScreen mainScreen] scale];
-    NSString * screenUA = [NSString stringWithFormat:@"%dx%d", (int)(s * w), (int)(s * h)];
-    
-    // New UA
-    return [NSString stringWithFormat:@"%@ %@ %@%@ %@", deviceUA, appUA, weexUA, externalUA, screenUA];
-}
-
-+ (id)objectFromJSON:(NSString *)json
-{
-    // in weex there are cases that json is empty container
-    if ([json isEqualToString:@"{}"]) return @{}.mutableCopy;
-    if ([json isEqualToString:@"[]"]) return @[].mutableCopy;
-    return [self JSONObject:[json dataUsingEncoding:NSUTF8StringEncoding] error:nil];
-}
-
-+ (id)JSONObject:(NSData*)data error:(NSError **)error
-{
-    if (!data) return nil;
-    id jsonObj = nil;
-    @try {
-        jsonObj = [NSJSONSerialization JSONObjectWithData:data
-                                                  options:NSJSONReadingAllowFragments | NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves
-                                                    error:error];
-    } @catch (NSException *exception) {
-        if (error) {
-            *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:-1 userInfo:@{NSLocalizedDescriptionKey: [exception description]}];
-        }
-    }
-    return jsonObj;
-}
-
-+ (NSString *)JSONString:(id)object
-{
-    if(!object) return nil;
-    
-    @try {
-    
-        NSError *error = nil;
-        if ([object isKindOfClass:[NSArray class]] || [object isKindOfClass:[NSDictionary class]]) {
-            NSData *data = [NSJSONSerialization dataWithJSONObject:object
-                                                           options:NSJSONWritingPrettyPrinted
-                                                             error:&error];
-            if (error) {
-                WXLogError(@"%@", [error description]);
-                return nil;
-            }
-            
-            return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-        
-        } else if ([object isKindOfClass:[NSString class]]) {
-            NSArray *array = @[object];
-            NSData *data = [NSJSONSerialization dataWithJSONObject:array
-                                                           options:NSJSONWritingPrettyPrinted
-                                                             error:&error];
-            if (error) {
-                WXLogError(@"%@", [error description]);
-                return nil;
-            }
-            
-            NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-            if (string.length <= 4) {
-                WXLogError(@"json convert length less than 4 chars.");
-                return nil;
-            }
-            
-            return [string substringWithRange:NSMakeRange(2, string.length - 4)];
-        } else {
-            WXLogError(@"object isn't avaliable class");
-            return nil;
-        }
-        
-    } @catch (NSException *exception) {
-        return nil;
-    }
-}
-
-+ (id)copyJSONObject:(id)object
-{
-    if ([object isKindOfClass:[NSArray class]]) {
-        NSArray *array = (NSArray *)object;
-        NSMutableArray *copyObjs = [NSMutableArray array];
-        
-        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-            id copyObj = [self copyJSONObject:obj];
-            [copyObjs insertObject:copyObj atIndex:idx];
-        }];
-        
-        return copyObjs;
-    } else if ([object isKindOfClass:[NSDictionary class]]) {
-        NSDictionary *dict = (NSDictionary *)object;
-        NSMutableDictionary *copyObjs = [NSMutableDictionary dictionary];
-        
-        [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
-            id copyObj = [self copyJSONObject:obj];
-            [copyObjs setObject:copyObj forKey:key];
-        }];
-        
-        return copyObjs;
-    } else {
-        return [object copy];
-    }
-}
-
-+ (BOOL)isBlankString:(NSString *)string {
-    
-    if (string == nil || string == NULL || [string isKindOfClass:[NSNull class]]) {
-        return true;
-    }
-    if (![string isKindOfClass:[NSString class]]) {
-        WXLogError(@"%@ is not a string", string);
-        return true;
-    }
-    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
-        return true;
-    }
-    
-    return false;
-}
-
-+ (BOOL)isValidPoint:(CGPoint)point
-{
-    return !(isnan(point.x)) && !(isnan(point.y));
-}
-
-+ (NSError *)errorWithCode:(NSInteger)code message:(NSString *)message
-{
-    message = message ? : @"";
-    return [NSError errorWithDomain:@"WeexErrorDomain" code:code userInfo:@{@"errMsg":message}];
-}
-
-+ (NSDictionary *)linearGradientWithBackgroundImage:(NSString *)backgroundImage
-{
-    NSMutableDictionary * linearGradient = nil;
-    if ([backgroundImage hasPrefix:@"linear-gradient"] && [backgroundImage hasSuffix:@")"] ) {
-        backgroundImage = [backgroundImage stringByReplacingOccurrencesOfString:@" " withString:@""];
-        NSRange range = NSMakeRange(16, backgroundImage.length - 17);
-        NSString *str = [backgroundImage substringWithRange:range];
-        NSArray *array = [str componentsSeparatedByString:@","];
-        WXGradientType gradientType = WXGradientTypeToTop;
-        UIColor *startColor, *endColor;
-        if ([array count] < 3) {
-            return linearGradient;
-        }
-        if ([array count] == 3) {
-            gradientType = [WXConvert gradientType:array[0]];
-            startColor = [WXConvert UIColor:array[1]];
-            endColor = [WXConvert UIColor:array[2]];
-        } else if ([array count] > 3) {
-            NSString *gradientTypeStr = array[0];
-            NSString *subStr = [str substringFromIndex:gradientTypeStr.length + 1];
-            if ([subStr hasPrefix:@"rgb"]) {
-                gradientType = [WXConvert gradientType:gradientTypeStr];
-                
-                if ([subStr containsString:@"%"]) {
-                    range = [subStr rangeOfString:@"%"];
-                } else {
-                    range = [subStr rangeOfString:@")"];
-                }
-                NSString *startColorStr = [subStr substringToIndex:range.location + 1];
-                NSString *endColorStr = [subStr substringFromIndex:range.location + 2];
-                startColor = [WXConvert UIColor:startColorStr];
-                endColor = [WXConvert UIColor:endColorStr];
-            }
-            else {
-                gradientType = [WXConvert gradientType:gradientTypeStr];
-                
-                startColor = [WXConvert UIColor:array[1]];
-                
-                NSString *startColorStr = array[1];
-                NSString *endColorStr = [subStr substringFromIndex:startColorStr.length + 1];
-                endColor = [WXConvert UIColor:endColorStr];
-            }
-        }
-        
-        if (endColor || startColor) {
-            linearGradient = [NSMutableDictionary new];
-            [linearGradient setValue:startColor forKey:@"startColor"];
-            [linearGradient setValue:endColor forKey:@"endColor"];
-            [linearGradient setValue:@(gradientType) forKey:@"gradientType"];
-        }
-    }
-    return linearGradient;
-}
-
-+ (CAGradientLayer *)gradientLayerFromColors:(NSArray*)colors locations:(NSArray*)locations frame:(CGRect)frame gradientType:(WXGradientType)gradientType
-{
-    CAGradientLayer * gradientLayer = [CAGradientLayer layer];
-    NSMutableArray *newColors = [NSMutableArray new];
-    for(UIColor *color in colors) {
-        [newColors addObject:(id)color.CGColor];
-    }
-    if (colors) {
-        gradientLayer.colors = newColors;
-    }
-    if (locations) {
-        gradientLayer.locations = locations;
-    }
-    CGPoint start = CGPointZero;
-    CGPoint end = CGPointZero;
-    switch (gradientType) {
-        case WXGradientTypeToTop:
-            start = CGPointMake(0.0, 1.0);
-            end = CGPointMake(0.0, 0.0);
-            break;
-        case WXGradientTypeToBottom:
-            start = CGPointMake(0.0, 0.0);
-            end = CGPointMake(0.0, 1.0);
-            break;
-        case WXGradientTypeToLeft:
-            start = CGPointMake(1.0, 0.0);
-            end = CGPointMake(0.0, 0.0);
-            break;
-        case WXGradientTypeToRight:
-            start = CGPointMake(0.0, 0.0);
-            end = CGPointMake(1.0, 0.0);
-            break;
-        case WXGradientTypeToTopleft:
-            start = CGPointMake(1.0, 1.0);
-            end = CGPointMake(0.0, 0.0f);
-            break;
-        case WXGradientTypeToBottomright:
-            start = CGPointMake(0.0, 0.0);
-            end = CGPointMake(1.0, 1.0);
-            break;
-        default:
-            break;
-    }
-    
-    gradientLayer.startPoint = start;
-    gradientLayer.endPoint = end;
-    gradientLayer.frame = frame;
-    
-    return gradientLayer;
-}
-
-+ (UIFont *)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *)fontFamily
-{
-    return [self fontWithSize:size textWeight:textWeight textStyle:textStyle fontFamily:fontFamily scaleFactor:[self defaultPixelScaleFactor]];
-}
-
-+ (UIFont *)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *)fontFamily scaleFactor:(CGFloat)scaleFactor useCoreText:(BOOL)useCoreText
-{
-    static NSMutableDictionary* RegisteredFontFileNames;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        RegisteredFontFileNames = [[NSMutableDictionary alloc] init];
-    });
-    
-    CGFloat fontSize = (isnan(size) || size == 0) ?  32 * scaleFactor : size;
-    UIFont *font = nil;
-    
-    WXThreadSafeMutableDictionary *fontFace = [[WXRuleManager sharedInstance] getRule:@"fontFace"];
-    WXThreadSafeMutableDictionary *fontFamilyDic = fontFace[fontFamily];
-    if (fontFamilyDic[@"localSrc"]){
-        NSString *fpath = [((NSURL*)fontFamilyDic[@"localSrc"]) path];
-        if ([self isFileExist:fpath]) {
-            // if the font file is not the correct font file. it will crash by singal 9
-            CFURLRef fontURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (__bridge CFStringRef)fpath, kCFURLPOSIXPathStyle, false);
-            if (fontURL) {
-                if (useCoreText) {
-                    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL(fontURL);
-                    if (fontDataProvider) {
-                        CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
-                        if (newFont) {
-                            fontFamily = (__bridge_transfer NSString*)CGFontCopyPostScriptName(newFont);
-                            CFErrorRef error = NULL;
-                            CTFontManagerRegisterGraphicsFont(newFont, &error);
-                            
-                            if (error == NULL) {
-                                // record which file is registered to this family name
-                                @synchronized (RegisteredFontFileNames) {
-                                    RegisteredFontFileNames[fontFamily] = fpath;
-                                }
-                            }
-                            
-                            if ([fontFamily isEqualToString:@"iconfont"]) {
-                                WXLogError(@"Using iconfont with family name 'iconfont' is prohibited.");
-                                if (error) {
-                                    WXLogError(@"Unable to register font, %@.", fontFamilyDic);
-                                    CFRelease(error);
-                                }
-                            }
-                            else {
-                                // Check if we have already registered another font file with the same family-name
-                                if (error) {
-                                    @synchronized (RegisteredFontFileNames) {
-                                        NSString* previousFilePath = RegisteredFontFileNames[fontFamily];
-                                        if (![previousFilePath isEqualToString:fpath]) {
-                                            // file path changed means a new iconfont file is registered with the same name, we use it
-                                            WXLogError(@"Unable to register font, but will unregister previous one and retry with new font file, %@.", fontFamilyDic);
-                                            CTFontManagerUnregisterGraphicsFont(newFont, NULL);
-                                            CFErrorRef error2 = NULL;
-                                            CTFontManagerRegisterGraphicsFont(newFont, &error2);
-                                            if (error2) {
-                                                WXLogError(@"We cannot register the font finally. %@", error2);
-                                                CFRelease(error2);
-                                            }
-                                            else {
-                                                RegisteredFontFileNames[fontFamily] = fpath;
-                                            }
-                                        }
-                                    }
-                                    CFRelease(error);
-                                }
-                            }
-                            
-                            CGFontRelease(newFont);
-                            CFRelease(fontURL);
-                            CFRelease(fontDataProvider);
-                        }
-                    }
-                } else {
-                    CTFontManagerRegisterFontsForURL(fontURL, kCTFontManagerScopeProcess, NULL);
-                    NSArray *descriptors = (__bridge_transfer NSArray *)CTFontManagerCreateFontDescriptorsFromURL(fontURL);
-                    // length of descriptors here will be only one.
-                    for (UIFontDescriptor *desc in descriptors) {
-                        font = [UIFont fontWithDescriptor:desc size:fontSize];
-                    }
-                    CFRelease(fontURL);
-                }
-            }
-        }else {
-            [[WXRuleManager sharedInstance] removeRule:@"fontFace" rule:@{@"fontFamily": fontFamily}];
-        }
-    }
-    if (!font) {
-        if (fontFamily) {
-            font = [UIFont fontWithName:fontFamily size:fontSize];
-        }
-        if (!font) {
-            if (fontFamily) {
-                WXLogWarning(@"Unknown fontFamily:%@", fontFamily);
-            }
-            font = [UIFont systemFontOfSize:fontSize weight:textWeight];
-        }
-    }
-    UIFontDescriptor *fontD = font.fontDescriptor;
-    UIFontDescriptorSymbolicTraits traits = 0;
-    
-    traits = (textStyle == WXTextStyleItalic) ? (traits | UIFontDescriptorTraitItalic) : traits;
-    traits = (textWeight-UIFontWeightBold >= 0.0) ? (traits | UIFontDescriptorTraitBold) : traits;
-    if (traits != 0) {
-        fontD = [fontD fontDescriptorWithSymbolicTraits:traits];
-        UIFont *tempFont = [UIFont fontWithDescriptor:fontD size:0];
-        if (tempFont) {
-            font = tempFont;
-        }
-    }
-    
-    return font;
-}
-
-+ (UIFont *)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *)fontFamily scaleFactor:(CGFloat)scaleFactor
-{
-    return [self fontWithSize:size textWeight:textWeight textStyle:textStyle fontFamily:fontFamily scaleFactor:scaleFactor useCoreText:NO];
-}
-
-+ (void)getIconfont:(NSURL *)url completion:(void(^)(NSURL *url, NSError *error))completionBlock
-{
-    if ([url isFileURL]) {
-        // local file url
-        NSError * error = nil;
-        if (![WXUtility isFileExist:url.path]) {
-            error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:-1 userInfo:@{@"errMsg":[NSString stringWithFormat:@"local font %@ is't exist", url.absoluteString]}];
-        }
-        completionBlock(url, error);
-        return;
-    }
-    
-    WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeFont referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy];
-    
-    request.userAgent = [self userAgent];
-    WXResourceLoader *iconfontLoader = [[WXResourceLoader alloc] initWithRequest:request];
-    iconfontLoader.onFinished = ^(const WXResourceResponse * response, NSData * data) {
-        NSURL * downloadPath = nil;
-        NSError * error = nil;
-        NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse*)response;
-        if (200 == httpResponse.statusCode) {
-            NSString *file = [NSString stringWithFormat:@"%@/%@",WX_FONT_DOWNLOAD_DIR,[WXUtility md5:[url absoluteString]]];
-            downloadPath = [NSURL fileURLWithPath:file];
-            NSFileManager *mgr = [NSFileManager defaultManager];
-            
-            if (![mgr fileExistsAtPath:[file stringByDeletingLastPathComponent]]) {
-                // create font cache directory and its parent if not exist
-                [mgr createDirectoryAtPath:[file stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:&error];
-            }
-            
-            BOOL result = [data writeToFile:downloadPath.path atomically:NO];
-            if (!result) {
-                downloadPath = nil;
-            }
-        } else {
-            if (200 != httpResponse.statusCode) {
-                error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:-1 userInfo:@{@"ErrorMsg": [NSString stringWithFormat:@"can not load the font url %@ ", url.absoluteString]}];
-            }
-        }
-        completionBlock(downloadPath, error);
-
-    };
-    
-    iconfontLoader.onFailed = ^(NSError* error) {
-        completionBlock(nil, error);
-    };
-    
-    [iconfontLoader start];
-}
-
-+ (BOOL)isFileExist:(NSString *)filePath
-{
-    return [[NSFileManager defaultManager] fileExistsAtPath:filePath];
-}
-
-+ (NSString *)documentDirectory
-{
-    static NSString *docPath = nil;
-    if (!docPath){
-        docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
-    }
-    return docPath;
-}
-
-+ (NSString *)cacheDirectory
-{
-    static NSString *cachePath = nil;
-    if (!cachePath) {
-        cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
-    }
-    return cachePath;
-}
-
-+ (NSString *)libraryDirectory
-{
-    static NSString *libPath = nil;
-    if (!libPath) {
-        libPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
-    }
-    return libPath;
-}
-
-+ (NSCache *)globalCache
-{
-    static NSCache *cache;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        cache = [NSCache new];
-        cache.totalCostLimit = 5 * 1024 * 1024;
-        
-        [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:nil usingBlock:^(__unused NSNotification *note) {
-            [cache removeAllObjects];
-        }];
-    });
-    return cache;
-}
-
-+ (NSString *)deviceName
-{
-    struct utsname systemInfo;
-    uname(&systemInfo);
-    NSString *machine = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
-    return machine;
-}
-
-+ (NSString *)registeredDeviceName
-{
-    NSString *machine = [[UIDevice currentDevice] model];
-    NSString *systemVer = [[UIDevice currentDevice] systemVersion] ? : @"";
-    NSString *model = [NSString stringWithFormat:@"%@:%@",machine,systemVer];
-    return model;
-}
-
-+ (CGSize)portraitScreenSize
-{
-    if ([[UIDevice currentDevice].model isEqualToString:@"iPad"]) {
-        return [UIScreen mainScreen].bounds.size;
-    }
-    static CGSize portraitScreenSize;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        CGSize screenSize = [UIScreen mainScreen].bounds.size;
-        portraitScreenSize = CGSizeMake(MIN(screenSize.width, screenSize.height),
-                                        MAX(screenSize.width, screenSize.height));
-    });
-    
-    return portraitScreenSize;
-}
-
-+ (CGFloat)defaultPixelScaleFactor
-{
-    if ([[UIDevice currentDevice].model isEqualToString:@"iPad"]) {
-        return [self portraitScreenSize].width / WXDefaultScreenWidth;
-    }
-    static CGFloat defaultScaleFactor;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        defaultScaleFactor = [self portraitScreenSize].width / WXDefaultScreenWidth;
-    });
-    
-    return defaultScaleFactor;
-}
-
-#pragma mark - RTL
-
-+ (void)setEnableRTLLayoutDirection:(BOOL)value
-{
-    enableRTLLayoutDirection = value;
-}
-
-+ (BOOL)enableRTLLayoutDirection
-{
-    return enableRTLLayoutDirection;
-}
-
-#pragma mark - get deviceID
-+ (NSString *)getDeviceID {
-    NSMutableDictionary *usernamepasswordKVPairs = (NSMutableDictionary *)[self load:KEY_USERNAME_PASSWORD];
-    NSString *deviceID = [usernamepasswordKVPairs objectForKey:KEY_PASSWORD];
-    if (!deviceID) {
-        CFUUIDRef uuid = CFUUIDCreate(NULL);
-        deviceID = CFBridgingRelease(CFUUIDCreateString(NULL, uuid));
-        assert(deviceID);
-        CFRelease(uuid);
-        NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionary];
-        [usernamepasswordKVPairs setObject:deviceID forKey:KEY_PASSWORD];
-        [self save:KEY_USERNAME_PASSWORD data:usernamepasswordKVPairs];
-    }
-    return deviceID;
-}
-
-+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service {
-    return [NSMutableDictionary dictionaryWithObjectsAndKeys:
-            (id)kSecClassGenericPassword,(id)kSecClass,
-            service, (id)kSecAttrService,
-            service, (id)kSecAttrAccount,
-            (id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible,
-            nil];
-}
-
-+ (void)save:(NSString *)service data:(id)data {
-    //Get search dictionary
-    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
-    //Delete old item before add new item
-    SecItemDelete((CFDictionaryRef)keychainQuery);
-    //Add new object to search dictionary(Attention:the data format)
-    [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData];
-    //Add item to keychain with the search dictionary
-    SecItemAdd((CFDictionaryRef)keychainQuery, NULL);
-}
-
-+ (id)load:(NSString *)service {
-    id ret = nil;
-    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
-    //Configure the search setting
-    //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue
-    [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData];
-    [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit];
-    CFDataRef keyData = NULL;
-    if (SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {
-        @try {
-            ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];
-        } @catch (NSException *e) {
-            NSLog(@"Unarchive of %@ failed: %@", service, e);
-        } @finally {
-        }
-    }
-    if (keyData)
-        CFRelease(keyData);
-    return ret;
-}
-
-+ (void)delete:(NSString *)service {
-    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
-    SecItemDelete((CFDictionaryRef)keychainQuery);
-}
-
-+ (NSURL *)urlByDeletingParameters:(NSURL *)url
-{
-    NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:YES];
-    components.query = nil;     // remove the query
-    components.fragment = nil;
-    return [components URL];
-}
-
-+ (NSString *)stringWithContentsOfFile:(NSString *)filePath
-{
-    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
-        NSString *contents = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
-        if (contents) {
-            return contents;
-        }
-    }
-    return nil;
-}
-
-+ (NSString *)md5:(NSString *)string
-{
-    const char *str = string.UTF8String;
-    if (str == NULL) {
-        return nil;
-    }
-    
-    unsigned char result[CC_MD5_DIGEST_LENGTH];
-    CC_MD5(str, (CC_LONG)strlen(str), result);
-    
-    return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-            result[0], result[1], result[2], result[3],
-            result[4], result[5], result[6], result[7],
-            result[8], result[9], result[10], result[11],
-            result[12], result[13], result[14], result[15]
-            ];
-}
-
-+ (NSString *)uuidString
-{
-    CFUUIDRef uuidRef = CFUUIDCreate(NULL);
-    CFStringRef uuidStringRef= CFUUIDCreateString(NULL, uuidRef);
-    NSString *uuid = [NSString stringWithString:(__bridge NSString *)uuidStringRef];
-    CFRelease(uuidRef);
-    CFRelease(uuidStringRef);
-    
-    return [uuid lowercaseString];
-}
-
-+ (NSDate *)dateStringToDate:(NSString *)dateString
-{
-    NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
-    [formatter setDateFormat:@"yyyy-MM-dd"];
-    NSDate *date=[formatter dateFromString:dateString];
-    return date;
-}
-
-+ (NSDate *)timeStringToDate:(NSString *)timeString
-{
-    NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
-    [formatter setDateFormat:@"HH:mm"];
-    NSDate *date=[formatter dateFromString:timeString];
-    return date;
-}
-
-+ (NSString *)dateToString:(NSDate *)date
-{
-    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
-    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
-    NSString *str = [dateFormatter stringFromDate:date];
-    return str;
-}
-
-+ (NSString *)timeToString:(NSDate *)date
-{
-    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
-    [dateFormatter setDateFormat:@"HH:mm"];
-    NSString *str = [dateFormatter stringFromDate:date];
-    return str;
-}
-
-+ (NSUInteger)getSubStringNumber:(NSString *_Nullable)string subString:(NSString *_Nullable)subString
-{
-    if([string length] ==0) {
-        return 0;
-    }
-    if([subString length] ==0) {
-        return 0;
-    }
-    NSError *error = NULL;
-    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:subString options:NSRegularExpressionCaseInsensitive error:&error];
-    NSUInteger numberOfMatches = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];
-    return numberOfMatches;
-    
-}
-
-BOOL WXFloatEqual(CGFloat a, CGFloat b) {
-    return WXFloatEqualWithPrecision(a, b,FLT_EPSILON);
-}
-BOOL WXFloatEqualWithPrecision(CGFloat a, CGFloat b ,double precision){
-    return fabs(a - b) <= precision;
-}
-BOOL WXFloatLessThan(CGFloat a, CGFloat b) {
-    return WXFloatLessThanWithPrecision(a, b, FLT_EPSILON);
-}
-BOOL WXFloatLessThanWithPrecision(CGFloat a, CGFloat b ,double precision){
-    return a-b < - precision;
-}
-
-BOOL WXFloatGreaterThan(CGFloat a, CGFloat b) {
-    return WXFloatGreaterThanWithPrecision(a, b, FLT_EPSILON);
-}
-BOOL WXFloatGreaterThanWithPrecision(CGFloat a, CGFloat b ,double precision){
-    return a-b > precision;
-}
-
-+ (NSString *_Nullable)returnKeyType:(UIReturnKeyType)type
-{
-    NSString *typeStr = @"default";
-    switch (type) {
-        case UIReturnKeyDefault:
-            typeStr = @"default";
-            break;
-        case UIReturnKeyGo:
-            typeStr = @"go";
-            break;
-        case UIReturnKeyNext:
-            typeStr = @"next";
-            break;
-        case UIReturnKeySearch:
-            typeStr = @"search";
-            break;
-        case UIReturnKeySend:
-            typeStr = @"send";
-            break;
-        case UIReturnKeyDone:
-            typeStr = @"done";
-            break;
-            
-        default:
-            break;
-    }
-    return typeStr;
-}
-
-+ (void)customMonitorInfo:(WXSDKInstance *_Nullable)instance key:(NSString * _Nonnull)key value:(id _Nonnull)value
-{
-    if([self isBlankString:key]||!value||!instance){
-        return ;
-    }
-    if(!instance.userInfo){
-        instance.userInfo = [NSMutableDictionary new];
-    }
-    NSMutableDictionary *custormMonitorDict = instance.userInfo[WXCUSTOMMONITORINFO];
-    if(!custormMonitorDict){
-        custormMonitorDict = [NSMutableDictionary new];
-    }
-    [custormMonitorDict setObject:value forKey:key];
-    instance.userInfo[WXCUSTOMMONITORINFO] = custormMonitorDict;
-}
-
-+ (NSDictionary *_Nonnull)dataToBase64Dict:(NSData *_Nullable)data
-{
-    NSMutableDictionary *dataDict = [NSMutableDictionary new];
-    if(data){
-        NSString *base64Encoded = [data base64EncodedStringWithOptions:0];
-        [dataDict setObject:@"binary" forKey:@"@type"];
-        [dataDict setObject:base64Encoded forKey:@"base64"];
-    }
-    
-    return dataDict;
-}
-
-+ (NSData *_Nonnull)base64DictToData:(NSDictionary *_Nullable)base64Dict
-{
-    if([@"binary" isEqualToString:base64Dict[@"@type"]]){
-        NSString *base64 = base64Dict[@"base64"];
-        NSData *sendData = [[NSData alloc] initWithBase64EncodedString:base64 options:0];
-        return sendData;
-    }
-    return nil;
-}
-
-+ (long) getUnixFixTimeMillis
-{
-    static long sInterval;
-    static dispatch_once_t unixTimeToken;
-    
-    dispatch_once(&unixTimeToken, ^{
-        sInterval = [[NSDate date] timeIntervalSince1970] * 1000 - CACurrentMediaTime()*1000;
-    });
-    return sInterval+CACurrentMediaTime()*1000;
-}
-
-+ (NSArray<NSString *> *)extractPropertyNamesOfJSValueObject:(JSValue *)jsvalue
-{
-    if (!jsvalue) {
-        return nil;
-    }
-    
-    NSMutableArray* allKeys = nil;
-    
-    JSContextRef contextRef = jsvalue.context.JSGlobalContextRef;
-    if (![jsvalue isObject]) {
-        WXAssert(NO, @"Invalid jsvalue for property enumeration.");
-        return nil;
-    }
-    JSValueRef jsException = NULL;
-    JSObjectRef instanceContextObjectRef = JSValueToObject(contextRef, jsvalue.JSValueRef, &jsException);
-    if (jsException != NULL) {
-        WXLogError(@"JSValueToObject Exception during create instance.");
-    }
-    BOOL somethingWrong = NO;
-    if (instanceContextObjectRef != NULL) {
-        JSPropertyNameArrayRef allKeyRefs = JSObjectCopyPropertyNames(contextRef, instanceContextObjectRef);
-        size_t keyCount = JSPropertyNameArrayGetCount(allKeyRefs);
-        
-        allKeys = [[NSMutableArray alloc] initWithCapacity:keyCount];
-        for (size_t i = 0; i < keyCount; i ++) {
-            JSStringRef nameRef = JSPropertyNameArrayGetNameAtIndex(allKeyRefs, i);
-            size_t len = JSStringGetMaximumUTF8CStringSize(nameRef);
-            if (len > 1024) {
-                somethingWrong = YES;
-                break;
-            }
-            char* buf = (char*)malloc(len + 5);
-            if (buf == NULL) {
-                somethingWrong = YES;
-                break;
-            }
-            bzero(buf, len + 5);
-            if (JSStringGetUTF8CString(nameRef, buf, len + 5) > 0) {
-                NSString* keyString = [NSString stringWithUTF8String:buf];
-                if ([keyString length] == 0) {
-                    somethingWrong = YES;
-                    free(buf);
-                    break;
-                }
-                [allKeys addObject:keyString];
-            }
-            else {
-                somethingWrong = YES;
-                free(buf);
-                break;
-            }
-            free(buf);
-        }
-        JSPropertyNameArrayRelease(allKeyRefs);
-    } else {
-        somethingWrong = YES;
-    }
-    
-    if (somethingWrong) {
-        // may contain retain-cycle.
-        allKeys = (NSMutableArray*)[[jsvalue toDictionary] allKeys];
-    }
-    
-    return allKeys;
-}
-
-@end
-
-
-//Deprecated
-CGFloat WXScreenResizeRadio(void)
-{
-    return [WXUtility defaultPixelScaleFactor];
-}
-
-CGFloat WXPixelResize(CGFloat value)
-{
-    return WXCeilPixelValue(value * WXScreenResizeRadio());
-}
-
-CGRect WXPixelFrameResize(CGRect value)
-{
-    CGRect new = CGRectMake(value.origin.x * WXScreenResizeRadio(),
-                            value.origin.y * WXScreenResizeRadio(),
-                            value.size.width * WXScreenResizeRadio(),
-                            value.size.height * WXScreenResizeRadio());
-    return new;
-}
-
-CGPoint WXPixelPointResize(CGPoint value)
-{
-    CGPoint new = CGPointMake(value.x * WXScreenResizeRadio(),
-                              value.y * WXScreenResizeRadio());
-    return new;
-}
-
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXVersion.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXVersion.h
deleted file mode 100644
index cb84a42..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXVersion.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXVersion.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXVersion.m
deleted file mode 100644
index 6739353..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXVersion.m
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one 
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
- */
-
-#import "WXVersion.h"
-#import "WXDefine.h"
-
-static const char* WeexSDKBuildTime = "2019-04-23 06:34:41 UTC";
-static const unsigned long WeexSDKBuildTimestamp = 1556001281;
-
-NSString* GetWeexSDKVersion(void)
-{
-    return WX_SDK_VERSION;
-}
-
-NSString* GetWeexSDKBuildTime(void)
-{
-    return [NSString stringWithUTF8String:WeexSDKBuildTime];
-}
-
-unsigned long GetWeexSDKBuildTimestamp(void)
-{
-    return WeexSDKBuildTimestamp;
-}
-
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h
deleted file mode 100644
index 1e9f587..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@interface WXWeakObjectWrapper : NSObject
-
-@property (nonatomic, weak, readonly) id weakObject;
-
-- (id)initWithWeakObject:(id)weakObject;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.m
deleted file mode 100644
index 4e90399..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.m
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXWeakObjectWrapper.h"
-
-@implementation WXWeakObjectWrapper
-
-- (id)initWithWeakObject:(id)weakObject
-{
-    if (self = [super init]) {
-        _weakObject = weakObject;
-    }
-    
-    return self;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h
deleted file mode 100644
index 79d8a29..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXComponent (PseudoClassManagement)
-
-/**
- *  @abstract filter common styles and pseudoClassStyles.
- *
- */
--(NSMutableDictionary *)parseStyles:(NSDictionary *)styles;
-
-/**
- *  @abstract reset pseudoClassStyles.
- *
- */
-- (void)resetPseudoClassStyles:(NSArray *)resetstyle;
-
-/**
- *  @abstract filter common styles and pseudoClassStyles.
- *
- */
--(NSString *)getPseudoKey:(NSString *)key;
-
-/**
- *  @abstract get pseudo class styles through key.
- *
- *  @param key      the key to search pseudo class
- *
- *  @return pseudo class.
- */
--(NSMutableDictionary *)getPseudoClassStyles:(NSString *)key;
-
-/**
- *  @abstract get pseudo class styles through keys.
- *
- *  @param keys      the keys to search pseudo class
- *  
- *  @return pseudo class.
- */
--(NSMutableDictionary *)getPseudoClassStylesByKeys:(NSArray *)keys;
-
-///--------------------------------------
-/// @name Updating PseudoClass
-///--------------------------------------
-
-/**
- * @abstract Called when component's style are updated
- *
- * @param pseudoClassStyles The updated style dictionary
- * @discussion It can be overrided to handle specific style updating. The method is called on the main thread.
- **/
-- (void)updatePseudoClassStyles:(NSDictionary *)pseudoClassStyles;
-
-///--------------------------------------
-/// @name recovery styles
-///--------------------------------------
-
-/**
- * @abstract Called when component recovery styles
- *
- * @discussion It can be overrided to handle specific style recovery. The method is called on the main thread.
- **/
-- (void)recoveryPseudoStyles:(NSDictionary *)styles;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.m
deleted file mode 100644
index c51b4dc..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.m
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent+PseudoClassManagement.h"
-#import "WXComponent_internal.h"
-#import "WXAssert.h"
-#import "WXComponentManager.h"
-#import "WXSDKInstance_private.h"
-#import "WXUtility.h"
-
-@implementation WXComponent (PseudoClassManagement)
-
--(NSMutableDictionary *)parseStyles:(NSDictionary *)styles
-{
-    NSMutableDictionary *newStyles = [NSMutableDictionary new];
-    if(!_pseudoClassStyles) {
-        _pseudoClassStyles = [NSMutableDictionary new];
-    }
-    if (styles && [styles count] > 0 ) {
-        for (NSString *key in styles){
-            if([key rangeOfString:@":"].location != NSNotFound){
-                if ([key rangeOfString:@"active"].location != NSNotFound) { //all active listen
-                    _isListenPseudoTouch = YES;
-                }
-                [_pseudoClassStyles setObject:styles[key] forKey:key];
-            }else {
-                [newStyles setObject:styles[key] forKey:key];
-            }
-        }
-    }
-    return newStyles;
-}
-
-- (void)resetPseudoClassStyles:(NSArray *)resetstyle {
-    for (NSString* key in resetstyle) {
-        if([key rangeOfString:@":"].location != NSNotFound){
-            [_pseudoClassStyles removeObjectForKey:key];
-        }
-    }
-    if([_pseudoClassStyles count] == 0) {
-        _isListenPseudoTouch = NO;
-    }
-}
-
-- (void)updatePseudoClassStyles:(NSDictionary *)pseudoClassStyles
-{
-    WXAssertMainThread();
-    NSMutableDictionary *styles = [NSMutableDictionary new];
-    for (NSString *k in pseudoClassStyles) {
-        [styles setObject:pseudoClassStyles[k] forKey:[self getPseudoKey:k]];
-    }
-    if ([styles count]>0) {
-        __weak typeof(self) weakSelf = self;
-        WXPerformBlockOnComponentThread(^{
-            WXComponentManager *manager = weakSelf.weexInstance.componentManager;
-            if (!manager.isValid) {
-                return;
-            }
-            [manager updatePseudoClassStyles:styles forComponent:self.ref];
-            [manager startComponentTasks];
-        });
-    }
-    
-    if (styles && [styles count] > 0) {
-        if(!_updatedPseudoClassStyles) {
-            _updatedPseudoClassStyles = [NSMutableDictionary new];
-        }
-        for (NSString *key in styles) {
-            [_updatedPseudoClassStyles setObject:styles[key] forKey:key];
-        }
-    }
-}
-
--(NSString *)getPseudoKey:(NSString *)key
-{
-    if ([key rangeOfString:@":"].location == NSNotFound) {
-        return key;
-    }
-    NSRange range = [key rangeOfString:@":"];
-    NSString *subKey = [key substringToIndex:range.location];
-    return subKey;
-}
-
--(NSMutableDictionary *)getPseudoClassStyles:(NSString *)key
-{
-    NSMutableDictionary *styles = [NSMutableDictionary new];
-    [styles addEntriesFromDictionary:[self getPseudoClassStyles:key level:1]];
-    [styles addEntriesFromDictionary:[self getPseudoClassStyles:key level:2]];
-    return styles;
-}
-
--(NSMutableDictionary *)getPseudoClassStyles:(NSString *)key level:(NSInteger )level
-{
-    NSMutableDictionary *styles = [NSMutableDictionary new];
-    if (_pseudoClassStyles && [_pseudoClassStyles count] > 0 ) {
-        for (NSString *k in _pseudoClassStyles){
-            if ([k rangeOfString:key].location != NSNotFound && [WXUtility getSubStringNumber:k subString:@":"] == level) {
-                [styles setObject:_pseudoClassStyles[k] forKey:[self getPseudoKey:k]];
-            }
-        }
-    }
-    return styles;
-}
-
--(NSMutableDictionary *)getPseudoClassStylesByKeys:(NSArray *)keys
-{
-    NSMutableDictionary *styles = [NSMutableDictionary new];
-    if(keys && [keys count]>0) {
-        if (_pseudoClassStyles && [_pseudoClassStyles count] > 0 ) {
-            for (NSString *k in _pseudoClassStyles){
-                if([WXUtility getSubStringNumber:k subString:@":"] == [keys count]){
-                    BOOL isContain = YES;
-                    for(NSString *pKey in keys){
-                        if ([k rangeOfString:pKey].location == NSNotFound) {
-                            isContain = NO;
-                            break;
-                        }
-                    }
-                    if (isContain) {
-                        [styles setObject:_pseudoClassStyles[k] forKey:[self getPseudoKey:k]];
-                    }
-                }
-            }
-        }
-    }
-    
-    return styles;
-}
-
-- (void)recoveryPseudoStyles:(NSDictionary *)styles
-{
-    WXAssertMainThread();
-    __weak typeof(self) weakSelf = self;
-    NSMutableDictionary *resetStyles = [styles mutableCopy];
-    if(_updatedPseudoClassStyles && [_updatedPseudoClassStyles count]>0){
-        for (NSString *key in _updatedPseudoClassStyles) {
-            if (![styles objectForKey:key] && [key length]>0) {
-                [resetStyles setObject:@"" forKey:key];
-            }
-        }
-    }
-    WXPerformBlockOnComponentThread(^{
-        WXComponentManager *manager = weakSelf.weexInstance.componentManager;
-        if (!manager.isValid) {
-            return;
-        }
-        [manager updatePseudoClassStyles:resetStyles forComponent:self.ref];
-        [manager startComponentTasks];
-    });
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h
deleted file mode 100644
index e8ee8fd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent.h"
-
-@interface WXComponent (ViewManagement)
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm
deleted file mode 100644
index 3d97548..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.mm
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXComponent+ViewManagement.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+BoxShadow.h"
-#import "WXAssert.h"
-#import "WXView.h"
-#import "WXSDKInstance_private.h"
-#import "WXTransform.h"
-#import "WXSDKManager.h"
-#import "WXComponent+Layout.h"
-
-#define WX_BOARD_RADIUS_RESET_ALL(key)\
-do {\
-    if (styles && [styles containsObject:@#key]) {\
-        _borderTopLeftRadius = _borderTopRightRadius = _borderBottomLeftRadius = _borderBottomRightRadius = 0;\
-        [self setNeedsDisplay];\
-    }\
-} while(0);
-
-#define WX_BOARD_RADIUS_RESET(key)\
-do {\
-    if (styles && [styles containsObject:@#key]) {\
-    _##key = 0;\
-    [self setNeedsDisplay];\
-    }\
-} while(0);
-
-#define WX_BOARD_WIDTH_RESET_ALL(key)\
-do {\
-    if (styles && [styles containsObject:@#key]) {\
-        _borderTopWidth = _borderLeftWidth = _borderRightWidth = _borderBottomWidth = 0;\
-        [self setNeedsLayout];\
-    }\
-} while(0);
-
-#define WX_BOARD_WIDTH_RESET(key)\
-do {\
-    if (styles && [styles containsObject:@#key]) {\
-        _##key = 0;\
-        [self setNeedsLayout];\
-    }\
-} while(0);
-
-#define WX_BOARD_RADIUS_COLOR_RESET_ALL(key)\
-do {\
-    if (styles && [styles containsObject:@#key]) {\
-        _borderTopColor = _borderLeftColor = _borderRightColor = _borderBottomColor = [UIColor blackColor];\
-        [self setNeedsDisplay];\
-    }\
-} while(0);
-
-#define WX_BOARD_COLOR_RESET(key)\
-do {\
-    if (styles && [styles containsObject:@#key]) {\
-        _##key = [UIColor blackColor];\
-        [self setNeedsDisplay];\
-    }\
-} while(0);
-
-#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-
-@implementation WXComponent (ViewManagement)
-
-#pragma mark Public
-
-- (UIView *)loadView
-{
-    return [[WXView alloc] init];
-}
-
-- (BOOL)isViewLoaded
-{
-    return (_view != nil);
-}
-
-- (void)insertSubview:(WXComponent *)subcomponent atIndex:(NSInteger)index
-{
-    WXAssertMainThread();
-    
-    if (subcomponent.displayType == WXDisplayTypeNone) {
-        return;
-    }
-    
-    if (_isViewTreeIgnored) {
-        // self not added to views, children also ignored.
-        subcomponent->_isViewTreeIgnored = YES;
-        return;
-    }
-    
-    if (subcomponent->_isViewTreeIgnored) {
-        // children not added to views, such as div in list, we do not create view.
-        return;
-    }
-  
-    WX_CHECK_COMPONENT_TYPE(self.componentType)
-    if (subcomponent->_positionType == WXPositionTypeFixed) {
-        [self.weexInstance.rootView addSubview:subcomponent.view];
-        return;
-    }
-    
-    // use _lazyCreateView to forbid component like cell's view creating
-    if(_lazyCreateView) {
-        subcomponent->_lazyCreateView = YES;
-    }
-    
-    if (!subcomponent->_lazyCreateView || (self->_lazyCreateView && [self isViewLoaded])) {
-        [self.view insertSubview:subcomponent.view atIndex:index];
-    }
-}
-
-- (void)willRemoveSubview:(WXComponent *)component
-{
-    WXAssertMainThread();
-}
-
-- (void)removeFromSuperview
-{
-    WXAssertMainThread();
-    
-    if ([self isViewLoaded]) {
-        [self.view removeFromSuperview];
-    }
-}
-
-- (void)moveToSuperview:(WXComponent *)newSupercomponent atIndex:(NSUInteger)index
-{
-    WX_CHECK_COMPONENT_TYPE(self.componentType)
-    [self removeFromSuperview];
-    [newSupercomponent insertSubview:self atIndex:index];
-}
-
-- (void)viewWillLoad
-{
-    WXAssertMainThread();
-}
-
-- (void)viewDidLoad
-{
-    WXAssertMainThread();
-    if (self.componentCallback) {
-        self.componentCallback(self, WXComponentViewCreatedCallback, _view);
-    }
-}
-
-- (void)viewWillUnload
-{
-    WXAssertMainThread();
-}
-
-- (void)viewDidUnload
-{
-    WXAssertMainThread();
-}
-
-#pragma mark Private
-
-- (void)_initViewPropertyWithStyles:(NSDictionary *)styles
-{
-    _backgroundColor = styles[@"backgroundColor"] ? [WXConvert UIColor:styles[@"backgroundColor"]] : [UIColor clearColor];
-    _backgroundImage = styles[@"backgroundImage"] ? [WXConvert NSString:styles[@"backgroundImage"]]: nil;
-    _opacity = styles[@"opacity"] ? [WXConvert CGFloat:styles[@"opacity"]] : 1.0;
-    _clipToBounds = styles[@"overflow"] ? [WXConvert WXClipType:styles[@"overflow"]] : NO;
-    _visibility = styles[@"visibility"] ? [WXConvert WXVisibility:styles[@"visibility"]] : WXVisibilityShow;
-    _positionType = styles[@"position"] ? [WXConvert WXPositionType:styles[@"position"]] : WXPositionTypeRelative;
-    _transform = styles[@"transform"] || styles[@"transformOrigin"] ?
-    [[WXTransform alloc] initWithCSSValue:[WXConvert NSString:styles[@"transform"]] origin:[WXConvert NSString:styles[@"transformOrigin"]] instance:self.weexInstance] :
-    [[WXTransform alloc] initWithCSSValue:nil origin:nil instance:self.weexInstance];
-    _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil;
-    if (_boxShadow) {
-        _lastBoxShadow = _boxShadow;
-    }
-}
-
-- (void)_transitionUpdateViewProperty:(NSDictionary *)styles
-{
-    WX_CHECK_COMPONENT_TYPE(self.componentType)
-    if (styles[@"backgroundColor"]) {
-        _backgroundColor = [WXConvert UIColor:styles[@"backgroundColor"]];
-    }
-    if (styles[@"opacity"]) {
-        _opacity = [WXConvert CGFloat:styles[@"opacity"]];
-    }
-}
-
-- (void)_updateViewStyles:(NSDictionary *)styles
-{
-    WX_CHECK_COMPONENT_TYPE(self.componentType)
-    if (styles[@"boxShadow"]) {
-        _lastBoxShadow = _boxShadow;
-        _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil;
-        [self configBoxShadow:_boxShadow];
-        [self setNeedsDisplay];
-    }
-    
-    if (styles[@"backgroundColor"]) {
-        _backgroundColor = [WXConvert UIColor:styles[@"backgroundColor"]];
-        [self setNeedsDisplay];
-    }
-    
-    if (styles[@"backgroundImage"]) {
-        _backgroundImage = styles[@"backgroundImage"] ? [WXConvert NSString:styles[@"backgroundImage"]]: nil;
-        if (_backgroundImage) {
-            [self setGradientLayer];
-        }
-    }
-    
-    if (styles[@"opacity"]) {
-        _opacity = [WXConvert CGFloat:styles[@"opacity"]];
-        _layer.opacity = _opacity;
-    }
-    
-    if (styles[@"overflow"]) {
-        _clipToBounds = [WXConvert WXClipType:styles[@"overflow"]];
-        _view.clipsToBounds = _clipToBounds;
-    }
-    
-    if (styles[@"position"]) {
-        WXPositionType positionType = [WXConvert WXPositionType:styles[@"position"]];
-        if (positionType == WXPositionTypeSticky) {
-            [self.ancestorScroller addStickyComponent:self];
-        } else if (_positionType == WXPositionTypeSticky) {
-            [self.ancestorScroller removeStickyComponent:self];
-        }
-        
-        WXPerformBlockOnComponentThread(^{
-            if (positionType == WXPositionTypeFixed) {
-                [self.weexInstance.componentManager addFixedComponent:self];
-            } else if (_positionType == WXPositionTypeFixed) {
-                [self.weexInstance.componentManager removeFixedComponent:self];
-            }
-            
-            _positionType = positionType;
-        });
-    }
-    
-    if (styles[@"visibility"]) {
-        _visibility = [WXConvert WXVisibility:styles[@"visibility"]];
-        if (_visibility == WXVisibilityShow) {
-            self.view.hidden = NO;
-        }
-        else {
-            self.view.hidden = YES;
-        }
-    }
-    if (styles[@"transform"]) {
-        id transformOrigin = styles[@"transformOrigin"] ?: self.styles[@"transformOrigin"];
-        WXTransform* transform = [[WXTransform alloc] initWithCSSValue:[WXConvert NSString:styles[@"transform"]] origin:[WXConvert NSString:transformOrigin] instance:self.weexInstance];
-        if (!CGRectEqualToRect(self.calculatedFrame, CGRectZero)) {
-            [transform applyTransformForView:_view];
-            [self _adjustForRTL];
-            [_layer setNeedsDisplay];
-        }
-        self.transform = transform;
-    } else if (styles[@"transformOrigin"]) {
-        [_transform setTransformOrigin:[WXConvert NSString:styles[@"transformOrigin"]]];
-        if (!CGRectEqualToRect(self.calculatedFrame, CGRectZero)) {
-            [_transform applyTransformForView:_view];
-            [self _adjustForRTL];
-            [_layer setNeedsDisplay];
-        }
-    }
-    // for RTL
-    if (styles[@"direction"]) {
-        [self _adjustForRTL];
-    }
-}
-
-- (void)resetBorder:(NSArray *)styles
-{
-    WX_BOARD_RADIUS_RESET_ALL(borderRadius);
-    WX_BOARD_RADIUS_RESET(borderTopLeftRadius);
-    WX_BOARD_RADIUS_RESET(borderTopRightRadius);
-    WX_BOARD_RADIUS_RESET(borderBottomLeftRadius);
-    WX_BOARD_RADIUS_RESET(borderBottomRightRadius);
-    
-    WX_BOARD_WIDTH_RESET_ALL(borderWidth);
-    WX_BOARD_WIDTH_RESET(borderTopWidth);
-    WX_BOARD_WIDTH_RESET(borderLeftWidth);
-    WX_BOARD_WIDTH_RESET(borderRightWidth);
-    WX_BOARD_WIDTH_RESET(borderBottomWidth);
-    
-    WX_BOARD_RADIUS_COLOR_RESET_ALL(borderColor);
-    WX_BOARD_COLOR_RESET(borderTopColor);
-    WX_BOARD_COLOR_RESET(borderLeftColor);
-    WX_BOARD_COLOR_RESET(borderRightColor);
-    WX_BOARD_COLOR_RESET(borderBottomColor);
-}
-
-- (void)_resetStyles:(NSArray *)styles
-{
-    if (styles && [styles containsObject:@"backgroundColor"]) {
-        _backgroundColor = [UIColor clearColor];
-        [self setNeedsDisplay];
-    }
-    if (styles && [styles containsObject:@"boxShadow"]) {
-        _lastBoxShadow = _boxShadow;
-        _boxShadow = nil;
-        [self setNeedsDisplay];
-    }
-    if (styles && [styles containsObject:@"backgroundImage"]) {
-        _backgroundImage = nil;
-        [self setGradientLayer];
-    }
-    
-    [self resetBorder:styles];
-}
-
-- (void)_unloadViewWithReusing:(BOOL)isReusing
-{
-    WXAssertMainThread();
-    
-    if (isReusing && self->_positionType == WXPositionTypeFixed) {
-        return;
-    }
-    
-    [self viewWillUnload];
-    
-    _view.gestureRecognizers = nil;
-    
-    [self _removeAllEvents];
-    
-    if (self.ancestorScroller) {
-        [self.ancestorScroller removeStickyComponent:self];
-        [self.ancestorScroller removeScrollToListener:self];
-    }
-    
-    for (WXComponent *subcomponents in [self.subcomponents reverseObjectEnumerator]) {
-        [subcomponents _unloadViewWithReusing:isReusing];
-    }
-    
-    if ([_view superview]) {
-        [_view removeFromSuperview];
-    }
-    
-    if (self->_isTemplate && self.attributes[@"@templateId"]) {
-        [[WXSDKManager bridgeMgr] callComponentHook:self.weexInstance.instanceId componentId:self.attributes[@"@templateId"] type:@"lifecycle" hook:@"detach" args:nil competion:nil];
-    }
-    _view = nil;
-    [_layer removeFromSuperlayer];
-    _layer = nil;
-    
-    [self viewDidUnload];
-}
-
-- (void)unloadNativeView
-{
-    WXAssertMainThread();
-    
-    [self viewWillUnload];
-    
-    _view.gestureRecognizers = nil;
-    
-    [self _removeAllEvents];
-    
-    if ([_view superview]) {
-        [_view removeFromSuperview];
-    }
-
-    _view = nil;
-    [_layer removeFromSuperlayer];
-    _layer = nil;
-    
-    [self viewDidUnload];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXErrorView.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXErrorView.h
deleted file mode 100644
index 80f3954..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXErrorView.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-@protocol WXErrorViewDelegate <NSObject>
-
-- (void)onclickErrorView;
-
-@end
-
-@interface WXErrorView : UIView
-
-@property (nonatomic, weak) id<WXErrorViewDelegate>  delegate;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXErrorView.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXErrorView.m
deleted file mode 100644
index b020842..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXErrorView.m
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXErrorView.h"
-
-@implementation WXErrorView
-
-- (id) initWithFrame:(CGRect)frame
-{
-    self = [super initWithFrame:frame];
-    
-    if (self) {
-        UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.bounds];
-        NSBundle *bundle = [NSBundle bundleForClass:self.class];
-        NSString *file = [bundle pathForResource:@"wx_load_error@3x" ofType:@"png"];
-		if (file == nil) {
-			file = [[NSBundle mainBundle] pathForResource:@"wx_load_error@3x" ofType:@"png"];
-		}
-        imageView.image = [UIImage imageWithContentsOfFile:file];
-        [self addSubview:imageView];
-        
-        UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
-        [self addGestureRecognizer:tapRecognizer];
-    }
-    return self;
-}
-
-- (void)tapGesture:(UITapGestureRecognizer *)sender
-{
-    [self.delegate onclickErrorView];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXRootView.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXRootView.h
deleted file mode 100644
index 24782e8..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXRootView.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-@class WXSDKInstance;
-@interface WXRootView : UIView
-
-@property (nonatomic, weak) WXSDKInstance *instance;
-
-- (BOOL)isHasEvent;
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXRootView.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXRootView.m
deleted file mode 100644
index 3cc8a36..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXRootView.m
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXRootView.h"
-#import "WXSDKInstance.h"
-#import "WXPageEventNotifyEvent.h"
-#import "WXSDKEngine.h"
-
-@interface WXRootView()
-
-@property (nonatomic, assign) BOOL mHasEvent;
-
-@end
-
-@implementation WXRootView
-
-- (void)setFrame:(CGRect)frame
-{
-    BOOL shouldNotifyLayout = NO;
-    if (_instance.onLayoutChange && !CGRectEqualToRect(self.frame, frame)) {
-        shouldNotifyLayout = YES;
-    }
-    
-    [super setFrame:frame];
-    
-    if (shouldNotifyLayout && _instance.onLayoutChange) {
-        _instance.onLayoutChange(self);
-    }
-}
-
-- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
-{
-    _mHasEvent = TRUE;
-    id<WXPageEventNotifyEventProtocol> pageEventNotify = [WXSDKEngine handlerForProtocol:@protocol(WXPageEventNotifyEventProtocol)];
-    if ([pageEventNotify respondsToSelector:@selector(hitTest:withEvent:withView:)]){
-        [pageEventNotify hitTest:point withEvent:event withView:self];
-    }
-    return [super hitTest:point withEvent:event];
-}
-
-- (BOOL)isHasEvent
-{
-    return _mHasEvent;
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXView.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXView.h
deleted file mode 100644
index c7f0afd..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXView.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <UIKit/UIKit.h>
-
-@interface WXView : UIView
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXView.m b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXView.m
deleted file mode 100644
index 5e099c3..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/View/WXView.m
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import "WXView.h"
-#import "WXComponent.h"
-#import "WXLayer.h"
-#import "WXComponent_internal.h"
-
-@implementation WXView
-
-+ (Class)layerClass
-{
-    return [WXLayer class];
-}
-
-- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
-{
-    /**
-     *  Capturing touches on a subview outside the frame of its superview if it does not clips to bounds.
-     */
-    if (self.hidden || !self.userInteractionEnabled) {
-        return nil;
-    }
-    
-    UIView* result = [super hitTest:point withEvent:event];
-    if (result) {
-        return result;
-    }
-    
-    // if clips to bounds, no need to detect outside views.
-    if (self.clipsToBounds) {
-        return nil;
-    }
-    
-    for (UIView* subView in [self.subviews reverseObjectEnumerator]) {
-        if (subView.hidden) {
-            continue;
-        }
-        CGPoint subPoint = [self convertPoint:point toView:subView];
-        result = [subView hitTest:subPoint withEvent:event];
-        if (result) {
-            return result;
-        }
-    }
-    
-    return nil;
-}
-
-- (BOOL)accessibilityPerformMagicTap
-{
-    if (self.wx_component->_accessibilityMagicTapEvent) {
-        [self.wx_component fireEvent:@"accessibilityMagicTap" params:nil];
-    }
-    return [super accessibilityPerformMagicTap];
-}
-
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h
deleted file mode 100644
index 5ac21e1..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "WXModuleProtocol.h"
-
-@protocol WXWebSocketDelegate<NSObject>
-- (void)didOpen;
-- (void)didFailWithError:(NSError *)error;
-- (void)didReceiveMessage:(id)message;
-- (void)didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
-@end
-
-@protocol WXWebSocketHandler<NSObject>
-
-- (void)open:(NSString *)url protocol:(NSString *)protocol identifier:(NSString *)identifier withDelegate:(id<WXWebSocketDelegate>)delegate;
-- (void)send:(NSString *)identifier data:(NSString *)data;
-- (void)close:(NSString *)identifier;
-- (void)close:(NSString *)identifier code:(NSInteger)code reason:(NSString *)reason;
-- (void)clear:(NSString *)identifier;
-@end
diff --git a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/WeexSDK.h b/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/WeexSDK.h
deleted file mode 100644
index 5215c02..0000000
--- a/ios/Pods/WeexSDK/ios/sdk/WeexSDK/Sources/WeexSDK.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one 
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*   http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
- */
-
-#ifdef __OBJC__
-
-#import "style.h"
-#import "layout.h"
-#import "flex_enum.h"
-#import "eagle_bridge.h"
-#import "WXWebSocketHandler.h"
-#import "WXVoiceOverModule.h"
-#import "WXView.h"
-#import "WXValidateProtocol.h"
-#import "WXUtility.h"
-#import "WXURLRewriteProtocol.h"
-#import "WXType.h"
-#import "WXStreamModule.h"
-#import "WXScrollerProtocol.h"
-#import "WXScrollerComponent.h"
-#import "WXSDKManager.h"
-#import "WXSDKInstance.h"
-#import "WXSDKError.h"
-#import "WXSDKEngine.h"
-#import "WXRootViewController.h"
-#import "WXRichText.h"
-#import "WXResourceResponse.h"
-#import "WXResourceRequestHandler.h"
-#import "WXResourceRequest.h"
-#import "WXResourceLoader.h"
-#import "WXRefreshComponent.h"
-#import "WXRecyclerComponent.h"
-#import "WXPrerenderManager.h"
-#import "WXPageEventNotifyEvent.h"
-#import "WXNetworkProtocol.h"
-#import "WXNavigationProtocol.h"
-#import "WXNavigationDefaultImpl.h"
-#import "WXMonitor.h"
-#import "WXModuleProtocol.h"
-#import "WXModalUIModule.h"
-#import "WXLog.h"
-#import "WXListComponent.h"
-#import "WXJSFrameworkLoadProtocol.h"
-#import "WXJSExceptionProtocol.h"
-#import "WXJSExceptionInfo.h"
-#import "WXInvocationConfig.h"
-#import "WXIndicatorComponent.h"
-#import "WXImgLoaderProtocol.h"
-#import "WXHandlerFactory.h"
-#import "WXExtendCallNativeProtocol.h"
-#import "WXExceptionUtils.h"
-#import "WXEventModuleProtocol.h"
-#import "WXErrorView.h"
-#import "WXDefine.h"
-#import "WXDebugTool.h"
-#import "WXDataRenderHandler.h"
-#import "WXConvertUtility.h"
-#import "WXConvert.h"
-#import "WXConfigCenterProtocol.h"
-#import "WXComponentManager.h"
-#import "WXComponentFactory.h"
-#import "WXComponent.h"
-#import "WXComponent+Layout.h"
-#import "WXBridgeProtocol.h"
-#import "WXBridgeMethod.h"
-#import "WXBridgeManager.h"
-#import "WXBaseViewController.h"
-#import "WXAppMonitorProtocol.h"
-#import "WXAppConfiguration.h"
-#import "WXApmProtocol.h"
-#import "WXApmForInstance.h"
-#import "WXAnalyzerProtocol.h"
-#import "WXAnalyzerCenter.h"
-#import "WXAComponent.h"
-#import "NSObject+WXSwizzle.h"
-#import "JSContext+Weex.h"
-
-#endif /* __OBJC__ */
diff --git a/ios/Pods/WeexSDK/pre-build/native-bundle-main.js b/ios/Pods/WeexSDK/pre-build/native-bundle-main.js
deleted file mode 100644
index fa6fdde..0000000
--- a/ios/Pods/WeexSDK/pre-build/native-bundle-main.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.24.4, Build 2018-02-07 17:13. (Vue: 2.5.13-weex.5, Rax: 0.4.20)");var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){"use strict";var e,t,n,r;function o(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e,t){return e(t={exports:{}},t.exports),t.exports}Array.from||(Array.from=(e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=Math.pow(2,53)-1,r=function(e){var t,r=(t=Number(e),isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t);return Math.min(Math.max(r,0),n)},function(e){var n=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var o,i=arguments.length>1?arguments[1]:void 0;if(void 0!==i){if(!t(i))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(o=arguments[2])}for(var a,s=r(n.length),u=t(this)?Object(new this(s)):new Array(s),c=0;c<s;)a=n[c],u[c]=i?void 0===o?i(a,c):i.call(o,a,c):a,c+=1;return u.length=s,u}));var a=i(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),s=i(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),u=(s.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),c=function(e){if(!u(e))throw TypeError(e+" is not an object!");return e},l=function(e){try{return!!e()}catch(e){return!0}},f=!l(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),p=a.document,d=u(p)&&u(p.createElement),h=function(e){return d?p.createElement(e):{}},v=!f&&!l(function(){return 7!=Object.defineProperty(h("div"),"a",{get:function(){return 7}}).a}),y=Object.defineProperty,m={f:f?Object.defineProperty:function(e,t,n){if(c(e),t=function(e,t){if(!u(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!u(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!u(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!u(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}(t,!0),c(n),v)try{return y(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},_=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},g=f?function(e,t,n){return m.f(e,t,_(1,n))}:function(e,t,n){return e[t]=n,e},b={}.hasOwnProperty,w=function(e,t){return b.call(e,t)},S=0,x=Math.random(),k=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++S+x).toString(36))},C=i(function(e){var t=k("src"),n="toString",r=Function[n],o=(""+r).split(n);s.inspectSource=function(e){return r.call(e)},(e.exports=function(e,n,r,i){var s="function"==typeof r;s&&(w(r,"name")||g(r,"name",n)),e[n]!==r&&(s&&(w(r,t)||g(r,t,e[n]?""+e[n]:o.join(String(n)))),e===a?e[n]=r:i?e[n]?e[n]=r:g(e,n,r):(delete e[n],g(e,n,r)))})(Function.prototype,n,function(){return"function"==typeof this&&this[t]||r.call(this)})}),E=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},O=function(e,t,n){if(E(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},j="prototype",A=function(e,t,n){var r,o,i,u,c=e&A.F,l=e&A.G,f=e&A.S,p=e&A.P,d=e&A.B,h=l?a:f?a[t]||(a[t]={}):(a[t]||{})[j],v=l?s:s[t]||(s[t]={}),y=v[j]||(v[j]={});for(r in l&&(n=t),n)i=((o=!c&&h&&void 0!==h[r])?h:n)[r],u=d&&o?O(i,a):p&&"function"==typeof i?O(Function.call,i):i,h&&C(h,r,i,e&A.U),v[r]!=i&&g(v,r,u),p&&y[r]!=i&&(y[r]=i)};a.core=s,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;var I,T=A,P={}.toString,N=function(e){return P.call(e).slice(8,-1)},M=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==N(e)?e.split(""):Object(e)},$=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e},R=function(e){return M($(e))},D=Math.ceil,F=Math.floor,L=function(e){return isNaN(e=+e)?0:(e>0?F:D)(e)},V=Math.min,W=function(e){return e>0?V(L(e),9007199254740991):0},U=Math.max,B=Math.min,q="__core-js_shared__",J=a[q]||(a[q]={}),z=function(e){return J[e]||(J[e]={})},H=z("keys"),G=function(e){return H[e]||(H[e]=k(e))},X=(I=!1,function(e,t,n){var r,o,i,a=R(e),s=W(a.length),u=(o=s,(r=L(r=n))<0?U(r+o,0):B(r,o));if(I&&t!=t){for(;s>u;)if((i=a[u++])!=i)return!0}else for(;s>u;u++)if((I||u in a)&&a[u]===t)return I||u||0;return!I&&-1}),K=G("IE_PROTO"),Z="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),Q=Object.keys||function(e){return function(e,t){var n,r=R(e),o=0,i=[];for(n in r)n!=K&&w(r,n)&&i.push(n);for(;t.length>o;)w(r,n=t[o++])&&(~X(i,n)||i.push(n));return i}(e,Z)},Y={f:Object.getOwnPropertySymbols},ee={f:{}.propertyIsEnumerable},te=function(e){return Object($(e))},ne=Object.assign,re=!ne||l(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=ne({},e)[n]||Object.keys(ne({},t)).join("")!=r})?function(e,t){for(var n=arguments,r=te(e),o=arguments.length,i=1,a=Y.f,s=ee.f;o>i;)for(var u,c=M(n[i++]),l=a?Q(c).concat(a(c)):Q(c),f=l.length,p=0;f>p;)s.call(c,u=l[p++])&&(r[u]=c[u]);return r}:ne;T(T.S+T.F,"Object",{assign:re});s.Object.assign;Object.setPrototypeOf||(Object.setPrototypeOf=function(e,t){var n;function r(e,t){return n.call(e,t),e}try{(n=e.getOwnPropertyDescriptor(e.prototype,t).set).call({},null)}catch(o){if(e.prototype!=={}[t])return;n=function(e){this[t]=e},r.polyfill=r(r({},null),e.prototype)instanceof e}return r}(Object,"__proto__"));var oe=global.WXEnvironment;oe&&"iOS"===oe.platform&&(global.Promise=void 0);var ie=i(function(e){var t=z("wks"),n=a.Symbol,r="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=r&&n[e]||(r?n:k)("Symbol."+e))}).store=t}),ae=ie("toStringTag"),se="Arguments"==N(function(){return arguments}()),ue=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),ae))?n:se?N(t):"Object"==(r=N(t))&&"function"==typeof t.callee?"Arguments":r},ce={};ce[ie("toStringTag")]="z",ce+""!="[object z]"&&C(Object.prototype,"toString",function(){return"[object "+ue(this)+"]"},!0);var le={},fe=f?Object.defineProperties:function(e,t){c(e);for(var n,r=Q(t),o=r.length,i=0;o>i;)m.f(e,n=r[i++],t[n]);return e},pe=a.document,de=pe&&pe.documentElement,he=G("IE_PROTO"),ve=function(){},ye="prototype",me=function(){var e,t=h("iframe"),n=Z.length;for(t.style.display="none",de.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),me=e.F;n--;)delete me[ye][Z[n]];return me()},_e=Object.create||function(e,t){var n;return null!==e?(ve[ye]=c(e),n=new ve,ve[ye]=null,n[he]=e):n=me(),void 0===t?n:fe(n,t)},ge=m.f,be=ie("toStringTag"),we=function(e,t,n){e&&!w(e=n?e:e.prototype,be)&&ge(e,be,{configurable:!0,value:t})},Se={};g(Se,ie("iterator"),function(){return this});var xe,ke=G("IE_PROTO"),Ce=Object.prototype,Ee=Object.getPrototypeOf||function(e){return e=te(e),w(e,ke)?e[ke]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ce:null},Oe=ie("iterator"),je=!([].keys&&"next"in[].keys()),Ae="values",Ie=function(){return this},Te=function(e,t,n,r,o,i,a){var s,u,c;u=t,c=r,(s=n).prototype=_e(Se,{next:_(1,c)}),we(s,u+" Iterator");var l,f,p,d=function(e){if(!je&&e in m)return m[e];switch(e){case"keys":case Ae:return function(){return new n(this,e)}}return function(){return new n(this,e)}},h=t+" Iterator",v=o==Ae,y=!1,m=e.prototype,b=m[Oe]||m["@@iterator"]||o&&m[o],S=!je&&b||d(o),x=o?v?d("entries"):S:void 0,k="Array"==t&&m.entries||b;if(k&&(p=Ee(k.call(new e)))!==Object.prototype&&p.next&&(we(p,h,!0),w(p,Oe)||g(p,Oe,Ie)),v&&b&&b.name!==Ae&&(y=!0,S=function(){return b.call(this)}),(je||y||!m[Oe])&&g(m,Oe,S),le[t]=S,le[h]=Ie,o)if(l={values:v?S:d(Ae),keys:i?S:d("keys"),entries:x},a)for(f in l)f in m||C(m,f,l[f]);else T(T.P+T.F*(je||y),t,l);return l},Pe=(xe=!0,function(e,t){var n,r,o=String($(e)),i=L(t),a=o.length;return i<0||i>=a?xe?"":void 0:(n=o.charCodeAt(i))<55296||n>56319||i+1===a||(r=o.charCodeAt(i+1))<56320||r>57343?xe?o.charAt(i):n:xe?o.slice(i,i+2):r-56320+(n-55296<<10)+65536});Te(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Pe(t,n),this._i+=e.length,{value:e,done:!1})});var Ne=ie("unscopables"),Me=Array.prototype;void 0==Me[Ne]&&g(Me,Ne,{});var $e=function(e){Me[Ne][e]=!0},Re=function(e,t){return{value:t,done:!!e}},De=Te(Array,"Array",function(e,t){this._t=R(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Re(1)):Re(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");le.Arguments=le.Array,$e("keys"),$e("values"),$e("entries");for(var Fe=ie("iterator"),Le=ie("toStringTag"),Ve=le.Array,We={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Ue=Q(We),Be=0;Be<Ue.length;Be++){var qe,Je=Ue[Be],ze=We[Je],He=a[Je],Ge=He&&He.prototype;if(Ge&&(Ge[Fe]||g(Ge,Fe,Ve),Ge[Le]||g(Ge,Le,Je),le[Je]=Ve,ze))for(qe in De)Ge[qe]||C(Ge,qe,De[qe],!0)}var Xe,Ke,Ze,Qe=function(e,t,n,r){try{return r?t(c(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&c(o.call(e)),t}},Ye=ie("iterator"),et=Array.prototype,tt=ie("iterator"),nt=s.getIteratorMethod=function(e){if(void 0!=e)return e[tt]||e["@@iterator"]||le[ue(e)]},rt=i(function(e){var t={},n={},r=e.exports=function(e,r,o,i,a){var s,u,l,f,p,d=a?function(){return e}:nt(e),h=O(o,i,r?2:1),v=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(void 0===(p=d)||le.Array!==p&&et[Ye]!==p){for(l=d.call(e);!(u=l.next()).done;)if((f=Qe(l,h,u.value,r))===t||f===n)return f}else for(s=W(e.length);s>v;v++)if((f=r?h(c(u=e[v])[0],u[1]):h(e[v]))===t||f===n)return f};r.BREAK=t,r.RETURN=n}),ot=ie("species"),it=a.process,at=a.setImmediate,st=a.clearImmediate,ut=a.MessageChannel,ct=a.Dispatch,lt=0,ft={},pt="onreadystatechange",dt=function(){var e=+this;if(ft.hasOwnProperty(e)){var t=ft[e];delete ft[e],t()}},ht=function(e){dt.call(e.data)};at&&st||(at=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return ft[++lt]=function(){!function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}e.apply(n,t)}("function"==typeof e?e:Function(e),n)},Xe(lt),lt},st=function(e){delete ft[e]},"process"==N(it)?Xe=function(e){it.nextTick(O(dt,e,1))}:ct&&ct.now?Xe=function(e){ct.now(O(dt,e,1))}:ut?(Ze=(Ke=new ut).port2,Ke.port1.onmessage=ht,Xe=O(Ze.postMessage,Ze,1)):a.addEventListener&&"function"==typeof postMessage&&!a.importScripts?(Xe=function(e){a.postMessage(e+"","*")},a.addEventListener("message",ht,!1)):Xe=pt in h("script")?function(e){de.appendChild(h("script"))[pt]=function(){de.removeChild(this),dt.call(e)}}:function(e){setTimeout(O(dt,e,1),0)});var vt={set:at,clear:st},yt=vt.set,mt=a.MutationObserver||a.WebKitMutationObserver,_t=a.process,gt=a.Promise,bt="process"==N(_t);var wt={f:function(e){return new function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r}),this.resolve=E(t),this.reject=E(n)}(e)}},St=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},xt=ie("species"),kt=ie("iterator"),Ct=!1;try{[7][kt]().return=function(){Ct=!0}}catch(e){}var Et,Ot,jt,At,It,Tt=vt.set,Pt=function(){var e,t,n,r=function(){var r,o;for(bt&&(r=_t.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(bt)n=function(){_t.nextTick(r)};else if(!mt||a.navigator&&a.navigator.standalone)if(gt&&gt.resolve){var o=gt.resolve();n=function(){o.then(r)}}else n=function(){yt.call(a,r)};else{var i=!0,s=document.createTextNode("");new mt(r).observe(s,{characterData:!0}),n=function(){s.data=i=!i}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}(),Nt="Promise",Mt=a.TypeError,$t=a.process,Rt=a[Nt],Dt="process"==ue($t),Ft=function(){},Lt=Ot=wt.f,Vt=!!function(){try{var e=Rt.resolve(1),t=(e.constructor={})[ie("species")]=function(e){e(Ft,Ft)};return(Dt||"function"==typeof PromiseRejectionEvent)&&e.then(Ft)instanceof t}catch(e){}}(),Wt=function(e){var t;return!(!u(e)||"function"!=typeof(t=e.then))&&t},Ut=function(e,t){if(!e._n){e._n=!0;var n=e._c;Pt(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(o||(2==e._h&&Jt(e),e._h=1),!0===a?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(Mt("Promise-chain cycle")):(i=Wt(n))?i.call(n,s,u):s(n)):u(r)}catch(e){u(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&Bt(e)})}},Bt=function(e){Tt.call(a,function(){var t,n,r,o=e._v,i=qt(e);if(i&&(t=St(function(){Dt?$t.emit("unhandledRejection",o,e):(n=a.onunhandledrejection)?n({promise:e,reason:o}):(r=a.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Dt||qt(e)?2:1),e._a=void 0,i&&t.e)throw t.v})},qt=function(e){return 1!==e._h&&0===(e._a||e._c).length},Jt=function(e){Tt.call(a,function(){var t;Dt?$t.emit("rejectionHandled",e):(t=a.onrejectionhandled)&&t({promise:e,reason:e._v})})},zt=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),Ut(t,!0))},Ht=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Mt("Promise can't be resolved itself");(t=Wt(e))?Pt(function(){var r={_w:n,_d:!1};try{t.call(e,O(Ht,r,1),O(zt,r,1))}catch(e){zt.call(r,e)}}):(n._v=e,n._s=1,Ut(n,!1))}catch(e){zt.call({_w:n,_d:!1},e)}}};Vt||(Rt=function(e){!function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!")}(this,Rt,Nt,"_h"),E(e),Et.call(this);try{e(O(Ht,this,1),O(zt,this,1))}catch(e){zt.call(this,e)}},(Et=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=function(e,t,n){for(var r in t)C(e,r,t[r],n);return e}(Rt.prototype,{then:function(e,t){var n,r,o,i=Lt((n=Rt,void 0===(o=c(this).constructor)||void 0==(r=c(o)[ot])?n:E(r)));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=Dt?$t.domain:void 0,this._c.push(i),this._a&&this._a.push(i),this._s&&Ut(this,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),jt=function(){var e=new Et;this.promise=e,this.resolve=O(Ht,e,1),this.reject=O(zt,e,1)},wt.f=Lt=function(e){return e===Rt||e===At?new jt(e):Ot(e)}),T(T.G+T.W+T.F*!Vt,{Promise:Rt}),we(Rt,Nt),It=a[Nt],f&&It&&!It[xt]&&m.f(It,xt,{configurable:!0,get:function(){return this}}),At=s[Nt],T(T.S+T.F*!Vt,Nt,{reject:function(e){var t=Lt(this);return(0,t.reject)(e),t.promise}}),T(T.S+T.F*!Vt,Nt,{resolve:function(e){return function(e,t){if(c(e),u(t)&&t.constructor===e)return t;var n=wt.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),T(T.S+T.F*!(Vt&&function(e,t){if(!t&&!Ct)return!1;var n=!1;try{var r=[7],o=r[kt]();o.next=function(){return{done:n=!0}},r[kt]=function(){return o},e(r)}catch(e){}return n}(function(e){Rt.all(e).catch(Ft)})),Nt,{all:function(e){var t=this,n=Lt(t),r=n.resolve,o=n.reject,i=St(function(){var n=[],i=0,a=1;rt(e,!1,function(e){var s=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i.e&&o(i.v),n.promise},race:function(e){var t=this,n=Lt(t),r=n.reject,o=St(function(){rt(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o.e&&r(o.v),n.promise}});var Gt=["off","error","warn","info","log","debug"],Xt={};global.console;function Kt(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return Xt[t]&&Xt[t][e]}function Zt(e){return e.map(function(e){return e="[object object]"===Object.prototype.toString.call(e).toLowerCase()?JSON.stringify(e):String(e)})}global.setTimeout;var Qt=global.setTimeoutNative;function Yt(e,t,n){if(e.hasOwnProperty(t)){var r=e[t];Object.defineProperty(e,t,{get:function(){return r},set:function(r){if(this===e)throw Error("Cannot assign to read only property "+t+" of "+n);return Object.defineProperty(this,t,{value:r,writable:!0}),r}})}}!function(){if(void 0===setTimeout&&"function"==typeof Qt){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Qt(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}(),function(){if(Gt.forEach(function(e){var t=Gt.indexOf(e);Xt[e]={},Gt.forEach(function(n){var r=Gt.indexOf(n);r<=t&&(Xt[e][n]=!0)})}),global.WXEnvironment&&"Web"!==global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("debug")&&global.nativeLog.apply(global,Zt(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("log")&&global.nativeLog.apply(global,Zt(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("info")&&global.nativeLog.apply(global,Zt(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("warn")&&global.nativeLog.apply(global,Zt(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("error")&&global.nativeLog.apply(global,Zt(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,o=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:o},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];Kt("error")&&console.__ori__.error.apply(console,e)}}}();var en={framework:"0.24.4",transformer:">=0.1.5 <0.5"};function tn(e,t,n){return t+"@"+n+"#"+e}var nn=function(e){this.instanceId=String(e),this.lastCallbackId=0,this.callbacks={},this.hooks={}};nn.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},nn.prototype.remove=function(e){var t=this.callbacks[e];return delete this.callbacks[e],t},nn.prototype.registerHook=function(e,t,n,r){var o=tn(e,t,n);this.hooks[o]&&console.warn('[JS Framework] Override an existing component hook "'+o+'".'),this.hooks[o]=r},nn.prototype.triggerHook=function(e,t,n,r){var o=tn(e,t,n),i=this.hooks[o];if("function"!=typeof i)return console.error("[JS Framework] Invalid hook function type ("+typeof i+') on "'+o+'".'),null;var a=null;try{a=i.apply(null,r||[])}catch(e){console.error('[JS Framework] Failed to execute the hook function on "'+o+'".')}return a},nn.prototype.consume=function(e,t,n){var r=this.callbacks[e];return void 0!==n&&!1!==n||delete this.callbacks[e],"function"==typeof r?r(t):new Error('invalid callback id "'+e+'"')},nn.prototype.close=function(){this.callbacks={},this.hooks={}};var rn=1;function on(){return(rn++).toString()}function an(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1)}function sn(e){if("function"!=typeof btoa)return"";var t=Array.prototype.map.call(new Uint8Array(e),function(e){return String.fromCharCode(e)}).join("");return btoa(t)}function un(e){if(!e||"object"!=typeof e)return!0;for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}var cn={};function ln(e){return cn[e]}function fn(e){var t=cn[e];return t&&t.taskCenter?t.taskCenter:null}function pn(e,t,n){var r=e.documentElement;if(!(r.pureChildren.length>0||t.parentNode)){var o,i,a=r.children,s=a.indexOf(n);s<0?a.push(t):a.splice(s,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,hn(t,r)):(t.children.forEach(function(e){e.parentNode=t}),dn(e,t),t.docId=e.id,t.ownerDocument=e,hn(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),o=e,i=t.toJSON(),o&&o.taskCenter&&"function"==typeof o.taskCenter.send&&o.taskCenter.send("dom",{action:"createBody"},[i])):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function dn(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function hn(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocument.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){hn(t,e)})}function vn(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function yn(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function mn(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),r&&(o&&(o.nextSibling=e),e.previousSibling=o,e.nextSibling=i,i&&(i.previousSibling=e)),n}function _n(e,t,n,r){var o=t.indexOf(e);if(o<0)return-1;if(r){var i=t[o-1],a=t[o+1];i&&(i.nextSibling=a),a&&(a.previousSibling=i)}t.splice(o,1);var s=n;o<=n&&(s=n-1);var u=t[s-1],c=t[s];return t.splice(s,0,e),r&&(u&&(u.nextSibling=e),e.previousSibling=u,e.nextSibling=c,c&&(c.previousSibling=e)),o===s?-1:n}function gn(e,t,n){var r=t.indexOf(e);if(!(r<0)){if(n){var o=t[r-1],i=t[r+1];o&&(o.nextSibling=i),i&&(i.previousSibling=o)}t.splice(r,1)}}var bn,wn=function(){this.nodeId=on(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null};wn.prototype.destroy=function(){var e=ln(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var Sn={};var xn="div",kn=["click","longpress","touchstart","touchmove","touchend","panstart","panmove","panend","horizontalpan","verticalpan","swipe"];function Cn(e,t){ln(e).nodeMap[t.nodeId]=t}var En=function(e){function t(t,n,r){void 0===t&&(t=xn),e.call(this);var o=Sn[t];if(o&&!r)return new o(t,n,!0);n=n||{},this.nodeType=1,this.nodeId=on(),this.ref=this.nodeId,this.type=t,this.attr=n.attr||{},this.style=n.style||{},this.classStyle=n.classStyle||{},this.classList=n.classList||[],this.event={},this.children=[],this.pureChildren=[]}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.appendChild=function(e){if(!e.parentNode||e.parentNode===this)if(e.parentNode){if(_n(e,this.children,this.children.length,!0),1===e.nodeType){var t=_n(e,this.pureChildren,this.pureChildren.length),n=fn(this.docId);if(n&&t>=0)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(hn(e,this),mn(e,this.children,this.children.length,!0),this.docId&&Cn(this.docId,e),1===e.nodeType){mn(e,this.pureChildren,this.pureChildren.length);var r=fn(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},t.prototype.insertBefore=function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(_n(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=vn(t),r=_n(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=fn(this.docId);if(o&&r>=0)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(hn(e,this),mn(e,this.children,this.children.indexOf(t),!0),this.docId&&Cn(this.docId,e),1===e.nodeType){var i=vn(t),a=mn(e,this.pureChildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=fn(this.docId);if(s)return s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},t.prototype.insertAfter=function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(_n(e,this.children,this.children.indexOf(t)+1,!0),1===e.nodeType){var n=_n(e,this.pureChildren,this.pureChildren.indexOf(yn(t))+1),r=fn(this.docId);if(r&&n>=0)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(hn(e,this),mn(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&Cn(this.docId,e),1===e.nodeType){var o=mn(e,this.pureChildren,this.pureChildren.indexOf(yn(t))+1),i=fn(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},t.prototype.removeChild=function(e,t){if(e.parentNode&&(gn(e,this.children,!0),1===e.nodeType)){gn(e,this.pureChildren);var n=fn(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},t.prototype.clear=function(){var e=fn(this.docId);e&&this.pureChildren.forEach(function(t){e.send("dom",{action:"removeElement"},[t.ref])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},t.prototype.setAttr=function(e,t,n){if(this.attr[e]!==t||!1===n){this.attr[e]=t;var r=fn(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateAttrs"},[this.ref,o])}}},t.prototype.setAttrs=function(e,t){if(!un(e)){var n={};for(var r in e)this.attr[r]!==e[r]&&(this.attr[r]=e[r],n[r]=e[r]);if(!un(n)){var o=fn(this.docId);!t&&o&&o.send("dom",{action:"updateAttrs"},[this.ref,n])}}},t.prototype.setStyle=function(e,t,n){if(this.style[e]!==t||!1===n){this.style[e]=t;var r=fn(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},t.prototype.setStyles=function(e,t){if(!un(e)){var n={};for(var r in e)this.style[r]!==e[r]&&(this.style[r]=e[r],n[r]=e[r]);if(!un(n)){var o=fn(this.docId);!t&&o&&o.send("dom",{action:"updateStyle"},[this.ref,n])}}},t.prototype.setClassStyle=function(e){for(var t in this.classStyle)this.classStyle[t]="";Object.assign(this.classStyle,e);var n=fn(this.docId);n&&n.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},t.prototype.addEvent=function(e,t,n){if(this.event||(this.event={}),!this.event[e]){this.event[e]={handler:t,params:n};var r=fn(this.docId);r&&r.send("dom",{action:"addEvent"},[this.ref,e])}},t.prototype.removeEvent=function(e){if(this.event&&this.event[e]){delete this.event[e];var t=fn(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,e])}},t.prototype.fireEvent=function(e,t,n,r){var o=null,i=!1,a=this.event[e];if(a&&t){var s=a.handler;t.stopPropagation=function(){i=!0},o=r&&r.params?s.call.apply(s,[this].concat(r.params,[t])):s.call(this,t)}return!i&&n&&-1!==kn.indexOf(e)&&this.parentNode&&this.parentNode.fireEvent&&(t.currentTarget=this.parentNode,this.parentNode.fireEvent(e,t,n)),o},t.prototype.toStyle=function(){return Object.assign({},this.classStyle,this.style)},t.prototype.toJSON=function(){var e={ref:this.ref.toString(),type:this.type};un(this.attr)||(e.attr=this.attr),this.classList.length>0&&(e.classList=this.classList.slice());var t=this.toStyle();un(t)||(e.style=t);var n=[];for(var r in this.event){var o=this.event[r].params;o?n.push({type:r,params:o}):n.push(r)}return n.length&&(e.event=n),this.pureChildren.length&&(e.children=this.pureChildren.map(function(e){return e.toJSON()})),e},t.prototype.toString=function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"},t}(wn);bn=En;var On=function(){},jn=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:String(e)}),Object.defineProperty(this,"callbackManager",{enumerable:!0,value:new nn(e)}),On=t||function(){}};function An(e,t){var n=ln(e);return n?Array.isArray(t)?t.map(function(e){switch(e.method){case"callback":return function(e,t,n,r){return e.taskCenter.callback(t,n,r)}.apply(void 0,[n].concat(e.args));case"fireEventSync":case"fireEvent":return function(e,t,n,r,o,i){var a=e.getRef(t);return a?e.fireEvent(a,n,r,o,i):new Error('invalid element reference "'+t+'"')}.apply(void 0,[n].concat(e.args));case"componentHook":return function(e,t,n,r,o){if(!e||!e.taskCenter)return console.error('[JS Framework] Can\'t find "document" or "taskCenter".'),null;var i=null;try{i=e.taskCenter.triggerHook(t,n,r,o)}catch(e){console.error('[JS Framework] Failed to trigger the "'+n+"@"+r+'" hook on '+t+".")}return i}.apply(void 0,[n].concat(e.args))}}):void 0:new Error("[JS Framework] Failed to receiveTasks, instance ("+e+") is not available.")}jn.prototype.callback=function(e,t,n){return this.callbackManager.consume(e,t,n)},jn.prototype.registerHook=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this.callbackManager).registerHook.apply(e,t)},jn.prototype.triggerHook=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this.callbackManager).triggerHook.apply(e,t)},jn.prototype.updateData=function(e,t,n){this.send("module",{module:"dom",method:"updateComponentData"},[e,t,n])},jn.prototype.destroyCallback=function(){return this.callbackManager.close()},jn.prototype.normalize=function(e){var t=an(e);return e&&e instanceof En?e.ref:e&&e._isVue&&e.$el instanceof En?e.$el.ref:"Function"===t?this.callbackManager.add(e).toString():function(e){var t=an(e);switch(t){case"Undefined":case"Null":return"";case"RegExp":return e.toString();case"Date":return e.toISOString();case"Number":case"String":case"Boolean":case"Array":case"Object":return e;case"ArrayBuffer":return{"@type":"binary",dataType:t,base64:sn(e)};case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":return{"@type":"binary",dataType:t,base64:sn(e.buffer)};default:return JSON.stringify(e)}}(e)},jn.prototype.send=function(e,t,n,r){var o=this,i=t.action,a=t.component,s=t.ref,u=t.module,c=t.method;switch(n=n.map(function(e){return o.normalize(e)}),e){case"dom":return this[i](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,s,c,n,Object.assign({component:a},r));default:return this.moduleHandler(this.instanceId,u,c,n,r)}},jn.prototype.callDOM=function(e,t){return this[e](this.instanceId,t)},jn.prototype.callComponent=function(e,t,n,r){return this.componentHandler(this.instanceId,e,t,n,r)},jn.prototype.callModule=function(e,t,n,r){return this.moduleHandler(this.instanceId,e,t,n,r)};var In={};function Tn(e){var t=function(t){In[t]||(In[t]={}),e[t].forEach(function(e){"string"==typeof e?In[t][e]=!0:In[t][e.name]=e.args})};for(var n in e)t(n)}function Pn(e,t){return"string"==typeof t?!(!In[e]||!In[e][t]):!!In[e]}var Nn={};function Mn(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?Nn[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(Nn[e.type]=e,function(e,t){if(t&&t.length){var n=function(e){function t(){e.apply(this,arguments)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(bn);t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=fn(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Sn[e]=n}}(e.type,e.methods)))})}function $n(e){return!!Nn[e]}var Rn=[];function Dn(e,t){Ln(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Rn.push({name:e,options:t}))}function Fn(e){Rn.some(function(t,n){if(t.name===e)return Rn.splice(n,1),!0})}function Ln(e){return t=e,Rn.map(function(e){return e.name}).indexOf(t)>=0;var t}var Vn=function(e){function t(t){e.call(this),this.nodeType=8,this.nodeId=on(),this.ref=this.nodeId,this.type="comment",this.value=t,this.children=[],this.pureChildren=[]}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.toString=function(){return"\x3c!-- "+this.value+" --\x3e"},t}(wn);function Wn(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}var Un=function(e,t){this.id=e,this.batched=!1,this.updates=[],"function"==typeof t?Object.defineProperty(this,"handler",{configurable:!0,enumerable:!0,writable:!0,value:t}):console.error("[JS Runtime] invalid parameter, handler must be a function")};Un.prototype.createFinish=function(e){return(0,this.handler)([Wn("createFinish")],e)},Un.prototype.updateFinish=function(e){return(0,this.handler)([Wn("updateFinish")],e)},Un.prototype.refreshFinish=function(e){return(0,this.handler)([Wn("refreshFinish")],e)},Un.prototype.createBody=function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[Wn("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return Wn("addElement",[t.ref,e,-1])})),this.addActions(r)},Un.prototype.addElement=function(e,t,n){return n>=0||(n=-1),this.addActions(Wn("addElement",[t,e.toJSON(),n]))},Un.prototype.removeElement=function(e){if(Array.isArray(e)){var t=e.map(function(e){return Wn("removeElement",[e])});return this.addActions(t)}return this.addActions(Wn("removeElement",[e]))},Un.prototype.moveElement=function(e,t,n){return this.addActions(Wn("moveElement",[e,t,n]))},Un.prototype.setAttr=function(e,t,n){var r={};return r[t]=n,this.addActions(Wn("updateAttrs",[e,r]))},Un.prototype.setStyle=function(e,t,n){var r={};return r[t]=n,this.addActions(Wn("updateStyle",[e,r]))},Un.prototype.setStyles=function(e,t){return this.addActions(Wn("updateStyle",[e,t]))},Un.prototype.addEvent=function(e,t){return this.addActions(Wn("addEvent",[e,t]))},Un.prototype.removeEvent=function(e,t){return this.addActions(Wn("removeEvent",[e,t]))},Un.prototype.handler=function(e,t){return t&&t()},Un.prototype.addActions=function(e){var t=this.updates,n=this.handler;if(Array.isArray(e)||(e=[e]),!this.batched)return n(e);t.push.apply(t,e)};var Bn={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",removeEvent:"callRemoveEvent"};function qn(e,t,n){var r,o=t.module,i=t.method,a=t.args;return r=i,"dom"===o&&Bn[r]&&"function"==typeof global[Bn[r]]?global[Bn[i]].apply(global,[e].concat(a,["-1"])):n(e,[t],"-1")}var Jn=function e(t,n,r){var o,i;t=t?t.toString():"",this.id=t,this.URL=n,i=this,(o=t)&&(cn[o]=i),this.nodeMap={};var a,s,u=e.Listener||Un;this.listener=new u(t,r||(a=t,"function"!=typeof(s=e.handler||global.callNative)&&console.error("[JS Runtime] no default handler"),function(e){Array.isArray(e)||(e=[e]);for(var t=0;t<e.length;t++){var n=qn(a,e[t],s);if(-1===n)return n}})),this.taskCenter=new jn(t,r?function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return r.apply(void 0,t)}:e.handler),this.createDocumentElement()};Jn.prototype.getRef=function(e){return this.nodeMap[e]},Jn.prototype.open=function(){this.listener.batched=!1},Jn.prototype.close=function(){this.listener.batched=!0},Jn.prototype.createDocumentElement=function(){var e=this;if(!this.documentElement){var t=new En("document");t.docId=this.id,t.ownerDocument=this,t.role="documentElement",t.depth=0,t.ref="_documentElement",this.nodeMap._documentElement=t,this.documentElement=t,Object.defineProperty(t,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(t){pn(e,t)}}),Object.defineProperty(t,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(t,n){pn(e,t,n)}})}return this.documentElement},Jn.prototype.createBody=function(e,t){this.body||dn(this,new En(e,t));return this.body},Jn.prototype.createElement=function(e,t){return new En(e,t)},Jn.prototype.createComment=function(e){return new Vn(e)},Jn.prototype.fireEvent=function(e,t,n,r,o){if(e){(n=n||{}).type=n.type||t,n.target=e,n.currentTarget=e,n.timestamp=Date.now(),r&&function(e,t){var n=t.attrs||{};for(var r in n)e.setAttr(r,n[r],!0);var o=t.style||{};for(var i in o)e.setStyle(i,o[i],!0)}(e,r);var i="true"===this.getRef("_root").attr.bubble;return e.fireEvent(t,n,i,o)}},Jn.prototype.destroy=function(){var e;this.taskCenter.destroyCallback(),delete this.listener,delete this.nodeMap,delete this.taskCenter,e=this.id,delete cn[e]},Jn.handler=null;var zn={};var Hn,Gn,Xn=function(e,t){var n,r;n=this,r=String(e),Object.defineProperty(n,"[[CurrentInstanceId]]",{value:r}),this.config=t||{},this.document=new Jn(e,this.config.bundleUrl),this.requireModule=this.requireModule.bind(this),this.isRegisteredModule=Pn,this.isRegisteredComponent=$n};Xn.prototype.requireModule=function(e){var t=this["[[CurrentInstanceId]]"];if(t&&this.document&&this.document.taskCenter){if(Pn(e)){var n=e+"#"+t;if(!zn[n]){var r=In[e],o={},i=function(n){Object.defineProperty(o,n,{enumerable:!0,configurable:!0,get:function(){return o=e,i=n,(a=fn(r=t))&&"function"==typeof a.send?function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return a.send("module",{module:o,method:i},e)}:(console.error("[JS Framework] Failed to find taskCenter ("+r+")."),null);var r,o,i,a},set:function(r){return i=e,a=n,s=r,(u=fn(o=t))&&"function"==typeof u.send?"function"!=typeof s?(console.error("[JS Framework] "+i+"."+a+" must be assigned as a function."),null):function(e){return u.send("module",{module:i,method:a},[e])}:(console.error("[JS Framework] Failed to find taskCenter ("+o+")."),null);var o,i,a,s,u}})};for(var a in r)i(a);zn[n]=o}return zn[n]}console.warn('[JS Framework] using unregistered weex module "'+e+'"')}else console.error('[JS Framework] Failed to requireModule("'+e+'"), instance ('+t+") doesn't exist anymore.")},Xn.prototype.supports=function(e){if("string"!=typeof e)return null;var t=e.match(/^@(\w+)\/(\w+)(\.(\w+))?$/i);if(t){var n=t[1],r=t[2],o=t[4];switch(n){case"module":return Pn(r,o);case"component":return $n(r)}}return null};var Kn=/^\s*\/\/ *(\{[^}]*\}) *\r?\n/;function Zn(){return"0.24.4"}var Qn={};function Yn(e){return Qn[e]}function er(e,t,n){void 0===t&&(t={});var r=new Xn(e,t);Object.freeze(r);var o=t.bundleType||"Vue";Qn[e]=o;var i=Gn.frameworks[o];if(!i)return new Error('[JS Framework] Invalid bundle type "'+o+'".');!function(e,t,n){var r=fn(e);if(r&&"function"==typeof r.send)if(t&&n){var o="jsfm."+t+"."+n;try{if(Pn("userTrack","addPerfPoint")){var i=Object.create(null);i[o]="4",r.send("module",{module:"userTrack",method:"addPerfPoint"},[i])}}catch(e){console.error('[JS Framework] Failed to trace "'+o+'"!')}}else console.warn("[JS Framework] Invalid track type ("+t+") or value ("+n+")");else console.error("[JS Framework] Failed to create tracker!")}(e,"bundleType",o);var a,s,u,c,l=(a=e,s={weex:r,config:t,created:Date.now(),framework:o,bundleType:o},u=Gn,(c=Object.create(null)).service=Object.create(null),Rn.forEach(function(e){var t=e.name,n=e.options.create;if(n)try{var r=n(a,s,u);Object.assign(c.service,r),Object.assign(c,r.instance)}catch(e){console.error("[JS Runtime] Failed to create service "+t+".")}}),delete c.service.instance,Object.freeze(c.service),c);Object.freeze(l);var f=Object.create(null);Object.assign(f,l,{weex:r,getJSFMVersion:Zn,__WEEX_CALL_JAVASCRIPT__:An,services:l}),Object.freeze(f);var p=Object.assign({},f);return"function"==typeof i.createInstanceContext&&Object.assign(p,i.createInstanceContext(e,f,n)),Object.freeze(p),p}var tr={createInstance:function(e,t,n,r){if(Qn[e])return new Error('The instance id "'+e+'" has already been used!');var o=function(e){var t=Kn.exec(e);if(t)try{return JSON.parse(t[1]).framework}catch(e){}return"Weex"}(t);Qn[e]=o,(n=JSON.parse(JSON.stringify(n||{}))).env=JSON.parse(JSON.stringify(global.WXEnvironment||{})),n.bundleType=o;var i=Gn.frameworks[o];if(!i)return new Error('[JS Framework] Invalid bundle type "'+o+'".');"Weex"===o&&console.error('[JS Framework] COMPATIBILITY WARNING: Weex DSL 1.0 (.we) framework is no longer supported! It will be removed in the next version of WeexSDK, your page would be crash if you still using the ".we" framework. Please upgrade it to Vue.js or Rax.');var a=er(e,n,r);if("function"==typeof i.createInstance){if("Rax"===o||"Weex"===o){var s=Object.assign({config:n,created:Date.now(),framework:o},a);return i.createInstance(e,t,n,r,s)}return i.createInstance(e,t,n,r,a)}!function(e,t){var n=[],r=[];for(var o in t)n.push(o),r.push(t[o]);var i="\n    (function (global) {\n      "+e+"\n    })(Object.create(this))\n  ";(new(Function.prototype.bind.apply(Function,[null].concat(n,[i])))).apply(void 0,r)}(t,a)},createInstanceContext:er,getRoot:function(e){var t=ln(e);try{if(t&&t.body)return t.body.toJSON()}catch(e){return void console.error("[JS Framework] Failed to get the virtual dom tree.")}},getJSFMVersion:Zn,getDocument:ln,registerService:Dn,unregisterService:Fn,callJS:function(e,t){var n=Hn[Yn(e)];return n&&"function"==typeof n.receiveTasks?n.receiveTasks(e,t):An(e,t)}};function nr(e){tr[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r,o=t[0],i=Yn(o);if(i&&Hn[i]){var a=(r=Hn[i])[e].apply(r,t),s={framework:i};return"refreshInstance"===e?Rn.forEach(function(e){var t=e.options.refresh;t&&t(o,{info:s,runtime:Gn})}):"destroyInstance"===e&&(Rn.forEach(function(e){var t=e.options.destroy;t&&t(o,{info:s,runtime:Gn})}),delete Qn[o]),a}return new Error('[JS Framework] Using invalid instance id "'+o+'" when calling '+e+".")}}function rr(e,t){tr[e]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];for(var o in"function"==typeof t&&t.apply(void 0,n),Gn.frameworks){var i=Gn.frameworks[o];i&&i[e]&&i[e].apply(i,n)}}}var or={Document:Jn,Element:En,Comment:Vn,Listener:Un,TaskCenter:jn,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return"function"==typeof callNative?callNative.apply(void 0,e):(global.callNative||function(){}).apply(void 0,e)}};Jn.handler=or.sendTasks;var ir={service:{register:Dn,unregister:Fn,has:Ln},freezePrototype:function(){Object.freeze(or.Comment),Object.freeze(or.Listener),Object.freeze(or.Document.prototype),Object.freeze(or.Comment.prototype),Object.freeze(or.Listener.prototype)},init:function(e){for(var t in Hn=(Gn=e||{}).frameworks||{},function(){var e={createFinish:global.callCreateFinish,updateFinish:global.callUpdateFinish,refreshFinish:global.callRefreshFinish,createBody:global.callCreateBody,registerStyleSheets:global.callRegisterStyleSheets,addElement:global.callAddElement,removeElement:global.callRemoveElement,moveElement:global.callMoveElement,updateAttrs:global.callUpdateAttrs,updateStyle:global.callUpdateStyle,updateClassList:global.callUpdateClassList,addEvent:global.callAddEvent,removeEvent:global.callRemoveEvent},t=jn.prototype,n=function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return On(e,[{module:"dom",method:n,args:t}],"-1")}};for(var r in e)n(r);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return On(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return On(e,[{module:t,method:n,args:r}])}}(),Hn){var n=Hn[t];if("function"==typeof n.init)try{n.init(e)}catch(e){}}return rr("registerComponents",Mn),rr("registerModules",Tn),rr("registerMethods"),["destroyInstance","refreshInstance"].forEach(nr),tr},config:or};function ar(e,t){void 0===t&&(t={}),this.type=e||"message",this.data=t.data||null,this.origin=t.origin||"",this.source=t.source||null,this.ports=t.ports||[],this.target=null,this.timeStamp=Date.now()}var sr={},ur={};function cr(){}cr.prototype.postMessage=function(e){if(this._closed)throw new Error('BroadcastChannel "'+this.name+'" is closed.');var t=sr[this.name];if(t&&t.length)for(var n=0;n<t.length;++n){var r=t[n];r._closed||r===this||"function"==typeof r.onmessage&&r.onmessage(new ar("message",{data:e}))}},cr.prototype.close=function(){var e=this;if(!this._closed&&(this._closed=!0,sr[this.name])){var t=sr[this.name].filter(function(t){return t!==e});t.length?sr[this.name]=t:delete sr[this.name]}};var lr={BroadcastChannel:{create:function(e,t,n){if(ur[e]=[],"function"==typeof global.BroadcastChannel)return{};var r={BroadcastChannel:function(t){Object.defineProperty(this,"name",{configurable:!1,enumerable:!0,writable:!1,value:String(t)}),this._closed=!1,this.onmessage=null,sr[this.name]||(sr[this.name]=[]),sr[this.name].push(this),ur[e].push(this)}};return r.BroadcastChannel.prototype=cr.prototype,{instance:r}},destroy:function(e,t){ur[e].forEach(function(e){return e.close()}),delete ur[e]}}};var fr={},pr={};var dr=Object.freeze({init:function(e){fr.Document=e.Document,fr.Element=e.Element,fr.Comment=e.Comment,fr.sendTasks=e.sendTasks},createInstance:function(e,t,n,r,o){void 0===n&&(n={}),void 0===r&&(r={}),void 0===o&&(o={});var i=new fr.Document(e,n.bundleUrl),a={},s={id:e,data:r,document:i,callbacks:a},u=0;i.addCallback=function(e){return a[++u]=e,u},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},pr[e]=s;var c=Object.assign({Document:fr.Document,Element:fr.Element,Comment:fr.Comment,sendTasks:function(t){return fr.sendTasks(e,t,-1)},options:n,document:i},o),l=[],f=[];for(var p in c)l.push(p),f.push(c[p]);return l.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(l)))).apply(void 0,f),fr.sendTasks(e,[{module:"dom",method:"createFinish",args:[]}],-1),s},destroyInstance:function(e){delete pr[e]},getRoot:function(e){return pr[e].document.body.toJSON()},receiveTasks:function(e,t){var n={fireEvent:function(e,t,n,r,o){var i=pr[e].document,a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){return pr[e].document.handleCallback(t,n,r)}};if((pr[e]||{}).document&&Array.isArray(t)){var r=[];return t.forEach(function(t){var o=n[t.method],i=[].concat(t.args);"function"==typeof o&&(i.unshift(e),r.push(o.apply(void 0,i)))}),r}}}),hr=i(function(e){e.exports=function(e,t){var n=Object.freeze({});function r(e){return void 0===e||null===e}function o(e){return void 0!==e&&null!==e}function i(e){return!0===e}function a(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function s(e){return null!==e&&"object"==typeof e}var u=Object.prototype.toString;function c(e){return"[object Object]"===u.call(e)}function l(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function f(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function p(e){var t=parseFloat(e);return isNaN(t)?e:t}function d(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}d("slot,component",!0);var h=d("key,ref,slot,slot-scope,is");function v(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var y=Object.prototype.hasOwnProperty;function m(e,t){return y.call(e,t)}function _(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var g=/-(\w)/g,b=_(function(e){return e.replace(g,function(e,t){return t?t.toUpperCase():""})}),w=_(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),S=/\B([A-Z])/g,x=_(function(e){return e.replace(S,"-$1").toLowerCase()});function k(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function C(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function E(e,t){for(var n in t)e[n]=t[n];return e}function O(e,t,n){}var j=function(e,t,n){return!1},A=function(e){return e};function I(e,t){if(e===t)return!0;var n=s(e),r=s(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var o=Array.isArray(e),i=Array.isArray(t);if(o&&i)return e.length===t.length&&e.every(function(e,n){return I(e,t[n])});if(o||i)return!1;var a=Object.keys(e),u=Object.keys(t);return a.length===u.length&&a.every(function(n){return I(e[n],t[n])})}catch(e){return!1}}function T(e,t){for(var n=0;n<e.length;n++)if(I(e[n],t))return n;return-1}function P(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var N="data-server-rendered",M=["component","directive","filter"],$=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured"],R={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:j,isReservedAttr:j,isUnknownElement:j,getTagNamespace:O,parsePlatformTagName:A,mustUseProp:j,_lifecycleHooks:$};function D(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var F=/[^\w.$]/;var L,V="__proto__"in{},W="undefined"!=typeof window,U="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,B=U&&WXEnvironment.platform.toLowerCase(),q=W&&window.navigator.userAgent.toLowerCase(),J=(q&&/msie|trident/.test(q),q&&q.indexOf("msie 9.0")>0),z=q&&q.indexOf("edge/")>0,H=(q&&q.indexOf("android"),q&&/iphone|ipad|ipod|ios/.test(q)||"ios"===B),G=(q&&/chrome\/\d+/.test(q),{}.watch);if(W)try{var X={};Object.defineProperty(X,"passive",{get:function(){}}),window.addEventListener("test-passive",null,X)}catch(e){}var K=function(){return void 0===L&&(L=!W&&!U&&void 0!==global&&"server"===global.process.env.VUE_ENV),L},Z=W&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function Q(e){return"function"==typeof e&&/native code/.test(e.toString())}var Y,ee="undefined"!=typeof Symbol&&Q(Symbol)&&"undefined"!=typeof Reflect&&Q(Reflect.ownKeys);Y="undefined"!=typeof Set&&Q(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var te=O,ne=0,re=function(){this.id=ne++,this.subs=[]};re.prototype.addSub=function(e){this.subs.push(e)},re.prototype.removeSub=function(e){v(this.subs,e)},re.prototype.depend=function(){re.target&&re.target.addDep(this)},re.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},re.target=null;var oe=[];var ie=function(e,t,n,r,o,i,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},ae={child:{configurable:!0}};ae.child.get=function(){return this.componentInstance},Object.defineProperties(ie.prototype,ae);var se=function(e){void 0===e&&(e="");var t=new ie;return t.text=e,t.isComment=!0,t};function ue(e){return new ie(void 0,void 0,void 0,String(e))}var ce=Array.prototype,le=Object.create(ce);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=ce[e];D(le,e,function(){for(var n=arguments,r=[],o=arguments.length;o--;)r[o]=n[o];var i,a=t.apply(this,r),s=this.__ob__;switch(e){case"push":case"unshift":i=r;break;case"splice":i=r.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})});var fe=Object.getOwnPropertyNames(le),pe={shouldConvert:!0},de=function(e){(this.value=e,this.dep=new re,this.vmCount=0,D(e,"__ob__",this),Array.isArray(e))?((V?he:ve)(e,le,fe),this.observeArray(e)):this.walk(e)};function he(e,t,n){e.__proto__=t}function ve(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];D(e,i,t[i])}}function ye(e,t){var n;if(s(e)&&!(e instanceof ie))return m(e,"__ob__")&&e.__ob__ instanceof de?n=e.__ob__:pe.shouldConvert&&!K()&&(Array.isArray(e)||c(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new de(e)),t&&n&&n.vmCount++,n}function me(e,t,n,r,o){var i=new re,a=Object.getOwnPropertyDescriptor(e,t);if(!a||!1!==a.configurable){var s=a&&a.get,u=a&&a.set,c=!o&&ye(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=s?s.call(e):n;return re.target&&(i.depend(),c&&(c.dep.depend(),Array.isArray(t)&&function e(t){for(var n=void 0,r=0,o=t.length;r<o;r++)(n=t[r])&&n.__ob__&&n.__ob__.dep.depend(),Array.isArray(n)&&e(n)}(t))),t},set:function(t){var r=s?s.call(e):n;t===r||t!=t&&r!=r||(u?u.call(e,t):n=t,c=!o&&ye(t),i.notify())}})}}function _e(e,t,n){if(Array.isArray(e)&&l(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(t in e&&!(t in Object.prototype))return e[t]=n,n;var r=e.__ob__;return e._isVue||r&&r.vmCount?n:r?(me(r.value,t,n),r.dep.notify(),n):(e[t]=n,n)}function ge(e,t){if(Array.isArray(e)&&l(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount||m(e,t)&&(delete e[t],n&&n.dep.notify())}}de.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)me(e,t[n],e[t[n]])},de.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)ye(e[t])};var be=R.optionMergeStrategies;function we(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),a=0;a<i.length;a++)r=e[n=i[a]],o=t[n],m(e,n)?c(r)&&c(o)&&we(r,o):_e(e,n,o);return e}function Se(e,t,n){return n?function(){var r="function"==typeof t?t.call(n,n):t,o="function"==typeof e?e.call(n,n):e;return r?we(r,o):o}:t?e?function(){return we("function"==typeof t?t.call(this,this):t,"function"==typeof e?e.call(this,this):e)}:t:e}function xe(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function ke(e,t,n,r){var o=Object.create(e||null);return t?E(o,t):o}be.data=function(e,t,n){return n?Se(e,t,n):t&&"function"!=typeof t?e:Se(e,t)},$.forEach(function(e){be[e]=xe}),M.forEach(function(e){be[e+"s"]=ke}),be.watch=function(e,t,n,r){if(e===G&&(e=void 0),t===G&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var o={};for(var i in E(o,e),t){var a=o[i],s=t[i];a&&!Array.isArray(a)&&(a=[a]),o[i]=a?a.concat(s):Array.isArray(s)?s:[s]}return o},be.props=be.methods=be.inject=be.computed=function(e,t,n,r){if(!e)return t;var o=Object.create(null);return E(o,e),t&&E(o,t),o},be.provide=Se;var Ce=function(e,t){return void 0===t?e:t};function Ee(e,t,n){"function"==typeof t&&(t=t.options),function(e,t){var n=e.props;if(n){var r,o,i={};if(Array.isArray(n))for(r=n.length;r--;)"string"==typeof(o=n[r])&&(i[b(o)]={type:null});else if(c(n))for(var a in n)o=n[a],i[b(a)]=c(o)?o:{type:o};e.props=i}}(t),function(e,t){var n=e.inject;if(n){var r=e.inject={};if(Array.isArray(n))for(var o=0;o<n.length;o++)r[n[o]]={from:n[o]};else if(c(n))for(var i in n){var a=n[i];r[i]=c(a)?E({from:i},a):{from:a}}}}(t),function(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}(t);var r=t.extends;if(r&&(e=Ee(e,r,n)),t.mixins)for(var o=0,i=t.mixins.length;o<i;o++)e=Ee(e,t.mixins[o],n);var a,s={};for(a in e)u(a);for(a in t)m(e,a)||u(a);function u(r){var o=be[r]||Ce;s[r]=o(e[r],t[r],n,r)}return s}function Oe(e,t,n,r){if("string"==typeof n){var o=e[t];if(m(o,n))return o[n];var i=b(n);if(m(o,i))return o[i];var a=w(i);return m(o,a)?o[a]:o[n]||o[i]||o[a]}}function je(e,t,n,r){var o=t[e],i=!m(n,e),a=n[e];if(Ie(Boolean,o.type)&&(i&&!m(o,"default")?a=!1:Ie(String,o.type)||""!==a&&a!==x(e)||(a=!0)),void 0===a){a=function(e,t,n){if(!m(t,"default"))return;var r=t.default;if(e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n])return e._props[n];return"function"==typeof r&&"Function"!==Ae(t.type)?r.call(e):r}(r,o,e);var s=pe.shouldConvert;pe.shouldConvert=!0,ye(a),pe.shouldConvert=s}return a}function Ae(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Ie(e,t){if(!Array.isArray(t))return Ae(t)===Ae(e);for(var n=0,r=t.length;n<r;n++)if(Ae(t[n])===Ae(e))return!0;return!1}function Te(e,t,n){if(t)for(var r=t;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,e,t,n))return}catch(e){Pe(e,r,"errorCaptured hook")}}Pe(e,t,n)}function Pe(e,t,n){if(R.errorHandler)try{return R.errorHandler.call(null,e,t,n)}catch(e){Ne(e,null,"config.errorHandler")}Ne(e,t,n)}function Ne(e,t,n){if(!W&&!U||"undefined"==typeof console)throw e;console.error(e)}var Me,$e,Re=[],De=!1;function Fe(){De=!1;var e=Re.slice(0);Re.length=0;for(var t=0;t<e.length;t++)e[t]()}var Le=!1;if("undefined"!=typeof setImmediate&&Q(setImmediate))$e=function(){setImmediate(Fe)};else if("undefined"==typeof MessageChannel||!Q(MessageChannel)&&"[object MessageChannelConstructor]"!==MessageChannel.toString())$e=function(){setTimeout(Fe,0)};else{var Ve=new MessageChannel,We=Ve.port2;Ve.port1.onmessage=Fe,$e=function(){We.postMessage(1)}}if("undefined"!=typeof Promise&&Q(Promise)){var Ue=Promise.resolve();Me=function(){Ue.then(Fe),H&&setTimeout(O)}}else Me=$e;function Be(e,t){var n;if(Re.push(function(){if(e)try{e.call(t)}catch(e){Te(e,t,"nextTick")}else n&&n(t)}),De||(De=!0,Le?$e():Me()),!e&&"undefined"!=typeof Promise)return new Promise(function(e){n=e})}var qe=new Y;function Je(e){!function e(t,n){var r,o;var i=Array.isArray(t);if(!i&&!s(t)||Object.isFrozen(t))return;if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)e(t[r],n);else for(o=Object.keys(t),r=o.length;r--;)e(t[o[r]],n)}(e,qe),qe.clear()}var ze,He=_(function(e){var t="&"===e.charAt(0),n="~"===(e=t?e.slice(1):e).charAt(0),r="!"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}});function Ge(e){function t(){var e=arguments,n=t.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=n.slice(),o=0;o<r.length;o++)r[o].apply(null,e)}return t.fns=e,t}function Xe(e,t,n,o,i){var a,s,u,l,f;for(a in e)s=u=e[a],l=t[a],f=He(a),c(s)&&(u=s.handler,f.params=s.params),r(u)||(r(l)?(r(u.fns)&&(u=e[a]=Ge(u)),n(f.name,u,f.once,f.capture,f.passive,f.params)):u!==l&&(l.fns=u,e[a]=l));for(a in t)r(e[a])&&o((f=He(a)).name,t[a],f.capture)}function Ke(e,t,n){var a;e instanceof ie&&(e=e.data.hook||(e.data.hook={}));var s=e[t];function u(){n.apply(this,arguments),v(a.fns,u)}r(s)?a=Ge([u]):o(s.fns)&&i(s.merged)?(a=s).fns.push(u):a=Ge([s,u]),a.merged=!0,e[t]=a}function Ze(e,t,n,r,i){if(o(t)){if(m(t,n))return e[n]=t[n],i||delete t[n],!0;if(m(t,r))return e[n]=t[r],i||delete t[r],!0}return!1}function Qe(e){return a(e)?[ue(e)]:Array.isArray(e)?function e(t,n){var s=[];var u,c,l,f;for(u=0;u<t.length;u++)r(c=t[u])||"boolean"==typeof c||(l=s.length-1,f=s[l],Array.isArray(c)?c.length>0&&(Ye((c=e(c,(n||"")+"_"+u))[0])&&Ye(f)&&(s[l]=ue(f.text+c[0].text),c.shift()),s.push.apply(s,c)):a(c)?Ye(f)?s[l]=ue(f.text+c):""!==c&&s.push(ue(c)):Ye(c)&&Ye(f)?s[l]=ue(f.text+c.text):(i(t._isVList)&&o(c.tag)&&r(c.key)&&o(n)&&(c.key="__vlist"+n+"_"+u+"__"),s.push(c)));return s}(e):void 0}function Ye(e){return o(e)&&o(e.text)&&!1===e.isComment}function et(e,t){return(e.__esModule||ee&&"Module"===e[Symbol.toStringTag])&&(e=e.default),s(e)?t.extend(e):e}function tt(e){return e.isComment&&e.asyncFactory}function nt(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(o(n)&&(o(n.componentOptions)||tt(n)))return n}}function rt(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&at(e,t)}function ot(e,t,n){n?ze.$once(e,t):ze.$on(e,t)}function it(e,t){ze.$off(e,t)}function at(e,t,n){ze=e,Xe(t,n||{},ot,it),ze=void 0}function st(e,t){var n={};if(!e)return n;for(var r=0,o=e.length;r<o;r++){var i=e[r],a=i.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,i.context!==t&&i.fnContext!==t||!a||null==a.slot)(n.default||(n.default=[])).push(i);else{var s=a.slot,u=n[s]||(n[s]=[]);"template"===i.tag?u.push.apply(u,i.children||[]):u.push(i)}}for(var c in n)n[c].every(ut)&&delete n[c];return n}function ut(e){return e.isComment&&!e.asyncFactory||" "===e.text}function ct(e,t){t=t||{};for(var n=0;n<e.length;n++)Array.isArray(e[n])?ct(e[n],t):t[e[n].key]=e[n].fn;return t}var lt=null;function ft(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function pt(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function dt(e,t){if(t){if(e._directInactive=!1,pt(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)dt(e.$children[n]);ht(e,"activated")}}function ht(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)try{n[r].call(e)}catch(n){Te(n,e,t+" hook")}e._hasHookEvent&&e.$emit("hook:"+t)}var vt=[],yt=[],mt={},_t=!1,gt=!1,bt=0;function wt(){var e,t;for(gt=!0,vt.sort(function(e,t){return e.id-t.id}),bt=0;bt<vt.length;bt++)t=(e=vt[bt]).id,mt[t]=null,e.run();var n=yt.slice(),r=vt.slice();bt=vt.length=yt.length=0,mt={},_t=gt=!1,function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,dt(e[t],!0)}(n),function(e){var t=e.length;for(;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&ht(r,"updated")}}(r),Z&&R.devtools&&Z.emit("flush")}var St=0,xt=function(e,t,n,r,o){this.vm=e,o&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++St,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Y,this.newDepIds=new Y,this.expression="","function"==typeof t?this.getter=t:(this.getter=function(e){if(!F.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};xt.prototype.get=function(){var e,t;e=this,re.target&&oe.push(re.target),re.target=e;var n=this.vm;try{t=this.getter.call(n,n)}catch(e){if(!this.user)throw e;Te(e,n,'getter for watcher "'+this.expression+'"')}finally{this.deep&&Je(t),re.target=oe.pop(),this.cleanupDeps()}return t},xt.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},xt.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},xt.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var t=e.id;if(null==mt[t]){if(mt[t]=!0,gt){for(var n=vt.length-1;n>bt&&vt[n].id>e.id;)n--;vt.splice(n+1,0,e)}else vt.push(e);_t||(_t=!0,Be(wt))}}(this)},xt.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||s(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Te(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},xt.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},xt.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},xt.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||v(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var kt={enumerable:!0,configurable:!0,get:O,set:O};function Ct(e,t,n){kt.get=function(){return this[t][n]},kt.set=function(e){this[t][n]=e},Object.defineProperty(e,n,kt)}function Et(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;pe.shouldConvert=i;var a=function(i){o.push(i);var a=je(i,t,n,e);me(r,i,a),i in e||Ct(e,"_props",i)};for(var s in t)a(s);pe.shouldConvert=!0}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?O:k(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;c(t=e._data="function"==typeof t?Ot(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,o=(e.$options.methods,n.length);for(;o--;){var i=n[o];r&&m(r,i)||(void 0,36!==(a=(i+"").charCodeAt(0))&&95!==a&&Ct(e,"_data",i))}var a;ye(t,!0)}(e):ye(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=K();for(var o in t){var i=t[o],a="function"==typeof i?i:i.get;r||(n[o]=new xt(e,a||O,O,jt)),o in e||At(e,o,i)}}(e,t.computed),t.watch&&t.watch!==G&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)Tt(e,n,r[o]);else Tt(e,n,r)}}(e,t.watch)}function Ot(e,t){try{return e.call(t,t)}catch(e){return Te(e,t,"data()"),{}}}var jt={lazy:!0};function At(e,t,n){var r=!K();"function"==typeof n?(kt.get=r?It(t):n,kt.set=O):(kt.get=n.get?r&&!1!==n.cache?It(t):n.get:O,kt.set=n.set?n.set:O),Object.defineProperty(e,t,kt)}function It(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),re.target&&t.depend(),t.value}}function Tt(e,t,n,r){return c(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function Pt(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}function Nt(e){var t=Mt(e.$options.inject,e);t&&(pe.shouldConvert=!1,Object.keys(t).forEach(function(n){me(e,n,t[n])}),pe.shouldConvert=!0)}function Mt(e,t){if(e){for(var n=Object.create(null),r=ee?Reflect.ownKeys(e).filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}):Object.keys(e),o=0;o<r.length;o++){for(var i=r[o],a=e[i].from,s=t;s;){if(s._provided&&a in s._provided){n[i]=s._provided[a];break}s=s.$parent}if(!s&&"default"in e[i]){var u=e[i].default;n[i]="function"==typeof u?u.call(t):u}}return n}}function $t(e,t){var n,r,i,a,u;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,i=e.length;r<i;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(s(e))for(a=Object.keys(e),n=new Array(a.length),r=0,i=a.length;r<i;r++)u=a[r],n[r]=t(e[u],u,r);return o(n)&&(n._isVList=!0),n}function Rt(e,t,n,r){var o,i=this.$scopedSlots[e];if(i)n=n||{},r&&(n=E(E({},r),n)),o=i(n)||t;else{var a=this.$slots[e];a&&(a._rendered=!0),o=a||t}var s=n&&n.slot;return s?this.$createElement("template",{slot:s},o):o}function Dt(e){return Oe(this.$options,"filters",e)||A}function Ft(e,t,n,r){var o=R.keyCodes[t]||n;return o?Array.isArray(o)?-1===o.indexOf(e):o!==e:r?x(r)!==t:void 0}function Lt(e,t,n,r,o){if(n)if(s(n)){var i;Array.isArray(n)&&(n=function(e){for(var t={},n=0;n<e.length;n++)e[n]&&E(t,e[n]);return t}(n));var a=function(a){if("class"===a||"style"===a||h(a))i=e;else{var s=e.attrs&&e.attrs.type;i=r||R.mustUseProp(t,s,a)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}a in i||(i[a]=n[a],o&&((e.on||(e.on={}))["update:"+a]=function(e){n[a]=e}))};for(var u in n)a(u)}else;return e}function Vt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t?r:(Ut(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),"__static__"+e,!1),r)}function Wt(e,t,n){return Ut(e,"__once__"+t+(n?"_"+n:""),!0),e}function Ut(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&Bt(e[r],t+"_"+r,n);else Bt(e,t,n)}function Bt(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function qt(e,t){if(t)if(c(t)){var n=e.on=e.on?E({},e.on):{};for(var r in t){var o=n[r],i=t[r];n[r]=o?[].concat(o,i):i}}else;return e}function Jt(e){e._o=Wt,e._n=p,e._s=f,e._l=$t,e._t=Rt,e._q=I,e._i=T,e._m=Vt,e._f=Dt,e._k=Ft,e._b=Lt,e._v=ue,e._e=se,e._u=ct,e._g=qt}function zt(e,t,r,o,a){var s=a.options;this.data=e,this.props=t,this.children=r,this.parent=o,this.listeners=e.on||n,this.injections=Mt(s.inject,o),this.slots=function(){return st(r,o)};var u=Object.create(o),c=i(s._compiled),l=!c;c&&(this.$options=s,this.$slots=this.slots(),this.$scopedSlots=e.scopedSlots||n),s._scopeId?this._c=function(e,t,n,r){var i=fn(u,e,t,n,r,l);return i&&!Array.isArray(i)&&(i.fnScopeId=s._scopeId,i.fnContext=o),i}:this._c=function(e,t,n,r){return fn(u,e,t,n,r,l)}}function Ht(e,t,n,r){e.fnContext=n,e.fnOptions=r,t.slot&&((e.data||(e.data={})).slot=t.slot)}function Gt(e,t){for(var n in t)e[b(n)]=t[n]}Jt(zt.prototype);var Xt="@inRecycleList";function Kt(e,n,r,o){if(t&&t.taskCenter)return"function"==typeof t.taskCenter.registerHook?t.taskCenter.registerHook(e,n,r,o):void 0}var Zt=0;function Qt(e){var t=e.$options.data,n=e.$options.computed||{},r=e._data?Object.assign({},e._data):"function"==typeof t?Ot(t,e):t||{},o={};for(var i in n)o[i]=e[i];return Object.assign({},r,o)}function Yt(e){void 0===e&&(e={});var t=this,n=e.componentId;D(t,"_vmTemplate",e.vmTemplate),t._uid=n||"virtual-component-"+Zt++,t._isVue=!0,e&&e._isComponent?wn(t,e):t.$options=Ee(Sn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,ft(t),rt(t),pn(t),ht(t,"beforeCreate"),Nt(t),Et(t),Pt(t),ht(t,"created"),Kt(n,"lifecycle","attach",function(){ht(t,"beforeMount"),new xt(t,function(){return Qt(t)},function(){return t._update(t._vnode,!1)}),t._isMounted=!0,ht(t,"mounted")}),Kt(n,"lifecycle","update",function(){t._update(t._vnode,!1)}),Kt(n,"lifecycle","syncState",function(e,n){if(c(n))for(var r in n)t[r]=n[r];return Qt(t)}),Kt(n,"lifecycle","detach",function(){t.$destroy(),t._vmTemplate&&(t._vmTemplate.removeVirtualComponent(t._uid),delete t._vmTemplate)})}function en(e){var n=this,r=n.$options.componentId;(n._isMounted&&ht(n,"beforeUpdate"),n._vnode=e,n._isMounted&&r)&&function(e,n,r){if(t&&t.taskCenter)"function"==typeof t.taskCenter.updateData&&t.taskCenter.updateData(e,n,r)}(r,Qt(n),function(){ht(n,"updated")})}function tn(e){void 0===e&&(e={});var t=this;t._uid="virtual-component-template-"+Zt++,t._isVue=!0,e&&e._isComponent?wn(t,e):t.$options=Ee(Sn(t.constructor),e||{},t),t._self=t,rt(t),pn(t),Et(t),this.registerVirtualComponent()}function nn(e){var t,n,r,o;delete e.data.attrs[Xt],n=(t=e).componentOptions.Ctor,r=n.extend({}),o=r.prototype.$emit,r.prototype._init=Yt,r.prototype._update=en,r.prototype.$emit=function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];var r=this._uid,i=this._vmTemplate;return r&&i&&(t.push(r),o.apply(i,t)),o.apply(this,t)},t.componentOptions.Ctor=n.extend({methods:{registerVirtualComponent:function(){var e=this;D(e,"_virtualComponents",{}),Kt(String(e._uid),"lifecycle","create",function(t,n){var o=new r({vmTemplate:e,componentId:t,propsData:n});return o._uid=t,e._virtualComponents&&(e._virtualComponents[t]=o),Qt(o)})},removeVirtualComponent:function(e){delete this._virtualComponents[e]}},destroyed:function(){delete this._virtualComponents}}),t.componentOptions.Ctor.prototype._init=tn,t.componentOptions.Ctor.prototype._update=O;var i=sn(e),a=i.$options["@render"];if(a)try{return a.call(i)}catch(e){Te(e,i,"@render")}}var rn={init:function(e,t,n,r){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var o=e;rn.prepatch(o,o)}else{(e.componentInstance=sn(e,lt,n,r)).$mount(t?e.elm:void 0,t)}},prepatch:function(e,t){var r=t.componentOptions;!function(e,t,r,o,i){var a=!!(i||e.$options._renderChildren||o.data.scopedSlots||e.$scopedSlots!==n);if(e.$options._parentVnode=o,e.$vnode=o,e._vnode&&(e._vnode.parent=o),e.$options._renderChildren=i,e.$attrs=o.data.attrs||n,e.$listeners=r||n,t&&e.$options.props){pe.shouldConvert=!1;for(var s=e._props,u=e.$options._propKeys||[],c=0;c<u.length;c++){var l=u[c];s[l]=je(l,e.$options.props,t,e)}pe.shouldConvert=!0,e.$options.propsData=t}r=r||n;var f=e.$options._parentListeners;e.$options._parentListeners=r,at(e,r,f),a&&(e.$slots=st(i,o.context),e.$forceUpdate())}(t.componentInstance=e.componentInstance,r.propsData,r.listeners,t,r.children)},insert:function(e){var t,n=e.context,r=e.componentInstance;r._isMounted||(r._isMounted=!0,ht(r,"mounted")),e.data.keepAlive&&(n._isMounted?((t=r)._inactive=!1,yt.push(t)):dt(r,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(!(n&&(t._directInactive=!0,pt(t))||t._inactive)){t._inactive=!0;for(var r=0;r<t.$children.length;r++)e(t.$children[r]);ht(t,"deactivated")}}(t,!0):t.$destroy())}},on=Object.keys(rn);function an(e,t,a,u,c){if(!r(e)){var l=a.$options._base;if(s(e)&&(e=l.extend(e)),"function"==typeof e){var f,p,d,h,v,y,m;if(r(e.cid)&&void 0===(e=function(e,t,n){if(i(e.error)&&o(e.errorComp))return e.errorComp;if(o(e.resolved))return e.resolved;if(i(e.loading)&&o(e.loadingComp))return e.loadingComp;if(!o(e.contexts)){var a=e.contexts=[n],u=!0,c=function(){for(var e=0,t=a.length;e<t;e++)a[e].$forceUpdate()},l=P(function(n){e.resolved=et(n,t),u||c()}),f=P(function(t){o(e.errorComp)&&(e.error=!0,c())}),p=e(l,f);return s(p)&&("function"==typeof p.then?r(e.resolved)&&p.then(l,f):o(p.component)&&"function"==typeof p.component.then&&(p.component.then(l,f),o(p.error)&&(e.errorComp=et(p.error,t)),o(p.loading)&&(e.loadingComp=et(p.loading,t),0===p.delay?e.loading=!0:setTimeout(function(){r(e.resolved)&&r(e.error)&&(e.loading=!0,c())},p.delay||200)),o(p.timeout)&&setTimeout(function(){r(e.resolved)&&f(null)},p.timeout))),u=!1,e.loading?e.loadingComp:e.resolved}e.contexts.push(n)}(f=e,l,a)))return p=f,d=t,h=a,v=u,y=c,(m=se()).asyncFactory=p,m.asyncMeta={data:d,context:h,children:v,tag:y},m;t=t||{},Sn(e),o(t.model)&&function(e,t){var n=e.model&&e.model.prop||"value",r=e.model&&e.model.event||"input";(t.props||(t.props={}))[n]=t.model.value;var i=t.on||(t.on={});o(i[r])?i[r]=[t.model.callback].concat(i[r]):i[r]=t.model.callback}(e.options,t);var _=function(e,t,n){var i=t.options.props;if(!r(i)){var a={},s=e.attrs,u=e.props;if(o(s)||o(u))for(var c in i){var l=x(c);Ze(a,u,c,l,!0)||Ze(a,s,c,l,!1)}return a}}(t,e);if(i(e.options.functional))return function(e,t,r,i,a){var s=e.options,u={},c=s.props;if(o(c))for(var l in c)u[l]=je(l,c,t||n);else o(r.attrs)&&Gt(u,r.attrs),o(r.props)&&Gt(u,r.props);var f=new zt(r,u,a,i,e),p=s.render.call(null,f._c,f);if(p instanceof ie)return Ht(p,r,i,s),p;if(Array.isArray(p)){for(var d=Qe(p)||[],h=0;h<d.length;h++)Ht(d[h],r,i,s);return d}}(e,_,t,a,u);var g=t.on;if(t.on=t.nativeOn,i(e.options.abstract)){var b=t.slot;t={},b&&(t.slot=b)}!function(e){e.hook||(e.hook={});for(var t=0;t<on.length;t++){var n=on[t],r=e.hook[n],o=rn[n];e.hook[n]=r?un(o,r):o}}(t);var w,S=e.options.name||c,k=new ie("vue-component-"+e.cid+(S?"-"+S:""),t,void 0,void 0,void 0,a,{Ctor:e,propsData:_,listeners:g,tag:c,children:u},f);return(w=k).data.attrs&&Xt in w.data.attrs?nn(k):k}}}function sn(e,t,n,r){var i={_isComponent:!0,parent:t,_parentVnode:e,_parentElm:n||null,_refElm:r||null},a=e.data.inlineTemplate;return o(a)&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new e.componentOptions.Ctor(i)}function un(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}var cn=1,ln=2;function fn(e,t,n,u,c,l){return(Array.isArray(n)||a(n))&&(c=u,u=n,n=void 0),i(l)&&(c=ln),function(e,t,n,a,u){if(o(n)&&o(n.__ob__))return se();o(n)&&o(n.is)&&(t=n.is);if(!t)return se();Array.isArray(a)&&"function"==typeof a[0]&&((n=n||{}).scopedSlots={default:a[0]},a.length=0);u===ln?a=Qe(a):u===cn&&(a=function(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(a));var c,l;if("string"==typeof t){var f;l=e.$vnode&&e.$vnode.ns||R.getTagNamespace(t),c=R.isReservedTag(t)?new ie(R.parsePlatformTagName(t),n,a,void 0,void 0,e):o(f=Oe(e.$options,"components",t))?an(f,n,e,a,t):new ie(t,n,a,void 0,void 0,e)}else c=an(t,n,e,a);return Array.isArray(c)?c:o(c)?(o(l)&&function e(t,n,a){t.ns=n;"foreignObject"===t.tag&&(n=void 0,a=!0);if(o(t.children))for(var s=0,u=t.children.length;s<u;s++){var c=t.children[s];o(c.tag)&&(r(c.ns)||i(a)&&"svg"!==c.tag)&&e(c,n,a)}}(c,l),o(n)&&function(e){s(e.style)&&Je(e.style);s(e.class)&&Je(e.class)}(n),c):se()}(e,t,n,u,c)}function pn(e){e._vnode=null,e._staticTrees=null;var t=e.$options,r=e.$vnode=t._parentVnode,o=r&&r.context;e.$slots=st(t._renderChildren,o),e.$scopedSlots=n,e._c=function(t,n,r,o){return fn(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return fn(e,t,n,r,o,!0)};var i=r&&r.data;me(e,"$attrs",i&&i.attrs||n,0,!0),me(e,"$listeners",t._parentListeners||n,0,!0)}var dn,hn,vn,yn,mn,_n,gn,bn=0;function wn(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r,n._parentElm=t._parentElm,n._refElm=t._refElm;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function Sn(e){var t=e.options;if(e.super){var n=Sn(e.super);if(n!==e.superOptions){e.superOptions=n;var r=function(e){var t,n=e.options,r=e.extendOptions,o=e.sealedOptions;for(var i in n)n[i]!==o[i]&&(t||(t={}),t[i]=xn(n[i],r[i],o[i]));return t}(e);r&&E(e.extendOptions,r),(t=e.options=Ee(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function xn(e,t,n){if(Array.isArray(e)){var r=[];n=Array.isArray(n)?n:[n],t=Array.isArray(t)?t:[t];for(var o=0;o<e.length;o++)(t.indexOf(e[o])>=0||n.indexOf(e[o])<0)&&r.push(e[o]);return r}return e}function kn(e){this._init(e)}function Cn(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=t++,a.options=Ee(n.options,e),a.super=n,a.options.props&&function(e){var t=e.options.props;for(var n in t)Ct(e.prototype,"_props",n)}(a),a.options.computed&&function(e){var t=e.options.computed;for(var n in t)At(e.prototype,n,t[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,M.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=E({},a.options),o[r]=a,a}}function En(e){return e&&(e.Ctor.options.name||e.tag)}function On(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===u.call(n)&&e.test(t));var n}function jn(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=En(a.componentOptions);s&&!t(s)&&An(n,i,r,o)}}}function An(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,v(n,t)}kn.prototype._init=function(e){var t=this;t._uid=bn++,t._isVue=!0,e&&e._isComponent?wn(t,e):t.$options=Ee(Sn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,ft(t),rt(t),pn(t),ht(t,"beforeCreate"),Nt(t),Et(t),Pt(t),ht(t,"created"),t.$options.el&&t.$mount(t.$options.el)},dn=kn,hn={get:function(){return this._data}},vn={get:function(){return this._props}},Object.defineProperty(dn.prototype,"$data",hn),Object.defineProperty(dn.prototype,"$props",vn),dn.prototype.$set=_e,dn.prototype.$delete=ge,dn.prototype.$watch=function(e,t,n){if(c(t))return Tt(this,e,t,n);(n=n||{}).user=!0;var r=new xt(this,e,t,n);return n.immediate&&t.call(this,r.value),function(){r.teardown()}},mn=/^hook:/,(yn=kn).prototype.$on=function(e,t){if(Array.isArray(e))for(var n=0,r=e.length;n<r;n++)this.$on(e[n],t);else(this._events[e]||(this._events[e]=[])).push(t),mn.test(e)&&(this._hasHookEvent=!0);return this},yn.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},yn.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(e)){for(var r=0,o=e.length;r<o;r++)this.$off(e[r],t);return n}var i=n._events[e];if(!i)return n;if(!t)return n._events[e]=null,n;if(t)for(var a,s=i.length;s--;)if((a=i[s])===t||a.fn===t){i.splice(s,1);break}return n},yn.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?C(n):n;for(var r=C(arguments,1),o=0,i=n.length;o<i;o++)try{n[o].apply(t,r)}catch(n){Te(n,t,'event handler for "'+e+'"')}}return t},(_n=kn).prototype._update=function(e,t){var n=this;n._isMounted&&ht(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=lt;lt=n,n._vnode=e,o?n.$el=n.__patch__(o,e):(n.$el=n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),n.$options._parentElm=n.$options._refElm=null),lt=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},_n.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},_n.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){ht(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||v(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),ht(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}},Jt((gn=kn).prototype),gn.prototype.$nextTick=function(e){return Be(e,this)},gn.prototype._render=function(){var e,t=this,r=t.$options,o=r.render,i=r._parentVnode;i&&(t.$scopedSlots=i.data.scopedSlots||n),t.$vnode=i;try{e=o.call(t._renderProxy,t.$createElement)}catch(n){Te(n,t,"render"),e=t._vnode}return e instanceof ie||(e=se()),e.parent=i,e};var In,Tn,Pn,Nn=[String,RegExp,Array],Mn={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Nn,exclude:Nn,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)An(this.cache,e,this.keys)},watch:{include:function(e){jn(this,function(t){return On(e,t)})},exclude:function(e){jn(this,function(t){return!On(e,t)})}},render:function(){var e=this.$slots.default,t=nt(e),n=t&&t.componentOptions;if(n){var r=En(n),o=this.include,i=this.exclude;if(o&&(!r||!On(o,r))||i&&r&&On(i,r))return t;var a=this.cache,s=this.keys,u=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;a[u]?(t.componentInstance=a[u].componentInstance,v(s,u),s.push(u)):(a[u]=t,s.push(u),this.max&&s.length>parseInt(this.max)&&An(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};In=kn,Pn={get:function(){return R}},Object.defineProperty(In,"config",Pn),In.util={warn:te,extend:E,mergeOptions:Ee,defineReactive:me},In.set=_e,In.delete=ge,In.nextTick=Be,In.options=Object.create(null),M.forEach(function(e){In.options[e+"s"]=Object.create(null)}),In.options._base=In,E(In.options.components,Mn),In.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=C(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this},In.mixin=function(e){return this.options=Ee(this.options,e),this},Cn(In),Tn=In,M.forEach(function(e){Tn[e]=function(t,n){return n?("component"===e&&c(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}),Object.defineProperty(kn.prototype,"$isServer",{get:K}),Object.defineProperty(kn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),kn.version="2.5.13";var $n=1;function Rn(e){return t.createElement(e)}var Dn=Object.freeze({namespaceMap:{},createElement:Rn,createElementNS:function(e,n){return t.createElement(e+":"+n)},createTextNode:function(e){return new function(e){this.instanceId="",this.nodeId=$n++,this.parentNode=null,this.nodeType=3,this.text=e}(e)},createComment:function(e){return t.createComment(e)},insertBefore:function(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=Rn("text");r.setAttr("value",t.text),e.insertBefore(r,n)}},removeChild:function(e,t){3!==t.nodeType?e.removeChild(t):e.setAttr("value","")},appendChild:function(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=Rn("text");n.setAttr("value",t.text),e.appendChild(n)}},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.type},setTextContent:function(e,t){e.parentNode&&e.parentNode.setAttr("value",t)},setAttribute:function(e,t,n){e.setAttr(t,n)},setStyleScope:function(e,t){e.setAttr("@styleScope",t)}}),Fn={create:function(e,t){Ln(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Ln(e,!0),Ln(t))},destroy:function(e){Ln(e,!0)}};function Ln(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.componentInstance||e.elm,i=r.$refs;t?Array.isArray(i[n])?v(i[n],o):i[n]===o&&(i[n]=void 0):e.data.refInFor?Array.isArray(i[n])?i[n].indexOf(o)<0&&i[n].push(o):i[n]=[o]:i[n]=o}}d("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),d("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0);var Vn=d("text,number,password,search,email,tel,url"),Wn=new ie("",{},[]),Un=["create","activate","update","remove","destroy"];function Bn(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&o(e.data)===o(t.data)&&function(e,t){if("input"!==e.tag)return!0;var n,r=o(n=e.data)&&o(n=n.attrs)&&n.type,i=o(n=t.data)&&o(n=n.attrs)&&n.type;return r===i||Vn(r)&&Vn(i)}(e,t)||i(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&r(t.asyncFactory.error))}function qn(e,t,n){var r,i,a={};for(r=t;r<=n;++r)o(i=e[r].key)&&(a[i]=r);return a}var Jn={create:zn,update:zn,destroy:function(e){zn(e,Wn)}};function zn(e,t){(e.data.directives||t.data.directives)&&function(e,t){var n,r,o,i=e===Wn,a=t===Wn,s=Gn(e.data.directives,e.context),u=Gn(t.data.directives,t.context),c=[],l=[];for(n in u)r=s[n],o=u[n],r?(o.oldValue=r.value,Xn(o,"update",t,e),o.def&&o.def.componentUpdated&&l.push(o)):(Xn(o,"bind",t,e),o.def&&o.def.inserted&&c.push(o));if(c.length){var f=function(){for(var n=0;n<c.length;n++)Xn(c[n],"inserted",t,e)};i?Ke(t,"insert",f):f()}l.length&&Ke(t,"postpatch",function(){for(var n=0;n<l.length;n++)Xn(l[n],"componentUpdated",t,e)});if(!i)for(n in s)u[n]||Xn(s[n],"unbind",e,e,a)}(e,t)}var Hn=Object.create(null);function Gn(e,t){var n,r,o,i=Object.create(null);if(!e)return i;for(n=0;n<e.length;n++)(r=e[n]).modifiers||(r.modifiers=Hn),i[(o=r,o.rawName||o.name+"."+Object.keys(o.modifiers||{}).join("."))]=r,r.def=Oe(t.$options,"directives",r.name);return i}function Xn(e,t,n,r,o){var i=e.def&&e.def[t];if(i)try{i(n.elm,e,n,r,o)}catch(r){Te(r,n.context,"directive "+e.name+" "+t+" hook")}}var Kn=[Fn,Jn];function Zn(e,t){if(e.data.attrs||t.data.attrs){var n,r,o=t.elm,i=e.data.attrs||{},a=t.data.attrs||{};a.__ob__&&(a=t.data.attrs=E({},a));var s="function"==typeof o.setAttrs,u={};for(n in a)r=a[n],i[n]!==r&&(s?u[n]=r:o.setAttr(n,r));for(n in i)null==a[n]&&(s?u[n]=void 0:o.setAttr(n));s&&o.setAttrs(u)}}var Qn={create:Zn,update:Zn};function Yn(e,t){var n=t.elm,r=t.context,o=t.data,i=e.data;if(o.staticClass||o.class||i&&(i.staticClass||i.class)){var a=[],s=i.staticClass;s&&a.push.apply(a,s),i.class&&a.push.apply(a,i.class);var u,c,l,f,p=[],d=o.staticClass;if(d&&p.push.apply(p,d),o.class&&p.push.apply(p,o.class),"function"==typeof n.setClassList)n.setClassList(p);else{var h=(u=a,c=p,l=r.$options.style||{},f={},c.forEach(function(e){var t=l[e];E(f,t)}),u.forEach(function(e){var t=l[e];for(var n in t)f.hasOwnProperty(n)||(f[n]="")}),f);if("function"==typeof n.setStyles)n.setStyles(h);else for(var v in h)n.setStyle(v,h[v])}}}var er,tr,nr={create:Yn,update:Yn};function rr(e,t,n,r,o,i){if(r)console.log("Weex do not support event in bubble phase.");else{if(n){var a=t,s=er;t=function(t){null!==(1===arguments.length?a(t):a.apply(null,arguments))&&or(e,null,null,s)}}if(tr&&tr._virtualComponents){er._context=tr;var u=t;t=function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];var r=(t[0]||{}).componentId,o=this._context;if(r&&this._context){var i=this._context._virtualComponents||{};o=i[r]||o}try{!function(e,t,n){void 0===n&&(n=null);var r=e.fns;if(!Array.isArray(r))return"function"==typeof r?r.apply(n,t):e.apply(n,t);for(var o=r.slice(),i=0;i<o.length;i++)o[i].apply(n,t)}(u,t,o)}catch(e){Te(e,o,"Failed to invoke virtual component handler ("+r+")")}}}er.addEvent(e,t,i)}}function or(e,t,n,r){(r||er).removeEvent(e)}function ir(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};er=t.elm,tr=t.context,Xe(n,r,rr,or,t.context),er=void 0,tr=void 0}}var ar={create:ir,update:ir},sr=_(b);function ur(e,t){if(e.data.style||t.data.style){var n,r,o=t.elm,i=e.data.style||{},a=t.data.style||{},s=a.__ob__;Array.isArray(a)&&(a=t.data.style=function(e){for(var t={},n=0;n<e.length;n++)e[n]&&E(t,e[n]);return t}(a)),s&&(a=t.data.style=E({},a));var u="function"==typeof o.setStyles,c={};for(r in i)a[r]||(u?c[sr(r)]="":o.setStyle(sr(r),""));for(r in a)n=a[r],u?c[sr(r)]=n:o.setStyle(sr(r),n);u&&o.setStyles(c)}}var cr={create:function(e,t){if(t.data.staticStyle){var n=t.elm,r=t.data.staticStyle,o="function"==typeof n.setStyles,i={};for(var a in r)r[a]&&(o?i[sr(a)]=r[a]:n.setStyle(sr(a),r[a]));o&&n.setStyles(i),ur(e,t)}else ur(e,t)},update:ur};function lr(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&E(t,fr(e.name||"v")),E(t,e),t}return"string"==typeof e?fr(e):void 0}}var fr=_(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}});W&&!J&&(void 0===window.ontransitionend&&window.onwebkittransitionend,void 0===window.onanimationend&&window.onwebkitanimationend);W&&window.requestAnimationFrame&&window.requestAnimationFrame.bind(window);function pr(e,t){var n=t.elm;n._leaveCb&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=lr(t.data.transition);if(r&&!n._enterCb){for(var o=r.enterClass,i=r.enterToClass,a=r.enterActiveClass,s=r.appearClass,u=r.appearToClass,c=r.appearActiveClass,l=r.beforeEnter,f=r.enter,p=r.afterEnter,d=r.enterCancelled,h=r.beforeAppear,v=r.appear,y=r.afterAppear,m=r.appearCancelled,_=lt,g=lt.$vnode;g&&g.parent;)_=(g=g.parent).context;var b=!_._isMounted||!t.isRootInsert;if(!b||v||""===v){var w=b?s:o,S=b?u:i,x=b?c:a,k=b&&h||l,C=b&&"function"==typeof v?v:f,j=b&&y||p,A=b&&m||d,I=C&&(C._length||C.length)>1,T=t.context.$options.style||{},N=T[w],M=T["@TRANSITION"]&&T["@TRANSITION"][x]||{},$=function(e,t,n,r,o,i){var a={},s=t[n],u=t[r],c=t[o];if(s)for(var l in s)a[l]=e.style[l];if(c)for(var f in c)0!==f.indexOf("transition")&&(a[f]=c[f]);u&&E(a,u);return a}(n,T,w,S,x,t.context),R=Object.keys($).length>0,D=n._enterCb=P(function(){D.cancelled?A&&A(n):j&&j(n),n._enterCb=null});if(setTimeout(function(){var e=n.parentNode,r=e&&e._pending&&e._pending[t.key];(r&&r.context===t.context&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),C&&C(n,D),R)?t.context.$requireWeexModule("animation").transition(n.ref,{styles:$,duration:M.duration||0,delay:M.delay||0,timingFunction:M.timingFunction||"linear"},I?O:D):I||D()},16),k&&k(n),N)if("function"==typeof n.setStyles)n.setStyles(N);else for(var F in N)n.setStyle(F,N[F]);R||I||D()}}}var dr=function(e){var t,n,s={},u=e.modules,c=e.nodeOps;for(t=0;t<Un.length;++t)for(s[Un[t]]=[],n=0;n<u.length;++n)o(u[n][Un[t]])&&s[Un[t]].push(u[n][Un[t]]);function l(e){var t=c.parentNode(e);o(t)&&c.removeChild(t,e)}function f(e,t,n,r,a,u,l){var f,d;if(o(e.elm)&&o(u)&&(e=u[l]=((d=new ie((f=e).tag,f.data,f.children,f.text,f.elm,f.context,f.componentOptions,f.asyncFactory)).ns=f.ns,d.isStatic=f.isStatic,d.key=f.key,d.isComment=f.isComment,d.fnContext=f.fnContext,d.fnOptions=f.fnOptions,d.fnScopeId=f.fnScopeId,d.isCloned=!0,d)),e.isRootInsert=!a,!function(e,t,n,r){var a=e.data;if(o(a)){var u=o(e.componentInstance)&&a.keepAlive;if(o(a=a.hook)&&o(a=a.init)&&a(e,!1,n,r),o(e.componentInstance))return p(e,t),i(u)&&function(e,t,n,r){for(var i,a=e;a.componentInstance;)if(a=a.componentInstance._vnode,o(i=a.data)&&o(i=i.transition)){for(i=0;i<s.activate.length;++i)s.activate[i](Wn,a);t.push(a);break}h(n,e.elm,r)}(e,t,n,r),!0}}(e,t,n,r)){var y=e.data,g=e.children,b=e.tag;if(o(b)){e.elm=e.ns?c.createElementNS(e.ns,b):c.createElement(b,e),_(e);var w=o(y)&&i(y.appendAsTree);w||(o(y)&&m(e,t),h(n,e.elm,r)),v(e,g,t),w&&(o(y)&&m(e,t),h(n,e.elm,r))}else i(e.isComment)?(e.elm=c.createComment(e.text),h(n,e.elm,r)):(e.elm=c.createTextNode(e.text),h(n,e.elm,r))}}function p(e,t){o(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,y(e)?(m(e,t),_(e)):(Ln(e),t.push(e))}function h(e,t,n){o(e)&&(o(n)?n.parentNode===e&&c.insertBefore(e,t,n):c.appendChild(e,t))}function v(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)f(t[r],n,e.elm,null,!0,t,r);else a(e.text)&&c.appendChild(e.elm,c.createTextNode(String(e.text)))}function y(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return o(e.tag)}function m(e,n){for(var r=0;r<s.create.length;++r)s.create[r](Wn,e);o(t=e.data.hook)&&(o(t.create)&&t.create(Wn,e),o(t.insert)&&n.push(e))}function _(e){var t;if(o(t=e.fnScopeId))c.setStyleScope(e.elm,t);else for(var n=e;n;)o(t=n.context)&&o(t=t.$options._scopeId)&&c.setStyleScope(e.elm,t),n=n.parent;o(t=lt)&&t!==e.context&&t!==e.fnContext&&o(t=t.$options._scopeId)&&c.setStyleScope(e.elm,t)}function g(e,t,n,r,o,i){for(;r<=o;++r)f(n[r],i,e,t,!1,n,r)}function b(e){var t,n,r=e.data;if(o(r))for(o(t=r.hook)&&o(t=t.destroy)&&t(e),t=0;t<s.destroy.length;++t)s.destroy[t](e);if(o(t=e.children))for(n=0;n<e.children.length;++n)b(e.children[n])}function w(e,t,n,r){for(;n<=r;++n){var i=t[n];o(i)&&(o(i.tag)?(S(i),b(i)):l(i.elm))}}function S(e,t){if(o(t)||o(e.data)){var n,r=s.remove.length+1;for(o(t)?t.listeners+=r:t=function(e,t){function n(){0==--n.listeners&&l(e)}return n.listeners=t,n}(e.elm,r),o(n=e.componentInstance)&&o(n=n._vnode)&&o(n.data)&&S(n,t),n=0;n<s.remove.length;++n)s.remove[n](e,t);o(n=e.data.hook)&&o(n=n.remove)?n(e,t):t()}else l(e.elm)}function x(e,t,n,r){for(var i=n;i<r;i++){var a=t[i];if(o(a)&&Bn(e,a))return i}}function k(e,t,n,a){if(e!==t){var u=t.elm=e.elm;if(i(e.isAsyncPlaceholder))o(t.asyncFactory.resolved)?O(e.elm,t,n):t.isAsyncPlaceholder=!0;else if(i(t.isStatic)&&i(e.isStatic)&&t.key===e.key&&(i(t.isCloned)||i(t.isOnce)))t.componentInstance=e.componentInstance;else{var l,p=t.data;o(p)&&o(l=p.hook)&&o(l=l.prepatch)&&l(e,t);var d=e.children,h=t.children;if(o(p)&&y(t)){for(l=0;l<s.update.length;++l)s.update[l](e,t);o(l=p.hook)&&o(l=l.update)&&l(e,t)}r(t.text)?o(d)&&o(h)?d!==h&&function(e,t,n,i,a){for(var s,u,l,p=0,d=0,h=t.length-1,v=t[0],y=t[h],m=n.length-1,_=n[0],b=n[m],S=!a;p<=h&&d<=m;)r(v)?v=t[++p]:r(y)?y=t[--h]:Bn(v,_)?(k(v,_,i),v=t[++p],_=n[++d]):Bn(y,b)?(k(y,b,i),y=t[--h],b=n[--m]):Bn(v,b)?(k(v,b,i),S&&c.insertBefore(e,v.elm,c.nextSibling(y.elm)),v=t[++p],b=n[--m]):Bn(y,_)?(k(y,_,i),S&&c.insertBefore(e,y.elm,v.elm),y=t[--h],_=n[++d]):(r(s)&&(s=qn(t,p,h)),r(u=o(_.key)?s[_.key]:x(_,t,p,h))?f(_,i,e,v.elm,!1,n,d):Bn(l=t[u],_)?(k(l,_,i),t[u]=void 0,S&&c.insertBefore(e,l.elm,v.elm)):f(_,i,e,v.elm,!1,n,d),_=n[++d]);p>h?g(e,r(n[m+1])?null:n[m+1].elm,n,d,m,i):d>m&&w(0,t,p,h)}(u,d,h,n,a):o(h)?(o(e.text)&&c.setTextContent(u,""),g(u,null,h,0,h.length-1,n)):o(d)?w(0,d,0,d.length-1):o(e.text)&&c.setTextContent(u,""):e.text!==t.text&&c.setTextContent(u,t.text),o(p)&&o(l=p.hook)&&o(l=l.postpatch)&&l(e,t)}}}function C(e,t,n){if(i(n)&&o(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var E=d("attrs,class,staticClass,staticStyle,key");function O(e,t,n,r){var a,s=t.tag,u=t.data,c=t.children;if(r=r||u&&u.pre,t.elm=e,i(t.isComment)&&o(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(o(u)&&(o(a=u.hook)&&o(a=a.init)&&a(t,!0),o(a=t.componentInstance)))return p(t,n),!0;if(o(s)){if(o(c))if(e.hasChildNodes())if(o(a=u)&&o(a=a.domProps)&&o(a=a.innerHTML)){if(a!==e.innerHTML)return!1}else{for(var l=!0,f=e.firstChild,d=0;d<c.length;d++){if(!f||!O(f,c[d],n,r)){l=!1;break}f=f.nextSibling}if(!l||f)return!1}else v(t,c,n);if(o(u)){var h=!1;for(var y in u)if(!E(y)){h=!0,m(t,n);break}!h&&u.class&&Je(u.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,t,n,a,u,l){if(!r(t)){var p,d=!1,h=[];if(r(e))d=!0,f(t,h,u,l);else{var v=o(e.nodeType);if(!v&&Bn(e,t))k(e,t,h,a);else{if(v){if(1===e.nodeType&&e.hasAttribute(N)&&(e.removeAttribute(N),n=!0),i(n)&&O(e,t,h))return C(t,h,!0),e;p=e,e=new ie(c.tagName(p).toLowerCase(),{},[],void 0,p)}var m=e.elm,_=c.parentNode(m);if(f(t,h,m._leaveCb?null:_,c.nextSibling(m)),o(t.parent))for(var g=t.parent,S=y(t);g;){for(var x=0;x<s.destroy.length;++x)s.destroy[x](g);if(g.elm=t.elm,S){for(var E=0;E<s.create.length;++E)s.create[E](Wn,g);var j=g.data.hook.insert;if(j.merged)for(var A=1;A<j.fns.length;A++)j.fns[A]()}else Ln(g);g=g.parent}o(_)?w(0,[e],0,0):o(e.tag)&&b(e)}}return C(t,h,d),t.elm}o(e)&&b(e)}}({nodeOps:Dn,modules:[Qn,nr,ar,cr,{create:pr,activate:pr,remove:function(e,t){var n=e.elm;n._enterCb&&(n._enterCb.cancelled=!0,n._enterCb());var r=lr(e.data.transition);if(!r)return t();if(n._leaveCb)return;var o=r.leaveClass,i=r.leaveToClass,a=r.leaveActiveClass,s=r.beforeLeave,u=r.leave,c=r.afterLeave,l=r.leaveCancelled,f=r.delayLeave,p=u&&(u._length||u.length)>1,d=e.context.$options.style||{},h=d[o],v=d[i]||d[a],y=d["@TRANSITION"]&&d["@TRANSITION"][a]||{},m=n._leaveCb=P(function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[e.key]=null),m.cancelled?l&&l(n):(t(),c&&c(n)),n._leaveCb=null});f?f(_):_();function _(){var t=e.context.$requireWeexModule("animation");function r(){t.transition(n.ref,{styles:v,duration:y.duration||0,delay:y.delay||0,timingFunction:y.timingFunction||"linear"},p?O:m)}m.cancelled||(e.data.show||((n.parentNode._pending||(n.parentNode._pending={}))[e.key]=e),s&&s(n),h?t.transition(n.ref,{styles:h},r):r(),u&&u(n,m),v||p||m())}}}].concat(Kn),LONG_LIST_THRESHOLD:10}),hr=Object.getOwnPropertyNames(le);function vr(e,t){var n=e.$el;return n&&"function"==typeof n[t]?function(){for(var e=arguments,r=[],o=arguments.length;o--;)r[o]=e[o];return n[t].apply(n,r)}:(te("Can't find component method \""+t+'" on '+n.type),O)}function yr(e,t){Array.isArray(t)&&(!function(e,t){for(var n=function(n,r){var o=hr[n];D(t,o,function(){for(var t=arguments,n=[],r=arguments.length;r--;)n[r]=t[r];var i=this.length,a=le[o];"function"==typeof a&&a.apply(this,n);var s=vr(e,"removeData"),u=vr(e,"insertRange"),c=vr(e,"setListData");switch(o){case"push":u(i,n);break;case"pop":s(i-1,1);break;case"shift":s(0,1);break;case"unshift":u(0,n);break;case"splice":var l=n[0],f=n[1],p=n.slice(2);f>0&&s(l,f),p.length>0&&u(l,p);break;case"sort":case"reverse":c(this.slice())}})},r=0,o=hr.length;r<o;r++)n(r)}(e,t),t.forEach(function(n,r){c(n)&&!m(n,"[[Watched]]")&&(D(n,"[[Watched]]",!0),e.$watch(function(){for(var e in n)n[e]},function(){vr(e,"updateData")(t.indexOf(n),n)},{deep:!0}))}))}var mr={name:"recycle-list",render:function(e){var t=this;if(this._vnode&&this.$options["[[UseCache]]"])return D(this.$options,"[[UseCache]]",!1),this._vnode;var n=this.$options.parent,r=this.$attrs.bindingExpression;return n&&r&&(n.$watch(r,function(){return D(t.$options,"[[UseCache]]",!0)},{deep:!0,immediate:!0}),yr(this,this.$attrs.listData),n.$watch(r,function(e){yr(t,e)})),e("weex:recycle-list",{on:this._events},this.$slots.default)},renderError:function(e,t){return e("text",{style:{fontSize:"36px",color:"#FF0000"},value:t.toString()})}};function _r(e){if(e.length)return e.map(function(e){var t,n,r=(t=e).tag?t.tag.replace(/vue\-component\-(\d+\-)?/,""):"",o={type:r};if(r){if(o.style=function(e){if(e&&e.data){var t=e.data,n=t.staticStyle,r=t.staticClass;if(e.data.style||e.data.class||n||r){var o=Object.assign({},n,e.data.style),i=e.context.$options.style||{};return[].concat(r,e.data.class).forEach(function(e){e&&i[e]&&Object.assign(o,i[e])}),o}}}(e),e.data&&(o.attr=e.data.attrs,e.data.on&&(o.events=e.data.on)),"span"===r&&((n=e).children&&1===n.children.length&&!n.children[0].tag))return o.attr=o.attr||{},o.attr.value=e.children[0].text.trim(),o}else o.type="span",o.attr={value:(e.text||"").trim()};return e.children&&e.children.length&&(o.children=_r(e.children)),o})}var gr={name:"richtext",render:function(e){return e("weex:richtext",{on:this._events,attrs:{value:_r(this.$options._renderChildren||[])}})}},br={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function wr(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?wr(nt(t.children)):e}function Sr(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[b(i)]=o[i];return t}function xr(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var kr={name:"transition",props:br,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(function(e){return e.tag||tt(e)})).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var i=wr(o);if(!i)return o;if(this._leaving)return xr(e,o);var s="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?s+"comment":s+i.tag:a(i.key)?0===String(i.key).indexOf(s)?i.key:s+i.key:i.key;var u,c,l=(i.data||(i.data={})).transition=Sr(this),f=this._vnode,p=wr(f);if(i.data.directives&&i.data.directives.some(function(e){return"show"===e.name})&&(i.data.show=!0),p&&p.data&&(u=i,(c=p).key!==u.key||c.tag!==u.tag)&&!tt(p)&&(!p.componentInstance||!p.componentInstance._vnode.isComment)){var d=p.data.transition=E({},l);if("out-in"===r)return this._leaving=!0,Ke(d,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),xr(e,o);if("in-out"===r){if(tt(i))return f;var h,v=function(){h()};Ke(l,"afterEnter",v),Ke(l,"enterCancelled",v),Ke(d,"delayLeave",function(e){h=e})}}return o}}},Cr=E({tag:String,moveClass:String},br);delete Cr.mode;var Er={RecycleList:mr,Richtext:gr,Transition:kr,TransitionGroup:{props:Cr,created:function(){var e=this.$requireWeexModule("dom");this.getPosition=function(t){return new Promise(function(n,r){e.getComponentRect(t.ref,function(e){e.result?n(e.size):r(new Error("failed to get rect for element: "+t.tag))})})};var t=this.$requireWeexModule("animation");this.animate=function(e,n){return new Promise(function(r){t.transition(e.ref,n,r)})}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Sr(this),s=0;s<o.length;s++){var u=o[s];u.tag&&null!=u.key&&0!==String(u.key).indexOf("__vlist")&&(i.push(u),n[u.key]=u,(u.data||(u.data={})).transition=a)}if(r){var c=[],l=[];r.forEach(function(e){e.data.transition=a,n[e.key]?c.push(e):l.push(e)}),this.kept=e(t,null,c),this.removed=l}return e(t,null,i)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.getMoveData(e[0].context,t)},methods:{getMoveData:function(e,t){var n=e.$options.style||{};return n["@TRANSITION"]&&n["@TRANSITION"][t]}}}},Or=d("template,script,style,element,content,slot,link,meta,svg,view,a,div,img,image,text,span,input,switch,textarea,spinner,select,slider,slider-neighbor,indicator,canvas,list,cell,header,loading,loading-indicator,refresh,scrollable,scroller,video,web,embed,tabbar,tabheader,datepicker,timepicker,marquee,countdown",!0),jr=(d("web,spinner,switch,video,textarea,canvas,indicator,marquee,countdown",!0),d("richtext,transition,transition-group",!0));d("embed,img,image,input,link,meta",!0);kn.config.mustUseProp=function(e,t,n){return!1},kn.config.isReservedTag=Or,kn.config.isRuntimeComponent=jr,kn.config.isUnknownElement=function(e){return!1},kn.options.directives={},kn.options.components=Er,kn.prototype.__patch__=dr,kn.prototype.$mount=function(e,t){return n=this,r=e&&(i=this.$document,(a=i.createComment("root")).hasAttribute=a.removeAttribute=function(){},i.documentElement.appendChild(a),a),o=t,n.$el=r,n.$options.render||(n.$options.render=se),ht(n,"beforeMount"),new xt(n,function(){n._update(n._render(),o)},O,null,!0),o=!1,null==n.$vnode&&(n._isMounted=!0,ht(n,"mounted")),n;var n,r,o,i,a},e.Vue=kn}});o(hr);var vr=i(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n={};t.createInstanceContext=function(e,t,r){void 0===r&&(r={});var o,i,a,s,u=t.weex,c=(n[e]={instanceId:e,config:u.config,document:u.document,data:r}).Vue=function(e,t){var r={};hr(r,t.document);var o=r.Vue,i=n[e],a=/^weex:/i,s=o.config.isReservedTag||function(){return!1},u=o.config.isRuntimeComponent||function(){return!1};return o.config.isReservedTag=function(e){return!u(e)&&t.supports("@component/"+e)||s(e)||a.test(e)},o.config.parsePlatformTagName=function(e){return e.replace(a,"")},o.prototype.$instanceId=e,o.prototype.$document=i.document,o.prototype.$requireWeexModule=t.requireModule,o.mixin({beforeCreate:function(){var e=this.$options;if(e.el){var t=e.data,n=("function"==typeof t?t():t)||{};e.data=Object.assign(n,i.data),i.app=this}},mounted:function(){if(this.$options.el&&t.document&&i.app===this)try{t.document.taskCenter.send("dom",{action:"createFinish"},[])}catch(e){}}}),o.prototype.$getConfig=function(){if(i.app instanceof o)return i.config},o}(e,u),l=(o=e,i=u.requireModule,a=n[o],s=i("timer"),{setTimeout:function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];return s.setTimeout(function(){t[0].apply(t,t.slice(2))},t[1]),a.document.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];return s.setInterval(function(){t[0].apply(t,t.slice(2))},t[1]),a.document.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){s.clearTimeout(e)},clearInterval:function(e){s.clearInterval(e)}}),f=Object.assign({Vue:c},l);return Object.freeze(f),f},t.destroyInstance=function(e){var t=n[e];if(t&&t.app instanceof t.Vue){try{t.app.$destroy(),t.document.destroy()}catch(e){}delete t.document,delete t.app}delete n[e]},t.refreshInstance=function(e,t){var r=n[e];if(!(r&&r.app instanceof r.Vue))return new Error("refreshInstance: instance "+e+" not found!");if(r.Vue&&r.Vue.set)for(var o in t)r.Vue.set(r.app,o,t[o]);r.document.taskCenter.send("dom",{action:"refreshFinish"},[])}}),yr=o(vr),mr=vr.createInstanceContext,_r=vr.destroyInstance,gr=vr.refreshInstance,br=Object.freeze({default:yr,__moduleExports:vr,createInstanceContext:mr,destroyInstance:_r,refreshInstance:gr});var wr=Object.freeze({$:function(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm},$el:function(e){var t=this._ids[e];if(t)return t.el},$vm:function(e){var t=this._ids[e];if(t)return t.vm},$renderThen:function(e){return this._app.differ.then(function(){e()})},$scrollTo:function(e,t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this.$el(e);n&&this._app.requireModule("dom").scrollToElement(n.ref,{offset:t})},$transition:function(e,t,n){var r=this,o=this.$el(e);o&&t&&t.styles&&this._app.requireModule("animation").transition(o.ref,t,function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];r._setStyle(o,t.styles),n&&n.apply(void 0,e)})},$getConfig:function(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t},$sendHttp:function(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead"),this._app.requireModule("stream").sendHttp(e,t)},$openURL:function(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead"),this._app.requireModule("event").openURL(e)},$setTitle:function(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead"),this._app.requireModule("pageInfo").setTitle(e)},$call:function(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}});function Sr(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&Sr.apply(void 0,[e].concat(t))}return e}function xr(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function kr(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var Cr=Object.prototype.hasOwnProperty;function Er(e,t){return Cr.call(e,t)}function Or(e,t){return function(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}}function jr(e){return null!==e&&"object"==typeof e}var Ar=Object.prototype.toString,Ir="[object Object]";function Tr(e){return Ar.call(e)===Ir}function Pr(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}var Nr,Mr="__proto__"in{};function $r(){return"object"==typeof nativeSet?nativeSet.create():new Nr}function Rr(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}"undefined"!=typeof Set&&Set.toString().match(/native code/)?Nr=Set:((Nr=function(){this.set=Object.create(null)}).prototype.has=function(e){return void 0!==this.set[e]},Nr.prototype.add=function(e){null==e||this.set[e]||(this.set[e]=1)},Nr.prototype.clear=function(){this.set=Object.create(null)});var Dr=/^@weex-component\//,Fr=/^@weex-module\//,Lr=/^\.{1,2}\//,Vr=/\.js$/,Wr=function(e){return!!e.match(Dr)},Ur=function(e){return!!e.match(Fr)},Br=function(e){return!!e.match(Lr)},qr=function(e){return!Wr(e)&&!Ur(e)&&!Br(e)};function Jr(e){return e.replace(Dr,"").replace(Fr,"")}function zr(e){return e.replace(Vr,"")}var Hr=0;function Gr(){this.id=Hr++,this.subs=[]}Gr.target=null;var Xr=[];function Kr(){Gr.target=null,Xr=[]}Gr.prototype.addSub=function(e){this.subs.push(e)},Gr.prototype.removeSub=function(e){kr(this.subs,e)},Gr.prototype.depend=function(){Gr.target&&Gr.target.addDep(this)},Gr.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()};var Zr=0;function Qr(e,t,n,r){r&&Sr(this,r);var o="function"==typeof t;this.vm=e,e._watchers.push(this),this.expression=t,this.cb=n,this.id=++Zr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=$r(),this.newDepIds=$r(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}Qr.prototype.get=function(){var e;e=this,Gr.target&&Xr.push(Gr.target),Gr.target=e;var t=this.getter.call(this.vm,this.vm);return this.deep&&function e(t,n){var r,o,i,a;n||(n=Yr).clear();i=Array.isArray(t);a=jr(t);if(i||a){if(t.__ob__){var s=t.__ob__.dep.id;if(n.has(s))return;n.add(s)}if(i)for(r=t.length;r--;)e(t[r],n);else if(a)for(o=Object.keys(t),r=o.length;r--;)e(t[o[r]],n)}}(t),Gr.target=Xr.pop(),this.cleanupDeps(),t},Qr.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Qr.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},Qr.prototype.update=function(e){this.lazy?this.dirty=!0:this.run()},Qr.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||(jr(e)||this.deep)&&!this.shallow){var t=this.value;this.value=e,this.cb.call(this.vm,e,t)}this.queued=this.shallow=!1}},Qr.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Qr.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},Qr.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||this.vm._vForRemoving||kr(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1,this.vm=this.cb=this.value=null}};var Yr=$r();var eo=Array.prototype,to=Object.create(eo);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=eo[e];xr(to,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})}),xr(eo,"$set",function(e,t){return console.warn('[JS Framework] "Array.prototype.$set" is not a standard API, it will be removed in the next version.'),e>=this.length&&(this.length=e+1),this.splice(e,1,t)[0]}),xr(eo,"$remove",function(e){console.warn('[JS Framework] "Array.prototype.$remove" is not a standard API, it will be removed in the next version.'),this.length&&("number"!=typeof e&&(e=this.indexOf(e)),e>-1&&this.splice(e,1))});var no=Object.getOwnPropertyNames(to);function ro(e){(this.value=e,this.dep=new Gr,xr(e,"__ob__",this),Array.isArray(e))?((Mr?oo:io)(e,to,no),this.observeArray(e)):this.walk(e)}function oo(e,t){e.__proto__=t}function io(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];xr(e,i,t[i])}}function ao(e,t){var n;if(jr(e))return Er(e,"__ob__")&&e.__ob__ instanceof ro?n=e.__ob__:(Array.isArray(e)||Tr(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new ro(e)),n&&t&&n.addVm(t),n}ro.prototype.walk=function(e){for(var t in e)this.convert(t,e[t])},ro.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)ao(e[t])},ro.prototype.convert=function(e,t){!function(e,t,n){var r=new Gr,o=Object.getOwnPropertyDescriptor(e,t);if(o&&!1===o.configurable)return;var i=o&&o.get,a=o&&o.set,s=ao(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(Gr.target&&(r.depend(),s&&s.dep.depend(),Array.isArray(t)))for(var o=void 0,a=0,u=t.length;a<u;a++)(o=t[a])&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){var o=i?i.call(e):n;t!==o&&(a?a.call(e,t):n=t,s=ao(t),r.notify())}})}(this.value,e,t)},ro.prototype.addVm=function(e){(this.vms||(this.vms=[])).push(e)},ro.prototype.removeVm=function(e){kr(this.vms,e)};var so=["$index","$value","$event"];function uo(e,t){(so.indexOf(t)>-1||!Pr(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function co(e){var t=e._data;Tr(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)uo(e,n[r]);ao(t,e)}function lo(){}function fo(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};"function"==typeof r?(o.get=po(r,e),o.set=lo):(o.get=r.get?!1!==r.cache?po(r.get,e):Or(r.get,e):lo,o.set=r.set?Or(r.set,e):lo),Object.defineProperty(e,n,o)}}function po(e,t){var n=new Qr(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Gr.target&&n.depend(),n.value}}var ho={nativeComponentMap:{text:!0,image:!0,container:!0,slider:{type:"slider",append:"tree"},cell:{type:"cell",append:"tree"}}},vo=ho.nativeComponentMap,yo={attr:"setAttr",style:"setStyle",event:"addEvent"};function mo(e,t,n){var r,o,i,a,s,u;bo(e,t,n.id,e),r=e,o=t,i=n.attr,So(r,o,"attr",i),function(e,t,n){if("function"!=typeof n&&!Array.isArray(n))return;if(Array.isArray(n)&&!n.length)return void t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=ko(e,n,function(e){wo(t,r,e)});wo(t,r,o)}else wo(t,r,n)}(e,t,n.classList),a=e,s=t,u=n.style,So(a,s,"style",u),function(e,t,n){if(!n)return;var r=Object.keys(n),o=r.length;for(;o--;){var i=r[o],a=n[i];"string"==typeof a&&((a=e[a])||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),s=e,u=i,c=a,t.addEvent(u,Or(c,s))}var s,u,c}(e,t,n.events)}function _o(e,t,n,r){void 0===r&&(r={}),function(e,t,n){var r=t._options&&t._options.style||{};if(!n._rootEl)return;var o="@originalRootEl";function i(e,t){"array"===Rr(e)&&e.unshift(t)}if(r[o]=n._rootEl.classStyle,"function"==typeof e){var a=ko(t,e,function(e){i(e,o),wo(n._rootEl,r,e)});i(a,o),wo(n._rootEl,r,a)}else null!=e&&(i(e,o),wo(n._rootEl,r,e))}(n.classList,e,t),function(e,t,n){var r=function(r){var o=e[r];if("function"==typeof o){var i=ko(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)};for(var o in e)r(o)}(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function go(e,t,n,r){if(e){var o=function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=ko(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}};for(var i in e)o(i)}}function bo(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return t||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;((n=i.call(e))||0===n)&&(e._ids[n]=o),ko(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function wo(e,t,n){"string"==typeof n&&(n=n.split(/\s+/)),n.forEach(function(e,t){n.splice.apply(n,[t,1].concat(e.split(/\s+/)))});for(var r={},o=n.length,i=function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})},a=0;a<o;a++)i(a);e.setClassStyle(r)}function So(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?xo(e,t,n,a,s):t[yo[n]](a,s)}}function xo(e,t,n,r,o){var i=yo[n],a=ko(e,o,function(n){function o(){t[i](r,n)}var a=e&&e._app&&e._app.differ;a?a.append("element",t.depth||0,t.ref,o):o()});t[i](r,a)}function ko(e,t,n){return e._static?t.call(e,e):new Qr(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)}).value}function Co(e,t){var n=e._app.doc.createComment("start"),r=e._app.doc.createComment("end"),o=Eo++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}var Eo=1;function Oo(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=jo(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function jo(e,t,n){return t.element?function(e,t){var n=t.parentNode;if(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,-1!==r}),r}}(t,n):function(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}(t,n)}function Ao(e,t,n){void 0===n&&(n=!1),t.element?function(e,t){void 0===t&&(t=!1);var n=[],r=e.start.nextSibling;for(;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||Io(e.start);n.forEach(function(e){Io(e)}),t||Io(e.end)}(t,n):Io(t),t._vm&&t._vm.$emit("hook:destroyed")}function Io(e){var t=e.parentNode;t&&t.removeChild(e)}function To(e,t,n,r){if(-1!==(e._app||{}).lastSignal){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),u=t,Array.isArray(u))return i=t,a=r,s=Co(o=e,n),void i.forEach(function(e){To(o,e,s,a)});var o,i,a,s,u,c,l,f;if(r=r||{},"content"===(c=t).type||"slot"===c.type)return console.debug('[JS Framework] compile "content" block by',t),void(e._content=Co(e,n));if(l=t,!r.hasOwnProperty("repeat")&&l.repeat)return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):function(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",u=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,c=Co(e,n);c.children=[],c.data=[],c.vms=[],function(e,t,n,r){var o=n.vms,i=n.children,a=r.getter,s=r.trackBy,u=r.oldStyle,c=r.key,l=r.value;function f(e,r,i){var a;u?(a=e,jr(e)?(a[c]=r,a.hasOwnProperty("INDEX")||Object.defineProperty(a,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),(a={})[c]=r,a[l]=e)):((a={})[c]=r,a[l]=e);var s=function(e,t){var n=Object.create(e);n._data=t,co(n),fo(n),n._realParent=e,e._static&&(n._static=e._static);return n}(i,a);o.push(s),To(s,t,n,{repeat:e})}var p=No(e,n,a,"repeat",function(t){if(console.debug('[JS Framework] the "repeat" item has changed',t),n&&t){var r=i.slice(),a=o.slice(),p=n.data.slice(),d={},h={};t.forEach(function(e,t){var n=s?e[s]:u?e[c]:t;null!=n&&""!==n&&(d[n]=e)});var v=[];p.forEach(function(e,t){var n=s?e[s]:u?e[c]:t;d.hasOwnProperty(n)?(h[n]={item:e,index:t,key:n,target:r[t],vm:a[t]},v.push(e)):Ao(0,r[t])}),i.length=0,o.length=0,n.data=t.slice(),n.updateMark=n.start,t.forEach(function(t,r){var a=s?t[s]:u?t[c]:r,p=h[a];p?(p.item===v[0]?v.shift():(v.$remove(p.item),jo(0,p.target,n.updateMark)),i.push(p.target),o.push(p.vm),u?p.vm=t:p.vm[l]=t,p.vm[c]=r,n.updateMark=p.target):f(t,r,e)}),delete n.updateMark}});n.data=p.slice(0),p.forEach(function(t,n){f(t,n,e)})}(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}(e,t,n));if(f=t,!r.hasOwnProperty("shown")&&f.shown)return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):function(e,t,n,r){var o={shown:!0},i=Co(e,n);n.element&&n.children&&n.children.push(i);r.repeat&&(o.repeat=r.repeat);a=e,s=t,u=i,c=o,l=No(a,u,s.shown,"shown",function(e){console.debug('[JS Framework] the "if" item was changed',e),u&&!!u.display!=!!e&&(u.display=!!e,e?To(a,s,u,c):Ao(0,u,!0))}),u.display=!!l,l&&To(a,s,u,c);var a,s,u,c,l}(e,t,n,r));var p=r.type||t.type;if("function"!=typeof p||r.hasOwnProperty("type")){var d,h,v,y,m,_,g,b=p,w=function(e,t,n){var r;e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]);e._options&&e._options.components&&(r=e._options.components[n]);t.component&&(r=r||{});return r}(e,t,b);if(w)return console.debug("[JS Framework] compile composed component by",t),h=w,v=t,y=n,m=b,_=r,g=new(0,(d=e).constructor)(m,h,d,y,void 0,{"hook:init":function(){d._static&&(this._static=d._static),bo(d,null,v.id,this),this._externalBinding={parent:d,template:v}},"hook:created":function(){!function(e,t,n,r){t=t||{},n=n||{};var o=(t._options||{}).props;Array.isArray(o)&&(o=o.reduce(function(e,t){return e[t]=!0,e},{})),go(r,o,e,t),go(n.attr,o,e,t)}(d,this,v,_.repeat)},"hook:ready":function(){this._content&&Po(d,v,this._content)}}),void _o(d,g,v,y);console.debug("[JS Framework] compile native component by",t),function(e,t,n,r){var o;(function(e){var t=e.type,n=vo[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Rr(e[r])&&"object"===Rr(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])})(t),"_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),a=r,o=e._app.doc.createBody(a)):(console.debug("[JS Framework] compile to create element for "+r),i=r,o=e._app.doc.createElement(i));var i;var a;if(!e._rootEl){e._rootEl=o;var s=e._externalBinding||{},u=s.template,c=s.parent;if(u&&u.events&&c&&o)for(var l in u.events){var f=c[u.events[l]];f&&o.addEvent(l,Or(f,c))}}mo(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append);t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var p="tree"===t.append,d=e._app||{};-1===d.lastSignal||p||(console.debug("[JS Framework] compile to append single node for",o),d.lastSignal=Oo(e,o,n));-1!==d.lastSignal&&Po(e,t,o);-1!==d.lastSignal&&p&&(console.debug("[JS Framework] compile to append whole tree for",o),d.lastSignal=Oo(e,o,n))}(e,t,n,b)}else!function(e,t,n,r,o){var i=Sr({type:r.call(e)},o),a=Co(e,n);n.element&&n.children&&n.children.push(a);ko(e,r,function(n){var r=Sr({type:n},o);Ao(0,a,!0),To(e,t,a,r)}),To(e,t,a,i)}(e,t,n,p,r)}}function Po(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return To(e,t,n),-1!==r.lastSignal})}function No(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return ko(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestValue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function Mo(e,t){if(t instanceof Mo)return t;this.timestamp=Date.now(),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function $o(e,t){var n=this,r=this._vmEvents[e];if(r){var o=new Mo(e,t);r.forEach(function(e){e.call(n,o)})}}function Ro(e,t){var n=new Mo(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Do(e,t){var n=new Mo(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}function Fo(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function Lo(e,t){if(e){var n=this._vmEvents;if(t){var r=n[e];r&&r.$remove(t)}else delete n[e]}}var Vo,Wo=["init","created","ready","destroyed"];function Uo(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app||{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]);var a,s,u,c,l=(t=t||{}).data||{};(this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,function(e,t){var n=e._options||{},r=n.events||{};for(var o in r)e.$on(o,r[o]);for(var i in t)e.$on(i,t[i]);Wo.forEach(function(t){e.$on("hook:"+t,n[t])})}(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof l?l():l,o&&Sr(this._data,o),(a=this)._watchers=[],co(a),fo(a),function(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}(a),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call(this)),this._app.doc)&&(this._parentEl=r||this._app.doc.documentElement,u=(s=this)._options||{},c=u.template||{},u.replace?c.children&&1===c.children.length?To(s,c.children[0],s._parentEl):To(s,c.children,s._parentEl):To(s,c,s._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+s._type+")"),s.$emit("hook:ready"),s._ready=!0)}(Vo=Uo.prototype).$emit=$o,Vo.$dispatch=Ro,Vo.$broadcast=Do,Vo.$on=Fo,Vo.$off=Lo,Uo.prototype.$watch=function(e,t){ko(this,e,t)},Uo.set=function e(t,n,r){if(Array.isArray(t))return t.splice(n,1,r);if(Er(t,n))t[n]=r;else if(t._isVue)e(t._data,n,r);else{var o=t.__ob__;if(o){if(o.convert(n,r),o.dep.notify(),o.vms)for(var i=o.vms.length;i--;)uo(o.vms[i],n);return r}t[n]=r}},Uo.delete=function(e,t){if(Er(e,t)){delete e[t];var n=e.__ob__;if(n){if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;)o=n.vms[r],Pr(i=t)||delete o[i]}else e._isVue&&delete e._data[t]}var o,i};var Bo={};function qo(e,t){var n=function(n){var r=Bo[n];r||(r={},Bo[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})};for(var r in e)n(r)}function Jo(e,t){return e.customComponentMap[t]}function zo(e,t,n){var r=e.customComponentMap;r[t]?console.error("[JS Framework] define a component("+t+") that already exists"):r[t]=n}var Ho=i(function(e,t){var n;t=e.exports=H,"object"==typeof process&&process.env,n=function(){},t.SEMVER_SPEC_VERSION="2.0.0";var r=256,o=Number.MAX_SAFE_INTEGER||9007199254740991,i=t.re=[],a=t.src=[],s=0,u=s++;a[u]="0|[1-9]\\d*";var c=s++;a[c]="[0-9]+";var l=s++;a[l]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var f=s++;a[f]="("+a[u]+")\\.("+a[u]+")\\.("+a[u]+")";var p=s++;a[p]="("+a[c]+")\\.("+a[c]+")\\.("+a[c]+")";var d=s++;a[d]="(?:"+a[u]+"|"+a[l]+")";var h=s++;a[h]="(?:"+a[c]+"|"+a[l]+")";var v=s++;a[v]="(?:-("+a[d]+"(?:\\."+a[d]+")*))";var y=s++;a[y]="(?:-?("+a[h]+"(?:\\."+a[h]+")*))";var m=s++;a[m]="[0-9A-Za-z-]+";var _=s++;a[_]="(?:\\+("+a[m]+"(?:\\."+a[m]+")*))";var g=s++,b="v?"+a[f]+a[v]+"?"+a[_]+"?";a[g]="^"+b+"$";var w="[v=\\s]*"+a[p]+a[y]+"?"+a[_]+"?",S=s++;a[S]="^"+w+"$";var x=s++;a[x]="((?:<|>)?=?)";var k=s++;a[k]=a[c]+"|x|X|\\*";var C=s++;a[C]=a[u]+"|x|X|\\*";var E=s++;a[E]="[v=\\s]*("+a[C]+")(?:\\.("+a[C]+")(?:\\.("+a[C]+")(?:"+a[v]+")?"+a[_]+"?)?)?";var O=s++;a[O]="[v=\\s]*("+a[k]+")(?:\\.("+a[k]+")(?:\\.("+a[k]+")(?:"+a[y]+")?"+a[_]+"?)?)?";var j=s++;a[j]="^"+a[x]+"\\s*"+a[E]+"$";var A=s++;a[A]="^"+a[x]+"\\s*"+a[O]+"$";var I=s++;a[I]="(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";var T=s++;a[T]="(?:~>?)";var P=s++;a[P]="(\\s*)"+a[T]+"\\s+",i[P]=new RegExp(a[P],"g");var N=s++;a[N]="^"+a[T]+a[E]+"$";var M=s++;a[M]="^"+a[T]+a[O]+"$";var $=s++;a[$]="(?:\\^)";var R=s++;a[R]="(\\s*)"+a[$]+"\\s+",i[R]=new RegExp(a[R],"g");var D=s++;a[D]="^"+a[$]+a[E]+"$";var F=s++;a[F]="^"+a[$]+a[O]+"$";var L=s++;a[L]="^"+a[x]+"\\s*("+w+")$|^$";var V=s++;a[V]="^"+a[x]+"\\s*("+b+")$|^$";var W=s++;a[W]="(\\s*)"+a[x]+"\\s*("+w+"|"+a[E]+")",i[W]=new RegExp(a[W],"g");var U=s++;a[U]="^\\s*("+a[E]+")\\s+-\\s+("+a[E]+")\\s*$";var B=s++;a[B]="^\\s*("+a[O]+")\\s+-\\s+("+a[O]+")\\s*$";var q=s++;a[q]="(<|>)?=?\\s*\\*";for(var J=0;J<s;J++)n(J,a[J]),i[J]||(i[J]=new RegExp(a[J]));function z(e,t){if(e instanceof H)return e;if("string"!=typeof e)return null;if(e.length>r)return null;if(!(t?i[S]:i[g]).test(e))return null;try{return new H(e,t)}catch(e){return null}}function H(e,t){if(e instanceof H){if(e.loose===t)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>r)throw new TypeError("version is longer than "+r+" characters");if(!(this instanceof H))return new H(e,t);n("SemVer",e,t),this.loose=t;var a=e.trim().match(t?i[S]:i[g]);if(!a)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+a[1],this.minor=+a[2],this.patch=+a[3],this.major>o||this.major<0)throw new TypeError("Invalid major version");if(this.minor>o||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>o||this.patch<0)throw new TypeError("Invalid patch version");a[4]?this.prerelease=a[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<o)return t}return e}):this.prerelease=[],this.build=a[5]?a[5].split("."):[],this.format()}t.parse=z,t.valid=function(e,t){var n=z(e,t);return n?n.version:null},t.clean=function(e,t){var n=z(e.trim().replace(/^[=v]+/,""),t);return n?n.version:null},t.SemVer=H,H.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},H.prototype.toString=function(){return this.version},H.prototype.compare=function(e){return n("SemVer.compare",this.version,this.loose,e),e instanceof H||(e=new H(e,this.loose)),this.compareMain(e)||this.comparePre(e)},H.prototype.compareMain=function(e){return e instanceof H||(e=new H(e,this.loose)),X(this.major,e.major)||X(this.minor,e.minor)||X(this.patch,e.patch)},H.prototype.comparePre=function(e){if(e instanceof H||(e=new H(e,this.loose)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var r=this.prerelease[t],o=e.prerelease[t];if(n("prerelease compare",t,r,o),void 0===r&&void 0===o)return 0;if(void 0===o)return 1;if(void 0===r)return-1;if(r!==o)return X(r,o)}while(++t)},H.prototype.inc=function(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var n=this.prerelease.length;--n>=0;)"number"==typeof this.prerelease[n]&&(this.prerelease[n]++,n=-2);-1===n&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=function(e,t,n,r){"string"==typeof n&&(r=n,n=void 0);try{return new H(e,n).inc(t,r).version}catch(e){return null}},t.diff=function(e,t){{if(Y(e,t))return null;var n=z(e),r=z(t);if(n.prerelease.length||r.prerelease.length){for(var o in n)if(("major"===o||"minor"===o||"patch"===o)&&n[o]!==r[o])return"pre"+o;return"prerelease"}for(var o in n)if(("major"===o||"minor"===o||"patch"===o)&&n[o]!==r[o])return o}},t.compareIdentifiers=X;var G=/^[0-9]+$/;function X(e,t){var n=G.test(e),r=G.test(t);return n&&r&&(e=+e,t=+t),n&&!r?-1:r&&!n?1:e<t?-1:e>t?1:0}function K(e,t,n){return new H(e,n).compare(new H(t,n))}function Z(e,t,n){return K(e,t,n)>0}function Q(e,t,n){return K(e,t,n)<0}function Y(e,t,n){return 0===K(e,t,n)}function ee(e,t,n){return 0!==K(e,t,n)}function te(e,t,n){return K(e,t,n)>=0}function ne(e,t,n){return K(e,t,n)<=0}function re(e,t,n,r){var o;switch(t){case"===":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e===n;break;case"!==":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e!==n;break;case"":case"=":case"==":o=Y(e,n,r);break;case"!=":o=ee(e,n,r);break;case">":o=Z(e,n,r);break;case">=":o=te(e,n,r);break;case"<":o=Q(e,n,r);break;case"<=":o=ne(e,n,r);break;default:throw new TypeError("Invalid operator: "+t)}return o}function oe(e,t){if(e instanceof oe){if(e.loose===t)return e;e=e.value}if(!(this instanceof oe))return new oe(e,t);n("comparator",e,t),this.loose=t,this.parse(e),this.semver===ie?this.value="":this.value=this.operator+this.semver.version,n("comp",this)}t.rcompareIdentifiers=function(e,t){return X(t,e)},t.major=function(e,t){return new H(e,t).major},t.minor=function(e,t){return new H(e,t).minor},t.patch=function(e,t){return new H(e,t).patch},t.compare=K,t.compareLoose=function(e,t){return K(e,t,!0)},t.rcompare=function(e,t,n){return K(t,e,n)},t.sort=function(e,n){return e.sort(function(e,r){return t.compare(e,r,n)})},t.rsort=function(e,n){return e.sort(function(e,r){return t.rcompare(e,r,n)})},t.gt=Z,t.lt=Q,t.eq=Y,t.neq=ee,t.gte=te,t.lte=ne,t.cmp=re,t.Comparator=oe;var ie={};function ae(e,t){if(e instanceof ae)return e.loose===t?e:new ae(e.raw,t);if(e instanceof oe)return new ae(e.value,t);if(!(this instanceof ae))return new ae(e,t);if(this.loose=t,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function se(e){return!e||"x"===e.toLowerCase()||"*"===e}function ue(e,t,n,r,o,i,a,s,u,c,l,f,p){return((t=se(n)?"":se(r)?">="+n+".0.0":se(o)?">="+n+"."+r+".0":">="+t)+" "+(s=se(u)?"":se(c)?"<"+(+u+1)+".0.0":se(l)?"<"+u+"."+(+c+1)+".0":f?"<="+u+"."+c+"."+l+"-"+f:"<="+s)).trim()}function ce(e,t){for(var r=0;r<e.length;r++)if(!e[r].test(t))return!1;if(t.prerelease.length){for(r=0;r<e.length;r++)if(n(e[r].semver),e[r].semver!==ie&&e[r].semver.prerelease.length>0){var o=e[r].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}function le(e,t,n){try{t=new ae(t,n)}catch(e){return!1}return t.test(e)}function fe(e,t,n,r){var o,i,a,s,u;switch(e=new H(e,r),t=new ae(t,r),n){case">":o=Z,i=ne,a=Q,s=">",u=">=";break;case"<":o=Q,i=te,a=Z,s="<",u="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(le(e,t,r))return!1;for(var c=0;c<t.set.length;++c){var l=null,f=null;if(t.set[c].forEach(function(e){e.semver===ie&&(e=new oe(">=0.0.0")),l=l||e,f=f||e,o(e.semver,l.semver,r)?l=e:a(e.semver,f.semver,r)&&(f=e)}),l.operator===s||l.operator===u)return!1;if((!f.operator||f.operator===s)&&i(e,f.semver))return!1;if(f.operator===u&&a(e,f.semver))return!1}return!0}oe.prototype.parse=function(e){var t=this.loose?i[L]:i[V],n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1],"="===this.operator&&(this.operator=""),n[2]?this.semver=new H(n[2],this.loose):this.semver=ie},oe.prototype.toString=function(){return this.value},oe.prototype.test=function(e){return n("Comparator.test",e,this.loose),this.semver===ie||("string"==typeof e&&(e=new H(e,this.loose)),re(e,this.operator,this.semver,this.loose))},oe.prototype.intersects=function(e,t){if(!(e instanceof oe))throw new TypeError("a Comparator is required");var n;if(""===this.operator)return n=new ae(e.value,t),le(this.value,n,t);if(""===e.operator)return n=new ae(this.value,t),le(e.semver,n,t);var r=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),o=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),i=this.semver.version===e.semver.version,a=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),s=re(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),u=re(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return r||o||i&&a||s||u},t.Range=ae,ae.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim(),this.range},ae.prototype.toString=function(){return this.range},ae.prototype.parseRange=function(e){var t=this.loose;e=e.trim(),n("range",e,t);var r=t?i[B]:i[U];e=e.replace(r,ue),n("hyphen replace",e),e=e.replace(i[W],"$1$2$3"),n("comparator trim",e,i[W]),e=(e=(e=e.replace(i[P],"$1~")).replace(i[R],"$1^")).split(/\s+/).join(" ");var o=t?i[L]:i[V],a=e.split(" ").map(function(e){return o=t,n("comp",r=e),l=o,r=r.trim().split(/\s+/).map(function(e){return function(e,t){n("caret",e,t);var r=t?i[F]:i[D];return e.replace(r,function(t,r,o,i,a){var s;return n("caret",e,t,r,o,i,a),se(r)?s="":se(o)?s=">="+r+".0.0 <"+(+r+1)+".0.0":se(i)?s="0"===r?">="+r+"."+o+".0 <"+r+"."+(+o+1)+".0":">="+r+"."+o+".0 <"+(+r+1)+".0.0":a?(n("replaceCaret pr",a),"-"!==a.charAt(0)&&(a="-"+a),s="0"===r?"0"===o?">="+r+"."+o+"."+i+a+" <"+r+"."+o+"."+(+i+1):">="+r+"."+o+"."+i+a+" <"+r+"."+(+o+1)+".0":">="+r+"."+o+"."+i+a+" <"+(+r+1)+".0.0"):(n("no pr"),s="0"===r?"0"===o?">="+r+"."+o+"."+i+" <"+r+"."+o+"."+(+i+1):">="+r+"."+o+"."+i+" <"+r+"."+(+o+1)+".0":">="+r+"."+o+"."+i+" <"+(+r+1)+".0.0"),n("caret return",s),s})}(e,l)}).join(" "),n("caret",r),c=o,r=r.trim().split(/\s+/).map(function(e){return t=e,r=c?i[M]:i[N],t.replace(r,function(e,r,o,i,a){var s;return n("tilde",t,e,r,o,i,a),se(r)?s="":se(o)?s=">="+r+".0.0 <"+(+r+1)+".0.0":se(i)?s=">="+r+"."+o+".0 <"+r+"."+(+o+1)+".0":a?(n("replaceTilde pr",a),"-"!==a.charAt(0)&&(a="-"+a),s=">="+r+"."+o+"."+i+a+" <"+r+"."+(+o+1)+".0"):s=">="+r+"."+o+"."+i+" <"+r+"."+(+o+1)+".0",n("tilde return",s),s});var t,r}).join(" "),n("tildes",r),n("replaceXRanges",s=r,u=o),r=s.split(/\s+/).map(function(e){return function(e,t){e=e.trim();var r=t?i[A]:i[j];return e.replace(r,function(t,r,o,i,a,s){n("xRange",e,t,r,o,i,a,s);var u=se(o),c=u||se(i),l=c||se(a),f=l;return"="===r&&f&&(r=""),u?t=">"===r||"<"===r?"<0.0.0":"*":r&&f?(c&&(i=0),l&&(a=0),">"===r?(r=">=",c?(o=+o+1,i=0,a=0):l&&(i=+i+1,a=0)):"<="===r&&(r="<",c?o=+o+1:i=+i+1),t=r+o+"."+i+"."+a):c?t=">="+o+".0.0 <"+(+o+1)+".0.0":l&&(t=">="+o+"."+i+".0 <"+o+"."+(+i+1)+".0"),n("xRange return",t),t})}(e,u)}).join(" "),n("xrange",r),n("replaceStars",a=r,o),r=a.trim().replace(i[q],""),n("stars",r),r;var r,o,a,s,u,c,l}).join(" ").split(/\s+/);return this.loose&&(a=a.filter(function(e){return!!e.match(o)})),a=a.map(function(e){return new oe(e,t)})},ae.prototype.intersects=function(e,t){if(!(e instanceof ae))throw new TypeError("a Range is required");return this.set.some(function(n){return n.every(function(n){return e.set.some(function(e){return e.every(function(e){return n.intersects(e,t)})})})})},t.toComparators=function(e,t){return new ae(e,t).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})},ae.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new H(e,this.loose));for(var t=0;t<this.set.length;t++)if(ce(this.set[t],e))return!0;return!1},t.satisfies=le,t.maxSatisfying=function(e,t,n){var r=null,o=null;try{var i=new ae(t,n)}catch(e){return null}return e.forEach(function(e){i.test(e)&&(r&&-1!==o.compare(e)||(o=new H(r=e,n)))}),r},t.minSatisfying=function(e,t,n){var r=null,o=null;try{var i=new ae(t,n)}catch(e){return null}return e.forEach(function(e){i.test(e)&&(r&&1!==o.compare(e)||(o=new H(r=e,n)))}),r},t.validRange=function(e,t){try{return new ae(e,t).range||"*"}catch(e){return null}},t.ltr=function(e,t,n){return fe(e,t,"<",n)},t.gtr=function(e,t,n){return fe(e,t,">",n)},t.outside=fe,t.prerelease=function(e,t){var n=z(e,t);return n&&n.prerelease.length?n.prerelease:null},t.intersects=function(e,t,n){return e=new ae(e,n),t=new ae(t,n),e.intersects(t)},t.coerce=function(e){if(e instanceof H)return e;if("string"!=typeof e)return null;var t=e.match(i[I]);if(null==t)return null;return z((t[1]||"0")+"."+(t[2]||"0")+"."+(t[3]||"0"))}});Ho.SEMVER_SPEC_VERSION,Ho.re,Ho.src,Ho.parse,Ho.valid,Ho.clean,Ho.SemVer,Ho.inc,Ho.diff,Ho.compareIdentifiers,Ho.rcompareIdentifiers,Ho.major,Ho.minor,Ho.patch,Ho.compare,Ho.compareLoose,Ho.rcompare,Ho.sort,Ho.rsort,Ho.gt,Ho.lt,Ho.eq,Ho.neq,Ho.gte,Ho.lte,Ho.cmp,Ho.Comparator,Ho.Range,Ho.toComparators,Ho.satisfies,Ho.maxSatisfying,Ho.minSatisfying,Ho.validRange,Ho.ltr,Ho.gtr,Ho.outside,Ho.prerelease,Ho.intersects,Ho.coerce;function Go(e){if(Ho.valid(e))return e;for(var t=(e="string"==typeof e?e:"").split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function Xo(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return r.errorMessage="Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n,o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r}function Ko(e,t,n,r){var o;if(console.debug("[JS Framework] bootstrap for "+t),Wr(t))o=Jr(t);else{if(!qr(t))return new Error("Wrong component name: "+t);if(!Jo(e,o=zr(t)))return new Error("It's not a component: "+t)}if("string"==typeof(n=Tr(n)?n:{}).transformerVersion&&"string"==typeof global.transformerVersion&&!Ho.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=function(e,t){t=Tr(t=t||global.WXEnvironment)?t:{};var n={isDowngrade:!1};if("function"===Rr(e)){var r=e.call(this,t,{semver:Ho,normalizeVersion:Go});n=(r=!!r)?Xo("custom","","custom params"):n}else{var o=(e=Tr(e)?e:{})[(t.platform||"unknow").toLowerCase()]||{};for(var i in t){var a=i,s=a.toLowerCase(),u=t[i],c=s.indexOf("version")>=0,l=s.indexOf("devicemodel")>=0,f=o[i];if(f&&c){var p=Go(f),d=Go(t[i]);if(Ho.satisfies(d,p)){n=Xo(a,u,f);break}}else if(l&&("array"===Rr(f)?f:[f]).indexOf(u)>=0){n=Xo(a,u,f);break}}}return n}(n.downgrade);if(i.isDowngrade)return e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage);n.viewport&&function(e,t){if(void 0===t&&(t={}),e&&e.callTasks)e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}(e,n.viewport),e.vm=new Uo(o,null,{_app:e},null,r)}var Zo=function(e,t){for(var n,r,o,i=[],a=arguments.length-2;a-- >0;)i[a]=arguments[a+2];if(console.debug("[JS Framework] define a component "+t),"function"==typeof(o=i.length>1?i[1]:i[0])&&(r=o,o=null),r){var s={exports:{}};r(function(t){if(Wr(t)){var n=Jr(t);return Jo(e,n)}if(Ur(t)){var r=Jr(t);return e.requireModule(r)}if(Br(t)||qr(t)){var o=zr(t);return e.commonModules[o]}},s.exports,s),o=s.exports}if(Wr(t)){var u=Jr(t);zo(e,u,o)}else if(Ur(t)){qo(((n={})[Jr(t)]=o,n))}else if(Br(t)){var c=zr(t);e.commonModules[c]=o}else if(qr(t)){var l=zr(t);o.template||o.style||o.methods?zo(e,l,o):e.commonModules[l]=o}};function Qo(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&function e(t){delete t._app;delete t._computed;delete t._css;delete t._data;delete t._ids;delete t._methods;delete t._options;delete t._parent;delete t._parentEl;delete t._rootEl;if(t._watchers){for(var n=t._watchers.length;n--;)t._watchers[n].teardown();delete t._watchers}if(t._childrenVms){for(var r=t._childrenVms.length;r--;)e(t._childrenVms[r]);delete t._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+t._type+")");t.$emit("hook:destroyed");delete t._type;delete t._vmEvents}(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.taskCenter.destroyCallback(),e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null}function Yo(e){e.differ.flush()}function ei(e,t,n,r){var o;console.debug("[JS Framework] Intialize an instance with:\n",n);var i,a=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return Zo.apply(void 0,[e].concat(t))},s=function(t,r,i){o=Ko(e,t,r,i||n),Yo(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},u=Uo,c=e.doc,l=function(t){return e.requireModule(Jr(t))},f={config:e.options,define:a,bootstrap:s,requireModule:l,document:c,Vm:u};Object.freeze(f),"function"==typeof t?i=t.toString().substr(12):t&&(i=t.toString()),i='(function(global){\n\n"use strict";\n\n '+i+" \n\n})(Object.create(this))";var p=global.WXEnvironment,d={};if(p&&"Web"!==p.platform){var h=e.requireModule("timer");Object.assign(d,{setTimeout:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return h.setTimeout(function(){t[0].apply(t,t.slice(2))},t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return h.setInterval(function(){t[0].apply(t,t.slice(2))},t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){h.clearTimeout(e)},clearInterval:function(e){h.clearInterval(e)}})}var v=Object.assign({define:a,require:function(t){return function(n){o=Ko(e,t,{},n)}},bootstrap:s,register:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return function(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),zo(e,t,n)}.apply(void 0,[e].concat(t))},render:function(t,n){o=Ko(e,t,{},n)},__weex_define__:a,__weex_bootstrap__:s,__weex_document__:c,__weex_require__:l,__weex_viewmodel__:u,weex:f},d,r);return function(e,t){if("function"!=typeof compileAndRunBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var u=0;u<i.length-1;++u)o+=i[u],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var c=e.weex||{},l=c.config||{};(n=compileAndRunBundle(o,l.bundleUrl,l.bundleDigest,l.codeCachePath))&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}(v,i)||function(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}(v,i),o}var ti=function(e){this.id=e,this.map=[],this.hooks=[]};function ni(e,t){var n=e[t];for(var r in n)n[r]()}function ri(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new ho.Document(e,this.options.bundleUrl,null,ho.Listener),this.differ=new ti(e)}ti.prototype.isEmpty=function(){return 0===this.map.length},ti.prototype.append=function(e,t,n,r){var o=this;void 0===t&&(t=0),this.hasTimer||(this.hasTimer=!0,setTimeout(function(){o.hasTimer=!1,o.flush(!0)},0));var i=this.map;i[t]||(i[t]={});var a=i[t];a[e]||(a[e]={}),"element"===e?(a[e][n]||(a[e][n]=[]),a[e][n].push(r)):a[e][n]=r},ti.prototype.flush=function(e){var t=this.map.slice();this.map.length=0,t.forEach(function(e){ni(e,"repeat"),ni(e,"shown"),function(e,t){var n=e[t];for(var r in n){var o=n[r];o.forEach(function(e){e()})}}(e,"element")});var n=this.hooks.slice();this.hooks.length=0,n.forEach(function(e){e()}),this.isEmpty()||this.flush()},ti.prototype.then=function(e){this.hooks.push(e)},ri.prototype.requireModule=function(e){return function(e,t){var n=Bo[t],r={},o=function(n){Object.defineProperty(r,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];return e.callTasks({module:t,method:n,args:r})}},set:function(r){if("function"==typeof r)return e.callTasks({module:t,method:n,args:[r]})}})};for(var i in n)o(i);return r}(this,e)},ri.prototype.updateActions=function(){return Yo(this)},ri.prototype.callTasks=function(e){return t=this,"array"!==Rr(n=e)&&(n=[n]),n.forEach(function(e){r=t.doc.taskCenter.send("module",{module:e.module,method:e.method},e.args)}),r;var t,n,r},Object.freeze(ri),Object.freeze(ri.prototype);var oi={};var ii=ho.nativeComponentMap;function ai(e){"object"==typeof e&&function(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}(Uo,e)}global.registerMethods=ai;var si={fireEvent:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return function e(t,n,r,o,i){if(console.debug('[JS Framework] Fire a "'+r+'" event on an element('+n+") in instance("+t.id+")"),!Array.isArray(n)){var a=t.doc.getRef(n);if(a){var s=t.doc.fireEvent(a,r,o,i);return t.differ.flush(),t.doc.taskCenter.send("dom",{action:"updateFinish"},[]),s}return new Error('invalid element reference "'+n+'"')}n.some(function(n){return!1!==e(t,n,r,o)})}.apply(void 0,[oi[e]].concat(t))},callback:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return function(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.doc.taskCenter.callback(t,n,r);return Yo(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}.apply(void 0,[oi[e]].concat(t))}};ai(wr),Object.freeze(Uo);var ui=Object.freeze({registerComponents:function(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?ii[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(ii[e.type]=e))})},registerModules:function(e){"object"==typeof e&&qo(e)},registerMethods:ai,createInstance:function(e,t,n,r,o){var i=(o||{}).services;Kr();var a,s=oi[e];return n=n||{},s?a=new Error('invalid instance id "'+e+'"'):(s=new ri(e,n),oi[e]=s,a=ei(s,t,r,i)),a instanceof Error?a:s},init:function(e){ho.Document=e.Document,ho.Element=e.Element,ho.Comment=e.Comment,ho.sendTasks=e.sendTasks,ho.Listener=e.Listener},refreshInstance:function(e,t){var n=oi[e];return n?function(e,t){console.debug("[JS Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):Sr(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}(n,t):new Error('invalid instance id "'+e+'"')},destroyInstance:function(e){"function"==typeof markupState&&markupState(),Kr();var t=oi[e];if(!t)return new Error('invalid instance id "'+e+'"');Qo(t),delete oi[e];var n=Math.round(e);return n>0&&(n%18||"function"!=typeof notifyTrimMemory||notifyTrimMemory()),oi},receiveTasks:function(e,t){if(oi[e]&&Array.isArray(t)){var n=[];return t.forEach(function(t){var r=si[t.method],o=[].concat(t.args);"function"==typeof r&&(o.unshift(e),n.push(r.apply(void 0,o)))}),n}return new Error('invalid instance id "'+e+'" or tasks')},getRoot:function(e){var t,n=oi[e];return n?(t=(n.doc||{}).body||{}).toJSON?t.toJSON():{}:new Error('invalid instance id "'+e+'"')}}),ci={Vanilla:dr,Vue:br,Rax:o(i(function(e){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=3)}([function(e,t,n){var r=e.exports.createUniqueKey="undefined"!=typeof Symbol?Symbol:function(e){return"[["+e+"_"+Math.random().toFixed(8).slice(2)+"]]"},o=e.exports.isObject=function(e){return"object"==typeof e&&null!==e};e.exports.LISTENERS=r("listeners"),e.exports.CAPTURE=1,e.exports.BUBBLE=2,e.exports.ATTRIBUTE=3,e.exports.newNode=function(e,t,n){var r=o(n);return{listener:e,kind:t,once:r&&Boolean(n.once),passive:r&&Boolean(n.passive),next:null}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var o=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._listeners={}}return r(e,[{key:"_addListener",value:function(e,t,n){return this._listeners[e]=this._listeners[e]||[],this._listeners[e].push({listener:t,once:n}),this}},{key:"on",value:function(e,t){return this._addListener(e,t,!1)}},{key:"once",value:function(e,t){return this._addListener(e,t,!0)}},{key:"off",value:function(e,t){return this._listeners[e]&&this._listeners[e].length?t?(this._listeners[e]=this._listeners[e].filter(function(e){return!(e.listener===t)}),this):(delete this._listeners[e],this):this}},{key:"emit",value:function(e,t){var n=this;return this._listeners[e]?(this._listeners[e].forEach(function(r){r.listener.apply(n,[t]),r.once&&n.removeListener(e,r.listener)}),this):this}}]),e}();t.default=o,e.exports=t.default},function(e,t,n){var r=n(0),o=n(15),i=n(16),a=r.isObject,s=r.LISTENERS,u=r.CAPTURE,c=r.BUBBLE,l=r.ATTRIBUTE,f=r.newNode,p=o.defineCustomEventTarget,d=i.createEventWrapper,h=i.STOP_IMMEDIATE_PROPAGATION_FLAG,v=i.PASSIVE_LISTENER_FLAG,y="undefined"!=typeof window&&void 0!==window.EventTarget,m=e.exports=function e(){var t=arguments;if(!(this instanceof e)){if(1===arguments.length&&Array.isArray(arguments[0]))return p(e,arguments[0]);if(arguments.length>0){for(var n=Array(arguments.length),r=0;r<arguments.length;++r)n[r]=t[r];return p(e,n)}throw new TypeError("Cannot call a class as a function")}Object.defineProperty(this,s,{value:Object.create(null)})};m.prototype=Object.create((y?window.EventTarget:Object).prototype,{constructor:{value:m,writable:!0,configurable:!0},addEventListener:{value:function(e,t,n){if(null==t)return!1;if("function"!=typeof t&&"object"!=typeof t)throw new TypeError('"listener" is not an object.');var r=(a(n)?Boolean(n.capture):Boolean(n))?u:c,o=this[s][e];if(null==o)return this[s][e]=f(t,r,n),!0;for(var i=null;null!=o;){if(o.listener===t&&o.kind===r)return!1;i=o,o=o.next}return i.next=f(t,r,n),!0},configurable:!0,writable:!0},removeEventListener:{value:function(e,t,n){if(null==t)return!1;for(var r=(a(n)?Boolean(n.capture):Boolean(n))?u:c,o=null,i=this[s][e];null!=i;){if(i.listener===t&&i.kind===r)return null==o?this[s][e]=i.next:o.next=i.next,!0;o=i,i=i.next}return!1},configurable:!0,writable:!0},dispatchEvent:{value:function(e){var t=e.type,n=this[s][t];if(null==n)return!0;for(var r=d(e,this),o=null;null!=n&&(n.once?null==o?this[s][t]=n.next:o.next=n.next:o=n,r[v]=n.passive,"function"==typeof n.listener?n.listener.call(this,r):n.kind!==l&&"function"==typeof n.listener.handleEvent&&n.listener.handleEvent(r),!r[h]);)n=n.next;return!r.defaultPrevented},configurable:!0,writable:!0}})},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getInstance=g,t.init=function(e){p=e.Document,e.Element,e.Comment},t.registerComponents=function(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?l[e]=!0:"object"===(void 0===e?"undefined":i(e))&&"string"==typeof e.type&&(l[e.type]=e))})},t.registerMethods=function(e){},t.registerModules=function(e){if("object"===(void 0===e?"undefined":i(e)))for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(f[t]=e[t])},t.createInstance=function(e,t,r,a,u){var l=y[e];{if(void 0!=l)throw new Error('Instance id "'+e+'" existed when create instance');var g=Date.now(),S="object"===("undefined"==typeof WXEnvironment?"undefined":i(WXEnvironment))&&WXEnvironment||{},x=n(6)(),k="function"==typeof k?k:x.Promise,C="function"==typeof C?C:x.Symbol,E="function"==typeof E?E:x.Set,O="function"==typeof O?O:x.Map,j="function"==typeof j?j:x.WeakMap,A="function"==typeof A?A:x.WeakSet,I=x.URL,T=x.URLSearchParams,P=x.FontFace,N=x.matchMedia,M=r.bundleUrl||"about:blank";r.bundleUrl?M.split("//")[0]||(M="https:"+M):console.error('Error: Must have bundleUrl option when createInstance, downgrade to "about:blank".');var $=new p(e,M),R=new I(M),D={};l=y[e]={document:$,instanceId:e,bundleUrl:M,bundleCode:t,modules:D,origin:R.origin,uid:0},function(e,t){if("object"===(void 0===f?"undefined":i(f))){var n=function(n){var r=d+n;e[r]={module:{exports:{}},isInitialized:!0},f[n].forEach(function(o){"string"==typeof o&&(o={name:o});var a=o.name;e[r].module.exports[a]=function(){for(var e=arguments,r=arguments.length,o=Array(r),s=0;s<r;s++)o[s]=e[s];var u={},c=o[o.length-1];return c&&"object"===(void 0===c?"undefined":i(c))&&c.__weex_options__&&(u=c.__weex_options__,o.pop()),t.taskCenter.send("module",{module:n,method:a},o,u)}})};for(var r in f)n(r)}}(D,$);var F=n(7)(D),L=n(8)(D),V=n(9)(L);n(11)(L,$);var W=n(12)(L,R),U=n(13)(L,k),B=U.fetch,q=U.Headers,J=U.Request,z=U.Response,H=n(14)(L),G=n(17)(L),X=n(18)(L,$),K=X.setTimeout,Z=X.clearTimeout,Q=X.setInterval,Y=X.clearInterval,ee=X.requestAnimationFrame,te=X.cancelAnimationFrame,ne=n(19)(),re=ne.atob,oe=ne.btoa,ie=n(20)(g),ae=n(21)(),se=ae.Event,ue=ae.CustomEvent,ce=new c.default,le={Promise:k,Symbol:C,Map:O,Set:E,WeakMap:j,WeakSet:A,name:"",closed:!1,atob:re,btoa:oe,performance:ie,document:$,location:W,navigator:{product:"Weex",platform:S.platform,appName:S.appName,appVersion:S.appVersion,userAgent:"Weex/"+S.weexVersion+" "+S.platform+"/"+S.osVersion+" ("+S.deviceModel+") "+S.appName+"/"+S.appVersion},screen:{width:S.deviceWidth,height:S.deviceHeight,availWidth:S.deviceWidth,availHeight:S.deviceHeight,colorDepth:24,pixelDepth:24},devicePixelRatio:S.scale,fetch:B,Headers:q,Response:z,Request:J,XMLHttpRequest:H,URL:I,URLSearchParams:T,FontFace:P,WebSocket:G,Event:se,CustomEvent:ue,matchMedia:N,setTimeout:K,clearTimeout:Z,setInterval:Q,clearInterval:Y,requestAnimationFrame:ee,cancelAnimationFrame:te,alert:function(e){var t=L(h);t.alert({message:e},function(){})},open:function(e){var t=L(v);t.push({url:e,animated:!0},_)},close:function(){var e=L(v);e.close({animated:!0},_,_)},postMessage:function(e,t){var n={origin:W.origin,data:JSON.parse(JSON.stringify(e)),type:"message",source:le};!function(e,t){var n;for(var r in y)y.hasOwnProperty(r)&&(n=y[r],"*"!==t&&t!==n.origin||(e.target=n.window,n.window.dispatchEvent(e)))}(n,t)},addEventListener:function(e,t){ce.on(e,t)},removeEventListener:function(e,t){ce.off(e,t)},dispatchEvent:function(e){ce.emit(e.type,e)},define:F,require:L,__weex_document__:$,__weex_module_supports__:b,__weex_tag_supports__:w,__weex_define__:F,__weex_require__:L,__weex_downgrade__:V,__weex_env__:S,__weex_code__:t,__weex_options__:r,__weex_data__:a,__weex_config__:u};l.window=le.self=le.window=le;var fe={},pe={};try{fe=u.services.builtinGlobals,pe=u.services.builtinModules}catch(e){}Object.assign(le,fe);var de=o({},s.ModuleFactories,pe);if(function(e,t,n){for(var r in t)e[r]={factory:t[r].bind(n),module:{exports:{}},isInitialized:!1}}(D,de,le),"Web"!==S.platform){var he=ie.timing;he.domLoading=Date.now();var ve=m[t]?m[t]:new Function('with(this){(function(){"use strict";\n'+t+"\n}).call(this)}");ve.call(le),he.domInteractive=he.domComplete=he.domInteractive=Date.now(),m[t]=ve}else{var ye=new Function('"use strict";\n'+t);ye.call(le)}}},t.refreshInstance=function(e,t){var n=g(e).document;n.documentElement.fireEvent("refresh",{timestamp:Date.now(),data:t}),n.taskCenter.send("dom",{action:"refreshFinish"},[])},t.destroyInstance=function(e){var t=g(e),n=t.bundleCode;t.window.closed=!0;var r=t.document;r.documentElement.fireEvent("destory",{timestamp:Date.now()}),r.destroy&&r.destroy();r.taskCenter&&r.taskCenter.destroyCallback&&r.taskCenter.destroyCallback();delete y[e],delete m[n]},t.getRoot=function(e){var t=g(e).document;return t.toJSON?t.toJSON():{}},t.receiveTasks=function(e,t){var n=g(e);if(Array.isArray(t)){var o=n.document,i=[];return t.forEach(function(e){var t=void 0;if("fireEvent"===e.method){var n=r(e.args,5),a=n[0],s=n[1],u=n[2],c=n[3],l=n[4];t=function e(t,n,r,o,i,a){if(Array.isArray(n))return void n.some(function(n){return!1!==e(t,n,r,o)});var s=t.getRef(n);if(s){var u=t.fireEvent(s,r,o,i,a);return u}return new Error('Invalid element reference "'+n+'"')}(o,a,s,u,c,l)}else if("callback"===e.method){var f=r(e.args,3),p=f[0],d=f[1],h=f[2];t=o.taskCenter.callback(p,d,h)}i.push(t)}),i}};var a,s=n(4),u=n(1),c=(a=u)&&a.__esModule?a:{default:a};var l={},f={},p=void 0,d="@weex-module/",h=d+"modal",v=d+"navigator",y={},m={},_=function(){};function g(e){var t=y[e];if(!t)throw new Error('Invalid instance id "'+e+'"');return t}function b(e){var t=e.split(".");if(1===t.length)return Boolean(f[e]);var n=t[0],r=t[1],o=f[n];if(o)for(var a=0;a<o.length;a++){var s=o[a];if("object"===(void 0===s?"undefined":i(s))&&s.name===r||s===r)return!0}return!1}function w(e){return Boolean(l[e])}t.default=t},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});t.ModuleFactories={rax:n(5)}},function(e,t){e.exports=function(e,t,n){var r=this.__weex_document__,o=this.document;n.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=17)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={component:null,mountID:1,sandbox:!0,rootComponents:{},rootInstances:{},hook:null,driver:null,monitor:null},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=c(n(0)),o=n(6),i=c(n(9)),a=c(n(2)),s=c(n(3)),u=c(n(19));function c(e){return e&&e.__esModule?e:{default:e}}var l="$$instance";t.default={set:function(e,t){e[l]||(e[l]=t,t.rootID&&(r.default.rootInstances[t.rootID]=t,r.default.rootComponents[t.rootID]=t._internal))},get:function(e){return e[l]},remove:function(e){var t=this.get(e);t&&(e[l]=null,t.rootID&&(delete r.default.rootComponents[t.rootID],delete r.default.rootInstances[t.rootID]))},mount:function(e,t,n){r.default.driver.beforeRender&&r.default.driver.beforeRender(),null==t&&(t=r.default.driver.createBody());var c=void 0;if(n){var l=n._internal;c=l._processChildContext(l._context)}var f=this.get(t);if(f&&f.isRootComponent){var p=f.getRenderedComponent(),d=p._currentElement;if((0,s.default)(d,e)){var h=p._context;return p.updateComponent(d,e,h,c||h),f}r.default.hook.Reconciler.unmountComponent(f),(0,i.default)(t)}var v=(0,o.createElement)(u.default,null,e),y=(0,a.default)(v),m=c||{},_=y.mountComponent(t,null,m);return this.set(t,_),r.default.driver.afterRender&&r.default.driver.afterRender(_),r.default.hook.Mount._renderNewRootComponent(_._internal),_}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=n(0),a=(r=i)&&r.__esModule?r:{default:r};t.default=function(e){var t=void 0;if(void 0===e||null===e||!1===e||!0===e)t=new a.default.EmptyComponent;else if(Array.isArray(e))t=new a.default.FragmentComponent(e);else if("object"===(void 0===e?"undefined":o(e))&&e.type)t="string"==typeof e.type?new a.default.NativeComponent(e):new a.default.CompositeComponent(e);else{if("string"!=typeof e&&"number"!=typeof e)throw new Error("Invalid element type: "+e+". (keys: "+Object.keys(e)+")");t=new a.default.TextComponent(e)}return t._mountIndex=0,t},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default=function(e,t){var n=null===e,o=null===t;if(n||o)return n===o;var i=void 0===e?"undefined":r(e),a=void 0===t?"undefined":r(t);return"string"===i||"number"===i?"string"===a||"number"===a:"object"===i&&"object"===a&&e.type===t.type&&e.key===t.key},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var o=function(){function e(t,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.props=t,this.context=n,this.refs={},this.updater=r}return r(e,[{key:"isComponentClass",value:function(){}},{key:"setState",value:function(e,t){this.updater.setState(this,e,t)}},{key:"forceUpdate",value:function(e){this.updater.forceUpdate(this,e)}}]),e}();t.default=o,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(1)),o=i(n(0));function i(e){return e&&e.__esModule?e:{default:e}}t.default={ComponentTree:{getClosestInstanceFromNode:function(e){return r.default.get(e)},getNodeFromInstance:function(e){for(;e._renderedComponent;)e=e._renderedComponent;return e?e._nativeNode:null}},Mount:{_instancesByReactRootID:o.default.rootComponents,_renderNewRootComponent:function(){}},Reconciler:{mountComponent:function(){},receiveComponent:function(){},unmountComponent:function(){}},monitor:null},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.createElement=f,t.createFactory=function(e){var t=f.bind(null,e);return t.type=e,t},t.cloneElement=function(e,t){var n=arguments;if(!p(e))throw Error("cloneElement: not a valid element."+c());var r=Object.assign({},e.props),a=e.key,s=e.ref,f=e._owner;if(t){void 0!==t.ref&&(s=t.ref,f=o.default.component),void 0!==t.key&&(a=String(t.key));var d=void 0;e.type&&e.type.defaultProps&&(d=e.type.defaultProps);var h=void 0;for(h in t)t.hasOwnProperty(h)&&!u.hasOwnProperty(h)&&(void 0===t[h]&&void 0!==d?r[h]=d[h]:r[h]=t[h])}for(var v=arguments.length,y=Array(v>2?v-2:0),m=2;m<v;m++)y[m-2]=n[m];y.length&&(r.children=(0,i.default)(y));return new l(e.type,a,s,r,f)},t.isValidElement=p;var o=s(n(0)),i=s(n(7)),a=n(8);function s(e){return e&&e.__esModule?e:{default:e}}var u={key:!0,ref:!0};function c(){if(o.default.component){var e=o.default.component.getName();if(e)return" Check the render method of `"+e+"`."}return""}function l(e,t,n,r,o){return a.isWeex&&(r=function(e,t){if("text"===e){var n=t.children,r=t.value;null==r&&null!=n&&(Array.isArray(n)?n=n.map(function(e){return"number"==typeof e||"string"==typeof e?e:""}).join(""):"number"!=typeof n&&"string"!=typeof n&&(n=""),t.value=String(n)),t.children=null}return t}(e,r)),{type:e,key:t,ref:n,props:r,_owner:o}}function f(e,t,n){var a=arguments;if(null==e)throw Error("createElement: type should not be null or undefined."+c());var s={},f=void 0,p=null,d=null;if(null!=t)for(f in d=void 0===t.ref?null:t.ref,p=void 0===t.key?null:String(t.key),t)u[f]||(s[f]=t[f]);var h=arguments.length-2;if(h>0)if(1!==h||Array.isArray(n)){var v=n;if(h>1){v=new Array(h);for(var y=0;y<h;y++)v[y]=a[y+2]}s.children=(0,i.default)(v)}else s.children=n;if(e&&e.defaultProps){var m=e.defaultProps;for(f in m)void 0===s[f]&&(s[f]=m[f])}return s.style&&(Array.isArray(s.style)||"object"===r(s.style))&&(s.style=function e(t){if(t){if(Array.isArray(t)){for(var n={},r=0;r<t.length;++r){var o=e(t[r]);if(o)for(var i in o)n[i]=o[i]}return n}return t}}(s.style)),new l(e,p,d,s,o.default.component)}function p(e){return"object"===(void 0===e?"undefined":r(e))&&null!==e&&e.type&&e.props}t.default=l},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(null==e)return e;var t=[];(function e(t,n){if(Array.isArray(t))for(var r=0,o=t.length;r<o;r++)e(t[r],n);else n.push(t)})(e,t),1===t.length&&(t=t[0]);return t},e.exports=t.default},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)};t.isWeb="object"===("undefined"==typeof navigator?"undefined":o(navigator))&&("Mozilla"===navigator.appCodeName||"Gecko"===navigator.product),t.isNode=void 0!==process&&!(!process.versions||!process.versions.node),t.isWeex="function"==typeof callNative,t.isReactNative="undefined"!=typeof __fbBatchedBridgeConfig;t.default=e.exports,t.default=e.exports},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=i.default.get(e);if(!t)return!1;return i.default.remove(e),t._internal.unmountComponent(),!0};var r,o=n(1),i=(r=o)&&r.__esModule?r:{default:r};e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(22)),o=i(n(1));i(n(0));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n,i){"function"==typeof n&&(i=n,n=null),n=n||{},(0,r.default)(n);var a=o.default.mount(e,t,n.parent).getPublicInstance();return i&&i.call(a),a},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=l(n(0)),i=l(n(12)),a=l(n(2)),s=l(n(3)),u=l(n(13)),c=l(n(1));function l(e){return e&&e.__esModule?e:{default:e}}var f=/on[A-Z]/,p=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._currentElement=t}return r(e,[{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n,this._mountID=o.default.mountID++;var a=this._currentElement.props,s={_internal:this,type:this._currentElement.type,props:a},u=a.append;this._instance=s,this._prevStyleCopy=Object.assign({},a.style);var c=this.getNativeNode();"tree"!==u&&(r?r(c,e):o.default.driver.appendChild(c,e)),this._currentElement&&this._currentElement.ref&&i.default.attach(this._currentElement._owner,this._currentElement.ref,this);var l=a.children;return null!=l&&this.mountChildren(l,n),"tree"===u&&(r?r(c,e):o.default.driver.appendChild(c,e)),o.default.hook.Reconciler.mountComponent(this),s}},{key:"mountChildren",value:function(e,t){var n=this;Array.isArray(e)||(e=[e]);var r=this._renderedChildren={};return e.map(function(e,o){var i=(0,a.default)(e),s=(0,u.default)(r,e,o);return r[s]=i,i._mountIndex=o,i.mountComponent(n.getNativeNode(),n._instance,t,null)})}},{key:"unmountChildren",value:function(e){var t=this._renderedChildren;if(t){for(var n in t){t[n].unmountComponent(e)}this._renderedChildren=null}}},{key:"unmountComponent",value:function(e){if(this._nativeNode){var t=this._currentElement.ref;t&&i.default.detach(this._currentElement._owner,t,this),c.default.remove(this._nativeNode),e||o.default.driver.removeChild(this._nativeNode,this._parent),o.default.driver.removeAllEventListeners(this._nativeNode)}this.unmountChildren(e),o.default.hook.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._parentInstance=null,this._context=null,this._instance=null,this._prevStyleCopy=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,i.default.update(e,t,this);var a=e.props,s=t.props;this.updateProperties(a,s),this.updateChildren(s.children,r),o.default.hook.Reconciler.receiveComponent(this)}},{key:"updateProperties",value:function(e,t){var n=this,r=void 0,i=void 0,a=void 0;for(r in e)if("children"!==r&&!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if("style"===r){var s=n._prevStyleCopy;for(i in s)s.hasOwnProperty(i)&&((a=a||{})[i]="");n._prevStyleCopy=null}else f.test(r)?"function"==typeof e[r]&&o.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),e[r]):o.default.driver.removeAttribute(n.getNativeNode(),r,e[r]);for(r in t){var u=t[r],c="style"===r?n._prevStyleCopy:null!=e?e[r]:void 0;if("children"!==r&&t.hasOwnProperty(r)&&u!==c&&(null!=u||null!=c))if("style"===r)if(u?u=n._prevStyleCopy=Object.assign({},u):n._prevStyleCopy=null,null!=c){for(i in c)!c.hasOwnProperty(i)||u&&u.hasOwnProperty(i)||((a=a||{})[i]="");for(i in u)u.hasOwnProperty(i)&&c[i]!==u[i]&&((a=a||{})[i]=u[i])}else a=u;else if(f.test(r)){var l=r.slice(2).toLowerCase();"function"==typeof c&&o.default.driver.removeEventListener(n.getNativeNode(),l,c,t),"function"==typeof u&&o.default.driver.addEventListener(n.getNativeNode(),l,u,t)}else null!=u?o.default.driver.setAttribute(n.getNativeNode(),r,u):o.default.driver.removeAttribute(n.getNativeNode(),r,e[r])}a&&o.default.driver.setStyles(this.getNativeNode(),a)}},{key:"updateChildren",value:function(e,t){var n=this,r=this._renderedChildren;if(null!=e||null!=r){var i={},c={};if(null!=e){Array.isArray(e)||(e=[e]);for(var l=0,f=e.length;l<f;l++){var p=e[l],d=(0,u.default)(i,p,l),h=r&&r[d],v=h&&h._currentElement;if(null!=h&&(0,s.default)(v,p))h.updateComponent(v,p,t,t),i[d]=h;else{if(h){var y=h.getNativeNode();h.unmountComponent(!0),c[d]=y}i[d]=(0,a.default)(p)}}}var m=void 0,_=void 0;if(null!=r)for(var g in r)if(r.hasOwnProperty(g)){var b=r[g],w=!i[g];m?w&&b.unmountComponent():(m=b,_=w)}null!=i&&function(){var e=0,a=0,s=null,u=[],l=function(l){if(!i.hasOwnProperty(l))return"continue";var f=i[l],p=r&&r[l];if(p===f){var d=p.getNativeNode();if(Array.isArray(d)||(d=[d]),p._mountIndex<e){Array.isArray(s)&&(s=s[s.length-1]);for(var h=d.length-1;h>=0;h--)o.default.driver.insertAfter(d[h],s)}u=u.concat(d),e=Math.max(p._mountIndex,e),p._mountIndex=a}else{null!=p&&(e=Math.max(p._mountIndex,e));var v=n.getNativeNode();Array.isArray(v)&&(v=n._parent),f.mountComponent(v,n._instance,t,function(e,t){var n=c[l];if(Array.isArray(e)||(e=[e]),n){Array.isArray(n)||(n=[n]);for(var r=void 0,i=0;i<e.length;i++){var a=e[i];n[i]?o.default.driver.replaceChild(a,n[i]):o.default.driver.insertAfter(a,r),r=a}if(e.length<n.length)for(var f=e.length;f<n.length;f++)o.default.driver.removeChild(n[f])}else{Array.isArray(s)&&(s=s[s.length-1]);var p=void 0;m&&!s&&(p=m.getNativeNode(),Array.isArray(p)&&(p=p[0]));for(var d=e.length-1;d>=0;d--){var h=e[d];s?o.default.driver.insertAfter(h,s):p?o.default.driver.insertBefore(h,p):o.default.driver.appendChild(h,t)}}u=u.concat(e)}),f._mountIndex=a}a++,s=f.getNativeNode()};for(var f in i)l(f);if(Array.isArray(n._nativeNode)){n._nativeNode.splice(0,n._nativeNode.length);for(var p=0;p<u.length;p++)n._nativeNode.push(u[p])}}(),_&&m.unmountComponent(),this._renderedChildren=i}}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createElement(this._instance),c.default.set(this._nativeNode,this._instance)),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return this._currentElement.type}}]),e}();t.default=p,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={update:function(e,t,n){var r=null!=e&&e.ref,o=null!=t&&t.ref;r!==o&&(null!=r&&this.detach(e._owner,r,n),null!=o&&this.attach(t._owner,o,n))},attach:function(e,t,n){if(!e)throw new Error("You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of Rax loaded.");var r=n.getPublicInstance();"function"==typeof t?t(r):e._instance.refs[t]=r},detach:function(e,t,n){if("function"==typeof t)t(null);else{var r=n.getPublicInstance();e._instance.refs[t]===r&&delete e._instance.refs[t]}}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){var r=t&&t.key,o="string"==typeof r,i="."+n.toString(36);if(o){var a="$"+r,s=void 0===e[a];return s||console.warn('Encountered two children with the same key "'+r+'".'),s?a:i}return i},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.isRem=s,t.calcRem=u,t.getRem=function(){return a},t.setRem=function(e){a=e},t.isUnitNumber=c,t.convertUnit=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a;{if(t&&c(e,t))return e*n+"px";if(s(e))return u(e,n)}return e};var r={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,lines:!0},o="rem",i=/[-+]?\d*\.?\d+rem/g,a=1;function s(e){return"string"==typeof e&&-1!==e.indexOf(o)}function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a;return e.replace(i,function(e){return parseFloat(e)*t+"px"})}function c(e,t){return"number"==typeof e&&!r[t]}t.default=e.exports,t.default=e.exports},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.transformPropsAttrsToStyle=function(e,t){return e.style=e.style||{},t.forEach(function(t){e[t]&&!e.style[t]&&(e.style[t]=e[t],delete e[t])}),e},t.renamePropsAttr=function(e,t,n){e[t]&&!e[n]&&(e[n]=e[t],delete e[t]);return e},t.default=e.exports,t.default=e.exports},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};t.default=function(e){if(null==e)return null;if(e.ownerDocument||e.nodeType)return e;if(e._nativeNode)return e._nativeNode;if("string"==typeof e)return i.default.driver.getElementById(e);if("function"!=typeof e.render)throw new Error("findDOMNode: find by neither component nor DOM node.");var t=e._internal;if(t){for(;!t._nativeNode;)if(null==(t=t._renderedComponent))return null;return t._nativeNode}throw new Error("findDOMNode: find on an unmounted component.")},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Children=t.version=t.setNativeProps=t.findComponentInstance=t.unmountComponentAtNode=t.findDOMNode=t.hydrate=t.render=t.PropTypes=t.PureComponent=t.Component=t.createFactory=t.isValidElement=t.cloneElement=t.createElement=void 0,n(18);var r=n(6),o=v(n(4)),i=v(n(20)),a=v(n(21)),s=v(n(10)),u=v(n(42)),c=v(n(16)),l=v(n(9)),f=v(n(43)),p=v(n(44)),d=v(n(45)),h=v(n(46));function v(e){return e&&e.__esModule?e:{default:e}}t.createElement=r.createElement,t.cloneElement=r.cloneElement,t.isValidElement=r.isValidElement,t.createFactory=r.createFactory,t.Component=o.default,t.PureComponent=i.default,t.PropTypes=a.default,t.render=s.default,t.hydrate=u.default,t.findDOMNode=c.default,t.unmountComponentAtNode=l.default,t.findComponentInstance=f.default,t.setNativeProps=p.default,t.version=d.default,t.Children=h.default},function(e,t,n){var r,o=n(5),i=(r=o)&&r.__esModule?r:{default:r};"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(i.default)},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(4),a=(r=i)&&r.__esModule?r:{default:r};function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var u=1,c=function(e){function t(){var e,n,r,o=arguments;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var i=arguments.length,a=Array(i),c=0;c<i;c++)a[c]=o[c];return n=r=s(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(a))),r.rootID=u++,s(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,a.default),o(t,[{key:"isRootComponent",value:function(){}},{key:"render",value:function(){return this.props.children}},{key:"getPublicInstance",value:function(){return this.getRenderedComponent().getPublicInstance()}},{key:"getRenderedComponent",value:function(){return this._internal._renderedComponent}}]),t}();t.default=c,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(4),a=(r=i)&&r.__esModule?r:{default:r};var s=function(e){function t(e,n){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,a.default),o(t,[{key:"isPureComponentClass",value:function(){}}]),t}();t.default=s,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){function t(e,t,n,o,i,a){return r}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}();t.default={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,element:r,node:r,any:r,arrayOf:r,instanceOf:r,objectOf:r,oneOf:r,oneOfType:r,shape:r},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.driver,n=e.hook,d=e.measurer,h=e.deviceWidth,v=e.viewportWidth,y=e.eventRegistry;if(o.default.EmptyComponent=i.default,o.default.NativeComponent=a.default,o.default.TextComponent=s.default,o.default.FragmentComponent=c.default,o.default.CompositeComponent=u.default,o.default.hook=n||p.default,o.default.measurer=d,!o.default.driver){if(!t)if(r.isWeex)t=l.default;else{if(!r.isWeb)throw Error("No builtin driver matched");t=f.default}o.default.driver=t}h&&o.default.driver.setDeviceWidth&&o.default.driver.setDeviceWidth(h);v&&o.default.driver.setViewportWidth&&o.default.driver.setViewportWidth(v);y&&(o.default.driver.eventRegistry=y)};var r=n(8),o=d(n(0)),i=d(n(23)),a=d(n(11)),s=d(n(24)),u=d(n(25)),c=d(n(29)),l=d(n(30)),f=d(n(40)),p=d(n(5));function d(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=(r=i)&&r.__esModule?r:{default:r};var s=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._currentElement=null}return o(e,[{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n;var o={_internal:this},i=this.getNativeNode();return r?r(i,e):a.default.driver.appendChild(i,e),o}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&a.default.driver.removeChild(this._nativeNode,this._parent),this._nativeNode=null,this._parent=null,this._parentInstance=null,this._context=null}},{key:"updateComponent",value:function(){}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=a.default.driver.createEmpty()),this._nativeNode}}]),e}();t.default=s,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=(r=i)&&r.__esModule?r:{default:r};var s=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._currentElement=t,this._stringText=String(t)}return o(e,[{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n,this._mountID=a.default.mountID++;var o=this.getNativeNode();r?r(o,e):a.default.driver.appendChild(o,e);var i={_internal:this};return a.default.hook.Reconciler.mountComponent(this),i}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&a.default.driver.removeChild(this._nativeNode,this._parent),a.default.hook.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._parentInstance=null,this._context=null,this._stringText=null}},{key:"updateComponent",value:function(e,t,n){e!==t&&(this._currentElement=t,this._stringText=String(t),a.default.driver.updateText(this.getNativeNode(),this._stringText),a.default.hook.Reconciler.receiveComponent(this))}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=a.default.driver.createText(this._stringText)),this._nativeNode}}]),e}();t.default=s,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=f(n(26)),i=f(n(27)),a=f(n(0)),s=f(n(12)),u=f(n(2)),c=f(n(3)),l=f(n(28));function f(e){return e&&e.__esModule?e:{default:e}}function p(e,t,n){try{return e()}catch(e){n?n(e):d(t,e)}}function d(e,t){for(var n=void 0;e;){if("function"==typeof e.componentDidCatch){n=e;break}if(!e._internal||!e._internal._parentInstance)break;e=e._internal._parentInstance}if(n)n.componentDidCatch(t);else{if(!a.default.sandbox)throw t;setTimeout(function(){throw t},0)}}var h=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._currentElement=t}return r(e,[{key:"getName",value:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null}},{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n,this._mountID=a.default.mountID++,this._updateCount=0;var c=this._currentElement.type,l=this._currentElement.props,f=c.prototype,h=f&&c.prototype.isComponentClass,v=f&&c.prototype.render,y=this._processContext(n),m=void 0,_=void 0;if(h||v)m=new c(l,y,i.default);else{if("function"!=typeof c)throw new Error("Invalid component type: "+c+". (keys: "+Object.keys(c)+")");m=new o.default(c)}m.props=l,m.context=y,m.refs={},m.updater=i.default,m._internal=this,this._instance=m;var g=m.state;void 0===g&&(m.state=g=null);var b=null,w=function(e){b=e};return m.componentWillMount&&p(function(){m.componentWillMount()},m,w),null==_&&(a.default.component=this,m.state=this._processPendingState(l,y),p(function(){_=m.render()},m,w),a.default.component=null),this._renderedComponent=(0,u.default)(_),this._renderedComponent.mountComponent(this._parent,m,this._processChildContext(n),r),b&&d(m,b),this._currentElement&&this._currentElement.ref&&s.default.attach(this._currentElement._owner,this._currentElement.ref,this),m.componentDidMount&&p(function(){m.componentDidMount()},m),a.default.hook.Reconciler.mountComponent(this),m}},{key:"unmountComponent",value:function(e){var t=this._instance;if(t.componentWillUnmount&&p(function(){t.componentWillUnmount()},t),a.default.hook.Reconciler.unmountComponent(this),t._internal=null,null!=this._renderedComponent){var n=this._currentElement.ref;n&&s.default.detach(this._currentElement._owner,n,this),this._renderedComponent.unmountComponent(e),this._renderedComponent=null,this._instance=null}this._currentElement=null,this._parentInstance=null,this._pendingStateQueue=null,this._pendingForceUpdate=!1,this._context=null}},{key:"_processContext",value:function(e){var t=this._currentElement.type.contextTypes;if(!t)return{};var n={};for(var r in t)n[r]=e[r];return n}},{key:"_processChildContext",value:function(e){var t=this._instance,n=t.getChildContext&&t.getChildContext();return n?Object.assign({},e,n):e}},{key:"_processPendingState",value:function(e,t){var n=this._instance,r=this._pendingStateQueue;if(!r)return n.state;this._pendingStateQueue=null;for(var o=Object.assign({},n.state),i=0;i<r.length;i++){var a=r[i];Object.assign(o,"function"==typeof a?a.call(n,o,e,t):a)}return o}},{key:"updateComponent",value:function(e,t,n,r){var o=this._instance;o||console.error("Update component '"+this.getName()+"' that has already been unmounted (or failed to mount).");var u=!1,c=void 0,f=void 0;this._context===r?c=o.context:(c=this._processContext(r),u=!0),e===t?f=t.props:(f=t.props,u=!0);var d=u&&o.componentWillReceiveProps;d&&(this._pendingState=!0,p(function(){o.componentWillReceiveProps(f,c)},o),this._pendingState=!1),s.default.update(e,t,this);var h=!0,v=o.props,y=o.state,m=this._processPendingState(f,c);if(this._pendingForceUpdate||(o.shouldComponentUpdate?h=p(function(){return o.shouldComponentUpdate(f,m,c)},o):o.isPureComponentClass&&(h=!(0,l.default)(v,f)||!(0,l.default)(y,m))),h){this._pendingForceUpdate=!1;var _=o.context;p(function(){o.componentWillUpdate&&o.componentWillUpdate(f,m,c)},o),this._currentElement=t,this._context=r,o.props=f,o.state=m,o.context=c,this._updateRenderedComponent(r),p(function(){o.componentDidUpdate&&o.componentDidUpdate(v,y,_)},o),this._updateCount++}else this._currentElement=t,this._context=r,o.props=f,o.state=m,o.context=c;if(d){var g=this._pendingCallbacks;this._pendingCallbacks=null,i.default.runCallbacks(g,o)}a.default.hook.Reconciler.receiveComponent(this)}},{key:"_updateRenderedComponent",value:function(e){var t=this._renderedComponent,n=t._currentElement,r=this._instance,o=void 0;if(a.default.component=this,p(function(){o=r.render()},r),a.default.component=null,(0,c.default)(n,o))t.updateComponent(n,o,t._context,this._processChildContext(e));else{var i=t.getNativeNode();t.unmountComponent(!0),this._renderedComponent=(0,u.default)(o),this._renderedComponent.mountComponent(this._parent,r,this._processChildContext(e),function(e,t){Array.isArray(e)||(e=[e]),Array.isArray(i)||(i=[i]);for(var n=void 0,r=0;r<e.length;r++){var o=e[r];i[r]?a.default.driver.replaceChild(o,i[r]):a.default.driver.insertAfter(o,n),n=o}if(e.length<i.length)for(var s=e.length;s<i.length;s++)a.default.driver.removeChild(i[s])})}}},{key:"getNativeNode",value:function(){var e=this._renderedComponent;if(e)return e.getNativeNode()}},{key:"getPublicInstance",value:function(){var e=this._instance;return e instanceof o.default?null:e}}]),e}();t.default=h,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0);(r=i)&&r.__esModule;var a=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.pureRender=t}return o(e,[{key:"render",value:function(){return this.pureRender(this.props,this.context)}}]),e}();t.default=a,e.exports=t.default},function(e,t,n){function r(e,t){t&&(e._pendingCallbacks||(e._pendingCallbacks=[])).push(t)}Object.defineProperty(t,"__esModule",{value:!0});var o={setState:function(e,t,n){var o,i,a=e._internal;a&&(o=a,(i=t)&&(o._pendingStateQueue||(o._pendingStateQueue=[])).push(i),r(a,n),!a._pendingState&&a._renderedComponent&&this.runUpdate(e))},forceUpdate:function(e,t){var n=e._internal;n&&(n._pendingForceUpdate=!0,r(n,t),n._renderedComponent&&this.runUpdate(e))},runUpdate:function(e){var t=e._internal,n=t._pendingCallbacks;t._pendingCallbacks=null;var r=t._currentElement,o=t._context;(t._pendingStateQueue||t._pendingForceUpdate)&&t.updateComponent(r,r,o,o),this.runCallbacks(n,e)},runCallbacks:function(e,t){if(e)for(var n=0;n<e.length;n++)e[n].call(t)}};t.default=o,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Object.prototype.hasOwnProperty;function i(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}t.default=function(e,t){if(i(e,t))return!0;if("object"!==(void 0===e?"undefined":r(e))||null===e||"object"!==(void 0===t?"undefined":r(t))||null===t)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(var s=0;s<n.length;s++)if(!o.call(t,n[s])||!i(e[n[s]],t[n[s]]))return!1;return!0},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=c(n(0)),i=c(n(11)),a=c(n(1)),s=c(n(2)),u=c(n(13));function c(e){return e&&e.__esModule?e:{default:e}}var l=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,i.default),r(t,[{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n,this._mountID=o.default.mountID++;var i={_internal:this};this._instance=i;var a=this.getNativeNode(),s=this._currentElement;if(this.mountChildren(s,n),r)r(a,e);else for(var u=Array.isArray(e),c=0;c<a.length;c++){var l=a[c];u?e.push(l):o.default.driver.appendChild(l,e)}return i}},{key:"mountChildren",value:function(e,t){var n=this,r=this._renderedChildren={},o=this.getNativeNode();return e.map(function(e,i){var a=(0,s.default)(e),c=(0,u.default)(r,e,i);return r[c]=a,a._mountIndex=i,a.mountComponent(n._parent,n._instance,t,function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)o.push(e[t]);else o.push(e)})})}},{key:"unmountComponent",value:function(e){if(this._nativeNode&&(a.default.remove(this._nativeNode),!e))for(var t=0;t<this._nativeNode.length;t++)o.default.driver.removeChild(this._nativeNode[t]);this.unmountChildren(!0),this._currentElement=null,this._nativeNode=null,this._parent=null,this._parentInstance=null,this._context=null,this._instance=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,this.updateChildren(this._currentElement,r)}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=[]),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return"fragment"}}]),t}();t.default=l,e.exports=t.default},function(e,t,n){var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var i,a="function"==typeof Symbol&&"symbol"===o(Symbol.iterator)?function(e){return void 0===e?"undefined":o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":o(e)},s=n(14),u=n(31),c=(i=u)&&i.__esModule?i:{default:i};var l=/^on[A-Z]/,f=/^aria-/,p={},d="object"===(void 0===r?"undefined":a(r))?r:"object"===(void 0===d?"undefined":a(d))?d:null,h={deviceWidth:750,viewportWidth:750,getDeviceWidth:function(){return this.deviceWidth},setDeviceWidth:function(e){this.deviceWidth=e},getViewportWidth:function(){return this.viewportWidth},setViewportWidth:function(e){this.viewportWidth=e},getElementById:function(e){return p[e]},createBody:function(){if(d.body)return d.body;var e=d.documentElement,t=d.createBody();return e.appendChild(t),t},createComment:function(e){return d.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return h.createElement({type:"text",props:{value:e}})},updateText:function(e,t){this.setAttribute(e,"value",t)},createElement:function(e){var t=c.default[e.type];t&&(e=t.parse(e));var n=e.props,r={},o=n.style;for(var i in o)r[i]=(0,s.convertUnit)(o[i],i);var a=d.createElement(e.type,{style:r});return this.setNativeProps(a,n,!0),a},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){t=t||e.parentNode;var n=e.attr&&e.attr.id;return null!=n&&(p[n]=null),t.removeChild(e)},replaceChild:function(e,t,n){n=n||t.parentNode;var r=t.previousSibling,o=t.nextSibling;this.removeChild(t,n),r?this.insertAfter(e,r,n):o?this.insertBefore(e,o,n):this.appendChild(e,n)},insertAfter:function(e,t,n){return(n=n||t.parentNode).insertAfter(e,t)},insertBefore:function(e,t,n){return(n=n||t.parentNode).insertBefore(e,t)},addEventListener:function(e,t,n,r){var o=r[t+"EventParams"];return e.addEvent(t,n,o)},removeEventListener:function(e,t,n){return e.removeEvent(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t,n){return"id"==t&&(p[n]=null),e.setAttr(t,void 0,!1)},setAttribute:function(e,t,n){return"id"==t&&(p[n]=e),f.test(t)&&(t=t.replace(/\-(\w)/,function(e,t){return t.toUpperCase()})),e.setAttr(t,n,!1)},setStyles:function(e,t){for(var n in t){var r=t[n];r=(0,s.convertUnit)(r,n),e.setStyle(n,r)}},beforeRender:function(){d.open(),(0,s.setRem)(this.getDeviceWidth()/this.getViewportWidth())},afterRender:function(){d.listener&&d.listener.createFinish&&d.listener.createFinish(),d.close()},setNativeProps:function(e,t,n){for(var r in t){var o=t[r];if("children"!==r&&null!=o)if("style"===r){if(n)continue;this.setStyles(e,o)}else if(l.test(r)){var i=r.slice(2).toLowerCase();this.addEventListener(e,i,o,t)}else this.setAttribute(e,r,o)}}};t.default=h,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=f(n(32)),o=f(n(33)),i=f(n(34)),a=f(n(35)),s=f(n(36)),u=f(n(37)),c=f(n(38)),l=f(n(39));function f(e){return e&&e.__esModule?e:{default:e}}t.default={span:a.default,p:s.default,img:r.default,button:u.default,video:o.default,textarea:i.default,h1:c.default,h2:c.default,h3:c.default,h4:c.default,h5:c.default,h6:c.default,nav:l.default,article:l.default,section:l.default,footer:l.default,aside:l.default,main:l.default},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(15);t.default={parse:function(e){var t=e.props;return e.type="image",e.props=(0,r.transformPropsAttrsToStyle)(t,["width","height"]),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(15);t.default={parse:function(e){var t=e.props;return e.props=(0,r.transformPropsAttrsToStyle)(t,["width","height"]),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){var t=e.props;return"string"!=typeof t.children||t.value||(t.value=t.children,t.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){var t=e.props;return e.type="text","string"!=typeof t.children||t.value||(t.value=t.children,t.children=null),e}},e.exports=t.default},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)},i=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},a={fontSize:28,marginTop:28,marginBottom:28},s={u:{textDecoration:"underline"},s:{textDecoration:"line-through"},i:{fontStyle:"italic"},b:{fontWeight:"bold"},del:{textDecoration:"line-through"},em:{fontStyle:"italic"},strong:{fontWeight:"bold"},big:{fontSize:33.6},small:{fontSize:28*.8}};function u(e){var t=e.type,n=e.props,r=n.style,o=n.children;"img"===t&&(t="image"),s[t]&&(r=i({},s[t],r),t="span"),n.style=null,n.children=null;var a={type:t,style:r,attr:n||{}};return o&&("span"===t&&"string"==typeof o?a.attr.value=o:a.children=c(o)),a}function c(e){var t=[];Array.isArray(e)||(e=[e]);for(var n=0;n<e.length;n++){var r=e[n];"string"==typeof r?t.push({type:"span",attr:{value:r}}):"object"===(void 0===r?"undefined":o(r))&&t.push(u(r))}return t}t.default={parse:function(e){var t=e.props,n=t.children;return e.type="richtext",t.style=i({},a,t.style),t.value=c(n),t.children=null,e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e};t.default={parse:function(e){var t=e.props;e.type="text";var n=t.style,o=t.disabled,i=t.children,a=r({textAlign:"center",fontSize:22,paddingTop:4,paddingRight:12,paddingBottom:6,paddingLeft:12,borderWidth:4,borderStyle:"solid",borderColor:"#000000",backgroudColor:"#c0c0c0"},n);return o&&(t.onClick=null,a=r({},a,{color:"#7f7f7f",borderColor:"#7f7f7f"})),"string"==typeof i&&(t.value=i,t.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e};function o(e,t,n){return{fontSize:e*t,marginTop:e*t*n,marginBottom:e*t*n,fontWeight:"bold"}}var i={h1:o(28,2,.67),h2:o(28,1.5,.83),h3:o(28,1.17,1),h4:o(28,1,1.33),h5:o(28,.83,1.67),h6:o(28,.67,2.33)};t.default={parse:function(e){var t=e.type,n=e.props;return e.type="text",n.style=r({},i[t]||i.h6,n.style),"string"!=typeof n.children||n.value||(n.value=n.children,n.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){return e.type="div",e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(14),a=n(41),s=(r=a)&&r.__esModule?r:{default:r};var u="dangerouslySetInnerHTML",c=/on[A-Z]/,l={deviceWidth:"undefined"!=typeof DEVICE_WIDTH&&DEVICE_WIDTH||null,viewportWidth:"undefined"!=typeof VIEWPORT_WIDTH&&VIEWPORT_WIDTH||750,eventRegistry:{},getDeviceWidth:function(){return this.deviceWidth||o.documentElement.clientWidth},setDeviceWidth:function(e){this.deviceWidth=e},getViewportWidth:function(){return this.viewportWidth},setViewportWidth:function(e){this.viewportWidth=e},getElementById:function(e){return o.getElementById(e)},createBody:function(){return o.body},createComment:function(e){return o.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return o.createTextNode(e)},updateText:function(e,t){e["textContent"in o?"textContent":"nodeValue"]=t},createElement:function(e){var t=o.createElement(e.type),n=e.props;return this.setNativeProps(t,n),t},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){(t=t||e.parentNode)&&t.removeChild(e)},replaceChild:function(e,t,n){(n=n||t.parentNode).replaceChild(e,t)},insertAfter:function(e,t,n){n=n||t.parentNode;var r=t.nextSibling;r?n.insertBefore(e,r):n.appendChild(e)},insertBefore:function(e,t,n){(n=n||t.parentNode).insertBefore(e,t)},addEventListener:function(e,t,n,r){return this.eventRegistry[t]?this.eventRegistry[t]("addEvent",e,t,n,r):e.addEventListener(t,n)},removeEventListener:function(e,t,n,r){return this.eventRegistry[t]?this.eventRegistry[t]("removeEvent",e,t,n,r):e.removeEventListener(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t){if(t===u)return e.innerHTML=null;if("className"===t&&(t="class"),t in e)try{e[t]=null}catch(e){}e.removeAttribute(t)},setAttribute:function(e,t,n){if(t===u)return e.innerHTML=n.__html;if("className"===t&&(t="class"),t in e)try{e[t]=n}catch(r){e.setAttribute(t,n)}else e.setAttribute(t,n)},setStyles:function(e,t){var n={};for(var r in t){var o=t[r];s.default.isFlexProp(r)?s.default[r](o,n):n[r]=(0,i.convertUnit)(o,r)}for(var a in n){var u=n[a];if(Array.isArray(u))for(var c=0;c<u.length;c++)e.style[a]=u[c];else e.style[a]=u}},beforeRender:function(){(0,i.setRem)(this.getDeviceWidth()/this.getViewportWidth())},setNativeProps:function(e,t){for(var n in t){var r=t[n];if("children"!==n&&null!=r)if("style"===n)this.setStyles(e,r);else if(c.test(n)){var o=n.slice(2).toLowerCase();this.addEventListener(e,o,r)}else this.setAttribute(e,n,r)}}};t.default=l,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r={stretch:"stretch","flex-start":"start","flex-end":"end",center:"center"},o={row:"horizontal",column:"vertical"},i={"flex-start":"start","flex-end":"end",center:"center","space-between":"justify","space-around":"justify"},a={display:!0,flex:!0,alignItems:!0,alignSelf:!0,flexDirection:!0,justifyContent:!0,flexWrap:!0},s={isFlexProp:function(e){return a[e]},display:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.display="flex"===e?["-webkit-box","-webkit-flex","flex"]:e,t},flex:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxFlex=e,t.webkitFlex=e,t.flex=e,t},flexWrap:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.flexWrap=e,t},alignItems:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxAlign=r[e],t.webkitAlignItems=e,t.alignItems=e,t},alignSelf:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitAlignSelf=e,t.alignSelf=e,t},flexDirection:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxOrient=o[e],t.webkitFlexDirection=e,t.flexDirection=e,t},justifyContent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxPack=i[e],t.webkitJustifyContent=e,t.justifyContent=e,t}};t.default=s,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(10),i=(r=o)&&r.__esModule?r:{default:r};t.default=function(e,t,n,r){if(t.childNodes)for(var o=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(t.childNodes)),a=0;a<o.length;a++){var s=o[a];t.removeChild(s)}return(0,i.default)(e,t,n,r)},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(1),i=(r=o)&&r.__esModule?r:{default:r};t.default=function(e){return null==e?null:i.default.get(e)},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){e=(0,o.default)(e),r.default.driver.setNativeProps(e,t)};var r=i(n(0)),o=i(n(16));function i(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default="0.4.20",e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(7),i=(r=o)&&r.__esModule?r:{default:r};function a(e){return e=(0,i.default)(e,[]),Array.isArray(e)?e:[].concat(e)}var s={map:function(e,t,n){return null==e?null:(e=a(e)).map(function(e,r){return t.call(n,e,r)})},forEach:function(e,t,n){if(null==e)return null;(e=a(e)).forEach(function(e,r){return t.call(n,e,r)})},count:function(e){return null==e?0:a(e).length},only:function(e){if(1!==(e=s.toArray(e)).length)throw new Error("Children.only: expected to receive a single element child.");return e[0]},toArray:function(e){return null==e?[]:a(e).filter(function(e){return null!==e})}};t.default=s,e.exports=t.default}])}},function(e,t){e.exports=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2)}([function(e,t,n){var r,o,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.defineProperties,s=Object.defineProperty,u=Object.create(null);function c(e){if(!(t=e)||!("symbol"===(void 0===t?"undefined":i(t))||t.constructor&&"Symbol"===t.constructor.name&&"Symbol"===t[t.constructor.toStringTag]))throw new TypeError(e+" is not a symbol");var t;return e}var l,f=(l=Object.create(null),function(e){for(var t=0;l[e+(t||"")];)++t;return l[e+=t||""]=!0,"@@"+e});o=function(e){if(this instanceof o)throw new TypeError("Symbol is not a constructor");return r(e)},e.exports=r=function e(t){var n;if(this instanceof e)throw new TypeError("Symbol is not a constructor");return n=Object.create(o.prototype),t=void 0===t?"":String(t),a(n,{__description__:{value:t},__name__:{value:f(t)}})},a(r,{for:{value:function(e){return u[e]?u[e]:u[e]=r(String(e))}},keyFor:{value:function(e){var t;for(t in c(e),u)if(u[t]===e)return t}},hasInstance:{value:r("hasInstance")},isConcatSpreadable:{value:r("isConcatSpreadable")},iterator:{value:r("iterator")},match:{value:r("match")},replace:{value:r("replace")},search:{value:r("search")},species:{value:r("species")},split:{value:r("split")},toPrimitive:{value:r("toPrimitive")},toStringTag:{value:r("toStringTag")},unscopables:{value:r("unscopables")}}),a(o.prototype,{constructor:{value:r},toString:{value:function(){return this.__name__}}}),a(r.prototype,{toString:{value:function(){return"Symbol ("+c(this).__description__+")"}},valueOf:{value:function(){return c(this)}}}),s(r.prototype,r.toPrimitive,{value:function(){var e=c(this);return"symbol"===(void 0===e?"undefined":i(e))?e:e.toString()}}),s(r.prototype,r.toStringTag,{value:"Symbol"}),s(o.prototype,r.toStringTag,{value:r.prototype[r.toStringTag]}),s(o.prototype,r.toPrimitive,{value:r.prototype[r.toPrimitive]})},function(e,t,n){var r,o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=(r=i)&&r.__esModule?r:{default:r};var s=/[!'\(\)~]|%20|%00/g,u=/\+/g,c={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},l=function(e){return c[e]},f="__URLSearchParams__";function p(e){return encodeURIComponent(e).replace(s,l)}function d(e){return decodeURIComponent(e.replace(u," "))}var h=function(){function e(t){if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this[f]=Object.create(null),t){"?"===t.charAt(0)&&(t=t.slice(1));for(var n,r,o=(t||"").split("&"),i=0,a=o.length;i<a;i++)-1<(n=(r=o[i]).indexOf("="))?this.append(d(r.slice(0,n)),d(r.slice(n+1))):r.length&&this.append(d(r),"")}}return o(e,[{key:"append",value:function(e,t){var n=this[f];e in n?n[e].push(""+t):n[e]=[""+t]}},{key:"delete",value:function(e){delete this[f][e]}},{key:"get",value:function(e){var t=this[f];return e in t?t[e][0]:null}},{key:"getAll",value:function(e){var t=this[f];return e in t?t[e].slice(0):[]}},{key:"has",value:function(e){return e in this[f]}},{key:"set",value:function(e,t){this[f][e]=[""+t]}},{key:"forEach",value:function(e,t){var n=this[f];Object.getOwnPropertyNames(n).forEach(function(r){n[r].forEach(function(n){e.call(t,n,r,this)},this)},this)}},{key:"keys",value:function(){var e=[];this.forEach(function(t,n){e.push(n)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t[a.default.iterator]=function(){return t},t}},{key:"values",value:function(){var e=[];this.forEach(function(t){e.push(t)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t[a.default.iterator]=function(){return t},t}},{key:"entries",value:function(){var e=[];this.forEach(function(t,n){e.push([n,t])});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t[a.default.iterator]=function(){return t},t}},{key:"toString",value:function(){var e,t,n,r,o=this[f],i=[];for(t in o)for(n=p(t),e=0,r=o[t];e<r.length;e++)i.push(n+"="+p(r[e]));return i.join("&")}}]),e}();h.prototype[a.default.iterator]=h.prototype.entries,e.exports=h},function(e,t,n){e.exports={get Promise(){return n(3)},get Symbol(){return n(0)},get Map(){return n(4)},get Set(){return n(5)},get WeakMap(){return n(6)},get WeakSet(){return n(7)},get FontFace(){return n(8)},get URL(){return n(9)},get URLSearchParams(){return n(1)},get matchMedia(){return n(10)}}},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function o(){}var i="function"==typeof setImmediate&&setImmediate||function(e){"function"==typeof setTimeout?setTimeout(e,0):e()},a=function(e){"undefined"!=typeof console&&console&&console.log("Possible Unhandled Promise Rejection:",e)};function s(e){if("object"!==r(this))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("Promise resolver is not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],p(e,this)}function u(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,i(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var r;try{r=n(e._value)}catch(e){return void l(t.promise,e)}c(t.promise,r)}else(1===e._state?c:l)(t.promise,e._value)})):e._deferreds.push(t)}function c(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===(void 0===t?"undefined":r(t))||"function"==typeof t)){var n=t.then;if(t instanceof s)return e._state=3,e._value=t,void f(e);if("function"==typeof n)return void p((o=n,i=t,function(){o.apply(i,arguments)}),e)}e._state=1,e._value=t,f(e)}catch(t){l(e,t)}var o,i}function l(e,t){e._state=2,e._value=t,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&i(function(){e._handled||a(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)u(e,e._deferreds[t]);e._deferreds=null}function p(e,t){var n=!1;try{e(function(e){n||(n=!0,c(t,e))},function(e){n||(n=!0,l(t,e))})}catch(e){if(n)return;n=!0,l(t,e)}}s.prototype.catch=function(e){return this.then(null,e)},s.prototype.then=function(e,t){var n=new this.constructor(o);return u(this,new function(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}(e,t,n)),n},s.all=function(e){var t=Array.prototype.slice.call(e);return new s(function(e,n){if(0===t.length)return e([]);var o=t.length;function i(a,s){try{if(s&&("object"===(void 0===s?"undefined":r(s))||"function"==typeof s)){var u=s.then;if("function"==typeof u)return void u.call(s,function(e){i(a,e)},n)}t[a]=s,0==--o&&e(t)}catch(e){n(e)}}for(var a=0;a<t.length;a++)i(a,t[a])})},s.resolve=function(e){return e&&"object"===(void 0===e?"undefined":r(e))&&e.constructor===s?e:new s(function(t){t(e)})},s.reject=function(e){return new s(function(t,n){n(e)})},s.race=function(e){return new s(function(t,n){for(var r=0,o=e.length;r<o;r++)e[r].then(t,n)})},s._setImmediateFn=function(e){i=e},s._setUnhandledRejectionFn=function(e){a=e},e.exports=s},function(e,t,n){var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};var a=(0,i.default)("undef"),s=(0,i.default)("NaN"),u=!0;function c(e){return Number.isNaN(e)?s:e}function l(e){return e===s?NaN:e}function f(e,t){var n=0,r=!1;return{next:function(){if(n===e._keys.length&&(r=!0),r)return{value:void 0,done:!0};for(;e._keys[n]===a;)n++;return{value:t.call(e,n++),done:!1}}}}function p(e){for(var t=0,n=0,r=e._keys.length;n<r;n++)e._keys[n]!==a&&t++;return t}function d(e,t){return"function"==typeof e[t]}var h=function e(t){this._keys=[],this._values=[],t&&d(t,"forEach")&&(t instanceof e||d(t,"clear")&&d(t,"delete")&&d(t,"entries")&&d(t,"forEach")&&d(t,"get")&&d(t,"has")&&d(t,"keys")&&d(t,"set")&&d(t,"values")?t.forEach(function(e,t){this.set.apply(this,[t,e])},this):t.forEach(function(e){this.set.apply(this,e)},this)),u||(this.size=p(this))};h.prototype={};try{Object.defineProperty(h.prototype,"size",{get:function(){return p(this)}})}catch(e){u=!1}h.prototype.get=function(e){var t=this._keys.indexOf(c(e));return-1!==t?this._values[t]:void 0},h.prototype.set=function(e,t){var n=this._keys.indexOf(c(e));return-1!==n?this._values[n]=t:(this._keys.push(c(e)),this._values.push(t),u||(this.size=p(this))),this},h.prototype.has=function(e){return-1!==this._keys.indexOf(c(e))},h.prototype.delete=function(e){var t=this._keys.indexOf(c(e));return-1!==t&&(this._keys[t]=a,this._values[t]=a,u||(this.size=p(this)),!0)},h.prototype.clear=function(){this._keys=this._values=[],u||(this.size=0)},h.prototype.values=function(){return f(this,function(e){return this._values[e]})},h.prototype.keys=function(){return f(this,function(e){return l(this._keys[e])})},h.prototype.entries=h.prototype[i.default.iterator]=function(){return f(this,function(e){return[l(this._keys[e]),this._values[e]]})},h.prototype.forEach=function(e,t){t=t||global;for(var n=this.entries(),r=n.next();!1===r.done;)e.call(t,r.value[1],r.value[0],this),r=n.next()},h.prototype[i.default.species]=h,Object.defineProperty(h,"constructor",{value:h});try{Object.defineProperty(h,"length",{value:0})}catch(e){}e.exports=h},function(e,t,n){var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};var a=(0,i.default)("undef"),s=(0,i.default)("NaN"),u=!0;function c(e){return Number.isNaN(e)?s:e}function l(e){return e===s?NaN:e}function f(e,t){var n=0;return{next:function(){for(;e._values[n]===a;)n++;return n===e._values.length?{value:void 0,done:!0}:{value:t.call(e,n++),done:!1}}}}function p(e){for(var t=0,n=0,r=e._values.length;n<r;n++)e._values[n]!==a&&t++;return t}var d=function(e){this._values=[],e&&"function"==typeof e.forEach&&e.forEach(function(e){this.add.call(this,e)},this),u||(this.size=p(this))};try{Object.defineProperty(d.prototype,"size",{get:function(){return p(this)}})}catch(e){u=!1}d.prototype.add=function(e){return e=c(e),-1===this._values.indexOf(e)&&(this._values.push(e),u||(this.size=p(this))),this},d.prototype.has=function(e){return-1!==this._values.indexOf(c(e))},d.prototype.delete=function(e){var t=this._values.indexOf(c(e));return-1!==t&&(this._values[t]=a,u||(this.size=p(this)),!0)},d.prototype.clear=function(){this._values=[],u||(this.size=0)},d.prototype.values=d.prototype.keys=function(){return f(this,function(e){return l(this._values[e])})},d.prototype.entries=d.prototype[i.default.iterator]=function(){return f(this,function(e){return[l(this._values[e]),l(this._values[e])]})},d.prototype.forEach=function(e,t){t=t||global;for(var n=this.entries(),r=n.next();!1===r.done;)e.call(t,r.value[1],r.value[0],this),r=n.next()},d.prototype[i.default.species]=d,Object.defineProperty(d,"constructor",{value:d});try{Object.defineProperty(d,"length",{value:0})}catch(e){}e.exports=d},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Object.defineProperty,i=Date.now()%1e9,a=function(e){this.name="__st"+(1e9*Math.random()>>>0)+i+++"__",e&&e.forEach&&e.forEach(function(e){this.set.apply(this,e)},this)};a.prototype.set=function(e,t){if("object"!==(void 0===e?"undefined":r(e))&&"function"!=typeof e)throw new TypeError("Invalid value used as weak map key");var n=e[this.name];return n&&n[0]===e?n[1]=t:o(e,this.name,{value:[e,t],writable:!0}),this},a.prototype.get=function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},a.prototype.delete=function(e){var t=e[this.name];return!(!t||t[0]!==e)&&(t[0]=t[1]=void 0,!0)},a.prototype.has=function(e){var t=e[this.name];return!!t&&t[0]===e},e.exports=a},function(e,t,n){var r=Date.now()%1e9,o=function(e){this.name="__st"+(1e9*Math.random()>>>0)+r+++"__",e&&e.forEach&&e.forEach(this.add,this)};o.prototype.add=function(e){var t=this.name;return e[t]||Object.defineProperty(e,t,{value:!0,writable:!0}),this},o.prototype.delete=function(e){return!!e[this.name]&&(e[this.name]=void 0,!0)},o.prototype.has=function(e){return!!e[this.name]},e.exports=o},function(e,t,n){e.exports=function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.family=t,this.source=n}},function(e,t,n){var r=n(1),o=Object.create(null);o.ftp=21,o.file=0,o.gopher=70,o.http=80,o.https=443,o.ws=80,o.wss=443;var i=Object.create(null);function a(e){return void 0!==o[e]}function s(){h.call(this),this._isInvalid=!0}function u(e){return""==e&&s.call(this),e.toLowerCase()}function c(e){var t=e.charCodeAt(0);return t>32&&t<127&&-1==[34,35,60,62,63,96].indexOf(t)?e:encodeURIComponent(e)}i["%2e"]=".",i[".%2e"]="..",i["%2e."]="..",i["%2e%2e"]="..";var l=void 0,f=/[a-zA-Z]/,p=/[a-zA-Z0-9\+\-\.]/;function d(e,t,n){var r=this;function d(e){w.push(e)}var h,v,y=t||"scheme start",m=0,_="",g=!1,b=!1,w=[];e:for(;(e[m-1]!=l||0==m)&&!this._isInvalid;){var S=e[m];switch(y){case"scheme start":if(!S||!f.test(S)){if(t){d("Invalid scheme.");break e}_="",y="no scheme";continue}_+=S.toLowerCase(),y="scheme";break;case"scheme":if(S&&p.test(S))_+=S.toLowerCase();else{if(":"!=S){if(t){if(l==S)break e;d("Code point not allowed in scheme: "+S);break e}_="",m=0,y="no scheme";continue}if(r._scheme=_,_="",t)break e;a(r._scheme)&&(r._isRelative=!0),y="file"==r._scheme?"relative":r._isRelative&&n&&n._scheme==r._scheme?"relative or authority":r._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==S?y="query":"#"==S?(r._fragment="#",y="fragment"):l!=S&&"\t"!=S&&"\n"!=S&&"\r"!=S&&(r._schemeData+=c(S));break;case"no scheme":if(n&&a(n._scheme)){y="relative";continue}d("Missing scheme."),s.call(r);break;case"relative or authority":if("/"!=S||"/"!=e[m+1]){d("Expected /, got: "+S),y="relative";continue}y="authority ignore slashes";break;case"relative":if(r._isRelative=!0,"file"!=r._scheme&&(r._scheme=n._scheme),l==S){r._host=n._host,r._port=n._port,r._path=n._path.slice(),r._query=n._query,r._username=n._username,r._password=n._password;break e}if("/"==S||"\\"==S)"\\"==S&&d("\\ is an invalid code point."),y="relative slash";else if("?"==S)r._host=n._host,r._port=n._port,r._path=n._path.slice(),r._query="?",r._username=n._username,r._password=n._password,y="query";else{if("#"!=S){var x=e[m+1],k=e[m+2];("file"!=r._scheme||!f.test(S)||":"!=x&&"|"!=x||l!=k&&"/"!=k&&"\\"!=k&&"?"!=k&&"#"!=k)&&(r._host=n._host,r._port=n._port,r._username=n._username,r._password=n._password,r._path=n._path.slice(),r._path.pop()),y="relative path";continue}r._host=n._host,r._port=n._port,r._path=n._path.slice(),r._query=n._query,r._fragment="#",r._username=n._username,r._password=n._password,y="fragment"}break;case"relative slash":if("/"!=S&&"\\"!=S){"file"!=r._scheme&&(r._host=n._host,r._port=n._port,r._username=n._username,r._password=n._password),y="relative path";continue}"\\"==S&&d("\\ is an invalid code point."),y="file"==r._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=S){d("Expected '/', got: "+S),y="authority ignore slashes";continue}y="authority second slash";break;case"authority second slash":if(y="authority ignore slashes","/"!=S){d("Expected '/', got: "+S);continue}break;case"authority ignore slashes":if("/"!=S&&"\\"!=S){y="authority";continue}d("Expected authority, got: "+S);break;case"authority":if("@"==S){g&&(d("@ already seen."),_+="%40"),g=!0;for(var C=0;C<_.length;C++){var E=_[C];if("\t"!=E&&"\n"!=E&&"\r"!=E)if(":"!=E||null!==r._password){var O=c(E);null!==r._password?r._password+=O:r._username+=O}else r._password="";else d("Invalid whitespace in authority.")}_=""}else{if(l==S||"/"==S||"\\"==S||"?"==S||"#"==S){m-=_.length,_="",y="host";continue}_+=S}break;case"file host":if(l==S||"/"==S||"\\"==S||"?"==S||"#"==S){2!=_.length||!f.test(_[0])||":"!=_[1]&&"|"!=_[1]?0==_.length?y="relative path start":(r._host=u.call(r,_),_="",y="relative path start"):y="relative path";continue}"\t"==S||"\n"==S||"\r"==S?d("Invalid whitespace in file host."):_+=S;break;case"host":case"hostname":if(":"!=S||b){if(l==S||"/"==S||"\\"==S||"?"==S||"#"==S){if(r._host=u.call(r,_),_="",y="relative path start",t)break e;continue}"\t"!=S&&"\n"!=S&&"\r"!=S?("["==S?b=!0:"]"==S&&(b=!1),_+=S):d("Invalid code point in host/hostname: "+S)}else if(r._host=u.call(r,_),_="",y="port","hostname"==t)break e;break;case"port":if(/[0-9]/.test(S))_+=S;else{if(l==S||"/"==S||"\\"==S||"?"==S||"#"==S||t){if(""!=_){var j=parseInt(_,10);j!=o[r._scheme]&&(r._port=j+""),_=""}if(t)break e;y="relative path start";continue}"\t"==S||"\n"==S||"\r"==S?d("Invalid code point in port: "+S):s.call(r)}break;case"relative path start":if("\\"==S&&d("'\\' not allowed in path."),y="relative path","/"!=S&&"\\"!=S)continue;break;case"relative path":var A;if(l!=S&&"/"!=S&&"\\"!=S&&(t||"?"!=S&&"#"!=S))"\t"!=S&&"\n"!=S&&"\r"!=S&&(_+=c(S));else"\\"==S&&d("\\ not allowed in relative path."),(A=i[_.toLowerCase()])&&(_=A),".."==_?(r._path.pop(),"/"!=S&&"\\"!=S&&r._path.push("")):"."==_&&"/"!=S&&"\\"!=S?r._path.push(""):"."!=_&&("file"==r._scheme&&0==r._path.length&&2==_.length&&f.test(_[0])&&"|"==_[1]&&(_=_[0]+":"),r._path.push(_)),_="","?"==S?(r._query="?",y="query"):"#"==S&&(r._fragment="#",y="fragment");break;case"query":t||"#"!=S?l!=S&&"\t"!=S&&"\n"!=S&&"\r"!=S&&(r._query+=(void 0,(v=(h=S).charCodeAt(0))>32&&v<127&&-1==[34,35,60,62,96].indexOf(v)?h:encodeURIComponent(h))):(r._fragment="#",y="fragment");break;case"fragment":l!=S&&"\t"!=S&&"\n"!=S&&"\r"!=S&&(r._fragment+=S)}m++}}function h(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function v(e,t){void 0===t||t instanceof v||(t=new v(String(t))),this._url=e,h.call(this);var n=e.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");d.call(this,n,null,t)}v.prototype={toString:function(){return this.href},get href(){if(this._isInvalid)return this._url;var e="";return""==this._username&&null==this._password||(e=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+e+this.host:"")+this.pathname+this._query+this._fragment},set href(e){h.call(this),d.call(this,e)},get protocol(){return this._scheme+":"},set protocol(e){this._isInvalid||d.call(this,e+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(e){!this._isInvalid&&this._isRelative&&d.call(this,e,"host")},get hostname(){return this._host},set hostname(e){!this._isInvalid&&this._isRelative&&d.call(this,e,"hostname")},get port(){return this._port},set port(e){!this._isInvalid&&this._isRelative&&d.call(this,e,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(e){!this._isInvalid&&this._isRelative&&(this._path=[],d.call(this,e,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(e){!this._isInvalid&&this._isRelative&&(this._query="?","?"==e[0]&&(e=e.slice(1)),d.call(this,e,"query"))},get searchParams(){return new r(this.search)},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(e){this._isInvalid||(this._fragment="#","#"==e[0]&&(e=e.slice(1)),d.call(this,e,"fragment"))},get origin(){var e;if(this._isInvalid||!this._scheme)return"";switch(this._scheme){case"data":case"file":case"javascript":case"mailto":return"null"}return(e=this.host)?this._scheme+"://"+e:""}},e.exports=v},function(e,t,n){var r=/^(?:(only|not)?\s*([_a-z][_a-z0-9-]*)|(\([^\)]+\)))(?:\s*and\s*(.*))?$/i,o=/^\(\s*([_a-z-][_a-z0-9-]*)\s*(?:\:\s*([^\)]+))?\s*\)$/,i=/^(?:(min|max)-)?(.+)/;function a(e,t){return(n=e,n.split(",").map(function(e){var t=(e=e.trim()).match(r);if(!t)throw new SyntaxError('Invalid CSS media query: "'+e+'"');var n=t[1],a=t[2],s=((t[3]||"")+(t[4]||"")).trim(),u={};if(u.inverse=!!n&&"not"===n.toLowerCase(),u.type=a?a.toLowerCase():"all",!s)return u.expressions=[],u;if(!(s=s.match(/\([^\)]+\)/g)))throw new SyntaxError('Invalid CSS media query: "'+e+'"');return u.expressions=s.map(function(t){var n=t.match(o);if(!n)throw new SyntaxError('Invalid CSS media query: "'+e+'"');var r=n[1].toLowerCase().match(i);return{modifier:r[1],feature:r[2],value:n[2]}}),u})).some(function(e){var n=e.inverse,r="all"===e.type||t.type===e.type;if(r&&n||!r&&!n)return!1;var o=e.expressions.every(function(e){var n=e.feature,r=e.modifier,o=e.value,i=t[n];if(!i)return!1;switch(n){case"width":case"height":o=parseFloat(o),i=parseFloat(i)}switch(r){case"min":return i>=o;case"max":return i<=o;default:return i===o}});return o&&!n||!o&&n});var n}e.exports=function(e){var t={matches:!1,media:e};return""===e?(t.matches=!0,t):(t.matches=a(e,{type:"screen",width:window.screen.width,height:window.screen.height}),t)}}])}},function(e,t,n){e.exports=function(e){return function(t,n,r){n instanceof Function&&(r=n,n=[]),e[t]={factory:r,deps:n,module:{exports:{}},isInitialized:!1,hasError:!1}}}},function(e,t,n){e.exports=function(e){return function t(n){var r=e[n];if(r&&r.isInitialized)return r.module.exports;if(!r)throw new Error('Requiring unknown module "'+n+'"');if(r.hasError)throw new Error('Requiring module "'+n+'" which threw an exception');try{r.isInitialized=!0,r.factory(t,r.module.exports,r.module)}catch(e){throw r.hasError=!0,r.isInitialized=!1,e}return r.module.exports}}},function(e,t,n){var r,o=n(10),i=(r=o)&&r.__esModule?r:{default:r};function a(e){if("*"==e)return e;for(var t=(e="string"==typeof e?e:"").split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function s(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r.errorMessage="Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n,r}e.exports=function(e){return function(t){var n=e("@weex-module/instanceWrap"),r=function(e){var t={isDowngrade:!1},n=WXEnvironment,r=e[(n.platform||"unknow").toLowerCase()]||{};for(var o in n){var u=o,c=u.toLowerCase(),l=n[o],f=c.indexOf("version")>=0,p=c.indexOf("devicemodel")>=0,d=r[o];if(d&&f){var h=a(d),v=a(n[o]);if(i.default.satisfies(v,h)){t=s(u,l,d);break}}else if(p&&(Array.isArray(d)?d:[d]).indexOf(l)>=0){t=s(u,l,d);break}}return t}(t);return!!r.isDowngrade&&(n.error(r.errorType,r.code,r.errorMessage),!0)}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default={satisfies:function(e,t){if((void 0===e?"undefined":r(e))+(void 0===t?"undefined":r(t))!="stringstring")return!1;if("*"==t)return!0;for(var n=t.match(/(\W+)?([\d|.]+)/),o=e.split("."),i=n[2].split("."),a=Math.max(o.length,i.length),s=0,u=0;u<a;u++){if(o[u]&&!i[u]&&parseInt(o[u])>0||parseInt(o[u])>parseInt(i[u])){s=1;break}if(i[u]&&!o[u]&&parseInt(i[u])>0||parseInt(o[u])<parseInt(i[u])){s=-1;break}}switch(n[1]){case"<":if(-1===s)return!0;break;case"<=":if(1!==s)return!0;break;case">":if(1===s)return!0;break;case">=":if(-1!==s)return!0;break;default:if(0===s)return!0}return!1}},e.exports=t.default},function(e,t,n){var r,o=n(1),i=(r=o)&&r.__esModule?r:{default:r};var a="visible",s="hidden",u="visibilitychange";function c(e){e.body.addEvent("viewappear",function(t){e.visibilityState=a,t.type=u,e.dispatchEvent(t)}),e.body.addEvent("viewdisappear",function(t){e.visibilityState=s,t.type=u,e.dispatchEvent(t)})}e.exports=function(e,t){var n=new i.default,r=!1;try{t.addEventListener=function(e,o){e===u&&(t.body?c(t):r=!0),n.on(e,o)},t.removeEventListener=function(e,r){var o;e===u&&(o=t).body&&(o.body.removeEvent("viewappear"),o.body.removeEvent("viewdisappear")),n.off(e,r)},t.dispatchEvent=function(e){n.emit(e.type,e)},t.fonts={add:function(t){e("@weex-module/dom").addRule("fontFace",{fontFamily:t.family,src:t.source})}},t.visibilityState=a;var o=t.createBody;Object.defineProperty(t,"createBody",{value:function(){var e=o.apply(t,arguments);return r&&c(t),e}})}catch(e){console.log(e)}return t}},function(e,t,n){var r="@weex-module/location";e.exports=function(e,t){return t.assign=function(t){e("@weex-module/navigator").push({url:t,animated:"true"},function(e){})},t.replace=function(t){e(r).replace(t)},t.reload=function(t){e(r).reload(t)},t}},function(e,t,n){e.exports=function(e,t){function n(e){return"string"!=typeof e&&(e=String(e)),e.toLowerCase()}function r(e){return"string"!=typeof e&&(e=String(e)),e}function o(e){this.originHeaders=e,this.map={},e instanceof o?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function i(){return this.bodyUsed=!1,this._initBody=function(e,t){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else{if(e)throw new Error("unsupported BodyInit type");this._bodyText=""}},this.text=function(){var e=function(e){if(e.bodyUsed)return t.reject(new TypeError("Already read"));e.bodyUsed=!0}(this);return e||t.resolve(this._bodyText)},this.json=function(){return this.text().then(JSON.parse)},this}o.prototype.append=function(e,t){e=n(e),t=r(t);var o=this.map[e];this.map[e]=o?o+","+t:t},o.prototype.delete=function(e){delete this.map[n(e)]},o.prototype.get=function(e){return e=n(e),this.has(e)?this.map[e]:null},o.prototype.has=function(e){return this.map.hasOwnProperty(n(e))},o.prototype.set=function(e,t){this.map[n(e)]=[r(t)]},o.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)};var a=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function s(e,t){var n,r,i=(t=t||{}).body;if(s.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new o(e.headers)),this.method=e.method,this.mode=e.mode,i||(i=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new o(t.headers)),this.method=(n=t.method||this.method||"GET",r=n.toUpperCase(),a.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i,t)}function u(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new o(t.headers),this.url=t.url||"",this._initBody(e,t)}s.prototype.clone=function(){return new s(this)},i.call(s.prototype),i.call(u.prototype),u.prototype.clone=function(){return new u(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},u.error=function(){var e=new u(null,{status:0,statusText:""});return e.type="error",e};var c=[301,302,303,307,308];u.redirect=function(e,t){if(-1===c.indexOf(t))throw new RangeError("Invalid status code");return new u(null,{status:t,headers:{location:e}})};return{fetch:function(n,r){return new t(function(t,o){var i,a={url:(i=s.prototype.isPrototypeOf(n)&&!r?n:new s(n,r)).url,method:i.method,headers:i.headers&&i.headers.originHeaders};void 0!==i._bodyInit&&(a.body=i._bodyInit),a.type=r&&r.dataType?r.dataType:"text",(0,e("@weex-module/stream").fetch)(a,function(e){try{"string"==typeof e&&(e=JSON.parse(e));var n=new u("string"==typeof e.data?e.data:JSON.stringify(e.data),{status:e.status,statusText:e.statusText,headers:e.headers,url:i.url});t(n)}catch(e){o(e)}},function(e){})})},Headers:o,Request:s,Response:u}}},function(e,t,n){var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var o=n(2),i=0,a=1,s=2,u=3,c=4,l=["abort","error","load","loadstart","progress","timeout","loadend","readystatechange"];e.exports=function(e){var t=function(t){function n(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);var e=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return e.UNSENT=i,e.OPENED=a,e.HEADERS_RECEIVED=s,e.LOADING=u,e.DONE=c,e.readyState=i,e.status=0,e.statusText="",e.timeout=0,e._aborted=!1,e._hasError=!1,e._method=null,e._response="",e._url=null,e._timedOut=!1,e._reset(),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,o.apply(undefined,l)),r(n,[{key:"_reset",value:function(){this.readyState=this.UNSENT,this.responseHeaders=void 0,this.status=0,this._hasError=!1,this._headers={},this._response="",this._responseType="",this._sent=!1,this._lowerCaseResponseHeaders={},this._timedOut=!1}},{key:"getAllResponseHeaders",value:function(){if(!this.responseHeaders)return null;var e=this.responseHeaders||{};return Object.keys(e).map(function(t){return t+": "+e[t]}).join("\r\n")}},{key:"getResponseHeader",value:function(e){var t=this._lowerCaseResponseHeaders[e.toLowerCase()];return void 0!==t?t:null}},{key:"setRequestHeader",value:function(e,t){if(this.readyState!==this.OPENED)throw new Error("Request has not been opened");this._headers[e.toLowerCase()]=String(t)}},{key:"open",value:function(e,t,n){if(this.readyState!==this.UNSENT)throw new Error("Cannot open, already sending");if(void 0!==n&&!n)throw new Error("Synchronous http requests are not supported");if(!t)throw new Error("Cannot load an empty url");this._method=e.toUpperCase(),this._url=t,this._aborted=!1,this.setReadyState(this.OPENED)}},{key:"send",value:function(t){var n=this;if(this.readyState!==this.OPENED)throw new Error("Request has not been opened");if(this._sent)throw new Error("Request has already been sent");this._sent=!0,(0,e("@weex-module/stream").fetch)({method:this._method,url:this._url,headers:this._headers,body:t,type:"text"},function(e){try{"string"==typeof e&&(e=JSON.parse(e)),n.status=e.status,n.statusText=e.statusText,n.setResponseHeaders(e.headers),e.ok?n._response=e.data:(""!==n._responseType&&"text"!==n._responseType||(n._response=e.data),n._hasError=!0)}catch(e){}n.setReadyState(n.DONE)},function(e){n.status=e.status,n.statusText=e.statusText,n.setResponseHeaders(e.headers),n.setReadyState(e.readyState)})}},{key:"abort",value:function(){this._aborted=!0,this.readyState===this.UNSENT||this.readyState===this.OPENED&&!this._sent||this.readyState===this.DONE||(this._reset(),this.setReadyState(this.DONE)),this._reset()}},{key:"setResponseHeaders",value:function(e){this.responseHeaders=e||null;var t=e||{};this._lowerCaseResponseHeaders=Object.keys(t).reduce(function(e,n){return e[n.toLowerCase()]=t[n],e},{})}},{key:"setReadyState",value:function(e){this.readyState=e,this.dispatchEvent({type:"readystatechange"}),e===this.DONE&&(this._aborted?this.dispatchEvent({type:"abort"}):this._hasError?this._timedOut?this.dispatchEvent({type:"timeout"}):this.dispatchEvent({type:"error"}):this.dispatchEvent({type:"load"}),this.dispatchEvent({type:"loadend"}))}},{key:"responseType",get:function(){return this._responseType},set:function(e){if(this._sent)throw new Error("Failed to set the 'responseType' property on 'XMLHttpRequest': The response type cannot be set after the request has been sent.");this._responseType=e}},{key:"responseText",get:function(){if(""!==this._responseType&&"text"!==this._responseType)throw new Error("The 'responseText' property is only available if 'responseType' is set to '' or 'text', but it is '"+this._responseType+"'.");return this.readyState<u?"":this._response}},{key:"response",get:function(){var e=this.responseType;return""===e||"text"===e?this.readyState<u||this._hasError?"":this._response:this.readyState!==c?null:void 0}}]),n}();return t.UNSENT=i,t.OPENED=a,t.HEADERS_RECEIVED=s,t.LOADING=u,t.DONE=c,t}},function(e,t,n){var r=n(0),o=r.LISTENERS,i=r.ATTRIBUTE,a=r.newNode;e.exports.defineCustomEventTarget=function(e,t){function n(){e.call(this)}var r={constructor:{value:n,configurable:!0,writable:!0}};return t.forEach(function(e){r["on"+e]={get:function(){return function(e,t){for(var n=e[o][t];null!=n;){if(n.kind===i)return n.listener;n=n.next}return null}(this,e)},set:function(t){!function(e,t,n){"function"!=typeof n&&"object"!=typeof n&&(n=null);for(var r=null,s=e[o][t];null!=s;)s.kind===i?null==r?e[o][t]=s.next:r.next=s.next:r=s,s=s.next;null!=n&&(null==r?e[o][t]=a(n,i):r.next=a(n,i))}(this,e,t)},configurable:!0,enumerable:!0}}),n.prototype=Object.create(e.prototype,r),n}},function(e,t,n){var r=n(0).createUniqueKey,o=r("stop_immediate_propagation_flag"),i=r("canceled_flag"),a=r("passive_listener_flag"),s=r("original_event"),u=Object.freeze({stopPropagation:Object.freeze({value:function(){var e=this[s];"function"==typeof e.stopPropagation&&e.stopPropagation()},writable:!0,configurable:!0}),stopImmediatePropagation:Object.freeze({value:function(){this[o]=!0;var e=this[s];"function"==typeof e.stopImmediatePropagation&&e.stopImmediatePropagation()},writable:!0,configurable:!0}),preventDefault:Object.freeze({value:function(){if(!this[a]){!0===this.cancelable&&(this[i]=!0);var e=this[s];"function"==typeof e.preventDefault&&e.preventDefault()}},writable:!0,configurable:!0}),defaultPrevented:Object.freeze({get:function(){return this[i]},enumerable:!0,configurable:!0})});e.exports.STOP_IMMEDIATE_PROPAGATION_FLAG=o,e.exports.PASSIVE_LISTENER_FLAG=a,e.exports.createEventWrapper=function(e,t){var n="number"==typeof e.timeStamp?e.timeStamp:Date.now(),r={type:{value:e.type,enumerable:!0},target:{value:t,enumerable:!0},currentTarget:{value:t,enumerable:!0},eventPhase:{value:2,enumerable:!0},bubbles:{value:Boolean(e.bubbles),enumerable:!0},cancelable:{value:Boolean(e.cancelable),enumerable:!0},timeStamp:{value:n,enumerable:!0},isTrusted:{value:!1,enumerable:!0}};return r[o]={value:!1,writable:!0},r[i]={value:!1,writable:!0},r[a]={value:!1,writable:!0},r[s]={value:e},void 0!==e.detail&&(r.detail={value:e.detail,enumerable:!0}),Object.create(Object.create(e,u),r)}},function(e,t,n){var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=n(2),a="@weex-module/webSocket",s=0,u=1,c=3,l=["close","error","message","open"],f=function e(t,n){o(this,e),this.type=t.toString(),Object.assign(this,n)};e.exports=function(e){var t=function(t){function n(t,r){o(this,n);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),l=e(a);return l.WebSocket(t,r),i.readyState=s,i.websocket=l,l.onmessage(function(e){i.dispatchEvent(new f("message",e))}),l.onopen(function(e){i.readyState=u,i.dispatchEvent(new f("open"))}),l.onclose(function(e){i.readyState=c,i.dispatchEvent(new f("close",{code:e.code,reason:e.reason}))}),l.onerror(function(e){i.dispatchEvent(new f("error",e))}),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,i(l)),r(n,[{key:"close",value:function(e,t){2!==this.readyState&&this.readyState!==c&&(this.readyState=2,this.websocket.close(e,t))}},{key:"send",value:function(e){if("string"!=typeof e)throw new Error("Unsupported data type");this.websocket.send(e)}}]),n}();return t.CONNECTING=s,t.OPEN=u,t.CLOSING=2,t.CLOSED=c,t}},function(e,t,n){var r="@weex-module/timer";e.exports=function(e,t){return{setTimeout:function(n,o){return e(r).setTimeout(n,o),t.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(t){e(r).clearTimeout(t)},setInterval:function(n,o){return e(r).setInterval(n,o),t.taskCenter.callbackManager.lastCallbackId.toString()},clearInterval:function(t){e(r).clearInterval(t)},requestAnimationFrame:function(t){return e(r).setTimeout(t,16)},cancelAnimationFrame:function(t){e(r).clearTimeout(t)}}}},function(e,t,n){e.exports=function(){var e={},t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.btoa=function(e){for(var n,r,o=String(e),i=0,a=t,s="";o.charAt(0|i)||(a="=",i%1);s+=a.charAt(63&n>>8-i%1*8)){if((r=o.charCodeAt(i+=.75))>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");n=n<<8|r}return s},e.atob=function(e){var n=String(e).replace(/=+$/,"");if(n.length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,i=0,a=0,s="";o=n.charAt(a++);~o&&(r=i%4?64*r+o:o,i++%4)?s+=String.fromCharCode(255&r>>(-2*i&6)):0)o=t.indexOf(o);return s},e}},function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.exports=function(e){var t,n={};return n.timing=(r(t={unloadEventStart:0,unloadEventEnd:0,navigationStart:e,redirectStart:0,redirectEnd:0,fetchStart:e,domainLookupStart:e,domainLookupEnd:e,connectStart:e,secureConnectionStart:e},"connectStart",e),r(t,"requestStart",e),r(t,"responseStart",e),r(t,"responseEnd",e),r(t,"domLoading",0),r(t,"domInteractive",0),r(t,"domComplete",0),r(t,"domContentLoadedEventStart",0),r(t,"domContentLoadedEventEnd",0),r(t,"loadEventStart",0),r(t,"loadEventEnd",0),t),n.now=function(){return Date.now()-n.timing.navigationStart},n}},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}e.exports=function(){var e=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,e),this.type=t,this.bubbles=Boolean(n.bubbles),this.cancelable=Boolean(n.cancelable)};return{Event:e,CustomEvent:function(t){function n(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,n);var o=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e,t));return o.detail=t.detail,o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,e),n}()}}}])})),Weex:ui};var li,fi,pi,di,hi=Object.freeze({$userTrack:function(e,t,n,r){console.error("[Upgrade Warning] $userTrack will be removed in the next version!"),console.error("[JS Framework] Vm#$userTrack is deprecated, please use \"require('@weex-module/userTrack').commit(type, name, comName, param)\" instead"),this._app.requireModule("userTrack").commit(e,t,n,r)},$sendMtop:function(e,t){console.error("[Upgrade Warning] $sendMtop will be removed in the next version!"),console.error("[JS Framework] Vm#$sendMtop is deprecated, please use \"require('@weex-module/stream').sendMtop(params, callback)\" instead"),"undefined"==typeof window?this._app.requireModule("windvane").call({class:"MtopWVPlugin",method:"send",data:e},t):this._app.requireModule("stream").sendMtop(e,t)},$callWindvane:function(e,t){console.error("[Upgrade Warning] $callWindvane will be removed in the next version!"),console.error("[JS Framework] Vm#$callWindvane is deprecated, please use \"require('@weex-module/windvane').call(params, callback)\" instead"),this._app.requireModule("windvane").call(e,t)},$setSpm:function(e,t){console.error("[Upgrade Warning] $setSpm will be removed in the next version!"),console.error("[JS Framework] Vm#$setSpm is deprecated, please use \"require('@weex-module/pageInfo').setSpm(a, b)\" instead"),this._app.requireModule("pageInfo").setSpm(e,t)},$getUserInfo:function(e){console.error("[Upgrade Warning] $getUserInfo will be removed in the next version!"),console.error("[JS Framework] Vm#$getUserInfo is deprecated, please use \"require('@weex-module/user').getUserInfo(callback)\" instead"),this._app.requireModule("user").getUserInfo(e)},$login:function(e){console.error("[Upgrade Warning] $login will be removed in the next version!"),console.error("[JS Framework] Vm#$login is deprecated, please use \"require('@weex-module/user').login(callback)\" instead"),this._app.requireModule("user").login(e)},$logout:function(e){console.error("[Upgrade Warning] $logout will be removed in the next version!"),console.error("[JS Framework] Vm#$logout is deprecated, please use \"require('@weex-module/user').logout(callback)\" instead"),this._app.requireModule("user").logout(e)}});!function(e){var t=ir.init,n=ir.config;n.frameworks=e;var r=en.native,o=en.transformer;for(var i in lr)ir.service.register(i,lr[i]);ir.freezePrototype(),global.frameworkVersion=r,global.transformerVersion=o;var a=t(n),s=function(e){global[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=a[e].apply(a,t);return r instanceof Error&&console.error(r.toString()),r}};for(var u in a)s(u)}(ci),Object.freeze(Object),Object.freeze(Array),Yt(li=Object.prototype,"__defineGetter__",fi="Object.prototype"),Yt(li,"__defineSetter__",fi),Yt(li,"__lookupGetter__",fi),Yt(li,"__lookupSetter__",fi),Yt(li,"constructor",fi),Yt(li,"hasOwnProperty",fi),Yt(li,"isPrototypeOf",fi),Yt(li,"propertyIsEnumerable",fi),Yt(li,"toLocaleString",fi),Yt(li,"toString",fi),Yt(li,"valueOf",fi),Object.seal(li),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),Yt(pi=Error.prototype,"name",di="Error.prototype"),Yt(pi,"message",di),Yt(pi,"toString",di),Yt(pi,"constructor",di),Object.seal(pi),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype),global.registerMethods(hi)});
-//# sourceMappingURL=weex-js-framework.min.js.map
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/pre-build/weex-main-jsfm.js b/ios/Pods/WeexSDK/pre-build/weex-main-jsfm.js
deleted file mode 100644
index c6b4dc1..0000000
--- a/ios/Pods/WeexSDK/pre-build/weex-main-jsfm.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(this.nativeLog||function(e){console.log(e)})("Start JS Framework 0.29.6, Build at 2019-04-08 17:04. (Vue: 2.5.16-weex.5, Rax: 0.4.20)");var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){"use strict";var t,c,r,l;function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function n(e,t){return e(t={exports:{}},t.exports),t.exports}Array.from||(Array.from=(t=Object.prototype.toString,c=function(e){return"function"==typeof e||"[object Function]"===t.call(e)},r=Math.pow(2,53)-1,l=function(e){var t,n=(t=Number(e),isNaN(t)?0:0!==t&&isFinite(t)?(0<t?1:-1)*Math.floor(Math.abs(t)):t);return Math.min(Math.max(n,0),r)},function(e){var t=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var n,r=1<arguments.length?arguments[1]:void 0;if(void 0!==r){if(!c(r))throw new TypeError("Array.from: when provided, the second argument must be a function");2<arguments.length&&(n=arguments[2])}for(var o,i=l(t.length),a=c(this)?Object(new this(i)):new Array(i),s=0;s<i;)o=t[s],a[s]=r?void 0===n?r(o,s):r.call(n,o,s):o,s+=1;return a.length=i,a}));var v=n(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),m=n(function(e){var t=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=t)}),o=(m.version,function(e){return"object"==typeof e?null!==e:"function"==typeof e}),y=function(e){if(!o(e))throw TypeError(e+" is not an object!");return e},i=function(e){try{return!!e()}catch(e){return!0}},a=!i(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),s=v.document,u=o(s)&&o(s.createElement),f=function(e){return u?s.createElement(e):{}},p=!a&&!i(function(){return 7!=Object.defineProperty(f("div"),"a",{get:function(){return 7}}).a}),d=Object.defineProperty,h={f:a?Object.defineProperty:function(e,t,n){if(y(e),t=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}(t,!0),y(n),p)try{return d(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},k=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},S=a?function(e,t,n){return h.f(e,t,k(1,n))}:function(e,t,n){return e[t]=n,e},g={}.hasOwnProperty,_=function(e,t){return g.call(e,t)},b=0,w=Math.random(),O=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},C=n(function(e){var i=O("src"),t="toString",n=Function[t],a=(""+n).split(t);m.inspectSource=function(e){return n.call(e)},(e.exports=function(e,t,n,r){var o="function"==typeof n;o&&(_(n,"name")||S(n,"name",t)),e[t]!==n&&(o&&(_(n,i)||S(n,i,e[t]?""+e[t]:a.join(String(t)))),e===v?e[t]=n:r?e[t]?e[t]=n:S(e,t,n):(delete e[t],S(e,t,n)))})(Function.prototype,t,function(){return"function"==typeof this&&this[i]||n.call(this)})}),x=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},E=function(r,o,e){if(x(r),void 0===o)return r;switch(e){case 1:return function(e){return r.call(o,e)};case 2:return function(e,t){return r.call(o,e,t)};case 3:return function(e,t,n){return r.call(o,e,t,n)}}return function(){return r.apply(o,arguments)}},$="prototype",A=function(e,t,n){var r,o,i,a,s=e&A.F,c=e&A.G,l=e&A.S,u=e&A.P,f=e&A.B,p=c?v:l?v[t]||(v[t]={}):(v[t]||{})[$],d=c?m:m[t]||(m[t]={}),h=d[$]||(d[$]={});for(r in c&&(n=t),n)i=((o=!s&&p&&void 0!==p[r])?p:n)[r],a=f&&o?E(i,v):u&&"function"==typeof i?E(Function.call,i):i,p&&C(p,r,i,e&A.U),d[r]!=i&&S(d,r,a),u&&h[r]!=i&&(h[r]=i)};v.core=m,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;var j,I=A,M={}.toString,T=function(e){return M.call(e).slice(8,-1)},P=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==T(e)?e.split(""):Object(e)},F=function(e){if(null==e)throw TypeError("Can't call method on  "+e);return e},N=function(e){return P(F(e))},R=Math.ceil,D=Math.floor,V=function(e){return isNaN(e=+e)?0:(0<e?D:R)(e)},L=Math.min,J=function(e){return 0<e?L(V(e),9007199254740991):0},W=Math.max,q=Math.min,B=n(function(e){var t="__core-js_shared__",n=v[t]||(v[t]={});(e.exports=function(e,t){return n[e]||(n[e]=void 0!==t?t:{})})("versions",[]).push({version:m.version,mode:"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})}),U=B("keys"),z=function(e){return U[e]||(U[e]=O(e))},H=(j=!1,function(e,t,n){var r,o,i,a=N(e),s=J(a.length),c=(o=s,(r=V(r=n))<0?W(r+o,0):q(r,o));if(j&&t!=t){for(;c<s;)if((i=a[c++])!=i)return!0}else for(;c<s;c++)if((j||c in a)&&a[c]===t)return j||c||0;return!j&&-1}),G=z("IE_PROTO"),X="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),K=Object.keys||function(e){return function(e,t){var n,r=N(e),o=0,i=[];for(n in r)n!=G&&_(r,n)&&i.push(n);for(;t.length>o;)_(r,n=t[o++])&&(~H(i,n)||i.push(n));return i}(e,X)},Z={f:Object.getOwnPropertySymbols},Y={f:{}.propertyIsEnumerable},Q=function(e){return Object(F(e))},ee=Object.assign,te=!ee||i(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=ee({},e)[n]||Object.keys(ee({},t)).join("")!=r})?function(e,t){for(var n=arguments,r=Q(e),o=arguments.length,i=1,a=Z.f,s=Y.f;i<o;)for(var c,l=P(n[i++]),u=a?K(l).concat(a(l)):K(l),f=u.length,p=0;p<f;)s.call(l,c=u[p++])&&(r[c]=l[c]);return r}:ee;I(I.S+I.F,"Object",{assign:te});m.Object.assign;Object.setPrototypeOf||(Object.setPrototypeOf=function(t,n){var r;function o(e,t){return r.call(e,t),e}try{(r=t.getOwnPropertyDescriptor(t.prototype,n).set).call({},null)}catch(e){if(t.prototype!=={}[n])return;r=function(e){this[n]=e},o.polyfill=o(o({},null),t.prototype)instanceof t}return o}(Object,"__proto__"));var ne=global.WXEnvironment;void 0===ne||"iOS"!==ne.platform||ne.__enable_native_promise__||(global.Promise=void 0);var re=n(function(e){var t=B("wks"),n=v.Symbol,r="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=r&&n[e]||(r?n:O)("Symbol."+e))}).store=t}),oe=re("toStringTag"),ie="Arguments"==T(function(){return arguments}()),ae=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),oe))?n:ie?T(t):"Object"==(r=T(t))&&"function"==typeof t.callee?"Arguments":r},se={};se[re("toStringTag")]="z",se+""!="[object z]"&&C(Object.prototype,"toString",function(){return"[object "+ae(this)+"]"},!0);var ce={},le=a?Object.defineProperties:function(e,t){y(e);for(var n,r=K(t),o=r.length,i=0;i<o;)h.f(e,n=r[i++],t[n]);return e},ue=v.document,fe=ue&&ue.documentElement,pe=z("IE_PROTO"),de=function(){},he="prototype",ve=function(){var e,t=f("iframe"),n=X.length;for(t.style.display="none",fe.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),ve=e.F;n--;)delete ve[he][X[n]];return ve()},me=Object.create||function(e,t){var n;return null!==e?(de[he]=y(e),n=new de,de[he]=null,n[pe]=e):n=ve(),void 0===t?n:le(n,t)},ye=h.f,ge=re("toStringTag"),_e=function(e,t,n){e&&!_(e=n?e:e.prototype,ge)&&ye(e,ge,{configurable:!0,value:t})},be={};S(be,re("iterator"),function(){return this});var we,ke=z("IE_PROTO"),Se=Object.prototype,Oe=Object.getPrototypeOf||function(e){return e=Q(e),_(e,ke)?e[ke]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Se:null},Ce=re("iterator"),xe=!([].keys&&"next"in[].keys()),Ee="values",$e=function(){return this},Ae=function(e,t,n,r,o,i,a){var s,c,l;c=t,l=r,(s=n).prototype=me(be,{next:k(1,l)}),_e(s,c+" Iterator");var u,f,p,d=function(e){if(!xe&&e in y)return y[e];switch(e){case"keys":case Ee:return function(){return new n(this,e)}}return function(){return new n(this,e)}},h=t+" Iterator",v=o==Ee,m=!1,y=e.prototype,g=y[Ce]||y["@@iterator"]||o&&y[o],_=g||d(o),b=o?v?d("entries"):_:void 0,w="Array"==t&&y.entries||g;if(w&&(p=Oe(w.call(new e)))!==Object.prototype&&p.next&&(_e(p,h,!0),"function"!=typeof p[Ce]&&S(p,Ce,$e)),v&&g&&g.name!==Ee&&(m=!0,_=function(){return g.call(this)}),(xe||m||!y[Ce])&&S(y,Ce,_),ce[t]=_,ce[h]=$e,o)if(u={values:v?_:d(Ee),keys:i?_:d("keys"),entries:b},a)for(f in u)f in y||C(y,f,u[f]);else I(I.P+I.F*(xe||m),t,u);return u},je=(we=!0,function(e,t){var n,r,o=String(F(e)),i=V(t),a=o.length;return i<0||a<=i?we?"":void 0:(n=o.charCodeAt(i))<55296||56319<n||i+1===a||(r=o.charCodeAt(i+1))<56320||57343<r?we?o.charAt(i):n:we?o.slice(i,i+2):r-56320+(n-55296<<10)+65536});Ae(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=je(t,n),this._i+=e.length,{value:e,done:!1})});var Ie=re("unscopables"),Me=Array.prototype;null==Me[Ie]&&S(Me,Ie,{});var Te=function(e){Me[Ie][e]=!0},Pe=function(e,t){return{value:t,done:!!e}},Fe=Ae(Array,"Array",function(e,t){this._t=N(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Pe(1)):Pe(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");ce.Arguments=ce.Array,Te("keys"),Te("values"),Te("entries");for(var Ne=re("iterator"),Re=re("toStringTag"),De=ce.Array,Ve={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Le=K(Ve),Je=0;Je<Le.length;Je++){var We,qe=Le[Je],Be=Ve[qe],Ue=v[qe],ze=Ue&&Ue.prototype;if(ze&&(ze[Ne]||S(ze,Ne,De),ze[Re]||S(ze,Re,qe),ce[qe]=De,Be))for(We in Fe)ze[We]||C(ze,We,Fe[We],!0)}var He,Ge,Xe,Ke=function(t,e,n,r){try{return r?e(y(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&y(o.call(t)),e}},Ze=re("iterator"),Ye=Array.prototype,Qe=re("iterator"),et=m.getIteratorMethod=function(e){if(null!=e)return e[Qe]||e["@@iterator"]||ce[ae(e)]},tt=n(function(e){var d={},h={},t=e.exports=function(e,t,n,r,o){var i,a,s,c,l,u=o?function(){return e}:et(e),f=E(n,r,t?2:1),p=0;if("function"!=typeof u)throw TypeError(e+" is not iterable!");if(void 0===(l=u)||ce.Array!==l&&Ye[Ze]!==l){for(s=u.call(e);!(a=s.next()).done;)if((c=Ke(s,f,a.value,t))===d||c===h)return c}else for(i=J(e.length);p<i;p++)if((c=t?f(y(a=e[p])[0],a[1]):f(e[p]))===d||c===h)return c};t.BREAK=d,t.RETURN=h}),nt=re("species"),rt=v.process,ot=v.setImmediate,it=v.clearImmediate,at=v.MessageChannel,st=v.Dispatch,ct=0,lt={},ut="onreadystatechange",ft=function(){var e=+this;if(lt.hasOwnProperty(e)){var t=lt[e];delete lt[e],t()}},pt=function(e){ft.call(e.data)};ot&&it||(ot=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return lt[++ct]=function(){!function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}e.apply(n,t)}("function"==typeof e?e:Function(e),n)},He(ct),ct},it=function(e){delete lt[e]},"process"==T(rt)?He=function(e){rt.nextTick(E(ft,e,1))}:st&&st.now?He=function(e){st.now(E(ft,e,1))}:at?(Xe=(Ge=new at).port2,Ge.port1.onmessage=pt,He=E(Xe.postMessage,Xe,1)):v.addEventListener&&"function"==typeof postMessage&&!v.importScripts?(He=function(e){v.postMessage(e+"","*")},v.addEventListener("message",pt,!1)):He=ut in f("script")?function(e){fe.appendChild(f("script"))[ut]=function(){fe.removeChild(this),ft.call(e)}}:function(e){setTimeout(E(ft,e,1),0)});var dt={set:ot,clear:it},ht=dt.set,vt=v.MutationObserver||v.WebKitMutationObserver,mt=v.process,yt=v.Promise,gt="process"==T(mt);function _t(e){var n,r;this.promise=new e(function(e,t){if(void 0!==n||void 0!==r)throw TypeError("Bad Promise constructor");n=e,r=t}),this.resolve=x(n),this.reject=x(r)}var bt={f:function(e){return new _t(e)}},wt=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},kt=v.navigator,St=kt&&kt.userAgent||"",Ot=re("species"),Ct=re("iterator"),xt=!1;try{[7][Ct]().return=function(){xt=!0}}catch(e){}var Et,$t,At,jt,It,Mt=dt.set,Tt=function(){var n,r,o,e=function(){var e,t;for(gt&&(e=mt.domain)&&e.exit();n;){t=n.fn,n=n.next;try{t()}catch(e){throw n?o():r=void 0,e}}r=void 0,e&&e.enter()};if(gt)o=function(){mt.nextTick(e)};else if(!vt||v.navigator&&v.navigator.standalone)if(yt&&yt.resolve){var t=yt.resolve(void 0);o=function(){t.then(e)}}else o=function(){ht.call(v,e)};else{var i=!0,a=document.createTextNode("");new vt(e).observe(a,{characterData:!0}),o=function(){a.data=i=!i}}return function(e){var t={fn:e,next:void 0};r&&(r.next=t),n||(n=t,o()),r=t}}(),Pt="Promise",Ft=v.TypeError,Nt=v.process,Rt=Nt&&Nt.versions,Dt=Rt&&Rt.v8||"",Vt=v[Pt],Lt="process"==ae(Nt),Jt=function(){},Wt=$t=bt.f,qt=!!function(){try{var e=Vt.resolve(1),t=(e.constructor={})[re("species")]=function(e){e(Jt,Jt)};return(Lt||"function"==typeof PromiseRejectionEvent)&&e.then(Jt)instanceof t&&0!==Dt.indexOf("6.6")&&-1===St.indexOf("Chrome/66")}catch(e){}}(),Bt=function(e){var t;return!(!o(e)||"function"!=typeof(t=e.then))&&t},Ut=function(u,n){if(!u._n){u._n=!0;var r=u._c;Tt(function(){for(var c=u._v,l=1==u._s,e=0,t=function(e){var t,n,r,o=l?e.ok:e.fail,i=e.resolve,a=e.reject,s=e.domain;try{o?(l||(2==u._h&&Gt(u),u._h=1),!0===o?t=c:(s&&s.enter(),t=o(c),s&&(s.exit(),r=!0)),t===e.promise?a(Ft("Promise-chain cycle")):(n=Bt(t))?n.call(t,i,a):i(t)):a(c)}catch(e){s&&!r&&s.exit(),a(e)}};r.length>e;)t(r[e++]);u._c=[],u._n=!1,n&&!u._h&&zt(u)})}},zt=function(i){Mt.call(v,function(){var e,t,n,r=i._v,o=Ht(i);if(o&&(e=wt(function(){Lt?Nt.emit("unhandledRejection",r,i):(t=v.onunhandledrejection)?t({promise:i,reason:r}):(n=v.console)&&n.error&&n.error("Unhandled promise rejection",r)}),i._h=Lt||Ht(i)?2:1),i._a=void 0,o&&e.e)throw e.v})},Ht=function(e){return 1!==e._h&&0===(e._a||e._c).length},Gt=function(t){Mt.call(v,function(){var e;Lt?Nt.emit("rejectionHandled",t):(e=v.onrejectionhandled)&&e({promise:t,reason:t._v})})},Xt=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),Ut(t,!0))},Kt=function(e){var n,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===e)throw Ft("Promise can't be resolved itself");(n=Bt(e))?Tt(function(){var t={_w:r,_d:!1};try{n.call(e,E(Kt,t,1),E(Xt,t,1))}catch(e){Xt.call(t,e)}}):(r._v=e,r._s=1,Ut(r,!1))}catch(e){Xt.call({_w:r,_d:!1},e)}}};qt||(Vt=function(e){!function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!")}(this,Vt,Pt,"_h"),x(e),Et.call(this);try{e(E(Kt,this,1),E(Xt,this,1))}catch(e){Xt.call(this,e)}},(Et=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=function(e,t,n){for(var r in t)C(e,r,t[r],n);return e}(Vt.prototype,{then:function(e,t){var n,r,o,i=Wt((n=Vt,void 0===(o=y(this).constructor)||null==(r=y(o)[nt])?n:x(r)));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=Lt?Nt.domain:void 0,this._c.push(i),this._a&&this._a.push(i),this._s&&Ut(this,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),At=function(){var e=new Et;this.promise=e,this.resolve=E(Kt,e,1),this.reject=E(Xt,e,1)},bt.f=Wt=function(e){return e===Vt||e===jt?new At(e):$t(e)}),I(I.G+I.W+I.F*!qt,{Promise:Vt}),_e(Vt,Pt),It=v[Pt],a&&It&&!It[Ot]&&h.f(It,Ot,{configurable:!0,get:function(){return this}}),jt=m[Pt],I(I.S+I.F*!qt,Pt,{reject:function(e){var t=Wt(this);return(0,t.reject)(e),t.promise}}),I(I.S+I.F*!qt,Pt,{resolve:function(e){return function(e,t){if(y(e),o(t)&&t.constructor===e)return t;var n=bt.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),I(I.S+I.F*!(qt&&function(e,t){if(!t&&!xt)return!1;var n=!1;try{var r=[7],o=r[Ct]();o.next=function(){return{done:n=!0}},r[Ct]=function(){return o},e(r)}catch(e){}return n}(function(e){Vt.all(e).catch(Jt)})),Pt,{all:function(e){var a=this,t=Wt(a),s=t.resolve,c=t.reject,n=wt(function(){var r=[],o=0,i=1;tt(e,!1,function(e){var t=o++,n=!1;r.push(void 0),i++,a.resolve(e).then(function(e){n||(n=!0,r[t]=e,--i||s(r))},c)}),--i||s(r)});return n.e&&c(n.v),t.promise},race:function(e){var t=this,n=Wt(t),r=n.reject,o=wt(function(){tt(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o.e&&r(o.v),n.promise}});var Zt=1;function Yt(){return(Zt++).toString()}function Qt(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1)}function en(e){return"[object Object]"===Object.prototype.toString.call(e)}function tn(e){if("function"!=typeof btoa)return"";var t=Array.prototype.map.call(new Uint8Array(e),function(e){return String.fromCharCode(e)}).join("");return btoa(t)}function nn(e){if(!e||"object"!=typeof e)return!0;for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}var rn=["off","error","warn","info","log","debug"],on={};function an(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return on[t]&&on[t][e]}function sn(e){global.nativeLog("wxInteractionAnalyzer: [jsfm]"+e,"__DEBUG")}global.console;function cn(e){return e.map(function(e){return e="[object object]"===Object.prototype.toString.call(e).toLowerCase()?JSON.stringify(e):String(e)})}global.setTimeout;var ln=global.setTimeoutNative;function un(t,n,r){if(t.hasOwnProperty(n)){var e=t[n];Object.defineProperty(t,n,{get:function(){return e},set:function(e){if(this===t)throw Error("Cannot assign to read only property "+n+" of "+r);return Object.defineProperty(this,n,{value:e,writable:!0}),e}})}}!function(){if(void 0===setTimeout&&"function"==typeof ln){var n={},r=0;global.setTimeout=function(e,t){n[++r]=e,ln(r.toString(),t)},global.setTimeoutCallback=function(e){"function"==typeof n[e]&&(n[e](),delete n[e])}}}(),"undefined"==typeof WXEnvironment||WXEnvironment.__enable_native_promise__,function(){if(rn.forEach(function(t){var n=rn.indexOf(t);on[t]={},rn.forEach(function(e){rn.indexOf(e)<=n&&(on[t][e]=!0)})}),global.WXEnvironment&&"Web"!==global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("debug")&&global.nativeLog.apply(global,cn(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("log")&&global.nativeLog.apply(global,cn(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("info")&&global.nativeLog.apply(global,cn(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("warn")&&global.nativeLog.apply(global,cn(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("error")&&global.nativeLog.apply(global,cn(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,o=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:o},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];an("error")&&console.__ori__.error.apply(console,e)}}}();var fn={framework:"0.29.6",transformer:">=0.1.5 <0.5"};function pn(e,t,n){return t+"@"+n+"#"+e}var dn=function(e){this.instanceId=String(e),this.lastCallbackId=0,this.callbacks={},this.hooks={}};dn.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},dn.prototype.remove=function(e){var t=this.callbacks[e];return delete this.callbacks[e],t},dn.prototype.registerHook=function(e,t,n,r){var o=pn(e,t,n);this.hooks[o]&&console.warn('[JS Framework] Override an existing component hook "'+o+'".'),this.hooks[o]=r},dn.prototype.triggerHook=function(e,t,n,r){var o=pn(e,t,n),i=this.hooks[o];if("function"!=typeof i)return console.error("[JS Framework] Invalid hook function type ("+typeof i+') on "'+o+'".'),null;var a=null;try{a=i.apply(null,r||[])}catch(e){throw console.error('[JS Framework] Failed to execute the hook function on "'+o+'".'),e}return a},dn.prototype.consume=function(e,t,n){var r=this.callbacks[e];if(void 0!==n&&!1!==n||delete this.callbacks[e],"function"==typeof r)try{return r.call(null,t)}catch(e){throw console.error("[JS Framework] Failed to execute the callback function:\n "+e.toString()),e}return new Error('invalid callback id "'+e+'"')},dn.prototype.close=function(){this.callbacks={},this.hooks={}};var hn={};function vn(e){return hn[e]}function mn(e){var t=hn[e];return t&&t.taskCenter?t.taskCenter:null}function yn(e,t,n){var r=e.documentElement;if(!(0<r.pureChildren.length||t.parentNode)){var o,i,a=r.children,s=a.indexOf(n);s<0?a.push(t):a.splice(s,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,_n(t,r)):(t.children.forEach(function(e){e.parentNode=t}),gn(e,t),t.docId=e.id,t.ownerDocument=e,_n(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),o=e,i=t.toJSON(),o&&o.taskCenter&&"function"==typeof o.taskCenter.send&&o.taskCenter.send("dom",{action:"createBody"},[i])):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function gn(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function _n(t,e){(t.parentNode=e).docId&&(t.docId=e.docId,t.ownerDocument=e.ownerDocument,(t.ownerDocument.nodeMap[t.nodeId]=t).depth=e.depth+1),t.children.forEach(function(e){_n(e,t)})}function bn(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function wn(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function kn(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),r&&(o&&(o.nextSibling=e),e.previousSibling=o,(e.nextSibling=i)&&(i.previousSibling=e)),n}function Sn(e,t,n,r){var o=t.indexOf(e);if(o<0)return-1;if(r){var i=t[o-1],a=t[o+1];i&&(i.nextSibling=a),a&&(a.previousSibling=i)}t.splice(o,1);var s=n;o<=n&&(s=n-1);var c=t[s-1],l=t[s];return t.splice(s,0,e),r&&(c&&(c.nextSibling=e),e.previousSibling=c,(e.nextSibling=l)&&(l.previousSibling=e)),o===s?-1:n}function On(e,t,n){var r=t.indexOf(e);if(!(r<0)){if(n){var o=t[r-1],i=t[r+1];o&&(o.nextSibling=i),i&&(i.previousSibling=o)}t.splice(r,1)}}var Cn,xn=function(){this.nodeId=Yt(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null};xn.prototype.destroy=function(){var e=vn(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var En={};var $n=["click","longpress","touchstart","touchmove","touchend","panstart","panmove","panend","horizontalpan","verticalpan","swipe"];function An(e,t){vn(e).nodeMap[t.nodeId]=t}var jn=function(o){function e(e,t,n){void 0===e&&(e="div"),o.call(this);var r=En[e];if(r&&!n)return new r(e,t,!0);t=t||{},this.nodeType=1,this.nodeId=Yt(),this.ref=this.nodeId,this.type=e,this.attr=t.attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],this.pureChildren=[]}return o&&(e.__proto__=o),((e.prototype=Object.create(o&&o.prototype)).constructor=e).prototype.appendChild=function(e){if(!e.parentNode||e.parentNode===this)if(e.parentNode){if(an("debug")&&sn("[appendChild]("+this.docId+","+e.type+","+e.ref+") Move <"+e.type+"> to "+this.children.length+" of <"+this.type+"> ("+this.ref+")."),Sn(e,this.children,this.children.length,!0),1===e.nodeType){var t=Sn(e,this.pureChildren,this.pureChildren.length),n=mn(this.docId);if(n&&0<=t)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(an("debug")&&sn("[appendChild]("+this.docId+","+e.type+","+e.ref+") Append <"+e.type+"> to <"+this.type+"> ("+this.ref+")."),_n(e,this),kn(e,this.children,this.children.length,!0),this.docId&&An(this.docId,e),1===e.nodeType){kn(e,this.pureChildren,this.pureChildren.length);var r=mn(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},e.prototype.insertBefore=function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(Sn(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=bn(t),r=Sn(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=mn(this.docId);if(o&&0<=r)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(an("debug")&&sn("[insertBefore]("+this.docId+","+e.type+","+e.ref+") Insert <"+e.type+"> to <"+this.type+"> ("+this.ref+"), before ("+t.ref+")."),_n(e,this),kn(e,this.children,this.children.indexOf(t),!0),this.docId&&An(this.docId,e),1===e.nodeType){var i=bn(t),a=kn(e,this.pureChildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=mn(this.docId);if(s)return s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},e.prototype.insertAfter=function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(Sn(e,this.children,this.children.indexOf(t)+1,!0),1===e.nodeType){var n=Sn(e,this.pureChildren,this.pureChildren.indexOf(wn(t))+1),r=mn(this.docId);if(r&&0<=n)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(an("debug")&&sn("[insertAfter]("+this.docId+","+e.type+","+e.ref+") Insert <"+e.type+"> to <"+this.type+"> ("+this.ref+"), after ("+t.ref+")."),_n(e,this),kn(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&An(this.docId,e),1===e.nodeType){var o=kn(e,this.pureChildren,this.pureChildren.indexOf(wn(t))+1),i=mn(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},e.prototype.removeChild=function(e,t){if(e.parentNode&&(On(e,this.children,!0),1===e.nodeType)){an("debug")&&sn("[removeChild]("+this.docId+","+e.type+","+e.ref+") Remove <"+e.type+"> from <"+this.type+"> ("+this.ref+")."),On(e,this.pureChildren);var n=mn(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},e.prototype.clear=function(){var t=mn(this.docId);t&&this.pureChildren.forEach(function(e){t.send("dom",{action:"removeElement"},[e.ref])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},e.prototype.setAttr=function(e,t,n){if(this.attr[e]!==t||!1===n){this.attr[e]=t;var r=mn(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateAttrs"},[this.ref,o])}}},e.prototype.setAttrs=function(e,t){if(!nn(e)){var n={};for(var r in e)this.attr[r]!==e[r]&&(this.attr[r]=e[r],n[r]=e[r]);if(!nn(n)){var o=mn(this.docId);!t&&o&&o.send("dom",{action:"updateAttrs"},[this.ref,n])}}},e.prototype.setStyle=function(e,t,n){if(this.style[e]!==t||!1===n){this.style[e]=t;var r=mn(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},e.prototype.setStyles=function(e,t){if(!nn(e)){var n={};for(var r in e)this.style[r]!==e[r]&&(this.style[r]=e[r],n[r]=e[r]);if(!nn(n)){var o=mn(this.docId);!t&&o&&o.send("dom",{action:"updateStyle"},[this.ref,n])}}},e.prototype.setClassStyle=function(e){for(var t in this.classStyle)this.classStyle[t]="";Object.assign(this.classStyle,e);var n=mn(this.docId);n&&n.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},e.prototype.addEvent=function(e,t,n){if(this.event||(this.event={}),!this.event[e]){an("debug")&&sn("[addEvent]("+this.docId+","+this.type+","+this.ref+') Add "'+e+'" event on <'+this.type+"> ("+this.ref+")."),this.event[e]={handler:t,params:n};var r=mn(this.docId);r&&r.send("dom",{action:"addEvent"},[this.ref,e])}},e.prototype.removeEvent=function(e){if(this.event&&this.event[e]){an("debug")&&sn("[removeEvent]("+this.docId+","+this.type+","+this.ref+') Remove "'+e+'" event on <'+this.type+"> ("+this.ref+")."),delete this.event[e];var t=mn(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,e])}},e.prototype.fireEvent=function(t,e,n,r){var o=null,i=!1,a=this.event[t];if(a&&e){an("debug")&&sn("[fireEvent]("+this.docId+","+this.type+","+this.ref+') Fire "'+t+'" event on <'+this.type+"> ("+this.ref+").");var s=a.handler;e.stopPropagation=function(){i=!0};try{o=r&&r.params?s.call.apply(s,[this].concat(r.params,[e])):s.call(this,e)}catch(e){throw console.error('[JS Framework] Failed to invoke the event handler of "'+t+'" on '+this.type+" ("+this.ref+"):\n "+e.toString()),e}}return!i&&n&&-1!==$n.indexOf(t)&&this.parentNode&&this.parentNode.fireEvent&&(e.currentTarget=this.parentNode,this.parentNode.fireEvent(t,e,n)),o},e.prototype.toStyle=function(){return Object.assign({},this.classStyle,this.style)},e.prototype.toJSON=function(e){void 0===e&&(e=!1);var t={ref:this.ref.toString(),type:this.type,attr:this.attr,style:this.toStyle()},n=[];for(var r in this.event){var o=this.event[r].params;o?n.push({type:r,params:o}):n.push(r)}return n.length&&(t.event=n),!e&&this.pureChildren.length&&(t.children=this.pureChildren.map(function(e){return e.toJSON()})),t},e.prototype.toString=function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"},e}(xn);Cn=jn;var In=function(){},Mn=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:String(e)}),Object.defineProperty(this,"callbackManager",{enumerable:!0,value:new dn(e)}),In=t||function(){}};function Tn(e,t){var n=vn(e);return n?Array.isArray(t)?t.map(function(e){switch(e.method){case"callback":return function(e,t,n,r){return e.taskCenter.callback(t,n,r)}.apply(void 0,[n].concat(e.args));case"fireEventSync":case"fireEvent":return function(e,t,n,r,o,i){var a=e.getRef(t);return a?e.fireEvent(a,n,r,o,i):r?(r._nodeId=t,e.fireEvent(e.getRef("_documentElement"),n,r,o,i)):void 0}.apply(void 0,[n].concat(e.args));case"componentHook":return function(e,t,n,r,o){if(!e||!e.taskCenter)return console.error('[JS Framework] Can\'t find "document" or "taskCenter".'),null;var i=null;try{i=e.taskCenter.triggerHook(t,n,r,o)}catch(e){throw console.error('[JS Framework] Failed to trigger the "'+n+"@"+r+'" hook on '+t+"."),e}return i}.apply(void 0,[n].concat(e.args))}}):void 0:new Error("[JS Framework] Failed to receiveTasks, instance ("+e+") is not available.")}Mn.prototype.callback=function(e,t,n){return this.callbackManager.consume(e,t,n)},Mn.prototype.registerHook=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this.callbackManager).registerHook.apply(e,t)},Mn.prototype.triggerHook=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this.callbackManager).triggerHook.apply(e,t)},Mn.prototype.updateData=function(e,t,n){this.send("module",{module:"dom",method:"updateComponentData"},[e,t,n])},Mn.prototype.destroyCallback=function(){return this.callbackManager.close()},Mn.prototype.normalize=function(e,t){var n=this;void 0===t&&(t=!1);var r=Qt(e);if(e&&e instanceof jn)return e.ref;if(e&&e._isVue&&e.$el instanceof jn)return e.$el.ref;if("Function"===r)return this.callbackManager.add(e).toString();if(t){if("Object"===r){var o={};for(var i in e)o[i]=n.normalize(e[i],!0);return o}if("Array"===r)return e.map(function(e){return n.normalize(e,!0)})}return e&&e.ref&&e["[[VirtualElement]]"]?e.ref:function(e){var t=Qt(e);switch(t){case"Undefined":case"Null":return"";case"RegExp":return e.toString();case"Date":return e.toISOString();case"Number":case"String":case"Boolean":case"Array":case"Object":return e;case"ArrayBuffer":return{"@type":"binary",dataType:t,base64:tn(e)};case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":return{"@type":"binary",dataType:t,base64:tn(e.buffer)};default:return JSON.stringify(e)}}(e)},Mn.prototype.send=function(e,t,n,r){var o=this,i=t.action,a=t.component,s=t.ref,c=t.module,l=t.method;switch(n=n.map(function(e){return o.normalize(e)}),"Object"===Qt(r)&&(r=this.normalize(r,!0)),e){case"dom":return an("debug")&&sn("[task]("+this.instanceId+","+this.type+","+i+") "+JSON.stringify(n)),this[i](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,s,l,n,Object.assign({component:a},r));default:return an("debug")&&sn("[task]("+this.instanceId+","+c+","+l+") "+JSON.stringify(n)),this.moduleHandler(this.instanceId,c,l,n,r)}},Mn.prototype.callDOM=function(e,t){return this[e](this.instanceId,t)},Mn.prototype.callComponent=function(e,t,n,r){return this.componentHandler(this.instanceId,e,t,n,r)},Mn.prototype.callModule=function(e,t,n,r){return this.moduleHandler(this.instanceId,e,t,n,r)};var Pn={};function Fn(r){void 0===r&&(r={});var e=function(t){var e,n;n=t,en(e=Pn)&&Object.prototype.hasOwnProperty.call(e,n)||(Pn[t]={}),Array.isArray(r[t])&&r[t].forEach(function(e){"string"==typeof e?Pn[t][e]=!0:en(e)&&"string"==typeof e.name&&(Pn[t][e.name]=e.args||[])})};for(var t in r)e(t)}function Nn(e,t){return"string"==typeof t?!(!Pn[e]||!Pn[e][t]):!!Pn[e]}var Rn={};function Dn(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?Rn[e]=!0:en(e)&&"string"==typeof e.type&&function(o,e){if(Array.isArray(e)&&e.length){var t=function(e){function t(){e.apply(this,arguments)}return e&&(t.__proto__=e),(t.prototype=Object.create(e&&e.prototype)).constructor=t}(Cn);e.forEach(function(r){t.prototype[r]=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=mn(this.docId);if(n)return n.send("component",{ref:this.ref,component:o,method:r},e)}}),En[o]=t}}((Rn[e.type]=e).type,e.methods))})}function Vn(e){return!!Rn[e]}var Ln=[];function Jn(e,t){qn(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Ln.push({name:e,options:t}))}function Wn(n){Ln.some(function(e,t){if(e.name===n)return Ln.splice(t,1),!0})}function qn(e){return t=e,0<=Ln.map(function(e){return e.name}).indexOf(t);var t}var Bn=function(t){function e(e){t.call(this),this.nodeType=8,this.nodeId=Yt(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.toString=function(){return"\x3c!-- "+this.value+" --\x3e"},e}(xn);function Un(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}var zn=function(e,t){this.id=e,this.batched=!1,this.updates=[],"function"==typeof t?Object.defineProperty(this,"handler",{configurable:!0,enumerable:!0,writable:!0,value:t}):console.error("[JS Runtime] invalid parameter, handler must be a function")};zn.prototype.createFinish=function(e){return(0,this.handler)([Un("createFinish")],e)},zn.prototype.updateFinish=function(e){return(0,this.handler)([Un("updateFinish")],e)},zn.prototype.refreshFinish=function(e){return(0,this.handler)([Un("refreshFinish")],e)},zn.prototype.createBody=function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[Un("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return Un("addElement",[t.ref,e,-1])})),this.addActions(r)},zn.prototype.addElement=function(e,t,n){return 0<=n||(n=-1),this.addActions(Un("addElement",[t,e.toJSON(),n]))},zn.prototype.removeElement=function(e){if(Array.isArray(e)){var t=e.map(function(e){return Un("removeElement",[e])});return this.addActions(t)}return this.addActions(Un("removeElement",[e]))},zn.prototype.moveElement=function(e,t,n){return this.addActions(Un("moveElement",[e,t,n]))},zn.prototype.setAttr=function(e,t,n){var r={};return r[t]=n,this.addActions(Un("updateAttrs",[e,r]))},zn.prototype.setStyle=function(e,t,n){var r={};return r[t]=n,this.addActions(Un("updateStyle",[e,r]))},zn.prototype.setStyles=function(e,t){return this.addActions(Un("updateStyle",[e,t]))},zn.prototype.addEvent=function(e,t){return this.addActions(Un("addEvent",[e,t]))},zn.prototype.removeEvent=function(e,t){return this.addActions(Un("removeEvent",[e,t]))},zn.prototype.handler=function(e,t){return t&&t()},zn.prototype.addActions=function(e){var t=this.updates,n=this.handler;if(Array.isArray(e)||(e=[e]),!this.batched)return n(e);t.push.apply(t,e)};var Hn={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",removeEvent:"callRemoveEvent"};function Gn(e,t,n){var r,o=t.module,i=t.method,a=t.args;return r=i,"dom"===o&&Hn[r]&&"function"==typeof global[Hn[r]]?global[Hn[i]].apply(global,[e].concat(a,["-1"])):n(e,[t],"-1")}var Xn=function e(t,n,r){var o,i;t=t?t.toString():"",this.id=t,this.URL=n,i=this,(o=t)&&(hn[o]=i),this.nodeMap={};var a,s,c=e.Listener||zn;this.listener=new c(t,r||(a=t,"function"!=typeof(s=e.handler||global.callNative)&&console.error("[JS Runtime] no default handler"),function(e){Array.isArray(e)||(e=[e]);for(var t=0;t<e.length;t++){var n=Gn(a,e[t],s);if(-1===n)return n}})),this.taskCenter=new Mn(t,r?function(e){for(var t=[],n=arguments.length-1;0<n--;)t[n]=arguments[n+1];return r.apply(void 0,t)}:e.handler),this.createDocumentElement()};function Kn(e){return e["[[CurrentInstanceId]]"]}Xn.prototype.getRef=function(e){return this.nodeMap[e]},Xn.prototype.open=function(){this.listener.batched=!1},Xn.prototype.close=function(){this.listener.batched=!0},Xn.prototype.createDocumentElement=function(){var n=this;if(!this.documentElement){var e=new jn("document");e.docId=this.id,e.ownerDocument=this,e.role="documentElement",e.depth=0,e.ref="_documentElement",this.nodeMap._documentElement=e,this.documentElement=e,Object.defineProperty(e,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(e){yn(n,e)}}),Object.defineProperty(e,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(e,t){yn(n,e,t)}}),an("debug")&&sn('Create document element (id: "'+e.docId+'", ref: "'+e.ref+'")')}return this.documentElement},Xn.prototype.createBody=function(e,t){if(!this.body){var n=new jn(e,t);gn(this,n),an("debug")&&sn("[createBody]("+this.id+","+n.type+","+n.ref+") ("+JSON.stringify(n.toJSON(!0))+").")}return this.body},Xn.prototype.createElement=function(e,t){var n=new jn(e,t);return an("debug")&&sn("[createElement]("+this.id+","+n.type+","+n.ref+") ("+JSON.stringify(n.toJSON(!0))+")."),n},Xn.prototype.createComment=function(e){return new Bn(e)},Xn.prototype.fireEvent=function(e,t,n,r,o){if(e){var i;(n=n||{}).type=n.type||t,n.target=e,n.currentTarget=e,n.timestamp=Date.now(),r&&function(e,t){var n=t.attrs||{};for(var r in n)e.setAttr(r,n[r],!0);var o=t.style||{};for(var i in o)e.setStyle(i,o[i],!0)}(e,r);var a=this.getRef("_root");return a&&a.attr&&(i="true"===a.attr.bubble),e.fireEvent(t,n,i,o)}},Xn.prototype.destroy=function(){var e;an("debug")&&sn("[destroy]("+this.id+",document,"+this.ref+') Destroy document (id: "'+this.id+'", URL: "'+this.URL+'")'),this.taskCenter.destroyCallback(),delete this.listener,delete this.nodeMap,delete this.taskCenter,e=this.id,delete hn[e]},Xn.handler=null;var Zn,Yn,Qn=function(e,t,n){var r,o;r=this,o=String(e),Object.defineProperty(r,"[[CurrentInstanceId]]",{value:o}),this.config=t||{},this._nativeData=n||{},this.document=new Xn(e,this.config.bundleUrl),this.requireModule=this.requireModule.bind(this),this.importScript=this.importScript.bind(this),this.isRegisteredModule=Nn,this.isRegisteredComponent=Vn};Qn.prototype.requireModule=function(s){var c=Kn(this);if(c&&this.document&&this.document.taskCenter){if(Nn(s)){var e={},t=Pn[s],n=function(a){Object.defineProperty(e,a,{enumerable:!0,configurable:!0,get:function(){return n=s,r=a,(o=mn(e=c))&&"function"==typeof o.send?function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return o.send("module",{module:n,method:r},e)}:(console.error("[JS Framework] Failed to find taskCenter ("+e+")."),null);var e,n,r,o},set:function(e){return n=s,r=a,o=e,(i=mn(t=c))&&"function"==typeof i.send?"function"!=typeof o?(console.error("[JS Framework] "+n+"."+r+" must be assigned as a function."),null):function(e){return i.send("module",{module:n,method:r},[e])}:(console.error("[JS Framework] Failed to find taskCenter ("+t+")."),null);var t,n,r,o,i}})};for(var r in t)n(r);return e}console.warn('[JS Framework] using unregistered weex module "'+s+'"')}else console.error('[JS Framework] Failed to requireModule("'+s+'"), instance ('+c+") doesn't exist anymore.")},Qn.prototype.supports=function(e){if("string"!=typeof e)return null;var t=e.match(/^@(\w+)\/([\w-]+)(\.(\w+))?$/i);if(t){var n=t[1],r=t[2],o=t[4];switch(n){case"module":return Nn(r,o);case"component":return Vn(r)}}return null},Qn.prototype.importScript=function(e,r){void 0===r&&(r={});var o=Kn(this),i=mn(o);return new Promise(function(t,n){i&&"function"==typeof i.send||n(new Error('[JS Framework] Failed to import script "'+e+'", no taskCenter ('+o+") matched."));try{i.send("module",{module:"script",method:"importScript"},[e,r],{callback:[function(e){return t(e)},function(e){return n(e)}]})}catch(e){n(e)}})};var er=/^\s*\/\/ *(\{[^}]*\}) *\r?\n/;function tr(){return"0.29.6"}var nr={};function rr(e){return nr[e]}function or(e,t,n){void 0===t&&(t={});var r=new Qn(e,t,n),o=t.bundleType||"Vue";nr[e]=o;var i=Yn.frameworks[o];if(!i)return new Error('[JS Framework] Invalid bundle type "'+o+'".');var a,s,c,l,u=(a=e,s={weex:r,config:t,created:Date.now(),framework:o,bundleType:o},c=Yn,(l=Object.create(null)).service=Object.create(null),Ln.forEach(function(e){var t=e.name,n=e.options.create;if(n)try{var r=n(a,s,c);Object.assign(l.service,r),Object.assign(l,r.instance)}catch(e){console.error("[JS Runtime] Failed to create service "+t+".")}}),delete l.service.instance,Object.freeze(l.service),l);Object.freeze(u);var f=Object.create(null);Object.assign(f,u,{weex:r,getJSFMVersion:tr,requireModule:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return r.requireModule.apply(r,e)},__WEEX_CALL_JAVASCRIPT__:Tn,services:u}),Object.freeze(f);var p=Object.assign({},f);return"function"==typeof i.createInstanceContext&&Object.assign(p,i.createInstanceContext(e,f,n)),Object.freeze(p),p}var ir={createInstance:function(e,t,n,r){if(nr[e])return new Error('The instance id "'+e+'" has already been used!');var o=function(e){var t=er.exec(e);if(t)try{return JSON.parse(t[1]).framework}catch(e){}return"Weex"}(t);nr[e]=o,(n=JSON.parse(JSON.stringify(n||{}))).env=JSON.parse(JSON.stringify(global.WXEnvironment||{})),n.bundleType=o;var i=Yn.frameworks[o];if(!i)return new Error('[JS Framework] Invalid bundle type "'+o+'".');"Weex"===o&&console.error('[JS Framework] COMPATIBILITY WARNING: Weex DSL 1.0 (.we) framework is no longer supported! It will be removed in the next version of WeexSDK, your page would be crash if you still using the ".we" framework. Please upgrade it to Vue.js or Rax.');var a=or(e,n,r);if("function"==typeof i.createInstance){if("Rax"!==o&&"Weex"!==o)return i.createInstance(e,t,n,r,a);var s=Object.assign({config:n,created:Date.now(),framework:o},a);return i.createInstance(e,t,n,r,s)}!function(e,t){var n=[],r=[];for(var o in t)n.push(o),r.push(t[o]);var i="\n    (function (global) {\n      "+e+"\n    })(Object.create(this))\n  ";(new(Function.prototype.bind.apply(Function,[null].concat(n,[i])))).apply(void 0,r)}(t,a)},createInstanceContext:or,getRoot:function(e){var t=vn(e);try{if(t&&t.body)return t.body.toJSON()}catch(e){return void console.error("[JS Framework] Failed to get the virtual dom tree.")}},getJSFMVersion:tr,getDocument:vn,registerService:Jn,unregisterService:Wn,callJS:function(e,t){var n=Zn[rr(e)];return n&&"function"==typeof n.receiveTasks?n.receiveTasks(e,t):Tn(e,t)}};function ar(s){ir[s]=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,r=e[0],o=rr(r);if(o&&Zn[o]){var i=(n=Zn[o])[s].apply(n,e),a={framework:o};return"refreshInstance"===s?Ln.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:a,runtime:Yn})}):"destroyInstance"===s&&(Ln.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:a,runtime:Yn})}),delete nr[r]),i}return new Error('[JS Framework] Using invalid instance id "'+r+'" when calling '+s+".")}}function sr(o,i){ir[o]=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var n in"function"==typeof i&&i.apply(void 0,e),Yn.frameworks){var r=Yn.frameworks[n];r&&r[o]&&r[o].apply(r,e)}}}var cr={Document:Xn,Element:jn,Comment:Bn,Listener:zn,TaskCenter:Mn,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return"function"==typeof callNative?callNative.apply(void 0,e):(global.callNative||function(){}).apply(void 0,e)}};Xn.handler=cr.sendTasks;var lr={service:{register:Jn,unregister:Wn,has:qn},freezePrototype:function(){Object.freeze(cr.Comment),Object.freeze(cr.Listener),Object.freeze(cr.Document.prototype),Object.freeze(cr.Comment.prototype),Object.freeze(cr.Listener.prototype)},init:function(e){for(var t in Zn=(Yn=e||{}).frameworks||{},function(){var e={createFinish:global.callCreateFinish,updateFinish:global.callUpdateFinish,refreshFinish:global.callRefreshFinish,createBody:global.callCreateBody,addElement:global.callAddElement,removeElement:global.callRemoveElement,moveElement:global.callMoveElement,updateAttrs:global.callUpdateAttrs,updateStyle:global.callUpdateStyle,addEvent:global.callAddEvent,removeEvent:global.callRemoveEvent,__updateComponentData:global.__updateComponentData},t=Mn.prototype,n=function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return In(e,[{module:"dom",method:n,args:t}],"-1")}};for(var r in e)n(r);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return In(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return In(e,[{module:t,method:n,args:r}])}}(),Zn){var n=Zn[t];if("function"==typeof n.init)try{n.init(e)}catch(e){}}return sr("registerComponents",Dn),sr("registerModules",Fn),sr("registerMethods"),["destroyInstance","refreshInstance"].forEach(ar),ir},config:cr};function ur(e,t){void 0===t&&(t={}),this.type=e||"message",this.data=t.data||null,this.origin=t.origin||"",this.source=t.source||null,this.ports=t.ports||[],this.target=null,this.timeStamp=Date.now()}var fr={},pr={};function dr(){}dr.prototype.postMessage=function(e){if(this._closed)throw new Error('BroadcastChannel "'+this.name+'" is closed.');var t=fr[this.name];if(t&&t.length)for(var n=0;n<t.length;++n){var r=t[n];r._closed||r===this||"function"==typeof r.onmessage&&r.onmessage(new ur("message",{data:e}))}},dr.prototype.close=function(){var t=this;if(!this._closed&&(this._closed=!0,fr[this.name])){var e=fr[this.name].filter(function(e){return e!==t});e.length?fr[this.name]=e:delete fr[this.name]}};var hr={BroadcastChannel:{create:function(t,e,n){if(pr[t]=[],"function"==typeof global.BroadcastChannel)return{};var r={BroadcastChannel:function(e){Object.defineProperty(this,"name",{configurable:!1,enumerable:!0,writable:!1,value:String(e)}),this._closed=!1,this.onmessage=null,fr[this.name]||(fr[this.name]=[]),fr[this.name].push(this),pr[t].push(this)}};return r.BroadcastChannel.prototype=dr.prototype,{instance:r}},destroy:function(e,t){pr[e].forEach(function(e){return e.close()}),delete pr[e]}}};var vr={},mr={};var yr=Object.freeze({init:function(e){vr.Document=e.Document,vr.Element=e.Element,vr.Comment=e.Comment,vr.sendTasks=e.sendTasks},createInstance:function(t,e,n,r,o){void 0===n&&(n={}),void 0===r&&(r={}),void 0===o&&(o={});var i=new vr.Document(t,n.bundleUrl),a={},s={id:t,data:r,document:i,callbacks:a},c=0;i.addCallback=function(e){return a[++c]=e,c},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},mr[t]=s;var l=Object.assign({Document:vr.Document,Element:vr.Element,Comment:vr.Comment,sendTasks:function(e){return vr.sendTasks(t,e,-1)},options:n,document:i},o),u=[],f=[];for(var p in l)u.push(p),f.push(l[p]);return u.push(e),(new(Function.prototype.bind.apply(Function,[null].concat(u)))).apply(void 0,f),vr.sendTasks(t,[{module:"dom",method:"createFinish",args:[]}],-1),s},destroyInstance:function(e){delete mr[e]},getRoot:function(e){return mr[e].document.body.toJSON()},receiveTasks:function(r,e){var o={fireEvent:function(e,t,n,r,o){var i=mr[e].document,a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){return mr[e].document.handleCallback(t,n,r)}};if((mr[r]||{}).document&&Array.isArray(e)){var i=[];return e.forEach(function(e){var t=o[e.method],n=[].concat(e.args);"function"==typeof t&&(n.unshift(r),i.push(t.apply(void 0,n)))}),i}}}),gr=n(function(e){e.exports=function(e,o){var _=Object.freeze({});function $(e){return null==e}function A(e){return null!=e}function j(e){return!0===e}function I(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function b(e){return null!==e&&"object"==typeof e}var r=Object.prototype.toString;function u(e){return"[object Object]"===r.call(e)}function i(e){var t=parseFloat(String(e));return 0<=t&&Math.floor(t)===t&&isFinite(e)}function t(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function n(e){var t=parseFloat(e);return isNaN(t)?e:t}function s(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}s("slot,component",!0);var c=s("key,ref,slot,slot-scope,is");function l(e,t){if(e.length){var n=e.indexOf(t);if(-1<n)return e.splice(n,1)}}var a=Object.prototype.hasOwnProperty;function f(e,t){return a.call(e,t)}function p(t){var n=Object.create(null);return function(e){return n[e]||(n[e]=t(e))}}var d=/-(\w)/g,h=p(function(e){return e.replace(d,function(e,t){return t?t.toUpperCase():""})}),v=p(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),m=/\B([A-Z])/g,w=p(function(e){return e.replace(m,"-$1").toLowerCase()});var y=Function.prototype.bind?function(e,t){return e.bind(t)}:function(n,r){function e(e){var t=arguments.length;return t?1<t?n.apply(r,arguments):n.call(r,e):n.call(r)}return e._length=n.length,e};function g(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function N(e,t){for(var n in t)e[n]=t[n];return e}function R(e,t,n){}var k=function(e,t,n){return!1},S=function(e){return e};function O(t,n){if(t===n)return!0;var e=b(t),r=b(n);if(!e||!r)return!e&&!r&&String(t)===String(n);try{var o=Array.isArray(t),i=Array.isArray(n);if(o&&i)return t.length===n.length&&t.every(function(e,t){return O(e,n[t])});if(o||i)return!1;var a=Object.keys(t),s=Object.keys(n);return a.length===s.length&&a.every(function(e){return O(t[e],n[e])})}catch(e){return!1}}function C(e,t){for(var n=0;n<e.length;n++)if(O(e[n],t))return n;return-1}function D(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var M="data-server-rendered",x=["component","directive","filter"],E=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured"],T={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:k,isReservedAttr:k,isUnknownElement:k,getTagNamespace:R,parsePlatformTagName:S,mustUseProp:k,_lifecycleHooks:E};function P(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var F=/[^\w.$]/;var V,L="__proto__"in{},J="undefined"!=typeof window,W="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,q=W&&WXEnvironment.platform.toLowerCase(),B=J&&window.navigator.userAgent.toLowerCase(),U=(B&&/msie|trident/.test(B),B&&0<B.indexOf("msie 9.0")),z=B&&0<B.indexOf("edge/"),H=(B&&B.indexOf("android"),B&&/iphone|ipad|ipod|ios/.test(B)||"ios"===q),G=(B&&/chrome\/\d+/.test(B),{}.watch);if(J)try{var X={};Object.defineProperty(X,"passive",{get:function(){}}),window.addEventListener("test-passive",null,X)}catch(e){}var K=function(){return void 0===V&&(V=!J&&!W&&void 0!==global&&"server"===global.process.env.VUE_ENV),V},Z=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function Y(e){return"function"==typeof e&&/native code/.test(e.toString())}var Q,ee="undefined"!=typeof Symbol&&Y(Symbol)&&"undefined"!=typeof Reflect&&Y(Reflect.ownKeys);Q="undefined"!=typeof Set&&Y(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var te=R,ne=0,re=function(){this.id=ne++,this.subs=[]};re.prototype.addSub=function(e){this.subs.push(e)},re.prototype.removeSub=function(e){l(this.subs,e)},re.prototype.depend=function(){re.target&&re.target.addDep(this)},re.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},re.target=null;var oe=[];function ie(e){re.target&&oe.push(re.target),re.target=e}function ae(){re.target=oe.pop()}var se=function(e,t,n,r,o,i,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},ce={child:{configurable:!0}};ce.child.get=function(){return this.componentInstance},Object.defineProperties(se.prototype,ce);var le=function(e){void 0===e&&(e="");var t=new se;return t.text=e,t.isComment=!0,t};function ue(e){return new se(void 0,void 0,void 0,String(e))}function fe(e){var t=new se(e.tag,e.data,e.children,e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.isCloned=!0,t}var pe=Array.prototype,de=Object.create(pe);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(a){var s=pe[a];P(de,a,function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];var r,o=s.apply(this,t),i=this.__ob__;switch(a){case"push":case"unshift":r=t;break;case"splice":r=t.slice(2)}return r&&i.observeArray(r),i.dep.notify(),o})});var he=Object.getOwnPropertyNames(de),ve=!0;function me(e){ve=e}var ye=function(e){(this.value=e,this.dep=new re,this.vmCount=0,P(e,"__ob__",this),Array.isArray(e))?((L?ge:_e)(e,de,he),this.observeArray(e)):this.walk(e)};function ge(e,t,n){e.__proto__=t}function _e(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];P(e,i,t[i])}}function be(e,t){var n;if(b(e)&&!(e instanceof se))return f(e,"__ob__")&&e.__ob__ instanceof ye?n=e.__ob__:ve&&!K()&&(Array.isArray(e)||u(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new ye(e)),t&&n&&n.vmCount++,n}function we(n,e,r,t,o){var i=new re,a=Object.getOwnPropertyDescriptor(n,e);if(!a||!1!==a.configurable){var s=a&&a.get;s||2!==arguments.length||(r=n[e]);var c=a&&a.set,l=!o&&be(r);Object.defineProperty(n,e,{enumerable:!0,configurable:!0,get:function(){var e=s?s.call(n):r;return re.target&&(i.depend(),l&&(l.dep.depend(),Array.isArray(e)&&function e(t){for(var n=void 0,r=0,o=t.length;r<o;r++)(n=t[r])&&n.__ob__&&n.__ob__.dep.depend(),Array.isArray(n)&&e(n)}(e))),e},set:function(e){var t=s?s.call(n):r;e===t||e!=e&&t!=t||(c?c.call(n,e):r=e,l=!o&&be(e),i.notify())}})}}function ke(e,t,n){if(Array.isArray(e)&&i(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(t in e&&!(t in Object.prototype))return e[t]=n;var r=e.__ob__;return e._isVue||r&&r.vmCount?n:r?(we(r.value,t,n),r.dep.notify(),n):e[t]=n}function Se(e,t){if(Array.isArray(e)&&i(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount||f(e,t)&&(delete e[t],n&&n.dep.notify())}}ye.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)we(e,t[n])},ye.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)be(e[t])};var Oe=T.optionMergeStrategies;function Ce(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),a=0;a<i.length;a++)r=e[n=i[a]],o=t[n],f(e,n)?u(r)&&u(o)&&Ce(r,o):ke(e,n,o);return e}function xe(n,r,o){return o?function(){var e="function"==typeof r?r.call(o,o):r,t="function"==typeof n?n.call(o,o):n;return e?Ce(e,t):t}:r?n?function(){return Ce("function"==typeof r?r.call(this,this):r,"function"==typeof n?n.call(this,this):n)}:r:n}function Ee(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function $e(e,t,n,r){var o=Object.create(e||null);return t?N(o,t):o}Oe.data=function(e,t,n){return n?xe(e,t,n):t&&"function"!=typeof t?e:xe(e,t)},E.forEach(function(e){Oe[e]=Ee}),x.forEach(function(e){Oe[e+"s"]=$e}),Oe.watch=function(e,t,n,r){if(e===G&&(e=void 0),t===G&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var o={};for(var i in N(o,e),t){var a=o[i],s=t[i];a&&!Array.isArray(a)&&(a=[a]),o[i]=a?a.concat(s):Array.isArray(s)?s:[s]}return o},Oe.props=Oe.methods=Oe.inject=Oe.computed=function(e,t,n,r){if(!e)return t;var o=Object.create(null);return N(o,e),t&&N(o,t),o},Oe.provide=xe;var Ae=function(e,t){return void 0===t?e:t};function je(n,r,o){"function"==typeof r&&(r=r.options),function(e,t){var n=e.props;if(n){var r,o,i={};if(Array.isArray(n))for(r=n.length;r--;)"string"==typeof(o=n[r])&&(i[h(o)]={type:null});else if(u(n))for(var a in n)o=n[a],i[h(a)]=u(o)?o:{type:o};e.props=i}}(r),function(e,t){var n=e.inject;if(n){var r=e.inject={};if(Array.isArray(n))for(var o=0;o<n.length;o++)r[n[o]]={from:n[o]};else if(u(n))for(var i in n){var a=n[i];r[i]=u(a)?N({from:i},a):{from:a}}}}(r),function(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}(r);var e=r.extends;if(e&&(n=je(n,e,o)),r.mixins)for(var t=0,i=r.mixins.length;t<i;t++)n=je(n,r.mixins[t],o);var a,s={};for(a in n)c(a);for(a in r)f(n,a)||c(a);function c(e){var t=Oe[e]||Ae;s[e]=t(n[e],r[e],o,e)}return s}function Ie(e,t,n,r){if("string"==typeof n){var o=e[t];if(f(o,n))return o[n];var i=h(n);if(f(o,i))return o[i];var a=v(i);return f(o,a)?o[a]:o[n]||o[i]||o[a]}}function Me(e,t,n,r){var o=t[e],i=!f(n,e),a=n[e],s=Fe(Boolean,o.type);if(-1<s)if(i&&!f(o,"default"))a=!1;else if(""===a||a===w(e)){var c=Fe(String,o.type);(c<0||s<c)&&(a=!0)}if(void 0===a){a=function(e,t,n){if(!f(t,"default"))return;var r=t.default;if(e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n])return e._props[n];return"function"==typeof r&&"Function"!==Te(t.type)?r.call(e):r}(r,o,e);var l=ve;me(!0),be(a),me(l)}return a}function Te(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function Pe(e,t){return Te(e)===Te(t)}function Fe(e,t){if(!Array.isArray(t))return Pe(t,e)?0:-1;for(var n=0,r=t.length;n<r;n++)if(Pe(t[n],e))return n;return-1}function Ne(e,t,n){if(t)for(var r=t;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,e,t,n))return}catch(e){Re(e,r,"errorCaptured hook")}}Re(e,t,n)}function Re(e,t,n){if(T.errorHandler)try{return T.errorHandler.call(null,e,t,n)}catch(e){De(e,null,"config.errorHandler")}De(e,t,n)}function De(e,t,n){if(!J&&!W||"undefined"==typeof console)throw e;console.error(e)}var Ve,Le,Je=[],We=!1;function qe(){We=!1;for(var e=Je.slice(0),t=Je.length=0;t<e.length;t++)e[t]()}var Be=!1;function Ue(){if("undefined"!=typeof setImmediate&&Y(setImmediate))Le=function(){setImmediate(qe)};else if("undefined"==typeof MessageChannel||!Y(MessageChannel)&&"[object MessageChannelConstructor]"!==MessageChannel.toString())Le=function(){setTimeout(qe,0)};else{var e=new MessageChannel,t=e.port2;e.port1.onmessage=qe,Le=function(){t.postMessage(1)}}if("undefined"!=typeof Promise&&Y(Promise)){var n=Promise.resolve();Ve=function(){n.then(qe),!W&&H&&setTimeout(R)}}else Ve=Le}function ze(e,t){var n;if(Je.push(function(){if(e)try{e.call(t)}catch(e){Ne(e,t,"nextTick")}else n&&n(t)}),We||(We=!0,Be&&"function"==typeof Le?Le():"function"==typeof Ve?Ve():setTimeout(qe,0)),!e&&"undefined"!=typeof Promise)return new Promise(function(e){n=e})}Ue();var He=new Q;function Ge(e){!function e(t,n){var r,o;var i=Array.isArray(t);if(!i&&!b(t)||Object.isFrozen(t)||t instanceof se)return;if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)e(t[r],n);else for(o=Object.keys(t),r=o.length;r--;)e(t[o[r]],n)}(e,He),He.clear()}var Xe,Ke=p(function(e){var t="&"===e.charAt(0),n="~"===(e=t?e.slice(1):e).charAt(0),r="!"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}});function Ze(e){function o(){var e=arguments,t=o.fns;if(!Array.isArray(t))return t.apply(null,arguments);for(var n=t.slice(),r=0;r<n.length;r++)n[r].apply(null,e)}return o.fns=e,o}function Ye(e,t,n,r,o){var i,a,s,c,l;for(i in e)a=s=e[i],c=t[i],l=Ke(i),u(a)&&(s=a.handler,l.params=a.params),$(s)||($(c)?($(s.fns)&&(s=e[i]=Ze(s)),n(l.name,s,l.once,l.capture,l.passive,l.params)):s!==c&&(c.fns=s,e[i]=c));for(i in t)$(e[i])&&r((l=Ke(i)).name,t[i],l.capture)}function Qe(e,t,n){var r;e instanceof se&&(e=e.data.hook||(e.data.hook={}));var o=e[t];function i(){n.apply(this,arguments),l(r.fns,i)}$(o)?r=Ze([i]):A(o.fns)&&j(o.merged)?(r=o).fns.push(i):r=Ze([o,i]),r.merged=!0,e[t]=r}function et(e,t,n,r,o){if(A(t)){if(f(t,n))return e[n]=t[n],o||delete t[n],!0;if(f(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function tt(e){return I(e)?[ue(e)]:Array.isArray(e)?function e(t,n){var r=[];var o,i,a,s;for(o=0;o<t.length;o++)$(i=t[o])||"boolean"==typeof i||(a=r.length-1,s=r[a],Array.isArray(i)?0<i.length&&(nt((i=e(i,(n||"")+"_"+o))[0])&&nt(s)&&(r[a]=ue(s.text+i[0].text),i.shift()),r.push.apply(r,i)):I(i)?nt(s)?r[a]=ue(s.text+i):""!==i&&r.push(ue(i)):nt(i)&&nt(s)?r[a]=ue(s.text+i.text):(j(t._isVList)&&A(i.tag)&&$(i.key)&&A(n)&&(i.key="__vlist"+n+"_"+o+"__"),r.push(i)));return r}(e):void 0}function nt(e){return A(e)&&A(e.text)&&!1===e.isComment}function rt(e,t){return(e.__esModule||ee&&"Module"===e[Symbol.toStringTag])&&(e=e.default),b(e)?t.extend(e):e}function ot(e){return e.isComment&&e.asyncFactory}function it(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(A(n)&&(A(n.componentOptions)||ot(n)))return n}}function at(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&lt(e,t)}function st(e,t,n){n?Xe.$once(e,t):Xe.$on(e,t)}function ct(e,t){Xe.$off(e,t)}function lt(e,t,n){Xe=e,Ye(t,n||{},st,ct),Xe=void 0}function ut(e,t){var n={};if(!e)return n;for(var r=0,o=e.length;r<o;r++){var i=e[r],a=i.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,i.context!==t&&i.fnContext!==t||!a||null==a.slot)(n.default||(n.default=[])).push(i);else{var s=a.slot,c=n[s]||(n[s]=[]);"template"===i.tag?c.push.apply(c,i.children||[]):c.push(i)}}for(var l in n)n[l].every(ft)&&delete n[l];return n}function ft(e){return e.isComment&&!e.asyncFactory||" "===e.text}function pt(e,t){t=t||{};for(var n=0;n<e.length;n++)Array.isArray(e[n])?pt(e[n],t):t[e[n].key]=e[n].fn;return t}var dt=null;function ht(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function vt(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function mt(e,t){if(t){if(e._directInactive=!1,vt(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)mt(e.$children[n]);yt(e,"activated")}}function yt(t,n){ie();var e=t.$options[n];if(e)for(var r=0,o=e.length;r<o;r++)try{e[r].call(t)}catch(e){Ne(e,t,n+" hook")}t._hasHookEvent&&t.$emit("hook:"+n),ae()}var gt=[],_t=[],bt={},wt=!1,kt=!1,St=0;function Ot(){var e,t;for(kt=!0,gt.sort(function(e,t){return e.id-t.id}),St=0;St<gt.length;St++)t=(e=gt[St]).id,bt[t]=null,e.run();var n=_t.slice(),r=gt.slice();St=gt.length=_t.length=0,wt=kt=!(bt={}),function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,mt(e[t],!0)}(n),function(e){var t=e.length;for(;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&yt(r,"updated")}}(r),Z&&T.devtools&&Z.emit("flush")}var Ct=0,xt=function(e,t,n,r,o){this.vm=e,o&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Ct,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Q,this.newDepIds=new Q,this.expression="","function"==typeof t?this.getter=t:(this.getter=function(e){if(!F.test(e)){var n=e.split(".");return function(e){for(var t=0;t<n.length;t++){if(!e)return;e=e[n[t]]}return e}}}(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};xt.prototype.get=function(){var e;ie(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;Ne(e,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&Ge(e),ae(),this.cleanupDeps()}return e},xt.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},xt.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},xt.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var t=e.id;if(null==bt[t]){if(bt[t]=!0,kt){for(var n=gt.length-1;St<n&&gt[n].id>e.id;)n--;gt.splice(n+1,0,e)}else gt.push(e);wt||(wt=!0,ze(Ot))}}(this)},xt.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||b(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Ne(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},xt.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},xt.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},xt.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||l(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var Et={enumerable:!0,configurable:!0,get:R,set:R};function $t(e,t,n){Et.get=function(){return this[t][n]},Et.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Et)}function At(e){e._watchers=[];var t=e.$options;t.props&&function(n,r){var o=n.$options.propsData||{},i=n._props={},a=n.$options._propKeys=[];n.$parent&&me(!1);var e=function(e){a.push(e);var t=Me(e,r,o,n);we(i,e,t),e in n||$t(n,"_props",e)};for(var t in r)e(t);me(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?R:y(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;u(t=e._data="function"==typeof t?jt(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,o=(e.$options.methods,n.length);for(;o--;){var i=n[o];r&&f(r,i)||(void 0,36!==(a=(i+"").charCodeAt(0))&&95!==a&&$t(e,"_data",i))}var a;be(t,!0)}(e):be(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=K();for(var o in t){var i=t[o],a="function"==typeof i?i:i.get;r||(n[o]=new xt(e,a||R,R,It)),o in e||Mt(e,o,i)}}(e,t.computed),t.watch&&t.watch!==G&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)Pt(e,n,r[o]);else Pt(e,n,r)}}(e,t.watch)}function jt(e,t){ie();try{return e.call(t,t)}catch(e){return Ne(e,t,"data()"),{}}finally{ae()}}var It={lazy:!0};function Mt(e,t,n){var r=!K();Et.set="function"==typeof n?(Et.get=r?Tt(t):n,R):(Et.get=n.get?r&&!1!==n.cache?Tt(t):n.get:R,n.set?n.set:R),Object.defineProperty(e,t,Et)}function Tt(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),re.target&&e.depend(),e.value}}function Pt(e,t,n,r){return u(n)&&(n=(r=n).handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function Ft(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}function Nt(t){var n=Rt(t.$options.inject,t);n&&(me(!1),Object.keys(n).forEach(function(e){we(t,e,n[e])}),me(!0))}function Rt(t,e){if(t){for(var n=Object.create(null),r=ee?Reflect.ownKeys(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}):Object.keys(t),o=0;o<r.length;o++){for(var i=r[o],a=t[i].from,s=e;s;){if(s._provided&&f(s._provided,a)){n[i]=s._provided[a];break}s=s.$parent}if(!s&&"default"in t[i]){var c=t[i].default;n[i]="function"==typeof c?c.call(e):c}}return n}}function Dt(e,t){var n,r,o,i,a;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(b(e))for(i=Object.keys(e),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=t(e[a],a,r);return A(n)&&(n._isVList=!0),n}function Vt(e,t,n,r){var o,i=this.$scopedSlots[e];if(i)n=n||{},r&&(n=N(N({},r),n)),o=i(n)||t;else{var a=this.$slots[e];a&&(a._rendered=!0),o=a||t}var s=n&&n.slot;return s?this.$createElement("template",{slot:s},o):o}function Lt(e){return Ie(this.$options,"filters",e)||S}function Jt(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}function Wt(e,t,n,r,o){var i=T.keyCodes[t]||n;return o&&r&&!T.keyCodes[t]?Jt(o,r):i?Jt(i,e):r?w(r)!==t:void 0}function qt(n,r,o,i,a){if(o)if(b(o)){var s;Array.isArray(o)&&(o=function(e){for(var t={},n=0;n<e.length;n++)e[n]&&N(t,e[n]);return t}(o));var e=function(t){if("class"===t||"style"===t||c(t))s=n;else{var e=n.attrs&&n.attrs.type;s=i||T.mustUseProp(r,e,t)?n.domProps||(n.domProps={}):n.attrs||(n.attrs={})}t in s||(s[t]=o[t],a&&((n.on||(n.on={}))["update:"+t]=function(e){o[t]=e}))};for(var t in o)e(t)}else;return n}function Bt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t||zt(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),"__static__"+e,!1),r}function Ut(e,t,n){return zt(e,"__once__"+t+(n?"_"+n:""),!0),e}function zt(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&Ht(e[r],t+"_"+r,n);else Ht(e,t,n)}function Ht(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function Gt(e,t){if(t)if(u(t)){var n=e.on=e.on?N({},e.on):{};for(var r in t){var o=n[r],i=t[r];n[r]=o?[].concat(o,i):i}}else;return e}function Xt(e){e._o=Ut,e._n=n,e._s=t,e._l=Dt,e._t=Vt,e._q=O,e._i=C,e._m=Bt,e._f=Lt,e._k=Wt,e._b=qt,e._v=ue,e._e=le,e._u=pt,e._g=Gt}function Kt(e,t,n,i,r){var a,s=r.options;f(i,"_uid")?(a=Object.create(i))._original=i:i=(a=i)._original;var o=j(s._compiled),c=!o;this.data=e,this.props=t,this.children=n,this.parent=i,this.listeners=e.on||_,this.injections=Rt(s.inject,i),this.slots=function(){return ut(n,i)},o&&(this.$options=s,this.$slots=this.slots(),this.$scopedSlots=e.scopedSlots||_),s._scopeId?this._c=function(e,t,n,r){var o=mn(a,e,t,n,r,c);return o&&!Array.isArray(o)&&(o.fnScopeId=s._scopeId,o.fnContext=i),o}:this._c=function(e,t,n,r){return mn(a,e,t,n,r,c)}}function Zt(e,t,n,r){var o=fe(e);return o.fnContext=n,o.fnOptions=r,t.slot&&((o.data||(o.data={})).slot=t.slot),o}function Yt(e,t){for(var n in t)e[h(n)]=t[n]}Xt(Kt.prototype);var Qt="@inRecycleList";function en(e,t,n,r){if(o&&o.taskCenter)return"function"==typeof o.taskCenter.registerHook?o.taskCenter.registerHook(e,t,n,r):void 0}function tn(e,n,t){if(b(n))if(t)e.$refs={};else{var r=e.$refs||{};Object.keys(n).forEach(function(e){var t=n[e];r[e]=1===t.length?t[0]:t}),e.$refs=r}}function nn(e,n,r,t){if(b(r)){var o=e.$refs||{};t?Object.keys(r).forEach(function(e){var t=r[e];o[e]&&(1===t.length&&Array.isArray(o[e])?delete o[e][n]:delete o[e])}):(Object.keys(r).forEach(function(e){var t=r[e];1===t.length?(Array.isArray(o[e])||(o[e]=[]),o[e][n]=t[0]):o[e]=t}),e.$refs=o)}}var rn=0;function on(e){var t=e.$options.data,n=e.$options.computed||{},r=e._data?Object.assign({},e._data):"function"==typeof t?jt(t,e):t||{},o={};for(var i in n)o[i]=e[i];return Object.assign({},r,o)}function an(e){void 0===e&&(e={});var r=this,t=e.componentId;P(r,"_vmTemplate",e.vmTemplate),r._uid=t||"virtual-component-"+rn++,r._isVue=!0,e&&e._isComponent?xn(r,e):r.$options=je(En(r.constructor),e||{},r),ht((r._renderProxy=r)._self=r),at(r),yn(r),yt(r,"beforeCreate"),Nt(r),At(r),Ft(r),yt(r,"created"),en(t,"lifecycle","attach",function(e){tn(r,e&&e.refs),yt(r,"beforeMount"),new xt(r,function(){return on(r)},function(){return r._update(r._vnode,!1)}),r._isMounted=!0,yt(r,"mounted")}),en(t,"lifecycle","update",function(e){tn(r,e&&e.refs),r._update(r._vnode,!1)}),en(t,"lifecycle","syncState",function(e,t){if(u(t))for(var n in t)r[n]=t[n];return on(r)}),en(t,"lifecycle","detach",function(e){tn(r,e&&e.refs,!0),r.$destroy(),r._vmTemplate&&(r._vmTemplate.removeVirtualComponent(r._uid),delete r._vmTemplate)})}function sn(e){var t=this,n=t.$options.componentId;(t._isMounted&&yt(t,"beforeUpdate"),t._vnode=e,t._isMounted&&n)&&function(e,t,n){if(o&&o.taskCenter)"function"==typeof o.taskCenter.updateData&&o.taskCenter.updateData(e,t,n)}(n,on(t),function(){yt(t,"updated")})}function cn(e){void 0===e&&(e={});var t=this;t._uid="virtual-component-template-"+rn++,t._isVue=!0,e&&e._isComponent?xn(t,e):t.$options=je(En(t.constructor),e||{},t),at(t._self=t),yn(t),At(t),this.registerVirtualComponent()}function ln(e){var t,n,o,i;delete e.data.attrs[Qt],n=(t=e).componentOptions.Ctor,o=n.extend({}),i=o.prototype.$emit,o.prototype._init=an,o.prototype._update=sn,o.prototype.$emit=function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];var r=this._uid,o=this._vmTemplate;return r&&o&&(t.push(r),i.apply(o,t)),i.apply(this,t)},t.componentOptions.Ctor=n.extend({methods:{registerVirtualComponent:function(){var r=this;P(r,"_virtualComponents",{}),en(String(r._uid),"lifecycle","create",function(e,t){var n=new o({vmTemplate:r,componentId:e,propsData:t});return n._uid=e,r._virtualComponents&&(r._virtualComponents[e]=n),on(n)})},removeVirtualComponent:function(e){delete this._virtualComponents[e]}},destroyed:function(){delete this._virtualComponents}}),t.componentOptions.Ctor.prototype._init=cn,t.componentOptions.Ctor.prototype._update=R;var r=dn(e),a=r.$options["@render"];if(a)try{return a.call(r)}catch(e){Ne(e,r,"@render")}}var un={init:function(e,t,n,r){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var o=e;un.prepatch(o,o)}else{(e.componentInstance=dn(e,dt,n,r)).$mount(t?e.elm:void 0,t)}},prepatch:function(e,t){var n=t.componentOptions;!function(e,t,n,r,o){var i=!!(o||e.$options._renderChildren||r.data.scopedSlots||e.$scopedSlots!==_);if(e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=o,e.$attrs=r.data.attrs||_,e.$listeners=n||_,t&&e.$options.props){me(!1);for(var a=e._props,s=e.$options._propKeys||[],c=0;c<s.length;c++){var l=s[c],u=e.$options.props;a[l]=Me(l,u,t,e)}me(!0),e.$options.propsData=t}n=n||_;var f=e.$options._parentListeners;e.$options._parentListeners=n,lt(e,n,f),i&&(e.$slots=ut(o,r.context),e.$forceUpdate())}(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){var t,n=e.context,r=e.componentInstance;r._isMounted||(r._isMounted=!0,yt(r,"mounted")),e.data.keepAlive&&(n._isMounted?((t=r)._inactive=!1,_t.push(t)):mt(r,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(!(n&&(t._directInactive=!0,vt(t))||t._inactive)){t._inactive=!0;for(var r=0;r<t.$children.length;r++)e(t.$children[r]);yt(t,"deactivated")}}(t,!0):t.$destroy())}},fn=Object.keys(un);function pn(e,t,n,r,o){if(!$(e)){var i=n.$options._base;if(b(e)&&(e=i.extend(e)),"function"==typeof e){var a,s,c,l,u,f,p;if($(e.cid)&&void 0===(e=function(t,n,e){if(j(t.error)&&A(t.errorComp))return t.errorComp;if(A(t.resolved))return t.resolved;if(j(t.loading)&&A(t.loadingComp))return t.loadingComp;if(!A(t.contexts)){var r=t.contexts=[e],o=!0,i=function(){for(var e=0,t=r.length;e<t;e++)r[e].$forceUpdate()},a=D(function(e){t.resolved=rt(e,n),o||i()}),s=D(function(e){A(t.errorComp)&&(t.error=!0,i())}),c=t(a,s);return b(c)&&("function"==typeof c.then?$(t.resolved)&&c.then(a,s):A(c.component)&&"function"==typeof c.component.then&&(c.component.then(a,s),A(c.error)&&(t.errorComp=rt(c.error,n)),A(c.loading)&&(t.loadingComp=rt(c.loading,n),0===c.delay?t.loading=!0:setTimeout(function(){$(t.resolved)&&$(t.error)&&(t.loading=!0,i())},c.delay||200)),A(c.timeout)&&setTimeout(function(){$(t.resolved)&&s(null)},c.timeout))),o=!1,t.loading?t.loadingComp:t.resolved}t.contexts.push(e)}(a=e,i,n)))return s=a,c=t,l=n,u=r,f=o,(p=le()).asyncFactory=s,p.asyncMeta={data:c,context:l,children:u,tag:f},p;t=t||{},En(e),A(t.model)&&function(e,t){var n=e.model&&e.model.prop||"value",r=e.model&&e.model.event||"input";(t.props||(t.props={}))[n]=t.model.value;var o=t.on||(t.on={});A(o[r])?o[r]=[t.model.callback].concat(o[r]):o[r]=t.model.callback}(e.options,t);var d=function(e,t,n){var r=t.options.props;if(!$(r)){var o={},i=e.attrs,a=e.props;if(A(i)||A(a))for(var s in r){var c=w(s);et(o,a,s,c,!0)||et(o,i,s,c,!1)}return o}}(t,e);if(j(e.options.functional))return function(e,t,n,r,o){var i=e.options,a={},s=i.props;if(A(s))for(var c in s)a[c]=Me(c,s,t||_);else A(n.attrs)&&Yt(a,n.attrs),A(n.props)&&Yt(a,n.props);var l=new Kt(n,a,o,r,e),u=i.render.call(null,l._c,l);if(u instanceof se)return Zt(u,n,l.parent,i);if(Array.isArray(u)){for(var f=tt(u)||[],p=new Array(f.length),d=0;d<f.length;d++)p[d]=Zt(f[d],n,l.parent,i);return p}}(e,d,t,n,r);var h=t.on;if(t.on=t.nativeOn,j(e.options.abstract)){var v=t.slot;t={},v&&(t.slot=v)}!function(e){for(var t=e.hook||(e.hook={}),n=0;n<fn.length;n++){var r=fn[n];t[r]=un[r]}}(t);var m,y=e.options.name||o,g=new se("vue-component-"+e.cid+(y?"-"+y:""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:d,listeners:h,tag:o,children:r},a);return(m=g).data.attrs&&Qt in m.data.attrs?ln(g):g}}}function dn(e,t,n,r){var o={_isComponent:!0,parent:t,_parentVnode:e,_parentElm:n||null,_refElm:r||null},i=e.data.inlineTemplate;return A(i)&&(o.render=i.render,o.staticRenderFns=i.staticRenderFns),new e.componentOptions.Ctor(o)}var hn=1,vn=2;function mn(e,t,n,r,o,i){return(Array.isArray(n)||I(n))&&(o=r,r=n,n=void 0),j(i)&&(o=vn),function(e,t,n,r,o){if(A(n)&&A(n.__ob__))return le();A(n)&&A(n.is)&&(t=n.is);if(!t)return le();Array.isArray(r)&&"function"==typeof r[0]&&((n=n||{}).scopedSlots={default:r[0]},r.length=0);o===vn?r=tt(r):o===hn&&(r=function(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(r));var i,a;if("string"==typeof t){var s;a=e.$vnode&&e.$vnode.ns||T.getTagNamespace(t),i=T.isReservedTag(t)?new se(T.parsePlatformTagName(t),n,r,void 0,void 0,e):A(s=Ie(e.$options,"components",t))?pn(s,n,e,r,t):new se(t,n,r,void 0,void 0,e)}else i=pn(t,n,e,r);return Array.isArray(i)?i:A(i)?(A(a)&&function e(t,n,r){t.ns=n;"foreignObject"===t.tag&&(r=!(n=void 0));if(A(t.children))for(var o=0,i=t.children.length;o<i;o++){var a=t.children[o];A(a.tag)&&($(a.ns)||j(r)&&"svg"!==a.tag)&&e(a,n,r)}}(i,a),A(n)&&function(e){b(e.style)&&Ge(e.style);b(e.class)&&Ge(e.class)}(n),i):le()}(e,t,n,r,o)}function yn(o){o._vnode=null,o._staticTrees=null;var e=o.$options,t=o.$vnode=e._parentVnode,n=t&&t.context;o.$slots=ut(e._renderChildren,n),o.$scopedSlots=_,o._c=function(e,t,n,r){return mn(o,e,t,n,r,!1)},o.$createElement=function(e,t,n,r){return mn(o,e,t,n,r,!0)};var r=t&&t.data;we(o,"$attrs",r&&r.attrs||_,null,!0),we(o,"$listeners",e._parentListeners||_,null,!0)}var gn,_n,bn,wn,kn,Sn,On,Cn=0;function xn(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r,n._parentElm=t._parentElm,n._refElm=t._refElm;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function En(e){var t=e.options;if(e.super){var n=En(e.super);if(n!==e.superOptions){e.superOptions=n;var r=function(e){var t,n=e.options,r=e.extendOptions,o=e.sealedOptions;for(var i in n)n[i]!==o[i]&&(t||(t={}),t[i]=$n(n[i],r[i],o[i]));return t}(e);r&&N(e.extendOptions,r),(t=e.options=je(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function $n(e,t,n){if(Array.isArray(e)){var r=[];n=Array.isArray(n)?n:[n],t=Array.isArray(t)?t:[t];for(var o=0;o<e.length;o++)(0<=t.indexOf(e[o])||n.indexOf(e[o])<0)&&r.push(e[o]);return r}return e}function An(e){this._init(e)}function jn(e){e.cid=0;var a=1;e.extend=function(e){e=e||{};var t=this,n=t.cid,r=e._Ctor||(e._Ctor={});if(r[n])return r[n];var o=e.name||t.options.name,i=function(e){this._init(e)};return((i.prototype=Object.create(t.prototype)).constructor=i).cid=a++,i.options=je(t.options,e),i.super=t,i.options.props&&function(e){var t=e.options.props;for(var n in t)$t(e.prototype,"_props",n)}(i),i.options.computed&&function(e){var t=e.options.computed;for(var n in t)Mt(e.prototype,n,t[n])}(i),i.extend=t.extend,i.mixin=t.mixin,i.use=t.use,x.forEach(function(e){i[e]=t[e]}),o&&(i.options.components[o]=i),i.superOptions=t.options,i.extendOptions=e,i.sealedOptions=N({},i.options),r[n]=i}}function In(e){return e&&(e.Ctor.options.name||e.tag)}function Mn(e,t){return Array.isArray(e)?-1<e.indexOf(t):"string"==typeof e?-1<e.split(",").indexOf(t):(n=e,"[object RegExp]"===r.call(n)&&e.test(t));var n}function Tn(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=In(a.componentOptions);s&&!t(s)&&Pn(n,i,r,o)}}}function Pn(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,l(n,t)}An.prototype._init=function(e){var t=this;t._uid=Cn++,t._isVue=!0,e&&e._isComponent?xn(t,e):t.$options=je(En(t.constructor),e||{},t),ht((t._renderProxy=t)._self=t),at(t),yn(t),yt(t,"beforeCreate"),Nt(t),At(t),Ft(t),yt(t,"created"),t.$options.el&&t.$mount(t.$options.el)},gn=An,_n={get:function(){return this._data}},bn={get:function(){return this._props}},Object.defineProperty(gn.prototype,"$data",_n),Object.defineProperty(gn.prototype,"$props",bn),gn.prototype.$set=ke,gn.prototype.$delete=Se,gn.prototype.$watch=function(e,t,n){if(u(t))return Pt(this,e,t,n);(n=n||{}).user=!0;var r=new xt(this,e,t,n);return n.immediate&&t.call(this,r.value),function(){r.teardown()}},kn=/^hook:/,(wn=An).prototype.$on=function(e,t){if(Array.isArray(e))for(var n=0,r=e.length;n<r;n++)this.$on(e[n],t);else(this._events[e]||(this._events[e]=[])).push(t),kn.test(e)&&(this._hasHookEvent=!0);return this},wn.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},wn.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(e)){for(var r=0,o=e.length;r<o;r++)this.$off(e[r],t);return n}var i=n._events[e];if(!i)return n;if(!t)return n._events[e]=null,n;if(t)for(var a,s=i.length;s--;)if((a=i[s])===t||a.fn===t){i.splice(s,1);break}return n},wn.prototype.$emit=function(t){var n=this,e=n._events[t];if(e){e=1<e.length?g(e):e;for(var r=g(arguments,1),o=0,i=e.length;o<i;o++)try{e[o].apply(n,r)}catch(e){Ne(e,n,'event handler for "'+t+'"')}}return n},(Sn=An).prototype._update=function(e,t){var n=this;n._isMounted&&yt(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=dt;(dt=n)._vnode=e,o?n.$el=n.__patch__(o,e):(n.$el=n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),n.$options._parentElm=n.$options._refElm=null),dt=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},Sn.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},Sn.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){yt(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||l(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),yt(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}},Xt((On=An).prototype),On.prototype.$nextTick=function(e){return ze(e,this)},On.prototype._render=function(){var t,n=this,e=n.$options,r=e.render,o=e._parentVnode;o&&(n.$scopedSlots=o.data.scopedSlots||_),n.$vnode=o;try{t=r.call(n._renderProxy,n.$createElement)}catch(e){Ne(e,n,"render"),t=n._vnode}return t instanceof se||(t=le()),t.parent=o,t};var Fn,Nn,Rn,Dn=[String,RegExp,Array],Vn={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Dn,exclude:Dn,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Pn(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",function(t){Tn(e,function(e){return Mn(t,e)})}),this.$watch("exclude",function(t){Tn(e,function(e){return!Mn(t,e)})})},render:function(){var e=this.$slots.default,t=it(e),n=t&&t.componentOptions;if(n){var r=In(n),o=this.include,i=this.exclude;if(o&&(!r||!Mn(o,r))||i&&r&&Mn(i,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;a[c]?(t.componentInstance=a[c].componentInstance,l(s,c),s.push(c)):(a[c]=t,s.push(c),this.max&&s.length>parseInt(this.max)&&Pn(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};Fn=An,Rn={get:function(){return T}},Object.defineProperty(Fn,"config",Rn),Fn.util={warn:te,extend:N,mergeOptions:je,defineReactive:we},Fn.set=ke,Fn.delete=Se,Fn.nextTick=ze,Fn.options=Object.create(null),x.forEach(function(e){Fn.options[e+"s"]=Object.create(null)}),N((Fn.options._base=Fn).options.components,Vn),Fn.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(-1<t.indexOf(e))return this;var n=g(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this},Fn.mixin=function(e){return this.options=je(this.options,e),this},jn(Fn),Nn=Fn,x.forEach(function(n){Nn[n]=function(e,t){return t?("component"===n&&u(t)&&(t.name=t.name||e,t=this.options._base.extend(t)),"directive"===n&&"function"==typeof t&&(t={bind:t,update:t}),this.options[n+"s"][e]=t):this.options[n+"s"][e]}}),Object.defineProperty(An.prototype,"$isServer",{get:K}),Object.defineProperty(An.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(An,"FunctionalRenderContext",{value:Kt}),An.version="2.5.16";var Ln=1;function Jn(e){this.instanceId="",this.nodeId=Ln++,this.parentNode=null,this.nodeType=3,this.text=e}function Wn(e){return o.createElement(e)}var qn=Object.freeze({namespaceMap:{},createElement:Wn,createElementNS:function(e,t){return o.createElement(e+":"+t)},createTextNode:function(e){return new Jn(e)},createComment:function(e){return o.createComment(e)},insertBefore:function(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=Wn("text");r.setAttr("value",t.text),e.insertBefore(r,n)}},removeChild:function(e,t){3!==t.nodeType?e.removeChild(t):e.setAttr("value","")},appendChild:function(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=Wn("text");n.setAttr("value",t.text),e.appendChild(n)}},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.type},setTextContent:function(e,t){e.parentNode&&e.parentNode.setAttr("value",t)},setAttribute:function(e,t,n){e.setAttr(t,n)},setStyleScope:function(e,t){e.setAttr("@styleScope",t)}}),Bn={create:function(e,t){Un(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Un(e,!0),Un(t))},destroy:function(e){Un(e,!0)}};function Un(e,t){var n=e.data.ref;if(A(n)){var r=e.context,o=e.componentInstance||e.elm,i=r.$refs;t?Array.isArray(i[n])?l(i[n],o):i[n]===o&&(i[n]=void 0):e.data.refInFor?Array.isArray(i[n])?i[n].indexOf(o)<0&&i[n].push(o):i[n]=[o]:i[n]=o}}s("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),s("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0);var zn=s("text,number,password,search,email,tel,url"),Hn=new se("",{},[]),Gn=["create","activate","update","remove","destroy"];function Xn(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&A(e.data)===A(t.data)&&function(e,t){if("input"!==e.tag)return!0;var n,r=A(n=e.data)&&A(n=n.attrs)&&n.type,o=A(n=t.data)&&A(n=n.attrs)&&n.type;return r===o||zn(r)&&zn(o)}(e,t)||j(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&$(t.asyncFactory.error))}function Kn(e,t,n){var r,o,i={};for(r=t;r<=n;++r)A(o=e[r].key)&&(i[o]=r);return i}var Zn={create:Yn,update:Yn,destroy:function(e){Yn(e,Hn)}};function Yn(e,t){(e.data.directives||t.data.directives)&&function(t,n){var e,r,o,i=t===Hn,a=n===Hn,s=er(t.data.directives,t.context),c=er(n.data.directives,n.context),l=[],u=[];for(e in c)r=s[e],o=c[e],r?(o.oldValue=r.value,tr(o,"update",n,t),o.def&&o.def.componentUpdated&&u.push(o)):(tr(o,"bind",n,t),o.def&&o.def.inserted&&l.push(o));if(l.length){var f=function(){for(var e=0;e<l.length;e++)tr(l[e],"inserted",n,t)};i?Qe(n,"insert",f):f()}u.length&&Qe(n,"postpatch",function(){for(var e=0;e<u.length;e++)tr(u[e],"componentUpdated",n,t)});if(!i)for(e in s)c[e]||tr(s[e],"unbind",t,t,a)}(e,t)}var Qn=Object.create(null);function er(e,t){var n,r,o,i=Object.create(null);if(!e)return i;for(n=0;n<e.length;n++)(r=e[n]).modifiers||(r.modifiers=Qn),(i[(o=r,o.rawName||o.name+"."+Object.keys(o.modifiers||{}).join("."))]=r).def=Ie(t.$options,"directives",r.name);return i}function tr(t,n,r,e,o){var i=t.def&&t.def[n];if(i)try{i(r.elm,t,r,e,o)}catch(e){Ne(e,r.context,"directive "+t.name+" "+n+" hook")}}var nr=[Bn,Zn];function rr(e,t){if(e.data.attrs||t.data.attrs){var n,r,o=t.elm,i=e.data.attrs||{},a=t.data.attrs||{};a.__ob__&&(a=t.data.attrs=N({},a));var s="function"==typeof o.setAttrs,c={};for(n in a)r=a[n],i[n]!==r&&(s?c[n]=r:o.setAttr(n,r));for(n in i)null==a[n]&&(s?c[n]=void 0:o.setAttr(n));s&&o.setAttrs(c)}}var or={create:rr,update:rr};function ir(e,t){var n=t.elm,r=t.context,o=t.data,i=e.data;if(o.staticClass||o.class||i&&(i.staticClass||i.class)){var a=[],s=i.staticClass;s&&a.push.apply(a,s),i.class&&a.push.apply(a,i.class);var c,l,u,f,p=[],d=o.staticClass;if(d&&p.push.apply(p,d),o.class&&p.push.apply(p,o.class),"function"==typeof n.setClassList)n.setClassList(p);else{var h=(c=a,l=p,u=r.$options.style||{},f={},l.forEach(function(e){var t=u[e];N(f,t)}),c.forEach(function(e){var t=u[e];for(var n in t)f.hasOwnProperty(n)||(f[n]="")}),f);if("function"==typeof n.setStyles)n.setStyles(h);else for(var v in h)n.setStyle(v,h[v])}}}var ar,sr,cr={create:ir,update:ir};function lr(t,e,n,r,o,i){if(r)console.log("Weex do not support event in bubble phase.");else{if(n){var a=e,s=ar;e=function(e){null!==(1===arguments.length?a(e):a.apply(null,arguments))&&ur(t,null,null,s)}}if(sr&&sr._virtualComponents){ar._context=sr;var c=e;e=function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];var r=(t[0]||{}).componentId,o=this._context;r&&this._context&&(o=(this._context._virtualComponents||{})[r]||o);try{!function(e,t,n){void 0===n&&(n=null);var r=e.fns;if(!Array.isArray(r))return"function"==typeof r?r.apply(n,t):e.apply(n,t);for(var o=r.slice(),i=0;i<o.length;i++)o[i].apply(n,t)}(c,t,o)}catch(e){Ne(e,o,"Failed to invoke virtual component handler ("+r+")")}}}ar.addEvent(t,e,i)}}function ur(e,t,n,r){(r||ar).removeEvent(e)}function fr(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};ar=t.elm,sr=t.context,Ye(n,r,lr,ur,t.context),sr=ar=void 0}}var pr={create:fr,update:fr},dr=p(h);function hr(e,t){if(e.data.style||t.data.style){var n,r,o=t.elm,i=e.data.style||{},a=t.data.style||{},s=a.__ob__;Array.isArray(a)&&(a=t.data.style=function(e){for(var t={},n=0;n<e.length;n++)e[n]&&N(t,e[n]);return t}(a)),s&&(a=t.data.style=N({},a));var c="function"==typeof o.setStyles,l={};for(r in i)a[r]||(c?l[dr(r)]="":o.setStyle(dr(r),""));for(r in a)n=a[r],c?l[dr(r)]=n:o.setStyle(dr(r),n);c&&o.setStyles(l)}}var vr={create:function(e,t){if(t.data.staticStyle){var n=t.elm,r=t.data.staticStyle,o="function"==typeof n.setStyles,i={};for(var a in r)r[a]&&(o?i[dr(a)]=r[a]:n.setStyle(dr(a),r[a]));o&&n.setStyles(i),hr(e,t)}else hr(e,t)},update:hr};function mr(e){if(e){if("object"!=typeof e)return"string"==typeof e?yr(e):void 0;var t={};return!1!==e.css&&N(t,yr(e.name||"v")),N(t,e),t}}var yr=p(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}});J&&!U&&(void 0===window.ontransitionend&&window.onwebkittransitionend,void 0===window.onanimationend&&window.onwebkitanimationend);J&&window.requestAnimationFrame&&window.requestAnimationFrame.bind(window);function gr(e,n){var r=n.elm;r._leaveCb&&(r._leaveCb.cancelled=!0,r._leaveCb());var t=mr(n.data.transition);if(t&&!r._enterCb){for(var o=t.enterClass,i=t.enterToClass,a=t.enterActiveClass,s=t.appearClass,c=t.appearToClass,l=t.appearActiveClass,u=t.beforeEnter,f=t.enter,p=t.afterEnter,d=t.enterCancelled,h=t.beforeAppear,v=t.appear,m=t.afterAppear,y=t.appearCancelled,g=dt,_=dt.$vnode;_&&_.parent;)g=(_=_.parent).context;var b=!g._isMounted||!n.isRootInsert;if(!b||v||""===v){var w=b?s:o,k=b?c:i,S=b?l:a,O=b&&h||u,C=b&&"function"==typeof v?v:f,x=b&&m||p,E=b&&y||d,$=C&&1<(C._length||C.length),A=n.context.$options.style||{},j=A[w],I=A["@TRANSITION"]&&A["@TRANSITION"][S]||{},M=function(e,t,n,r,o,i){var a={},s=t[n],c=t[r],l=t[o];if(s)for(var u in s)a[u]=e.style[u];if(l)for(var f in l)0!==f.indexOf("transition")&&(a[f]=l[f]);c&&N(a,c);return a}(r,A,w,k,S,n.context),T=0<Object.keys(M).length,P=r._enterCb=D(function(){P.cancelled?E&&E(r):x&&x(r),r._enterCb=null});if(setTimeout(function(){var e=r.parentNode,t=e&&e._pending&&e._pending[n.key];(t&&t.context===n.context&&t.tag===n.tag&&t.elm._leaveCb&&t.elm._leaveCb(),C&&C(r,P),T)?n.context.$requireWeexModule("animation").transition(r.ref,{styles:M,duration:I.duration||0,delay:I.delay||0,timingFunction:I.timingFunction||"linear"},$?R:P):$||P()},16),O&&O(r),j)if("function"==typeof r.setStyles)r.setStyles(j);else for(var F in j)r.setStyle(F,j[F]);T||$||P()}}}var _r=function(e){var r,t,g={},n=e.modules,_=e.nodeOps;for(r=0;r<Gn.length;++r)for(g[Gn[r]]=[],t=0;t<n.length;++t)A(n[t][Gn[r]])&&g[Gn[r]].push(n[t][Gn[r]]);function i(e){var t=_.parentNode(e);A(t)&&_.removeChild(t,e)}function b(e,t,n,r,o,i,a){if(A(e.elm)&&A(i)&&(e=i[a]=fe(e)),e.isRootInsert=!o,!function(e,t,n,r){var o=e.data;if(A(o)){var i=A(e.componentInstance)&&o.keepAlive;if(A(o=o.hook)&&A(o=o.init)&&o(e,!1,n,r),A(e.componentInstance))return d(e,t),j(i)&&function(e,t,n,r){for(var o,i=e;i.componentInstance;)if(i=i.componentInstance._vnode,A(o=i.data)&&A(o=o.transition)){for(o=0;o<g.activate.length;++o)g.activate[o](Hn,i);t.push(i);break}f(n,e.elm,r)}(e,t,n,r),!0}}(e,t,n,r)){var s=e.data,c=e.children,l=e.tag;if(A(l)){e.elm=e.ns?_.createElementNS(e.ns,l):_.createElement(l,e),p(e);var u=A(s)&&j(s.appendAsTree);u||(A(s)&&v(e,t),f(n,e.elm,r)),h(e,c,t),u&&(A(s)&&v(e,t),f(n,e.elm,r))}else j(e.isComment)?e.elm=_.createComment(e.text):e.elm=_.createTextNode(e.text),f(n,e.elm,r)}}function d(e,t){A(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,w(e)?(v(e,t),p(e)):(Un(e),t.push(e))}function f(e,t,n){A(e)&&(A(n)?n.parentNode===e&&_.insertBefore(e,t,n):_.appendChild(e,t))}function h(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)b(t[r],n,e.elm,null,!0,t,r);else I(e.text)&&_.appendChild(e.elm,_.createTextNode(String(e.text)))}function w(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return A(e.tag)}function v(e,t){for(var n=0;n<g.create.length;++n)g.create[n](Hn,e);A(r=e.data.hook)&&(A(r.create)&&r.create(Hn,e),A(r.insert)&&t.push(e))}function p(e){var t;if(A(t=e.fnScopeId))_.setStyleScope(e.elm,t);else for(var n=e;n;)A(t=n.context)&&A(t=t.$options._scopeId)&&_.setStyleScope(e.elm,t),n=n.parent;A(t=dt)&&t!==e.context&&t!==e.fnContext&&A(t=t.$options._scopeId)&&_.setStyleScope(e.elm,t)}function y(e,t,n,r,o,i){for(;r<=o;++r)b(n[r],i,e,t,!1,n,r)}function k(e){var t,n,r=e.data;if(A(r))for(A(t=r.hook)&&A(t=t.destroy)&&t(e),t=0;t<g.destroy.length;++t)g.destroy[t](e);if(A(t=e.children))for(n=0;n<e.children.length;++n)k(e.children[n])}function S(e,t,n,r){for(;n<=r;++n){var o=t[n];A(o)&&(A(o.tag)?(a(o),k(o)):i(o.elm))}}function a(e,t){if(A(t)||A(e.data)){var n,r=g.remove.length+1;for(A(t)?t.listeners+=r:t=function(e,t){function n(){0==--n.listeners&&i(e)}return n.listeners=t,n}(e.elm,r),A(n=e.componentInstance)&&A(n=n._vnode)&&A(n.data)&&a(n,t),n=0;n<g.remove.length;++n)g.remove[n](e,t);A(n=e.data.hook)&&A(n=n.remove)?n(e,t):t()}else i(e.elm)}function O(e,t,n,r){for(var o=n;o<r;o++){var i=t[o];if(A(i)&&Xn(e,i))return o}}function C(e,t,n,r){if(e!==t){var o=t.elm=e.elm;if(j(e.isAsyncPlaceholder))A(t.asyncFactory.resolved)?E(e.elm,t,n):t.isAsyncPlaceholder=!0;else if(j(t.isStatic)&&j(e.isStatic)&&t.key===e.key&&(j(t.isCloned)||j(t.isOnce)))t.componentInstance=e.componentInstance;else{var i,a=t.data;A(a)&&A(i=a.hook)&&A(i=i.prepatch)&&i(e,t);var s=e.children,c=t.children;if(A(a)&&w(t)){for(i=0;i<g.update.length;++i)g.update[i](e,t);A(i=a.hook)&&A(i=i.update)&&i(e,t)}$(t.text)?A(s)&&A(c)?s!==c&&function(e,t,n,r,o){for(var i,a,s,c=0,l=0,u=t.length-1,f=t[0],p=t[u],d=n.length-1,h=n[0],v=n[d],m=!o;c<=u&&l<=d;)$(f)?f=t[++c]:$(p)?p=t[--u]:Xn(f,h)?(C(f,h,r),f=t[++c],h=n[++l]):Xn(p,v)?(C(p,v,r),p=t[--u],v=n[--d]):Xn(f,v)?(C(f,v,r),m&&_.insertBefore(e,f.elm,_.nextSibling(p.elm)),f=t[++c],v=n[--d]):(Xn(p,h)?(C(p,h,r),m&&_.insertBefore(e,p.elm,f.elm),p=t[--u]):($(i)&&(i=Kn(t,c,u)),$(a=A(h.key)?i[h.key]:O(h,t,c,u))?b(h,r,e,f.elm,!1,n,l):Xn(s=t[a],h)?(C(s,h,r),t[a]=void 0,m&&_.insertBefore(e,s.elm,f.elm)):b(h,r,e,f.elm,!1,n,l)),h=n[++l]);u<c?y(e,$(n[d+1])?null:n[d+1].elm,n,l,d,r):d<l&&S(0,t,c,u)}(o,s,c,n,r):A(c)?(A(e.text)&&_.setTextContent(o,""),y(o,null,c,0,c.length-1,n)):A(s)?S(0,s,0,s.length-1):A(e.text)&&_.setTextContent(o,""):e.text!==t.text&&_.setTextContent(o,t.text),A(a)&&A(i=a.hook)&&A(i=i.postpatch)&&i(e,t)}}}function x(e,t,n){if(j(n)&&A(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var m=s("attrs,class,staticClass,staticStyle,key");function E(e,t,n,r){var o,i=t.tag,a=t.data,s=t.children;if(r=r||a&&a.pre,t.elm=e,j(t.isComment)&&A(t.asyncFactory))return t.isAsyncPlaceholder=!0;if(A(a)&&(A(o=a.hook)&&A(o=o.init)&&o(t,!0),A(o=t.componentInstance)))return d(t,n),!0;if(A(i)){if(A(s))if(e.hasChildNodes())if(A(o=a)&&A(o=o.domProps)&&A(o=o.innerHTML)){if(o!==e.innerHTML)return!1}else{for(var c=!0,l=e.firstChild,u=0;u<s.length;u++){if(!l||!E(l,s[u],n,r)){c=!1;break}l=l.nextSibling}if(!c||l)return!1}else h(t,s,n);if(A(a)){var f=!1;for(var p in a)if(!m(p)){f=!0,v(t,n);break}!f&&a.class&&Ge(a.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,t,n,r,o,i){if(!$(t)){var a,s=!1,c=[];if($(e))s=!0,b(t,c,o,i);else{var l=A(e.nodeType);if(!l&&Xn(e,t))C(e,t,c,r);else{if(l){if(1===e.nodeType&&e.hasAttribute(M)&&(e.removeAttribute(M),n=!0),j(n)&&E(e,t,c))return x(t,c,!0),e;a=e,e=new se(_.tagName(a).toLowerCase(),{},[],void 0,a)}var u=e.elm,f=_.parentNode(u);if(b(t,c,u._leaveCb?null:f,_.nextSibling(u)),A(t.parent))for(var p=t.parent,d=w(t);p;){for(var h=0;h<g.destroy.length;++h)g.destroy[h](p);if(p.elm=t.elm,d){for(var v=0;v<g.create.length;++v)g.create[v](Hn,p);var m=p.data.hook.insert;if(m.merged)for(var y=1;y<m.fns.length;y++)m.fns[y]()}else Un(p);p=p.parent}A(f)?S(0,[e],0,0):A(e.tag)&&k(e)}}return x(t,c,s),t.elm}A(e)&&k(e)}}({nodeOps:qn,modules:[or,cr,pr,vr,{create:gr,activate:gr,remove:function(n,e){var r=n.elm;r._enterCb&&(r._enterCb.cancelled=!0,r._enterCb());var t=mr(n.data.transition);if(!t)return e();if(r._leaveCb)return;var o=t.leaveClass,i=t.leaveToClass,a=t.leaveActiveClass,s=t.beforeLeave,c=t.leave,l=t.afterLeave,u=t.leaveCancelled,f=t.delayLeave,p=c&&1<(c._length||c.length),d=n.context.$options.style||{},h=d[o],v=d[i]||d[a],m=d["@TRANSITION"]&&d["@TRANSITION"][a]||{},y=r._leaveCb=D(function(){r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[n.key]=null),y.cancelled?u&&u(r):(e(),l&&l(r)),r._leaveCb=null});f?f(g):g();function g(){var e=n.context.$requireWeexModule("animation");function t(){e.transition(r.ref,{styles:v,duration:m.duration||0,delay:m.delay||0,timingFunction:m.timingFunction||"linear"},p?R:y)}y.cancelled||(n.data.show||((r.parentNode._pending||(r.parentNode._pending={}))[n.key]=n),s&&s(r),h?e.transition(r.ref,{styles:h},t):t(),c&&c(r,y),v||p||y())}}}].concat(nr),LONG_LIST_THRESHOLD:10}),br=Object.getOwnPropertyNames(de);function wr(e,r){var o=e.$el;return o&&"function"==typeof o[r]?function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];return o[r].apply(o,t)}:(te("Can't find component method \""+r+'" on '+o.type),R)}function kr(n,r){Array.isArray(r)&&(!function(p,n){for(var e=function(e,t){var f=br[e];P(n,f,function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];var r=this.length,o=de[f];"function"==typeof o&&o.apply(this,t);var i=wr(p,"removeData"),a=wr(p,"insertRange"),s=wr(p,"setListData");switch(f){case"push":a(r,t);break;case"pop":i(r-1,1);break;case"shift":i(0,1);break;case"unshift":a(0,t);break;case"splice":var c=t[0],l=t[1],u=t.slice(2);0<l&&i(c,l),0<u.length&&a(c,u);break;case"sort":case"reverse":s(this.slice())}})},t=0,r=br.length;t<r;t++)e(t)}(n,r),r.forEach(function(t,e){u(t)&&!f(t,"[[Watched]]")&&(P(t,"[[Watched]]",!0),n.$watch(function(){for(var e in t)t[e]},function(){wr(n,"updateData")(r.indexOf(t),t)},{deep:!0}))}))}var Sr={name:"recycle-list",methods:{closest:function(){for(var e,t=arguments,n=[],r=arguments.length;r--;)n[r]=t[r];return(e=this.$el).closest.apply(e,n)},queryElement:function(){for(var e,t=arguments,n=[],r=arguments.length;r--;)n[r]=t[r];return(e=this.$el).queryElement.apply(e,n)},queryElementAll:function(){for(var e,t=arguments,n=[],r=arguments.length;r--;)n[r]=t[r];return(e=this.$el).queryElementAll.apply(e,n)},scrollToElement:function(){for(var e,t=arguments,n=[],r=arguments.length;r--;)n[r]=t[r];return(e=this.$el).scrollToElement.apply(e,n)},resetLoadmore:function(){for(var e,t=arguments,n=[],r=arguments.length;r--;)n[r]=t[r];return(e=this.$el).resetLoadmore.apply(e,n)}},render:function(e){var t=this;if(this._vnode&&this.$options["[[UseCache]]"])return P(this.$options,"[[UseCache]]",!1),this._vnode;var n=this.$options.parent,r=this.$attrs.bindingExpression;return n&&r&&(n.$watch(r,function(){return P(t.$options,"[[UseCache]]",!0)},{deep:!0,immediate:!0}),kr(this,this.$attrs.listData),n.$watch(r,function(e){kr(t,e)})),this._events._attach_slot=function(e){nn(t.$parent||t,e.position,e.refs)},this._events._detach_slot=function(e){nn(t.$parent||t,e.position,e.refs,!0)},e("weex:recycle-list",{on:this._events},this.$slots.default)},renderError:function(e,t){return e("text",{style:{fontSize:"36px",color:"#FF0000"},value:t.toString()})}};function Or(e){if(e.length)return e.map(function(e){var t,n,r=(t=e).tag?t.tag.replace(/vue\-component\-(\d+\-)?/,""):"",o={type:r};if(r){if(o.style=function(e){if(e&&e.data){var t=e.data,n=t.staticStyle,r=t.staticClass;if(e.data.style||e.data.class||n||r){var o=Object.assign({},n,e.data.style),i=e.context.$options.style||{};return[].concat(r,e.data.class).forEach(function(e){e&&i[e]&&Object.assign(o,i[e])}),o}}}(e),e.data&&(o.attr=e.data.attrs,e.data.on&&(o.events=e.data.on)),"span"===r&&((n=e).children&&1===n.children.length&&!n.children[0].tag))return o.attr=o.attr||{},o.attr.value=e.children[0].text.trim(),o}else o.type="span",o.attr={value:(e.text||"").trim()};return e.children&&e.children.length&&(o.children=Or(e.children)),o})}var Cr={name:"richtext",render:function(e){return e("weex:richtext",{on:this._events,attrs:{value:Or(this.$options._renderChildren||[])}})}},xr={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Er(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Er(it(t.children)):e}function $r(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[h(i)]=o[i];return t}function Ar(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var jr={name:"transition",props:xr,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(function(e){return e.tag||ot(e)})).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var i=Er(o);if(!i)return o;if(this._leaving)return Ar(e,o);var a="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?a+"comment":a+i.tag:I(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s,c,l=(i.data||(i.data={})).transition=$r(this),u=this._vnode,f=Er(u);if(i.data.directives&&i.data.directives.some(function(e){return"show"===e.name})&&(i.data.show=!0),f&&f.data&&(s=i,(c=f).key!==s.key||c.tag!==s.tag)&&!ot(f)&&(!f.componentInstance||!f.componentInstance._vnode.isComment)){var p=f.data.transition=N({},l);if("out-in"===r)return this._leaving=!0,Qe(p,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),Ar(e,o);if("in-out"===r){if(ot(i))return u;var d,h=function(){d()};Qe(l,"afterEnter",h),Qe(l,"enterCancelled",h),Qe(p,"delayLeave",function(e){d=e})}}return o}}},Ir=N({tag:String,moveClass:String},xr);delete Ir.mode;var Mr={RecycleList:Sr,Richtext:Cr,Transition:jr,TransitionGroup:{props:Ir,created:function(){var e=this.$requireWeexModule("dom");this.getPosition=function(r){return new Promise(function(t,n){e.getComponentRect(r.ref,function(e){e.result?t(e.size):n(new Error("failed to get rect for element: "+r.tag))})})};var r=this.$requireWeexModule("animation");this.animate=function(t,n){return new Promise(function(e){r.transition(t.ref,n,e)})}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=$r(this),s=0;s<o.length;s++){var c=o[s];c.tag&&null!=c.key&&0!==String(c.key).indexOf("__vlist")&&(i.push(c),((n[c.key]=c).data||(c.data={})).transition=a)}if(r){var l=[],u=[];r.forEach(function(e){e.data.transition=a,n[e.key]?l.push(e):u.push(e)}),this.kept=e(t,null,l),this.removed=u}return e(t,null,i)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.getMoveData(e[0].context,t)},methods:{getMoveData:function(e,t){var n=e.$options.style||{};return n["@TRANSITION"]&&n["@TRANSITION"][t]}}}},Tr=s("template,script,style,element,content,slot,link,meta,svg,view,a,div,img,image,text,span,input,switch,textarea,spinner,select,slider,slider-neighbor,indicator,canvas,list,cell,header,loading,loading-indicator,refresh,scrollable,scroller,video,web,embed,tabbar,tabheader,datepicker,timepicker,marquee,countdown",!0),Pr=(s("web,spinner,switch,video,textarea,canvas,indicator,marquee,countdown",!0),s("richtext,transition,transition-group,recycle-list",!0));s("embed,img,image,input,link,meta",!0);function Fr(e){return!(!e.$options||!e.$options.el)}An.mixin({beforeCreate:function(){Fr(this)&&Ue()},destroyed:function(){Fr(this)&&(Je.length=0,Le=Ve=null,Be=We=!1)}}),An.config.mustUseProp=function(e,t,n){return!1},An.config.isReservedTag=Tr,An.config.isRuntimeComponent=Pr,An.config.isUnknownElement=function(e){return!1},An.options.directives={},An.options.components=Mr,An.prototype.__patch__=_r,An.prototype.$mount=function(e,t){return n=this,r=e&&(i=this.$document,(a=i.createComment("root")).hasAttribute=a.removeAttribute=function(){},i.documentElement.appendChild(a),a),o=t,n.$el=r,n.$options.render||(n.$options.render=le),yt(n,"beforeMount"),new xt(n,function(){n._update(n._render(),o)},R,null,!0),o=!1,null==n.$vnode&&(n._isMounted=!0,yt(n,"mounted")),n;var n,r,o,i,a},e.Vue=An}});e(gr);var _r=n(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var f={};t.createInstanceContext=function(e,t,n){void 0===n&&(n={});var r,o,i,a,s=t.weex,c=(f[e]={instanceId:e,config:s.config,document:s.document,data:n}).Vue=function(e,t){var n={};gr(n,t.document);var r=n.Vue,o=f[e],i=/^weex:/i,a=r.config.isReservedTag||function(){return!1},s=r.config.isRuntimeComponent||function(){return!1};return r.config.isReservedTag=function(e){return!s(e)&&t.supports("@component/"+e)||a(e)||i.test(e)},r.config.parsePlatformTagName=function(e){return e.replace(i,"")},r.prototype.$instanceId=e,r.prototype.$document=o.document,r.prototype.$requireWeexModule=t.requireModule,r.mixin({beforeCreate:function(){var e=this.$options;if(e.el){var t=e.data,n=("function"==typeof t?t():t)||{};e.data=Object.assign(n,o.data),o.app=this}},mounted:function(){if(this.$options.el&&t.document&&o.app===this)try{t.document.taskCenter.send("dom",{action:"createFinish"},[])}catch(e){}}}),r.prototype.$getConfig=function(){if(o.app instanceof r)return o.config},r}(e,s),l=(r=e,o=s.requireModule,i=f[r],a=o("timer"),{setTimeout:function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];return a.setTimeout(function(){t[0].apply(t,t.slice(2))},t[1]),i.document.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];return a.setInterval(function(){t[0].apply(t,t.slice(2))},t[1]),i.document.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){a.clearTimeout(e)},clearInterval:function(e){a.clearInterval(e)}}),u=Object.assign({Vue:c},l);return Object.freeze(u),u},t.destroyInstance=function(e){var t=f[e];if(t&&t.app instanceof t.Vue){try{t.app.$destroy(),t.document.destroy()}catch(e){}delete t.document,delete t.app}delete f[e]},t.refreshInstance=function(e,t){var n=f[e];if(!(n&&n.app instanceof n.Vue))return new Error("refreshInstance: instance "+e+" not found!");if(n.Vue&&n.Vue.set)for(var r in t)n.Vue.set(n.app,r,t[r]);n.document.taskCenter.send("dom",{action:"refreshFinish"},[])}}),br=e(_r),wr=_r.createInstanceContext,kr=_r.destroyInstance,Sr=_r.refreshInstance,Or=Object.freeze({default:br,__moduleExports:_r,createInstanceContext:wr,destroyInstance:kr,refreshInstance:Sr});var Cr=Object.freeze({$:function(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm},$el:function(e){var t=this._ids[e];if(t)return t.el},$vm:function(e){var t=this._ids[e];if(t)return t.vm},$renderThen:function(e){return this._app.differ.then(function(){e()})},$scrollTo:function(e,t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this.$el(e);n&&this._app.requireModule("dom").scrollToElement(n.ref,{offset:t})},$transition:function(e,n,r){var o=this,i=this.$el(e);i&&n&&n.styles&&this._app.requireModule("animation").transition(i.ref,n,function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];o._setStyle(i,n.styles),r&&r.apply(void 0,e)})},$getConfig:function(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t},$sendHttp:function(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead"),this._app.requireModule("stream").sendHttp(e,t)},$openURL:function(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead"),this._app.requireModule("event").openURL(e)},$setTitle:function(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead"),this._app.requireModule("pageInfo").setTitle(e)},$call:function(e,t){for(var n=[],r=arguments.length-2;0<r--;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}});function xr(e){for(var t=[],n=arguments.length-1;0<n--;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&xr.apply(void 0,[e].concat(t))}return e}function Er(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function $r(e,t){if(e.length){var n=e.indexOf(t);if(-1<n)return e.splice(n,1)}}var Ar=Object.prototype.hasOwnProperty;function jr(e,t){return Ar.call(e,t)}function Ir(n,r){return function(e){var t=arguments.length;return t?1<t?n.apply(r,arguments):n.call(r,e):n.call(r)}}function Mr(e){return null!==e&&"object"==typeof e}var Tr=Object.prototype.toString,Pr="[object Object]";function Fr(e){return Tr.call(e)===Pr}function Nr(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}var Rr,Dr="__proto__"in{};function Vr(){return"object"==typeof nativeSet?nativeSet.create():new Rr}function Lr(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}"undefined"!=typeof Set&&Set.toString().match(/native code/)?Rr=Set:((Rr=function(){this.set=Object.create(null)}).prototype.has=function(e){return void 0!==this.set[e]},Rr.prototype.add=function(e){null==e||this.set[e]||(this.set[e]=1)},Rr.prototype.clear=function(){this.set=Object.create(null)});var Jr=/^@weex-component\//,Wr=/^@weex-module\//,qr=/^\.{1,2}\//,Br=/\.js$/,Ur=function(e){return!!e.match(Jr)},zr=function(e){return!!e.match(Wr)},Hr=function(e){return!!e.match(qr)},Gr=function(e){return!Ur(e)&&!zr(e)&&!Hr(e)};function Xr(e){return e.replace(Jr,"").replace(Wr,"")}function Kr(e){return e.replace(Br,"")}var Zr=0;function Yr(){this.id=Zr++,this.subs=[]}Yr.target=null;var Qr=[];function eo(){Yr.target=null,Qr=[]}Yr.prototype.addSub=function(e){this.subs.push(e)},Yr.prototype.removeSub=function(e){$r(this.subs,e)},Yr.prototype.depend=function(){Yr.target&&Yr.target.addDep(this)},Yr.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()};var to=0;function no(e,t,n,r){r&&xr(this,r);var o="function"==typeof t;(this.vm=e)._watchers.push(this),this.expression=t,this.cb=n,this.id=++to,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=Vr(),this.newDepIds=Vr(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}no.prototype.get=function(){var e;e=this,Yr.target&&Qr.push(Yr.target),Yr.target=e;var t=this.getter.call(this.vm,this.vm);return this.deep&&function e(t,n){var r,o,i,a;n||(n=ro).clear();i=Array.isArray(t);a=Mr(t);if(i||a){if(t.__ob__){var s=t.__ob__.dep.id;if(n.has(s))return;n.add(s)}if(i)for(r=t.length;r--;)e(t[r],n);else if(a)for(o=Object.keys(t),r=o.length;r--;)e(t[o[r]],n)}}(t),Yr.target=Qr.pop(),this.cleanupDeps(),t},no.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},no.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},no.prototype.update=function(e){this.lazy?this.dirty=!0:this.run()},no.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||(Mr(e)||this.deep)&&!this.shallow){var t=this.value;this.value=e,this.cb.call(this.vm,e,t)}this.queued=this.shallow=!1}},no.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},no.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},no.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||this.vm._vForRemoving||$r(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1,this.vm=this.cb=this.value=null}};var ro=Vr();var oo=Array.prototype,io=Object.create(oo);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(a){var s=oo[a];Er(io,a,function(){for(var e=arguments,t=arguments.length,n=new Array(t);t--;)n[t]=e[t];var r,o=s.apply(this,n),i=this.__ob__;switch(a){case"push":case"unshift":r=n;break;case"splice":r=n.slice(2)}return r&&i.observeArray(r),i.dep.notify(),o})}),Er(oo,"$set",function(e,t){return console.warn('[JS Framework] "Array.prototype.$set" is not a standard API, it will be removed in the next version.'),e>=this.length&&(this.length=e+1),this.splice(e,1,t)[0]}),Er(oo,"$remove",function(e){console.warn('[JS Framework] "Array.prototype.$remove" is not a standard API, it will be removed in the next version.'),this.length&&("number"!=typeof e&&(e=this.indexOf(e)),-1<e&&this.splice(e,1))});var ao=Object.getOwnPropertyNames(io);function so(e){(this.value=e,this.dep=new Yr,Er(e,"__ob__",this),Array.isArray(e))?((Dr?co:lo)(e,io,ao),this.observeArray(e)):this.walk(e)}function co(e,t){e.__proto__=t}function lo(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];Er(e,i,t[i])}}function uo(e,t){var n;if(Mr(e))return jr(e,"__ob__")&&e.__ob__ instanceof so?n=e.__ob__:(Array.isArray(e)||Fr(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new so(e)),n&&t&&n.addVm(t),n}so.prototype.walk=function(e){for(var t in e)this.convert(t,e[t])},so.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)uo(e[t])},so.prototype.convert=function(e,t){!function(o,e,i){var a=new Yr,t=Object.getOwnPropertyDescriptor(o,e);if(t&&!1===t.configurable)return;var s=t&&t.get,n=t&&t.set,c=uo(i);Object.defineProperty(o,e,{enumerable:!0,configurable:!0,get:function(){var e=s?s.call(o):i;if(Yr.target&&(a.depend(),c&&c.dep.depend(),Array.isArray(e)))for(var t=void 0,n=0,r=e.length;n<r;n++)(t=e[n])&&t.__ob__&&t.__ob__.dep.depend();return e},set:function(e){var t=s?s.call(o):i;e!==t&&(n?n.call(o,e):i=e,c=uo(e),a.notify())}})}(this.value,e,t)},so.prototype.addVm=function(e){(this.vms||(this.vms=[])).push(e)},so.prototype.removeVm=function(e){$r(this.vms,e)};var fo=["$index","$value","$event"];function po(t,n){(-1<fo.indexOf(n)||!Nr(n))&&Object.defineProperty(t,n,{configurable:!0,enumerable:!0,get:function(){return t._data[n]},set:function(e){t._data[n]=e}})}function ho(e){var t=e._data;Fr(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)po(e,n[r]);uo(t,e)}function vo(){}function mo(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};o.set="function"==typeof r?(o.get=yo(r,e),vo):(o.get=r.get?!1!==r.cache?yo(r.get,e):Ir(r.get,e):vo,r.set?Ir(r.set,e):vo),Object.defineProperty(e,n,o)}}function yo(e,t){var n=new no(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Yr.target&&n.depend(),n.value}}var go={nativeComponentMap:{text:!0,image:!0,container:!0,slider:{type:"slider",append:"tree"},cell:{type:"cell",append:"tree"}}},_o=go.nativeComponentMap,bo={attr:"setAttr",style:"setStyle",event:"addEvent"};function wo(e,t,n){var r,o,i,a,s,c;Oo(e,t,n.id,e),r=e,o=t,i=n.attr,xo(r,o,"attr",i),function(e,t,n){if("function"!=typeof n&&!Array.isArray(n))return;if(Array.isArray(n)&&!n.length)return t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=$o(e,n,function(e){Co(t,r,e)});Co(t,r,o)}else Co(t,r,n)}(e,t,n.classList),a=e,s=t,c=n.style,xo(a,s,"style",c),function(e,t,n){if(!n)return;var r=Object.keys(n),o=r.length;for(;o--;){var i=r[o],a=n[i];"string"==typeof a&&((a=e[a])||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),s=e,c=i,l=a,t.addEvent(c,Ir(l,s))}var s,c,l}(e,t,n.events)}function ko(e,t,n,r){void 0===r&&(r={}),function(e,t,n){var r=t._options&&t._options.style||{};if(!n._rootEl)return;var o="@originalRootEl";function i(e,t){"array"===Lr(e)&&e.unshift(t)}if(r[o]=n._rootEl.classStyle,"function"==typeof e){var a=$o(t,e,function(e){i(e,o),Co(n._rootEl,r,e)});i(a,o),Co(n._rootEl,r,a)}else null!=e&&(i(e,o),Co(n._rootEl,r,e))}(n.classList,e,t),function(r,o,i){var e=function(t){var e=r[t];if("function"==typeof e){var n=$o(o,e,function(e){i._rootEl&&i._rootEl.setStyle(t,e)});i._rootEl.setStyle(t,n)}else i._rootEl&&i._rootEl.setStyle(t,e)};for(var t in r)e(t)}(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function So(r,o,i,a){if(r){var e=function(t){if(!o||o[t]){var e=r[t];if("function"==typeof e){var n=$o(i,e,function(e){a[t]=e});a[t]=n}else a[t]=e}};for(var t in r)e(t)}}function Oo(t,e,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return e||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;((n=i.call(t))||0===n)&&(t._ids[n]=o),$o(t,i,function(e){e&&(t._ids[e]=o)})}else n&&"string"==typeof n&&(t._ids[n]=o)}function Co(e,n,r){"string"==typeof r&&(r=r.split(/\s+/)),r.forEach(function(e,t){r.splice.apply(r,[t,1].concat(e.split(/\s+/)))});for(var o={},t=r.length,i=function(e){var t=n[r[e]];t&&Object.keys(t).forEach(function(e){o[e]=t[e]})},a=0;a<t;a++)i(a);e.setClassStyle(o)}function xo(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?Eo(e,t,n,a,s):t[bo[n]](a,s)}}function Eo(r,o,e,i,t){var a=bo[e],n=$o(r,t,function(e){function t(){o[a](i,e)}var n=r&&r._app&&r._app.differ;n?n.append("element",o.depth||0,o.ref,t):t()});o[a](i,n)}function $o(e,t,n){return e._static?t.call(e,e):new no(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)}).value}function Ao(e,t){var n=e._app.doc.createComment("start"),r=e._app.doc.createComment("end"),o=jo++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}var jo=1;function Io(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=Mo(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function Mo(e,t,n){return t.element?function(e,t){var n=t.parentNode;if(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,-1!==r}),r}}(t,n):function(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}(t,n)}function To(e,t,n){void 0===n&&(n=!1),t.element?function(e,t){void 0===t&&(t=!1);var n=[],r=e.start.nextSibling;for(;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||Po(e.start);n.forEach(function(e){Po(e)}),t||Po(e.end)}(t,n):Po(t),t._vm&&t._vm.$emit("hook:destroyed")}function Po(e){var t=e.parentNode;t&&t.removeChild(e)}function Fo(e,t,n,r){if(-1!==(e._app||{}).lastSignal){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),c=t,Array.isArray(c))return i=t,a=r,s=Ao(o=e,n),void i.forEach(function(e){Fo(o,e,s,a)});var o,i,a,s,c,l,u,f;if(r=r||{},"content"===(l=t).type||"slot"===l.type)return console.debug('[JS Framework] compile "content" block by',t),void(e._content=Ao(e,n));if(u=t,!r.hasOwnProperty("repeat")&&u.repeat)return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):function(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",c=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,l=Ao(e,n);l.children=[],l.data=[],l.vms=[],function(c,i,l,e){var u=l.vms,f=l.children,t=e.getter,p=e.trackBy,d=e.oldStyle,h=e.key,v=e.value;function m(e,t,n){var r;d?Mr(r=e)?(r[h]=t,r.hasOwnProperty("INDEX")||Object.defineProperty(r,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),(r={})[h]=t,r[v]=e):((r={})[h]=t,r[v]=e);var o=function(e,t){var n=Object.create(e);n._data=t,ho(n),mo(n),(n._realParent=e)._static&&(n._static=e._static);return n}(n,r);u.push(o),Fo(o,i,l,{repeat:e})}var n=Ro(c,l,t,"repeat",function(e){if(console.debug('[JS Framework] the "repeat" item has changed',e),l&&e){var r=f.slice(),o=u.slice(),t=l.data.slice(),i={},a={};e.forEach(function(e,t){var n=p?e[p]:d?e[h]:t;null!=n&&""!==n&&(i[n]=e)});var s=[];t.forEach(function(e,t){var n=p?e[p]:d?e[h]:t;i.hasOwnProperty(n)?(a[n]={item:e,index:t,key:n,target:r[t],vm:o[t]},s.push(e)):To(0,r[t])}),f.length=0,u.length=0,l.data=e.slice(),l.updateMark=l.start,e.forEach(function(e,t){var n=p?e[p]:d?e[h]:t,r=a[n];r?(r.item===s[0]?s.shift():(s.$remove(r.item),Mo(0,r.target,l.updateMark)),f.push(r.target),u.push(r.vm),d?r.vm=e:r.vm[v]=e,r.vm[h]=t,l.updateMark=r.target):m(e,t,c)}),delete l.updateMark}});l.data=n.slice(0),n.forEach(function(e,t){m(e,t,c)})}(e,t,l,{getter:i,key:a,value:s,trackBy:c,oldStyle:o})}(e,t,n));if(f=t,!r.hasOwnProperty("shown")&&f.shown)return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):function(e,t,n,r){var o={shown:!0},i=Ao(e,n);n.element&&n.children&&n.children.push(i);r.repeat&&(o.repeat=r.repeat);a=e,s=t,c=i,l=o,u=Ro(a,c,s.shown,"shown",function(e){console.debug('[JS Framework] the "if" item was changed',e),c&&!!c.display!=!!e&&(c.display=!!e,e?Fo(a,s,c,l):To(0,c,!0))}),c.display=!!u,u&&Fo(a,s,c,l);var a,s,c,l,u}(e,t,n,r));var p=r.type||t.type;if(d=r,"function"!=typeof p||d.hasOwnProperty("type")){var d,h,v,m,y,g,_,b,w=p,k=function(e,t,n){var r;e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]);e._options&&e._options.components&&(r=e._options.components[n]);t.component&&(r=r||{});return r}(e,t,w);if(k)return console.debug("[JS Framework] compile composed component by",t),v=k,m=t,y=n,g=w,_=r,b=new(h=e).constructor(g,v,h,y,void 0,{"hook:init":function(){h._static&&(this._static=h._static),Oo(h,null,m.id,this),this._externalBinding={parent:h,template:m}},"hook:created":function(){!function(e,t,n,r){n=n||{};var o=((t=t||{})._options||{}).props;Array.isArray(o)&&(o=o.reduce(function(e,t){return e[t]=!0,e},{})),So(r,o,e,t),So(n.attr,o,e,t)}(h,this,m,_.repeat)},"hook:ready":function(){this._content&&No(h,m,this._content)}}),void ko(h,b,m,y);console.debug("[JS Framework] compile native component by",t),function(e,t,n,r){var o;(function(e){var t=e.type,n=_o[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Lr(e[r])&&"object"===Lr(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])})(t),o="_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),a=r,e._app.doc.createBody(a)):(console.debug("[JS Framework] compile to create element for "+r),i=r,e._app.doc.createElement(i));var i;var a;if(!e._rootEl){e._rootEl=o;var s=e._externalBinding||{},c=s.template,l=s.parent;if(c&&c.events&&l&&o)for(var u in c.events){var f=l[c.events[u]];f&&o.addEvent(u,Ir(f,l))}}wo(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append);t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var p="tree"===t.append,d=e._app||{};-1===d.lastSignal||p||(console.debug("[JS Framework] compile to append single node for",o),d.lastSignal=Io(e,o,n));-1!==d.lastSignal&&No(e,t,o);-1!==d.lastSignal&&p&&(console.debug("[JS Framework] compile to append whole tree for",o),d.lastSignal=Io(e,o,n))}(e,t,n,w)}else!function(n,r,e,t,o){var i=xr({type:t.call(n)},o),a=Ao(n,e);e.element&&e.children&&e.children.push(a);$o(n,t,function(e){var t=xr({type:e},o);To(0,a,!0),Fo(n,r,a,t)}),Fo(n,r,a,i)}(e,t,n,p,r)}}function No(t,e,n){var r=t._app||{},o=e.children;o&&o.length&&o.every(function(e){return Fo(t,e,n),-1!==r.lastSignal})}function Ro(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return $o(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestValue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function Do(e,t){if(t instanceof Do)return t;this.timestamp=Date.now(),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function Vo(e,t){var n=this,r=this._vmEvents[e];if(r){var o=new Do(e,t);r.forEach(function(e){e.call(n,o)})}}function Lo(e,t){var n=new Do(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Jo(t,e){var n=new Do(t,e);this.$emit(t,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(e){e.$broadcast(t,n)})}function Wo(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function qo(e,t){if(e){var n=this._vmEvents;if(t){var r=n[e];r&&r.$remove(t)}else delete n[e]}}var Bo,Uo=["init","created","ready","destroyed"];function zo(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app||{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]);var a,s,c,l,u=(t=t||{}).data||{};(this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,function(t,e){var n=t._options||{},r=n.events||{};for(var o in r)t.$on(o,r[o]);for(var i in e)t.$on(i,e[i]);Uo.forEach(function(e){t.$on("hook:"+e,n[e])})}(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof u?u():u,o&&xr(this._data,o),(a=this)._watchers=[],ho(a),mo(a),function(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}(a),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call(this)),this._app.doc)&&(this._parentEl=r||this._app.doc.documentElement,c=(s=this)._options||{},l=c.template||{},c.replace?l.children&&1===l.children.length?Fo(s,l.children[0],s._parentEl):Fo(s,l.children,s._parentEl):Fo(s,l,s._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+s._type+")"),s.$emit("hook:ready"),s._ready=!0)}(Bo=zo.prototype).$emit=Vo,Bo.$dispatch=Lo,Bo.$broadcast=Jo,Bo.$on=Wo,Bo.$off=qo,zo.prototype.$watch=function(e,t){$o(this,e,t)},zo.set=function e(t,n,r){if(Array.isArray(t))return t.splice(n,1,r);if(jr(t,n))t[n]=r;else if(t._isVue)e(t._data,n,r);else{var o=t.__ob__;if(o){if(o.convert(n,r),o.dep.notify(),o.vms)for(var i=o.vms.length;i--;)po(o.vms[i],n);return r}t[n]=r}},zo.delete=function(e,t){if(jr(e,t)){delete e[t];var n=e.__ob__;if(n){if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;)o=n.vms[r],Nr(i=t)||delete o[i]}else e._isVue&&delete e._data[t]}var o,i};var Ho={};function Go(n,r){var e=function(e){var t=Ho[e];t||(t={},Ho[e]=t),Array.isArray(n[e])&&n[e].forEach(function(e){"string"==typeof e&&(e={name:e}),t[e.name]&&!r||(t[e.name]=e)})};for(var t in n)e(t)}function Xo(e,t){return e.customComponentMap[t]}function Ko(e,t,n){var r=e.customComponentMap;r[t]?console.error("[JS Framework] define a component("+t+") that already exists"):r[t]=n}var Zo=n(function(e,r){var f;r=e.exports=H,"object"==typeof process&&process.env,f=function(){},r.SEMVER_SPEC_VERSION="2.0.0";var o=256,i=Number.MAX_SAFE_INTEGER||9007199254740991,c=r.re=[],t=r.src=[],n=0,a=n++;t[a]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var l=n++;t[l]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var u=n++;t[u]="("+t[a]+")\\.("+t[a]+")\\.("+t[a]+")";var p=n++;t[p]="("+t[s]+")\\.("+t[s]+")\\.("+t[s]+")";var d=n++;t[d]="(?:"+t[a]+"|"+t[l]+")";var h=n++;t[h]="(?:"+t[s]+"|"+t[l]+")";var v=n++;t[v]="(?:-("+t[d]+"(?:\\."+t[d]+")*))";var m=n++;t[m]="(?:-?("+t[h]+"(?:\\."+t[h]+")*))";var y=n++;t[y]="[0-9A-Za-z-]+";var g=n++;t[g]="(?:\\+("+t[y]+"(?:\\."+t[y]+")*))";var _=n++,b="v?"+t[u]+t[v]+"?"+t[g]+"?";t[_]="^"+b+"$";var w="[v=\\s]*"+t[p]+t[m]+"?"+t[g]+"?",k=n++;t[k]="^"+w+"$";var S=n++;t[S]="((?:<|>)?=?)";var O=n++;t[O]=t[s]+"|x|X|\\*";var C=n++;t[C]=t[a]+"|x|X|\\*";var x=n++;t[x]="[v=\\s]*("+t[C]+")(?:\\.("+t[C]+")(?:\\.("+t[C]+")(?:"+t[v]+")?"+t[g]+"?)?)?";var E=n++;t[E]="[v=\\s]*("+t[O]+")(?:\\.("+t[O]+")(?:\\.("+t[O]+")(?:"+t[m]+")?"+t[g]+"?)?)?";var $=n++;t[$]="^"+t[S]+"\\s*"+t[x]+"$";var A=n++;t[A]="^"+t[S]+"\\s*"+t[E]+"$";var j=n++;t[j]="(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";var I=n++;t[I]="(?:~>?)";var M=n++;t[M]="(\\s*)"+t[I]+"\\s+",c[M]=new RegExp(t[M],"g");var T=n++;t[T]="^"+t[I]+t[x]+"$";var P=n++;t[P]="^"+t[I]+t[E]+"$";var F=n++;t[F]="(?:\\^)";var N=n++;t[N]="(\\s*)"+t[F]+"\\s+",c[N]=new RegExp(t[N],"g");var R=n++;t[R]="^"+t[F]+t[x]+"$";var D=n++;t[D]="^"+t[F]+t[E]+"$";var V=n++;t[V]="^"+t[S]+"\\s*("+w+")$|^$";var L=n++;t[L]="^"+t[S]+"\\s*("+b+")$|^$";var J=n++;t[J]="(\\s*)"+t[S]+"\\s*("+w+"|"+t[x]+")",c[J]=new RegExp(t[J],"g");var W=n++;t[W]="^\\s*("+t[x]+")\\s+-\\s+("+t[x]+")\\s*$";var q=n++;t[q]="^\\s*("+t[E]+")\\s+-\\s+("+t[E]+")\\s*$";var B=n++;t[B]="(<|>)?=?\\s*\\*";for(var U=0;U<35;U++)f(U,t[U]),c[U]||(c[U]=new RegExp(t[U]));function z(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof H)return e;if("string"!=typeof e)return null;if(e.length>o)return null;if(!(t.loose?c[k]:c[_]).test(e))return null;try{return new H(e,t)}catch(e){return null}}function H(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof H){if(e.loose===t.loose)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>o)throw new TypeError("version is longer than "+o+" characters");if(!(this instanceof H))return new H(e,t);f("SemVer",e,t),this.options=t,this.loose=!!t.loose;var n=e.trim().match(t.loose?c[k]:c[_]);if(!n)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>i||this.major<0)throw new TypeError("Invalid major version");if(this.minor>i||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>i||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(0<=t&&t<i)return t}return e}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}r.parse=z,r.valid=function(e,t){var n=z(e,t);return n?n.version:null},r.clean=function(e,t){var n=z(e.trim().replace(/^[=v]+/,""),t);return n?n.version:null},(r.SemVer=H).prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},H.prototype.toString=function(){return this.version},H.prototype.compare=function(e){return f("SemVer.compare",this.version,this.options,e),e instanceof H||(e=new H(e,this.options)),this.compareMain(e)||this.comparePre(e)},H.prototype.compareMain=function(e){return e instanceof H||(e=new H(e,this.options)),X(this.major,e.major)||X(this.minor,e.minor)||X(this.patch,e.patch)},H.prototype.comparePre=function(e){if(e instanceof H||(e=new H(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var n=this.prerelease[t],r=e.prerelease[t];if(f("prerelease compare",t,n,r),void 0===n&&void 0===r)return 0;if(void 0===r)return 1;if(void 0===n)return-1;if(n!==r)return X(n,r)}while(++t)},H.prototype.inc=function(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var n=this.prerelease.length;0<=--n;)"number"==typeof this.prerelease[n]&&(this.prerelease[n]++,n=-2);-1===n&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},r.inc=function(e,t,n,r){"string"==typeof n&&(r=n,n=void 0);try{return new H(e,n).inc(t,r).version}catch(e){return null}},r.diff=function(e,t){{if(Q(e,t))return null;var n=z(e),r=z(t);if(n.prerelease.length||r.prerelease.length){for(var o in n)if(("major"===o||"minor"===o||"patch"===o)&&n[o]!==r[o])return"pre"+o;return"prerelease"}for(var o in n)if(("major"===o||"minor"===o||"patch"===o)&&n[o]!==r[o])return o}},r.compareIdentifiers=X;var G=/^[0-9]+$/;function X(e,t){var n=G.test(e),r=G.test(t);return n&&r&&(e=+e,t=+t),n&&!r?-1:r&&!n?1:e<t?-1:t<e?1:0}function K(e,t,n){return new H(e,n).compare(new H(t,n))}function Z(e,t,n){return 0<K(e,t,n)}function Y(e,t,n){return K(e,t,n)<0}function Q(e,t,n){return 0===K(e,t,n)}function ee(e,t,n){return 0!==K(e,t,n)}function te(e,t,n){return 0<=K(e,t,n)}function ne(e,t,n){return K(e,t,n)<=0}function re(e,t,n,r){var o;switch(t){case"===":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e===n;break;case"!==":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e!==n;break;case"":case"=":case"==":o=Q(e,n,r);break;case"!=":o=ee(e,n,r);break;case">":o=Z(e,n,r);break;case">=":o=te(e,n,r);break;case"<":o=Y(e,n,r);break;case"<=":o=ne(e,n,r);break;default:throw new TypeError("Invalid operator: "+t)}return o}function oe(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof oe){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof oe))return new oe(e,t);f("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===ie?this.value="":this.value=this.operator+this.semver.version,f("comp",this)}r.rcompareIdentifiers=function(e,t){return X(t,e)},r.major=function(e,t){return new H(e,t).major},r.minor=function(e,t){return new H(e,t).minor},r.patch=function(e,t){return new H(e,t).patch},r.compare=K,r.compareLoose=function(e,t){return K(e,t,!0)},r.rcompare=function(e,t,n){return K(t,e,n)},r.sort=function(e,n){return e.sort(function(e,t){return r.compare(e,t,n)})},r.rsort=function(e,n){return e.sort(function(e,t){return r.rcompare(e,t,n)})},r.gt=Z,r.lt=Y,r.eq=Q,r.neq=ee,r.gte=te,r.lte=ne,r.cmp=re,r.Comparator=oe;var ie={};function ae(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof ae)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new ae(e.raw,t);if(e instanceof oe)return new ae(e.value,t);if(!(this instanceof ae))return new ae(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function se(e){return!e||"x"===e.toLowerCase()||"*"===e}function ce(e,t,n,r,o,i,a,s,c,l,u,f,p){return((t=se(n)?"":se(r)?">="+n+".0.0":se(o)?">="+n+"."+r+".0":">="+t)+" "+(s=se(c)?"":se(l)?"<"+(+c+1)+".0.0":se(u)?"<"+c+"."+(+l+1)+".0":f?"<="+c+"."+l+"."+u+"-"+f:"<="+s)).trim()}function le(e,t,n){for(var r=0;r<e.length;r++)if(!e[r].test(t))return!1;if(n||(n={}),!t.prerelease.length||n.includePrerelease)return!0;for(r=0;r<e.length;r++)if(f(e[r].semver),e[r].semver!==ie&&0<e[r].semver.prerelease.length){var o=e[r].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}function ue(e,t,n){try{t=new ae(t,n)}catch(e){return!1}return t.test(e)}function fe(e,t,n,r){var o,i,a,s,c;switch(e=new H(e,r),t=new ae(t,r),n){case">":o=Z,i=ne,a=Y,s=">",c=">=";break;case"<":o=Y,i=te,a=Z,s="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ue(e,t,r))return!1;for(var l=0;l<t.set.length;++l){var u=t.set[l],f=null,p=null;if(u.forEach(function(e){e.semver===ie&&(e=new oe(">=0.0.0")),f=f||e,p=p||e,o(e.semver,f.semver,r)?f=e:a(e.semver,p.semver,r)&&(p=e)}),f.operator===s||f.operator===c)return!1;if((!p.operator||p.operator===s)&&i(e,p.semver))return!1;if(p.operator===c&&a(e,p.semver))return!1}return!0}oe.prototype.parse=function(e){var t=this.options.loose?c[V]:c[L],n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1],"="===this.operator&&(this.operator=""),n[2]?this.semver=new H(n[2],this.options.loose):this.semver=ie},oe.prototype.toString=function(){return this.value},oe.prototype.test=function(e){return f("Comparator.test",e,this.options.loose),this.semver===ie||("string"==typeof e&&(e=new H(e,this.options)),re(e,this.operator,this.semver,this.options))},oe.prototype.intersects=function(e,t){if(!(e instanceof oe))throw new TypeError("a Comparator is required");var n;if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return n=new ae(e.value,t),ue(this.value,n,t);if(""===e.operator)return n=new ae(this.value,t),ue(e.semver,n,t);var r=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),o=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),i=this.semver.version===e.semver.version,a=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),s=re(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),c=re(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return r||o||i&&a||s||c},(r.Range=ae).prototype.format=function(){return this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim(),this.range},ae.prototype.toString=function(){return this.range},ae.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var n=t?c[q]:c[W];e=e.replace(n,ce),f("hyphen replace",e),e=e.replace(c[J],"$1$2$3"),f("comparator trim",e,c[J]),e=(e=(e=e.replace(c[M],"$1~")).replace(c[N],"$1^")).split(/\s+/).join(" ");var r=t?c[V]:c[L],o=e.split(" ").map(function(e){return t=e,n=this.options,f("comp",t,n),s=n,t=t.trim().split(/\s+/).map(function(e){return function(a,e){f("caret",a,e),e&&"object"==typeof e||(e={loose:!!e,includePrerelease:!1});var t=e.loose?c[D]:c[R];return a.replace(t,function(e,t,n,r,o){var i;return f("caret",a,e,t,n,r,o),i=se(t)?"":se(n)?">="+t+".0.0 <"+(+t+1)+".0.0":se(r)?"0"===t?">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0":">="+t+"."+n+".0 <"+(+t+1)+".0.0":o?(f("replaceCaret pr",o),"-"!==o.charAt(0)&&(o="-"+o),"0"===t?"0"===n?">="+t+"."+n+"."+r+o+" <"+t+"."+n+"."+(+r+1):">="+t+"."+n+"."+r+o+" <"+t+"."+(+n+1)+".0":">="+t+"."+n+"."+r+o+" <"+(+t+1)+".0.0"):(f("no pr"),"0"===t?"0"===n?">="+t+"."+n+"."+r+" <"+t+"."+n+"."+(+r+1):">="+t+"."+n+"."+r+" <"+t+"."+(+n+1)+".0":">="+t+"."+n+"."+r+" <"+(+t+1)+".0.0"),f("caret return",i),i})}(e,s)}).join(" "),f("caret",t),a=n,t=t.trim().split(/\s+/).map(function(e){return function(a,e){e&&"object"==typeof e||(e={loose:!!e,includePrerelease:!1});var t=e.loose?c[P]:c[T];return a.replace(t,function(e,t,n,r,o){var i;return f("tilde",a,e,t,n,r,o),i=se(t)?"":se(n)?">="+t+".0.0 <"+(+t+1)+".0.0":se(r)?">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0":o?(f("replaceTilde pr",o),"-"!==o.charAt(0)&&(o="-"+o),">="+t+"."+n+"."+r+o+" <"+t+"."+(+n+1)+".0"):">="+t+"."+n+"."+r+" <"+t+"."+(+n+1)+".0",f("tilde return",i),i})}(e,a)}).join(" "),f("tildes",t),f("replaceXRanges",o=t,i=n),t=o.split(/\s+/).map(function(e){return function(u,e){u=u.trim(),e&&"object"==typeof e||(e={loose:!!e,includePrerelease:!1});var t=e.loose?c[A]:c[$];return u.replace(t,function(e,t,n,r,o,i){f("xRange",u,e,t,n,r,o,i);var a=se(n),s=a||se(r),c=s||se(o),l=c;return"="===t&&l&&(t=""),a?e=">"===t||"<"===t?"<0.0.0":"*":t&&l?(s&&(r=0),c&&(o=0),">"===t?(t=">=",s?(n=+n+1,o=r=0):c&&(r=+r+1,o=0)):"<="===t&&(t="<",s?n=+n+1:r=+r+1),e=t+n+"."+r+"."+o):s?e=">="+n+".0.0 <"+(+n+1)+".0.0":c&&(e=">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0"),f("xRange return",e),e})}(e,i)}).join(" "),f("xrange",t),f("replaceStars",r=t,n),t=r.trim().replace(c[B],""),f("stars",t),t;var t,n,r,o,i,a,s},this).join(" ").split(/\s+/);return this.options.loose&&(o=o.filter(function(e){return!!e.match(r)})),o=o.map(function(e){return new oe(e,this.options)},this)},ae.prototype.intersects=function(n,r){if(!(n instanceof ae))throw new TypeError("a Range is required");return this.set.some(function(e){return e.every(function(t){return n.set.some(function(e){return e.every(function(e){return t.intersects(e,r)})})})})},r.toComparators=function(e,t){return new ae(e,t).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})},ae.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new H(e,this.options));for(var t=0;t<this.set.length;t++)if(le(this.set[t],e,this.options))return!0;return!1},r.satisfies=ue,r.maxSatisfying=function(e,t,n){var r=null,o=null;try{var i=new ae(t,n)}catch(e){return null}return e.forEach(function(e){i.test(e)&&(r&&-1!==o.compare(e)||(o=new H(r=e,n)))}),r},r.minSatisfying=function(e,t,n){var r=null,o=null;try{var i=new ae(t,n)}catch(e){return null}return e.forEach(function(e){i.test(e)&&(r&&1!==o.compare(e)||(o=new H(r=e,n)))}),r},r.validRange=function(e,t){try{return new ae(e,t).range||"*"}catch(e){return null}},r.ltr=function(e,t,n){return fe(e,t,"<",n)},r.gtr=function(e,t,n){return fe(e,t,">",n)},r.outside=fe,r.prerelease=function(e,t){var n=z(e,t);return n&&n.prerelease.length?n.prerelease:null},r.intersects=function(e,t,n){return e=new ae(e,n),t=new ae(t,n),e.intersects(t)},r.coerce=function(e){if(e instanceof H)return e;if("string"!=typeof e)return null;var t=e.match(c[j]);return null!=t?z((t[1]||"0")+"."+(t[2]||"0")+"."+(t[3]||"0")):null}});Zo.SEMVER_SPEC_VERSION,Zo.re,Zo.src,Zo.parse,Zo.valid,Zo.clean,Zo.SemVer,Zo.inc,Zo.diff,Zo.compareIdentifiers,Zo.rcompareIdentifiers,Zo.major,Zo.minor,Zo.patch,Zo.compare,Zo.compareLoose,Zo.rcompare,Zo.sort,Zo.rsort,Zo.gt,Zo.lt,Zo.eq,Zo.neq,Zo.gte,Zo.lte,Zo.cmp,Zo.Comparator,Zo.Range,Zo.toComparators,Zo.satisfies,Zo.maxSatisfying,Zo.minSatisfying,Zo.validRange,Zo.ltr,Zo.gtr,Zo.outside,Zo.prerelease,Zo.intersects,Zo.coerce;function Yo(e){if(Zo.valid(e))return e;for(var t=(e="string"==typeof e?e:"").split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function Qo(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return r.errorMessage="Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n,0<=o.indexOf("osversion")?r.code=1001:0<=o.indexOf("appversion")?r.code=1002:0<=o.indexOf("weexversion")?r.code=1003:0<=o.indexOf("devicemodel")&&(r.code=1004),r}function ei(e,t,n,r){var o;if(console.debug("[JS Framework] bootstrap for "+t),Ur(t))o=Xr(t);else{if(!Gr(t))return new Error("Wrong component name: "+t);if(!Xo(e,o=Kr(t)))return new Error("It's not a component: "+t)}if("string"==typeof(n=Fr(n)?n:{}).transformerVersion&&"string"==typeof global.transformerVersion&&!Zo.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=function(e,t){t=Fr(t=t||global.WXEnvironment)?t:{};var n={isDowngrade:!1};if("function"===Lr(e)){var r=e.call(this,t,{semver:Zo,normalizeVersion:Yo});n=(r=!!r)?Qo("custom","","custom params"):n}else{var o=(e=Fr(e)?e:{})[(t.platform||"unknow").toLowerCase()]||{};for(var i in t){var a=i,s=a.toLowerCase(),c=t[i],l=0<=s.indexOf("version"),u=0<=s.indexOf("devicemodel"),f=o[i];if(f&&l){var p=Yo(f),d=Yo(t[i]);if(Zo.satisfies(d,p)){n=Qo(a,c,f);break}}else if(u&&0<=("array"===Lr(f)?f:[f]).indexOf(c)){n=Qo(a,c,f);break}}}return n}(n.downgrade);if(i.isDowngrade)return e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage);n.viewport&&function(e,t){if(void 0===t&&(t={}),e&&e.callTasks)e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}(e,n.viewport),e.vm=new zo(o,null,{_app:e},null,r)}var ti=function(o,e){for(var t,n,r,i=[],a=arguments.length-2;0<a--;)i[a]=arguments[a+2];if(console.debug("[JS Framework] define a component "+e),"function"==typeof(r=1<i.length?i[1]:i[0])&&(n=r,r=null),n){var s={exports:{}};n(function(e){if(Ur(e)){var t=Xr(e);return Xo(o,t)}if(zr(e)){var n=Xr(e);return o.requireModule(n)}if(Hr(e)||Gr(e)){var r=Kr(e);return o.commonModules[r]}},s.exports,s),r=s.exports}if(Ur(e)){var c=Xr(e);Ko(o,c,r)}else if(zr(e)){Go(((t={})[Xr(e)]=r,t))}else if(Hr(e)){var l=Kr(e);o.commonModules[l]=r}else if(Gr(e)){var u=Kr(e);r.template||r.style||r.methods?Ko(o,u,r):o.commonModules[u]=r}};function ni(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&function e(t){delete t._app;delete t._computed;delete t._css;delete t._data;delete t._ids;delete t._methods;delete t._options;delete t._parent;delete t._parentEl;delete t._rootEl;if(t._watchers){for(var n=t._watchers.length;n--;)t._watchers[n].teardown();delete t._watchers}if(t._childrenVms){for(var r=t._childrenVms.length;r--;)e(t._childrenVms[r]);delete t._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+t._type+")");t.$emit("hook:destroyed");delete t._type;delete t._vmEvents}(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.taskCenter.destroyCallback(),e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null}function ri(e){e.differ.flush()}function oi(r,e,o,t){var i;console.debug("[JS Framework] Intialize an instance with:\n",o);var n,a=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return ti.apply(void 0,[r].concat(e))},s=function(e,t,n){i=ei(r,e,t,n||o),ri(r),r.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+r.id+")")},c=zo,l=r.doc,u=function(e){return r.requireModule(Xr(e))},f={config:r.options,define:a,bootstrap:s,requireModule:u,document:l,Vm:c};Object.freeze(f),"function"==typeof e?n=e.toString().substr(12):e&&(n=e.toString()),n='(function(global){\n\n"use strict";\n\n '+n+" \n\n})(Object.create(this))";var p=global.WXEnvironment,d={};if(p&&"Web"!==p.platform){var h=r.requireModule("timer");Object.assign(d,{setTimeout:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return h.setTimeout(function(){e[0].apply(e,e.slice(2))},e[1]),r.doc.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return h.setInterval(function(){e[0].apply(e,e.slice(2))},e[1]),r.doc.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){h.clearTimeout(e)},clearInterval:function(e){h.clearInterval(e)}})}var v=Object.assign({define:a,require:function(t){return function(e){i=ei(r,t,{},e)}},bootstrap:s,register:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return function(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),Ko(e,t,n)}.apply(void 0,[r].concat(e))},render:function(e,t){i=ei(r,e,{},t)},__weex_define__:a,__weex_bootstrap__:s,__weex_document__:l,__weex_require__:u,__weex_viewmodel__:c,weex:f},d,t);return function(e,t){if("function"!=typeof compileAndRunBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var c=0;c<i.length-1;++c)o+=i[c],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var l=e.weex||{},u=l.config||{};(n=compileAndRunBundle(o,u.bundleUrl,u.bundleDigest,u.codeCachePath))&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}(v,n)||function(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}(v,n),i}var ii=function(e){this.id=e,this.map=[],this.hooks=[]};function ai(e,t){var n=e[t];for(var r in n)n[r]()}function si(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new go.Document(e,this.options.bundleUrl,null,go.Listener),this.differ=new ii(e)}ii.prototype.isEmpty=function(){return 0===this.map.length},ii.prototype.append=function(e,t,n,r){var o=this;void 0===t&&(t=0),this.hasTimer||(this.hasTimer=!0,setTimeout(function(){o.hasTimer=!1,o.flush(!0)},0));var i=this.map;i[t]||(i[t]={});var a=i[t];a[e]||(a[e]={}),"element"===e?(a[e][n]||(a[e][n]=[]),a[e][n].push(r)):a[e][n]=r},ii.prototype.flush=function(e){var t=this.map.slice();this.map.length=0,t.forEach(function(e){ai(e,"repeat"),ai(e,"shown"),function(e,t){var n=e[t];for(var r in n){var o=n[r];o.forEach(function(e){e()})}}(e,"element")});var n=this.hooks.slice();this.hooks.length=0,n.forEach(function(e){e()}),this.isEmpty()||this.flush()},ii.prototype.then=function(e){this.hooks.push(e)},si.prototype.requireModule=function(e){return function(r,o){var e=Ho[o],t={},n=function(n){Object.defineProperty(t,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return r.callTasks({module:o,method:n,args:e})}},set:function(e){if("function"==typeof e)return r.callTasks({module:o,method:n,args:[e]})}})};for(var i in e)n(i);return t}(this,e)},si.prototype.updateActions=function(){return ri(this)},si.prototype.callTasks=function(e){return t=this,"array"!==Lr(n=e)&&(n=[n]),n.forEach(function(e){r=t.doc.taskCenter.send("module",{module:e.module,method:e.method},e.args)}),r;var t,n,r},Object.freeze(si),Object.freeze(si.prototype);var ci={};var li=go.nativeComponentMap;function ui(e){"object"==typeof e&&function(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}(zo,e)}global.registerMethods=ui;var fi={fireEvent:function(e){for(var t=[],n=arguments.length-1;0<n--;)t[n]=arguments[n+1];return function t(n,e,r,o,i){if(console.debug('[JS Framework] Fire a "'+r+'" event on an element('+e+") in instance("+n.id+")"),!Array.isArray(e)){var a=n.doc.getRef(e);if(a){var s=n.doc.fireEvent(a,r,o,i);return n.differ.flush(),n.doc.taskCenter.send("dom",{action:"updateFinish"},[]),s}return new Error('invalid element reference "'+e+'"')}e.some(function(e){return!1!==t(n,e,r,o)})}.apply(void 0,[ci[e]].concat(t))},callback:function(e){for(var t=[],n=arguments.length-1;0<n--;)t[n]=arguments[n+1];return function(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.doc.taskCenter.callback(t,n,r);return ri(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}.apply(void 0,[ci[e]].concat(t))}};ui(Cr),Object.freeze(zo);var pi=Object.freeze({registerComponents:function(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?li[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(li[e.type]=e))})},registerModules:function(e){"object"==typeof e&&Go(e)},registerMethods:ui,createInstance:function(e,t,n,r,o){var i=(o||{}).services;eo();var a,s=ci[e];return n=n||{},(a=s?new Error('invalid instance id "'+e+'"'):(s=new si(e,n),oi(ci[e]=s,t,r,i)))instanceof Error?a:s},init:function(e){go.Document=e.Document,go.Element=e.Element,go.Comment=e.Comment,go.sendTasks=e.sendTasks,go.Listener=e.Listener},refreshInstance:function(e,t){var n=ci[e];return n?function(e,t){console.debug("[JS Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):xr(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}(n,t):new Error('invalid instance id "'+e+'"')},destroyInstance:function(e){"function"==typeof markupState&&markupState(),eo();var t=ci[e];if(!t)return new Error('invalid instance id "'+e+'"');ni(t),delete ci[e];var n=Math.round(e);return 0<n&&(n%18||"function"!=typeof notifyTrimMemory||notifyTrimMemory()),ci},receiveTasks:function(r,e){if(ci[r]&&Array.isArray(e)){var o=[];return e.forEach(function(e){var t=fi[e.method],n=[].concat(e.args);"function"==typeof t&&(n.unshift(r),o.push(t.apply(void 0,n)))}),o}return new Error('invalid instance id "'+r+'" or tasks')},getRoot:function(e){var t,n=ci[e];return n?(t=(n.doc||{}).body||{}).toJSON?t.toJSON():{}:new Error('invalid instance id "'+e+'"')}}),di={Vanilla:yr,Vue:Or,Rax:e(n(function(e){e.exports=function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},o.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.getInstance=r,t.init=function(e){c=e.Document,e.Element,e.Comment},t.createInstanceContext=function(e,t,n){var r=l[e],o=t.weex;{if(null!=r)throw new Error('Instance id "'+e+'" existed when create instance');var i=o.config.bundleUrl;i?i.split("//")[0]||(i="https:"+i):(console.error('Error: Must have bundleUrl option when createInstance, downgrade to "about:blank".'),i="about:blank");var a=new c(e,i);r=l[e]={document:a,instanceId:e,bundleUrl:i,__weex_data__:n,uid:0};var s={instanceId:e,bundleUrl:i,document:a,__weex_document__:a,__weex_options__:t,__weex_data__:n||{},callNative:function(){},__weex_config__:t};return s}},t.refreshInstance=function(e,t){var n=r(e).document;n.documentElement.fireEvent("refresh",{timestamp:Date.now(),data:t}),n.taskCenter.send("dom",{action:"refreshFinish"},[])},t.destroyInstance=function(e){var t=r(e),n=(t.bundleCode,t.document);n.documentElement.fireEvent("destory",{timestamp:Date.now()}),n.destroy&&n.destroy();n.taskCenter&&n.taskCenter.destroyCallback&&n.taskCenter.destroyCallback();delete l[e]};var c=void 0,l={};function r(e){var t=l[e];if(!t)throw new Error('Invalid instance id "'+e+'"');return t}t.default=t}])})),Weex:pi};var hi,vi,mi,yi,gi=Object.freeze({$userTrack:function(e,t,n,r){console.error("[Upgrade Warning] $userTrack will be removed in the next version!"),console.error("[JS Framework] Vm#$userTrack is deprecated, please use \"require('@weex-module/userTrack').commit(type, name, comName, param)\" instead"),this._app.requireModule("userTrack").commit(e,t,n,r)},$sendMtop:function(e,t){console.error("[Upgrade Warning] $sendMtop will be removed in the next version!"),console.error("[JS Framework] Vm#$sendMtop is deprecated, please use \"require('@weex-module/stream').sendMtop(params, callback)\" instead"),"undefined"==typeof window?this._app.requireModule("windvane").call({class:"MtopWVPlugin",method:"send",data:e},t):this._app.requireModule("stream").sendMtop(e,t)},$callWindvane:function(e,t){console.error("[Upgrade Warning] $callWindvane will be removed in the next version!"),console.error("[JS Framework] Vm#$callWindvane is deprecated, please use \"require('@weex-module/windvane').call(params, callback)\" instead"),this._app.requireModule("windvane").call(e,t)},$setSpm:function(e,t){console.error("[Upgrade Warning] $setSpm will be removed in the next version!"),console.error("[JS Framework] Vm#$setSpm is deprecated, please use \"require('@weex-module/pageInfo').setSpm(a, b)\" instead"),this._app.requireModule("pageInfo").setSpm(e,t)},$getUserInfo:function(e){console.error("[Upgrade Warning] $getUserInfo will be removed in the next version!"),console.error("[JS Framework] Vm#$getUserInfo is deprecated, please use \"require('@weex-module/user').getUserInfo(callback)\" instead"),this._app.requireModule("user").getUserInfo(e)},$login:function(e){console.error("[Upgrade Warning] $login will be removed in the next version!"),console.error("[JS Framework] Vm#$login is deprecated, please use \"require('@weex-module/user').login(callback)\" instead"),this._app.requireModule("user").login(e)},$logout:function(e){console.error("[Upgrade Warning] $logout will be removed in the next version!"),console.error("[JS Framework] Vm#$logout is deprecated, please use \"require('@weex-module/user').logout(callback)\" instead"),this._app.requireModule("user").logout(e)}}),_i=n(function(e,t){console.log("Start windmill weex-vue-plugin (0.3.2) framework. Build at 2018-09-18 13:06"),e.exports=function(){"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{writable:!0,enumerable:!1,configurable:!0,value:function(e,t){var n=arguments;if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var r=Object(e),o=1;o<arguments.length;o++){var i=n[o];if(null!=i)for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(r[a]=i[a])}return r}});var t,i=(t=1e5,function(){var e=String(t);return t+=1,e});function s(t,n,e){void 0===e&&(e=!0);var r=void 0!==global?global:"undefined"!=typeof self?self:new Function("return this")();try{Object.defineProperty(r,t,{value:n,configurable:!0,enumerable:!0,writable:!e})}catch(e){r[t]=n}}function c(e){return Object.prototype.toString.call(e).slice(8,-1)}function l(e){return"Object"===c(e)}function o(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n]}function f(o,i){var a;return void 0===i&&(i=0),"function"!=typeof setTimeout||"function"!=typeof clearTimeout?(console.warn("[Warn] There is no timer API in the current context."),o):function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];var r=this;clearTimeout(a),a=setTimeout(function(){return o.apply(r,t)},i)}}var n=function(){},u={},a=["Android","iOS"];function r(e,t){return"object"==typeof process&&process&&process.env&&"test"===process.env.PURPOSE?"function"==typeof __test_logger__&&(n=__test_logger__,!0):(u.debugMode,!0)}function p(e,t){r()&&n("log",e)}function d(e,t){r()&&n("debug",e)}function h(e,t){r()&&n("warn",e)}function v(e,t){r()&&n("error",e)}function m(e){if(v(e),"test"!==process.env.PURPOSE)throw new Error(e)}n=function(e,t){var n,r="["+((n=e).charAt(0).toUpperCase()+n.slice(1))+"][wml-r] "+t;return u.isWeex&&-1<a.indexOf(u.platform)?console.log(r):console.error(r)};var y={network:["request","uploadFile"],miniApp:["setAppShareInfo","hideLauncherLoading","setWebViewTop","setWebViewBackgroundImage"],mtop:["request"],storage:["length","setItem","getItem","removeItem"],memoryStorage:["setItem","getItem"],tabBar:["show","hide"],navigator:["push","pop","openMessagePage","reloadPage","getBackStack","popToHome","navigateTo","redirectTo","switchTab"],user:["login","logout","info"],modal:["alert","confirm","toast","showLoading","hideLoading"],navigatorBar:["show","hide","setTitle","setRightItem","setStyle","setDrawer","setActionSheet","hasIndexBadge","scaleIndexBadge","resetIndexBadge","getHeight","openDrawer","isDrawerOpened","closeDrawer","setLeftItem","showMenu","hideMenu","getStatusBarHeight","setNavigationBar"],clipboard:["writeText","readText"],picker:["pick","pickDate","pickTime","chooseCity"],webSocket:["webSocket","send","close","onOpen","onMessage","onClose","onError"],calendar:["addEvent","checkEvent","removeEvent"],connection:["getType","getDownlinkMax","onChange"],screen:["setAlwaysOn","setBrightness","getScreenBrightness"],broadcast:["createChannel","postMessage","onMessage","close"],share:["doShare"],cookie:["read","write","getAllObjects"],audio:["load","play","pause","stop","setVolume","canPlayType"],wopc:["authLogin","checkAuthSession","doAuth","getSessionKey","setSessionKey"],WopcMtopPlugin:["request"],device:["onShake","vibrate"],keyboard:["hideKeyboard"],contact:["choosePhoneContact"],location:["getLocation"],alipay:["tradePay"],userTrack:["commit","commitut","commitEvent","customAdvance","pageAppear","pageDisappear","skipPage","updatePageUtparam","updateNextPageUtparam"],"nuvajs-exec":["exec"],aluWVJSBridge:["userIsLogin","refreshAlipayCookie"],TBDeviceInfo:["getUtdid"],actionSheet:["showActionSheet"],image:["chooseImage","previewImage","compressImage","getImageInfo","saveImage"],media:["startVoice","stopVoice"],audioRecord:["startRecord","stopRecord","cancelRecord"],audioPlayer:["playVoice","pauseVoice","stopVoice"],file:["saveFile","getFileInfo","getFileList","removeFile"],video:["chooseVideo","getVideoInfo"],phone:["makePhoneCall"],compass:["startCompass","stopCompass","onCompassChange"],tbsecurity:["secureToken"]};function g(o,e){var i=e||function(){for(var e,t=arguments,n=[],r=arguments.length;r--;)n[r]=t[r];return(e=o()).$call.apply(e,n)};return function(o){if(!o)return d("Require a universal module proxy."),{call:i};var e=y[o];if(Array.isArray(e)){d('Require the "'+o+'" module.');var t={};return e.forEach(function(r){t[r]=function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];return i.apply(void 0,[o+"."+r].concat(t))}}),t}h('Require unknown module "'+o+"\".It may not exist or haven't been registered.")}}var _="[[WorkerPageReady]]",b="[[RendererPageReady]]",w="[[SendInitialState]]",k="[[ReceivedInitialState]]",S="[[WorkerPageStateChange]]",O="[[RendererPageStateChange]]",C="__WINDMILL_MODULE_GETTER__",e=function(){};e.prototype.$on=function(e,t){return void 0===t&&(t=o),d('$on "'+e+'"'),!e&&m("invalid event name "+e+" for windmill.$on."),t===o&&m("bind event "+e+" with no callback through windmill.$on."),this.bridge.onReceiveMessage({data:{type:e},origin:this.label,type:"Event"},t)},e.prototype.$once=function(e,t){return void 0===t&&(t=o),d('$once "'+e+'"'),!e&&m("invalid event name "+e+" for windmill.$once."),t===o&&m("bind event "+e+" with no callback through windmill.$once."),this.bridge.onReceiveMessage({data:{type:e,once:!0},origin:this.label,type:"Event"},t)},e.prototype.$off=function(e,t){return d('$off "'+e+'"'),!e&&m("invalid event name "+e+" for windmill.$off."),this.bridge.unbindEventListener("Event."+e,t)},e.prototype.$cycle=function(e,t){return void 0===t&&(t=o),d('$cycle "'+e+'"'),e&&/^app:|^page(:|@)/.test(e)||m("invalid lifecycle name "+e+" for windmill.$cycle."),t===o&&m("hook lifecycle "+e+" with no callback function through windmill.$cycle."),"AppWorker"!==this.label&&/^app:/.test(e)&&m("Shouldn't bind lifecycle hook for app in a page client."),this.bridge.onReceiveMessage({type:"Lifecycle",origin:this.label,data:{type:e}},t)},e.prototype.$decycle=function(e,t){return d('$decycle "'+e+'"'),e&&/^app:|^page(:|@)/.test(e)||m("invalid lifecycle name "+e+" for windmill.$decycle."),this.bridge.unbindEventListener("Lifecycle."+e,t)},e.prototype.$emit=function(e,t,n){return void 0===t&&(t={}),d('$emit("'+e+'")'),!e&&m("invalid event name "+e+" for windmill.$emit."),n&&n!==this.label?this.bridge.postMessage({data:{type:e,data:t},origin:this.label,target:n,type:"Event"}):this.bridge.emitEvent(""+e,t)},e.prototype.$callAsync=function(n,r){var o=this;return void 0===r&&(r={}),d('$callAsync "'+n+'"'),n||m("invalid method name "+n+" for windmill.$callAsync."),new Promise(function(e,t){o.bridge.dispatchMessage({type:"ModuleCall",origin:o.label,target:"AppWorker",data:{method:n,params:r}},e,t,!1)})},e.prototype.$call=function(e,t,n,r){return void 0===t&&(t={}),void 0===n&&(n=o),void 0===r&&(r=o),d('$call "'+e+'", params: '+JSON.stringify(t)),e||m("invalid method name "+e+" for windmill.$call."),this.bridge.dispatchMessage({type:"ModuleCall",origin:this.label,target:"AppWorker",data:{method:e,params:t}},n,r,!0)},e.prototype.$registerModules=function(e){!function(r,o){if(void 0===o&&(o=!1),!l(r))return v("Invalid parameter type! The module definition is not a plain object.");var e=function(t){var e=r[t];y[t]?o||h('The "'+t+'" module has already been registered.It would be overridden.'):y[t]=[];var n=y[t];Array.isArray(e)?e.forEach(function(e){-1===n.indexOf(e)?n.push(e):o||h('The "'+e+'" of the "'+t+'" module has already been registered.')}):v('Invalid parameter type! The method list of the "'+t+'" module should be an Array.')};for(var t in r)e(t)}(e,!0)},e.prototype.$getAvailableModules=function(){return function(e){var t={};try{t=JSON.parse(JSON.stringify(e))}catch(e){}return t}(y)};var x="[[EVENT_MAP]]";function E(e,t){var n=e[x];return Array.isArray(n[t])||(n[t]=[]),n[t]}var $,A=function(){d("Create new EventEmitter."),Object.defineProperty(this,x,{configurable:!1,enumerable:!1,writable:!1,value:{}})};function j(t){var n;try{n=JSON.stringify(t)}catch(e){n=t}m("failed to postMessage: "+n)}function I(e,t,n,r,o,i){var a=t+"."+n;return e.WindVane?e.WindVane.call(t,n,r,o,i):m("should have WindVane in global context"+(a?" to call "+a:"")+".")}A.prototype.on=function(e,t){d('EventEmitter: on("'+e+'")');var n=E(this,e);return n.push({listener:t,once:!1,callCount:0}),this},A.prototype.once=function(e,t){d('EventEmitter: once("'+e+'")');var n=E(this,e);return n.push({listener:t,once:!0,callCount:0}),this},A.prototype.off=function(e,t){d('EventEmitter: off("'+e+'"'+(t?", listener":"")+")");var n=this[x];if(t){var r=n[e];if(Array.isArray(r)){var o=r.findIndex(function(e){return e.listener===t});-1!==o&&r.splice(o,1)}}else delete n[e];return this};var M=!(A.prototype.emit=function(t){for(var e=arguments,n=[],r=arguments.length-1;0<r--;)n[r]=e[r+1];d('EventEmitter: emit("'+t+'", '+JSON.stringify(n)+")");var o=this[x],i=o[t];return Array.isArray(i)&&(o[t]=i.filter(function(e){try{e.listener.apply(null,n),e.callCount+=1}catch(e){return v('Failed to emit "'+t+'" event.'),v(e.toString()),!0}return!e.once})),this}),T=function(){this._messages=[]};T.prototype.postMessage=function(e){d("cache message in lazyMsgModule. "+JSON.stringify(e)),this._messages.push(e)},T.prototype.replaceWith=function(e){P=!1,this._messageModule=e,this._flush()},T.prototype._flush=function(){var t=this;this._messages.forEach(function(e){return t._messageModule.postMessage(e)})};var P,F,N=new T;function R(e,t){var n,r=e?(n=e).requireModule("@weex/windmill")||n.requireModule("windmill"):function(){if(!$){var t="undefined"!=typeof window?window:global;$={postMessage:function(e){return I(t,"Windmill","postMessage",e,function(){},j)},onmessage:function(e){if(console.debug("Set onMessage for webview."),!M)return M=!0,I(t,"Windmill","onMessage",{},e,j)}}}return $}();if(!r)return m("can't find message module ("+(e?"windmill module":"message module in webview")+")."),P=!0,N;if("function"==typeof t){d('Set the "onmessage" method to the bridge through callback.');try{r.onmessage(t)}catch(e){v('Failed to set the "onmessage" method to the bridge through callback.'),v(e.toString())}}return P&&N.replaceWith(r),r}function D(e){var t=e.match(/([^@]+)(@\S+)/);return t&&t[1]||e}var V=function(e,t){var a=this;void 0===t&&(t={}),d("Create a new RendererBridge."),F=t.isWeex,this._emitter=new A,d("Register onmessage api for "+(F?"Weex windmill module":"webview")+"."),F&&(this._weex=e),this._onMessage=function(e){if(d("Receive message from the worker. (message: "+JSON.stringify(e)+")"),!l(e)&&(v("The parameter of onmessage should be a plain object! Not "+c(e)),"string"==typeof e))try{e=JSON.parse(e)}catch(e){return void v("Failed to parse the message string. "+e.toString())}var t=e.type,n=e.data;void 0===n&&(n={});var r=e.origin,o=e.callbackId;switch(t){case"Callback":a._emitter.emit("callback@AppWorker:"+o,n);break;case"Event":var i=D(n.type);a._emitter.emit(t+"."+i,Object.assign({origin:r},n,{type:i}));break;case"Lifecycle":a._emitter.emit(t+"."+n.lifecycle,n.options);break;case"SetData":a._emitter.emit("Event.setdata",n);break;default:m('Unknown message type received from worker: "'+t+'"')}},R(e,this._onMessage)};V.prototype.dispatchMessage=function(t,n,r,e){d("Dispatch message to worker. (message: "+JSON.stringify(t)+")"),t.callbackId=this._genCallbackId(function(e){return e.status&&"SUCCESS"===e.status?n(e):(e.status,v("call API "+t.data.method+" from renderer failed: "+e.status+", "+e.error),r(e))},{keepAlive:e});try{t.keepAlive=!0,this.postMessage(t)}catch(e){r(e)}},V.prototype.postMessage=function(e){try{d("Call postMessage to worker. (message: "+JSON.stringify(e)+")"),R(this._weex,this._onMessage).postMessage(e)}catch(e){m(e.message||e.toString()||"postMessage failed.")}},V.prototype._genCallbackId=function(e,t){var n=t.keepAlive,r=t.callbackId,o=r||i();return this._emitter[n?"on":"once"]("callback@AppWorker:"+o,e),o},V.prototype.onReceiveMessage=function(e,t){var n=e.type,r=e.data;void 0===r&&(r={});var o=r.type;"Event"===n&&(o=D(o),r.type=o);var i=r.once?"once":"on";this._emitter[i](n+"."+o,t)},V.prototype.unbindEventListener=function(e,t){this._emitter.off(D(e),t)},V.prototype.emitEvent=function(e,t){void 0===t&&(t={});var n=D(e);this._emitter.emit("Event."+n,{type:n,data:t})};var L=function(n){function e(e,t){n.call(this),e&&l(e.config)&&(this._name=e.config.pageName||"",this.label=e.config.clientId||"",e.config.availableModules?(this.$registerModules(e.config.availableModules),this._gotAvailableModulesFromWeex=!0):h("No available modules in weex options.")),d("Create a new RendererRuntime. ("+this.label+", "+this._name+")"),this.bridge=new V(e,t),this._init()}return n&&(e.__proto__=n),((e.prototype=Object.create(n&&n.prototype)).constructor=e).prototype._init=function(){var t=this;this.bridge.onReceiveMessage({origin:"AppWorker",target:this.label,type:"Event",data:{type:"registerModules"}},function(e){e&&"registerModules"===e.type&&(d("Register available modules in renderer. ("+Object.keys(e.data)+")"),t.$registerModules(e.data))})},e.prototype.ready=function(){this.bridge.dispatchMessage({origin:this.label,target:"AppWorker",type:"Event",data:{type:"[[RendererRuntimeReady]]",data:{label:this.label,handshake:!this._gotAvailableModulesFromWeex}}},o,o)},e}(e),J=["$on","$once","$off","$emit","$cycle","$decycle","$call","$callAsync","$navTo","$getAvailableModules"];function W(e,t){var n=!(!e||!e.requireModule);!function(e){if(!e||!e.platform)return console.error("set logger environment failed.");Object.assign(u,e)}({platform:n&&e.config.env.platform,debugMode:n&&e.config.env.debugMode,isWeex:n}),d("Setup Windmill renderer framework."),e&&!e.requireModule&&(t=e,e=void 0),t||(t={}),d("Instantiate renderer in "+(((t=Object.assign({},t)).isWeex=n)?"Weex container":"WindVane container")+".");var o,i,r=new L(e,t),a=(o=r,i={},J.forEach(function(r){"function"==typeof o[r]&&(i[r]=function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];return o[r].apply(o,t)})}),i);return d("Prepare runtime APIs: "+JSON.stringify(J)),t.exposeModuleGetter&&s(C,g(function(){return a})),r.ready(),a}var q=/^@(windmill|weex)\/([\w_-]+)/;function B(i,e,t){if(!i.config||"windmill"!==i.config.container)return i;if("function"!=typeof i.requireModule)return i;var a=i.requireModule,s=t||g(function(){return e});return i.requireModule=function(e){var t="weex",n=e,r=q.exec(e);switch(r?(t=r[1],n=r[2]):"string"==typeof i.config.container&&(t=i.config.container),t){case"weex":return a.call(i,n);case"windmill":var o=s(n);return!o&&i.isRegisteredModule(n)?(h('Trying to call weex module "'+n+'" in windmill context!This is NOT a good practice, please use windmill module instead!'),a.call(i,n)):o;default:v('Failed to require scoped module "'+n+'", the "'+t+'" scope is unknown.')}},i}function U(s,c,e){var l={},n=e&&e.normalizeEventName||function(e){return e},r=!(!e||!e.noTriggerWorker);function o(e,t,n,r){void 0===r&&(r=!1);var o=c.getId();l[o]||(l[o]={});var i=l[o];if(i[e]||(i[e]=[]),i[e].push({handler:t,wrap:n}),r)return s.$once(e,n);s.$on(e,n)}var i={on:function(e,t){o(n(e),t,function(e){t.call(c.getVm(),e.data)})},once:function(e,t){o(n(e),t,function(e){t.call(c.getVm(),e.data)},!0)},off:function(e,t){!function(e,n){var t=c.getId(),r=l[t];if(!r)return h("Unbind event from page "+t+" with no event handlers.");var o,i,a=r[e];a?n?(a.forEach(function(e,t){e.handler===n&&(o=e,i=t)}),o&&o.wrap&&(a.splice(i,1),s.$off(e,o.wrap))):((l[t]||(l[t]={}))[e]=[],s.$off(e)):h("Unbind event '"+e+"' which has no event handler.")}(n(e),t)},emit:function(e,t){s.$emit(n(e),t),r&&s.$emit(e+"@"+c.getId(),t,"AppWorker")},call:"default"},a=function(){};return["on","off","emit","once","call"].reduce(function(e,t){var o,n="$"+t,r=i[t];return e[n]="function"==typeof r?r:"default"===r?(o=n,function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];var r=s[o];return r.apply(void 0,t)}):a,e},{})}var z="AppWorker";function H(e){switch(c(e)){case"Object":for(var t in e)H(e[t]);break;case"Array":e.forEach(H)}}return function(e){var a=e.createInstanceContext,t=Object.assign({},e);return t.createInstanceContext=function(e,t,n){var r=t&&t.weex;if(!r||"windmill"!==r.config.container)return a(e,t,n);var l,u,o=Object.assign({},a(e,t,n)),i=W(r);return o.weex=B(r,i),o.requireModule=function(e){return r.requireModule(e)},o.__vue_page__=(l=o,u=i,function(){function e(e,t){var n=this,r=t||l,o=r.Vue,i=r.weex,a=i.config,s=a.clientId,c=a.pageName;if(p("Create Page with id "+s+", pageName "+c+"."),this._id=i.config.clientId||null,this._name=i.config.pageName||null,this._vm=null,this._instanceContext=t||l,this._Vue=o,this._weex=i,this._windmill=u,this._hold=!1,this._options=e,this._state="function"==typeof e.data?e.data():e.data,e.data=function(){return n._state},o.prototype.$page=U(this._windmill,this),d("bind with $page: "+Object.keys(o.prototype.$page)),e._noLazy){p("Init vm instantly in Page constructor with no lazy.");try{this._initVm()}catch(e){v("[windmill-vue-renderer] init vm instantly failed: "+(e&&e.message))}}this._shakeHandsBeforeInit(),this._windmill.$once(w,this._onStateInit.bind(this))}return e.prototype.getVm=function(){return this._vm},e.prototype.getId=function(){return this._id},e.prototype._initVm=function(){var n=this,e=this._vm=new this._Vue(this._options),t=e.$options.data,r=0;e.$watch(function(){for(var e in t)H(t[e]);return r=(r+1)%2},function(e,t){n._hold?n._hold=!1:n._debouncedWatcherCb(e,t)},{sync:!0})},e.prototype._shakeHandsBeforeInit=function(){d("start handshaking with worker."),this._sendPageReady(),this._windmill.$once(_,this._onWorkerReady.bind(this))},e.prototype._sendPageReady=function(){d("Send "+b+" to worker."),this._windmill.$emit(b+"@"+this._id,{},z)},e.prototype._onWorkerReady=function(t){var n;try{n=JSON.stringify(t)}catch(e){n=t+""}d(_+" event received: "+n+".");var e=t.data,r=e.clientId,o=e.pageName;r&&(this._id=r),o&&(this._name=o),this._sendPageReady()},e.prototype._onStateInit=function(t){var n,r=this;try{n=JSON.stringify(t)}catch(e){n=t+""}d(w+" event received: "+n),this._windmill.$off(_),this._windmill.$on(S,this._onDataSync.bind(this));var e=t.data,o=t.origin,i=e.clientId,a=e.pageName,s=i||o;s&&(this._id=s),a&&(this._name=a),this._state=Object.assign(this._state||{},e.initialState||{}),this._windmill.$emit(k+"@"+this._id,{},z);var c=this._vm;if(d("debounce watcher callback for page data watcher binding."),this._debouncedWatcherCb=f(function(e,t){d("emit "+O+" event."),r._windmill.$emit(O+"@"+r._id,r._vm&&r._vm.$options.data,z)},1e3/60),c)this._mergeData(e);else try{p("Init vm after "+w+"."),this._initVm()}catch(e){v("[windmill-vue-renderer] "+(e&&e.message))}},e.prototype._onDataSync=function(t){var n;try{n=JSON.stringify(t)}catch(e){n=t+""}d(S+" event received: "+n);var e=t.data;this._mergeData(e,!0)},e.prototype._mergeData=function(e,t){void 0===t&&(t=!1);var n=this._vm,r=n.$options.data;for(var o in e)t&&(this._hold=!0),n.$set(r,o,e[o])},e}()),Object.freeze(o),o},t}}()});di.Vue=_i(di.Vue),function(e){var t=lr.init,n=lr.config;n.frameworks=e;var r=fn.native,o=fn.transformer;for(var i in hr)lr.service.register(i,hr[i]);lr.freezePrototype(),global.frameworkVersion=r,global.transformerVersion=o;var a=t(n),s=function(r){global[r]=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=a[r].apply(a,e);return n instanceof Error&&console.error(n.toString()),n}};for(var c in a)s(c)}(di),Object.freeze(Object),Object.freeze(Array),un(hi=Object.prototype,"__defineGetter__",vi="Object.prototype"),un(hi,"__defineSetter__",vi),un(hi,"__lookupGetter__",vi),un(hi,"__lookupSetter__",vi),un(hi,"constructor",vi),un(hi,"hasOwnProperty",vi),un(hi,"isPrototypeOf",vi),un(hi,"propertyIsEnumerable",vi),un(hi,"toLocaleString",vi),un(hi,"toString",vi),un(hi,"valueOf",vi),Object.seal(hi),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),un(mi=Error.prototype,"name",yi="Error.prototype"),un(mi,"message",yi),un(mi,"toString",yi),un(mi,"constructor",yi),Object.seal(mi),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype),global.registerMethods(gi)});
-//# sourceMappingURL=weex-js-framework.min.js.map
diff --git a/ios/Pods/WeexSDK/pre-build/weex-polyfill.js b/ios/Pods/WeexSDK/pre-build/weex-polyfill.js
deleted file mode 100644
index 3b25d85..0000000
--- a/ios/Pods/WeexSDK/pre-build/weex-polyfill.js
+++ /dev/null
@@ -1,2 +0,0 @@
-var global = this, process = { env: {} }; !function () { "use strict"; var n, a, r, s; function t(t, n) { return t(n = { exports: {} }, n.exports), n.exports } Array.from || (Array.from = (n = Object.prototype.toString, a = function (t) { return "function" == typeof t || "[object Function]" === n.call(t) }, r = Math.pow(2, 53) - 1, s = function (t) { var n, e = (n = Number(t), isNaN(n) ? 0 : 0 !== n && isFinite(n) ? (0 < n ? 1 : -1) * Math.floor(Math.abs(n)) : n); return Math.min(Math.max(e, 0), r) }, function (t) { var n = Object(t); if (null == t) throw new TypeError("Array.from requires an array-like object - not null or undefined"); var e, r = 1 < arguments.length ? arguments[1] : void 0; if (void 0 !== r) { if (!a(r)) throw new TypeError("Array.from: when provided, the second argument must be a function"); 2 < arguments.length && (e = arguments[2]) } for (var o, i = s(n.length), c = a(this) ? Object(new this(i)) : new Array(i), u = 0; u < i;)o = n[u], c[u] = r ? void 0 === e ? r(o, u) : r.call(e, o, u) : o, u += 1; return c.length = i, c })); var y = t(function (t) { var n = t.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); "number" == typeof __g && (__g = n) }), d = t(function (t) { var n = t.exports = { version: "2.5.4" }; "number" == typeof __e && (__e = n) }), o = (d.version, function (t) { return "object" == typeof t ? null !== t : "function" == typeof t }), m = function (t) { if (!o(t)) throw TypeError(t + " is not an object!"); return t }, e = function (t) { try { return !!t() } catch (t) { return !0 } }, i = !e(function () { return 7 != Object.defineProperty({}, "a", { get: function () { return 7 } }).a }), c = y.document, u = o(c) && o(c.createElement), f = function (t) { return u ? c.createElement(t) : {} }, l = !i && !e(function () { return 7 != Object.defineProperty(f("div"), "a", { get: function () { return 7 } }).a }), h = Object.defineProperty, p = { f: i ? Object.defineProperty : function (t, n, e) { if (m(t), n = function (t, n) { if (!o(t)) return t; var e, r; if (n && "function" == typeof (e = t.toString) && !o(r = e.call(t))) return r; if ("function" == typeof (e = t.valueOf) && !o(r = e.call(t))) return r; if (!n && "function" == typeof (e = t.toString) && !o(r = e.call(t))) return r; throw TypeError("Can't convert object to primitive value") }(n, !0), m(e), l) try { return h(t, n, e) } catch (t) { } if ("get" in e || "set" in e) throw TypeError("Accessors not supported!"); return "value" in e && (t[n] = e.value), t } }, w = function (t, n) { return { enumerable: !(1 & t), configurable: !(2 & t), writable: !(4 & t), value: n } }, O = i ? function (t, n, e) { return p.f(t, n, w(1, e)) } : function (t, n, e) { return t[n] = e, t }, v = {}.hasOwnProperty, g = function (t, n) { return v.call(t, n) }, _ = 0, b = Math.random(), j = function (t) { return "Symbol(".concat(void 0 === t ? "" : t, ")_", (++_ + b).toString(36)) }, S = t(function (t) { var i = j("src"), n = "toString", e = Function[n], c = ("" + e).split(n); d.inspectSource = function (t) { return e.call(t) }, (t.exports = function (t, n, e, r) { var o = "function" == typeof e; o && (g(e, "name") || O(e, "name", n)), t[n] !== e && (o && (g(e, i) || O(e, i, t[n] ? "" + t[n] : c.join(String(n)))), t === y ? t[n] = e : r ? t[n] ? t[n] = e : O(t, n, e) : (delete t[n], O(t, n, e))) })(Function.prototype, n, function () { return "function" == typeof this && this[i] || e.call(this) }) }), T = function (t) { if ("function" != typeof t) throw TypeError(t + " is not a function!"); return t }, P = function (r, o, t) { if (T(r), void 0 === o) return r; switch (t) { case 1: return function (t) { return r.call(o, t) }; case 2: return function (t, n) { return r.call(o, t, n) }; case 3: return function (t, n, e) { return r.call(o, t, n, e) } }return function () { return r.apply(o, arguments) } }, M = "prototype", L = function (t, n, e) { var r, o, i, c, u = t & L.F, a = t & L.G, s = t & L.S, f = t & L.P, l = t & L.B, h = a ? y : s ? y[n] || (y[n] = {}) : (y[n] || {})[M], p = a ? d : d[n] || (d[n] = {}), v = p[M] || (p[M] = {}); for (r in a && (e = n), e) i = ((o = !u && h && void 0 !== h[r]) ? h : e)[r], c = l && o ? P(i, y) : f && "function" == typeof i ? P(Function.call, i) : i, h && S(h, r, i, t & L.U), p[r] != i && O(p, r, c), f && v[r] != i && (v[r] = i) }; y.core = d, L.F = 1, L.G = 2, L.S = 4, L.P = 8, L.B = 16, L.W = 32, L.U = 64, L.R = 128; var E, x = L, A = {}.toString, k = function (t) { return A.call(t).slice(8, -1) }, F = Object("z").propertyIsEnumerable(0) ? Object : function (t) { return "String" == k(t) ? t.split("") : Object(t) }, C = function (t) { if (null == t) throw TypeError("Can't call method on  " + t); return t }, R = function (t) { return F(C(t)) }, I = Math.ceil, N = Math.floor, G = function (t) { return isNaN(t = +t) ? 0 : (0 < t ? N : I)(t) }, D = Math.min, V = function (t) { return 0 < t ? D(G(t), 9007199254740991) : 0 }, B = Math.max, H = Math.min, U = "__core-js_shared__", W = y[U] || (y[U] = {}), q = function (t) { return W[t] || (W[t] = {}) }, z = q("keys"), K = function (t) { return z[t] || (z[t] = j(t)) }, X = (E = !1, function (t, n, e) { var r, o, i, c = R(t), u = V(c.length), a = (o = u, (r = G(r = e)) < 0 ? B(r + o, 0) : H(r, o)); if (E && n != n) { for (; a < u;)if ((i = c[a++]) != i) return !0 } else for (; a < u; a++)if ((E || a in c) && c[a] === n) return E || a || 0; return !E && -1 }), J = K("IE_PROTO"), Q = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","), Y = Object.keys || function (t) { return function (t, n) { var e, r = R(t), o = 0, i = []; for (e in r) e != J && g(r, e) && i.push(e); for (; n.length > o;)g(r, e = n[o++]) && (~X(i, e) || i.push(e)); return i }(t, Q) }, Z = { f: Object.getOwnPropertySymbols }, $ = { f: {}.propertyIsEnumerable }, tt = function (t) { return Object(C(t)) }, nt = Object.assign, et = !nt || e(function () { var t = {}, n = {}, e = Symbol(), r = "abcdefghijklmnopqrst"; return t[e] = 7, r.split("").forEach(function (t) { n[t] = t }), 7 != nt({}, t)[e] || Object.keys(nt({}, n)).join("") != r }) ? function (t, n) { for (var e = arguments, r = tt(t), o = arguments.length, i = 1, c = Z.f, u = $.f; i < o;)for (var a, s = F(e[i++]), f = c ? Y(s).concat(c(s)) : Y(s), l = f.length, h = 0; h < l;)u.call(s, a = f[h++]) && (r[a] = s[a]); return r } : nt; x(x.S + x.F, "Object", { assign: et }); d.Object.assign; Object.setPrototypeOf || (Object.setPrototypeOf = function (n, e) { var r; function o(t, n) { return r.call(t, n), t } try { (r = n.getOwnPropertyDescriptor(n.prototype, e).set).call({}, null) } catch (t) { if (n.prototype !== {}[e]) return; r = function (t) { this[e] = t }, o.polyfill = o(o({}, null), n.prototype) instanceof n } return o }(Object, "__proto__")); var rt = global.WXEnvironment; rt && "iOS" === rt.platform && (global.Promise = void 0); var ot = t(function (t) { var n = q("wks"), e = y.Symbol, r = "function" == typeof e; (t.exports = function (t) { return n[t] || (n[t] = r && e[t] || (r ? e : j)("Symbol." + t)) }).store = n }), it = ot("toStringTag"), ct = "Arguments" == k(function () { return arguments }()), ut = function (t) { var n, e, r; return void 0 === t ? "Undefined" : null === t ? "Null" : "string" == typeof (e = function (t, n) { try { return t[n] } catch (t) { } }(n = Object(t), it)) ? e : ct ? k(n) : "Object" == (r = k(n)) && "function" == typeof n.callee ? "Arguments" : r }, at = {}; at[ot("toStringTag")] = "z", at + "" != "[object z]" && S(Object.prototype, "toString", function () { return "[object " + ut(this) + "]" }, !0); var st = {}, ft = i ? Object.defineProperties : function (t, n) { m(t); for (var e, r = Y(n), o = r.length, i = 0; i < o;)p.f(t, e = r[i++], n[e]); return t }, lt = y.document, ht = lt && lt.documentElement, pt = K("IE_PROTO"), vt = function () { }, yt = "prototype", dt = function () { var t, n = f("iframe"), e = Q.length; for (n.style.display = "none", ht.appendChild(n), n.src = "javascript:", (t = n.contentWindow.document).open(), t.write("<script>document.F=Object<\/script>"), t.close(), dt = t.F; e--;)delete dt[yt][Q[e]]; return dt() }, mt = Object.create || function (t, n) { var e; return null !== t ? (vt[yt] = m(t), e = new vt, vt[yt] = null, e[pt] = t) : e = dt(), void 0 === n ? e : ft(e, n) }, gt = p.f, _t = ot("toStringTag"), bt = function (t, n, e) { t && !g(t = e ? t : t.prototype, _t) && gt(t, _t, { configurable: !0, value: n }) }, jt = {}; O(jt, ot("iterator"), function () { return this }); var wt, Ot = K("IE_PROTO"), St = Object.prototype, Tt = Object.getPrototypeOf || function (t) { return t = tt(t), g(t, Ot) ? t[Ot] : "function" == typeof t.constructor && t instanceof t.constructor ? t.constructor.prototype : t instanceof Object ? St : null }, Pt = ot("iterator"), Mt = !([].keys && "next" in [].keys()), Lt = "values", Et = function () { return this }, xt = function (t, n, e, r, o, i, c) { var u, a, s; a = n, s = r, (u = e).prototype = mt(jt, { next: w(1, s) }), bt(u, a + " Iterator"); var f, l, h, p = function (t) { if (!Mt && t in m) return m[t]; switch (t) { case "keys": case Lt: return function () { return new e(this, t) } }return function () { return new e(this, t) } }, v = n + " Iterator", y = o == Lt, d = !1, m = t.prototype, g = m[Pt] || m["@@iterator"] || o && m[o], _ = g || p(o), b = o ? y ? p("entries") : _ : void 0, j = "Array" == n && m.entries || g; if (j && (h = Tt(j.call(new t))) !== Object.prototype && h.next && (bt(h, v, !0), "function" != typeof h[Pt] && O(h, Pt, Et)), y && g && g.name !== Lt && (d = !0, _ = function () { return g.call(this) }), (Mt || d || !m[Pt]) && O(m, Pt, _), st[n] = _, st[v] = Et, o) if (f = { values: y ? _ : p(Lt), keys: i ? _ : p("keys"), entries: b }, c) for (l in f) l in m || S(m, l, f[l]); else x(x.P + x.F * (Mt || d), n, f); return f }, At = (wt = !0, function (t, n) { var e, r, o = String(C(t)), i = G(n), c = o.length; return i < 0 || c <= i ? wt ? "" : void 0 : (e = o.charCodeAt(i)) < 55296 || 56319 < e || i + 1 === c || (r = o.charCodeAt(i + 1)) < 56320 || 57343 < r ? wt ? o.charAt(i) : e : wt ? o.slice(i, i + 2) : r - 56320 + (e - 55296 << 10) + 65536 }); xt(String, "String", function (t) { this._t = String(t), this._i = 0 }, function () { var t, n = this._t, e = this._i; return e >= n.length ? { value: void 0, done: !0 } : (t = At(n, e), this._i += t.length, { value: t, done: !1 }) }); var kt = ot("unscopables"), Ft = Array.prototype; null == Ft[kt] && O(Ft, kt, {}); var Ct = function (t) { Ft[kt][t] = !0 }, Rt = function (t, n) { return { value: n, done: !!t } }, It = xt(Array, "Array", function (t, n) { this._t = R(t), this._i = 0, this._k = n }, function () { var t = this._t, n = this._k, e = this._i++; return !t || e >= t.length ? (this._t = void 0, Rt(1)) : Rt(0, "keys" == n ? e : "values" == n ? t[e] : [e, t[e]]) }, "values"); st.Arguments = st.Array, Ct("keys"), Ct("values"), Ct("entries"); for (var Nt = ot("iterator"), Gt = ot("toStringTag"), Dt = st.Array, Vt = { CSSRuleList: !0, CSSStyleDeclaration: !1, CSSValueList: !1, ClientRectList: !1, DOMRectList: !1, DOMStringList: !1, DOMTokenList: !0, DataTransferItemList: !1, FileList: !1, HTMLAllCollection: !1, HTMLCollection: !1, HTMLFormElement: !1, HTMLSelectElement: !1, MediaList: !0, MimeTypeArray: !1, NamedNodeMap: !1, NodeList: !0, PaintRequestList: !1, Plugin: !1, PluginArray: !1, SVGLengthList: !1, SVGNumberList: !1, SVGPathSegList: !1, SVGPointList: !1, SVGStringList: !1, SVGTransformList: !1, SourceBufferList: !1, StyleSheetList: !0, TextTrackCueList: !1, TextTrackList: !1, TouchList: !1 }, Bt = Y(Vt), Ht = 0; Ht < Bt.length; Ht++) { var Ut, Wt = Bt[Ht], qt = Vt[Wt], zt = y[Wt], Kt = zt && zt.prototype; if (Kt && (Kt[Nt] || O(Kt, Nt, Dt), Kt[Gt] || O(Kt, Gt, Wt), st[Wt] = Dt, qt)) for (Ut in It) Kt[Ut] || S(Kt, Ut, It[Ut], !0) } var Xt, Jt, Qt, Yt = function (n, t, e, r) { try { return r ? t(m(e)[0], e[1]) : t(e) } catch (t) { var o = n.return; throw void 0 !== o && m(o.call(n)), t } }, Zt = ot("iterator"), $t = Array.prototype, tn = ot("iterator"), nn = d.getIteratorMethod = function (t) { if (null != t) return t[tn] || t["@@iterator"] || st[ut(t)] }, en = t(function (t) { var p = {}, v = {}, n = t.exports = function (t, n, e, r, o) { var i, c, u, a, s, f = o ? function () { return t } : nn(t), l = P(e, r, n ? 2 : 1), h = 0; if ("function" != typeof f) throw TypeError(t + " is not iterable!"); if (void 0 === (s = f) || st.Array !== s && $t[Zt] !== s) { for (u = f.call(t); !(c = u.next()).done;)if ((a = Yt(u, l, c.value, n)) === p || a === v) return a } else for (i = V(t.length); h < i; h++)if ((a = n ? l(m(c = t[h])[0], c[1]) : l(t[h])) === p || a === v) return a }; n.BREAK = p, n.RETURN = v }), rn = ot("species"), on = y.process, cn = y.setImmediate, un = y.clearImmediate, an = y.MessageChannel, sn = y.Dispatch, fn = 0, ln = {}, hn = "onreadystatechange", pn = function () { var t = +this; if (ln.hasOwnProperty(t)) { var n = ln[t]; delete ln[t], n() } }, vn = function (t) { pn.call(t.data) }; cn && un || (cn = function (t) { for (var n = arguments, e = [], r = 1; arguments.length > r;)e.push(n[r++]); return ln[++fn] = function () { !function (t, n, e) { var r = void 0 === e; switch (n.length) { case 0: return r ? t() : t.call(e); case 1: return r ? t(n[0]) : t.call(e, n[0]); case 2: return r ? t(n[0], n[1]) : t.call(e, n[0], n[1]); case 3: return r ? t(n[0], n[1], n[2]) : t.call(e, n[0], n[1], n[2]); case 4: return r ? t(n[0], n[1], n[2], n[3]) : t.call(e, n[0], n[1], n[2], n[3]) }t.apply(e, n) }("function" == typeof t ? t : Function(t), e) }, Xt(fn), fn }, un = function (t) { delete ln[t] }, "process" == k(on) ? Xt = function (t) { on.nextTick(P(pn, t, 1)) } : sn && sn.now ? Xt = function (t) { sn.now(P(pn, t, 1)) } : an ? (Qt = (Jt = new an).port2, Jt.port1.onmessage = vn, Xt = P(Qt.postMessage, Qt, 1)) : y.addEventListener && "function" == typeof postMessage && !y.importScripts ? (Xt = function (t) { y.postMessage(t + "", "*") }, y.addEventListener("message", vn, !1)) : Xt = hn in f("script") ? function (t) { ht.appendChild(f("script"))[hn] = function () { ht.removeChild(this), pn.call(t) } } : function (t) { setTimeout(P(pn, t, 1), 0) }); var yn = { set: cn, clear: un }, dn = yn.set, mn = y.MutationObserver || y.WebKitMutationObserver, gn = y.process, _n = y.Promise, bn = "process" == k(gn); var jn = { f: function (t) { return new function (t) { var e, r; this.promise = new t(function (t, n) { if (void 0 !== e || void 0 !== r) throw TypeError("Bad Promise constructor"); e = t, r = n }), this.resolve = T(e), this.reject = T(r) }(t) } }, wn = function (t) { try { return { e: !1, v: t() } } catch (t) { return { e: !0, v: t } } }, On = ot("species"), Sn = ot("iterator"), Tn = !1; try { [7][Sn]().return = function () { Tn = !0 } } catch (t) { } var Pn, Mn, Ln, En, xn, An = yn.set, kn = function () { var e, r, o, t = function () { var t, n; for (bn && (t = gn.domain) && t.exit(); e;) { n = e.fn, e = e.next; try { n() } catch (t) { throw e ? o() : r = void 0, t } } r = void 0, t && t.enter() }; if (bn) o = function () { gn.nextTick(t) }; else if (!mn || y.navigator && y.navigator.standalone) if (_n && _n.resolve) { var n = _n.resolve(); o = function () { n.then(t) } } else o = function () { dn.call(y, t) }; else { var i = !0, c = document.createTextNode(""); new mn(t).observe(c, { characterData: !0 }), o = function () { c.data = i = !i } } return function (t) { var n = { fn: t, next: void 0 }; r && (r.next = n), e || (e = n, o()), r = n } }(), Fn = "Promise", Cn = y.TypeError, Rn = y.process, In = y[Fn], Nn = "process" == ut(Rn), Gn = function () { }, Dn = Mn = jn.f, Vn = !!function () { try { var t = In.resolve(1), n = (t.constructor = {})[ot("species")] = function (t) { t(Gn, Gn) }; return (Nn || "function" == typeof PromiseRejectionEvent) && t.then(Gn) instanceof n } catch (t) { } }(), Bn = function (t) { var n; return !(!o(t) || "function" != typeof (n = t.then)) && n }, Hn = function (f, e) { if (!f._n) { f._n = !0; var r = f._c; kn(function () { for (var a = f._v, s = 1 == f._s, t = 0, n = function (t) { var n, e, r, o = s ? t.ok : t.fail, i = t.resolve, c = t.reject, u = t.domain; try { o ? (s || (2 == f._h && qn(f), f._h = 1), !0 === o ? n = a : (u && u.enter(), n = o(a), u && (u.exit(), r = !0)), n === t.promise ? c(Cn("Promise-chain cycle")) : (e = Bn(n)) ? e.call(n, i, c) : i(n)) : c(a) } catch (t) { u && !r && u.exit(), c(t) } }; r.length > t;)n(r[t++]); f._c = [], f._n = !1, e && !f._h && Un(f) }) } }, Un = function (i) { An.call(y, function () { var t, n, e, r = i._v, o = Wn(i); if (o && (t = wn(function () { Nn ? Rn.emit("unhandledRejection", r, i) : (n = y.onunhandledrejection) ? n({ promise: i, reason: r }) : (e = y.console) && e.error && e.error("Unhandled promise rejection", r) }), i._h = Nn || Wn(i) ? 2 : 1), i._a = void 0, o && t.e) throw t.v }) }, Wn = function (t) { return 1 !== t._h && 0 === (t._a || t._c).length }, qn = function (n) { An.call(y, function () { var t; Nn ? Rn.emit("rejectionHandled", n) : (t = y.onrejectionhandled) && t({ promise: n, reason: n._v }) }) }, zn = function (t) { var n = this; n._d || (n._d = !0, (n = n._w || n)._v = t, n._s = 2, n._a || (n._a = n._c.slice()), Hn(n, !0)) }, Kn = function (t) { var e, r = this; if (!r._d) { r._d = !0, r = r._w || r; try { if (r === t) throw Cn("Promise can't be resolved itself"); (e = Bn(t)) ? kn(function () { var n = { _w: r, _d: !1 }; try { e.call(t, P(Kn, n, 1), P(zn, n, 1)) } catch (t) { zn.call(n, t) } }) : (r._v = t, r._s = 1, Hn(r, !1)) } catch (t) { zn.call({ _w: r, _d: !1 }, t) } } }; Vn || (In = function (t) { !function (t, n, e, r) { if (!(t instanceof n) || void 0 !== r && r in t) throw TypeError(e + ": incorrect invocation!") }(this, In, Fn, "_h"), T(t), Pn.call(this); try { t(P(Kn, this, 1), P(zn, this, 1)) } catch (t) { zn.call(this, t) } }, (Pn = function (t) { this._c = [], this._a = void 0, this._s = 0, this._d = !1, this._v = void 0, this._h = 0, this._n = !1 }).prototype = function (t, n, e) { for (var r in n) S(t, r, n[r], e); return t }(In.prototype, { then: function (t, n) { var e, r, o, i = Dn((e = In, void 0 === (o = m(this).constructor) || null == (r = m(o)[rn]) ? e : T(r))); return i.ok = "function" != typeof t || t, i.fail = "function" == typeof n && n, i.domain = Nn ? Rn.domain : void 0, this._c.push(i), this._a && this._a.push(i), this._s && Hn(this, !1), i.promise }, catch: function (t) { return this.then(void 0, t) } }), Ln = function () { var t = new Pn; this.promise = t, this.resolve = P(Kn, t, 1), this.reject = P(zn, t, 1) }, jn.f = Dn = function (t) { return t === In || t === En ? new Ln(t) : Mn(t) }), x(x.G + x.W + x.F * !Vn, { Promise: In }), bt(In, Fn), xn = y[Fn], i && xn && !xn[On] && p.f(xn, On, { configurable: !0, get: function () { return this } }), En = d[Fn], x(x.S + x.F * !Vn, Fn, { reject: function (t) { var n = Dn(this); return (0, n.reject)(t), n.promise } }), x(x.S + x.F * !Vn, Fn, { resolve: function (t) { return function (t, n) { if (m(t), o(n) && n.constructor === t) return n; var e = jn.f(t); return (0, e.resolve)(n), e.promise }(this, t) } }), x(x.S + x.F * !(Vn && function (t, n) { if (!n && !Tn) return !1; var e = !1; try { var r = [7], o = r[Sn](); o.next = function () { return { done: e = !0 } }, r[Sn] = function () { return o }, t(r) } catch (t) { } return e }(function (t) { In.all(t).catch(Gn) })), Fn, { all: function (t) { var c = this, n = Dn(c), u = n.resolve, a = n.reject, e = wn(function () { var r = [], o = 0, i = 1; en(t, !1, function (t) { var n = o++, e = !1; r.push(void 0), i++ , c.resolve(t).then(function (t) { e || (e = !0, r[n] = t, --i || u(r)) }, a) }), --i || u(r) }); return e.e && a(e.v), n.promise }, race: function (t) { var n = this, e = Dn(n), r = e.reject, o = wn(function () { en(t, !1, function (t) { n.resolve(t).then(e.resolve, r) }) }); return o.e && r(o.v), e.promise } }) }();
-//# sourceMappingURL=weex-polyfill.min.js.map
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/pre-build/weex-rax-api.js b/ios/Pods/WeexSDK/pre-build/weex-rax-api.js
deleted file mode 100644
index 54c6fd7..0000000
--- a/ios/Pods/WeexSDK/pre-build/weex-rax-api.js
+++ /dev/null
@@ -1,2 +0,0 @@
-console.log("Prepare Rax APIs 0.4.14, Build at 2018-08-23 10:22.");var global=this,process={env:{}};!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){"use strict";var e,t,n=(function(e){e.exports=function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},o.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=22)}([function(e,t,n){var r=e.exports.createUniqueKey="undefined"!=typeof Symbol?Symbol:function(e){return"[["+e+"_"+Math.random().toFixed(8).slice(2)+"]]"},o=e.exports.isObject=function(e){return"object"==typeof e&&null!==e};e.exports.LISTENERS=r("listeners"),e.exports.CAPTURE=1,e.exports.BUBBLE=2,e.exports.ATTRIBUTE=3,e.exports.newNode=function(e,t,n){var r=o(n);return{listener:e,kind:t,once:r&&Boolean(n.once),passive:r&&Boolean(n.passive),next:null}}},function(e,t,n){var r=n(0),o=n(9),i=n(8),a=r.isObject,u=r.LISTENERS,s=r.CAPTURE,l=r.BUBBLE,c=r.ATTRIBUTE,f=r.newNode,d=o.defineCustomEventTarget,p=i.createEventWrapper,h=i.STOP_IMMEDIATE_PROPAGATION_FLAG,v=i.PASSIVE_LISTENER_FLAG,y="undefined"!=typeof window&&void 0!==window.EventTarget,m=e.exports=function e(){var t=arguments;if(!(this instanceof e)){if(1===arguments.length&&Array.isArray(arguments[0]))return d(e,arguments[0]);if(0<arguments.length){for(var n=Array(arguments.length),r=0;r<arguments.length;++r)n[r]=t[r];return d(e,n)}throw new TypeError("Cannot call a class as a function")}Object.defineProperty(this,u,{value:Object.create(null)})};m.prototype=Object.create((y?window.EventTarget:Object).prototype,{constructor:{value:m,writable:!0,configurable:!0},addEventListener:{value:function(e,t,n){if(null==t)return!1;if("function"!=typeof t&&"object"!=typeof t)throw new TypeError('"listener" is not an object.');var r=(a(n)?Boolean(n.capture):Boolean(n))?s:l,o=this[u][e];if(null==o)return this[u][e]=f(t,r,n),!0;for(var i=null;null!=o;){if(o.listener===t&&o.kind===r)return!1;o=(i=o).next}return i.next=f(t,r,n),!0},configurable:!0,writable:!0},removeEventListener:{value:function(e,t,n){if(null==t)return!1;for(var r=(a(n)?Boolean(n.capture):Boolean(n))?s:l,o=null,i=this[u][e];null!=i;){if(i.listener===t&&i.kind===r)return null==o?this[u][e]=i.next:o.next=i.next,!0;i=(o=i).next}return!1},configurable:!0,writable:!0},dispatchEvent:{value:function(e){var t=e.type,n=this[u][t];if(null==n)return!0;for(var r=p(e,this),o=null;null!=n&&(n.once?null==o?this[u][t]=n.next:o.next=n.next:o=n,r[v]=n.passive,"function"==typeof n.listener?n.listener.call(this,r):n.kind!==c&&"function"==typeof n.listener.handleEvent&&n.listener.handleEvent(r),!r[h]);)n=n.next;return!r.defaultPrevented},configurable:!0,writable:!0}})},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}();var o=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._listeners={}}return r(e,[{key:"_addListener",value:function(e,t,n){return this._listeners[e]=this._listeners[e]||[],this._listeners[e].push({listener:t,once:n}),this}},{key:"on",value:function(e,t){return this._addListener(e,t,!1)}},{key:"once",value:function(e,t){return this._addListener(e,t,!0)}},{key:"off",value:function(e,t){return this._listeners[e]&&this._listeners[e].length&&(t?this._listeners[e]=this._listeners[e].filter(function(e){return!(e.listener===t)}):delete this._listeners[e]),this}},{key:"emit",value:function(t,n){var r=this;return this._listeners[t]&&this._listeners[t].forEach(function(e){e.listener.apply(r,[n]),e.once&&r.removeListener(t,e.listener)}),this}}]),e}();t.default=o,e.exports=t.default},function(e,t,n){function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}e.exports=function(){var t=function e(t){var n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};o(this,e),this.type=t,this.bubbles=Boolean(n.bubbles),this.cancelable=Boolean(n.cancelable)};return{Event:t,CustomEvent:function(e){function r(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};o(this,r);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e,t));return n.detail=t.detail,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,t),r}()}}},function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.exports=function(e){var t,n={};return n.timing=(r(t={unloadEventStart:0,unloadEventEnd:0,navigationStart:e,redirectStart:0,redirectEnd:0,fetchStart:e,domainLookupStart:e,domainLookupEnd:e,connectStart:e,secureConnectionStart:e},"connectStart",e),r(t,"requestStart",e),r(t,"responseStart",e),r(t,"responseEnd",e),r(t,"domLoading",0),r(t,"domInteractive",0),r(t,"domComplete",0),r(t,"domContentLoadedEventStart",0),r(t,"domContentLoadedEventEnd",0),r(t,"loadEventStart",0),r(t,"loadEventEnd",0),t),n.now=function(){return Date.now()-n.timing.navigationStart},n}},function(e,t,n){e.exports=function(){var e={},u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.btoa=function(e){for(var t,n,r=String(e),o=0,i=u,a="";r.charAt(0|o)||(i="=",o%1);a+=i.charAt(63&t>>8-o%1*8)){if(255<(n=r.charCodeAt(o+=.75)))throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");t=t<<8|n}return a},e.atob=function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,r,o=0,i=0,a="";r=t.charAt(i++);~r&&(n=o%4?64*n+r:r,o++%4)?a+=String.fromCharCode(255&n>>(-2*o&6)):0)r=u.indexOf(r);return a},e}},function(e,t,n){var o="@weex-module/timer";e.exports=function(n,r){return{setTimeout:function(e,t){return n(o).setTimeout(e,t),r.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){n(o).clearTimeout(e)},setInterval:function(e,t){return n(o).setInterval(e,t),r.taskCenter.callbackManager.lastCallbackId.toString()},clearInterval:function(e){n(o).clearInterval(e)},requestAnimationFrame:function(e){return n(o).setTimeout(e,16)},cancelAnimationFrame:function(e){n(o).clearTimeout(e)}}}},function(e,t,n){var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}();function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=n(1),l=["close","error","message","open"],c=function e(t,n){u(this,e),this.type=t.toString(),Object.assign(this,n)};e.exports=function(i,a){var e=function(e){function o(e,t){u(this,o);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(o.__proto__||Object.getPrototypeOf(o)).call(this)),r=i("@weex-module/webSocket");r.WebSocket,r.onopen,r.onclose,r.onmessage,r.onerror;return a&&(r.webSocket,r.onOpen,r.onClose,r.onMessage,r.onError),r.WebSocket(e,t),n.readyState=0,(n.websocket=r).onmessage(function(e){n.dispatchEvent(new c("message",e))}),r.onopen(function(e){n.readyState=1,n.dispatchEvent(new c("open"))}),r.onclose(function(e){n.readyState=3,n.dispatchEvent(new c("close",{code:e.code,reason:e.reason}))}),r.onerror(function(e){n.dispatchEvent(new c("error",e))}),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(o,s(l)),r(o,[{key:"close",value:function(e,t){2!==this.readyState&&3!==this.readyState&&(this.readyState=2,this.websocket.close(e,t))}},{key:"send",value:function(e){if("string"!=typeof e)throw new Error("Unsupported data type");this.websocket.send(e)}}]),o}();return e.CONNECTING=0,e.OPEN=1,e.CLOSING=2,e.CLOSED=3,e}},function(e,t,n){var r=n(0).createUniqueKey,o=r("stop_immediate_propagation_flag"),i=r("canceled_flag"),a=r("passive_listener_flag"),u=r("original_event"),s=Object.freeze({stopPropagation:Object.freeze({value:function(){var e=this[u];"function"==typeof e.stopPropagation&&e.stopPropagation()},writable:!0,configurable:!0}),stopImmediatePropagation:Object.freeze({value:function(){this[o]=!0;var e=this[u];"function"==typeof e.stopImmediatePropagation&&e.stopImmediatePropagation()},writable:!0,configurable:!0}),preventDefault:Object.freeze({value:function(){if(!this[a]){!0===this.cancelable&&(this[i]=!0);var e=this[u];"function"==typeof e.preventDefault&&e.preventDefault()}},writable:!0,configurable:!0}),defaultPrevented:Object.freeze({get:function(){return this[i]},enumerable:!0,configurable:!0})});e.exports.STOP_IMMEDIATE_PROPAGATION_FLAG=o,e.exports.PASSIVE_LISTENER_FLAG=a,e.exports.createEventWrapper=function(e,t){var n="number"==typeof e.timeStamp?e.timeStamp:Date.now(),r={type:{value:e.type,enumerable:!0},target:{value:t,enumerable:!0},currentTarget:{value:t,enumerable:!0},eventPhase:{value:2,enumerable:!0},bubbles:{value:Boolean(e.bubbles),enumerable:!0},cancelable:{value:Boolean(e.cancelable),enumerable:!0},timeStamp:{value:n,enumerable:!0},isTrusted:{value:!1,enumerable:!0}};return r[o]={value:!1,writable:!0},r[i]={value:!1,writable:!0},r[a]={value:!1,writable:!0},r[u]={value:e},void 0!==e.detail&&(r.detail={value:e.detail,enumerable:!0}),Object.create(Object.create(e,s),r)}},function(e,t,n){var r=n(0),i=r.LISTENERS,a=r.ATTRIBUTE,u=r.newNode;e.exports.defineCustomEventTarget=function(e,t){function n(){e.call(this)}var r={constructor:{value:n,configurable:!0,writable:!0}};return t.forEach(function(t){r["on"+t]={get:function(){return function(e,t){for(var n=e[i][t];null!=n;){if(n.kind===a)return n.listener;n=n.next}return null}(this,t)},set:function(e){!function(e,t,n){"function"!=typeof n&&"object"!=typeof n&&(n=null);for(var r=null,o=e[i][t];null!=o;)o.kind===a?null==r?e[i][t]=o.next:r.next=o.next:r=o,o=o.next;null!=n&&(null==r?e[i][t]=u(n,a):r.next=u(n,a))}(this,t,e)},configurable:!0,enumerable:!0}}),n.prototype=Object.create(e.prototype,r),n}},function(e,t,n){var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}();var o=n(1),i=["abort","error","load","loadstart","progress","timeout","loadend","readystatechange"];e.exports=function(n){var e=function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.UNSENT=0,e.OPENED=1,e.HEADERS_RECEIVED=2,e.LOADING=3,e.DONE=4,e.readyState=0,e.status=0,e.statusText="",e.timeout=0,e._aborted=!1,e._hasError=!1,e._method=null,e._response="",e._url=null,e._timedOut=!1,e._reset(),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.apply(undefined,i)),r(t,[{key:"_reset",value:function(){this.readyState=this.UNSENT,this.responseHeaders=void 0,this.status=0,this._hasError=!1,this._headers={},this._response="",this._responseType="",this._sent=!1,this._lowerCaseResponseHeaders={},this._timedOut=!1}},{key:"getAllResponseHeaders",value:function(){if(!this.responseHeaders)return null;var t=this.responseHeaders||{};return Object.keys(t).map(function(e){return e+": "+t[e]}).join("\r\n")}},{key:"getResponseHeader",value:function(e){var t=this._lowerCaseResponseHeaders[e.toLowerCase()];return void 0!==t?t:null}},{key:"setRequestHeader",value:function(e,t){if(this.readyState!==this.OPENED)throw new Error("Request has not been opened");this._headers[e.toLowerCase()]=String(t)}},{key:"open",value:function(e,t,n){if(this.readyState!==this.UNSENT)throw new Error("Cannot open, already sending");if(void 0!==n&&!n)throw new Error("Synchronous http requests are not supported");if(!t)throw new Error("Cannot load an empty url");this._method=e.toUpperCase(),this._url=t,this._aborted=!1,this.setReadyState(this.OPENED)}},{key:"send",value:function(e){var t=this;if(this.readyState!==this.OPENED)throw new Error("Request has not been opened");if(this._sent)throw new Error("Request has already been sent");this._sent=!0,(0,n("@weex-module/stream").fetch)({method:this._method,url:this._url,headers:this._headers,body:e,type:"text"},function(e){try{"string"==typeof e&&(e=JSON.parse(e)),t.status=e.status,t.statusText=e.statusText,t.setResponseHeaders(e.headers),e.ok?t._response=e.data:(""!==t._responseType&&"text"!==t._responseType||(t._response=e.data),t._hasError=!0)}catch(e){}t.setReadyState(t.DONE)},function(e){t.status=e.status,t.statusText=e.statusText,t.setResponseHeaders(e.headers),t.setReadyState(e.readyState)})}},{key:"abort",value:function(){this._aborted=!0,this.readyState===this.UNSENT||this.readyState===this.OPENED&&!this._sent||this.readyState===this.DONE||(this._reset(),this.setReadyState(this.DONE)),this._reset()}},{key:"setResponseHeaders",value:function(e){this.responseHeaders=e||null;var n=e||{};this._lowerCaseResponseHeaders=Object.keys(n).reduce(function(e,t){return e[t.toLowerCase()]=n[t],e},{})}},{key:"setReadyState",value:function(e){this.readyState=e,this.dispatchEvent({type:"readystatechange"}),e===this.DONE&&(this._aborted?this.dispatchEvent({type:"abort"}):this._hasError?this._timedOut?this.dispatchEvent({type:"timeout"}):this.dispatchEvent({type:"error"}):this.dispatchEvent({type:"load"}),this.dispatchEvent({type:"loadend"}))}},{key:"responseType",get:function(){return this._responseType},set:function(e){if(this._sent)throw new Error("Failed to set the 'responseType' property on 'XMLHttpRequest': The response type cannot be set after the request has been sent.");this._responseType=e}},{key:"responseText",get:function(){if(""!==this._responseType&&"text"!==this._responseType)throw new Error("The 'responseText' property is only available if 'responseType' is set to '' or 'text', but it is '"+this._responseType+"'.");return this.readyState<3?"":this._response}},{key:"response",get:function(){var e=this.responseType;return""===e||"text"===e?this.readyState<3||this._hasError?"":this._response:4!==this.readyState?null:void 0}}]),t}();return e.UNSENT=0,e.OPENED=1,e.HEADERS_RECEIVED=2,e.LOADING=3,e.DONE=4,e}},function(e,t,n){e.exports=function(a,n){function r(e){return"string"!=typeof e&&(e=String(e)),e.toLowerCase()}function o(e){return"string"!=typeof e&&(e=String(e)),e}function i(t){this.originHeaders=t,this.map={},t instanceof i?t.forEach(function(e,t){this.append(t,e)},this):t&&Object.getOwnPropertyNames(t).forEach(function(e){this.append(e,t[e])},this)}function e(){return this.bodyUsed=!1,this._initBody=function(e,t){if("string"==typeof(this._bodyInit=e))this._bodyText=e;else{if(e)throw new Error("unsupported BodyInit type");this._bodyText=""}},this.text=function(){var e=function(e){if(e.bodyUsed)return n.reject(new TypeError("Already read"));e.bodyUsed=!0}(this);return e||n.resolve(this._bodyText)},this.json=function(){return this.text().then(JSON.parse)},this}i.prototype.append=function(e,t){e=r(e),t=o(t);var n=this.map[e];this.map[e]=n?n+","+t:t},i.prototype.delete=function(e){delete this.map[r(e)]},i.prototype.get=function(e){return e=r(e),this.has(e)?this.map[e]:null},i.prototype.has=function(e){return this.map.hasOwnProperty(r(e))},i.prototype.set=function(e,t){this.map[r(e)]=[o(t)]},i.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)};var u=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function s(e,t){var n,r,o=(t=t||{}).body;if(s.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new i(e.headers)),this.method=e.method,this.mode=e.mode,o||(o=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new i(t.headers)),this.method=(n=t.method||this.method||"GET",r=n.toUpperCase(),-1<u.indexOf(r)?r:n),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o,t)}function l(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=200<=this.status&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new i(t.headers),this.url=t.url||"",this._initBody(e,t)}s.prototype.clone=function(){return new s(this)},e.call(s.prototype),e.call(l.prototype),l.prototype.clone=function(){return new l(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new i(this.headers),url:this.url})},l.error=function(){var e=new l(null,{status:0,statusText:""});return e.type="error",e};var c=[301,302,303,307,308];l.redirect=function(e,t){if(-1===c.indexOf(t))throw new RangeError("Invalid status code");return new l(null,{status:t,headers:{location:e}})};return{fetch:function(t,i){return new n(function(n,r){var o,e={url:(o=s.prototype.isPrototypeOf(t)&&!i?t:new s(t,i)).url,method:o.method,headers:o.headers&&o.headers.originHeaders};void 0!==o._bodyInit&&(e.body=o._bodyInit),e.type=i&&i.dataType?i.dataType:"text",(0,a("@weex-module/stream").fetch)(e,function(e){try{"string"==typeof e&&(e=JSON.parse(e));var t=new l("string"==typeof e.data?e.data:JSON.stringify(e.data),{status:e.status,statusText:e.statusText,headers:e.headers,url:o.url});n(t)}catch(e){r(e)}},function(e){})})},Headers:i,Request:s,Response:l}}},function(e,t,n){var r="@weex-module/location";e.exports=function(t,e){return e.assign=function(e){t("@weex-module/navigator").push({url:e,animated:"true"},function(e){})},e.replace=function(e){t(r).replace(e)},e.reload=function(){var e=0<arguments.length&&void 0!==arguments[0]&&arguments[0];t(r).reload(e)},e}},function(e,t,n){var r,o=n(2),a=(r=o)&&r.__esModule?r:{default:r};var u="visible",s="visibilitychange";function l(t){t.body.addEvent("viewappear",function(e){t.visibilityState=u,e.type=s,t.dispatchEvent(e)}),t.body.addEvent("viewdisappear",function(e){t.visibilityState="hidden",e.type=s,t.dispatchEvent(e)})}e.exports=function(t,r){var o=new a.default,n=!1;try{r.addEventListener=function(e,t){e===s&&(r.body?l(r):n=!0),o.on(e,t)},r.removeEventListener=function(e,t){var n;e===s&&(n=r).body&&(n.body.removeEvent("viewappear"),n.body.removeEvent("viewdisappear")),o.off(e,t)},r.dispatchEvent=function(e){o.emit(e.type,e)},r.fonts={add:function(e){t("@weex-module/dom").addRule("fontFace",{fontFamily:e.family,src:e.source})}},r.visibilityState=u;var i=r.createBody;Object.defineProperty(r,"createBody",{value:function(){var e=i.apply(r,arguments);return n&&l(r),e}})}catch(e){console.log(e)}return r}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default={satisfies:function(e,t){if((void 0===e?"undefined":s(e))+(void 0===t?"undefined":s(t))!="stringstring")return!1;if("*"==t)return!0;for(var n=t.match(/(\W+)?([\d|.]+)/),r=e.split("."),o=n[2].split("."),i=Math.max(r.length,o.length),a=0,u=0;u<i;u++){if(r[u]&&!o[u]&&0<parseInt(r[u])||parseInt(r[u])>parseInt(o[u])){a=1;break}if(o[u]&&!r[u]&&0<parseInt(o[u])||parseInt(r[u])<parseInt(o[u])){a=-1;break}}switch(n[1]){case"<":if(-1===a)return!0;break;case"<=":if(1!==a)return!0;break;case">":if(1===a)return!0;break;case">=":if(-1!==a)return!0;break;default:if(0===a)return!0}return!1}},e.exports=t.default},function(e,t,n){var r,o=n(14),h=(r=o)&&r.__esModule?r:{default:r};function v(e){if("*"==e)return e;for(var t=(e="string"==typeof e?e:"").split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function y(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return 0<=o.indexOf("osversion")?r.code=1001:0<=o.indexOf("appversion")?r.code=1002:0<=o.indexOf("weexversion")?r.code=1003:0<=o.indexOf("devicemodel")&&(r.code=1004),r.errorMessage="Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n,r}e.exports=function(r){return function(e){var t=r("@weex-module/instanceWrap"),n=function(e){var t={isDowngrade:!1},n=WXEnvironment,r=e[(n.platform||"unknow").toLowerCase()]||{};for(var o in n){var i=o,a=i.toLowerCase(),u=n[o],s=0<=a.indexOf("version"),l=0<=a.indexOf("osversion"),c=0<=a.indexOf("devicemodel"),f=r[o];if(l&&"p"==u.toLowerCase()&&(u="9.0.0"),f&&s){var d=v(f),p=v(u);if(h.default.satisfies(p,d)){t=y(i,u,f);break}}else if(c&&0<=(Array.isArray(f)?f:[f]).indexOf(u)){t=y(i,u,f);break}}return t}(e);return!!n.isDowngrade&&(t.error(n.errorType,n.code,n.errorMessage),!0)}}},function(e,t,n){var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l="@weex-module/",c={};e.exports=function(r,a,u){var s="windmill"===a.config.container;return function e(i){var t=r[i];if(1<i.split(l).length){var n=function(){var e,o=i.split(l)[1];if(s&&(c=u.$getAvailableModules()),s&&"stream"==o&&(o="network"),s&&c[e=o]&&c[e].length){for(var t={},n=function(e){var r=c[o][e];t[r]=function(e,t,n){u.$call(o+"."+r,e,t,n)}},r=0;r<c[o].length;r++)n(r);return"network"==o&&(t.fetch=function(e,t,n){u.$call(o+".request",e,t,n)}),{v:t}}if(a.isRegisteredModule(o))return{v:a.requireModule(o)};throw new Error('Requiring unknown weex module "'+i+'"')}();if("object"===(void 0===n?"undefined":o(n)))return n.v}if(t&&t.isInitialized)return t.module.exports;if(!t)throw new Error('Requiring unknown module "'+i+'"');if(t.hasError)throw new Error('Requiring module "'+i+'" which threw an exception');try{t.isInitialized=!0,t.factory(e,t.module.exports,t.module)}catch(e){throw t.hasError=!0,t.isInitialized=!1,e}return t.module.exports}}},function(e,t,n){e.exports=function(r){return function(e,t,n){t instanceof Function&&(n=t,t=[]),r[e]={factory:n,deps:t,module:{exports:{}},isInitialized:!1,hasError:!1}}}},function(e,t){e.exports=function(){return function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},o.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=10)}([function(e,t,n){var r,o,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.defineProperties,u=Object.defineProperty,s=Object.create(null);function l(e){if(!(t=e)||!("symbol"===(void 0===t?"undefined":i(t))||t.constructor&&"Symbol"===t.constructor.name&&"Symbol"===t[t.constructor.toStringTag]))throw new TypeError(e+" is not a symbol");var t;return e}var c,f=(c=Object.create(null),function(e){for(var t=0;c[e+(t||"")];)++t;return c[e+=t||""]=!0,"@@"+e});o=function(e){if(this instanceof o)throw new TypeError("Symbol is not a constructor");return r(e)},e.exports=r=function e(t){var n;if(this instanceof e)throw new TypeError("Symbol is not a constructor");return n=Object.create(o.prototype),t=void 0===t?"":String(t),a(n,{__description__:{value:t},__name__:{value:f(t)}})},a(r,{for:{value:function(e){return s[e]?s[e]:s[e]=r(String(e))}},keyFor:{value:function(e){var t;for(t in l(e),s)if(s[t]===e)return t}},hasInstance:{value:r("hasInstance")},isConcatSpreadable:{value:r("isConcatSpreadable")},iterator:{value:r("iterator")},match:{value:r("match")},replace:{value:r("replace")},search:{value:r("search")},species:{value:r("species")},split:{value:r("split")},toPrimitive:{value:r("toPrimitive")},toStringTag:{value:r("toStringTag")},unscopables:{value:r("unscopables")}}),a(o.prototype,{constructor:{value:r},toString:{value:function(){return this.__name__}}}),a(r.prototype,{toString:{value:function(){return"Symbol ("+l(this).__description__+")"}},valueOf:{value:function(){return l(this)}}}),u(r.prototype,r.toPrimitive,{value:function(){var e=l(this);return"symbol"===(void 0===e?"undefined":i(e))?e:e.toString()}}),u(r.prototype,r.toStringTag,{value:"Symbol"}),u(o.prototype,r.toStringTag,{value:r.prototype[r.toStringTag]}),u(o.prototype,r.toPrimitive,{value:r.prototype[r.toPrimitive]})},function(e,t,n){var r,o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=n(0),u=(r=i)&&r.__esModule?r:{default:r};var a=/[!'\(\)~]|%20|%00/g,s=/\+/g,l={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},c=function(e){return l[e]},f="__URLSearchParams__";function d(e){return encodeURIComponent(e).replace(a,c)}function p(e){return decodeURIComponent(e.replace(s," "))}var h=function(){function a(e){if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),this[f]=Object.create(null),e){"?"===e.charAt(0)&&(e=e.slice(1));for(var t,n,r=(e||"").split("&"),o=0,i=r.length;o<i;o++)-1<(t=(n=r[o]).indexOf("="))?this.append(p(n.slice(0,t)),p(n.slice(t+1))):n.length&&this.append(p(n),"")}}return o(a,[{key:"append",value:function(e,t){var n=this[f];e in n?n[e].push(""+t):n[e]=[""+t]}},{key:"delete",value:function(e){delete this[f][e]}},{key:"get",value:function(e){var t=this[f];return e in t?t[e][0]:null}},{key:"getAll",value:function(e){var t=this[f];return e in t?t[e].slice(0):[]}},{key:"has",value:function(e){return e in this[f]}},{key:"set",value:function(e,t){this[f][e]=[""+t]}},{key:"forEach",value:function(n,r){var e=this[f];Object.getOwnPropertyNames(e).forEach(function(t){e[t].forEach(function(e){n.call(r,e,t,this)},this)},this)}},{key:"keys",value:function(){var n=[];this.forEach(function(e,t){n.push(t)});var e={next:function(){var e=n.shift();return{done:void 0===e,value:e}}};return e[u.default.iterator]=function(){return e},e}},{key:"values",value:function(){var t=[];this.forEach(function(e){t.push(e)});var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return e[u.default.iterator]=function(){return e},e}},{key:"entries",value:function(){var n=[];this.forEach(function(e,t){n.push([t,e])});var e={next:function(){var e=n.shift();return{done:void 0===e,value:e}}};return e[u.default.iterator]=function(){return e},e}},{key:"toString",value:function(){var e,t,n,r,o=this[f],i=[];for(t in o)for(n=d(t),e=0,r=o[t];e<r.length;e++)i.push(n+"="+d(r[e]));return i.join("&")}}]),a}();h.prototype[u.default.iterator]=h.prototype.entries,e.exports=h},function(e,t,n){var a=/^(?:(only|not)?\s*([_a-z][_a-z0-9-]*)|(\([^\)]+\)))(?:\s*and\s*(.*))?$/i,u=/^\(\s*([_a-z-][_a-z0-9-]*)\s*(?:\:\s*([^\)]+))?\s*\)$/,s=/^(?:(min|max)-)?(.+)/;function r(e,i){return(t=e,t.split(",").map(function(r){var e=(r=r.trim()).match(a);if(!e)throw new SyntaxError('Invalid CSS media query: "'+r+'"');var t=e[1],n=e[2],o=((e[3]||"")+(e[4]||"")).trim(),i={};if(i.inverse=!!t&&"not"===t.toLowerCase(),i.type=n?n.toLowerCase():"all",!o)return i.expressions=[],i;if(!(o=o.match(/\([^\)]+\)/g)))throw new SyntaxError('Invalid CSS media query: "'+r+'"');return i.expressions=o.map(function(e){var t=e.match(u);if(!t)throw new SyntaxError('Invalid CSS media query: "'+r+'"');var n=t[1].toLowerCase().match(s);return{modifier:n[1],feature:n[2],value:t[2]}}),i})).some(function(e){var t=e.inverse,n="all"===e.type||i.type===e.type;if(n&&t||!n&&!t)return!1;var r=e.expressions.every(function(e){var t=e.feature,n=e.modifier,r=e.value,o=i[t];if(!o)return!1;switch(t){case"width":case"height":r=parseFloat(r),o=parseFloat(o)}switch(n){case"min":return r<=o;case"max":return o<=r;default:return o===r}});return r&&!t||!r&&t});var t}e.exports=function(e){var t={matches:!1,media:e};return t.matches=""===e||r(e,{type:"screen",width:window.screen.width,height:window.screen.height}),t}},function(e,t,n){var r=n(1),w=Object.create(null);w.ftp=21,w.file=0,w.gopher=70,w.http=80,w.https=443,w.ws=80,w.wss=443;var x=Object.create(null);function E(e){return void 0!==w[e]}function S(){i.call(this),this._isInvalid=!0}function O(e){return""==e&&S.call(this),e.toLowerCase()}function C(e){var t=e.charCodeAt(0);return 32<t&&t<127&&-1==[34,35,60,62,63,96].indexOf(t)?e:encodeURIComponent(e)}x["%2e"]=".",x[".%2e"]="..",x["%2e."]="..",x["%2e%2e"]="..";var k=void 0,P=/[a-zA-Z]/,j=/[a-zA-Z0-9\+\-\.]/;function o(e,t,n){var r=this;function o(e){d.push(e)}var i,a,u=t||"scheme start",s=0,l="",c=!1,f=!1,d=[];e:for(;(e[s-1]!=k||0==s)&&!this._isInvalid;){var p=e[s];switch(u){case"scheme start":if(!p||!P.test(p)){if(t){o("Invalid scheme.");break e}l="",u="no scheme";continue}l+=p.toLowerCase(),u="scheme";break;case"scheme":if(p&&j.test(p))l+=p.toLowerCase();else{if(":"!=p){if(t){if(k==p)break e;o("Code point not allowed in scheme: "+p);break e}l="",s=0,u="no scheme";continue}if(r._scheme=l,l="",t)break e;E(r._scheme)&&(r._isRelative=!0),u="file"==r._scheme?"relative":r._isRelative&&n&&n._scheme==r._scheme?"relative or authority":r._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==p?u="query":"#"==p?(r._fragment="#",u="fragment"):k!=p&&"\t"!=p&&"\n"!=p&&"\r"!=p&&(r._schemeData+=C(p));break;case"no scheme":if(n&&E(n._scheme)){u="relative";continue}o("Missing scheme."),S.call(r);break;case"relative or authority":if("/"!=p||"/"!=e[s+1]){o("Expected /, got: "+p),u="relative";continue}u="authority ignore slashes";break;case"relative":if(r._isRelative=!0,"file"!=r._scheme&&(r._scheme=n._scheme),k==p){r._host=n._host,r._port=n._port,r._path=n._path.slice(),r._query=n._query,r._username=n._username,r._password=n._password;break e}if("/"==p||"\\"==p)"\\"==p&&o("\\ is an invalid code point."),u="relative slash";else if("?"==p)r._host=n._host,r._port=n._port,r._path=n._path.slice(),r._query="?",r._username=n._username,r._password=n._password,u="query";else{if("#"!=p){var h=e[s+1],v=e[s+2];("file"!=r._scheme||!P.test(p)||":"!=h&&"|"!=h||k!=v&&"/"!=v&&"\\"!=v&&"?"!=v&&"#"!=v)&&(r._host=n._host,r._port=n._port,r._username=n._username,r._password=n._password,r._path=n._path.slice(),r._path.pop()),u="relative path";continue}r._host=n._host,r._port=n._port,r._path=n._path.slice(),r._query=n._query,r._fragment="#",r._username=n._username,r._password=n._password,u="fragment"}break;case"relative slash":if("/"!=p&&"\\"!=p){"file"!=r._scheme&&(r._host=n._host,r._port=n._port,r._username=n._username,r._password=n._password),u="relative path";continue}"\\"==p&&o("\\ is an invalid code point."),u="file"==r._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=p){o("Expected '/', got: "+p),u="authority ignore slashes";continue}u="authority second slash";break;case"authority second slash":if(u="authority ignore slashes","/"!=p){o("Expected '/', got: "+p);continue}break;case"authority ignore slashes":if("/"!=p&&"\\"!=p){u="authority";continue}o("Expected authority, got: "+p);break;case"authority":if("@"==p){c&&(o("@ already seen."),l+="%40"),c=!0;for(var y=0;y<l.length;y++){var m=l[y];if("\t"!=m&&"\n"!=m&&"\r"!=m)if(":"!=m||null!==r._password){var _=C(m);null!==r._password?r._password+=_:r._username+=_}else r._password="";else o("Invalid whitespace in authority.")}l=""}else{if(k==p||"/"==p||"\\"==p||"?"==p||"#"==p){s-=l.length,l="",u="host";continue}l+=p}break;case"file host":if(k==p||"/"==p||"\\"==p||"?"==p||"#"==p){2!=l.length||!P.test(l[0])||":"!=l[1]&&"|"!=l[1]?(0==l.length||(r._host=O.call(r,l),l=""),u="relative path start"):u="relative path";continue}"\t"==p||"\n"==p||"\r"==p?o("Invalid whitespace in file host."):l+=p;break;case"host":case"hostname":if(":"!=p||f){if(k==p||"/"==p||"\\"==p||"?"==p||"#"==p){if(r._host=O.call(r,l),l="",u="relative path start",t)break e;continue}"\t"!=p&&"\n"!=p&&"\r"!=p?("["==p?f=!0:"]"==p&&(f=!1),l+=p):o("Invalid code point in host/hostname: "+p)}else if(r._host=O.call(r,l),l="",u="port","hostname"==t)break e;break;case"port":if(/[0-9]/.test(p))l+=p;else{if(k==p||"/"==p||"\\"==p||"?"==p||"#"==p||t){if(""!=l){var b=parseInt(l,10);b!=w[r._scheme]&&(r._port=b+""),l=""}if(t)break e;u="relative path start";continue}"\t"==p||"\n"==p||"\r"==p?o("Invalid code point in port: "+p):S.call(r)}break;case"relative path start":if("\\"==p&&o("'\\' not allowed in path."),u="relative path","/"!=p&&"\\"!=p)continue;break;case"relative path":var g;if(k!=p&&"/"!=p&&"\\"!=p&&(t||"?"!=p&&"#"!=p))"\t"!=p&&"\n"!=p&&"\r"!=p&&(l+=C(p));else"\\"==p&&o("\\ not allowed in relative path."),(g=x[l.toLowerCase()])&&(l=g),".."==l?(r._path.pop(),"/"!=p&&"\\"!=p&&r._path.push("")):"."==l&&"/"!=p&&"\\"!=p?r._path.push(""):"."!=l&&("file"==r._scheme&&0==r._path.length&&2==l.length&&P.test(l[0])&&"|"==l[1]&&(l=l[0]+":"),r._path.push(l)),l="","?"==p?(r._query="?",u="query"):"#"==p&&(r._fragment="#",u="fragment");break;case"query":t||"#"!=p?k!=p&&"\t"!=p&&"\n"!=p&&"\r"!=p&&(r._query+=(void 0,32<(a=(i=p).charCodeAt(0))&&a<127&&-1==[34,35,60,62,96].indexOf(a)?i:encodeURIComponent(i))):(r._fragment="#",u="fragment");break;case"fragment":k!=p&&"\t"!=p&&"\n"!=p&&"\r"!=p&&(r._fragment+=p)}s++}}function i(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function a(e,t){void 0===t||t instanceof a||(t=new a(String(t))),this._url=e,i.call(this);var n=e.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");o.call(this,n,null,t)}a.prototype={toString:function(){return this.href},get href(){if(this._isInvalid)return this._url;var e="";return""==this._username&&null==this._password||(e=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+e+this.host:"")+this.pathname+this._query+this._fragment},set href(e){i.call(this),o.call(this,e)},get protocol(){return this._scheme+":"},set protocol(e){this._isInvalid||o.call(this,e+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(e){!this._isInvalid&&this._isRelative&&o.call(this,e,"host")},get hostname(){return this._host},set hostname(e){!this._isInvalid&&this._isRelative&&o.call(this,e,"hostname")},get port(){return this._port},set port(e){!this._isInvalid&&this._isRelative&&o.call(this,e,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(e){!this._isInvalid&&this._isRelative&&(this._path=[],o.call(this,e,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(e){!this._isInvalid&&this._isRelative&&((this._query="?")==e[0]&&(e=e.slice(1)),o.call(this,e,"query"))},get searchParams(){return new r(this.search)},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(e){this._isInvalid||((this._fragment="#")==e[0]&&(e=e.slice(1)),o.call(this,e,"fragment"))},get origin(){var e;if(this._isInvalid||!this._scheme)return"";switch(this._scheme){case"data":case"file":case"javascript":case"mailto":return"null"}return(e=this.host)?this._scheme+"://"+e:""}},e.exports=a},function(e,t,n){e.exports=function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.family=t,this.source=n}},function(e,t,n){var r=Date.now()%1e9,o=function(e){this.name="__st"+(1e9*Math.random()>>>0)+r+++"__",e&&e.forEach&&e.forEach(this.add,this)};o.prototype.add=function(e){var t=this.name;return e[t]||Object.defineProperty(e,t,{value:!0,writable:!0}),this},o.prototype.delete=function(e){return!!e[this.name]&&!(e[this.name]=void 0)},o.prototype.has=function(e){return!!e[this.name]},e.exports=o},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Object.defineProperty,i=Date.now()%1e9,a=function(e){this.name="__st"+(1e9*Math.random()>>>0)+i+++"__",e&&e.forEach&&e.forEach(function(e){this.set.apply(this,e)},this)};a.prototype.set=function(e,t){if("object"!==(void 0===e?"undefined":r(e))&&"function"!=typeof e)throw new TypeError("Invalid value used as weak map key");var n=e[this.name];return n&&n[0]===e?n[1]=t:o(e,this.name,{value:[e,t],writable:!0}),this},a.prototype.get=function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},a.prototype.delete=function(e){var t=e[this.name];return!(!t||t[0]!==e)&&(t[0]=t[1]=void 0,!0)},a.prototype.has=function(e){var t=e[this.name];return!!t&&t[0]===e},e.exports=a},function(e,t,n){var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};var a=(0,i.default)("undef"),u=(0,i.default)("NaN"),s=!0;function l(e){return e!=e?u:e}function c(e){return e===u?NaN:e}function f(e,t){var n=0;return{next:function(){for(;e._values[n]===a;)n++;return n===e._values.length?{value:void 0,done:!0}:{value:t.call(e,n++),done:!1}}}}function d(e){for(var t=0,n=0,r=e._values.length;n<r;n++)e._values[n]!==a&&t++;return t}var p=function(e){this._values=[],e&&"function"==typeof e.forEach&&e.forEach(function(e){this.add.call(this,e)},this),s||(this.size=d(this))};try{Object.defineProperty(p.prototype,"size",{get:function(){return d(this)}})}catch(e){s=!1}p.prototype.add=function(e){return e=l(e),-1===this._values.indexOf(e)&&(this._values.push(e),s||(this.size=d(this))),this},p.prototype.has=function(e){return-1!==this._values.indexOf(l(e))},p.prototype.delete=function(e){var t=this._values.indexOf(l(e));return-1!==t&&(this._values[t]=a,s||(this.size=d(this)),!0)},p.prototype.clear=function(){this._values=[],s||(this.size=0)},p.prototype.values=p.prototype.keys=function(){return f(this,function(e){return c(this._values[e])})},p.prototype.entries=p.prototype[i.default.iterator]=function(){return f(this,function(e){return[c(this._values[e]),c(this._values[e])]})},p.prototype.forEach=function(e,t){t=t||global;for(var n=this.entries(),r=n.next();!1===r.done;)e.call(t,r.value[1],r.value[0],this),r=n.next()},p.prototype[i.default.species]=p,Object.defineProperty(p,"constructor",{value:p});try{Object.defineProperty(p,"length",{value:0})}catch(e){}e.exports=p},function(e,t,n){var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};var a=(0,i.default)("undef"),u=(0,i.default)("NaN"),s=!0;function l(e){return e!=e?u:e}function c(e){return e===u?NaN:e}function f(e,t){var n=0,r=!1;return{next:function(){if(n===e._keys.length&&(r=!0),r)return{value:void 0,done:!0};for(;e._keys[n]===a;)n++;return{value:t.call(e,n++),done:!1}}}}function d(e){for(var t=0,n=0,r=e._keys.length;n<r;n++)e._keys[n]!==a&&t++;return t}function p(e,t){return"function"==typeof e[t]}var h=function e(t){this._keys=[],this._values=[],t&&p(t,"forEach")&&(t instanceof e||p(t,"clear")&&p(t,"delete")&&p(t,"entries")&&p(t,"forEach")&&p(t,"get")&&p(t,"has")&&p(t,"keys")&&p(t,"set")&&p(t,"values")?t.forEach(function(e,t){this.set.apply(this,[t,e])},this):t.forEach(function(e){this.set.apply(this,e)},this)),s||(this.size=d(this))};h.prototype={};try{Object.defineProperty(h.prototype,"size",{get:function(){return d(this)}})}catch(e){s=!1}h.prototype.get=function(e){var t=this._keys.indexOf(l(e));return-1!==t?this._values[t]:void 0},h.prototype.set=function(e,t){var n=this._keys.indexOf(l(e));return-1!==n?this._values[n]=t:(this._keys.push(l(e)),this._values.push(t),s||(this.size=d(this))),this},h.prototype.has=function(e){return-1!==this._keys.indexOf(l(e))},h.prototype.delete=function(e){var t=this._keys.indexOf(l(e));return-1!==t&&(this._keys[t]=a,this._values[t]=a,s||(this.size=d(this)),!0)},h.prototype.clear=function(){this._keys=this._values=[],s||(this.size=0)},h.prototype.values=function(){return f(this,function(e){return this._values[e]})},h.prototype.keys=function(){return f(this,function(e){return c(this._keys[e])})},h.prototype.entries=h.prototype[i.default.iterator]=function(){return f(this,function(e){return[c(this._keys[e]),this._values[e]]})},h.prototype.forEach=function(e,t){t=t||global;for(var n=this.entries(),r=n.next();!1===r.done;)e.call(t,r.value[1],r.value[0],this),r=n.next()},h.prototype[i.default.species]=h,Object.defineProperty(h,"constructor",{value:h});try{Object.defineProperty(h,"length",{value:0})}catch(e){}e.exports=h},function(e,t,n){var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function r(){}var o="function"==typeof setImmediate&&setImmediate||function(e){"function"==typeof setTimeout?setTimeout(e,0):e()},i=function(e){"undefined"!=typeof console&&console&&console.log("Possible Unhandled Promise Rejection:",e)};function a(e){if("object"!==s(this))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("Promise resolver is not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],p(e,this)}function u(n,r){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,o(function(){var e=1===n._state?r.onFulfilled:r.onRejected;if(null!==e){var t;try{t=e(n._value)}catch(e){return void c(r.promise,e)}l(r.promise,t)}else(1===n._state?l:c)(r.promise,n._value)})):n._deferreds.push(r)}function l(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"===(void 0===e?"undefined":s(e))||"function"==typeof e)){var n=e.then;if(e instanceof a)return t._state=3,t._value=e,void f(t);if("function"==typeof n)return void p((r=n,o=e,function(){r.apply(o,arguments)}),t)}t._state=1,t._value=e,f(t)}catch(e){c(t,e)}var r,o}function c(e,t){e._state=2,e._value=t,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&o(function(){e._handled||i(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)u(e,e._deferreds[t]);e._deferreds=null}function d(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function p(e,t){var n=!1;try{e(function(e){n||(n=!0,l(t,e))},function(e){n||(n=!0,c(t,e))})}catch(e){if(n)return;n=!0,c(t,e)}}a.prototype.catch=function(e){return this.then(null,e)},a.prototype.then=function(e,t){var n=new this.constructor(r);return u(this,new d(e,t,n)),n},a.all=function(e){var u=Array.prototype.slice.call(e);return new a(function(r,o){if(0===u.length)return r([]);var i=u.length;function a(t,e){try{if(e&&("object"===(void 0===e?"undefined":s(e))||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){a(t,e)},o)}u[t]=e,0==--i&&r(u)}catch(e){o(e)}}for(var e=0;e<u.length;e++)a(e,u[e])})},a.resolve=function(t){return t&&"object"===(void 0===t?"undefined":s(t))&&t.constructor===a?t:new a(function(e){e(t)})},a.reject=function(n){return new a(function(e,t){t(n)})},a.race=function(o){return new a(function(e,t){for(var n=0,r=o.length;n<r;n++)o[n].then(e,t)})},a._setImmediateFn=function(e){o=e},a._setUnhandledRejectionFn=function(e){i=e},e.exports=a},function(e,t,n){e.exports={get Promise(){return n(9)},get Symbol(){return n(0)},get Map(){return n(8)},get Set(){return n(7)},get WeakMap(){return n(6)},get WeakSet(){return n(5)},get FontFace(){return n(4)},get URL(){return n(3)},get URLSearchParams(){return n(1)},get matchMedia(){return n(2)}}}])}},function(e,t,n){e.exports=function(e,t,n){var h=this.__weex_document__,v=this.document;n.exports=function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},o.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=48)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={component:null,mountID:1,sandbox:!0,rootComponents:{},rootInstances:{},hook:null,driver:null,monitor:null},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var d=r(n(0)),p=n(7),h=r(n(6)),v=r(n(3)),y=r(n(5)),m=r(n(46));function r(e){return e&&e.__esModule?e:{default:e}}var o="$$instance";t.default={set:function(e,t){e[o]||(e[o]=t).rootID&&(d.default.rootInstances[t.rootID]=t,d.default.rootComponents[t.rootID]=t._internal)},get:function(e){return e[o]},remove:function(e){var t=this.get(e);t&&(e[o]=null,t.rootID&&(delete d.default.rootComponents[t.rootID],delete d.default.rootInstances[t.rootID]))},mount:function(e,t,n){d.default.driver.beforeRender&&d.default.driver.beforeRender(),null==t&&(t=d.default.driver.createBody());var r=void 0;if(n){var o=n._internal;r=o._processChildContext(o._context)}var i=this.get(t);if(i&&i.isRootComponent){var a=i.getRenderedComponent(),u=a._currentElement;if((0,y.default)(u,e)){var s=a._context;return a.updateComponent(u,e,s,r||s),i}d.default.hook.Reconciler.unmountComponent(i),(0,h.default)(t)}var l=(0,p.createElement)(m.default,null,e),c=r||{},f=(0,v.default)(l).mountComponent(t,null,c);return this.set(t,f),d.default.driver.afterRender&&d.default.driver.afterRender(f),d.default.hook.Mount._renderNewRootComponent(f._internal),f}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}();var r=function(){function r(e,t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this.props=e,this.context=t,this.refs={},this.updater=n}return o(r,[{key:"isComponentClass",value:function(){}},{key:"setState",value:function(e,t){this.updater.setState(this,e,t)}},{key:"forceUpdate",value:function(e){this.updater.forceUpdate(this,e)}}]),r}();t.default=r,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=n(0),a=(r=i)&&r.__esModule?r:{default:r};t.default=function(e){var t=void 0;if(null==e||!1===e||!0===e)t=new a.default.EmptyComponent;else if(Array.isArray(e))t=new a.default.FragmentComponent(e);else if("object"===(void 0===e?"undefined":o(e))&&e.type)t="string"==typeof e.type?new a.default.NativeComponent(e):new a.default.CompositeComponent(e);else{if("string"!=typeof e&&"number"!=typeof e)throw new Error("Invalid element type: "+e+". (keys: "+Object.keys(e)+")");t=new a.default.TextComponent(e)}return t._mountIndex=0,t},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(44)),a=r(n(1));r(n(0));function r(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n,r){"function"==typeof n&&(r=n,n=null),n=n||{},(0,i.default)(n);var o=a.default.mount(e,t,n.parent).getPublicInstance();return r&&r.call(o),o},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default=function(e,t){var n=null===e,r=null===t;if(n||r)return n===r;var o=void 0===e?"undefined":a(e),i=void 0===t?"undefined":a(t);return"string"===o||"number"===o?"string"===i||"number"===i:"object"===o&&"object"===i&&e.type===t.type&&e.key===t.key},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=i.default.get(e);if(!t)return!1;return i.default.remove(e),t._internal.unmountComponent(),!0};var r,o=n(1),i=(r=o)&&r.__esModule?r:{default:r};e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.createElement=o,t.createFactory=function(e){var t=o.bind(null,e);return t.type=e,t},t.cloneElement=function(e,t){var n=arguments;if(!_(e))throw Error("cloneElement: not a valid element."+y());var r=Object.assign({},e.props),o=e.key,i=e.ref,a=e._owner;if(t){void 0!==t.ref&&(i=t.ref,a=p.default.component),void 0!==t.key&&(o=String(t.key));var u=void 0;e.type&&e.type.defaultProps&&(u=e.type.defaultProps);var s=void 0;for(s in t)t.hasOwnProperty(s)&&!v.hasOwnProperty(s)&&(void 0===t[s]&&void 0!==u?r[s]=u[s]:r[s]=t[s])}for(var l=arguments.length,c=Array(2<l?l-2:0),f=2;f<l;f++)c[f-2]=n[f];c.length&&(r.children=(0,h.default)(c));return new m(e.type,o,i,r,a)},t.isValidElement=_;var p=r(n(0)),h=r(n(16)),i=n(15);function r(e){return e&&e.__esModule?e:{default:e}}var v={key:!0,ref:!0};function y(){if(p.default.component){var e=p.default.component.getName();if(e)return" Check the render method of `"+e+"`."}return""}function m(e,t,n,r,o){return i.isWeex&&(r=function(e,t){if("text"===e){var n=t.children,r=t.value;null==r&&null!=n&&(Array.isArray(n)?n=n.map(function(e){return"number"==typeof e||"string"==typeof e?e:""}).join(""):"number"!=typeof n&&"string"!=typeof n&&(n=""),t.value=String(n)),t.children=null}return t}(e,r)),{type:e,key:t,ref:n,props:r,_owner:o}}function o(e,t,n){var r=arguments;if(null==e)throw Error("createElement: type should not be null or undefined."+y());var o={},i=void 0,a=null,u=null;if(null!=t)for(i in u=void 0===t.ref?null:t.ref,a=void 0===t.key?null:String(t.key),t)v[i]||(o[i]=t[i]);var s=arguments.length-2;if(0<s)if(1!==s||Array.isArray(n)){var l=n;if(1<s){l=new Array(s);for(var c=0;c<s;c++)l[c]=r[c+2]}o.children=(0,h.default)(l)}else o.children=n;if(e&&e.defaultProps){var f=e.defaultProps;for(i in f)void 0===o[i]&&(o[i]=f[i])}return o.style&&(Array.isArray(o.style)||"object"===d(o.style))&&(o.style=function e(t){if(t){if(Array.isArray(t)){for(var n={},r=0;r<t.length;++r){var o=e(t[r]);if(o)for(var i in o)n[i]=o[i]}return n}return t}}(o.style)),new m(e,a,u,o,p.default.component)}function _(e){return"object"===(void 0===e?"undefined":d(e))&&null!==e&&e.type&&e.props}t.default=m},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};t.default=function(e){if(null==e)return null;if(e.ownerDocument||e.nodeType)return e;if(e._nativeNode)return e._nativeNode;if("string"==typeof e)return i.default.driver.getElementById(e);if("function"!=typeof e.render)throw new Error("findDOMNode: find by neither component nor DOM node.");var t=e._internal;if(t){for(;!t._nativeNode;)if(null==(t=t._renderedComponent))return null;return t._nativeNode}throw new Error("findDOMNode: find on an unmounted component.")},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.transformPropsAttrsToStyle=function(t,e){return t.style=t.style||{},e.forEach(function(e){t[e]&&!t.style[e]&&(t.style[e]=t[e],delete t[e])}),t},t.renamePropsAttr=function(e,t,n){e[t]&&!e[n]&&(e[n]=e[t],delete e[t]);return e},t.default=e.exports,t.default=e.exports},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)};t.isRem=c,t.calcRem=f,t.getRem=d,t.setRem=p,t.isUnitNumber=h,t.convertUnit=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:d();{if(t&&h(e,t))return e*n+"px";if(c(e))return f(e,n)}return e};var i={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,lines:!0},a=/\d+(rem|rpx)/,u=/[-+]?\d*\.?\d+(rem|rpx)/g,s="__global_rem_unit__",l="object"===("undefined"==typeof window?"undefined":o(window))?window:"object"===(void 0===l?"undefined":o(l))?l:{};function c(e){return a.test(e)}function f(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:d();return e.replace(u,function(e){return parseFloat(e)*t+"px"})}function d(){return l[s]}function p(e){l[s]=e}function h(e,t){return"number"==typeof e&&!i[t]}void 0===d()&&p(1),t.default=e.exports,t.default=e.exports},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){var r=t&&t.key,o="string"==typeof r,i="."+n.toString(36);if(o){var a="$"+r,u=void 0===e[a];return u||console.warn('Encountered two children with the same key "'+r+'".'),u?a:i}return i},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={update:function(e,t,n){var r=null!=e&&e.ref,o=null!=t&&t.ref;r!==o&&(null!=r&&this.detach(e._owner,r,n),null!=o&&this.attach(t._owner,o,n))},attach:function(e,t,n){if(!e)throw new Error("You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of Rax loaded.");var r=n.getPublicInstance();"function"==typeof t?t(r):e._instance.refs[t]=r},detach:function(e,t,n){if("function"==typeof t)t(null);else{var r=n.getPublicInstance();e._instance.refs[t]===r&&delete e._instance.refs[t]}}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),_=i(n(0)),l=i(n(12)),b=i(n(3)),g=i(n(5)),w=i(n(11)),o=i(n(1));function i(e){return e&&e.__esModule?e:{default:e}}var c="style",f="children",d=/^on[A-Z]/,a=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this._currentElement=e}return r(t,[{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n,this._mountID=_.default.mountID++;var o=this._currentElement.props,i={_internal:this,type:this._currentElement.type,props:o},a=o.append;this._instance=i,this._prevStyleCopy=Object.assign({},o.style);var u=this.getNativeNode();"tree"!==a&&(r?r(u,e):_.default.driver.appendChild(u,e)),this._currentElement&&this._currentElement.ref&&l.default.attach(this._currentElement._owner,this._currentElement.ref,this);var s=o.children;return null!=s&&this.mountChildren(s,n),"tree"===a&&(r?r(u,e):_.default.driver.appendChild(u,e)),_.default.hook.Reconciler.mountComponent(this),i}},{key:"mountChildren",value:function(e,o){var i=this;Array.isArray(e)||(e=[e]);var a=this._renderedChildren={};return e.map(function(e,t){var n=(0,b.default)(e),r=(0,w.default)(a,e,t);return(a[r]=n)._mountIndex=t,n.mountComponent(i.getNativeNode(),i._instance,o,null)})}},{key:"unmountChildren",value:function(e){var t=this._renderedChildren;if(t){for(var n in t){t[n].unmountComponent(e)}this._renderedChildren=null}}},{key:"unmountComponent",value:function(e){if(this._nativeNode){var t=this._currentElement.ref;t&&l.default.detach(this._currentElement._owner,t,this),o.default.remove(this._nativeNode),e||_.default.driver.removeChild(this._nativeNode,this._parent),_.default.driver.removeAllEventListeners(this._nativeNode)}this.unmountChildren(e),_.default.hook.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._parentInstance=null,this._context=null,this._instance=null,this._prevStyleCopy=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,l.default.update(e,t,this);var o=e.props,i=t.props;this.updateProperties(o,i),this.updateChildren(i.children,r),_.default.hook.Reconciler.receiveComponent(this)}},{key:"updateProperties",value:function(e,t){var n=this,r=void 0,o=void 0,i=void 0;for(r in e)if(r!==f&&!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if(r===c){var a=n._prevStyleCopy;for(o in a)a.hasOwnProperty(o)&&((i=i||{})[o]="");n._prevStyleCopy=null}else d.test(r)?"function"==typeof e[r]&&_.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),e[r]):_.default.driver.removeAttribute(n.getNativeNode(),r,e[r]);for(r in t){var u=t[r],s=r===c?n._prevStyleCopy:null!=e?e[r]:void 0;if(r!==f&&t.hasOwnProperty(r)&&u!==s&&(null!=u||null!=s))if(r===c)if(u?u=n._prevStyleCopy=Object.assign({},u):n._prevStyleCopy=null,null!=s){for(o in s)!s.hasOwnProperty(o)||u&&u.hasOwnProperty(o)||((i=i||{})[o]="");for(o in u)u.hasOwnProperty(o)&&s[o]!==u[o]&&((i=i||{})[o]=u[o])}else i=u;else if(d.test(r)){var l=r.slice(2).toLowerCase();"function"==typeof s&&_.default.driver.removeEventListener(n.getNativeNode(),l,s,t),"function"==typeof u&&_.default.driver.addEventListener(n.getNativeNode(),l,u,t)}else null!=u?_.default.driver.setAttribute(n.getNativeNode(),r,u):_.default.driver.removeAttribute(n.getNativeNode(),r,e[r])}i&&_.default.driver.setStyles(this.getNativeNode(),i)}},{key:"updateChildren",value:function(e,u){var s=this,l=this._renderedChildren;if(null!=e||null!=l){var p={},h={};if(null!=e){Array.isArray(e)||(e=[e]);for(var t=0,n=e.length;t<n;t++){var r=e[t],o=(0,w.default)(p,r,t),i=l&&l[o],a=i&&i._currentElement;if(null!=i&&(0,g.default)(a,r))i.updateComponent(a,r,u,u),p[o]=i;else{if(i){var c=i.getNativeNode();i.unmountComponent(!0),h[o]=c}p[o]=(0,b.default)(r)}}}var v=void 0,f=void 0;if(null!=l)for(var d in l)if(l.hasOwnProperty(d)){var y=l[d],m=!p[d];v?m&&y.unmountComponent():(v=y,f=m)}null!=p&&function(){var i=0,a=0,f=null,d=[],e=function(c){if(!p.hasOwnProperty(c))return"continue";var e=p[c],t=l&&l[c];if(t===e){var n=t.getNativeNode();if(Array.isArray(n)||(n=[n]),t._mountIndex<i){Array.isArray(f)&&(f=f[f.length-1]);for(var r=n.length-1;0<=r;r--)_.default.driver.insertAfter(n[r],f)}d=d.concat(n),i=Math.max(t._mountIndex,i),t._mountIndex=a}else{null!=t&&(i=Math.max(t._mountIndex,i));var o=s.getNativeNode();Array.isArray(o)&&(o=s._parent),e.mountComponent(o,s._instance,u,function(e,t){var n=h[c];if(Array.isArray(e)||(e=[e]),n){Array.isArray(n)||(n=[n]);for(var r=void 0,o=0;o<e.length;o++){var i=e[o];n[o]?_.default.driver.replaceChild(i,n[o]):_.default.driver.insertAfter(i,r),r=i}if(e.length<n.length)for(var a=e.length;a<n.length;a++)_.default.driver.removeChild(n[a])}else{Array.isArray(f)&&(f=f[f.length-1]);var u=void 0;v&&!f&&(u=v.getNativeNode(),Array.isArray(u)&&(u=u[0]));for(var s=e.length-1;0<=s;s--){var l=e[s];f?_.default.driver.insertAfter(l,f):u?_.default.driver.insertBefore(l,u):_.default.driver.appendChild(l,t)}}d=d.concat(e)}),e._mountIndex=a}a++,f=e.getNativeNode()};for(var t in p)e(t);if(Array.isArray(s._nativeNode)){s._nativeNode.splice(0,s._nativeNode.length);for(var n=0;n<d.length;n++)s._nativeNode.push(d[n])}}(),f&&v.unmountComponent(),this._renderedChildren=p}}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=_.default.driver.createElement(this._instance),o.default.set(this._nativeNode,this._instance)),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return this._currentElement.type}}]),t}();t.default=a,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){function t(e,t,n,r,o,i){return a}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}();t.default={array:a,bool:a,func:a,number:a,object:a,string:a,symbol:a,element:a,node:a,any:a,arrayOf:a,instanceOf:a,objectOf:a,oneOf:a,oneOfType:a,shape:a},e.exports=t.default},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)};t.isWeb="object"===("undefined"==typeof navigator?"undefined":o(navigator))&&("Mozilla"===navigator.appCodeName||"Gecko"===navigator.product),t.isNode=void 0!==process&&!(!process.versions||!process.versions.node),t.isWeex="function"==typeof callNative||"object"===("undefined"==typeof WXEnvironment?"undefined":o(WXEnvironment))&&"Web"!==WXEnvironment.platform,t.isReactNative="undefined"!=typeof __fbBatchedBridgeConfig;t.default=e.exports,t.default=e.exports},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(null==e)return e;var t=[];(function e(t,n){if(Array.isArray(t))for(var r=0,o=t.length;r<o;r++)e(t[r],n);else n.push(t)})(e,t),1===t.length&&(t=t[0]);return t},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(1)),o=i(n(0));function i(e){return e&&e.__esModule?e:{default:e}}t.default={ComponentTree:{getClosestInstanceFromNode:function(e){return r.default.get(e)},getNodeFromInstance:function(e){for(;e._renderedComponent;)e=e._renderedComponent;return e?e._nativeNode:null}},Mount:{_instancesByReactRootID:o.default.rootComponents,_renderNewRootComponent:function(){}},Reconciler:{mountComponent:function(){},receiveComponent:function(){},unmountComponent:function(){}},monitor:null},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}();t.default=function(s){var l="__context_"+u+++"__",e=function(e){function u(){var e,t,n,r=arguments;p(this,u);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=r[a];return n=f(this,(e=u.__proto__||Object.getPrototypeOf(u)).call.apply(e,[this].concat(i))),(t=n).emitter=new h(s),f(n,t)}return d(u,e),r(u,[{key:"getChildContext",value:function(){return c({},l,this.emitter)}},{key:"componentWillMount",value:function(){void 0!==this.props.value&&(this.emitter.value=this.props.value)}},{key:"componentWillReceiveProps",value:function(e){this.props.value!==e.value&&this.emitter.emit(e.value)}},{key:"render",value:function(){return this.props.children}}]),u}(o.default);e.childContextTypes=c({},l,i.default.object);var t=function(e){function u(){var e,t,n,r=arguments;p(this,u);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=r[a];return n=f(this,(e=u.__proto__||Object.getPrototypeOf(u)).call.apply(e,[this].concat(i))),(t=n).state={value:n.context[l]?n.context[l].value:s},n.onUpdate=function(e){return n.setState({value:e})},f(n,t)}return d(u,e),r(u,[{key:"componentDidMount",value:function(){this.context[l]&&this.context[l].on(this.onUpdate)}},{key:"componentWillUnmount",value:function(){this.context[l]&&this.context[l].off(this.onUpdate)}},{key:"render",value:function(){var e=this.props.children,t=Array.isArray(e)?e[0]:e;if("function"==typeof t)return t(this.state.value)}}]),u}(o.default);return t.contextTypes=c({},l,i.default.object),{Provider:e,Consumer:t}};var o=a(n(2)),i=a(n(14));function a(e){return e&&e.__esModule?e:{default:e}}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function d(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var h=function(){function t(e){p(this,t),this.handlers=[],this.value=e}return r(t,[{key:"on",value:function(e){this.handlers.push(e)}},{key:"off",value:function(t){this.handlers=this.handlers.filter(function(e){return e!==t})}},{key:"emit",value:function(t){this.value=t,this.handlers.forEach(function(e){return e(t)})}}]),t}(),u=0;e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(16),i=(r=o)&&r.__esModule?r:{default:r};function a(e){return e=(0,i.default)(e,[]),Array.isArray(e)?e:[].concat(e)}var u={map:function(e,n,r){return null==e?null:(e=a(e)).map(function(e,t){return n.call(r,e,t)})},forEach:function(e,n,r){if(null==e)return null;(e=a(e)).forEach(function(e,t){return n.call(r,e,t)})},count:function(e){return null==e?0:a(e).length},only:function(e){if(1!==(e=u.toArray(e)).length)throw new Error("Children.only: expected to receive a single element child.");return e[0]},toArray:function(e){return null==e?[]:a(e).filter(function(e){return null!==e})}};t.default=u,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default="0.6.4",e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){e=(0,o.default)(e),r.default.driver.setNativeProps(e,t)};var r=i(n(0)),o=i(n(8));function i(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(1),i=(r=o)&&r.__esModule?r:{default:r};t.default=function(e){return null==e?null:i.default.get(e)},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}();t.default=function(e,t){return(0,u.createElement)(l,{element:e,container:t})};var o=s(n(2)),i=s(n(4)),a=s(n(6)),u=n(7);function s(e){return e&&e.__esModule?e:{default:e}}var l=function(e){function n(e,t){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e,t))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,o.default),r(n,[{key:"componentDidMount",value:function(){this.renderPortal()}},{key:"componentDidUpdate",value:function(e){e.container!==this.props.container&&(0,a.default)(e.container),this.renderPortal()}},{key:"componentWillUnmount",value:function(){(0,a.default)(this.props.container)}},{key:"renderPortal",value:function(){(0,i.default)(this.props.element,this.props.container,{parent:this})}},{key:"render",value:function(){return null}}]),n}();e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(4),u=(r=o)&&r.__esModule?r:{default:r};t.default=function(e,t,n,r){if(t.childNodes)for(var o=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(t.childNodes)),i=0;i<o.length;i++){var a=o[i];t.removeChild(a)}return(0,u.default)(e,t,n,r)},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r={stretch:"stretch","flex-start":"start","flex-end":"end",center:"center"},o={row:"horizontal",column:"vertical"},i={"flex-start":"start","flex-end":"end",center:"center","space-between":"justify","space-around":"justify"},a={display:!0,flex:!0,alignItems:!0,alignSelf:!0,flexDirection:!0,justifyContent:!0,flexWrap:!0},u={isFlexProp:function(e){return a[e]},display:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.display="flex"===e?["-webkit-box","-webkit-flex","flex"]:e,t},flex:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxFlex=e,t.webkitFlex=e,t.flex=e,t},flexWrap:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.webkitFlexWrap=e,t.flexWrap=e,t},alignItems:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxAlign=r[e],t.webkitAlignItems=e,t.alignItems=e,t},alignSelf:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.webkitAlignSelf=e,t.alignSelf=e,t},flexDirection:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxOrient=o[e],t.webkitFlexDirection=e,t.flexDirection=e,t},justifyContent:function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxPack=i[e],t.webkitJustifyContent=e,t.justifyContent=e,t}};t.default=u,e.exports=t.default},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o,i="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)},s=n(10),a=n(25),l=(o=a)&&o.__esModule?o:{default:o};var u="dangerouslySetInnerHTML",c="className",f=/^on[A-Z]/,d="object"===(void 0===v?"undefined":i(v))&&"textContent"in v?"textContent":"nodeValue",p=["svg","circle","ellipse","line","rect","polygon","polyline","path","text","defs","stop","linearGradient","radialGradient","textPath","use","g","tspan","tref","clipPath"],h={deviceWidth:"undefined"!=typeof DEVICE_WIDTH&&DEVICE_WIDTH||null,viewportWidth:"undefined"!=typeof VIEWPORT_WIDTH&&VIEWPORT_WIDTH||750,eventRegistry:{},getDeviceWidth:function(){return this.deviceWidth||v.documentElement.clientWidth},setDeviceWidth:function(e){this.deviceWidth=e},getViewportWidth:function(){return this.viewportWidth},setViewportWidth:function(e){this.viewportWidth=e},getElementById:function(e){return v.getElementById(e)},createBody:function(){return v.body},createComment:function(e){return v.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return v.createTextNode(e)},updateText:function(e,t){e[d]=t},createElement:function(e){var t=void 0;t=e&&-1<p.indexOf(e.type)?v.createElementNS("http://www.w3.org/2000/svg",e.type):v.createElement(e.type);var n=e.props;return this.setNativeProps(t,n),t},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){(t=t||e.parentNode)&&t.removeChild(e)},replaceChild:function(e,t,n){(n=n||t.parentNode).replaceChild(e,t)},insertAfter:function(e,t,n){n=n||t.parentNode;var r=t.nextSibling;r?n.insertBefore(e,r):n.appendChild(e)},insertBefore:function(e,t,n){(n=n||t.parentNode).insertBefore(e,t)},addEventListener:function(e,t,n,r){return this.eventRegistry[t]?this.eventRegistry[t]("addEvent",e,t,n,r):e.addEventListener(t,n)},removeEventListener:function(e,t,n,r){return this.eventRegistry[t]?this.eventRegistry[t]("removeEvent",e,t,n,r):e.removeEventListener(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t){if(t===u)return e.innerHTML=null;if(t===c&&(t="class"),t in e)try{e[t]=null}catch(e){}e.removeAttribute(t)},setAttribute:function(t,n,r){if(n===u)return t.innerHTML=r.__html;if(n===c&&(n="class"),n in t)try{t[n]=r}catch(e){t.setAttribute(n,r)}else t.setAttribute(n,r)},setStyles:function(e,t){var n={};for(var r in t){var o=t[r];l.default.isFlexProp(r)?l.default[r](o,n):n[r]=(0,s.convertUnit)(o,r)}for(var i in n){var a=n[i];if(Array.isArray(a))for(var u=0;u<a.length;u++)e.style[i]=a[u];else e.style[i]=a}},beforeRender:function(){(0,s.setRem)(this.getDeviceWidth()/this.getViewportWidth())},setNativeProps:function(e,t){for(var n in t){var r=t[n];if("children"!==n&&null!=r)if("style"===n)this.setStyles(e,r);else if(f.test(n)){var o=n.slice(2).toLowerCase();this.addEventListener(e,o,r)}else this.setAttribute(e,n,r)}}};t.default=h,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){return e.type="div",e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e};function o(e,t,n){return{fontSize:e*t,marginTop:e*t*n,marginBottom:e*t*n,fontWeight:"bold"}}var i={h1:o(28,2,.67),h2:o(28,1.5,.83),h3:o(28,1.17,1),h4:o(28,1,1.33),h5:o(28,.83,1.67),h6:o(28,.67,2.33)};t.default={parse:function(e){var t=e.type,n=e.props;return e.type="text",n.style=r({},i[t]||i.h6,n.style),"string"!=typeof n.children||n.value||(n.value=n.children,n.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e};t.default={parse:function(e){var t=e.props;e.type="text";var n=t.style,r=t.disabled,o=t.children,i=a({textAlign:"center",fontSize:22,paddingTop:4,paddingRight:12,paddingBottom:6,paddingLeft:12,borderWidth:4,borderStyle:"solid",borderColor:"#000000",backgroudColor:"#c0c0c0"},n);return r&&(t.onClick=null,i=a({},i,{color:"#7f7f7f",borderColor:"#7f7f7f"})),"string"==typeof o&&(t.value=o,t.children=null),e}},e.exports=t.default},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)},a=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},i={fontSize:28,marginTop:28,marginBottom:28},u={u:{textDecoration:"underline"},s:{textDecoration:"line-through"},i:{fontStyle:"italic"},b:{fontWeight:"bold"},del:{textDecoration:"line-through"},em:{fontStyle:"italic"},strong:{fontWeight:"bold"},big:{fontSize:33.6},small:{fontSize:28*.8}};function s(e){var t=e.type,n=e.props,r=n.style,o=n.children;"img"===t&&(t="image"),u[t]&&(r=a({},u[t],r),t="span"),n.style=null,n.children=null;var i={type:t,style:r,attr:n||{}};return o&&("span"===t&&"string"==typeof o?i.attr.value=o:i.children=l(o)),i}function l(e){var t=[];Array.isArray(e)||(e=[e]);for(var n=0;n<e.length;n++){var r=e[n];"string"==typeof r?t.push({type:"span",attr:{value:r}}):"object"===(void 0===r?"undefined":o(r))&&t.push(s(r))}return t}t.default={parse:function(e){var t=e.props,n=t.children;return e.type="richtext",t.style=a({},i,t.style),t.value=l(n),t.children=null,e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){var t=e.props;return e.type="text","string"!=typeof t.children||t.value||(t.value=t.children,t.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){var t=e.props;return"string"!=typeof t.children||t.value||(t.value=t.children,t.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(9);t.default={parse:function(e){var t=e.props;return e.props=(0,r.transformPropsAttrsToStyle)(t,["width","height"]),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(9);t.default={parse:function(e){var t=e.props;return e.type="image",e.props=(0,r.transformPropsAttrsToStyle)(t,["width","height"]),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=f(n(34)),o=f(n(33)),i=f(n(32)),a=f(n(31)),u=f(n(30)),s=f(n(29)),l=f(n(28)),c=f(n(27));function f(e){return e&&e.__esModule?e:{default:e}}t.default={span:a.default,p:u.default,img:r.default,button:s.default,video:o.default,textarea:i.default,h1:l.default,h2:l.default,h3:l.default,h4:l.default,h5:l.default,h6:l.default,nav:c.default,article:c.default,section:c.default,footer:c.default,aside:c.default,main:c.default},e.exports=t.default},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o,i="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)},u=n(10),a=n(35),s=(o=a)&&o.__esModule?o:{default:o};var l=/^on[A-Z]/,c=/^aria-/,f={},d="object"===(void 0===h?"undefined":i(h))?h:"object"===(void 0===d?"undefined":i(d))?d:null,p={deviceWidth:750,viewportWidth:750,getDeviceWidth:function(){return this.deviceWidth},setDeviceWidth:function(e){this.deviceWidth=e},getViewportWidth:function(){return this.viewportWidth},setViewportWidth:function(e){this.viewportWidth=e},getElementById:function(e){return f[e]},createBody:function(){if(d.body)return d.body;var e=d.documentElement,t=d.createBody(p.bodyType,p.bodyProps);return e.appendChild(t),t},createComment:function(e){return d.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return p.createElement({type:"text",props:{value:e}})},updateText:function(e,t){this.setAttribute(e,"value",t)},createElement:function(e){var t=s.default[e.type];t&&(e=t.parse(e));var n=e.props,r={},o=n.style;for(var i in o)r[i]=(0,u.convertUnit)(o[i],i);var a=d.createElement(e.type,{style:r});return this.setNativeProps(a,n,!0),a},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){t=t||e.parentNode;var n=e.attr&&e.attr.id;return null!=n&&(f[n]=null),t.removeChild(e)},replaceChild:function(e,t,n){n=n||t.parentNode;var r=t.previousSibling,o=t.nextSibling;this.removeChild(t,n),r?this.insertAfter(e,r,n):o?this.insertBefore(e,o,n):this.appendChild(e,n)},insertAfter:function(e,t,n){return(n=n||t.parentNode).insertAfter(e,t)},insertBefore:function(e,t,n){return(n=n||t.parentNode).insertBefore(e,t)},addEventListener:function(e,t,n,r){var o=r[t+"EventParams"];return e.addEvent(t,n,o)},removeEventListener:function(e,t,n){return e.removeEvent(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t,n){return"id"==t&&(f[n]=null),e.setAttr(t,void 0,!1)},setAttribute:function(e,t,n){return"id"==t&&(f[n]=e),c.test(t)&&(t=t.replace(/\-(\w)/,function(e,t){return t.toUpperCase()})),e.setAttr(t,n,!1)},setStyles:function(e,t){for(var n in t){var r=t[n];r=(0,u.convertUnit)(r,n),e.setStyle(n,r)}},beforeRender:function(){d.open(),(0,u.setRem)(this.getDeviceWidth()/this.getViewportWidth())},afterRender:function(){d.listener&&d.listener.createFinish&&d.listener.createFinish(),d.close()},setNativeProps:function(e,t,n){for(var r in t){var o=t[r];if("children"!==r&&null!=o)if("style"===r){if(n)continue;this.setStyles(e,o)}else if(l.test(r)){var i=r.slice(2).toLowerCase();this.addEventListener(e,i,o,t)}else this.setAttribute(e,r,o)}}};t.default=p,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),c=a(n(0)),o=a(n(13)),i=a(n(1)),s=a(n(3)),l=a(n(11));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.default),r(t,[{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n,this._mountID=c.default.mountID++;var o={_internal:this};this._instance=o;var i=this.getNativeNode(),a=this._currentElement;if(this.mountChildren(a,n),r)r(i,e);else for(var u=Array.isArray(e),s=0;s<i.length;s++){var l=i[s];u?e.push(l):c.default.driver.appendChild(l,e)}return o}},{key:"mountChildren",value:function(e,o){var i=this,a=this._renderedChildren={},u=this.getNativeNode();return e.map(function(e,t){var n=(0,s.default)(e),r=(0,l.default)(a,e,t);return(a[r]=n)._mountIndex=t,n.mountComponent(i._parent,i._instance,o,function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)u.push(e[t]);else u.push(e)})})}},{key:"unmountComponent",value:function(e){if(this._nativeNode&&(i.default.remove(this._nativeNode),!e))for(var t=0;t<this._nativeNode.length;t++)c.default.driver.removeChild(this._nativeNode[t]);this.unmountChildren(!0),this._currentElement=null,this._nativeNode=null,this._parent=null,this._parentInstance=null,this._context=null,this._instance=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,this.updateChildren(this._currentElement,r)}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=[]),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return"fragment"}}]),t}();t.default=u,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.prototype.hasOwnProperty;function u(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}t.default=function(e,t){if(u(e,t))return!0;if("object"!==(void 0===e?"undefined":i(e))||null===e||"object"!==(void 0===t?"undefined":i(t))||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o<n.length;o++)if(!a.call(t,n[o])||!u(e[n[o]],t[n[o]]))return!1;return!0},e.exports=t.default},function(e,t,n){function a(e,t){t&&(e._pendingCallbacks||(e._pendingCallbacks=[])).push(t)}Object.defineProperty(t,"__esModule",{value:!0});var r={setState:function(e,t,n){var r,o,i=e._internal;i&&(r=i,(o=t)&&(r._pendingStateQueue||(r._pendingStateQueue=[])).push(o),a(i,n),!i._pendingState&&i._renderedComponent&&this.runUpdate(e))},forceUpdate:function(e,t){var n=e._internal;n&&(n._pendingForceUpdate=!0,a(n,t),n._renderedComponent&&this.runUpdate(e))},runUpdate:function(e){var t=e._internal,n=t._pendingCallbacks;t._pendingCallbacks=null;var r=t._currentElement,o=t._context;(t._pendingStateQueue||t._pendingForceUpdate)&&t.updateComponent(r,r,o,o),this.runCallbacks(n,e)},runCallbacks:function(e,t){if(e)for(var n=0;n<e.length;n++)e[n].call(t)}};t.default=r,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=n(0);(r=i)&&r.__esModule;var a=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.pureRender=e}return o(t,[{key:"render",value:function(){return this.pureRender(this.props,this.context)}}]),t}();t.default=a,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),v=o(n(40)),y=o(n(39)),m=o(n(0)),_=o(n(12)),b=o(n(3)),i=o(n(5)),g=o(n(38));function o(e){return e&&e.__esModule?e:{default:e}}function w(e,t,n){try{return e()}catch(e){n?n(e):x(t,e)}}function x(e,t){for(var n=void 0;e;){if("function"==typeof e.componentDidCatch){n=e;break}if(!e._internal||!e._internal._parentInstance)break;e=e._internal._parentInstance}if(n)n.componentDidCatch(t);else{if(!m.default.sandbox)throw t;setTimeout(function(){throw t},0)}}var a=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this._currentElement=e}return r(t,[{key:"getName",value:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null}},{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n,this._mountID=m.default.mountID++,this._updateCount=0;var o=this._currentElement.type,i=this._currentElement.props,a=o.prototype,u=a&&o.prototype.isComponentClass,s=a&&o.prototype.render,l=this._processContext(n),c=void 0,f=void 0;if(u||s)c=new o(i,l,y.default);else{if("function"!=typeof o)throw new Error("Invalid component type: "+o+". (keys: "+Object.keys(o)+")");c=new v.default(o)}c.props=i,c.context=l,c.refs={},c.updater=y.default;var d=((c._internal=this)._instance=c).state;void 0===d&&(c.state=d=null);var p=null,h=function(e){p=e};return c.componentWillMount&&w(function(){c.componentWillMount()},c,h),null==f&&(m.default.component=this,c.state=this._processPendingState(i,l),w(function(){f=c.render()},c,h),m.default.component=null),this._renderedComponent=(0,b.default)(f),this._renderedComponent.mountComponent(this._parent,c,this._processChildContext(n),r),p&&x(c,p),this._currentElement&&this._currentElement.ref&&_.default.attach(this._currentElement._owner,this._currentElement.ref,this),c.componentDidMount&&w(function(){c.componentDidMount()},c),m.default.hook.Reconciler.mountComponent(this),c}},{key:"unmountComponent",value:function(e){var t=this._instance;if(t.componentWillUnmount&&w(function(){t.componentWillUnmount()},t),m.default.hook.Reconciler.unmountComponent(this),(t._internal=null)!=this._renderedComponent){var n=this._currentElement.ref;n&&_.default.detach(this._currentElement._owner,n,this),this._renderedComponent.unmountComponent(e),this._renderedComponent=null,this._instance=null}this._currentElement=null,this._parentInstance=null,this._pendingStateQueue=null,this._pendingForceUpdate=!1,this._context=null}},{key:"_processContext",value:function(e){var t=this._currentElement.type.contextTypes;if(!t)return{};var n={};for(var r in t)n[r]=e[r];return n}},{key:"_processChildContext",value:function(e){var t=this._instance,n=t.getChildContext&&t.getChildContext();return n?Object.assign({},e,n):e}},{key:"_processPendingState",value:function(e,t){var n=this._instance,r=this._pendingStateQueue;if(!r)return n.state;this._pendingStateQueue=null;for(var o=Object.assign({},n.state),i=0;i<r.length;i++){var a=r[i];Object.assign(o,"function"==typeof a?a.call(n,o,e,t):a)}return o}},{key:"updateComponent",value:function(e,t,n,r){var o=this._instance;o||console.error("Update component '"+this.getName()+"' that has already been unmounted (or failed to mount).");var i=!1,a=void 0,u=void 0;this._context===r?a=o.context:(a=this._processContext(r),i=!0),e===t?u=t.props:(u=t.props,i=!0);var s=i&&o.componentWillReceiveProps;s&&(this._pendingState=!0,w(function(){o.componentWillReceiveProps(u,a)},o),this._pendingState=!1),_.default.update(e,t,this);var l=!0,c=o.props,f=o.state,d=this._processPendingState(u,a);if(this._pendingForceUpdate||(o.shouldComponentUpdate?l=w(function(){return o.shouldComponentUpdate(u,d,a)},o):o.isPureComponentClass&&(l=!(0,g.default)(c,u)||!(0,g.default)(f,d))),l){this._pendingForceUpdate=!1;var p=o.context;w(function(){o.componentWillUpdate&&o.componentWillUpdate(u,d,a)},o),this._currentElement=t,this._context=r,o.props=u,o.state=d,o.context=a,this._updateRenderedComponent(r),w(function(){o.componentDidUpdate&&o.componentDidUpdate(c,f,p)},o),this._updateCount++}else this._currentElement=t,this._context=r,o.props=u,o.state=d,o.context=a;if(s){var h=this._pendingCallbacks;this._pendingCallbacks=null,y.default.runCallbacks(h,o)}m.default.hook.Reconciler.receiveComponent(this)}},{key:"_updateRenderedComponent",value:function(e){var t=this._renderedComponent,n=t._currentElement,r=this._instance,o=void 0;if(m.default.component=this,w(function(){o=r.render()},r),m.default.component=null,(0,i.default)(n,o))t.updateComponent(n,o,t._context,this._processChildContext(e));else{var a=t.getNativeNode();t.unmountComponent(!0),this._renderedComponent=(0,b.default)(o),this._renderedComponent.mountComponent(this._parent,r,this._processChildContext(e),function(e,t){Array.isArray(e)||(e=[e]),Array.isArray(a)||(a=[a]);for(var n=void 0,r=0;r<e.length;r++){var o=e[r];a[r]?m.default.driver.replaceChild(o,a[r]):m.default.driver.insertAfter(o,n),n=o}if(e.length<a.length)for(var i=e.length;i<a.length;i++)m.default.driver.removeChild(a[i])})}}},{key:"getNativeNode",value:function(){var e=this._renderedComponent;if(e)return e.getNativeNode()}},{key:"getPublicInstance",value:function(){var e=this._instance;return e instanceof v.default?null:e}}]),t}();t.default=a,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=n(0),a=(r=i)&&r.__esModule?r:{default:r};var u=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this._currentElement=e,this._stringText=String(e)}return o(t,[{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n,this._mountID=a.default.mountID++;var o=this.getNativeNode();r?r(o,e):a.default.driver.appendChild(o,e);var i={_internal:this};return a.default.hook.Reconciler.mountComponent(this),i}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&a.default.driver.removeChild(this._nativeNode,this._parent),a.default.hook.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._parentInstance=null,this._context=null,this._stringText=null}},{key:"updateComponent",value:function(e,t,n){e!==t&&(this._currentElement=t,this._stringText=String(t),a.default.driver.updateText(this.getNativeNode(),this._stringText),a.default.hook.Reconciler.receiveComponent(this))}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=a.default.driver.createText(this._stringText)),this._nativeNode}}]),t}();t.default=u,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=n(0),a=(r=i)&&r.__esModule?r:{default:r};var u=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._currentElement=null}return o(e,[{key:"mountComponent",value:function(e,t,n,r){this._parent=e,this._parentInstance=t,this._context=n;var o={_internal:this},i=this.getNativeNode();return r?r(i,e):a.default.driver.appendChild(i,e),o}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&a.default.driver.removeChild(this._nativeNode,this._parent),this._nativeNode=null,this._parent=null,this._parentInstance=null,this._context=null}},{key:"updateComponent",value:function(){}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=a.default.driver.createEmpty()),this._nativeNode}}]),e}();t.default=u,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.driver,n=e.hook,r=e.measurer,o=e.deviceWidth,i=e.viewportWidth,a=e.eventRegistry,u=e.bodyType,s=e.bodyProps;if(c.default.EmptyComponent=f.default,c.default.NativeComponent=d.default,c.default.TextComponent=p.default,c.default.FragmentComponent=v.default,c.default.CompositeComponent=h.default,c.default.hook=n||_.default,c.default.measurer=r,!c.default.driver){if(!t)if(l.isWeex)t=y.default;else{if(!l.isWeb)throw Error("No builtin driver matched");t=m.default}c.default.driver=t}o&&c.default.driver.setDeviceWidth&&c.default.driver.setDeviceWidth(o);i&&c.default.driver.setViewportWidth&&c.default.driver.setViewportWidth(i);a&&(c.default.driver.eventRegistry=a);u&&(c.default.driver.bodyType=u);s&&(c.default.driver.bodyProps=s)};var l=n(15),c=r(n(0)),f=r(n(43)),d=r(n(13)),p=r(n(42)),h=r(n(41)),v=r(n(37)),y=r(n(36)),m=r(n(26)),_=r(n(17));function r(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=n(2),a=(r=i)&&r.__esModule?r:{default:r};var u=function(e){function n(e,t){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e,t))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,a.default),o(n,[{key:"isPureComponentClass",value:function(){}}]),n}();t.default=u,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r,o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=n(2),a=(r=i)&&r.__esModule?r:{default:r};function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var l=1,u=function(e){function u(){var e,t,n,r=arguments;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=r[a];return(t=n=s(this,(e=u.__proto__||Object.getPrototypeOf(u)).call.apply(e,[this].concat(i)))).rootID=l++,s(n,t)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(u,a.default),o(u,[{key:"isRootComponent",value:function(){}},{key:"render",value:function(){return this.props.children}},{key:"getPublicInstance",value:function(){return this.getRenderedComponent().getPublicInstance()}},{key:"getRenderedComponent",value:function(){return this._internal._renderedComponent}}]),u}();t.default=u,e.exports=t.default},function(e,t,n){var r,o=n(17),i=(r=o)&&r.__esModule?r:{default:r};"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(i.default)},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.createContext=t.Children=t.version=t.setNativeProps=t.findComponentInstance=t.unmountComponentAtNode=t.findDOMNode=t.createPortal=t.hydrate=t.render=t.PropTypes=t.PureComponent=t.Component=t.createFactory=t.isValidElement=t.cloneElement=t.createElement=void 0,n(47);var r=n(7),o=m(n(2)),i=m(n(45)),a=m(n(14)),u=m(n(4)),s=m(n(24)),l=m(n(23)),c=m(n(8)),f=m(n(6)),d=m(n(22)),p=m(n(21)),h=m(n(20)),v=m(n(19)),y=m(n(18));function m(e){return e&&e.__esModule?e:{default:e}}t.createElement=r.createElement,t.cloneElement=r.cloneElement,t.isValidElement=r.isValidElement,t.createFactory=r.createFactory,t.Component=o.default,t.PureComponent=i.default,t.PropTypes=a.default,t.render=u.default,t.hydrate=s.default,t.createPortal=l.default,t.findDOMNode=c.default,t.unmountComponentAtNode=f.default,t.findComponentInstance=d.default,t.setNativeProps=p.default,t.version=h.default,t.Children=v.default,t.createContext=y.default}])}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});t.ModuleFactories={rax:n(19)}},function(e,t,n){console.log("Start windmill renderer (0.3.5) framework. Build at 2018-08-10 17:43"),e.exports=function(){"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{writable:!0,enumerable:!1,configurable:!0,value:function(e,t){var n=arguments;if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var r=Object(e),o=1;o<arguments.length;o++){var i=n[o];if(null!=i)for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(r[a]=i[a])}return r}});var t,i=(t=1e5,function(){var e=String(t);return t+=1,e});function u(e){return Object.prototype.toString.call(e).slice(8,-1)}function s(e){return"Object"===u(e)}function o(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n]}var n=function(){},l={},a=["Android","iOS"];function r(e,t){return"object"==typeof process&&process&&process.env&&"test"===process.env.PURPOSE?"function"==typeof __test_logger__&&(n=__test_logger__,!0):(l.debugMode,!0)}function c(e,t){r()&&n("debug",e)}function f(e,t){r()&&n("warn",e)}function d(e,t){r()&&n("error",e)}function p(e){if(d(e),"test"!==process.env.PURPOSE)throw new Error(e)}n=function(e,t){var n,r="["+((n=e).charAt(0).toUpperCase()+n.slice(1))+"][wml-r] "+t;return l.isWeex&&-1<a.indexOf(l.platform)?console.log(r):console.error(r)};var h={miniApp:["setAppShareInfo","hideLauncherLoading"],network:["request"],mtop:["request"],storage:["length","setItem","getItem","removeItem"],memoryStorage:["setItem","getItem"],navigator:["push","pop","openMessagePage","reloadPage","getBackStack","popToHome"],user:["login","logout","info"],modal:["alert","confirm","toast"],navigatorBar:["show","hide","setTitle","setRightItem","setStyle","setDrawer","setActionSheet","hasIndexBadge","scaleIndexBadge","resetIndexBadge","getHeight","openDrawer","isDrawerOpened","closeDrawer","setLeftItem","showMenu","hideMenu","getStatusBarHeight"],clipboard:["writeText","readText"],picker:["pick","pickDate","pickTime","chooseCity"],webSocket:["webSocket","send","close","onOpen","onMessage","onClose","onError"],calendar:["addEvent","checkEvent","removeEvent"],connection:["getType","getDownlinkMax","onChange"],screen:["setAlwaysOn","setBrightness"],broadcast:["createChannel","postMessage","onMessage","close"],share:["doShare"],cookie:["read","write","getAllObjects"],audio:["load","play","pause","stop","setVolume","canPlayType"],wopc:["authLogin","checkAuthSession","doAuth","getSessionKey","setSessionKey"],WopcMtopPlugin:["request"],device:["onShake","vibrate"],keyboard:["hideKeyboard"],contact:["choosePhoneContact"],location:["getLocation"],alipay:["tradePay"],userTrack:["commit","commitut","commitEvent","customAdvance","pageAppear","pageDisappear","skipPage","updatePageUtparam","updateNextPageUtparam"],"nuvajs-exec":["exec"],aluWVJSBridge:["userIsLogin","refreshAlipayCookie"],TBDeviceInfo:["getUtdid"]},e=function(){};e.prototype.$on=function(e,t){return void 0===t&&(t=o),c('$on "'+e+'"'),!e&&p("invalid event name "+e+" for windmill.$on."),t===o&&p("bind event "+e+" with no callback through windmill.$on."),this.bridge.onReceiveMessage({data:{type:e},origin:this.label,type:"Event"},t)},e.prototype.$once=function(e,t){return void 0===t&&(t=o),c('$once "'+e+'"'),!e&&p("invalid event name "+e+" for windmill.$once."),t===o&&p("bind event "+e+" with no callback through windmill.$once."),this.bridge.onReceiveMessage({data:{type:e,once:!0},origin:this.label,type:"Event"},t)},e.prototype.$off=function(e,t){return c('$off "'+e+'"'),!e&&p("invalid event name "+e+" for windmill.$off."),this.bridge.unbindEventListener("Event."+e,t)},e.prototype.$cycle=function(e,t){return void 0===t&&(t=o),c('$cycle "'+e+'"'),e&&/^app:|^page(:|@)/.test(e)||p("invalid lifecycle name "+e+" for windmill.$cycle."),t===o&&p("hook lifecycle "+e+" with no callback function through windmill.$cycle."),"AppWorker"!==this.label&&/^app:/.test(e)&&p("Shouldn't bind lifecycle hook for app in a page client."),this.bridge.onReceiveMessage({type:"Lifecycle",origin:this.label,data:{type:e}},t)},e.prototype.$decycle=function(e,t){return c('$decycle "'+e+'"'),e&&/^app:|^page(:|@)/.test(e)||p("invalid lifecycle name "+e+" for windmill.$decycle."),this.bridge.unbindEventListener("Lifecycle."+e,t)},e.prototype.$emit=function(e,t,n){return void 0===t&&(t={}),c('$emit("'+e+'")'),!e&&p("invalid event name "+e+" for windmill.$emit."),n&&n!==this.label?this.bridge.postMessage({data:{type:e,data:t},origin:this.label,target:n,type:"Event"}):this.bridge.emitEvent(""+e,t)},e.prototype.$callAsync=function(n,r){var o=this;return void 0===r&&(r={}),c('$callAsync "'+n+'"'),n||p("invalid method name "+n+" for windmill.$callAsync."),new Promise(function(e,t){o.bridge.dispatchMessage({type:"ModuleCall",origin:o.label,target:"AppWorker",data:{method:n,params:r}},e,t,!1)})},e.prototype.$call=function(e,t,n,r){return void 0===t&&(t={}),void 0===n&&(n=o),void 0===r&&(r=o),c('$call "'+e+'", params: '+JSON.stringify(t)),e||p("invalid method name "+e+" for windmill.$call."),this.bridge.dispatchMessage({type:"ModuleCall",origin:this.label,target:"AppWorker",data:{method:e,params:t}},n,r,!0)},e.prototype.$registerModules=function(e){!function(r,o){if(void 0===o&&(o=!1),!s(r))return d("Invalid parameter type! The module definition is not a plain object.");var e=function(t){var e=r[t];h[t]?o||f('The "'+t+'" module has already been registered.It would be overridden.'):h[t]=[];var n=h[t];Array.isArray(e)?e.forEach(function(e){-1===n.indexOf(e)?n.push(e):o||f('The "'+e+'" of the "'+t+'" module has already been registered.')}):d('Invalid parameter type! The method list of the "'+t+'" module should be an Array.')};for(var t in r)e(t)}(e,!0)},e.prototype.$getAvailableModules=function(){return function(e){var t={};try{t=JSON.parse(JSON.stringify(e))}catch(e){}return t}(h)};var v="[[EVENT_MAP]]";function y(e,t){var n=e[v];return Array.isArray(n[t])||(n[t]=[]),n[t]}var m,_=function(){c("Create new EventEmitter."),Object.defineProperty(this,v,{configurable:!1,enumerable:!1,writable:!1,value:{}})};function b(t){var n;try{n=JSON.stringify(t)}catch(e){n=t}p("failed to postMessage: "+n)}function g(e,t,n,r,o,i){var a=t+"."+n;return e.WindVane?e.WindVane.call(t,n,r,o,i):p("should have WindVane in global context"+(a?" to call "+a:"")+".")}_.prototype.on=function(e,t){c('EventEmitter: on("'+e+'")');var n=y(this,e);return n.push({listener:t,once:!1,callCount:0}),this},_.prototype.once=function(e,t){c('EventEmitter: once("'+e+'")');var n=y(this,e);return n.push({listener:t,once:!0,callCount:0}),this},_.prototype.off=function(e,t){c('EventEmitter: off("'+e+'"'+(t?", listener":"")+")");var n=this[v];if(t){var r=n[e];if(Array.isArray(r)){var o=r.findIndex(function(e){return e.listener===t});-1!==o&&r.splice(o,1)}}else delete n[e];return this};var w=!(_.prototype.emit=function(t){for(var e=arguments,n=[],r=arguments.length-1;0<r--;)n[r]=e[r+1];c('EventEmitter: emit("'+t+'", '+JSON.stringify(n)+")");var o=this[v],i=o[t];return Array.isArray(i)&&(o[t]=i.filter(function(e){try{e.listener.apply(null,n),e.callCount+=1}catch(e){return d('Failed to emit "'+t+'" event.'),d(e.toString()),!0}return!e.once})),this}),x=function(){this._messages=[]};x.prototype.postMessage=function(e){c("cache message in lazyMsgModule. "+JSON.stringify(e)),this._messages.push(e)},x.prototype.replaceWith=function(e){E=!1,this._messageModule=e,this._flush()},x.prototype._flush=function(){var t=this;this._messages.forEach(function(e){return t._messageModule.postMessage(e)})};var E,S,O=new x;function C(e,t){var n,r=e?(n=e).requireModule("@weex/windmill")||n.requireModule("windmill"):function(){if(!m){var t="undefined"!=typeof window?window:global;m={postMessage:function(e){return g(t,"Windmill","postMessage",e,function(){},b)},onmessage:function(e){if(console.debug("Set onMessage for webview."),!w)return w=!0,g(t,"Windmill","onMessage",{},e,b)}}}return m}();if(!r)return p("can't find message module ("+(e?"windmill module":"message module in webview")+")."),E=!0,O;if("function"==typeof t){c('Set the "onmessage" method to the bridge through callback.');try{r.onmessage(t)}catch(e){d('Failed to set the "onmessage" method to the bridge through callback.'),d(e.toString())}}return E&&O.replaceWith(r),r}function k(e){var t=e.match(/([^@]+)(@\S+)/);return t&&t[1]||e}var P=function(e,t){var a=this;void 0===t&&(t={}),c("Create a new RendererBridge."),S=t.isWeex,this._emitter=new _,c("Register onmessage api for "+(S?"Weex windmill module":"webview")+"."),S&&(this._weex=e),this._onMessage=function(e){if(c("Receive message from the worker. (message: "+JSON.stringify(e)+")"),!s(e)&&(d("The parameter of onmessage should be a plain object! Not "+u(e)),"string"==typeof e))try{e=JSON.parse(e)}catch(e){return void d("Failed to parse the message string. "+e.toString())}var t=e.type,n=e.data;void 0===n&&(n={});var r=e.origin,o=e.callbackId;switch(t){case"Callback":a._emitter.emit("callback@AppWorker:"+o,n);break;case"Event":var i=k(n.type);a._emitter.emit(t+"."+i,Object.assign({origin:r},n,{type:i}));break;case"Lifecycle":a._emitter.emit(t+"."+n.lifecycle,n.options);break;case"SetData":a._emitter.emit("Event.setdata",n);break;default:p('Unknown message type received from worker: "'+t+'"')}},C(e,this._onMessage)};P.prototype.dispatchMessage=function(t,n,r,e){c("Dispatch message to worker. (message: "+JSON.stringify(t)+")"),t.callbackId=this._genCallbackId(function(e){return e.status&&"SUCCESS"===e.status?n(e):(e.status,d("call API "+t.data.method+" from renderer failed: "+e.status+", "+e.error),r(e))},{keepAlive:e});try{t.keepAlive=!0,this.postMessage(t)}catch(e){r(e)}},P.prototype.postMessage=function(e){try{c("Call postMessage to worker. (message: "+JSON.stringify(e)+")"),C(this._weex,this._onMessage).postMessage(e)}catch(e){p(e.message||e.toString()||"postMessage failed.")}},P.prototype._genCallbackId=function(e,t){var n=t.keepAlive,r=t.callbackId,o=r||i();return this._emitter[n?"on":"once"]("callback@AppWorker:"+o,e),o},P.prototype.onReceiveMessage=function(e,t){var n=e.type,r=e.data;void 0===r&&(r={});var o=r.type;"Event"===n&&(o=k(o),r.type=o);var i=r.once?"once":"on";this._emitter[i](n+"."+o,t)},P.prototype.unbindEventListener=function(e,t){this._emitter.off(k(e),t)},P.prototype.emitEvent=function(e,t){void 0===t&&(t={});var n=k(e);this._emitter.emit("Event."+n,{type:n,data:t})};var j=function(n){function e(e,t){n.call(this),e&&s(e.config)&&(this._name=e.config.pageName||"",this.label=e.config.clientId||"",e.config.availableModules?(this.$registerModules(e.config.availableModules),this._gotAvailableModulesFromWeex=!0):f("No available modules in weex options.")),c("Create a new RendererRuntime. ("+this.label+", "+this._name+")"),this.bridge=new P(e,t),this._init()}return n&&(e.__proto__=n),((e.prototype=Object.create(n&&n.prototype)).constructor=e).prototype._init=function(){var t=this;this.bridge.onReceiveMessage({origin:"AppWorker",target:this.label,type:"Event",data:{type:"registerModules"}},function(e){e&&"registerModules"===e.type&&(c("Register available modules in renderer. ("+Object.keys(e.data)+")"),t.$registerModules(e.data))})},e.prototype.ready=function(){this.bridge.dispatchMessage({origin:this.label,target:"AppWorker",type:"Event",data:{type:"[[RendererRuntimeReady]]",data:{label:this.label,handshake:!this._gotAvailableModulesFromWeex}}},o,o)},e}(e),N=["$on","$once","$off","$emit","$cycle","$decycle","$call","$callAsync","$navTo","$getAvailableModules"];return function(e,t){var n=!(!e||!e.requireModule);(function(e){if(!e||!e.platform)return console.error("set logger environment failed.");Object.assign(l,e)})({platform:n&&e.config.env.platform,debugMode:n&&e.config.env.debugMode,isWeex:n}),c("Setup Windmill renderer framework."),e&&!e.requireModule&&(t=e,e=void 0),t||(t={}),c("Instantiate renderer in "+(((t=Object.assign({},t)).isWeex=n)?"Weex container":"WindVane container")+".");var o,i,r=new j(e,t),a=(o=r,i={},N.forEach(function(r){"function"==typeof o[r]&&(i[r]=function(){for(var e=arguments,t=[],n=arguments.length;n--;)t[n]=e[n];return o[r].apply(o,t)})}),i);return c("Prepare runtime APIs: "+JSON.stringify(N)),r.ready(),a}}()},function(e,t,ne){Object.defineProperty(t,"__esModule",{value:!0});var re=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.injectContext=function(){var e=new Function("return this")(),t=o(e);for(var n in t)void 0===e[n]&&"__weex_data__"!=n&&(e[n]=t[n])},t.resetInstanceContext=o;var ie=n(ne(21)),ae=ne(20),ue=n(ne(2));function n(e){return e&&e.__esModule?e:{default:e}}var r="@weex-module/",se=r+"modal",le=r+"navigator",ce=r+"globalEvent",fe=r+"broadcast",de=function(){};function o(e){e.instanceId;var t=e.document,u=e.bundleUrl,n=e.__weex_document__,r=e.__weex_options__,o=e.__weex_data__,i=e.__weex_config__,a=r.weex||{},s="windmill"===a.config.container,l=void 0;s&&(l=(0,ie.default)(a));var c=Date.now(),f="object"===("undefined"==typeof WXEnvironment?"undefined":oe(WXEnvironment))&&WXEnvironment||{},d=ne(18)(),p="function"==typeof p?p:d.Promise,h="function"==typeof h?h:d.Symbol,v="function"==typeof v?v:d.Set,y="function"==typeof y?y:d.Map,m="function"==typeof m?m:d.WeakMap,_="function"==typeof _?_:d.WeakSet,b=d.URL,g=d.URLSearchParams,w=d.FontFace,x=d.matchMedia,E=new b(u),S={},O=ne(17)(S),C=ne(16)(S,a,l),k=ne(15)(C);ne(13)(C,t);var P=ne(12)(C,E),j=ne(11)(C,p),N=j.fetch,M=j.Headers,I=j.Request,A=j.Response,T=ne(10)(C),R=ne(7)(C,s),W=ne(6)(C,t),D=W.setTimeout,L=W.clearTimeout,U=W.setInterval,B=W.clearInterval,F=W.requestAnimationFrame,$=W.cancelAnimationFrame,q=ne(5)(),H=q.atob,z=q.btoa,V=ne(4)(c),G=ne(3)(),J=G.Event,K=G.CustomEvent,X=new ue.default,Q=null;var Z=1,Y={Promise:p,Symbol:h,Map:y,Set:v,WeakMap:m,WeakSet:_,name:"",closed:!1,atob:H,btoa:z,performance:V,document:t,location:P,navigator:{product:"Weex",platform:f.platform,appName:f.appName,appVersion:f.appVersion,userAgent:"Weex/"+f.weexVersion+" "+f.platform+"/"+f.osVersion+" ("+f.deviceModel+") "+f.appName+"/"+f.appVersion},screen:{width:f.deviceWidth,height:f.deviceHeight,availWidth:f.deviceWidth,availHeight:f.deviceHeight,colorDepth:24,pixelDepth:24},devicePixelRatio:f.scale,fetch:N,Headers:M,Response:A,Request:I,XMLHttpRequest:T,URL:b,URLSearchParams:g,FontFace:w,WebSocket:R,Event:J,CustomEvent:K,matchMedia:x,setTimeout:D,clearTimeout:L,setInterval:U,clearInterval:B,requestAnimationFrame:F,cancelAnimationFrame:$,setImmediate:"function"==typeof setImmediate&&setImmediate||function(e){D(e,0)},clearImmediate:"function"==typeof setImmediate&&setImmediate||function(e){L(e)},frameworkVersion:"0.6.1",alert:function(e){C(se).alert({message:e},function(){})},open:function(e){C(le).push({url:e,animated:!0},de)},close:function(){C(le).close({animated:!0},de,de)},postMessage:function(e,t){var n=JSON.parse(JSON.stringify(e)),r={origin:P.origin,data:n,type:"message",source:Y};if(s){Z++,console.log("[rax jsfm] windmill postmessage "+Z);var o="message"+t;"*"==t&&(o="message");var i=C(fe);i.createChannel({instanceId:Z,name:o},function(){i.postMessage({instanceId:Z,message:{data:n}})}),"*"!=t&&"worker"!=t||l.$emit("message",n,"AppWorker")}else if("function"==typeof BroadcastChannel){if("*"==t)new BroadcastChannel("message").postMessage(r);else new BroadcastChannel("message"+t).postMessage(r)}},addEventListener:function(e,t){if("message"===e){if(s){var n=C(fe),r=++Z,o=++Z;n.createChannel({instanceId:r,name:"message"},function(){n.onMessage({instanceId:r},function(e){console.log("[rax jsfm] windmill addEventListener "+r),t({data:e.data})})}),n.createChannel({instanceId:o,name:"message"+u},function(){n.onMessage({instanceId:o},function(e){console.log("[rax jsfm] windmill addEventListener "+o),t({data:e.data})})}),l.$on(e,function(e){e.origin="worker",t(e)})}else if("function"==typeof BroadcastChannel){var i=new BroadcastChannel("message"),a=new BroadcastChannel("message"+u);i.onmessage=function(e){t(e.data)},a.onmessage=function(e){t(e.data)}}}else X.on(e,t)},removeEventListener:function(e,t){X.off(e,t)},dispatchEvent:function(e){console.log("window.dispatchEvent "+e.type),X.emit(e.type,e)},set onerror(e){"function"==typeof e?(Q=e,function e(){e.once||(C(ce).addEventListener("exception",function(e){Q(e.exception,e.bundleUrl,0,0,new Error(e.exception,e.bundleUrl,0))}),e.once=!0)}()):Q=null},get onerror(){return Q},define:O,require:C,callNative:function(){},__weex_document__:n,__weex_module_supports__:a.isRegisteredModule,__weex_tag_supports__:a.isRegisteredComponent,__weex_define__:O,__weex_require__:C,__weex_downgrade__:k,__weex_env__:f,__weex_code__:"",__weex_options__:r,__weex_data__:o,__weex_config__:i},ee={},te={};try{ee=i.services.builtinGlobals,te=i.services.builtinModules}catch(e){}return Object.assign(Y,ee),function(e,t,n){for(var r in t)e[r]={factory:t[r].bind(n),module:{exports:{}},isInitialized:!1}}(S,re({},ae.ModuleFactories,te),Y),s&&function(n,r){["load","ready","show","hide","unload"].forEach(function(e){var t="page:"+e;console.log('[Rax] listening on lifecycle: "'+t+'"'),n.$cycle(t,function(e){console.log('[Rax] receive lifecycle: "'+t+'"'),r.dispatchEvent({type:t,timestamp:Date.now(),data:e})})}),["pullDownRefresh","reachBottom","shareAppMessage","pageScroll","tabItemTap"].forEach(function(t){console.log('[Rax] listening on event: "'+t+'"'),n.$on(t,function(e){console.log('[Rax] receive event: "'+t+'"'),r.dispatchEvent(Object.assign({},e,{type:t,timestamp:Date.now()}))})});var o="weexsecurityerror";n.$on(o,function(e){var t="function"==typeof r.CustomEvent?new r.CustomEvent("WeexSecurityError",{detail:e}):{type:"WeexSecurityError",detail:e};r.dispatchEvent(o,t)})}(l,Y),Y.self=Y.window=Y,s?console.log("Rax miniApp jsfm init window, typeof window is ",void 0===Y?"undefined":oe(Y)):console.log("Rax jsfm init window, typeof window is ",void 0===Y?"undefined":oe(Y)),Y}}])}(e={exports:{}},e.exports),e.exports);((t=n)&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t).injectContext()});
-//# sourceMappingURL=weex-rax-api.min.js.map
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/closure.h b/ios/Pods/WeexSDK/weex_core/Source/base/closure.h
deleted file mode 100644
index 96c0994..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/closure.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef BASE_CLOSURE_H
-#define BASE_CLOSURE_H
-
-#include <functional>
-
-namespace weex {
-namespace base {
-typedef std::function<void()> Closure;
-}
-}  // namespace weex
-#endif  // BASE_CLOSURE_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/common.h b/ios/Pods/WeexSDK/weex_core/Source/base/common.h
deleted file mode 100755
index 1f92518..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/common.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef BASE_COMMON_H_
-#define BASE_COMMON_H_
-
-// Should be used in the private: declarations to define a class to be
-// uncopyable.
-#define DISALLOW_COPY(TypeName) TypeName(const TypeName&)
-
-// Should be used in the private: declarations to define a class to be
-// unssignable.
-#define DISALLOW_ASSIGN(TypeName) void operator=(const TypeName&)
-
-// Should be used in the private: declarations to define a class to be
-// uncopyable and unssignable.
-#ifndef DISALLOW_COPY_AND_ASSIGN
-#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
-  TypeName(const TypeName&);               \
-  void operator=(const TypeName&)
-#endif
-
-#endif  // BASE_COMMON_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/core_constants.h b/ios/Pods/WeexSDK/weex_core/Source/base/core_constants.h
deleted file mode 100644
index afacc9e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/core_constants.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WEEXV8_CONSTANTSNAME_H
-#define WEEXV8_CONSTANTSNAME_H
-
-#include <string>
-
-constexpr char OS_Android[] = "android";
-constexpr char OS_iOS[] = "iOS";
-
-#endif //WEEXV8_CONSTANTSNAME_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/log_defines.cpp b/ios/Pods/WeexSDK/weex_core/Source/base/log_defines.cpp
deleted file mode 100644
index 6391736..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/log_defines.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "log_defines.h"
-#include <string>
-#include <array>
-
-#ifdef __ANDROID__
-#include <android/log.h>
-#endif
-
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-    bool DebugMode = false;
-
-    struct LogFlattenHelper {
-        LogFlattenHelper() : mLargeBuf() {}
-        LogFlattenHelper(const char *fmt, va_list args) : LogFlattenHelper() {
-            set(fmt, args);
-        }
-        ~LogFlattenHelper() {
-            if (mLargeBuf)
-                free(mLargeBuf);
-        }
-        
-        const char *str() const { return mLargeBuf ? mLargeBuf : mSmallBuf.data(); }
-        LogFlattenHelper &set(const char *fmt, va_list args);
-        
-    private:
-        LogFlattenHelper(const LogFlattenHelper &) = delete;
-        void operator=(const LogFlattenHelper &) = delete;
-        
-        std::array<char, 4096> mSmallBuf;
-        char *mLargeBuf;
-    };
-    
-    LogFlattenHelper &LogFlattenHelper::set(const char *fmt, va_list args) {
-        va_list argsCopy;
-        va_copy(argsCopy, args);
-        int len = 1 + vsnprintf(nullptr, 0, fmt, argsCopy);
-        va_end(argsCopy);
-        if (len <= 1) {
-            mSmallBuf[0] = 0;
-            return *this;
-        }
-        if (len > (int)mSmallBuf.size())
-            mLargeBuf = static_cast<char *>(malloc(len));
-        int rv;
-        if (mLargeBuf) {
-            rv = vsnprintf(mLargeBuf, len, fmt, args);
-        } else {
-            rv = vsnprintf(mSmallBuf.data(), mSmallBuf.size(), fmt, args);
-        }
-        (void)rv;
-        return *this;
-    }
-    
-    void PrintLog(LogLevel level, const char* tag, const char* file, unsigned long line, const char* fmt, ...) {
-        va_list args;
-        va_start(args, fmt);
-        LogFlattenHelper log(fmt, args);
-        va_end(args);
-        
-        LogBridge* logBridge = WeexCore::WeexCoreManager::Instance()->get_log_bridge();
-        if (logBridge) {
-            // Log to bridge
-            logBridge->log(level, tag, file, line, log.str());
-        }
-        else {
-            // Log to console by default
-#ifdef __ANDROID__
-            if(DebugMode) {
-                switch (level) {
-                    case LogLevel::Error:
-                        __android_log_print(ANDROID_LOG_ERROR,
-                                            tag,
-                                            "%s:%lu, %s",
-                                            file,
-                                            line,
-                                            log.str());
-                    break;
-                    case LogLevel::Warn:
-                        __android_log_print(ANDROID_LOG_WARN,
-                                            tag,
-                                            "%s:%lu, %s",
-                                            file,
-                                            line,
-                                            log.str());
-                    break;
-                    case LogLevel::Info:
-                        __android_log_print(ANDROID_LOG_INFO,
-                                            tag,
-                                            "%s:%lu, %s",
-                                            file,
-                                            line,
-                                            log.str());
-                    break;
-                    case LogLevel::Debug:
-                        __android_log_print(ANDROID_LOG_DEBUG,
-                                            tag,
-                                            "%s:%lu, %s",
-                                            file,
-                                            line,
-                                            log.str());
-                    break;
-                    default:
-                        break;
-                }
-            }
-#elif __APPLE__
-            switch (level) {
-                case LogLevel::Error:
-                    printf("<%s:Error|%s:%lu> %s\n", tag, file, line, log.str());
-                    break;
-                case LogLevel::Warn:
-                    printf("<%s:Warn|%s:%lu> %s\n", tag, file, line, log.str());
-                    break;
-                case LogLevel::Info:
-                    printf("<%s:Info|%s:%lu> %s\n", tag, file, line, log.str());
-                    break;
-                case LogLevel::Debug:
-                    printf("<%s:Debug|%s:%lu> %s\n", tag, file, line, log.str());
-                    break;
-                default:
-                    break;
-            }
-#endif
-        }
-    }
-    
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/log_defines.h b/ios/Pods/WeexSDK/weex_core/Source/base/log_defines.h
deleted file mode 100644
index 0776494..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/log_defines.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef LogDefines_h
-#define LogDefines_h
-#include <cstring>
-
-namespace WeexCore {
-    
-    enum class LogLevel : int {
-        Debug,
-        Info,
-        Warn,
-        Error
-    };
-    
-    void PrintLog(LogLevel level, const char* tag, const char* file, unsigned long line, const char* format, ...);
-
-    extern bool DebugMode;
-}
-
-#if defined(LOGE)
-#undef LOGE
-#endif
-
-#if defined(LOGW)
-#undef LOGW
-#endif
-
-#if defined(LOGI)
-#undef LOGI
-#endif
-
-#if defined(LOGD)
-#undef LOGD
-#endif
-
-#if defined(LOGV)
-#undef LOGV
-#endif
-
-#define WEEX_CORE_LOG_TAG "WeexCore"
-#define WEEX_CORE_FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
-#define WEEX_CORE_LOG(level, TAG, format, ...)   WeexCore::PrintLog((level), TAG, WEEX_CORE_FILENAME, __LINE__, (format), ##__VA_ARGS__)
-
-#define LOGE_TAG(TAG, format, ...)       WEEX_CORE_LOG(WeexCore::LogLevel::Error, TAG, format, ##__VA_ARGS__)
-#define LOGE(format, ...)                LOGE_TAG(WEEX_CORE_LOG_TAG, format, ##__VA_ARGS__)
-
-#define LOGW_TAG(TAG, format, ...)       WEEX_CORE_LOG(WeexCore::LogLevel::Warn, TAG, format, ##__VA_ARGS__)
-#define LOGW(format, ...)                LOGW_TAG(WEEX_CORE_LOG_TAG, format, ##__VA_ARGS__)
-
-#define LOGI_TAG(TAG, format, ...)       WEEX_CORE_LOG(WeexCore::LogLevel::Info, TAG, format, ##__VA_ARGS__)
-#define LOGI(format, ...)                LOGI_TAG(WEEX_CORE_LOG_TAG, format, ##__VA_ARGS__)
-
-#ifdef DEBUG
-
-#define LOGD_TAG(TAG, format, ...)       WEEX_CORE_LOG(WeexCore::LogLevel::Debug, TAG, format, ##__VA_ARGS__)
-#define LOGD(format, ...)                LOGD_TAG(WEEX_CORE_LOG_TAG, format, ##__VA_ARGS__)
-
-#else
-
-#define LOGD_TAG(TAG, format, ...)       ((void) 0)
-#define LOGD(format, ...)                ((void) 0)
-
-#endif
-
-#define LOGV                    LOGD
-#define LOGV_TAG                LOGD_TAG
-#define LOG_LINE                ((void) 0)
-
-#ifndef DISALLOW_COPY_AND_ASSIGN
-#define DISALLOW_COPY_AND_ASSIGN(TypeName)  \
-TypeName(const TypeName&) = delete;      \
-void operator=(const TypeName&) = delete
-#endif
-
-#endif /* LogDefines_h */
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/make_copyable.h b/ios/Pods/WeexSDK/weex_core/Source/base/make_copyable.h
deleted file mode 100644
index 226f848..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/make_copyable.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef BASE_MAKE_COPYABLE_H_
-#define BASE_MAKE_COPYABLE_H_
-
-#include <memory>
-#include <utility>
-
-namespace weex {
-namespace base {
-
-template <typename T>
-class CopyableLambda {
- public:
-  explicit CopyableLambda(T func)
-      : impl_(std::make_shared<Impl>(std::move(func))) {}
-
-  template <typename... ArgType>
-  void operator()(ArgType&&... args) const {
-    impl_->func_(std::forward<ArgType>(args)...);
-  }
-
- private:
-  class Impl {
-   public:
-    explicit Impl(T func) : func_(std::move(func)) {}
-    T func_;
-  };
-
-  std::shared_ptr<Impl> impl_;
-};
-
-// Sample:
-// std::unique_ptr<Foo> foo = ...
-// std::function<void()> func =
-//     MakeCopyable([bar = std::move(foo)]() { return bar->count(); });
-template <typename T>
-CopyableLambda<T> MakeCopyable(T lambda) {
-  return CopyableLambda<T>(std::move(lambda));
-}
-
-}  // namespace base
-
-}  // namespace weex
-
-#endif  // BASE_MAKE_COPYABLE_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_loop.cc b/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_loop.cc
deleted file mode 100644
index 214b9a5..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_loop.cc
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "base/message_loop/message_loop.h"
-#include "base/thread/thread_local.h"
-#ifdef __ANDROID__
-#include "base/message_loop/message_pump_android.h"
-#elif OS_IOS
-#include "base/message_loop/message_pump_darwin.h"
-#endif
-#include "base/message_loop/message_pump_posix.h"
-
-namespace weex {
-namespace base {
-
-ThreadLocal<MessageLoop> s_tl_message_loop;
-
-MessageLoop::MessageLoop(Type type)
-    : delayed_tasks_(), type_(type), delayed_tasks_mutex_() {
-  switch (type) {
-    case PLATFORM:
-#ifdef __ANDROID__ 
-      message_pump_ = std::unique_ptr<MessagePump>(new MessagePumpAndroid());
-#elif OS_IOS
-      message_pump_ = std::unique_ptr<MessagePump>(new MessagePumpDarwin());
-#endif
-      break;
-    case DEFAULT:
-      message_pump_ = std::unique_ptr<MessagePump>(new MessagePumpPosix());
-      break;
-    case IO:
-      break;
-  }
-}
-MessageLoop::~MessageLoop() {}
-
-MessageLoop* MessageLoop::GetCurrent() { return s_tl_message_loop.Get(); }
-
-void MessageLoop::Run() {
-  // Store in thread local stack
-  s_tl_message_loop.Set(this);
-  message_pump_->Run(this);
-}
-
-void MessageLoop::Stop() { message_pump_->Stop(); }
-
-void MessageLoop::DoWork() {
-  std::vector<Closure> closure_list;
-  {
-    std::lock_guard<std::mutex> lock(delayed_tasks_mutex_);
-
-    if (delayed_tasks_.empty()) {
-      return;
-    }
-
-    auto now = TimePoint::Now();
-    while (!delayed_tasks_.empty()) {
-      const auto& top = delayed_tasks_.top();
-      if (top.time_point > now) {
-        break;
-      }
-      closure_list.emplace_back(std::move(top.task));
-      delayed_tasks_.pop();
-    }
-
-    if (!delayed_tasks_.empty()) {
-      message_pump_->ScheduleDelayedWork(delayed_tasks_.top().time_point - now);
-    }
-  }
-
-  for (const auto& closure : closure_list) {
-    closure();
-  }
-}
-
-void MessageLoop::PostTask(const Closure& closure) {
-  PostDelayedTask(closure, 0);
-}
-
-void MessageLoop::PostPriorityTask(TaskPriority p, const Closure& closure) {
-  PostPriorityDelayedTask(p, closure, 0);
-}
-
-void MessageLoop::PostDelayedTask(const Closure& closure, int64_t delayed_ms) {
-  PostPriorityDelayedTask(TaskPriority::NORMAL, closure, delayed_ms);
-}
-
-void MessageLoop::PostPriorityDelayedTask(TaskPriority p,
-                                          const Closure& closure,
-                                          int64_t delayed_ms) {
-  TimePoint time_point =
-      TimePoint::Now() + TimeUnit::FromMilliseconds(delayed_ms);
-  std::lock_guard<std::mutex> lock(delayed_tasks_mutex_);
-  // If the time of top task don't change, we don't need to reschedule.
-  if (!delayed_tasks_.empty()) {
-    auto old_top_time = delayed_tasks_.top().time_point;
-    delayed_tasks_.push({p, std::move(closure), std::move(time_point)});
-    if (old_top_time > delayed_tasks_.top().time_point) {
-      message_pump_->ScheduleWork();
-    }
-  } else {
-    delayed_tasks_.push({p, std::move(closure), std::move(time_point)});
-    message_pump_->ScheduleWork();
-  }
-}
-}  // namespace base
-}  // namespace weex
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_loop.h b/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_loop.h
deleted file mode 100644
index e988f78..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_loop.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef BASE_MESSAGE_LOOP_MESSAGE_LOOP_H
-#define BASE_MESSAGE_LOOP_MESSAGE_LOOP_H
-
-#include <memory>
-#include <deque>
-#include <mutex>
-#include <queue>
-#include "base/closure.h"
-#include "base/common.h"
-#include "base/message_loop/message_pump.h"
-#include "base/time_point.h"
-
-namespace weex {
-namespace base {
-class MessageLoop : public MessagePump::Delegate {
- public:
-  enum Type {
-    PLATFORM,
-    DEFAULT,
-    IO,
-  };
-  enum TaskPriority {
-    UI = 10,
-    NORMAL = 5,
-  };
-  MessageLoop(Type type);
-  ~MessageLoop();
-
-  static MessageLoop* GetCurrent();
-
-  // The unit of the priority task is milliseconds
-  void PostTask(const Closure& closure);
-  void PostPriorityTask(TaskPriority p, const Closure& closure);
-  void PostDelayedTask(const Closure& closure, int64_t delayed_ms);
-  void PostPriorityDelayedTask(TaskPriority p, const Closure& closure,
-                               int64_t delayed_ms);
-
-  void Run();
-  void Stop();
-
-  inline Type type() { return type_; }
-
- private:
-  void DoWork();
-
-  struct DelayedTask {
-    TimePoint time_point;
-    size_t priority;
-    Closure task;
-    DelayedTask(size_t p_priority, Closure p_task, TimePoint p_time_point)
-        : priority(p_priority),
-          task(std::move(p_task)),
-          time_point(p_time_point) {}
-  };
-  struct DelayedTaskCompare {
-    bool operator()(const DelayedTask& a, const DelayedTask& b) {
-      return a.time_point == b.time_point
-                 ? a.priority < b.priority
-                 : a.time_point > b.time_point;
-    };
-  };
-  using DelayedTaskQueue =
-      std::priority_queue<DelayedTask, std::deque<DelayedTask>,
-                          DelayedTaskCompare>;
-  DelayedTaskQueue delayed_tasks_;
-  Type type_;
-  std::unique_ptr<MessagePump> message_pump_;
-  std::mutex delayed_tasks_mutex_;
-  DISALLOW_COPY_AND_ASSIGN(MessageLoop);
-};
-}  // namespace base
-}  // namespace weex
-
-#endif  // BASE_MESSAGE_LOOP_MESSAGE_LOOP_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump.h b/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump.h
deleted file mode 100644
index f58cf38..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef BASE_MESSAGE_LOOP_MESSAGE_PUMP_H
-#define BASE_MESSAGE_LOOP_MESSAGE_PUMP_H
-#include "base/time_unit.h"
-#include "base/common.h"
-
-namespace weex {
-namespace base {
-class MessagePump {
- public:
-  class Delegate {
-   public:
-    virtual ~Delegate() {}
-    virtual void DoWork() = 0;
-  };
-  MessagePump() {}
-  virtual ~MessagePump() {}
-
-  virtual void Run(Delegate* delegate) = 0;
-  virtual void Stop() = 0;
-  virtual void ScheduleWork() = 0;
-  virtual void ScheduleDelayedWork(TimeUnit delayed_time) = 0;
-    
- private:
-  DISALLOW_COPY_AND_ASSIGN(MessagePump);
-};
-}  // namespace base
-}  // namespace weex
-#endif  // BASE_MESSAGE_LOOP_MESSAGE_PUMP_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_darwin.cc b/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_darwin.cc
deleted file mode 100644
index e1e0d7f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_darwin.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "base/message_loop/message_pump_darwin.h"
-
-namespace weex {
-namespace base {
-MessagePumpDarwin::MessagePumpDarwin() {}
-MessagePumpDarwin::~MessagePumpDarwin() {}
-void MessagePumpDarwin::Run(Delegate* delegate) {}
-void MessagePumpDarwin::Stop() {}
-void MessagePumpDarwin::ScheduleWork() {}
-void MessagePumpDarwin::ScheduleDelayedWork(TimeUnit delayed_time) {}
-}  // namespace base
-}  // namespace weex
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_darwin.h b/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_darwin.h
deleted file mode 100644
index dd68493..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_darwin.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WEEX_PROJECT_MESSAGE_PUMP_IOS_H
-#define WEEX_PROJECT_MESSAGE_PUMP_IOS_H
-
-#include "base/message_loop/message_pump.h"
-
-namespace weex {
-namespace base {
-class MessagePumpDarwin : public MessagePump {
- public:
-  MessagePumpDarwin();
-  ~MessagePumpDarwin();
-  void Run(Delegate* delegate) override;
-  void Stop() override;
-  void ScheduleWork() override;
-  void ScheduleDelayedWork(TimeUnit delayed_time) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MessagePumpDarwin);
-};
-}  // namespace base
-}  // namespace weex
-
-#endif  // WEEX_PROJECT_MESSAGE_PUMP_IOS_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_posix.cc b/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_posix.cc
deleted file mode 100644
index f67c299..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_posix.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "base/message_loop/message_pump_posix.h"
-
-namespace weex {
-namespace base {
-
-MessagePumpPosix::MessagePumpPosix()
-    : stop_request_(false), condition_(), delayed_time_() {}
-
-MessagePumpPosix::~MessagePumpPosix() {}
-
-void MessagePumpPosix::Run(Delegate* delegate) {
-  TimeUnit zero;
-  for (;;) {
-    if (stop_request_) break;
-    std::unique_lock<std::mutex> lock(mutex_);
-    if (delayed_time_ == zero) {
-      condition_.wait(lock);
-    } else {
-      condition_.wait_for(
-          lock, std::chrono::nanoseconds(delayed_time_.ToNanoseconds()));
-    }
-    delayed_time_ = zero;
-    delegate->DoWork();
-  }
-}
-
-void MessagePumpPosix::Stop() { stop_request_ = true; }
-
-void MessagePumpPosix::ScheduleWork() { condition_.notify_one(); }
-
-void MessagePumpPosix::ScheduleDelayedWork(TimeUnit delayed_time) {
-  // This method is only used by the same threads as MessageLoop::DoWork, so we
-  // only update the delayed time instead of blocking and waiting.
-  delayed_time_ = std::move(delayed_time);
-}
-}  // namespace base
-}  // namespace weex
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_posix.h b/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_posix.h
deleted file mode 100644
index ba650a2..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/message_loop/message_pump_posix.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_BASE_MESSAGE_LOOP_MESSAGE_PUMP_POSIX_H
-#define CORE_BASE_MESSAGE_LOOP_MESSAGE_PUMP_POSIX_H
-
-#include <condition_variable>
-#include <mutex>
-#include "base/common.h"
-#include "base/message_loop/message_pump.h"
-
-namespace weex {
-namespace base {
-class MessagePumpPosix : public MessagePump {
- public:
-  MessagePumpPosix();
-  ~MessagePumpPosix();
-  void Run(Delegate* delegate) override;
-  void Stop() override;
-  void ScheduleWork() override;
-  void ScheduleDelayedWork(TimeUnit delayed_time) override;
-
- private:
-  bool stop_request_;
-  std::condition_variable condition_;
-  std::mutex mutex_;
-  TimeUnit delayed_time_;
-  DISALLOW_COPY_AND_ASSIGN(MessagePumpPosix);
-};
-}  // namespace base
-}  // namespace weex
-
-#endif  // CORE_BASE_MESSAGE_LOOP_MESSAGE_PUMP_POSIX_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/string_util.h b/ios/Pods/WeexSDK/weex_core/Source/base/string_util.h
deleted file mode 100644
index 4e0ea3b..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/string_util.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_BASE_STRING_UTIL_H
-#define CORE_BASE_STRING_UTIL_H
-
-#include <sstream>
-#include <string.h>
-#ifdef OS_ANDROID
-#include <malloc.h>
-#else
-#include <stdlib.h>
-#endif
-#include "base/third_party/icu/icu_utf.h"
-
-namespace weex {
-namespace base {
-
-constexpr int32_t kErrorCodePoint = 0xFFFD;
-
-template <typename T>
-std::string to_string(T value) {
-  std::ostringstream os;
-  os << value;
-  return os.str();
-}
-
-static bool IsValidCodepoint(uint32_t code_point) {
-  // Excludes the surrogate code points ([0xD800, 0xDFFF]) and
-  // codepoints larger than 0x10FFFF (the highest codepoint allowed).
-  // Non-characters and unassigned codepoints are allowed.
-  return code_point < 0xD800u ||
-         (code_point >= 0xE000u && code_point <= 0x10FFFFu);
-}
-
-static uint32_t convert_single_char(char16_t in) {
-  if (!CBU16_IS_SINGLE(in) || !IsValidCodepoint(in)) {
-    return kErrorCodePoint;
-  }
-  return in;
-}
-
-inline static std::string to_utf8(uint16_t* utf16, size_t length) {
-  char16_t *WC = reinterpret_cast<char16_t *>(utf16);
-  char* dest = static_cast<char*>(malloc(length * sizeof(char16_t) + sizeof(char16_t)));
-  memset(dest, 0, length * sizeof(char16_t) + sizeof(char16_t));
-  int32_t i = 0;
-  int32_t d_len = 0;
-  int32_t* dest_len = &d_len;
-  // Always have another symbol in order to avoid checking boundaries in the
-  // middle of the surrogate pair.
-  while (i < length - 1) {
-    int32_t code_point;
-
-    if (CBU16_IS_LEAD(WC[i]) && CBU16_IS_TRAIL(WC[i + 1])) {
-      code_point = CBU16_GET_SUPPLEMENTARY(WC[i], WC[i + 1]);
-      i += 2;
-    } else {
-      code_point = convert_single_char(WC[i]);
-      ++i;
-    }
-
-    CBU8_APPEND_UNSAFE(dest, *dest_len, code_point);
-  }
-
-  if (i < length)
-    CBU8_APPEND_UNSAFE(dest, *dest_len, convert_single_char(WC[i]));
-
-  std::string output(dest);
-  free(dest);
-  return output;
-}
-
-#ifdef OS_ANDROID
-static std::u16string to_utf16(char* utf8, size_t length) {
-  std::u16string dest_str;
-  dest_str.resize(length);
-  auto* dest = &dest_str[0];
-  int32_t dest_len = 0;
-
-  bool success = true;
-
-  for (int32_t i = 0; i < length;) {
-    int32_t code_point;
-    CBU8_NEXT(utf8, i, static_cast<int32_t>(length), code_point);
-
-    if (!IsValidCodepoint(code_point)) {
-      success = false;
-      code_point = kErrorCodePoint;
-    }
-
-    CBU16_APPEND_UNSAFE(dest, dest_len, code_point);
-  }
-  if (!success) {
-    return std::u16string();
-  }
-  dest_str.resize(dest_len);
-  dest_str.shrink_to_fit();
-  return dest_str;
-}
-#endif
-
-}  // namespace base
-}  // namespace weex
-#endif  // CORE_BASE_STRING_UTIL_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/third_party/icu/icu_utf.cpp b/ios/Pods/WeexSDK/weex_core/Source/base/third_party/icu/icu_utf.cpp
deleted file mode 100644
index 025081b..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/third_party/icu/icu_utf.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-*   Copyright (C) 1999-2012, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  utf_impl.cpp
-*   encoding:   UTF-8
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 1999sep13
-*   created by: Markus W. Scherer
-*
-*   This file provides implementation functions for macros in the utfXX.h
-*   that would otherwise be too long as macros.
-*/
-
-#include "base/third_party/icu/icu_utf.h"
-
-namespace base_icu {
-
-// source/common/utf_impl.cpp
-
-static const UChar32
-utf8_errorValue[6]={
-    // Same values as UTF8_ERROR_VALUE_1, UTF8_ERROR_VALUE_2, UTF_ERROR_VALUE,
-    // but without relying on the obsolete unicode/utf_old.h.
-    0x15, 0x9f, 0xffff,
-    0x10ffff
-};
-
-static UChar32
-errorValue(int32_t count, int8_t strict) {
-    if(strict>=0) {
-        return utf8_errorValue[count];
-    } else if(strict==-3) {
-        return 0xfffd;
-    } else {
-        return CBU_SENTINEL;
-    }
-}
-
-/*
- * Handle the non-inline part of the U8_NEXT() and U8_NEXT_FFFD() macros
- * and their obsolete sibling UTF8_NEXT_CHAR_SAFE().
- *
- * U8_NEXT() supports NUL-terminated strings indicated via length<0.
- *
- * The "strict" parameter controls the error behavior:
- * <0  "Safe" behavior of U8_NEXT():
- *     -1: All illegal byte sequences yield U_SENTINEL=-1.
- *     -2: Same as -1, except for lenient treatment of surrogate code points as legal.
- *         Some implementations use this for roundtripping of
- *         Unicode 16-bit strings that are not well-formed UTF-16, that is, they
- *         contain unpaired surrogates.
- *     -3: All illegal byte sequences yield U+FFFD.
- *  0  Obsolete "safe" behavior of UTF8_NEXT_CHAR_SAFE(..., FALSE):
- *     All illegal byte sequences yield a positive code point such that this
- *     result code point would be encoded with the same number of bytes as
- *     the illegal sequence.
- * >0  Obsolete "strict" behavior of UTF8_NEXT_CHAR_SAFE(..., TRUE):
- *     Same as the obsolete "safe" behavior, but non-characters are also treated
- *     like illegal sequences.
- *
- * Note that a UBool is the same as an int8_t.
- */
-UChar32
-utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict) {
-    // *pi is one after byte c.
-    int32_t i=*pi;
-    // length can be negative for NUL-terminated strings: Read and validate one byte at a time.
-    if(i==length || c>0xf4) {
-        // end of string, or not a lead byte
-    } else if(c>=0xf0) {
-        // Test for 4-byte sequences first because
-        // U8_NEXT() handles shorter valid sequences inline.
-        uint8_t t1=s[i], t2, t3;
-        c&=7;
-        if(CBU8_IS_VALID_LEAD4_AND_T1(c, t1) &&
-                ++i!=length && (t2=s[i]-0x80)<=0x3f &&
-                ++i!=length && (t3=s[i]-0x80)<=0x3f) {
-            ++i;
-            c=(c<<18)|((t1&0x3f)<<12)|(t2<<6)|t3;
-            // strict: forbid non-characters like U+fffe
-            if(strict<=0 || !CBU_IS_UNICODE_NONCHAR(c)) {
-                *pi=i;
-                return c;
-            }
-        }
-    } else if(c>=0xe0) {
-        c&=0xf;
-        if(strict!=-2) {
-            uint8_t t1=s[i], t2;
-            if(CBU8_IS_VALID_LEAD3_AND_T1(c, t1) &&
-                    ++i!=length && (t2=s[i]-0x80)<=0x3f) {
-                ++i;
-                c=(c<<12)|((t1&0x3f)<<6)|t2;
-                // strict: forbid non-characters like U+fffe
-                if(strict<=0 || !CBU_IS_UNICODE_NONCHAR(c)) {
-                    *pi=i;
-                    return c;
-                }
-            }
-        } else {
-            // strict=-2 -> lenient: allow surrogates
-            uint8_t t1=s[i]-0x80, t2;
-            if(t1<=0x3f && (c>0 || t1>=0x20) &&
-                    ++i!=length && (t2=s[i]-0x80)<=0x3f) {
-                *pi=i+1;
-                return (c<<12)|(t1<<6)|t2;
-            }
-        }
-    } else if(c>=0xc2) {
-        uint8_t t1=s[i]-0x80;
-        if(t1<=0x3f) {
-            *pi=i+1;
-            return ((c-0xc0)<<6)|t1;
-        }
-    }  // else 0x80<=c<0xc2 is not a lead byte
-
-    /* error handling */
-    c=errorValue(i-*pi, strict);
-    *pi=i;
-    return c;
-}
-
-}  // namespace base_icu
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/third_party/icu/icu_utf.h b/ios/Pods/WeexSDK/weex_core/Source/base/third_party/icu/icu_utf.h
deleted file mode 100644
index de172f8..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/third_party/icu/icu_utf.h
+++ /dev/null
@@ -1,460 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-*   Copyright (C) 1999-2015, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*/
-
-#ifndef BASE_THIRD_PARTY_ICU_ICU_UTF_H_
-#define BASE_THIRD_PARTY_ICU_ICU_UTF_H_
-
-#include <stdint.h>
-
-namespace base_icu {
-
-// source/common/unicode/umachine.h
-
-/** The ICU boolean type @stable ICU 2.0 */
-typedef int8_t UBool;
-
-/**
- * Define UChar32 as a type for single Unicode code points.
- * UChar32 is a signed 32-bit integer (same as int32_t).
- *
- * The Unicode code point range is 0..0x10ffff.
- * All other values (negative or >=0x110000) are illegal as Unicode code points.
- * They may be used as sentinel values to indicate "done", "error"
- * or similar non-code point conditions.
- *
- * Before ICU 2.4 (Jitterbug 2146), UChar32 was defined
- * to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned)
- * or else to be uint32_t.
- * That is, the definition of UChar32 was platform-dependent.
- *
- * @see U_SENTINEL
- * @stable ICU 2.4
- */
-typedef int32_t UChar32;
-
-/**
- * This value is intended for sentinel values for APIs that
- * (take or) return single code points (UChar32).
- * It is outside of the Unicode code point range 0..0x10ffff.
- *
- * For example, a "done" or "error" value in a new API
- * could be indicated with U_SENTINEL.
- *
- * ICU APIs designed before ICU 2.4 usually define service-specific "done"
- * values, mostly 0xffff.
- * Those may need to be distinguished from
- * actual U+ffff text contents by calling functions like
- * CharacterIterator::hasNext() or UnicodeString::length().
- *
- * @return -1
- * @see UChar32
- * @stable ICU 2.4
- */
-#define CBU_SENTINEL (-1)
-
-// source/common/unicode/utf.h
-
-/**
- * Is this code point a Unicode noncharacter?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU_IS_UNICODE_NONCHAR(c) \
-    ((c)>=0xfdd0 && \
-     ((c)<=0xfdef || ((c)&0xfffe)==0xfffe) && (c)<=0x10ffff)
-
-/**
- * Is c a Unicode code point value (0..U+10ffff)
- * that can be assigned a character?
- *
- * Code points that are not characters include:
- * - single surrogate code points (U+d800..U+dfff, 2048 code points)
- * - the last two code points on each plane (U+__fffe and U+__ffff, 34 code points)
- * - U+fdd0..U+fdef (new with Unicode 3.1, 32 code points)
- * - the highest Unicode code point value is U+10ffff
- *
- * This means that all code points below U+d800 are character code points,
- * and that boundary is tested first for performance.
- *
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU_IS_UNICODE_CHAR(c) \
-    ((uint32_t)(c)<0xd800 || \
-        (0xdfff<(c) && (c)<=0x10ffff && !CBU_IS_UNICODE_NONCHAR(c)))
-
-/**
- * Is this code point a surrogate (U+d800..U+dfff)?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU_IS_SURROGATE(c) (((c)&0xfffff800)==0xd800)
-
-/**
- * Assuming c is a surrogate code point (U_IS_SURROGATE(c)),
- * is it a lead surrogate?
- * @param c 32-bit code point
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
-
-// source/common/unicode/utf8.h
-
-/**
- * Internal bit vector for 3-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD3_AND_T1.
- * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence.
- * Lead byte E0..EF bits 3..0 are used as byte index,
- * first trail byte bits 7..5 are used as bit index into that byte.
- * @see U8_IS_VALID_LEAD3_AND_T1
- * @internal
- */
-#define CBU8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30"
-
-/**
- * Internal 3-byte UTF-8 validity check.
- * Non-zero if lead byte E0..EF and first trail byte 00..FF start a valid sequence.
- * @internal
- */
-#define CBU8_IS_VALID_LEAD3_AND_T1(lead, t1) (CBU8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5)))
-
-/**
- * Internal bit vector for 4-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD4_AND_T1.
- * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence.
- * First trail byte bits 7..4 are used as byte index,
- * lead byte F0..F4 bits 2..0 are used as bit index into that byte.
- * @see U8_IS_VALID_LEAD4_AND_T1
- * @internal
- */
-#define CBU8_LEAD4_T1_BITS "\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x0F\x0F\x0F\x00\x00\x00\x00"
-
-/**
- * Internal 4-byte UTF-8 validity check.
- * Non-zero if lead byte F0..F4 and first trail byte 00..FF start a valid sequence.
- * @internal
- */
-#define CBU8_IS_VALID_LEAD4_AND_T1(lead, t1) (CBU8_LEAD4_T1_BITS[(uint8_t)(t1)>>4]&(1<<((lead)&7)))
-
-/**
- * Function for handling "next code point" with error-checking.
- *
- * This is internal since it is not meant to be called directly by external clie
-nts;
- * however it is U_STABLE (not U_INTERNAL) since it is called by public macros i
-n this
- * file and thus must remain stable, and should not be hidden when other interna
-l
- * functions are hidden (otherwise public macros would fail to compile).
- * @internal
- */
-UChar32
-utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, ::base_icu::UChar32 c, ::base_icu::UBool strict);
-
-/**
- * Does this code unit (byte) encode a code point by itself (US-ASCII 0..0x7f)?
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU8_IS_SINGLE(c) (((c)&0x80)==0)
-
-/**
- * Is this code unit (byte) a UTF-8 lead byte? (0xC2..0xF4)
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU8_IS_LEAD(c) ((uint8_t)((c)-0xc2)<=0x32)
-
-/**
- * Is this code unit (byte) a UTF-8 trail byte? (0x80..0xBF)
- * @param c 8-bit code unit (byte)
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU8_IS_TRAIL(c) ((int8_t)(c)<-0x40)
-
-/**
- * How many code units (bytes) are used for the UTF-8 encoding
- * of this Unicode code point?
- * @param c 32-bit code point
- * @return 1..4, or 0 if c is a surrogate or not a Unicode code point
- * @stable ICU 2.4
- */
-#define CBU8_LENGTH(c) \
-    ((uint32_t)(c)<=0x7f ? 1 : \
-        ((uint32_t)(c)<=0x7ff ? 2 : \
-            ((uint32_t)(c)<=0xd7ff ? 3 : \
-                ((uint32_t)(c)<=0xdfff || (uint32_t)(c)>0x10ffff ? 0 : \
-                    ((uint32_t)(c)<=0xffff ? 3 : 4)\
-                ) \
-            ) \
-        ) \
-    )
-
-/**
- * The maximum number of UTF-8 code units (bytes) per Unicode code point (U+0000..U+10ffff).
- * @return 4
- * @stable ICU 2.4
- */
-#define CBU8_MAX_LENGTH 4
-
-/**
- * Get a code point from a string at a code point boundary offset,
- * and advance the offset to the next code point boundary.
- * (Post-incrementing forward iteration.)
- * "Safe" macro, checks for illegal sequences and for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * The offset may point to the lead byte of a multi-byte sequence,
- * in which case the macro will read the whole sequence.
- * If the offset points to a trail byte or an illegal UTF-8 sequence, then
- * c is set to a negative value.
- *
- * @param s const uint8_t * string
- * @param i int32_t string offset, must be i<length
- * @param length int32_t string length
- * @param c output UChar32 variable, set to <0 in case of an error
- * @see U8_NEXT_UNSAFE
- * @stable ICU 2.4
- */
-#define CBU8_NEXT(s, i, length, c) { \
-    (c)=(uint8_t)(s)[(i)++]; \
-    if(!CBU8_IS_SINGLE(c)) { \
-        uint8_t __t1, __t2; \
-        if( /* handle U+0800..U+FFFF inline */ \
-                (0xe0<=(c) && (c)<0xf0) && \
-                (((i)+1)<(length) || (length)<0) && \
-                CBU8_IS_VALID_LEAD3_AND_T1((c), __t1=(s)[i]) && \
-                (__t2=(s)[(i)+1]-0x80)<=0x3f) { \
-            (c)=(((c)&0xf)<<12)|((__t1&0x3f)<<6)|__t2; \
-            (i)+=2; \
-        } else if( /* handle U+0080..U+07FF inline */ \
-                ((c)<0xe0 && (c)>=0xc2) && \
-                ((i)!=(length)) && \
-                (__t1=(s)[i]-0x80)<=0x3f) { \
-            (c)=(((c)&0x1f)<<6)|__t1; \
-            ++(i); \
-        } else { \
-            /* function call for "complicated" and error cases */ \
-            (c)=::base_icu::utf8_nextCharSafeBody((const uint8_t *)s, &(i), (length), c, -1); \
-        } \
-    } \
-}
-
-/**
- * Append a code point to a string, overwriting 1 to 4 bytes.
- * The offset points to the current end of the string contents
- * and is advanced (post-increment).
- * "Unsafe" macro, assumes a valid code point and sufficient space in the string.
- * Otherwise, the result is undefined.
- *
- * @param s const uint8_t * string buffer
- * @param i string offset
- * @param c code point to append
- * @see U8_APPEND
- * @stable ICU 2.4
- */
-#define CBU8_APPEND_UNSAFE(s, i, c) { \
-    if((uint32_t)(c)<=0x7f) { \
-        (s)[(i)++]=(uint8_t)(c); \
-    } else { \
-        if((uint32_t)(c)<=0x7ff) { \
-            (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); \
-        } else { \
-            if((uint32_t)(c)<=0xffff) { \
-                (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \
-            } else { \
-                (s)[(i)++]=(uint8_t)(((c)>>18)|0xf0); \
-                (s)[(i)++]=(uint8_t)((((c)>>12)&0x3f)|0x80); \
-            } \
-            (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \
-        } \
-        (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \
-    } \
-}
-
-// source/common/unicode/utf16.h
-
-/**
- * Does this code unit alone encode a code point (BMP, not a surrogate)?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU16_IS_SINGLE(c) !CBU_IS_SURROGATE(c)
-
-/**
- * Is this code unit a lead surrogate (U+d800..U+dbff)?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
-
-/**
- * Is this code unit a trail surrogate (U+dc00..U+dfff)?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00)
-
-/**
- * Is this code unit a surrogate (U+d800..U+dfff)?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU16_IS_SURROGATE(c) CBU_IS_SURROGATE(c)
-
-/**
- * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)),
- * is it a lead surrogate?
- * @param c 16-bit code unit
- * @return TRUE or FALSE
- * @stable ICU 2.4
- */
-#define CBU16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0)
-
-/**
- * Helper constant for U16_GET_SUPPLEMENTARY.
- * @internal
- */
-#define CBU16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000)
-
-/**
- * Get a supplementary code point value (U+10000..U+10ffff)
- * from its lead and trail surrogates.
- * The result is undefined if the input values are not
- * lead and trail surrogates.
- *
- * @param lead lead surrogate (U+d800..U+dbff)
- * @param trail trail surrogate (U+dc00..U+dfff)
- * @return supplementary code point (U+10000..U+10ffff)
- * @stable ICU 2.4
- */
-#define CBU16_GET_SUPPLEMENTARY(lead, trail) \
-    (((::base_icu::UChar32)(lead)<<10UL)+(::base_icu::UChar32)(trail)-CBU16_SURROGATE_OFFSET)
-
-/**
- * Get the lead surrogate (0xd800..0xdbff) for a
- * supplementary code point (0x10000..0x10ffff).
- * @param supplementary 32-bit code point (U+10000..U+10ffff)
- * @return lead surrogate (U+d800..U+dbff) for supplementary
- * @stable ICU 2.4
- */
-#define CBU16_LEAD(supplementary) (::base_icu::UChar)(((supplementary)>>10)+0xd7c0)
-
-/**
- * Get the trail surrogate (0xdc00..0xdfff) for a
- * supplementary code point (0x10000..0x10ffff).
- * @param supplementary 32-bit code point (U+10000..U+10ffff)
- * @return trail surrogate (U+dc00..U+dfff) for supplementary
- * @stable ICU 2.4
- */
-#define CBU16_TRAIL(supplementary) (::base_icu::UChar)(((supplementary)&0x3ff)|0xdc00)
-
-/**
- * How many 16-bit code units are used to encode this Unicode code point? (1 or 2)
- * The result is not defined if c is not a Unicode code point (U+0000..U+10ffff).
- * @param c 32-bit code point
- * @return 1 or 2
- * @stable ICU 2.4
- */
-#define CBU16_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2)
-
-/**
- * The maximum number of 16-bit code units per Unicode code point (U+0000..U+10ffff).
- * @return 2
- * @stable ICU 2.4
- */
-#define CBU16_MAX_LENGTH 2
-
-/**
- * Get a code point from a string at a code point boundary offset,
- * and advance the offset to the next code point boundary.
- * (Post-incrementing forward iteration.)
- * "Safe" macro, handles unpaired surrogates and checks for string boundaries.
- *
- * The length can be negative for a NUL-terminated string.
- *
- * The offset may point to the lead surrogate unit
- * for a supplementary code point, in which case the macro will read
- * the following trail surrogate as well.
- * If the offset points to a trail surrogate or
- * to a single, unpaired lead surrogate, then c is set to that unpaired surrogate.
- *
- * @param s const UChar * string
- * @param i string offset, must be i<length
- * @param length string length
- * @param c output UChar32 variable
- * @see U16_NEXT_UNSAFE
- * @stable ICU 2.4
- */
-#define CBU16_NEXT(s, i, length, c) { \
-    (c)=(s)[(i)++]; \
-    if(CBU16_IS_LEAD(c)) { \
-        uint16_t __c2; \
-        if((i)!=(length) && CBU16_IS_TRAIL(__c2=(s)[(i)])) { \
-            ++(i); \
-            (c)=CBU16_GET_SUPPLEMENTARY((c), __c2); \
-        } \
-    } \
-}
-
-/**
- * Append a code point to a string, overwriting 1 or 2 code units.
- * The offset points to the current end of the string contents
- * and is advanced (post-increment).
- * "Unsafe" macro, assumes a valid code point and sufficient space in the string.
- * Otherwise, the result is undefined.
- *
- * @param s const UChar * string buffer
- * @param i string offset
- * @param c code point to append
- * @see U16_APPEND
- * @stable ICU 2.4
- */
-#define CBU16_APPEND_UNSAFE(s, i, c) { \
-    if((uint32_t)(c)<=0xffff) { \
-        (s)[(i)++]=(uint16_t)(c); \
-    } else { \
-        (s)[(i)++]=(uint16_t)(((c)>>10)+0xd7c0); \
-        (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \
-    } \
-}
-
-}  // namesapce base_icu
-
-#endif  // BASE_THIRD_PARTY_ICU_ICU_UTF_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread.h b/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread.h
deleted file mode 100644
index f82a5a8..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef BASE_THREAD_THREAD_H
-#define BASE_THREAD_THREAD_H
-
-#include <pthread.h>
-#include <memory>
-#if OS_ANDROID
-#include "base/thread/thread_impl_android.h"
-#elif OS_IOS
-#include "base/thread/thread_impl_darwin.h"
-#endif
-
-namespace weex {
-namespace base {
-class Thread {
- public:
-  Thread(MessageLoop::Type type) : impl_(CreateImpl(ThreadParams(type))) {}
-  Thread(const ThreadParams& params) : impl_(CreateImpl(params)) {}
-  ~Thread() {}
-
-  inline void Start() { impl_->Start(); }
-
-  inline void Stop() { impl_->Stop(); }
-
-  inline MessageLoop* message_loop() { return impl_->message_loop(); }
-
- private:
-  inline static ThreadImpl* CreateImpl(const ThreadParams& params) {
-#if OS_ANDROID
-    return new ThreadImplAndroid(params);
-#elif OS_IOS
-    return new ThreadImplDarwin(params);
-#endif
-  }
-  std::unique_ptr<ThreadImpl> impl_;
-  DISALLOW_COPY_AND_ASSIGN(Thread);
-};
-}  // namespace base
-}  // namespace weex
-
-#endif  // BASE_THREAD_THREAD_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl.h b/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl.h
deleted file mode 100644
index 111ac62..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef BASE_THREAD_PLATFORM_THREAD_H
-#define BASE_THREAD_PLATFORM_THREAD_H
-
-#include "base/common.h"
-#include "base/message_loop/message_loop.h"
-
-namespace weex {
-namespace base {
-struct ThreadParams {
-  int priority;
-  std::string name;
-  MessageLoop::Type type;
-
-  ThreadParams(const std::string& p_name, int p_priority,
-               MessageLoop::Type p_type)
-      : name(p_name), type(p_type), priority(p_priority) {}
-
-  ThreadParams(MessageLoop::Type p_type) : ThreadParams("", 0, p_type) {}
-};
-class ThreadImpl {
- public:
-  ThreadImpl(const ThreadParams& params)
-      : name_(params.name), message_loop_(new MessageLoop(params.type)) {}
-  virtual ~ThreadImpl() {}
-  virtual void Start() = 0;
-  virtual void Stop() = 0;
-  virtual void SetName(const std::string& name) { name_ = name; };
-  inline const std::string& name() const { return name_; }
-
-  inline MessageLoop* message_loop() { return message_loop_.get(); }
-
- protected:
-  std::unique_ptr<MessageLoop> message_loop_;
-  std::string name_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ThreadImpl);
-};
-}  // namespace base
-}  // namespace weex
-
-#endif  // BASE_THREAD_PLATFORM_THREAD_H
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_darwin.cc b/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_darwin.cc
deleted file mode 100644
index 14299a1..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_darwin.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "base/thread/thread_impl_darwin.h"
-
-namespace weex {
-namespace base {
-
-#ifdef OS_IOS
-ThreadImplDarwin::ThreadImplDarwin(const ThreadParams& params)
-    : ThreadImplPosix(params) {}
-
-ThreadImplDarwin::~ThreadImplDarwin() {}
-
-void ThreadImplDarwin::SetName(const std::string& name) {
-  ThreadImpl::SetName(name);
-  pthread_setname_np(name.c_str());
-}
-#endif
-
-}  // namespace base
-}  // namespace weex
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_darwin.h b/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_darwin.h
deleted file mode 100644
index 40d3ae8..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_darwin.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WEEX_PROJECT_THREAD_IMPL_IOS_H
-#define WEEX_PROJECT_THREAD_IMPL_IOS_H
-
-#ifdef OS_IOS
-
-#include "base/thread/thread_impl_posix.h"
-
-namespace weex {
-namespace base {
-class ThreadImplDarwin : public ThreadImplPosix {
- public:
-  ThreadImplDarwin(const ThreadParams& params);
-  virtual ~ThreadImplDarwin();
-  void SetName(const std::string& name) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ThreadImplDarwin);
-};
-}  // namespace base
-}  // namespace weex
-
-#endif
-#endif  // WEEX_PROJECT_THREAD_IMPL_IOS_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_posix.cc b/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_posix.cc
deleted file mode 100644
index 65ffb1b..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_posix.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "base/thread/thread_impl_posix.h"
-#include "base/message_loop/message_loop.h"
-#include "base/thread/waitable_event.h"
-
-namespace weex {
-namespace base {
-
-struct StartupData {
-  WaitableEvent event;
-  MessageLoop* message_loop;
-
-  explicit StartupData(MessageLoop* p_message_loop)
-      : event(), message_loop(p_message_loop) {}
-};
-
-void* ThreadFunc(void* params) {
-  StartupData* data = static_cast<StartupData*>(params);
-  MessageLoop* message_loop = data->message_loop;
-  data->event.Signal();
-  message_loop->Run();
-  return NULL;
-}
-
-ThreadImplPosix::ThreadImplPosix(const ThreadParams& params)
-    : ThreadImpl(params) {}
-
-ThreadImplPosix::~ThreadImplPosix() {}
-
-void ThreadImplPosix::Start() {
-  if (message_loop()->type() == MessageLoop::Type::DEFAULT) {
-    StartupData params(message_loop());
-    int error = pthread_create(&handle_, NULL, ThreadFunc, &params);
-    if (!error) {
-      params.event.Wait();
-    }
-  } else {
-    message_loop()->Run();
-  }
-}
-
-void ThreadImplPosix::Stop() { message_loop_->Stop(); }
-
-}  // namespace base
-}  // namespace weex
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_posix.h b/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_posix.h
deleted file mode 100644
index 4d6597c..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_impl_posix.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WEEX_PROJECT_THREAD_IMPL_POSIX_H
-#define WEEX_PROJECT_THREAD_IMPL_POSIX_H
-
-#include <pthread.h>
-#include <string>
-#include "base/thread/thread_impl.h"
-
-namespace weex {
-namespace base {
-class ThreadImplPosix : public ThreadImpl {
- public:
-  ThreadImplPosix(const ThreadParams& params);
-  virtual ~ThreadImplPosix();
-  virtual void Start() override;
-  virtual void Stop() override;
-
-  inline pthread_t handle() const { return handle_; }
-
- private:
-  pthread_t handle_;
-  DISALLOW_COPY_AND_ASSIGN(ThreadImplPosix);
-};
-}  // namespace base
-}  // namespace weex
-
-#endif  // WEEX_PROJECT_THREAD_IMPL_POSIX_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_local.h b/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_local.h
deleted file mode 100644
index 977e35a..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/thread/thread_local.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef BASE_THREAD_THREAD_LOCAL_H
-#define BASE_THREAD_THREAD_LOCAL_H
-
-#include <pthread.h>
-#include "base/common.h"
-
-namespace weex {
-namespace base {
-typedef pthread_key_t ThreadLocalKey;
-
-inline ThreadLocalKey ThreadLocalAlloc() {
-  ThreadLocalKey key;
-  pthread_key_create(&key, NULL);
-  return key;
-}
-
-inline void ThreadLocalFree(ThreadLocalKey key) { pthread_key_delete(key); }
-
-inline void ThreadLocalSetValue(ThreadLocalKey key, void* value) {
-  pthread_setspecific(key, value);
-}
-
-inline void* ThreadLocalGetValue(ThreadLocalKey key) {
-  return pthread_getspecific(key);
-}
-
-template <typename Type>
-class ThreadLocal {
- public:
-  ThreadLocal() : key_(ThreadLocalAlloc()) {}
-
-  ~ThreadLocal() { ThreadLocalFree(key_); }
-
-  Type* Get() { return reinterpret_cast<Type*>(ThreadLocalGetValue(key_)); }
-
-  void Set(Type* ptr) { ThreadLocalSetValue(key_, ptr); }
-
- private:
-  ThreadLocalKey key_;
-  DISALLOW_COPY_AND_ASSIGN(ThreadLocal<Type>);
-};
-}  // namespace base
-}  // namespace weex
-#endif  // BASE_THREAD_THREAD_LOCAL_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/thread/waitable_event.h b/ios/Pods/WeexSDK/weex_core/Source/base/thread/waitable_event.h
deleted file mode 100644
index 86c9cc0..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/thread/waitable_event.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef BASE_THREAD_WAITABLE_EVENT_H
-#define BASE_THREAD_WAITABLE_EVENT_H
-
-#include <condition_variable>
-#include <mutex>
-
-namespace weex {
-namespace base {
-class WaitableEvent {
- public:
-  WaitableEvent() : mutex_(), condition_(), signaled_(false) {}
-  ~WaitableEvent() {}
-
-  void Signal() {
-    std::lock_guard<std::mutex> locker(mutex_);
-    signaled_ = true;
-    condition_.notify_one();
-  }
-
-  void Wait() {
-    std::unique_lock<std::mutex> locker(mutex_);
-    while (!signaled_) condition_.wait(locker);
-    signaled_ = false;
-  }
-
- private:
-  std::mutex mutex_;
-  std::condition_variable condition_;
-  bool signaled_;
-  DISALLOW_COPY_AND_ASSIGN(WaitableEvent);
-};
-}  // namespace base
-}  // namespace weex
-#endif  // BASE_THREAD_WAITABLE_EVENT_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/time_calculator.h b/ios/Pods/WeexSDK/weex_core/Source/base/time_calculator.h
deleted file mode 100644
index 9831921..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/time_calculator.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by Darin on 2019/1/14.
-//
-
-#ifndef WEEX_PROJECT_TIME_CALCULATOR_H
-#define WEEX_PROJECT_TIME_CALCULATOR_H
-
-#include <string>
-#include "time_point.h"
-#include "time_unit.h"
-#include "android/log_utils.h"
-
-namespace weex {
-namespace base {
-enum TaskPlatform {
-  WEEXCORE,
-  JSS_ENGINE
-};
-
-class TimeCalculator {
- public:
-  TimeCalculator(TaskPlatform taskPlatform, std::string name, std::string id) :
-      task_name(name),
-      instance_id(id),
-      end(TimePoint::Now()),
-      start(TimePoint::Now()),
-      task_end(TimePoint::Now()),
-      task_start(TimePoint::Now()),
-      task_id(genTaskId()) {
-    if (taskPlatform == TaskPlatform::JSS_ENGINE) {
-      task_platform = "jsengine";
-    } else {
-      task_platform = "weexcore";
-    }
-  }
-
-  int genTaskId() {
-    static int taskIdGenerator = 0;
-    return __sync_fetch_and_add(&taskIdGenerator, 1);
-  }
-
-  ~TimeCalculator() {
-    if (!task_end_flag) {
-      task_end = TimePoint::Now();
-    }
-    end = TimePoint::Now();
-    print();
-  }
-
-  void taskStart() {
-//    LOGE(
-//        "dyyLog %s taskName is %s : instanceId %s : task_id %d: taskStart",
-//        task_platform.c_str(),
-//        task_name.c_str(),
-//        instance_id.c_str(),
-//        task_id);
-    this->task_start = TimePoint::Now();
-  }
-
-  void taskEnd() {
-//    LOGE(
-//        "dyyLog %s taskName is %s : instanceId %s : task_id %d: taskEnd",
-//        task_platform.c_str(),
-//        task_name.c_str(),
-//        instance_id.c_str(),
-//        task_id);
-    this->task_end = TimePoint::Now();
-    task_end_flag = true;
-  }
-
-  void set_task_name(std::string name) {
-    this->task_name = name;
-  }
-
-  void print() {
-    const TimeUnit &allCost = end.ToTimeUnit() - start.ToTimeUnit();
-    const TimeUnit &taskWait = task_start.ToTimeUnit() - start.ToTimeUnit();
-    const TimeUnit &taskCost = task_end.ToTimeUnit() - task_start.ToTimeUnit();
-
-//    int64_t taskCostMS = taskCost.ToMilliseconds();
-//    if (taskCostMS < 5) {
-//      LOGD("dyyLog %s taskName is %s cost less than 5ms", task_platform.c_str(),
-//           task_name.c_str());
-//    } else {
-//      std::string msg = "normal";
-//
-//      if (taskCostMS > 100) {
-//        msg = "task cost than 100, ";
-//      }
-//
-//      if (taskWait.ToMilliseconds() > 100) {
-//        std::string a = "wait to long time than 100ms";
-//        msg += a;
-//      }
-//
-//      LOGE(
-//          "dyyLog %s taskName is %s : instanceId %s : task_id %d: start : %lld  ---  end : %lld  ---  allCost:%lld  ---  taskCost:%lld  ---  taskWait:%lld --- msg:%s",
-//          task_platform.c_str(),
-//          task_name.c_str(),
-//          instance_id.c_str(),
-//          task_id,
-//          start.ToTimeUnit().ToMilliseconds(),
-//          end.ToTimeUnit().ToMilliseconds(),
-//          allCost.ToMilliseconds(),
-//          taskCostMS,
-//          taskWait.ToMilliseconds(),
-//          msg.c_str());
-//    }
-  }
-
- private:
-  std::string task_name;
-  int task_id;
-  std::string instance_id;
-  TimePoint start;
-  TimePoint end;
-  TimePoint task_start;
-  TimePoint task_end;
-  bool task_end_flag = false;
-  std::string task_platform;
-};
-}  // namespace base
-}  // namespace weex
-
-#endif //WEEX_PROJECT_TIME_CALCULATOR_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/time_point.cc b/ios/Pods/WeexSDK/weex_core/Source/base/time_point.cc
deleted file mode 100644
index 9428036..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/time_point.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "base/time_point.h"
-#include <assert.h>
-#include <time.h>
-
-namespace weex {
-namespace base {
-TimePoint TimePoint::Now() {
-  struct timespec ts;
-  int res = clock_gettime(CLOCK_MONOTONIC, &ts);
-  assert(res == 0);
-  return TimePoint(TimeUnit::FromSeconds(ts.tv_sec).ToNanoseconds() +
-                   ts.tv_nsec);
-}
-}  // namespace base
-}  // namespace weex
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/time_point.h b/ios/Pods/WeexSDK/weex_core/Source/base/time_point.h
deleted file mode 100644
index 796cdea..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/time_point.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_BASE_TIME_POINT_H
-#define CORE_BASE_TIME_POINT_H
-
-#include <cstdint>
-#include "base/time_unit.h"
-
-namespace weex {
-namespace base {
-class TimePoint {
- public:
-  static TimePoint Now();
-
-  TimePoint operator+(TimeUnit unit) const {
-    return TimePoint(nanos_ + unit.ToNanoseconds());
-  }
-  TimePoint operator-(TimeUnit unit) const {
-    return TimePoint(nanos_ - unit.ToNanoseconds());
-  }
-  TimeUnit operator-(TimePoint other) const {
-    return TimeUnit::FromNanoseconds(nanos_ - other.nanos_);
-  }
-
-  bool operator==(TimePoint other) const { return nanos_ == other.nanos_; }
-  bool operator!=(TimePoint other) const { return nanos_ != other.nanos_; }
-  bool operator<(TimePoint other) const { return nanos_ < other.nanos_; }
-  bool operator<=(TimePoint other) const { return nanos_ <= other.nanos_; }
-  bool operator>(TimePoint other) const { return nanos_ > other.nanos_; }
-  bool operator>=(TimePoint other) const { return nanos_ >= other.nanos_; }
-
-  constexpr TimeUnit ToTimeUnit() const {
-    return TimeUnit::FromNanoseconds(nanos_);
-  }
-
- private:
-  explicit constexpr TimePoint(int64_t ns) : nanos_(ns) {}
-  int64_t nanos_;
-};
-}  // namespace base
-}  // namespace weex
-
-#endif  // CORE_BASE_TIME_POINT_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/time_unit.h b/ios/Pods/WeexSDK/weex_core/Source/base/time_unit.h
deleted file mode 100644
index 7205eca..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/time_unit.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_BASE_TIME_UNIT_H
-#define CORE_BASE_TIME_UNIT_H
-
-#include <cstdint>
-#include <limits>
-
-namespace weex {
-namespace base {
-class TimeUnit {
- public:
-  TimeUnit() {}
-
-  static constexpr TimeUnit Zero(int64_t nanos) { return TimeUnit(0); }
-
-  static constexpr TimeUnit Min() {
-    return TimeUnit(std::numeric_limits<int64_t>::min());
-  }
-  static constexpr TimeUnit Max() {
-    return TimeUnit(std::numeric_limits<int64_t>::max());
-  }
-
-  static constexpr TimeUnit FromNanoseconds(int64_t nanos) {
-    return TimeUnit(nanos);
-  }
-
-  static constexpr TimeUnit FromMicroseconds(int64_t micros) {
-    return FromNanoseconds(micros * 1000);
-  }
-
-  static constexpr TimeUnit FromMilliseconds(int64_t millis) {
-    return FromMicroseconds(millis * 1000);
-  }
-
-  static constexpr TimeUnit FromSeconds(int64_t seconds) {
-    return FromMilliseconds(seconds * 1000);
-  }
-
-  constexpr TimeUnit operator-(TimeUnit other) const {
-    return TimeUnit::FromNanoseconds(nanos_ - other.nanos_);
-  }
-
-  constexpr TimeUnit operator+(TimeUnit other) const {
-    return TimeUnit::FromNanoseconds(nanos_ + other.nanos_);
-  }
-
-  constexpr TimeUnit operator/(int64_t divisor) const {
-    return TimeUnit::FromNanoseconds(nanos_ / divisor);
-  }
-
-  constexpr int64_t operator/(TimeUnit other) const {
-    return nanos_ / other.nanos_;
-  }
-
-  constexpr TimeUnit operator*(int64_t multiplier) const {
-    return TimeUnit::FromNanoseconds(nanos_ * multiplier);
-  }
-
-  constexpr TimeUnit operator%(TimeUnit other) const {
-    return TimeUnit::FromNanoseconds(nanos_ % other.nanos_);
-  }
-
-  bool operator==(TimeUnit other) const { return nanos_ == other.nanos_; }
-  bool operator!=(TimeUnit other) const { return nanos_ != other.nanos_; }
-  bool operator<(TimeUnit other) const { return nanos_ < other.nanos_; }
-  bool operator<=(TimeUnit other) const { return nanos_ <= other.nanos_; }
-  bool operator>(TimeUnit other) const { return nanos_ > other.nanos_; }
-  bool operator>=(TimeUnit other) const { return nanos_ >= other.nanos_; }
-
-  constexpr int64_t ToNanoseconds() const { return nanos_; }
-  constexpr int64_t ToMicroseconds() const { return ToNanoseconds() / 1000; }
-  constexpr int64_t ToMilliseconds() const { return ToMicroseconds() / 1000; }
-  constexpr int64_t ToSeconds() const { return ToMilliseconds() / 1000; }
-
- private:
-  explicit constexpr TimeUnit(int64_t nanos) : nanos_(nanos) {}
-  int64_t nanos_ = 0;
-};
-}  // namespace base
-}  // namespace weex
-
-#endif  // CORE_BASE_TIME_UNIT_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/base/time_utils.h b/ios/Pods/WeexSDK/weex_core/Source/base/time_utils.h
deleted file mode 100644
index dd6ee06..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/base/time_utils.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef WEEX_PROJECT_TIMEUTILS_H
-#define WEEX_PROJECT_TIMEUTILS_H
-
-#include <sys/time.h>
-
-static long long getCurrentTime() {
-  struct timeval tv;
-  gettimeofday(&tv, NULL);
-  return (long long) tv.tv_sec * 1000 + (long long) tv.tv_usec / 1000;
-}
-
-#endif //WEEX_PROJECT_TIMEUTILS_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/api/wx_api.h b/ios/Pods/WeexSDK/weex_core/Source/core/api/wx_api.h
deleted file mode 100644
index 94ec8d6..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/api/wx_api.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-#define WX_EXPORT __attribute__((visibility("default")))
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/eagle_bridge.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/eagle_bridge.cpp
deleted file mode 100644
index c7272ba..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/eagle_bridge.cpp
+++ /dev/null
@@ -1,257 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/bridge/eagle_bridge.h"
-#include "base/closure.h"
-#include "core/render/node/render_object.h"
-#include "core/render/node/factory/render_creator.h"
-#include "core/render/manager/render_manager.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/network/http_module.h"
-#include "eagle_bridge.h"
-
-
-namespace WeexCore {
-    EagleBridge *EagleBridge::g_instance = nullptr;
-    
-    EagleRenderObject::EagleRenderObject():render_object_impl_(nullptr) {}
-
-    EagleRenderObject::EagleRenderObject(RenderObject* render_object):render_object_impl_(render_object) {}
-
-    void EagleRenderObject::AddAttr(std::string key, std::string value) {
-        render_object_impl_->AddAttr(key, value);
-    }
-    
-    void EagleRenderObject::AddStyle(std::string key, std::string value) {
-        render_object_impl_->AddStyle(key, value, false);
-    }
-
-    void EagleRenderObject::UpdateAttr(std::string key, std::string value) {
-        render_object_impl_->UpdateAttr(key, value);
-    }
-
-    void EagleRenderObject::UpdateStyle(std::string key, std::string value) {
-        render_object_impl_->UpdateStyle(key, value);
-    }
-
-    void EagleRenderObject::AddEvent(std::string event) {
-        render_object_impl_->AddEvent(event);
-    }
-
-    void EagleRenderObject::RemoveEvent(std::string event) {
-        render_object_impl_->RemoveEvent(event);
-    }
-
-    std::set<std::string>* EagleRenderObject::events() {
-        return render_object_impl_->events();
-    }
-    
-    void EagleRenderObject::set_page_id(const std::string& page_id) {
-        render_object_impl_->set_page_id(page_id);
-    }
-    
-    void EagleRenderObject::ApplyDefaultAttr() {
-        render_object_impl_->ApplyDefaultAttr();
-    }
-    
-    void EagleRenderObject::ApplyDefaultStyle() {
-        render_object_impl_->ApplyDefaultStyle(false);
-    }
-    
-    int EagleRenderObject::AddRenderObject(int index, EagleRenderObject child) {
-        if (!render_object_impl_) {
-            return -1;
-        }
-        return render_object_impl_->AddRenderObject(index, child.render_object_impl_);
-    }
-
-    int EagleRenderObject::getChildCount() {
-        return static_cast<int>(render_object_impl_->getChildCount());
-    }
-
-    int EagleRenderObject::getChildIndex(EagleRenderObject child) {
-        return static_cast<int>(render_object_impl_->IndexOf(child.render_object_impl_));
-    }
-
-    EagleRenderObject EagleRenderObject::GetChild(int index) {
-        return render_object_impl_->GetChild(index);
-    }
-
-    EagleRenderObject EagleRenderObject::parent_render(){
-        return render_object_impl_->parent_render();
-    }
-
-    const std::string& EagleRenderObject::page_id(){
-        return render_object_impl_->page_id();
-    }
-
-    const std::string& EagleRenderObject::ref(){
-        return render_object_impl_->ref();
-    }
-
-    void EagleRenderObject::RemoveRenderObject(EagleRenderObject child) {
-        render_object_impl_->RemoveRenderObject(child.render_object_impl_);
-    }
-
-    EagleRenderObject EagleBridge::WeexCoreHandler::GetEagleRenderObject(const std::string &type, const std::string &ref) {
-        return EagleRenderObject(static_cast<WeexCore::RenderObject*>(WeexCore::RenderCreator::GetInstance()->CreateRender(type, ref)));
-    }
-    
-    bool EagleBridge::WeexCoreHandler::CreatePage(const std::string& page_id, EagleRenderObject root) {
-        return RenderManager::GetInstance()->CreatePage(page_id, root.render_object_impl_);
-    }
-
-    bool EagleBridge::WeexCoreHandler::HavePage(const std::string& page_id) {
-        return RenderManager::GetInstance()->GetPage(page_id) ? true : false;
-    }
-    
-    bool EagleBridge::WeexCoreHandler::CreateFinish(const std::string &page_id) {
-        return RenderManager::GetInstance()->CreateFinish(page_id);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::ClosePage(const std::string &page_id) {
-        return RenderManager::GetInstance()->ClosePage(page_id);
-    }
-    
-    void EagleBridge::WeexCoreHandler::ReportException(const char* page_id, const char* func, const char* exception_string) {
-        WeexCore::WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->ReportException(page_id, func, exception_string);
-    }
-    
-    void EagleBridge::WeexCoreHandler::Send(const char* instance_id, const char* url, std::function<void(const std::string&, const std::string&)> callback) {
-        weex::core::network::HttpModule http_module;
-        http_module.Send(instance_id, url, callback);
-    }
-
-    void EagleBridge::WeexCoreHandler::GetBundleType(const char* instance_id, const char* content, std::function<void(const std::string&, const std::string&)> callback) {
-        weex::core::network::HttpModule http_module;
-        http_module.GetBundleType(instance_id, content, callback);
-    }
-    
-    int EagleBridge::WeexCoreHandler::RefreshFinish(const char* page_id, const char* task, const char* callback) {
-      WeexCore::WeexCoreManager::Instance()
-          ->getPlatformBridge()
-          ->core_side()->ForceLayout(page_id);
-        return WeexCore::WeexCoreManager::Instance()
-        ->getPlatformBridge()
-        ->platform_side()
-        ->RefreshFinish(page_id, task, callback);
-    }
-    
-    std::unique_ptr<ValueWithType> EagleBridge::WeexCoreHandler::CallNativeModule(const char* page_id, const char* module, const char* method,const char* arguments, int arguments_length, const char* options, int options_length) {
-        return WeexCoreManager::Instance()
-        ->getPlatformBridge()
-        ->platform_side()
-        ->CallNativeModule(page_id, module, method, arguments, arguments_length, options, options_length);
-    }
-#if OS_IOS
-    std::unique_ptr<ValueWithType> EagleBridge::WeexCoreHandler::RegisterPluginModule(const std::string &name, const std::string &class_name, const std::string &version) {
-        return WeexCoreManager::Instance()
-        ->getPlatformBridge()
-        ->platform_side()
-        ->RegisterPluginModule(name.c_str(), class_name.c_str(), version.c_str());
-    }
-    std::unique_ptr<ValueWithType> EagleBridge::WeexCoreHandler::RegisterPluginComponent(const std::string &name, const std::string &class_name, const std::string &version) {
-        return WeexCoreManager::Instance()
-        ->getPlatformBridge()
-        ->platform_side()
-        ->RegisterPluginComponent(name.c_str(), class_name.c_str(), version.c_str());
-    }
-
-    void EagleBridge::WeexCoreHandler::PostTaskOnComponentThread(const weex::base::Closure& closure) {
-        WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->PostTaskOnComponentThread(closure);
-    }
-#endif
-    void EagleBridge::WeexCoreHandler::CallNativeComponent(const char* page_id, const char* module, const char* method,const char* arguments, int arguments_length, const char* options, int options_length) {
-        WeexCoreManager::Instance()
-        ->getPlatformBridge()
-        ->platform_side()
-        ->CallNativeComponent(page_id, module, method, arguments, arguments_length, options, options_length);
-    }
-    
-    void EagleBridge::WeexCoreHandler::NativeLog(const char* str_array) {
-        WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->NativeLog(str_array);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::RemoveRenderObject(const std::string &page_id, const std::string &ref) {
-        return RenderManager::GetInstance()->RemoveRenderObject(page_id, ref);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::AddRenderObject(const std::string &page_id, const std::string &parent_ref, int index, EagleRenderObject root) {
-        return RenderManager::GetInstance()->AddRenderObject(page_id, parent_ref, index, root.render_object_impl_);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::MoveRenderObject(const std::string &page_id, const std::string &ref,const std::string &parent_ref, int index) {
-        return RenderManager::GetInstance()->MoveRenderObject(page_id, ref, parent_ref, index);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::RemoveEvent(const std::string &page_id, const std::string &ref,
-                                  const std::string &event) {
-        return RenderManager::GetInstance()->RemoveEvent(page_id, ref, event);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::AddEvent(const std::string &page_id, const std::string &ref,
-                               const std::string &event) {
-        return RenderManager::GetInstance()->AddEvent(page_id, ref, event);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::UpdateAttr(const std::string &page_id, const std::string &ref,
-                    const char *data) {
-        return RenderManager::GetInstance()->UpdateAttr(page_id, ref, data);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::UpdateAttr(const std::string &page_id, const std::string &ref,
-                                 std::vector<std::pair<std::string, std::string>> *attrPair) {
-        return RenderManager::GetInstance()->UpdateAttr(page_id, ref, attrPair);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::UpdateStyle(const std::string &page_id, const std::string &ref,
-                                  const char *data) {
-        return RenderManager::GetInstance()->UpdateStyle(page_id, ref, data);
-    }
-    
-    bool EagleBridge::WeexCoreHandler::UpdateStyle(const std::string &page_id, const std::string &ref,
-                                  std::vector<std::pair<std::string, std::string>> *stylePair) {
-        return RenderManager::GetInstance()->UpdateStyle(page_id, ref, stylePair);
-    }
-
-    int EagleBridge::WeexCoreHandler::ExecJS(const char *instanceId, const char *nameSpace,
-                       const char *func,
-                       std::vector<VALUE_WITH_TYPE *> &params){
-        return WeexCore::WeexCoreManager::Instance()->script_bridge()->script_side()->ExecJS(
-            instanceId,
-            nameSpace,
-            func,
-            params
-        );
-    }
-
-    void EagleBridge::WeexCoreHandler::PostTaskToMsgLoop(const weex::base::Closure& closure){
-#ifdef OS_ANDROID
-        WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(closure);
-#endif
-    }
-    
-    int EagleBridge::DataRenderHandler::DestroyInstance(const char *instanceId) {
-        return WeexCoreManager::Instance()
-        ->script_bridge()
-        ->script_side()
-        ->DestroyInstance(instanceId);
-    }
-}
-
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/eagle_bridge.h b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/eagle_bridge.h
deleted file mode 100644
index f7b0478..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/eagle_bridge.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_BRIDGE_EAGLE_BRIDGE_H
-#define CORE_BRIDGE_EAGLE_BRIDGE_H
-
-#if defined __cplusplus
-#include <string>
-#include <functional>
-#include <set>
-
-struct ValueWithType;
-namespace WeexCore {
-    class RenderObject;
-    class DataRenderHandler;
-    
-    class EagleRenderObject {
-    public:
-        friend class EagleBridge;
-        EagleRenderObject();
-        EagleRenderObject(RenderObject* render_object);
-        void AddAttr(std::string key, std::string value);
-        void AddStyle(std::string key, std::string value);
-        void UpdateAttr(std::string key, std::string value);
-        void UpdateStyle(std::string key, std::string value);
-        void AddEvent(std::string event);
-        void RemoveEvent(std::string event);
-        std::set<std::string> *events();
-        
-        void set_page_id(const std::string& page_id);
-        void ApplyDefaultStyle();
-        void ApplyDefaultAttr();
-        int getChildCount();
-        int getChildIndex(EagleRenderObject child);
-        EagleRenderObject GetChild(int index);
-        EagleRenderObject parent_render();
-        int AddRenderObject(int index, EagleRenderObject child);
-        void RemoveRenderObject(EagleRenderObject child);
-        const std::string& page_id();
-        const std::string& ref();
-
-        bool operator ==(const EagleRenderObject& object) const {
-            return render_object_impl_ == object.render_object_impl_;
-        }
-        explicit operator bool() const
-        {
-            return static_cast<bool>(render_object_impl_);
-        }
-
-    private:
-        RenderObject* render_object_impl_;
-    };
-
-    class EagleBridge {
-    public:
-        class WeexCoreHandler {
-        public:
-            EagleRenderObject GetEagleRenderObject(const std::string &type, const std::string &ref);
-            bool CreatePage(const std::string& page_id, EagleRenderObject root);
-            bool HavePage(const std::string& page_id);
-            bool CreateFinish(const std::string &page_id);
-            bool ClosePage(const std::string &page_id);
-            void ReportException(const char* page_id, const char* func, const char* exception_string);
-            void Send(const char* instance_id, const char* url, std::function<void(const std::string&, const std::string&)> callback);
-            void GetBundleType(const char* instance_id, const char* url, std::function<void(const std::string&, const std::string&)> callback);
-            int RefreshFinish(const char* page_id, const char* task, const char* callback);
-            std::unique_ptr<ValueWithType> CallNativeModule (const char* page_id, const char* module, const char* method,const char* arguments, int arguments_length, const char* options, int options_length);
-            void CallNativeComponent (const char* page_id, const char* module, const char* method,const char* arguments, int arguments_length, const char* options, int options_length);
-            void NativeLog(const char* str_array);
-            bool RemoveRenderObject(const std::string &page_id, const std::string &ref);
-            bool AddRenderObject(const std::string &page_id, const std::string &parent_ref, int index,EagleRenderObject root);
-            bool MoveRenderObject(const std::string &page_id, const std::string &ref,const std::string &parent_ref, int index);
-            bool RemoveEvent(const std::string &page_id, const std::string &ref,
-                             const std::string &event);
-            bool AddEvent(const std::string &page_id, const std::string &ref,
-                          const std::string &event);
-            bool UpdateAttr(const std::string &page_id, const std::string &ref,
-                            const char *data);
-            
-            bool UpdateAttr(const std::string &page_id, const std::string &ref,
-                            std::vector<std::pair<std::string, std::string>> *attrPair);
-            
-            bool UpdateStyle(const std::string &page_id, const std::string &ref,
-                             const char *data);
-            
-            bool UpdateStyle(const std::string &page_id, const std::string &ref,
-                             std::vector<std::pair<std::string, std::string>> *stylePair);
-
-            int ExecJS(const char *instanceId, const char *nameSpace,
-                       const char *func,
-                       std::vector<struct ValueWithType *> &params);
-            void PostTaskToMsgLoop(const std::function<void()>& closure);
-#if OS_IOS
-            std::unique_ptr<ValueWithType> RegisterPluginModule(const std::string &name, const std::string &class_name, const std::string &version);
-            std::unique_ptr<ValueWithType> RegisterPluginComponent(const std::string &name, const std::string &class_name, const std::string &version);
-            void PostTaskOnComponentThread(const std::function<void()>& closure);
-#endif
-        };
-        
-        class DataRenderHandler {
-        public:
-            virtual int DestroyInstance(const char *instanceId);
-            virtual void CreatePage(const std::string &input, const std::string &page_id, const std::string &options, const std::string &init_data, std::function<void(const char*, const char*)> exec_js) {}
-            
-            virtual void CreatePage(const char *contents, size_t length, const std::string& page_id, const std::string& options, const std::string& env, const std::string& init_data, std::function<void(const char*,const char*)> exec_js) {}
-            virtual bool RefreshPage(const std::string &page_id, const std::string &init_data) {return false;}
-            virtual void UpdateComponentData(const std::string& page_id, const char* cid, const std::string& json_data) {}
-            virtual void FireEvent(const std::string &page_id, const std::string &ref, const std::string &event,const std::string &args,const std::string &dom_changes) {}
-            virtual void InvokeCallback(const std::string& page_id,
-                                      const std::string& callback_id,
-                                      const std::string& data,
-                                      bool keep_alive) {}
-            virtual void RegisterModules(const std::string &modules) {}
-            virtual void RegisterComponent(const std::string &str) {};
-            virtual void DispatchPageLifecycle(const std::string &page_id) {};
-        };
-        
-        static EagleBridge* GetInstance() {
-            if (!g_instance) {
-                g_instance = new EagleBridge();
-            }
-            return g_instance;
-        }
-        DataRenderHandler *data_render_handler() const {return data_render_handler_.get();}
-        void set_data_render_handler(DataRenderHandler *data_render_handler) {data_render_handler_.reset(data_render_handler);}
-        WeexCoreHandler* weex_core_handler() const {return weex_core_handler_.get();}
-        
-
-    private:
-        EagleBridge() : weex_core_handler_(new WeexCoreHandler()) {}
-        static EagleBridge *g_instance;
-        std::unique_ptr<DataRenderHandler> data_render_handler_;
-        std::unique_ptr<WeexCoreHandler> weex_core_handler_;
-    };
-
-}
-
-#endif
-#endif
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/log_bridge.h b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/log_bridge.h
deleted file mode 100644
index 91ad11e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/log_bridge.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-namespace WeexCore {
-
-    class LogBridge {
-    public:
-        LogBridge() {}
-        
-        virtual void log(LogLevel level, const char* tag, const char* file, unsigned long line, const char* log) {};
-    };
-    
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp
deleted file mode 100644
index 0514c1e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp
+++ /dev/null
@@ -1,628 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#include "core/bridge/platform/core_side_in_platform.h"
-
-#include "core/common/view_utils.h"
-#include "base/string_util.h"
-#include "base/log_defines.h"
-#include "core/config/core_environment.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/render/manager/render_manager.h"
-#include "core/render/node/factory/render_creator.h"
-#include "core/render/node/factory/render_type.h"
-#include "core/render/node/render_list.h"
-#include "core/render/node/render_object.h"
-#include "core/render/page/render_page.h"
-#include "core/json/JsonRenderManager.h"
-#include "core/bridge/eagle_bridge.h"
-#include "third_party/json11/json11.hpp"
-#ifdef OS_ANDROID
-#include <android/utils/params_utils.h>
-#include <wson/wson.h>
-#endif
-
-namespace WeexCore {
-
-CoreSideInPlatform::CoreSideInPlatform() {}
-CoreSideInPlatform::~CoreSideInPlatform() {}
-void CoreSideInPlatform::SetDefaultHeightAndWidthIntoRootDom(
-    const std::string &instance_id, float default_width, float default_height,
-    bool is_width_wrap_content, bool is_height_wrap_content) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) return;
-  page->SetDefaultHeightAndWidthIntoRootRender(default_width, default_height,
-                                               is_width_wrap_content,
-                                               is_height_wrap_content);
-}
-
-void CoreSideInPlatform::OnInstanceClose(const std::string &instance_id) {
-  RenderManager::GetInstance()->ClosePage(instance_id);
-}
-
-void CoreSideInPlatform::SetStyleWidth(const std::string &instance_id,
-                                       const std::string &render_ref,
-                                       float width) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-
-  RenderObject *render = static_cast<RenderPage*>(page)->GetRenderObject(render_ref);
-  if (render == nullptr) return;
-
-  render->setStyleWidthLevel(CSS_STYLE);
-  render->setStyleWidth(width, true);
-  static_cast<RenderPage*>(page)->set_is_dirty(true);
-}
-
-void CoreSideInPlatform::SetStyleHeight(const std::string &instance_id,
-                                        const std::string &render_ref,
-                                        float height) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-
-  RenderObject *render = static_cast<RenderPage*>(page)->GetRenderObject(render_ref);
-  if (render == nullptr) return;
-
-  render->setStyleHeightLevel(CSS_STYLE);
-  render->setStyleHeight(height);
-  static_cast<RenderPage*>(page)->set_is_dirty(true);
-}
-
-void CoreSideInPlatform::SetMargin(const std::string &instance_id,
-                                   const std::string &render_ref, int edge,
-                                   float value) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-
-  RenderObject *render = static_cast<RenderPage*>(page)->GetRenderObject(render_ref);
-  if (render == nullptr) return;
-
-  if (edge == 0) {
-    render->setMargin(kMarginTop, value);
-  } else if (edge == 1) {
-    render->setMargin(kMarginBottom, value);
-  } else if (edge == 2) {
-    render->setMargin(kMarginLeft, value);
-  } else if (edge == 3) {
-    render->setMargin(kMarginRight, value);
-  } else if (edge == 4) {
-    render->setMargin(kMarginALL, value);
-  }
-  static_cast<RenderPage*>(page)->set_is_dirty(true);
-}
-
-void CoreSideInPlatform::SetPadding(const std::string &instance_id,
-                                    const std::string &render_ref, int edge,
-                                    float value) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-
-  RenderObject *render = static_cast<RenderPage*>(page)->GetRenderObject(render_ref);
-  if (render == nullptr) return;
-
-  if (edge == 0) {
-    render->setPadding(kPaddingTop, value);
-  } else if (edge == 1) {
-    render->setPadding(kPaddingBottom, value);
-  } else if (edge == 2) {
-    render->setPadding(kPaddingLeft, value);
-  } else if (edge == 3) {
-    render->setPadding(kPaddingRight, value);
-  } else if (edge == 4) {
-    render->setPadding(kPaddingALL, value);
-  }
-  static_cast<RenderPage*>(page)->set_is_dirty(true);
-}
-
-void CoreSideInPlatform::SetPosition(const std::string &instance_id,
-                                     const std::string &render_ref, int edge,
-                                     float value) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-
-  RenderObject *render = static_cast<RenderPage*>(page)->GetRenderObject(render_ref);
-  if (render == nullptr) return;
-
-  if (edge == 0) {
-    render->setStylePosition(kPositionEdgeTop, value);
-  } else if (edge == 1) {
-    render->setStylePosition(kPositionEdgeBottom, value);
-  } else if (edge == 2) {
-    render->setStylePosition(kPositionEdgeLeft, value);
-  } else if (edge == 3) {
-    render->setStylePosition(kPositionEdgeRight, value);
-  }
-  static_cast<RenderPage*>(page)->set_is_dirty(true);
-}
-
-void CoreSideInPlatform::MarkDirty(const std::string &instance_id,
-                                   const std::string &render_ref) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-
-  RenderObject *render = static_cast<RenderPage*>(page)->GetRenderObject(render_ref);
-  if (render == nullptr) return;
-  render->markDirty();
-}
-
-void CoreSideInPlatform::SetViewPortWidth(const std::string &instance_id,
-                                          float width) {
-  RenderManager::GetInstance()->set_viewport_width(instance_id, width);
-}
-    
-void CoreSideInPlatform::SetDeviceDisplayOfPage(const std::string &instance_id, float width, float height /* unused now */)  {
-  RenderManager::GetInstance()->setDeviceWidth(instance_id, width);
-}
-
-void CoreSideInPlatform::SetPageRenderType(const std::string &pageId,
-                                           const std::string &renderType) {
-    RenderManager::GetInstance()->setPageArgument(pageId, "renderType", renderType);
-}
-
-void CoreSideInPlatform::RemovePageRenderType(const std::string &pageId) {
-  // void
-}
-
-
-void CoreSideInPlatform::SetPageArgument(const std::string &pageId, const std::string& key, const std::string& value){
-     RenderManager::GetInstance()->setPageArgument(pageId, key, value);
-}
-
-void CoreSideInPlatform::SetDeviceDisplay(const std::string &instance_id, float width, float height, float scale) {
-  RenderManager::GetInstance()->setDeviceWidth(instance_id, width);
-
-    /**
-     * also update global device with height and options
-     * */
-  WXCoreEnvironment::getInstance()->SetDeviceWidth(std::to_string(width));
-  WXCoreEnvironment::getInstance()->SetDeviceHeight(std::to_string(height));
-  WXCoreEnvironment::getInstance()->PutOption(SCALE, std::to_string(scale));
-}
-
-void CoreSideInPlatform::SetPageDirty(const std::string &instance_id) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(std::string(instance_id));
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-  static_cast<RenderPage*>(page)->set_is_dirty(true);
-}
-
-void CoreSideInPlatform::ForceLayout(const std::string &instance_id) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page != nullptr) {
-    if (!page->is_platform_page()) return;
-    static_cast<RenderPage*>(page)->LayoutImmediately();
-    static_cast<RenderPage*>(page)->has_fore_layout_action_.store(false);
-  }
-}
-
-bool CoreSideInPlatform::NotifyLayout(const std::string &instance_id) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page != nullptr) {
-    if (!page->is_platform_page()) return false;
-      
-    if (!static_cast<RenderPage*>(page)->need_layout_.load()) {
-      static_cast<RenderPage*>(page)->need_layout_.store(true);
-    }
-
-    bool ret = !static_cast<RenderPage*>(page)->has_fore_layout_action_.load() && static_cast<RenderPage*>(page)->is_dirty();
-    if (ret) {
-      static_cast<RenderPage*>(page)->has_fore_layout_action_.store(true);
-    }
-    return ret ? true : false;
-  }
-  return false;
-}
-    
-bool CoreSideInPlatform::RelayoutUsingRawCssStyles(const std::string& instance_id) {
-  return RenderManager::GetInstance()->ReloadPageLayout(instance_id);
-}
-
-std::vector<int64_t> CoreSideInPlatform::GetFirstScreenRenderTime(
-    const std::string &instance_id) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) {
-    return std::vector<int64_t>();
-  } else {
-    return page->PrintFirstScreenLog();
-  }
-}
-
-std::vector<int64_t> CoreSideInPlatform::GetRenderFinishTime(
-    const std::string &instance_id) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) {
-    return std::vector<int64_t>();
-  } else {
-    return page->PrintRenderSuccessLog();
-  }
-}
-
-void CoreSideInPlatform::SetRenderContainerWrapContent(
-    const std::string &instance_id, bool wrap) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-
-  static_cast<RenderPage*>(page)->set_is_render_container_width_wrap_content(wrap);
-}
-
-void CoreSideInPlatform::BindMeasurementToRenderObject(long ptr) {
-  RenderObject *render = convert_long_to_render_object(ptr);
-  if (render && measure_function_adapter_exist_) {
-    render->BindMeasureFunc();
-  }
-}
-
-void CoreSideInPlatform::RegisterCoreEnv(const std::string &key,
-                                         const std::string &value) {
-  WXCoreEnvironment::getInstance()->AddOption(key, value);
-}
-
-long CoreSideInPlatform::GetRenderObject(const std::string &instance_id,
-                                         const std::string &render_ref) {
-  RenderPageBase *page = RenderManager::GetInstance()->GetPage(instance_id);
-  if (page == nullptr) {
-    return 0;
-  }
-  return convert_render_object_to_long(page->GetRenderObject(render_ref));
-}
-
-void CoreSideInPlatform::UpdateRenderObjectStyle(long render_ptr,
-                                                 const std::string &key,
-                                                 const std::string &value) {
-  RenderObject *render = convert_long_to_render_object(render_ptr);
-  render->UpdateStyle(key, value);
-}
-
-void CoreSideInPlatform::UpdateRenderObjectAttr(long render_ptr,
-                                                const std::string &key,
-                                                const std::string &value) {
-  RenderObject *render = convert_long_to_render_object(render_ptr);
-  render->UpdateAttr(key, value);
-  render->markDirty(true);
-}
-
-long CoreSideInPlatform::CopyRenderObject(long render_ptr) {
-  RenderObject *render = convert_long_to_render_object(render_ptr);
-  RenderObject *copy =
-      static_cast<RenderObject *>(RenderCreator::GetInstance()->CreateRender(
-          render->type(), render->ref()));
-  copy->CopyFrom(render);
-  if (render->type() == WeexCore::kRenderCellSlot ||
-      render->type() == WeexCore::kRenderCell) {
-    RenderList *renderList = static_cast<RenderList *>(render->getParent());
-    if (renderList != nullptr) {
-      renderList->AddCellSlotCopyTrack(copy);
-    } else {
-      LOGE("CopyRenderObject: %s", "copy error parent null");
-    }
-  }
-  return convert_render_object_to_long(copy);
-}
-
-void CoreSideInPlatform::SetMeasureFunctionAdapter() {
-  measure_function_adapter_exist_ = true;
-}
-
-void CoreSideInPlatform::SetPlatform(const std::string &platformName) {
-  WXCoreEnvironment::getInstance()->SetPlatform(platformName);
-}
-
-void CoreSideInPlatform::SetDeviceWidthAndHeight(float width, float height) {
-  WXCoreEnvironment::getInstance()->set_device_width(width);
-  WXCoreEnvironment::getInstance()->set_device_height(height);
-}
-
-void CoreSideInPlatform::AddOption(const std::string &key,
-                                   const std::string &value) {
-  WXCoreEnvironment::getInstance()->AddOption(key, value);
-}
-
-int CoreSideInPlatform::RefreshInstance(
-    const char *instanceId, const char *nameSpace, const char *func,
-    std::vector<VALUE_WITH_TYPE *> &params) {
-#ifdef OS_ANDROID
-  if(params.size() < 2)
-    return false;
-
-  if(params[1]->value.string->length <= 0)
-    return false;
-
-  std::string init_data = weex::base::to_utf8(params[1]->value.string->content,
-                                              params[1]->value.string->length);
-  auto handler = EagleBridge::GetInstance()->data_render_handler();
-  if (handler && handler->RefreshPage(instanceId, init_data)) {
-    std::vector<VALUE_WITH_TYPE*> msg;
-
-    VALUE_WITH_TYPE* event = getValueWithTypePtr();
-    event->type = ParamsType::BYTEARRAY;
-    auto buffer = wson_buffer_new();
-    wson_push_type_uint8_string(
-        buffer, reinterpret_cast<const uint8_t*>(instanceId), strlen(instanceId));
-    event->value.byteArray = genWeexByteArray(
-        static_cast<const char*>(buffer->data), buffer->position);
-    wson_buffer_free(buffer);
-    msg.push_back(event);
-
-    // args -> { method: 'fireEvent', args: [ref, "nodeEvent", args , domChanges, {params: [ {"templateId": templateId, "componentId": id, "type": type, "params" : [...]} ]}] }
-    VALUE_WITH_TYPE* args = getValueWithTypePtr();
-    args->type = ParamsType::JSONSTRING;
-    json11::Json final_json = json11::Json::array{
-        json11::Json::object{
-            {"method", "fireEvent"},
-            {"args",
-             json11::Json::array{
-                 "", "refresh", json11::Json::array{}, "",
-                 json11::Json::object{
-                     {"params",
-                      json11::Json::array{
-                          json11::Json::object{
-                              {"data", init_data}
-                          }
-                      }}
-                 }
-             }}
-        }
-    };
-
-    auto final_json_str = final_json.dump().c_str();
-    auto utf16_key = weex::base::to_utf16(const_cast<char*>(final_json_str),
-                                          strlen(final_json_str));
-    args->value.string = genWeexString(
-        reinterpret_cast<const uint16_t*>(utf16_key.c_str()), utf16_key.size());
-    msg.push_back(args);
-
-    WeexCore::WeexCoreManager::Instance()->script_bridge()->script_side()->ExecJS(
-        instanceId, "", "callJS", msg);
-    freeParams(msg);
-    return true;
-  }
-  return ExecJS(instanceId, nameSpace, func, params);
-#else
-  return 0;
-#endif
-}
-
-int CoreSideInPlatform::InitFramework(
-    const char *script, std::vector<INIT_FRAMEWORK_PARAMS *> &params) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->InitFramework(script, params);
-}
-
-int CoreSideInPlatform::InitAppFramework(
-    const char *instanceId, const char *appFramework,
-    std::vector<INIT_FRAMEWORK_PARAMS *> &params) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->InitAppFramework(instanceId, appFramework, params);
-}
-
-int CoreSideInPlatform::CreateAppContext(const char *instanceId,
-                                         const char *jsBundle) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->CreateAppContext(instanceId, jsBundle);
-}
-
-std::unique_ptr<WeexJSResult> CoreSideInPlatform::ExecJSOnAppWithResult(const char *instanceId,
-                                                      const char *jsBundle) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->ExecJSOnAppWithResult(instanceId, jsBundle);
-}
-
-int CoreSideInPlatform::CallJSOnAppContext(
-    const char *instanceId, const char *func,
-    std::vector<VALUE_WITH_TYPE *> &params) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->CallJSOnAppContext(instanceId, func, params);
-}
-
-int CoreSideInPlatform::DestroyAppContext(const char *instanceId) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->DestroyAppContext(instanceId);
-}
-
-int CoreSideInPlatform::ExecJsService(const char *source) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->ExecJsService(source);
-}
-
-int CoreSideInPlatform::ExecTimeCallback(const char *source) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->ExecTimeCallback(source);
-}
-
-int CoreSideInPlatform::ExecJS(const char *instanceId, const char *nameSpace,
-                               const char *func,
-                               std::vector<VALUE_WITH_TYPE *> &params) {
-  return WeexCoreManager::Instance()->script_bridge()->script_side()->ExecJS(
-      instanceId, nameSpace, func, params);
-}
-
-std::unique_ptr<WeexJSResult> CoreSideInPlatform::ExecJSWithResult(
-    const char *instanceId, const char *nameSpace, const char *func,
-    std::vector<VALUE_WITH_TYPE *> &params) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->ExecJSWithResult(instanceId, nameSpace, func, params);
-}
-
-void CoreSideInPlatform::ExecJSWithCallback(
-    const char *instanceId, const char *nameSpace, const char *func,
-    std::vector<VALUE_WITH_TYPE *> &params, long callback_id) {
-  WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->ExecJSWithCallback(instanceId, nameSpace, func, params, callback_id);
-}
-
-int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
-                                       const char *script, int script_length,
-                                       const char *opts,
-                                       const char *initData,
-                                       const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
-                                       const char *render_strategy) {
-
-  // First check about DATA_RENDER mode
-  if (render_strategy != nullptr) {
-    std::function<void(const char *, const char *)> exec_js =
-        [instanceId = std::string(instanceId), func = std::string(func),
-         opts = std::string(opts), initData = std::string(initData),
-         extendsApi = std::string(extendsApi)](const char *result, const char *bundleType) {
-          std::string error;
-          auto opts_json = json11::Json::parse(opts, error);
-          std::map<std::string, json11::Json> &opts_map =
-              const_cast<std::map<std::string, json11::Json> &>(
-                  opts_json.object_items());
-          opts_map["bundleType"] = bundleType;
-          std::vector<INIT_FRAMEWORK_PARAMS*> params;
-          WeexCoreManager::Instance()
-              ->script_bridge()
-              ->script_side()
-              ->CreateInstance(instanceId.c_str(), func.c_str(), result,
-                               opts_json.dump().c_str(), initData.c_str(),
-                               strcmp("Rax", bundleType) ? "\0" : extendsApi.c_str(),
-                               params);
-        };
-    if (strcmp(render_strategy, "DATA_RENDER") == 0) {
-        auto handler = EagleBridge::GetInstance()->data_render_handler();
-        if(handler){
-          handler->CreatePage(script, instanceId, render_strategy, initData, exec_js);
-        }
-        else{
-          WeexCore::WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->ReportException(
-            instanceId, "CreatePageWithContent", 
-            "There is no data_render_handler when createInstance with DATA_RENDER mode");
-        }
-
-      return true;
-    } else if (strcmp(render_strategy, "DATA_RENDER_BINARY") == 0) {
-      std::string error;
-      std::string env_str;
-      std::string option = "{}";
-      auto opts_json_value = json11::Json::parse(opts, error);
-      if (error.empty()) {
-        auto env_obj = opts_json_value["env"];
-        auto bundleUrl = opts_json_value["bundleUrl"];
-        env_str = "";
-        if (env_obj.is_object()) {
-          const json11::Json& options = env_obj["options"];
-          const json11::Json::object& options_obj = options.object_items();
-          json11::Json::object new_env{
-              env_obj.object_items()
-          };
-          for(auto &it :options_obj){
-            new_env[it.first] = it.second;
-          }
-          env_str = json11::Json(new_env).dump();
-        }
-
-        json11::Json::object new_option{
-            {"bundleUrl", bundleUrl},
-            {"weex", json11::Json::object{
-                {"config",opts_json_value}
-            }}
-        };
-        option = json11::Json(new_option).dump();
-      }
-      
-      auto handler = EagleBridge::GetInstance()->data_render_handler();
-      if(handler){
-        handler->CreatePage(script, static_cast<size_t>(script_length), instanceId, option, env_str, initData, exec_js);
-      }
-      else{
-        WeexCore::WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->ReportException(
-          instanceId, "CreatePageWithContent", 
-          "There is no data_render_handler when createInstance with DATA_RENDER_BINARY mode");
-      }
-      return true;
-    }
-
-    if(strcmp(render_strategy, "JSON_RENDER") == 0){
-       JsonRenderManager::GetInstance()->CreatePage(script, instanceId, render_strategy);
-       return true;
-    }
-  }
-
-
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->CreateInstance(instanceId, func, script, opts, initData, extendsApi, params);
-}
-
-std::unique_ptr<WeexJSResult> CoreSideInPlatform::ExecJSOnInstance(const char *instanceId,
-                                                 const char *script, int type) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->ExecJSOnInstance(instanceId, script,type);
-}
-
-int CoreSideInPlatform::DestroyInstance(const char *instanceId) {
-    auto handler = EagleBridge::GetInstance()->data_render_handler();
-    if(handler!=nullptr){
-      handler->DestroyInstance(instanceId);
-    }
-    if (JsonRenderManager::GetInstance()->ClosePage(instanceId)) {
-      return true;
-    }
-    return WeexCoreManager::Instance()->script_bridge()->script_side()->DestroyInstance(instanceId);
-}
-
-int CoreSideInPlatform::UpdateGlobalConfig(const char *config) {
-  return WeexCoreManager::Instance()
-      ->script_bridge()
-      ->script_side()
-      ->UpdateGlobalConfig(config);
-}
-
-
-int CoreSideInPlatform::UpdateInitFrameworkParams(const std::string &key, const std::string &value,
-                                                  const std::string &desc) {
-  return WeexCoreManager::Instance()
-          ->script_bridge()
-          ->script_side()
-          ->UpdateInitFrameworkParams(key, value, desc);
-}
-
-
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform/core_side_in_platform.h b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform/core_side_in_platform.h
deleted file mode 100644
index a6e5d93..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform/core_side_in_platform.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_BRIDGE_PLATFORM_CORE_SIDE_IN_SIMPLE_H
-#define CORE_BRIDGE_PLATFORM_CORE_SIDE_IN_SIMPLE_H
-
-#include "base/common.h"
-#include "core/bridge/platform_bridge.h"
-
-namespace WeexCore {
-class CoreSideInPlatform : public PlatformBridge::CoreSide {
- public:
-  explicit CoreSideInPlatform();
-  virtual ~CoreSideInPlatform();
-  void SetDefaultHeightAndWidthIntoRootDom(
-      const std::string &instance_id, float default_width, float default_height,
-      bool is_width_wrap_content, bool is_height_wrap_content) override;
-  void OnInstanceClose(const std::string &instance_id) override;
-  void SetStyleWidth(const std::string &instance_id,
-                     const std::string &render_ref, float width) override;
-  void SetStyleHeight(const std::string &instance_id,
-                      const std::string &render_ref, float height) override;
-  void SetMargin(const std::string &instance_id, const std::string &render_ref,
-                 int edge, float value) override;
-  void SetPadding(const std::string &instance_id, const std::string &render_ref,
-                  int edge, float value) override;
-  void SetPosition(const std::string &instance_id,
-                   const std::string &render_ref, int edge,
-                   float value) override;
-  void MarkDirty(const std::string &instance_id,
-                 const std::string &render_ref) override;
-
-  virtual void SetPageRenderType(const std::string &pageId, const std::string &renderType)override;
-  virtual void RemovePageRenderType(const std::string &pageId) override;
-
-  void SetViewPortWidth(const std::string &instance_id, float width) override; // set page required view port width
-  void SetDeviceDisplayOfPage(const std::string &instance_id, float width, float height /* unused now */) override; // set page required device width
-  void SetPageArgument(const std::string &pageId, const std::string& key, const std::string& value) override;
-  void SetDeviceDisplay(const std::string &instance_id, float width, float height, float scale) override;
-  void SetPageDirty(const std::string &instance_id) override;
-  void ForceLayout(const std::string &instance_id) override;
-  bool NotifyLayout(const std::string &instance_id) override;
-  bool RelayoutUsingRawCssStyles(const std::string& instance_id) override;
-  std::vector<int64_t> GetFirstScreenRenderTime(
-      const std::string &instance_id) override;
-  std::vector<int64_t> GetRenderFinishTime(
-      const std::string &instance_id) override;
-  void SetRenderContainerWrapContent(const std::string &instance_id,
-                                     bool wrap) override;
-  void BindMeasurementToRenderObject(long ptr) override;
-  void RegisterCoreEnv(const std::string &key,
-                       const std::string &value) override;
-
-  long GetRenderObject(const std::string &instance_id,
-                       const std::string &render_ref) override;
-  void UpdateRenderObjectStyle(long render_ptr, const std::string &key,
-                               const std::string &value) override;
-  void UpdateRenderObjectAttr(long render_ptr, const std::string &key,
-                              const std::string &value) override;
-  long CopyRenderObject(long render_ptr) override;
-  void SetMeasureFunctionAdapter() override;
-  void SetPlatform(const std::string &platformName) override;
-  void SetDeviceWidthAndHeight(float width, float height) override;
-  void AddOption(const std::string &key, const std::string &value) override;
-
-  int RefreshInstance(const char *instanceId, const char *nameSpace,
-                      const char *func,
-                      std::vector<VALUE_WITH_TYPE *> &params) override;
-  int InitFramework(const char *script,
-                    std::vector<INIT_FRAMEWORK_PARAMS *> &params) override;
-  int InitAppFramework(const char *instanceId, const char *appFramework,
-                       std::vector<INIT_FRAMEWORK_PARAMS *> &params) override;
-  int CreateAppContext(const char *instanceId, const char *jsBundle) override;
-  std::unique_ptr<WeexJSResult> ExecJSOnAppWithResult(const char *instanceId,
-                                    const char *jsBundle) override;
-  int CallJSOnAppContext(const char *instanceId, const char *func,
-                         std::vector<VALUE_WITH_TYPE *> &params) override;
-  int DestroyAppContext(const char *instanceId) override;
-  int ExecJsService(const char *source) override;
-  int ExecTimeCallback(const char *source) override;
-  int ExecJS(const char *instanceId, const char *nameSpace, const char *func,
-             std::vector<VALUE_WITH_TYPE *> &params) override;
-  std::unique_ptr<WeexJSResult> ExecJSWithResult(
-      const char *instanceId, const char *nameSpace, const char *func,
-      std::vector<VALUE_WITH_TYPE *> &params) override;
-  void ExecJSWithCallback(const char *instanceId, const char *nameSpace,
-                          const char *func,
-                          std::vector<VALUE_WITH_TYPE *> &params,
-                          long callback_id) override;
-  int CreateInstance(const char *instanceId, const char *func,
-                     const char *script, int script_length, const char *opts, const char *initData,
-                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) override;
-  std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId,
-                               const char *script,int type) override;
-  int DestroyInstance(const char *instanceId) override;
-  int UpdateGlobalConfig(const char *config) override;
-
-  int UpdateInitFrameworkParams(const std::string& key, const std::string& value, const std::string& desc) override;
-
-
-private:
-  DISALLOW_COPY_AND_ASSIGN(CoreSideInPlatform);
-};
-}  // namespace WeexCore
-
-#endif  // CORE_BRIDGE_PLATFORM_CORE_SIDE_IN_SIMPLE_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform_bridge.h b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform_bridge.h
deleted file mode 100644
index e613bd4..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/platform_bridge.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef Bridge_h
-#define Bridge_h
-
-#include <map>
-#include <memory>
-#include <set>
-#include <string>
-#include <vector>
-#include "base/common.h"
-#include "base/closure.h"
-#include "include/WeexApiHeader.h"
-
-namespace WeexCore {
-class MeasureFunctionAdapter;
-class WXCoreMargin;
-class WXCorePadding;
-class WXCoreBorderWidth;
-class WXCoreSize;
-
-class PlatformBridge {
- public:
-  class CoreSide {
-   public:
-    explicit CoreSide() : measure_function_adapter_exist_(false) {}
-    virtual ~CoreSide() {}
-    virtual void SetDefaultHeightAndWidthIntoRootDom(
-        const std::string& instance_id, float default_width,
-        float default_height, bool is_width_wrap_content,
-        bool is_height_wrap_content) = 0;
-    virtual void OnInstanceClose(const std::string& instance_id) = 0;
-    virtual void SetStyleWidth(const std::string& instance_id,
-                               const std::string& render_ref, float width) = 0;
-    virtual void SetStyleHeight(const std::string& instance_id,
-                                const std::string& render_ref,
-                                float height) = 0;
-    virtual void SetMargin(const std::string& instance_id,
-                           const std::string& render_ref, int edge,
-                           float value) = 0;
-    virtual void SetPadding(const std::string& instance_id,
-                            const std::string& render_ref, int edge,
-                            float value) = 0;
-    virtual void SetPosition(const std::string& instance_id,
-                             const std::string& render_ref, int edge,
-                             float value) = 0;
-    virtual void MarkDirty(const std::string& instance_id,
-                           const std::string& render_ref) = 0;
-    virtual void SetViewPortWidth(const std::string& instance_id,
-                                  float width) = 0;
-                                  
-    virtual void SetPageRenderType(const std::string &pageId, const std::string& renderType)=0;
-    virtual void RemovePageRenderType(const std::string &pageId)=0;
-
-    virtual void SetPageArgument(const std::string &pageId, const std::string& key, const std::string& value) = 0;
-    virtual void SetDeviceDisplayOfPage(const std::string &instance_id, float width, float height /* unused now */) = 0;
-    virtual void SetDeviceDisplay(const std::string &instance_id, float width, float height, float scale) = 0;
-
-    virtual void SetPageDirty(const std::string& instance_id) = 0;
-    virtual void ForceLayout(const std::string& instance_id) = 0;
-    virtual bool NotifyLayout(const std::string& instance_id) = 0;
-    virtual std::vector<int64_t> GetFirstScreenRenderTime(
-        const std::string& instance_id) = 0;
-    virtual std::vector<int64_t> GetRenderFinishTime(
-        const std::string& instance_id) = 0;
-    virtual bool RelayoutUsingRawCssStyles(const std::string& instance_id) = 0; // relayout whole page using raw css styles
-    virtual void SetRenderContainerWrapContent(const std::string& instance_id,
-                                               bool wrap) = 0;
-    virtual void BindMeasurementToRenderObject(long ptr) = 0;
-    virtual void RegisterCoreEnv(const std::string& key,
-                                 const std::string& value) = 0;
-
-    virtual long GetRenderObject(const std::string& instance_id,
-                                 const std::string& render_ref) = 0;
-    virtual void UpdateRenderObjectStyle(long render_ptr,
-                                         const std::string& key,
-                                         const std::string& value) = 0;
-    virtual void UpdateRenderObjectAttr(long render_ptr, const std::string& key,
-                                        const std::string& value) = 0;
-    virtual long CopyRenderObject(long render_ptr) = 0;
-    virtual void SetMeasureFunctionAdapter() = 0;
-    virtual void SetPlatform(const std::string& platformName) = 0;
-    virtual void SetDeviceWidthAndHeight(float width, float height) = 0;
-    virtual void AddOption(const std::string& key,
-                           const std::string& value) = 0;
-
-    virtual int RefreshInstance(const char* instanceId, const char* nameSpace,
-                                const char* func,
-                                std::vector<VALUE_WITH_TYPE*>& params) = 0;
-    virtual int InitFramework(const char* script,
-                              std::vector<INIT_FRAMEWORK_PARAMS*>& params) = 0;
-    virtual int InitAppFramework(
-        const char* instanceId, const char* appFramework,
-        std::vector<INIT_FRAMEWORK_PARAMS*>& params) = 0;
-    virtual int CreateAppContext(const char* instanceId,
-                                 const char* jsBundle) = 0;
-    virtual std::unique_ptr<WeexJSResult> ExecJSOnAppWithResult(const char* instanceId,
-                                              const char* jsBundle) = 0;
-    virtual int CallJSOnAppContext(const char* instanceId, const char* func,
-                                   std::vector<VALUE_WITH_TYPE*>& params) = 0;
-    virtual int DestroyAppContext(const char* instanceId) = 0;
-    virtual int ExecJsService(const char* source) = 0;
-    virtual int ExecTimeCallback(const char* source) = 0;
-    virtual int ExecJS(const char* instanceId, const char* nameSpace,
-                       const char* func,
-                       std::vector<VALUE_WITH_TYPE*>& params) = 0;
-    virtual std::unique_ptr<WeexJSResult> ExecJSWithResult(
-        const char* instanceId, const char* nameSpace, const char* func,
-        std::vector<VALUE_WITH_TYPE*>& params) = 0;
-    virtual void ExecJSWithCallback(const char* instanceId,
-                                    const char* nameSpace, const char* func,
-                                    std::vector<VALUE_WITH_TYPE*>& params,
-                                    long callback_id) = 0;
-    virtual int CreateInstance(const char* instanceId, const char* func,
-                               const char* script, int script_length, const char* opts,
-                               const char* initData, const char* extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
-                               const char* render_strategy) = 0;
-    virtual std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char* instanceId,
-                                         const char* script,int type) = 0;
-    virtual int DestroyInstance(const char* instanceId) = 0;
-
-    virtual int UpdateGlobalConfig(const char* config) = 0;
-
-    virtual int UpdateInitFrameworkParams(const std::string& key, const std::string& value, const std::string& desc) = 0;
-
-    inline PlatformBridge* bridge() { return bridge_; }
-
-   protected:
-    bool measure_function_adapter_exist_;
-
-   private:
-    PlatformBridge* bridge_;
-    friend class PlatformBridge;
-    inline void set_bridge(PlatformBridge* bridge) { bridge_ = bridge; }
-    DISALLOW_COPY_AND_ASSIGN(CoreSide);
-  };
-
-  class PlatformSide {
-   public:
-    PlatformSide() {}
-    virtual ~PlatformSide() {}
-    virtual WXCoreSize InvokeMeasureFunction(const char* page_id,
-                                             long render_ptr, float width,
-                                             int width_measure_mode,
-                                             float height,
-                                             int height_measure_mode) = 0;
-    virtual void InvokeLayoutBefore(const char* page_id, long render_ptr) = 0;
-    virtual void InvokeLayoutPlatform(const char* page_id, long render_ptr) = 0;
-    virtual void InvokeLayoutAfter(const char* page_id, long render_ptr,
-                                   float width, float height) = 0;
-    virtual void TriggerVSync(const char* page_id) = 0; // vsync loop may stop on some platforms like iOS
-      
-    virtual void SetJSVersion(const char* version) = 0;
-    virtual void ReportException(const char* page_id, const char* func,
-                                 const char* exception_string) = 0;
-    virtual void ReportServerCrash(const char* instance_id) = 0;
-    virtual void ReportNativeInitStatus(const char* status_code,
-                                        const char* error_msg) = 0;
-    virtual int CallNative(const char* page_id, const char* task,
-                           const char* callback) = 0;
-    virtual std::unique_ptr<ValueWithType> CallNativeModule(
-        const char* page_id, const char* module, const char* method,
-        const char* arguments, int arguments_length, const char* options,
-        int options_length) = 0;
-    virtual void CallNativeComponent(const char* page_id, const char* ref,
-                                     const char* method, const char* arguments,
-                                     int arguments_length, const char* options,
-                                     int options_length) = 0;
-#if OS_IOS
-    virtual std::unique_ptr<ValueWithType> RegisterPluginModule(const char *name, const char *class_name, const char *version) = 0;
-    virtual std::unique_ptr<ValueWithType> RegisterPluginComponent(const char *name, const char *class_name, const char *version) = 0;
-    virtual void PostTaskOnComponentThread(const weex::base::Closure closure) = 0;
-#endif
-    virtual void SetTimeout(const char* callback_id, const char* time) = 0;
-    virtual void NativeLog(const char* str_array) = 0;
-    virtual int UpdateFinish(const char* page_id, const char* task, int taskLen,
-                             const char* callback, int callbackLen) = 0;
-    virtual int RefreshFinish(const char* page_id, const char* task,
-                              const char* callback) = 0;
-    virtual int AddEvent(const char* page_id, const char* ref,
-                         const char* event) = 0;
-    virtual int RemoveEvent(const char* page_id, const char* ref,
-                            const char* event) = 0;
-    virtual int CreateBody(const char* pageId, const char* componentType,
-                           const char* ref,
-                           std::map<std::string, std::string>* styles,
-                           std::map<std::string, std::string>* attributes,
-                           std::set<std::string>* events,
-                           const WXCoreMargin& margins,
-                           const WXCorePadding& paddings,
-                           const WXCoreBorderWidth& borders) = 0;
-
-    virtual int AddElement(const char* pageId, const char* componentType,
-                           const char* ref, int& index, const char* parentRef,
-                           std::map<std::string, std::string>* styles,
-                           std::map<std::string, std::string>* attributes,
-                           std::set<std::string>* events,
-                           const WXCoreMargin& margins,
-                           const WXCorePadding& paddings,
-                           const WXCoreBorderWidth& borders,
-                           bool willLayout = true) = 0;
-    virtual int Layout(const char* page_id, const char* ref, float top,
-                       float bottom, float left, float right, float height,
-                       float width, bool isRTL, int index) = 0;
-
-    virtual int UpdateStyle(
-        const char* pageId, const char* ref,
-        std::vector<std::pair<std::string, std::string>>* style,
-        std::vector<std::pair<std::string, std::string>>* margin,
-        std::vector<std::pair<std::string, std::string>>* padding,
-        std::vector<std::pair<std::string, std::string>>* border) = 0;
-    virtual int UpdateAttr(
-        const char* pageId, const char* ref,
-        std::vector<std::pair<std::string, std::string>>* attrs) = 0;
-
-    virtual int CreateFinish(const char* pageId) = 0;
-
-    virtual int RenderSuccess(const char* pageId) = 0;
-
-    virtual int RemoveElement(const char* pageId, const char* ref) = 0;
-
-    virtual int MoveElement(const char* pageId, const char* ref,
-                            const char* parentRef, int index) = 0;
-
-    virtual int AppendTreeCreateFinish(const char* pageId, const char* ref) = 0;
-
-    virtual int HasTransitionPros(
-        const char* pageId, const char* ref,
-        std::vector<std::pair<std::string, std::string>>* style) = 0;
-    virtual void PostMessage(const char* vm_id, const char* data, int dataLength) = 0;
-    virtual void DispatchMessage(const char* client_id, const char* data,
-                                 int dataLength, const char* callback,
-                                 const char* vm_id) = 0;
-    virtual std::unique_ptr<WeexJSResult> DispatchMessageSync(
-        const char* client_id, const char* data, int dataLength,
-        const char* vm_id) = 0;
-    virtual void OnReceivedResult(long callback_id,
-                                  std::unique_ptr<WeexJSResult>& result) = 0;
-
-    inline PlatformBridge* bridge() { return bridge_; }
-
-   private:
-    PlatformBridge* bridge_;
-    friend class PlatformBridge;
-    inline void set_bridge(PlatformBridge* bridge) { bridge_ = bridge; }
-    DISALLOW_COPY_AND_ASSIGN(PlatformSide);
-  };
-
-  inline CoreSide* core_side() { return core_side_.get(); }
-  inline PlatformSide* platform_side() { return platform_side_.get(); }
-
-  inline void set_core_side(CoreSide* core_side) {
-    core_side_.reset(core_side);
-    core_side_->set_bridge(this);
-  }
-  inline void set_platform_side(PlatformSide* platform_side) {
-    platform_side_.reset(platform_side);
-    platform_side_->set_bridge(this);
-  }
-
-  PlatformBridge() : is_passable_(true) {}
-  virtual ~PlatformBridge() {}
-
-  inline bool is_passable() { return is_passable_; }
-
- protected:
-  inline void set_is_passable(bool passable) { is_passable_ = passable; }
-
- private:
-  std::unique_ptr<CoreSide> core_side_;
-  std::unique_ptr<PlatformSide> platform_side_;
-  bool is_passable_;
-  DISALLOW_COPY_AND_ASSIGN(PlatformBridge);
-};
-}  // namespace WeexCore
-#endif  // Bridge_h
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script/core_side_in_script.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script/core_side_in_script.cpp
deleted file mode 100644
index 6813ef4..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script/core_side_in_script.cpp
+++ /dev/null
@@ -1,451 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/bridge/script/core_side_in_script.h"
-
-#include <cstdlib>
-#include "base/log_defines.h"
-#include "base/make_copyable.h"
-#include "base/thread/waitable_event.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/render/manager/render_manager.h"
-#include "core/bridge/eagle_bridge.h"
-#include "wson/wson_parser.h"
-#ifdef OS_ANDROID
-#include <base/time_calculator.h>
-#include "android/weex_extend_js_api.h"
-#endif
-
-namespace WeexCore {
-
-CoreSideInScript::CoreSideInScript() {}
-
-CoreSideInScript::~CoreSideInScript() {}
-
-inline char *copyStr(const char *str, int length = 0) {
-  char *ret = nullptr;
-  if (str == nullptr) return ret;
-  size_t strLen = length == 0 ? strlen(str) : length;
-  ret = new char[strLen + 1];
-  memcpy(ret, str, static_cast<size_t>(strLen));
-  ret[strLen] = '\0';
-  return ret;
-}
-
-void CoreSideInScript::CallNative(const char *page_id, const char *task,
-                                  const char *callback) {
-  if (page_id == nullptr || task == nullptr) return;
-
-  std::string task_str(task);
-  std::string target_str("[{\"module\":\"dom\",\"method\":\"createFinish\","
-                         "\"args\":[]}]");
-  std::string::size_type idx = task_str.find(target_str);
-
-  if(idx == std::string::npos) {
-    WeexCoreManager::Instance()
-        ->getPlatformBridge()
-        ->platform_side()
-        ->CallNative(page_id, task, callback);
-  } else {
-    RenderManager::GetInstance()->CreateFinish(page_id);
-  }
-}
-
-std::unique_ptr<ValueWithType> CoreSideInScript::CallNativeModule(
-    const char *page_id, const char *module, const char *method,
-    const char *arguments, int arguments_length, const char *options,
-    int options_length) {
-  std::unique_ptr<ValueWithType> ret(new ValueWithType((int32_t)-1));
-  if (page_id != nullptr && module != nullptr && method != nullptr) {
-    return RenderManager::GetInstance()->CallNativeModule(page_id, module, method,
-                                                          arguments, arguments_length,
-                                                          options, options_length);
-  }
-
-  return ret;
-}
-
-void CoreSideInScript::CallNativeComponent(const char *page_id, const char *ref,
-                                           const char *method,
-                                           const char *arguments,
-                                           int arguments_length,
-                                           const char *options,
-                                           int options_length) {
-  if (page_id != nullptr && ref != nullptr && method != nullptr) {
-    RenderManager::GetInstance()->CallNativeComponent(page_id, ref, method, arguments, arguments_length, options, options_length);
-  }
-}
-
-void CoreSideInScript::AddElement(const char *page_id, const char *parent_ref,
-                                  const char *dom_str, int dom_str_length,
-                                  const char *index_str) {
-
-  
-//  std::string msg = "AddElement :";
-//  wson_parser parser(dom_str);
-//  msg.append(parser.toStringUTF8().c_str());
-//
-//  weex::base::TimeCalculator timeCalculator(weex::base::TaskPlatform::WEEXCORE, msg.c_str(), page_id);
-
-  const char *indexChar = index_str == nullptr ? "\0" : index_str;
-  int index = atoi(indexChar);
-  if (page_id == nullptr || parent_ref == nullptr || dom_str == nullptr ||
-      index < -1)
-    return;
-  RenderManager::GetInstance()->AddRenderObject(page_id, parent_ref, index,
-                                                dom_str);
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           parentRef = std::unique_ptr<char[]>(copyStr(parent_ref)),
-  //           domStr = std::unique_ptr<char[]>(copyStr(dom_str,
-  //           dom_str_length)), i = index] {
-  //            RenderManager::GetInstance()->AddRenderObject(
-  //                pageId.get(), parentRef.get(), i, domStr.get());
-  //          }));
-}
-
-void CoreSideInScript::SetTimeout(const char *callback_id, const char *time) {
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [callbackId = std::unique_ptr<char[]>(copyStr(callback_id)),
-  //           timeS = std::unique_ptr<char[]>(copyStr(time))] {
-  //            WeexCoreManager::Instance()
-  //                ->getPlatformBridge()
-  //                ->platform_side()
-  //                ->SetTimeout(callbackId.get(), timeS.get());
-  //          }));
-  WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->SetTimeout(
-      callback_id, time);
-}
-
-void CoreSideInScript::NativeLog(const char *str_array) {
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [str = std::unique_ptr<char[]>(copyStr(str_array))] {
-  //            WeexCoreManager::Instance()
-  //                ->getPlatformBridge()
-  //                ->platform_side()
-  //                ->NativeLog(str.get());
-  //          }));
-  WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->NativeLog(
-      str_array);
-}
-
-void CoreSideInScript::CreateBody(const char *page_id, const char *dom_str,
-                                  int dom_str_length) {
-
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           domStr = std::unique_ptr<char[]>(copyStr(dom_str,
-  //           dom_str_length))] {
-  //            RenderManager::GetInstance()->CreatePage(pageId.get(),
-  //            domStr.get())
-  //                ? 0
-  //                : -1;
-  //          }));
-  RenderManager::GetInstance()->CreatePage(page_id, dom_str);
-}
-
-int CoreSideInScript::UpdateFinish(const char *page_id, const char *task,
-                                   int task_length, const char *callback,
-                                   int callback_length) {
-  //  weex::base::WaitableEvent event;
-  //  int result = 0;
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           taskS = std::unique_ptr<char[]>(copyStr(task, task_length)),
-  //           callbackS =
-  //               std::unique_ptr<char[]>(copyStr(callback, callback_length)),
-  //           ret = &result, e = &event, tl = task_length, cl =
-  //           callback_length] {
-  //            *ret = WeexCoreManager::Instance()
-  //                       ->getPlatformBridge()
-  //                       ->platform_side()
-  //                       ->UpdateFinish(pageId.get(), taskS.get(), tl,
-  //                                      callbackS.get(), cl);
-  //            e->Signal();
-  //          }));
-  //  event.Wait();
-  //  return result;
-  return WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->UpdateFinish(page_id, task, task_length, callback, callback_length);
-}
-
-void CoreSideInScript::CreateFinish(const char *page_id) {
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id))] {
-  //            RenderManager::GetInstance()->CreateFinish(pageId.get());
-  //          }));
-  RenderManager::GetInstance()->CreateFinish(page_id);
-}
-
-int CoreSideInScript::RefreshFinish(const char *page_id, const char *task,
-                                    const char *callback) {
-  if (page_id == nullptr) return -1;
-  //  weex::base::WaitableEvent event;
-  //  int result = 0;
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           taskS = std::unique_ptr<char[]>(copyStr(task)),
-  //           callbackS = std::unique_ptr<char[]>(copyStr(callback)),
-  //           ret = &result, e = &event] {
-  //            *ret =
-  //                WeexCoreManager::Instance()
-  //                    ->getPlatformBridge()
-  //                    ->platform_side()
-  //                    ->RefreshFinish(pageId.get(), taskS.get(),
-  //                    callbackS.get());
-  //            e->Signal();
-  //          }));
-  //  event.Wait();
-  //  return result;
-  return WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->RefreshFinish(page_id, task, callback);
-}
-
-void CoreSideInScript::UpdateAttrs(const char *page_id, const char *ref,
-                                   const char *data, int data_length) {
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           refS = std::unique_ptr<char[]>(copyStr(ref)),
-  //           dataS = std::unique_ptr<char[]>(copyStr(data, data_length))] {
-  //            RenderManager::GetInstance()->UpdateAttr(pageId.get(),
-  //            refS.get(),
-  //                                                     dataS.get());
-  //          }));
-  RenderManager::GetInstance()->UpdateAttr(page_id, ref, data);
-}
-
-void CoreSideInScript::UpdateStyle(const char *page_id, const char *ref,
-                                   const char *data, int data_length) {
- 
-
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           refS = std::unique_ptr<char[]>(copyStr(ref)),
-  //           dataS = std::unique_ptr<char[]>(copyStr(data, data_length))] {
-  //            RenderManager::GetInstance()->UpdateStyle(pageId.get(),
-  //            refS.get(),
-  //                                                      dataS.get());
-  //          }));
-  RenderManager::GetInstance()->UpdateStyle(page_id, ref, data);
-}
-
-void CoreSideInScript::RemoveElement(const char *page_id, const char *ref) {
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           refS = std::unique_ptr<char[]>(copyStr(ref))] {
-  //            RenderManager::GetInstance()->RemoveRenderObject(pageId.get(),
-  //                                                             refS.get());
-  //          }));
-  RenderManager::GetInstance()->RemoveRenderObject(page_id, ref);
-}
-
-void CoreSideInScript::MoveElement(const char *page_id, const char *ref,
-                                   const char *parent_ref, int index) {
-
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           refS = std::unique_ptr<char[]>(copyStr(ref)),
-  //           parentRef = std::unique_ptr<char[]>(copyStr(parent_ref)),
-  //           i = index] {
-  //            RenderManager::GetInstance()->MoveRenderObject(
-  //                pageId.get(), refS.get(), parentRef.get(), i);
-  //          }));
-  RenderManager::GetInstance()->MoveRenderObject(page_id, ref, parent_ref,
-                                                 index);
-}
-
-void CoreSideInScript::AddEvent(const char *page_id, const char *ref,
-                                const char *event) {
-
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           refS = std::unique_ptr<char[]>(copyStr(ref)),
-  //           eventS = std::unique_ptr<char[]>(copyStr(event))] {
-  //            RenderManager::GetInstance()->AddEvent(pageId.get(), refS.get(),
-  //                                                   eventS.get());
-  //          }));
-  RenderManager::GetInstance()->AddEvent(page_id, ref, event);
-}
-
-void CoreSideInScript::RemoveEvent(const char *page_id, const char *ref,
-                                   const char *event) {
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           refS = std::unique_ptr<char[]>(copyStr(ref)),
-  //           eventS = std::unique_ptr<char[]>(copyStr(event))] {
-  //            RenderManager::GetInstance()->RemoveEvent(pageId.get(),
-  //            refS.get(),
-  //                                                      eventS.get());
-  //          }));
-  RenderManager::GetInstance()->RemoveEvent(page_id, ref, event);
-}
-
-const char *CoreSideInScript::CallGCanvasLinkNative(const char *context_id,
-                                                    int type, const char *arg) {
-
-#ifdef OS_ANDROID
-  return CallGCanvasFun(context_id, type, arg);
-#else
-  return nullptr;
-#endif
-}
-
-int CoreSideInScript::SetInterval(const char *page_id, const char *callback_id,
-                                  const char *time) {
-  return (atoi(page_id) << 16) | (atoi(callback_id));
-}
-
-void CoreSideInScript::ClearInterval(const char *page_id,
-                                     const char *callback_id) {
-  // do nothing
-}
-
-const char *CoreSideInScript::CallT3DLinkNative(int type, const char *arg) {
-#ifdef OS_ANDROID
-  return CallT3dFunc(type, arg);
-#else
-  return nullptr;
-#endif
-}
-
-void CoreSideInScript::PostMessage(const char *vm_id, const char *data, int dataLength) {
-
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [vmId = std::unique_ptr<char[]>(copyStr(vm_id)),
-  //           dataS = std::unique_ptr<char[]>(copyStr(data))] {
-  //            WeexCoreManager::Instance()
-  //                ->getPlatformBridge()
-  //                ->platform_side()
-  //                ->PostMessage(vmId.get(), dataS.get());
-  //          }));
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->PostMessage(vm_id, data,dataLength);
-}
-
-void CoreSideInScript::DispatchMessage(const char *client_id, const char *data, int dataLength,
-                                       const char *callback,
-                                       const char *vm_id) {
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [clientId = std::unique_ptr<char[]>(copyStr(client_id)),
-  //           dataS = std::unique_ptr<char[]>(copyStr(data)),
-  //           callbackS = std::unique_ptr<char[]>(copyStr(callback)),
-  //           vmId = std::unique_ptr<char[]>(copyStr(vm_id))] {
-  //            WeexCoreManager::Instance()
-  //                ->getPlatformBridge()
-  //                ->platform_side()
-  //                ->DispatchMessage(clientId.get(), dataS.get(),
-  //                callbackS.get(),
-  //                                  vmId.get());
-  //          }));
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->DispatchMessage(client_id, data, dataLength, callback, vm_id);
-}
-
-std::unique_ptr<WeexJSResult> CoreSideInScript::DispatchMessageSync(
-    const char *client_id, const char *data, int dataLength,
-    const char *vm_id) {
-  return WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->DispatchMessageSync(client_id, data, dataLength, vm_id);
-}
-
-void CoreSideInScript::ReportException(const char *page_id, const char *func,
-                                       const char *exception_string) {
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [pageId = std::unique_ptr<char[]>(copyStr(page_id)),
-  //           funcS = std::unique_ptr<char[]>(copyStr(func)),
-  //           exceptionStr =
-  //           std::unique_ptr<char[]>(copyStr(exception_string))] {
-  //            WeexCoreManager::Instance()
-  //                ->getPlatformBridge()
-  //                ->platform_side()
-  //                ->ReportException(pageId.get(), funcS.get(),
-  //                                  exceptionStr.get());
-  //          }));
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->ReportException(page_id, func, exception_string);
-}
-
-void CoreSideInScript::SetJSVersion(const char *js_version) {
-  LOGD("init JSFrm version %s", js_version);
-
-  //  WeexCoreManager::Instance()->script_thread()->message_loop()->PostTask(
-  //      weex::base::MakeCopyable(
-  //          [jsVersion = std::unique_ptr<char[]>(copyStr(js_version))] {
-  //            WeexCoreManager::Instance()
-  //                ->getPlatformBridge()
-  //                ->platform_side()
-  //                ->SetJSVersion(jsVersion.get());
-  //          }));
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->SetJSVersion(js_version);
-}
-
-void CoreSideInScript::OnReceivedResult(long callback_id,
-                                        std::unique_ptr<WeexJSResult> &result) {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->OnReceivedResult(callback_id, result);
-}
-
-void CoreSideInScript::UpdateComponentData(const char* page_id,
-                                           const char* cid,
-                                           const char* json_data) {
-    auto handler = EagleBridge::GetInstance()->data_render_handler();
-    if(handler){
-      handler->UpdateComponentData(page_id, cid, json_data);
-    }
-    else{
-      WeexCore::WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->ReportException(
-        page_id, "UpdateComponentData", 
-        "There is no data_render_handler when UpdateComponentData invoked");
-    }
-}
-
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script/core_side_in_script.h b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script/core_side_in_script.h
deleted file mode 100644
index 2c53c1c..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script/core_side_in_script.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_BRIDGE_SCRIPT_CORE_SIDE_IN_SIMPLE_H
-#define CORE_BRIDGE_SCRIPT_CORE_SIDE_IN_SIMPLE_H
-
-#include "base/common.h"
-#include "core/bridge/script_bridge.h"
-
-namespace WeexCore {
-class CoreSideInScript : public ScriptBridge::CoreSide {
- public:
-  explicit CoreSideInScript();
-  ~CoreSideInScript() override;
-
-  void CallNative(const char *page_id, const char *task,
-                  const char *callback) override;
-  std::unique_ptr<ValueWithType> CallNativeModule(
-      const char *page_id, const char *module, const char *method,
-      const char *arguments, int arguments_length, const char *options,
-      int options_length) override;
-  void CallNativeComponent(const char *page_id, const char *ref,
-                           const char *method, const char *arguments,
-                           int arguments_length, const char *options,
-                           int options_length) override;
-  void AddElement(const char *page_id, const char *parent_ref,
-                  const char *dom_str, int dom_str_length,
-                  const char *index_str) override;
-  void SetTimeout(const char *callback_id, const char *time) override;
-  void NativeLog(const char *str_array) override;
-  void CreateBody(const char *page_id, const char *dom_str,
-                  int dom_str_length) override;
-  int UpdateFinish(const char *page_id, const char *task, int task_length,
-                   const char *callback, int callback_length) override;
-  void CreateFinish(const char *page_id) override;
-  int RefreshFinish(const char *page_id, const char *task,
-                    const char *callback) override;
-  void UpdateAttrs(const char *page_id, const char *ref, const char *data,
-                   int data_length) override;
-  void UpdateStyle(const char *page_id, const char *ref, const char *data,
-                   int data_length) override;
-  void RemoveElement(const char *page_id, const char *ref) override;
-  void MoveElement(const char *page_id, const char *ref, const char *parent_ref,
-                   int index) override;
-  void AddEvent(const char *page_id, const char *ref,
-                const char *event) override;
-  void RemoveEvent(const char *page_id, const char *ref,
-                   const char *event) override;
-  const char *CallGCanvasLinkNative(const char *context_id, int type,
-                                    const char *arg) override;
-  int SetInterval(const char *page_id, const char *callback_id,
-                  const char *time) override;
-  void ClearInterval(const char *page_id, const char *callback_id) override;
-  const char *CallT3DLinkNative(int type, const char *arg) override;
-  void PostMessage(const char *vim_id, const char *data, int dataLength) override;
-  void DispatchMessage(const char *client_id, const char *data, int dataLength,
-                       const char *callback, const char *vm_id) override;
-  std::unique_ptr<WeexJSResult> DispatchMessageSync(const char *client_id,
-                                                    const char *data,
-                                                    int dataLength,
-                                                    const char *vm_id) override;
-  void ReportException(const char *page_id, const char *func,
-                       const char *exception_string) override;
-  void SetJSVersion(const char *js_version) override;
-  void OnReceivedResult(long callback_id,
-                        std::unique_ptr<WeexJSResult> &result) override;
-  void UpdateComponentData(const char* page_id,
-                           const char* cid,
-                           const char* json_data) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(CoreSideInScript);
-};
-}  // namespace WeexCore
-
-#endif  // CORE_BRIDGE_SCRIPT_CORE_SIDE_IN_SIMPLE_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script_bridge.h b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script_bridge.h
deleted file mode 100644
index d6a0a4d..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/script_bridge.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_BRIDGE_SCRIPT_BRIDGE_H
-#define CORE_BRIDGE_SCRIPT_BRIDGE_H
-
-#include <memory>
-#include "base/common.h"
-#include "include/WeexApiHeader.h"
-#include "base/log_defines.h"
-
-namespace WeexCore {
-class ScriptBridge {
- public:
-  class CoreSide {
-   public:
-    explicit CoreSide() {}
-    virtual ~CoreSide() {}
-    virtual void CallNative(const char *page_id, const char *task,
-                            const char *callback) = 0;
-    virtual std::unique_ptr<ValueWithType> CallNativeModule(
-        const char *page_id, const char *module, const char *method,
-        const char *arguments, int arguments_length, const char *options,
-        int options_length) = 0;
-    virtual void CallNativeComponent(const char *page_id, const char *ref,
-                                     const char *method, const char *arguments,
-                                     int arguments_length, const char *options,
-                                     int options_length) = 0;
-    virtual void AddElement(const char *page_id, const char *parent_ref,
-                            const char *dom_str, int dom_str_length,
-                            const char *index_str) = 0;
-    virtual void SetTimeout(const char *callback_id, const char *time) = 0;
-    virtual void NativeLog(const char *str_array) = 0;
-    virtual void CreateBody(const char *page_id, const char *dom_str,
-                            int dom_str_length) = 0;
-    virtual int UpdateFinish(const char *page_id, const char *task,
-                             int task_length, const char *callback,
-                             int callback_length) = 0;
-    virtual void CreateFinish(const char *page_id) = 0;
-    virtual int RefreshFinish(const char *page_id, const char *task,
-                              const char *callback) = 0;
-    virtual void UpdateAttrs(const char *page_id, const char *ref,
-                             const char *data, int data_length) = 0;
-    virtual void UpdateStyle(const char *page_id, const char *ref,
-                             const char *data, int data_length) = 0;
-    virtual void RemoveElement(const char *page_id, const char *ref) = 0;
-    virtual void MoveElement(const char *page_id, const char *ref,
-                             const char *parent_ref, int index) = 0;
-    virtual void AddEvent(const char *page_id, const char *ref,
-                          const char *event) = 0;
-    virtual void RemoveEvent(const char *page_id, const char *ref,
-                             const char *event) = 0;
-    virtual const char *CallGCanvasLinkNative(const char *context_id, int type,
-                                              const char *arg) = 0;
-    virtual int SetInterval(const char *page_id, const char *callback_id,
-                            const char *time) = 0;
-    virtual void ClearInterval(const char *page_id,
-                               const char *callback_id) = 0;
-    virtual const char *CallT3DLinkNative(int type, const char *arg) = 0;
-    virtual void PostMessage(const char *vim_id, const char *data, int dataLength) = 0;
-    virtual void DispatchMessage(const char *client_id, const char *data, int dataLength,
-                                 const char *callback, const char *vm_id) = 0;
-    virtual std::unique_ptr<WeexJSResult> DispatchMessageSync(
-        const char *client_id, const char *data, int dataLength,
-        const char *vm_id) = 0;
-    virtual void ReportException(const char *page_id, const char *func,
-                                 const char *exception_string) = 0;
-    virtual void SetJSVersion(const char *js_version) = 0;
-    virtual void OnReceivedResult(long callback_id,
-                                  std::unique_ptr<WeexJSResult> &result) = 0;
-
-    virtual void UpdateComponentData(const char* page_id,
-                                     const char* cid,
-                                     const char* json_data) = 0;
-
-    inline ScriptBridge *bridge() { return bridge_; }
-
-   private:
-    ScriptBridge *bridge_;
-    friend class ScriptBridge;
-    inline void set_bridge(ScriptBridge *bridge) { bridge_ = bridge; }
-    DISALLOW_COPY_AND_ASSIGN(CoreSide);
-  };
-
-  class ScriptSide {
-   public:
-    explicit ScriptSide() {}
-    virtual ~ScriptSide() {}
-
-    virtual int InitFramework(const char *script,
-                              std::vector<INIT_FRAMEWORK_PARAMS *> &params) = 0;
-
-    virtual int InitAppFramework(
-        const char *instanceId, const char *appFramework,
-        std::vector<INIT_FRAMEWORK_PARAMS *> &params) = 0;
-
-    virtual int CreateAppContext(const char *instanceId,
-                                 const char *jsBundle) = 0;
-
-    virtual std::unique_ptr<WeexJSResult>  ExecJSOnAppWithResult(const char *instanceId,
-                                        const char *jsBundle) = 0;
-
-    virtual int CallJSOnAppContext(const char *instanceId, const char *func,
-                                   std::vector<VALUE_WITH_TYPE *> &params) = 0;
-
-    virtual int DestroyAppContext(const char *instanceId) = 0;
-
-    virtual int ExecJsService(const char *source) = 0;
-
-    virtual int ExecTimeCallback(const char *source) = 0;
-
-    virtual int ExecJS(const char *instanceId, const char *nameSpace,
-                       const char *func,
-                       std::vector<VALUE_WITH_TYPE *> &params) = 0;
-
-    virtual std::unique_ptr<WeexJSResult>  ExecJSWithResult(
-        const char *instanceId, const char *nameSpace, const char *func,
-        std::vector<VALUE_WITH_TYPE *> &params) = 0;
-
-    virtual void ExecJSWithCallback(const char *instanceId,
-                                    const char *nameSpace, const char *func,
-                                    std::vector<VALUE_WITH_TYPE *> &params,
-                                    long callback_id) = 0;
-
-    virtual int CreateInstance(const char *instanceId, const char *func,
-                               const char *script, const char *opts,
-                               const char *initData,
-                               const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) = 0;
-
-    virtual std::unique_ptr<WeexJSResult>  ExecJSOnInstance(const char *instanceId,
-                                   const char *script,int type) = 0;
-
-    virtual int DestroyInstance(const char *instanceId) = 0;
-
-    virtual int UpdateGlobalConfig(const char *config) = 0;
-
-    virtual int UpdateInitFrameworkParams(const std::string& key, const std::string& value, const std::string& desc) = 0;
-
-    inline ScriptBridge *bridge() { return bridge_; }
-
-   private:
-    ScriptBridge *bridge_;
-    friend class ScriptBridge;
-    inline void set_bridge(ScriptBridge *bridge) { bridge_ = bridge; }
-    DISALLOW_COPY_AND_ASSIGN(ScriptSide);
-  };
-
-  inline CoreSide *core_side() { return core_side_.get(); }
-  inline ScriptSide *script_side() { return script_side_.get(); }
-
-  inline void set_core_side(CoreSide *core_side) {
-    LOGE("xxx set_core_side is runing and %p", core_side);
-    core_side_.reset(core_side);
-    core_side_->set_bridge(this);
-  }
-  inline void set_script_side(ScriptSide *script_side) {
-    script_side_.reset(script_side);
-    script_side_->set_bridge(this);
-  }
-
-  ScriptBridge() : is_passable_(true) {}
-  virtual ~ScriptBridge() {}
-
-  inline bool is_passable() { return is_passable_; }
-
- protected:
-  inline void set_is_passable(bool passable) { is_passable_ = passable; }
-
- private:
-  std::unique_ptr<CoreSide> core_side_;
-  std::unique_ptr<ScriptSide> script_side_;
-  bool is_passable_;
-  DISALLOW_COPY_AND_ASSIGN(ScriptBridge);
-};
-}  // namespace WeexCore
-
-#endif  // CORE_BRIDGE_SCRIPT_BRIDGE_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/wx_type_define.h b/ios/Pods/WeexSDK/weex_core/Source/core/bridge/wx_type_define.h
deleted file mode 100644
index 7b2e676..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/bridge/wx_type_define.h
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WEEXV8_WXTYPEDEFINE_H
-#define WEEXV8_WXTYPEDEFINE_H
-
-
-#include <cstdint>
-
-namespace WeexCore {
-
-    enum wx_type_define {
-        VOID = 1,
-        INTEGER,
-        DOUBLE,
-        STRING,
-        JSON,
-        WSON
-    };
-
-    union WXValeDefine {
-        int64_t intValue;
-        double doubleValue;
-        char* string;
-    };
-
-
-    struct WXValue {
-        wx_type_define type;
-        WXValeDefine value;
-    };
-
-    struct WXFuncSignature {
-        char*            methodName;
-        wx_type_define    returnType;
-        wx_type_define   *argsType;
-        uint8_t         argsLength;
-        void*           fucnAddr;
-    };
-}
-
-
-
-
-
-#endif //WEEXV8_WXTYPEDEFINE_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/common/view_utils.h b/ios/Pods/WeexSDK/weex_core/Source/core/common/view_utils.h
deleted file mode 100644
index 550f262..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/common/view_utils.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef WEEX_PROJECT_VIEWUTILS_H
-#define WEEX_PROJECT_VIEWUTILS_H
-
-#include <cmath>
-#include <cstdlib>
-#include <sstream>
-
-#include "core/config/core_environment.h"
-
-namespace WeexCore {
-
-  constexpr char WX[] = "wx";
-  constexpr char PX[] = "px";
-  constexpr char UNDEFINE[] = "undefined";
-  constexpr char SCALE[] = "scale";
-  constexpr char AUTO_UNIT[] = "auto";
-  constexpr char NONE[] = "none";
-
-  constexpr char STATUS_BAR_HEIGHT[] = "status_bar_height";
-
-  template<typename T>
-  inline std::string to_string(const T &n) {
-    std::ostringstream stm;
-    stm << n;
-    return stm.str();
-  }
-
-  inline std::string &Trim(std::string &s) {
-    if (s.empty()) {
-      return s;
-    }
-    s.erase(0, s.find_first_not_of(" "));
-    s.erase(s.find_last_not_of(" ") + 1);
-    return s;
-  }
-
-  inline float getFloat(const char* src) {
-    char *end;
-    float ret = (float) strtod(src, &end);
-
-    if(*end != '\0'){
-      ret = NAN;
-    }
-    return ret;
-  }
-
-  inline float getFloat(const float &src, const float &viewport, const float& device_width, const bool &round_off_deviation) {
-    if (isnan(src))
-      return NAN;
-
-    float realPx = (src * device_width /
-                    viewport);
-#if OS_IOS
-    return realPx;
-#else
-
-    float result;
-    if (round_off_deviation) {
-      result = realPx > 0.005 && realPx < 1 ? 1.0f : realPx;
-    } else {
-      result = realPx > 0.005 && realPx < 1 ? 1.0f : rint(realPx);
-    }
-    return result;
-#endif
-  }
-
-  inline bool getBool(const std::string &src) {
-    if (strcmp(src.c_str(), "true") == 0) {
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  inline float getFloat(const std::string &src, const float &viewport, const float &device_width, const bool &round_off_deviation) {
-    float ret = NAN;
-    if (UNDEFINE == src
-        || AUTO_UNIT == src
-        || NONE == src
-        || src.empty()) {
-      return ret;
-    }
-    float original_value = getFloat(src.c_str());
-    ret = getFloat(original_value, viewport, device_width, round_off_deviation);
-    return ret;
-  }
-
-  inline bool endWidth(const std::string &src, const std::string &suffix) {
-    return src.size() > suffix.size() &&
-           src.compare(src.size() - suffix.size(), suffix.size(), suffix) == 0;
-  }
-
-  inline float transferWx(const std::string &stringWithWXPostfix, const float &viewport,
-                          const float &device_width) {
-    std::string temp = stringWithWXPostfix;
-    if (endWidth(stringWithWXPostfix, WX)) {
-      temp = stringWithWXPostfix.substr(0, stringWithWXPostfix.size() - strlen(WX));
-    }
-    float f = getFloat(temp.c_str());
-    float density = getFloat(WXCoreEnvironment::getInstance()->GetOption(SCALE).c_str());
-    return density * f * viewport / device_width; WXCoreEnvironment::getInstance()->DeviceWidth();
-  }
-
-  inline static float getFloatByViewport(std::string src, const float &viewport,
-          const float &device_width, const bool &round_off_deviation) {
-    float ret = NAN;
-    if (UNDEFINE == src
-        || AUTO_UNIT == src
-        || NONE == src
-        || src.empty()) {
-      return ret;
-    }
-    Trim(src);
-    if (endWidth(src, WX)) {
-      ret = getFloat(transferWx(src, viewport, device_width), viewport,  device_width, round_off_deviation);
-    } else if (endWidth(src, PX)) {
-      ret = getFloat(src.substr(0, src.size() - strlen(PX)), viewport, device_width, round_off_deviation);
-    } else {
-      ret = getFloat(src, viewport, device_width, round_off_deviation);
-    }
-    return ret;
-  }
-
-  inline static float getWebPxByWidth(float pxValue, float customViewport) {
-    if (isnan(pxValue))
-      return NAN;
-
-    float realPx = (pxValue * customViewport / WXCoreEnvironment::getInstance()->DeviceWidth());
-#if OS_IOS
-    return realPx;
-#else
-    float result = realPx > 0.005 && realPx < 1 ? 1.0f : realPx;
-    return result;
-#endif
-  }
-}
-
-#endif //WEEX_PROJECT_VIEWUTILS_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/config/core_environment.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/config/core_environment.cpp
deleted file mode 100644
index 39c4417..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/config/core_environment.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include "core_environment.h"
-#include <math.h>
-#include <stdlib.h>
-
-#include "base/core_constants.h"
-#include "base/log_defines.h"
-#include "core/common/view_utils.h"
-
-namespace WeexCore {
-
-  WXCoreEnvironment *WXCoreEnvironment::m_pInstance = nullptr;
-
-  bool WXCoreEnvironment::SetPlatform(std::string platformName) {
-    if (platformName.empty())
-      return false;
-    this->mPlatformName = platformName;
-    if (platformName == OS_Android || platformName == OS_iOS) {
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  bool WXCoreEnvironment::IsAndroid() {
-    return mPlatformName == OS_Android;
-  }
-
-  bool WXCoreEnvironment::IsIOS() {
-    return mPlatformName == OS_iOS;
-  }
-
-  bool WXCoreEnvironment::SetDeviceWidth(const std::string &width) {
-    if (width.empty() || isnan(getFloat(width.c_str())))
-      return false;
-    mDeviceWidth = getFloat(width.c_str());
-    return true;
-  }
-
-  bool WXCoreEnvironment::SetDeviceHeight(const std::string &height) {
-    if (height.empty() || isnan(getFloat(height.c_str())))
-      return false;
-    mDeviceHeight = getFloat(height.c_str());
-    return true;
-  }
-
-  const float WXCoreEnvironment::DeviceWidth() {
-    return mDeviceWidth;
-  }
-
-  const float WXCoreEnvironment::DeviceHeight() {
-    return mDeviceHeight;
-  }
-
-  const std::string WXCoreEnvironment::GetOption(const std::string &key) {
-    std::map<std::string, std::string>::iterator iter = mOptions.find(key);
-    if (iter != mOptions.end()) {
-      return iter->second;
-    } else {
-      return "";
-    }
-  }
-
-  const std::map<std::string, std::string>& WXCoreEnvironment::options() {
-      return mOptions;
-  }
-
-  void WXCoreEnvironment::AddOption(std::string key, std::string value) {
-    mOptions.insert(std::pair<std::string, std::string>(key, value));
-    if (key == "switchInteractionLog") {
-      mInteractionLogSwitch = "true" == value;
-    } else if(key == "debugMode" && value == "true"){
-      WeexCore::DebugMode = true;
-    }
-  }
-
-  void WXCoreEnvironment::PutOption(std::string key, std::string value){
-    auto it = mOptions.find(key);
-    if(it == mOptions.end()){
-      AddOption(key, value);
-      return;
-    }else{
-      it->second = value;
-    }
-  }
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/config/core_environment.h b/ios/Pods/WeexSDK/weex_core/Source/core/config/core_environment.h
deleted file mode 100644
index 667f56e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/config/core_environment.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef WEEX_PROJECT_WXCOREENVIRONMENT_H
-#define WEEX_PROJECT_WXCOREENVIRONMENT_H
-#include "core/api/wx_api.h"
-#include <string>
-#include <map>
-
-namespace WeexCore {
-
-  class WX_EXPORT WXCoreEnvironment {
-
-  private:
-
-    WXCoreEnvironment() {}
-
-    ~WXCoreEnvironment() {}
-
-    static WXCoreEnvironment *m_pInstance;
-
-    //just to release singleton object
-    class Garbo {
-    public:
-      ~Garbo() {
-        if (WXCoreEnvironment::m_pInstance) {
-          delete WXCoreEnvironment::m_pInstance;
-        }
-      }
-    };
-
-    static Garbo garbo;
-
-    std::string mPlatformName;
-
-    float mDeviceWidth;
-
-    float mDeviceHeight;
-
-    std::map<std::string, std::string> mOptions;
-
-    bool mInteractionLogSwitch;
-
-  public:
-
-    bool SetPlatform(std::string platformName);
-
-    inline std::string platform() {
-        return mPlatformName;
-    }
-
-    bool IsAndroid();
-
-    bool IsIOS();
-
-    bool SetDeviceWidth(const std::string &width);
-
-    bool SetDeviceHeight(const std::string &height);
-
-    inline void set_device_height(float height) {
-        mDeviceHeight = height;
-    }
-
-    inline void set_device_width(float width) {
-        mDeviceWidth = width;
-    }
-
-    inline bool isInteractionLogOpen(){
-        return mInteractionLogSwitch;
-    }
-
-    const float DeviceWidth();
-
-    const float DeviceHeight();
-
-    const std::string GetOption(const std::string &key);
-
-    const std::map<std::string, std::string> &options();
-
-    void AddOption(std::string key, std::string value);
-    void PutOption(std::string key, std::string value);
-
-    static WXCoreEnvironment *getInstance() {
-      if (!m_pInstance) {
-        m_pInstance = new WXCoreEnvironment();
-      }
-      return m_pInstance;
-    }
-  };
-}
-
-#endif //WEEX_PROJECT_WXCOREENVIRONMENT_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/css/constants_name.h b/ios/Pods/WeexSDK/weex_core/Source/core/css/constants_name.h
deleted file mode 100644
index fe282cc..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/css/constants_name.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WEEXV8_CONSTANTSNAME_H
-#define WEEXV8_CONSTANTSNAME_H
-
-#include <string>
-
-namespace WeexCore {
-  constexpr char DIRECTION[] = "direction";
-
-  constexpr char FLEX[] = "flex";
-  constexpr char HORIZONTAL[] = "horizontal";
-  constexpr char ALIGN_ITEMS[] = "alignItems";
-  constexpr char ALIGN_SELF[] = "alignSelf";
-  constexpr char FLEX_DIRECTION[] = "flexDirection";
-  constexpr char JUSTIFY_CONTENT[] = "justifyContent";
-  constexpr char FLEX_WRAP[] = "flexWrap";
-
-  constexpr char MIN_WIDTH[] = "minWidth";
-  constexpr char MIN_HEIGHT[] = "minHeight";
-  constexpr char MAX_WIDTH[] = "maxWidth";
-  constexpr char MAX_HEIGHT[] = "maxHeight";
-
-  constexpr char DEFAULT_HEIGHT[] = "defaultHeight";
-  constexpr char HEIGHT[] = "height";
-
-  constexpr char DEFAULT_WIDTH[] = "defaultWidth";
-  constexpr char WIDTH[] = "width";
-  constexpr char ROUND_OFF_DEVIATION[] = "roundOffDeviation";
-  constexpr char SCROLL_DIRECTION[] = "scrollDirection";
-
-  constexpr char POSITION[] = "position";
-
-  constexpr char LEFT[] = "left";
-  constexpr char TOP[] = "top";
-  constexpr char RIGHT[] = "right";
-  constexpr char BOTTOM[] = "bottom";
-
-  constexpr char MARGIN[] = "margin";
-  constexpr char MARGIN_LEFT[] = "marginLeft";
-  constexpr char MARGIN_TOP[] = "marginTop";
-  constexpr char MARGIN_RIGHT[] = "marginRight";
-  constexpr char MARGIN_BOTTOM[] = "marginBottom";
-
-  constexpr char BORDER_WIDTH[] = "borderWidth";
-  constexpr char BORDER_TOP_WIDTH[] = "borderTopWidth";
-  constexpr char BORDER_RIGHT_WIDTH[] = "borderRightWidth";
-  constexpr char BORDER_BOTTOM_WIDTH[] = "borderBottomWidth";
-  constexpr char BORDER_LEFT_WIDTH[] = "borderLeftWidth";
-
-  constexpr char PADDING[] = "padding";
-  constexpr char PADDING_LEFT[] = "paddingLeft";
-  constexpr char PADDING_TOP[] = "paddingTop";
-  constexpr char PADDING_RIGHT[] = "paddingRight";
-  constexpr char PADDING_BOTTOM[] = "paddingBottom";
-
-  constexpr char FONT_STYLE[] = "fontStyle";
-  constexpr char COLUMN_WIDTH[] = "columnWidth";
-  constexpr char COLUMN_COUNT[] = "columnCount";
-  constexpr char COLUMN_GAP[] = "columnGap";
-  constexpr char LEFT_GAP[] = "leftGap";
-  constexpr char RIGHT_GAP[] = "rightGap";
-  constexpr char SPAN_OFFSETS[] = "spanOffsets";
-
-  constexpr char COLOR[] = "color";
-  constexpr char BACKGROUND_COLOR[] = "backgroundColor";
-  constexpr char APPEND[] = "append";
-}
-
-#endif //WEEXV8_CONSTANTSNAME_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/css/constants_value.h b/ios/Pods/WeexSDK/weex_core/Source/core/css/constants_value.h
deleted file mode 100644
index b2a1862..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/css/constants_value.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WEEXV8_CONSTANTSVALUE_H
-#define WEEXV8_CONSTANTSVALUE_H
-
-#include <string>
-
-namespace WeexCore {
-  // direction
-  constexpr char RTL[] = "rtl";
-  constexpr char LTR[] = "ltr";
-  constexpr char INHERIT[] = "inherit";
-
-  // flex-direction
-  constexpr char ROW[] = "row";
-  constexpr char ROW_REVERSE[] = "row-reverse";
-  constexpr char COLUMN[] = "column";
-  constexpr char COLUMN_REVERSE[] = "column-reverse";
-
-  // flex-wrap
-  constexpr char NOWRAP[] = "nowrap";
-  constexpr char WRAP[] = "wrap";
-  constexpr char WRAP_REVERSE[] = "wrap-reverse";
-
-  // align
-  constexpr char FLEX_START[] = "flex-start";
-  constexpr char FLEX_END[] = "flex-end";
-  constexpr char CENTER[] = "center";
-  constexpr char SPACE_BETWEEN[] = "space-between";
-  constexpr char SPACE_AROUND[] = "space-around";
-  constexpr char STRETCH[] = "stretch";
-  constexpr char AUTO[] = "auto";
-
-  // position
-  constexpr char RELATIVE[] = "relative";
-  constexpr char ABSOLUTE[] = "absolute";
-  constexpr char FIXED[] = "fixed";
-  constexpr char STICKY[] = "sticky";
-
-  constexpr char NORMAL[] = "normal";
-  constexpr int COLUMN_COUNT_NORMAL = 1;
-  constexpr float AUTO_VALUE = -1;
-  constexpr float COLUMN_GAP_NORMAL = 32;
-
-  constexpr int HORIZONTAL_VALUE = 0;
-  constexpr int VERTICAL_VALUE = 1;
-
-  constexpr float kDefaultViewPortWidth = 750.0f;
-  constexpr bool kDefaultRoundOffDeviation = true;
-}
-#endif //WEEXV8_CONSTANTSVALUE_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/css/css_value_getter.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/css/css_value_getter.cpp
deleted file mode 100644
index 9dd201f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/css/css_value_getter.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <string.h>
-#include "css_value_getter.h"
-#include "constants_value.h"
-#include "constants_name.h"
-#include "core/layout/style.h"
-
-namespace WeexCore {
-  const WXCoreDirection GetWXCoreDirection(const std::string &value) {
-    const char *c_value = value.c_str();
-    if(strcmp(c_value, INHERIT) == 0) {
-      return WeexCore::kDirectionInherit;
-    } else if (strcmp(c_value, LTR) == 0) {
-      return WeexCore::kDirectionLTR;
-    } else if (strcmp(c_value, RTL) == 0) {
-      return WeexCore::kDirectionRTL;
-    }
-    return WeexCore::kDirectionLTR;
-  }
-
-  const WXCoreFlexDirection GetWXCoreFlexDirection(const std::string &value) {
-    const char *c_value = value.c_str();
-    if(strcmp(c_value, COLUMN) == 0) {
-      return WeexCore::kFlexDirectionColumn;
-    } else if (strcmp(c_value, ROW) == 0) {
-      return WeexCore::kFlexDirectionRow;
-    } else if (strcmp(c_value, COLUMN_REVERSE) == 0) {
-      return WeexCore::kFlexDirectionColumnReverse;
-    } else if (strcmp(c_value, ROW_REVERSE) == 0) {
-      return WeexCore::kFlexDirectionRowReverse;
-    }
-    return WeexCore::kFlexDirectionColumn;
-  }
-
-  const WXCoreJustifyContent GetWXCoreJustifyContent(const std::string &value) {
-    const char *c_value = value.c_str();
-    if (strcmp(c_value, FLEX_START) == 0) {
-      return WeexCore::kJustifyFlexStart;
-    } else if (strcmp(c_value, FLEX_END) == 0) {
-      return WeexCore::kJustifyFlexEnd;
-    } else if (strcmp(c_value, CENTER) == 0) {
-      return WeexCore::kJustifyCenter;
-    } else if (strcmp(c_value, SPACE_BETWEEN) == 0) {
-      return WeexCore::kJustifySpaceBetween;
-    } else if (strcmp(c_value, SPACE_AROUND) == 0) {
-      return WeexCore::kJustifySpaceAround;
-    }
-    return WeexCore::kJustifyFlexStart;
-  }
-
-  const WXCoreAlignItems GetWXCoreAlignItem(const std::string &value) {
-    const char *c_value = value.c_str();
-    if (strcmp(c_value, STRETCH) == 0) {
-      return WeexCore::kAlignItemsStretch;
-    } else if (strcmp(c_value, FLEX_START) == 0) {
-      return WeexCore::kAlignItemsFlexStart;
-    } else if (strcmp(c_value, FLEX_END) == 0) {
-      return WeexCore::kAlignItemsFlexEnd;
-    } else if (strcmp(c_value, CENTER) == 0) {
-      return WeexCore::kAlignItemsCenter;
-    }
-    return WeexCore::kAlignItemsStretch;
-  }
-
-  const WXCoreFlexWrap GetWXCoreFlexWrap(const std::string &value) {
-    const char *c_value = value.c_str();
-    if (strcmp(c_value, NOWRAP) == 0) {
-      return WeexCore::kNoWrap;
-    } else if (strcmp(c_value, WRAP) == 0) {
-      return WeexCore::kWrap;
-    } else if (strcmp(c_value, WRAP_REVERSE) == 0) {
-      return WeexCore::kWrapReverse;
-    }
-    return WeexCore::kNoWrap;
-  }
-
-  const WXCoreAlignSelf GetWXCoreAlignSelf(const std::string &value) {
-    const char *c_value = value.c_str();
-    if (strcmp(c_value, AUTO) == 0) {
-      return WeexCore::kAlignSelfAuto;
-    } else if (strcmp(c_value, STRETCH) == 0) {
-      return WeexCore::kAlignSelfStretch;
-    } else if (strcmp(c_value, FLEX_START) == 0) {
-      return WeexCore::kAlignSelfFlexStart;
-    } else if (strcmp(c_value, FLEX_END) == 0) {
-      return WeexCore::kAlignSelfFlexEnd;
-    } else if (strcmp(c_value, CENTER) == 0) {
-      return WeexCore::kAlignSelfCenter;
-    }
-    return WeexCore::kAlignSelfAuto;
-  }
-
-  const WXCorePositionType GetWXCorePositionType(const std::string &value) {
-    const char *c_value = value.c_str();
-    auto ret = kRelative;
-    if (strcmp(c_value, RELATIVE) == 0) {
-      ret = kRelative;
-    } else if (strcmp(c_value, ABSOLUTE) == 0) {
-      ret = kAbsolute;
-    } else if(strcmp(c_value, STICKY) == 0){
-      ret = kSticky;
-    }else if(strcmp(c_value, FIXED) == 0){
-      ret = kFixed;
-    }
-    return ret;
-  }
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/css/css_value_getter.h b/ios/Pods/WeexSDK/weex_core/Source/core/css/css_value_getter.h
deleted file mode 100644
index ec630ca..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/css/css_value_getter.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef WEEX_PROJECT_STYLEGETTER_H
-#define WEEX_PROJECT_STYLEGETTER_H
-
-#include "core/layout/flex_enum.h"
-#include <string>
-
-namespace WeexCore {
-  const WXCoreDirection GetWXCoreDirection(const std::string &value);
-
-  const WXCoreFlexDirection GetWXCoreFlexDirection(const std::string &value);
-
-  const WXCoreJustifyContent GetWXCoreJustifyContent(const std::string &value);
-
-  const WXCoreAlignItems GetWXCoreAlignItem(const std::string &value);
-
-  const WXCoreFlexWrap GetWXCoreFlexWrap(const std::string &value);
-
-  const WXCoreAlignSelf GetWXCoreAlignSelf(const std::string &value);
-
-  const WXCorePositionType GetWXCorePositionType(const std::string &value);
-}
-
-
-#endif //WEEX_PROJECT_STYLEGETTER_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonPage.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonPage.cpp
deleted file mode 100644
index b454677..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonPage.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2019/4/29.
-//
-
-#include "JsonPage.h"
-#include "base/log_defines.h"
-#include "core/render/node/render_object.h"
-#include "core/render/manager/render_manager.h"
-#include "core/render/node/factory/render_creator.h"
-#include <string>
-#include <map>
-#include "core/render/target/render_target.h"
-
-namespace WeexCore {
-
-
-    static std::string getString(const json11::Json& json) {
-        if (json.is_string()) {
-            return json.string_value();
-        }
-        else if (json.is_bool()) {
-            return std::to_string(json.bool_value());
-        }
-        else if (json.is_number()) {
-            return std::to_string(json.number_value());
-        }
-        else if (json.is_null()) {
-            return "";
-        }
-        return json.dump();
-    }
-
-    static std::string getString(const json11::Json& json, const std::string& key) {
-        return getString(json[key]);
-    }
-
-    static std::map<std::string, std::string> getMap(const json11::Json& json, const std::string& key){
-        json11::Json kvs  = json[key];
-        std::map<std::string, std::string> map;
-        if(!kvs.is_object()){
-            return map;
-        }
-        std::map<std::string, json11::Json> items = kvs.object_items();
-        for(auto it = items.begin(); it != items.end(); it++) {
-            map.insert({it->first, getString(it->second)});
-        }
-        return map;
-    }
-
-//    static std::vector<std::string> getVector(const json11::Json& json, const std::string& key){
-//        json11::Json kvs  = json[key];
-//        std::vector<std::string> values;
-//        if(!kvs.is_array()){
-//            return values;
-//        }
-//        const std::vector<json11::Json>& items = kvs.array_items();
-//        for(auto it = items.begin(); it != items.end(); it++) {
-//            values.push_back(getString(*it));
-//        }
-//        return values;
-//    }
-
-    static std::set<std::string> getSet(const json11::Json& json, const std::string& key){
-        json11::Json kvs  = json[key];
-        std::set<std::string> values;
-        if(!kvs.is_array()){
-            return values;
-        }
-        const std::vector<json11::Json>& items = kvs.array_items();
-        for(auto it = items.begin(); it != items.end(); it++) {
-            values.insert(getString(*it));
-        }
-        return values;
-    }
-
-
-    static RenderObject* toRenderObject(const std::string& pageId,
-                                        const std::string& renderType,
-                                        const std::string& ref,
-                                        const std::map<std::string, std::string>& style,
-                                        const std::map<std::string, std::string>& attr,
-                                        const std::set<std::string>& event){
-        RenderObject* render = (RenderObject*) RenderCreator::GetInstance()->CreateRender(renderType, ref);
-        render->set_page_id(pageId);
-
-        for(auto it=style.begin(); it != style.end(); it++){
-            render->AddStyle(it->first, it->second, false);
-        }
-
-        for(auto it=attr.begin(); it != attr.end(); it++){
-            render->AddAttr(it->first, it->second);
-        }
-
-        for(auto it=event.begin(); it != event.end(); it++){
-            render->AddEvent(*it);
-        }
-
-        render->ApplyDefaultStyle(false);
-        render->ApplyDefaultAttr();
-        return render;
-    }
-
-
-    JsonPage::JsonPage(const std::string &pageId) :mPageId(pageId), mRenderPageCustom(nullptr) {
-        std::string targetName = RenderTargetManager::getRenderTargetName(pageId);
-        if (!targetName.empty()) {
-            if (RenderTargetManager::sharedInstance()->getAvailableTargetNames().count(targetName) == 0) {
-                // cannot find the target, degress
-                targetName = "";
-            }
-        }
-        if (!targetName.empty()) {
-            mRenderPageCustom = RenderManager::GetInstance()->CreateCustomPage(pageId, targetName);
-        }else{
-            mRenderPageCustom = nullptr;
-        }
-    }
-
-
-    void JsonPage::parseJson(const std::string &data) {
-        std::string error;
-        json11::Json json = json11::Json::parse(data, error);
-        if(error.length() > 0){
-            LOGE("JsonPage::parseJson %s", error.data());
-        }
-        LOGE("JsonPage::parseJson success");
-        sendChildren(json, "", 0, true);
-        RenderManager::GetInstance()->CreateFinish(mPageId);
-    }
-
-
-    void JsonPage::sendChildren(const json11::Json json, const std::string &parent_ref, int index, bool body) {
-        const std::string ref = getString(json, "ref");
-        const std::string type = getString(json, "type");
-        std::map<std::string, std::string> attr = getMap(json, "attr");
-        std::map<std::string, std::string> style = getMap(json, "style");
-        std::set<std::string> event = getSet(json, "event");
-        if(mRenderPageCustom == nullptr){
-            RenderObject* renderObject = toRenderObject(mPageId, type, ref, style, attr, event);
-            if(body){
-                RenderManager::GetInstance()->CreatePage(mPageId, renderObject);
-            }else{
-                RenderManager::GetInstance()->AddRenderObject(mPageId, parent_ref, index, renderObject);
-            }
-        }else{
-            std::map<std::string, std::string>* attrPtr = new std::map<std::string,std::string>(std::move(attr));
-            std::map<std::string, std::string>* stylePtr = new std::map<std::string,std::string>(std::move(style));
-            std::set<std::string>* eventPtr = new std::set<std::string>(std::move(event));
-            if(body){
-                mRenderPageCustom->CreateBody(ref,type, stylePtr, attrPtr, eventPtr);
-            }else{
-                mRenderPageCustom->AddRenderObject(ref, type, parent_ref, index, stylePtr, attrPtr, eventPtr);
-            }
-            //delete attrPtr;
-            //delete stylePtr;
-            //delete eventPtr;
-        }
-        const json11::Json children = json["children"];
-        if(children.is_array()){
-            const std::vector<json11::Json>& items = children.array_items();
-            int  itemIndex = 0;
-            for(const json11::Json& item : items){
-                sendChildren(item, ref, itemIndex, false);
-                itemIndex++;
-            }
-        }
-    }
-
-
-
-
-
-
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonPage.h b/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonPage.h
deleted file mode 100644
index 18f5176..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonPage.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2019/4/29.
-//
-
-#ifndef WEEX_PROJECT_REPLAYPAGE_H
-#define WEEX_PROJECT_REPLAYPAGE_H
-#include "third_party/json11/json11.hpp"
-#include <map>
-#include <string>
-#include "core/render/page/render_page_custom.h"
-
-namespace WeexCore {
-
-    /**
-     * Parse Json and send command to render manager.
-     * for qucik replay online state
-     * */
-    class JsonPage {
-
-        public:
-            JsonPage(const std::string& pageId);
-
-        public:
-            void parseJson(const std::string &data);
-
-         private:
-            void sendChildren(const json11::Json node, const std::string &parent_ref, int index, bool body=false);
-
-        protected:
-            std::string mPageId;
-            RenderPageCustom* mRenderPageCustom;
-
-    };
-}
-
-#endif //WEEX_PROJECT_REPLAYPAGE_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonRenderManager.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonRenderManager.cpp
deleted file mode 100644
index 1f57a92..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonRenderManager.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2019/4/29.
-//
-
-#include "JsonRenderManager.h"
-
-namespace WeexCore{
-
-    JsonRenderManager* JsonRenderManager::g_instance = nullptr;
-
-    JsonRenderManager::JsonRenderManager() {
-
-    }
-
-
-    void JsonRenderManager::CreatePage(const std::string &script, const std::string &instanceId,
-                                   const std::string &render_strategy) {
-        JsonPage* replayPage = new JsonPage(instanceId);
-        replayPage->parseJson(script);
-        mPages[instanceId] = replayPage;
-    }
-
-
-    bool JsonRenderManager::RefreshPage(const std::string &page_id, const std::string &init_data) {
-        if(mPages.size() == 0){
-            return false;
-        }
-        auto it = mPages.find(page_id);
-        if(it == mPages.end()){
-            return false;
-        }
-        return true;
-    }
-
-    bool JsonRenderManager::ClosePage(const std::string &page_id) {
-        if(mPages.size() == 0){
-            return false;
-        }
-        auto it = mPages.find(page_id);
-        if(it == mPages.end()){
-            return false;
-        }
-        delete  it->second;
-        mPages.erase(page_id);
-        return true;
-    }
-
-
-
-}
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonRenderManager.h b/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonRenderManager.h
deleted file mode 100644
index be3b41d..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/json/JsonRenderManager.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2019/4/29.
-//
-
-#ifndef WEEX_PROJECT_REPLAYMANAGER_H
-#define WEEX_PROJECT_REPLAYMANAGER_H
-#include "JsonPage.h"
-#include <map>
-#include <string>
-
-namespace WeexCore{
-
-    class JsonRenderManager {
-
-        public:
-            static JsonRenderManager *GetInstance() {
-                if (!g_instance) {
-                    g_instance = new JsonRenderManager();
-                }
-                return g_instance;
-            }
-
-        public:
-           void CreatePage(const std::string& script, const std::string& instanceId, const std::string& render_strategy);
-           bool RefreshPage(const std::string &page_id, const std::string &init_data);
-           bool ClosePage(const std::string &page_id);
-
-        private:
-            JsonRenderManager();
-
-        private:
-            static  JsonRenderManager *g_instance;
-            std::map<std::string, JsonPage*> mPages;
-
-    };
-}
-
-
-
-#endif //WEEX_PROJECT_REPLAYMANAGER_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/layout/flex_enum.h b/ios/Pods/WeexSDK/weex_core/Source/core/layout/flex_enum.h
deleted file mode 100644
index 7013f98..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/layout/flex_enum.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUM_H
-#define WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUM_H
-
-#define WEEXCORE_CSS_DEFAULT_DIRECTION kDirectionLTR
-
-/* These enum definitions may also be used by C files. */
-#ifdef __cplusplus
-namespace WeexCore {
-#endif
-
-  /**
-   * MainAxis direction
-   */
-  enum WXCoreDirection {
-      kDirectionInherit,
-      kDirectionLTR,
-      kDirectionRTL
-  };
-  /**
-   * MainAxis direction
-   */
-  enum WXCoreFlexDirection {
-    kFlexDirectionColumn,
-    kFlexDirectionColumnReverse,
-    kFlexDirectionRow,
-    kFlexDirectionRowReverse,
-  };
-
-  /**
-   * Controls the position of the element on the MainAxis
-   */
-  enum WXCoreJustifyContent {
-    kJustifyFlexStart,
-    kJustifyCenter,
-    kJustifyFlexEnd,
-    kJustifySpaceBetween,
-    kJustifySpaceAround,
-  };
-
-  /**
-   * Controls the position of the element on the CrossAxis and whether Stretch
-   */
-  enum WXCoreAlignItems {
-    kAlignItemsFlexStart,
-    kAlignItemsCenter,
-    kAlignItemsFlexEnd,
-    kAlignItemsStretch,
-  };
-
-  /**
-   * Controls the count of flexlines
-   */
-  enum WXCoreFlexWrap {
-    kNoWrap,
-    kWrap,
-    kWrapReverse,
-  };
-
-  /**
-   * The align-self will overrides the align-items specified by the Flex container.
-   * The two attributes have the same range of values.
-   */
-  enum WXCoreAlignSelf {
-    kAlignSelfAuto = -1,
-    kAlignSelfFlexStart = kAlignItemsFlexStart,
-    kAlignSelfCenter = kAlignItemsCenter,
-    kAlignSelfFlexEnd = kAlignItemsFlexEnd,
-    kAlignSelfStretch = kAlignItemsStretch,
-  };
-
-  enum WXCorePositionType {
-    kRelative,
-    kAbsolute,
-    kFixed,
-    kSticky = kRelative
-  };
-
-  enum WXCorePositionEdge {
-    kPositionEdgeTop,
-    kPositionEdgeBottom,
-    kPositionEdgeLeft,
-    kPositionEdgeRight,
-  };
-
-  enum WXCoreMarginEdge {
-    kMarginALL,
-    kMarginTop,
-    kMarginBottom,
-    kMarginLeft,
-    kMarginRight,
-  };
-
-  enum WXCorePaddingEdge {
-    kPaddingALL,
-    kPaddingTop,
-    kPaddingBottom,
-    kPaddingLeft,
-    kPaddingRight,
-  };
-
-  enum WXCoreBorderWidthEdge {
-    kBorderWidthALL,
-    kBorderWidthTop,
-    kBorderWidthBottom,
-    kBorderWidthLeft,
-    kBorderWidthRight,
-  };
-
-  enum WXCoreEdge{
-    kTop,
-    kRight,
-    kBottom,
-    kLeft,
-  };
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUM_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/layout/layout.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/layout/layout.cpp
deleted file mode 100644
index f43d5f2..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/layout/layout.cpp
+++ /dev/null
@@ -1,1162 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <math.h>
-#include "layout.h"
-#include <tuple>
-
-using namespace WeexCore;
-
-namespace WeexCore {
-
-  /**
-   * Entry function to calculate layout
-   */
-  void WXCoreLayoutNode::calculateLayout(const std::pair<float,float> &renderPageSize) {
-    BFCs.clear();
-    initFormatingContext(BFCs);
-    auto bfcDimension = calculateBFCDimension(renderPageSize);
-    if (std::get<0>(bfcDimension) || isDirty()) {
-      mChildrenFrozen.assign(getChildCount(kNonBFC), false);
-      measure(std::get<1>(bfcDimension), std::get<2>(bfcDimension), true);
-      checkSizeConstraints(this, false);
-    }
-    layout(mCssStyle->mMargin.getMargin(kMarginLeft),
-           mCssStyle->mMargin.getMargin(kMarginTop),
-           mCssStyle->mMargin.getMargin(kMarginLeft) + getLayoutWidth(),
-           mCssStyle->mMargin.getMargin(kMarginTop) + getLayoutHeight(),
-           false, &renderPageSize);
-    for (Index i = 0; i < getChildCount(kBFC); ++i) {
-      WXCoreLayoutNode *child = getChildAt(kBFC, i);
-      child->calculateLayout(renderPageSize);
-    }
-  }
-
-  void WXCoreLayoutNode::initFormatingContext(std::vector<WXCoreLayoutNode *> &BFCs) {
-    NonBFCs.clear();
-    for(auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-      WXCoreLayoutNode* child = *it;
-      if (child != nullptr) {
-        if (isBFC(child)) {
-          BFCs.push_back(child);
-        } else {
-          NonBFCs.push_back(child);
-          child->initFormatingContext(BFCs);
-        }
-      }
-    }
-    reset();
-  }
-
-  std::tuple<bool, float, float> WXCoreLayoutNode::calculateBFCDimension(const std::pair<float,float>& renderPageSize) {
-    bool sizeChanged = false;
-    float width = mCssStyle->mStyleWidth, height = mCssStyle->mStyleHeight;
-    std::pair<bool,float> ret;
-    if (isBFC(this)) {
-      ret = calculateBFCWidth(width, renderPageSize.first);
-      sizeChanged |=ret.first;
-      width = ret.second;
-
-      ret = calculateBFCHeight(height,renderPageSize.second);
-      sizeChanged |=ret.first;
-      height = ret.second;
-    }
-    return std::make_tuple(sizeChanged, width, height);
-  }
-
-  std::pair<bool,float> WXCoreLayoutNode::calculateBFCWidth(float width, const float renderPageWidth){
-    bool sizeChanged = false;
-    if (isnan(width) &&
-        mParent != nullptr &&
-        !isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft)) &&
-        !isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeRight))) {
-      float containingBlockWidth = NAN;
-      switch (mCssStyle->mPositionType) {
-        case kAbsolute:
-          containingBlockWidth = mParent->mLayoutResult->mLayoutSize.width;
-          break;
-        case kFixed:
-          if (!isnan(renderPageWidth)) {
-            containingBlockWidth = renderPageWidth;
-          }
-          break;
-        default: break;
-      }
-      if (!isnan(containingBlockWidth)) {
-        width = containingBlockWidth -
-            mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft) -
-            mCssStyle->mStylePosition.getPosition(kPositionEdgeRight);
-        if (!isnan(mCssStyle->mMargin.getMargin(kMarginLeft))) {
-          width -= mCssStyle->mMargin.getMargin(kMarginLeft);
-        }
-        if (!isnan(mCssStyle->mMargin.getMargin(kMarginRight))) {
-          width -= mCssStyle->mMargin.getMargin(kMarginRight);
-        }
-        setWidthMeasureMode(kExactly);
-        sizeChanged = true;
-      }
-    }
-    return std::make_pair(sizeChanged, width);
-  }
-
-
-  std::pair<bool,float> WXCoreLayoutNode::calculateBFCHeight(float height, const float renderPageHeight){
-    bool sizeChanged = false;
-    if (isnan(mCssStyle->mStyleHeight) &&
-        mParent != nullptr &&
-        !isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeTop)) &&
-        !isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom))) {
-      float containingBlockHeight = NAN;
-      switch (mCssStyle->mPositionType) {
-        case kAbsolute:
-          containingBlockHeight = mParent->mLayoutResult->mLayoutSize.height;
-          break;
-        case kFixed:
-          if (!isnan(renderPageHeight)) {
-            containingBlockHeight = renderPageHeight;
-          }
-          break;
-        default: break;
-      }
-      if (!isnan(containingBlockHeight)) {
-        height = containingBlockHeight -
-            mCssStyle->mStylePosition.getPosition(kPositionEdgeTop) -
-            mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom);
-        if (!isnan(mCssStyle->mMargin.getMargin(kMarginTop))) {
-          height -= mCssStyle->mMargin.getMargin(kMarginTop);
-        }
-        if (!isnan(mCssStyle->mMargin.getMargin(kMarginBottom))) {
-          height -= mCssStyle->mMargin.getMargin(kMarginBottom);
-        }
-        setHeightMeasureMode(kExactly);
-        sizeChanged = true;
-      }
-    }
-    return std::make_pair(sizeChanged, height);
-  }
-
-  void WXCoreLayoutNode::measure(const float width, const float height, const bool hypotheticalMeasurment){
-    if(hypotheticalMeasurment){
-      //Only BFC will enter this case.
-      hypotheticalMeasure(width, height);
-    }
-
-    if(getChildCount(kNonBFC) > 0){
-      if((isMainAxisHorizontal(this) && widthDirty) || (!isMainAxisHorizontal(this) && heightDirty)){
-        measureInternalNode(width, height, false, false);
-      }
-      determineMainSize(width, height);
-      determineCrossSize(width, height, true);
-      measureInternalNode(width, height, true, false);
-      determineCrossSize(width, height, false);
-    }
-    else {
-      if (widthDirty || heightDirty) {
-        measureLeafNode(width, height, hypotheticalMeasurment, false);
-      }
-    }
-    clearDirty();
-  }
-
-  void WXCoreLayoutNode::hypotheticalMeasure(const float width, const float height, const bool stretch){
-    if (getChildCount(kNonBFC) > 0) {
-      measureInternalNode(width, height, true, true);
-    } else {
-      measureLeafNode(width, height, true, stretch);
-    }
-
-    widthDirty = false;
-    heightDirty = false;
-    mLayoutResult->mLayoutSize.hypotheticalWidth = mLayoutResult->mLayoutSize.width;
-    mLayoutResult->mLayoutSize.hypotheticalHeight = mLayoutResult->mLayoutSize.height;
-  }
-
-  void WXCoreLayoutNode::measureLeafNode(float width, float height, const bool hypothetical, const bool stretch) {
-    if ((measureFunc != nullptr) &&
-        (widthMeasureMode == kUnspecified
-            || heightMeasureMode == kUnspecified)) {
-      float constrainsWidth = width;
-      if(isnan(width) && !isnan(mCssStyle->mMaxWidth)){
-          constrainsWidth = mCssStyle->mMaxWidth;
-      }
-
-      if((!isnan(width)) ||
-          (isnan(width) && !isnan(mCssStyle->mMaxWidth))) {
-        constrainsWidth -= sumPaddingBorderAlongAxis(this, true);
-      }
-      WXCoreSize dimension = measureFunc(this, constrainsWidth,
-                                         (stretch && !isnan(width)) ? kExactly:widthMeasureMode,
-                                         height, heightMeasureMode);
-      if (widthMeasureMode == kUnspecified) {
-        float actualWidth = dimension.width + sumPaddingBorderAlongAxis(this, true);
-        if (isnan(width)) {
-          width = actualWidth;
-        } else if (!stretch) {
-          width = std::min(width, actualWidth);
-        }
-      }
-      if (heightMeasureMode == kUnspecified) {
-        float actualHeight = dimension.height + sumPaddingBorderAlongAxis(this, false);
-        if (isnan(height)) {
-          height = actualHeight;
-        } else if (!stretch) {
-          height = std::min(height, actualHeight);
-        }
-      }
-    } else {
-      width = widthMeasureMode == kUnspecified ? sumPaddingBorderAlongAxis(this, true)
-                                               : width;
-      height = heightMeasureMode == kUnspecified ? sumPaddingBorderAlongAxis(this, false)
-                                                 : height;
-    }
-    setMeasuredDimension(width, height);
-  }
-
-
-  /**
-   * Determine the main size by expanding the individual flexGrow attribute.
-   */
-  void WXCoreLayoutNode::determineMainSize(const float width, const float height) {
-      bool horizontal = isMainAxisHorizontal(this);
-      if((horizontal && widthMeasureMode == kExactly) || (!horizontal && heightMeasureMode == kExactly)) {
-        //The measureMode along main axis is exactly
-        float maxMainSize = horizontal ? width: height;
-        maxMainSize -= sumPaddingBorderAlongAxis(this, isMainAxisHorizontal(this));
-        Index childIndex = 0;
-        for (WXCoreFlexLine *flexLine : mFlexLines) {
-          childIndex = expandItemsInFlexLine(flexLine, maxMainSize, childIndex);
-        }
-      }
-    }
-
-
-  /**
-   * @param flexDirection         the flex direction attribute
-   * @param width                 stylewidth by this node
-   * @param height                styleheight by this node
-   * @param paddingAlongCrossAxis the padding value for this node along the cross axis
-   */
-    void WXCoreLayoutNode::determineCrossSize(const float width, const float height, const bool stretch) {
-      if (mFlexLines.size() == 1 && isCrossExactly()) {
-        determineCrossSize(width, height, mFlexLines[0]);
-      }
-      if (stretch) {
-        stretchViewCrossSize();
-      }
-    }
-
-    void WXCoreLayoutNode::determineCrossSize(const float width, const float height, WXCoreFlexLine* const flexLine){
-      bool horizontal = isMainAxisHorizontal(this);
-      float size = flexLine->mCrossSize;
-      float paddingAlongCrossAxis = sumPaddingBorderAlongAxis(this, !horizontal);
-      if (horizontal) {
-        if (heightMeasureMode == kExactly) {
-          size = height - paddingAlongCrossAxis;
-        }
-      } else {
-        if (widthMeasureMode == kExactly) {
-          size = width - paddingAlongCrossAxis;
-        }
-      }
-      flexLine->mCrossSize = size;
-    }
-
-    void WXCoreLayoutNode::measureInternalNode(const float width, const float height, const bool needMeasure,
-                                               const bool hypotheticalMeasurment) {
-      for (WXCoreFlexLine *flexLine : mFlexLines) {
-        if(flexLine!= nullptr) {
-          delete flexLine;
-        }
-        flexLine = nullptr;
-      }
-      mFlexLines.clear();
-      Index childCount = getChildCount(kNonBFC);
-      WXCoreFlexLine *flexLine = new WXCoreFlexLine();
-
-      for (Index i = 0; i < childCount; i++) {
-        WXCoreLayoutNode *child = getChildAt(kNonBFC, i);
-        if (child->mCssStyle->mAlignSelf == kAlignSelfStretch) {
-          flexLine->mIndicesAlignSelfStretch.push_back(i);
-        }
-        measureChild(child, flexLine->mMainSize, width, height, needMeasure, hypotheticalMeasurment);
-        checkSizeConstraints(child, hypotheticalMeasurment);
-
-        if (isWrapRequired(width, height, flexLine->mMainSize,
-                           calcItemSizeAlongAxis(child, isMainAxisHorizontal(this)))) {
-          if (flexLine->mItemCount > 0) {
-            mFlexLines.push_back(flexLine);
-          }
-          flexLine = new WXCoreFlexLine();
-          flexLine->mItemCount = 1;
-        } else {
-          flexLine->mItemCount++;
-        }
-        updateCurrentFlexline(childCount, flexLine, i, child, hypotheticalMeasurment || (!hypotheticalMeasurment && !needMeasure));
-      }
-      setMeasuredDimensionForFlex(width, widthMeasureMode, height, heightMeasureMode);
-    }
-
-    void WXCoreLayoutNode::updateCurrentFlexline(const Index childCount, WXCoreFlexLine* const flexLine, const Index i,
-                                                 const WXCoreLayoutNode* const child, const bool useHypotheticalSize){
-      flexLine->mMainSize += calcItemSizeAlongAxis(child, isMainAxisHorizontal(this), useHypotheticalSize);
-      sumFlexGrow(child, flexLine, i);
-      flexLine->mCrossSize =
-          std::max(flexLine->mCrossSize, calcItemSizeAlongAxis(child, !isMainAxisHorizontal(this), useHypotheticalSize));
-      if (i == childCount - 1 && flexLine->mItemCount != 0) {
-        mFlexLines.push_back(flexLine);
-      }
-    }
-
-    void WXCoreLayoutNode::measureChild(WXCoreLayoutNode* const child, const float currentMainSize,
-                                        const float parentWidth, const float parentHeight,
-                                        const bool needMeasure, const bool hypotheticalMeasurment) {
-      if (needMeasure && child->isDirty()) {
-        if (hypotheticalMeasurment) {
-          float childWidth = child->mCssStyle->mStyleWidth;
-          float childHeight = child->mCssStyle->mStyleHeight;
-          bool stretch = !isMainAxisHorizontal(this) &&
-              child->measureFunc != nullptr &&
-              widthMeasureMode == kExactly &&
-              isSingleFlexLine(parentHeight) &&
-              ((child->mCssStyle->mAlignSelf == kAlignSelfStretch) ||
-                  (mCssStyle->mAlignItems == kAlignItemsStretch
-                      && child->mCssStyle->mAlignSelf == kAlignSelfAuto));
-
-          adjustChildSize(child, currentMainSize, parentWidth,
-                          parentHeight, childWidth, childHeight);
-          child->hypotheticalMeasure(childWidth, childHeight, stretch);
-        } else {
-          if(isSingleFlexLine(isMainAxisHorizontal(this) ? parentWidth : parentHeight)
-              && !isMainAxisHorizontal(this)){
-            if(child->widthMeasureMode == kUnspecified) {
-              child->setLayoutWidth(parentWidth - sumPaddingBorderAlongAxis(this, true)
-                                        - child->mCssStyle->sumMarginOfDirection(true));
-            }
-            if(child->heightMeasureMode == kUnspecified && child->widthDirty) {
-              child->mLayoutResult->mLayoutSize.height = NAN;
-            }
-          }
-          child->measure(child->mLayoutResult->mLayoutSize.width,
-                         child->mLayoutResult->mLayoutSize.height, hypotheticalMeasurment);
-        }
-      }
-    }
-
-    void WXCoreLayoutNode::adjustChildSize(const WXCoreLayoutNode *child,
-                                        const float currentMainSize,
-                                        const float parentWidth,
-                                        const float parentHeight,
-                                        float &childWidth,
-                                        float &childHeight) const {
-      if(child->measureFunc == nullptr) {
-        if(!isnan(childWidth)){
-          childWidth = std::max(childWidth, child->sumPaddingBorderAlongAxis(child, true));
-        }
-        if(!isnan(childHeight)){
-          childHeight = std::max(childHeight, child->sumPaddingBorderAlongAxis(child, false));
-        }
-      }
-
-      if (isSingleFlexLine(isMainAxisHorizontal(this) ? parentWidth : parentHeight)) {
-        if (isMainAxisHorizontal(this)) {
-          if (!isnan(parentHeight) && isnan(child->mCssStyle->mStyleHeight)
-              && child->mCssStyle->mAlignSelf == kAlignSelfAuto
-              && mCssStyle->mAlignItems == kAlignItemsStretch) {
-            childHeight = parentHeight - sumPaddingBorderAlongAxis(this, false) -
-                child->mCssStyle->sumMarginOfDirection(false);
-          }
-        } else {
-          if (!isnan(parentWidth) && isnan(child->mCssStyle->mStyleWidth)) {
-            childWidth = parentWidth - sumPaddingBorderAlongAxis(this, true) -
-                child->mCssStyle->sumMarginOfDirection(true);
-          }
-       }
-      }
-    }
-
-    void WXCoreLayoutNode::checkSizeConstraints(WXCoreLayoutNode* const node, const bool hypotheticalMeasurment) {
-      bool widthRemeasure = false, heightRemeasure = false;
-      float nodeWidth,nodeHeight;
-      nodeWidth = node->mLayoutResult->mLayoutSize.width;
-      nodeHeight = node->mLayoutResult->mLayoutSize.height;
-
-      if (!isnan(node->mCssStyle->mMinWidth) &&
-          nodeWidth < node->mCssStyle->mMinWidth) {
-        widthRemeasure = true;
-        nodeWidth = node->mCssStyle->mMinWidth;
-      } else if (!isnan(node->mCssStyle->mMaxWidth)
-          && nodeWidth > node->mCssStyle->mMaxWidth) {
-        widthRemeasure = true;
-        nodeWidth = node->mCssStyle->mMaxWidth;
-      }
-
-      if (!isnan(node->mCssStyle->mMinHeight) &&
-          nodeHeight < node->mCssStyle->mMinHeight) {
-        heightRemeasure = true;
-        nodeHeight = node->mCssStyle->mMinHeight;
-      } else if (!isnan(node->mCssStyle->mMaxHeight) &&
-          nodeHeight > node->mCssStyle->mMaxHeight) {
-        heightRemeasure = true;
-        nodeHeight = node->mCssStyle->mMaxHeight;
-      }
-
-      node->setWidthMeasureMode(widthRemeasure ? kExactly : node->widthMeasureMode);
-      node->setHeightMeasureMode(heightRemeasure ? kExactly : node->heightMeasureMode);
-
-      if (hypotheticalMeasurment) {
-        if (widthRemeasure) {
-          node->setLayoutWidth(nodeWidth);
-          node->mLayoutResult->mLayoutSize.hypotheticalWidth = nodeWidth;
-        }
-        if (heightRemeasure) {
-          node->setLayoutHeight(nodeHeight);
-          node->mLayoutResult->mLayoutSize.hypotheticalHeight = nodeHeight;
-        }
-      } else {
-        if (widthRemeasure || heightRemeasure) {
-          node->measure(nodeWidth, nodeHeight, hypotheticalMeasurment);
-        }
-      }
-    }
-
-    Index WXCoreLayoutNode::expandItemsInFlexLine(WXCoreFlexLine* const flexLine,
-                                      const float maxMainSize,
-                                      const Index startIndex) {
-      Index childIndex = startIndex;
-      if (flexLine->mTotalFlexGrow <= 0) {
-        childIndex += flexLine->mItemCount;
-      } else {
-        bool needsReexpand = false;
-        const float unitSpace = (maxMainSize - flexLine->mMainSize + flexLine->mTotalFlexibleSize) /
-                                (flexLine->mTotalFlexGrow > 1 ? flexLine->mTotalFlexGrow : 1);
-        float sizeBeforeExpand = flexLine->mMainSize;
-        flexLine->mMainSize = 0;
-
-        for (Index i = 0; i < flexLine->mItemCount; i++) {
-          WXCoreLayoutNode *child = getChildAt(kNonBFC, childIndex);
-          if (!mChildrenFrozen[childIndex]) {
-            float childSizeAlongMainAxis = unitSpace * child->mCssStyle->mFlexGrow;
-            std::pair<bool, float> limitSize = limitChildMainSize(flexLine, child,
-                                                                childSizeAlongMainAxis, childIndex);
-            needsReexpand = limitSize.first;
-            adjustChildSize(child, limitSize.second);
-          }
-          flexLine->mMainSize += calcItemSizeAlongAxis(child, isMainAxisHorizontal(this));
-          childIndex++;
-        }
-
-        if (needsReexpand && sizeBeforeExpand != flexLine->mMainSize) {
-          // Re-invoke the method with the same startIndex to distribute the positive free space
-          // that wasn't fully distributed (because of maximum/minimum length constraint)
-          expandItemsInFlexLine(flexLine, maxMainSize, startIndex);
-        }
-      }
-      return childIndex;
-    }
-
-    void WXCoreLayoutNode::adjustChildSize(WXCoreLayoutNode* const child, const float childMainSize) {
-      if (isMainAxisHorizontal(this)) {
-        child->setWidthMeasureMode(kExactly);
-        child->setLayoutWidth(childMainSize);
-        //TODO Fix https://jsplayground.taobao.org/raxplayground/97efee70-775f-45a6-b07d-d84c8d1b4387
-        //TODO This is just a temporary fix, we need to make things beauty and clean.
-        if(child->heightMeasureMode == kUnspecified && child->measureFunc != nullptr && child->getChildCount() == 0){
-          child->setLayoutHeight(NAN);
-        }
-      } else {
-        child->setHeightMeasureMode(kExactly);
-        child->setLayoutHeight(childMainSize);
-      }
-    }
-
-    void WXCoreLayoutNode::stretchViewCrossSize(){
-      if (mCssStyle->mAlignItems == kAlignItemsStretch) {
-        Index viewIndex = 0;
-        for (Index i = 0; i< mFlexLines.size(); i++ ) {
-            WXCoreFlexLine *flexLine = mFlexLines.at(i);
-            for (Index j = 0; j < flexLine->mItemCount; j++, viewIndex++) {
-                WXCoreLayoutNode* child = getChildAt(kNonBFC, viewIndex);
-              if (child->mCssStyle->mAlignSelf == kAlignSelfAuto ||
-                  child->mCssStyle->mAlignSelf == kAlignSelfStretch) {
-                stretchViewCrossSize(child, flexLine->mCrossSize);
-              }
-          }
-        }
-      } else {
-        for (WXCoreFlexLine *flexLine : mFlexLines) {
-          for (auto index : flexLine->mIndicesAlignSelfStretch) {
-            stretchViewCrossSize(getChildAt(kNonBFC, index), flexLine->mCrossSize);
-          }
-        }
-      }
-    }
-
-    void WXCoreLayoutNode::stretchViewCrossSize(WXCoreLayoutNode* const child, float crossSize){
-      if (isMainAxisHorizontal(this)) {
-        if (child->heightMeasureMode != kExactly &&
-            !(child->measureFunc != nullptr && child->getChildCount() == 0)) {
-          crossSize -=
-              child->mCssStyle->mMargin.getMargin(kMarginTop) +
-                  child->mCssStyle->mMargin.getMargin(kMarginBottom);
-          child->setHeightMeasureMode(kExactly);
-          child->setLayoutHeight(std::max(0.f, crossSize));
-        }
-      } else {
-        if (child->widthMeasureMode != kExactly) {
-            crossSize -=
-                child->mCssStyle->mMargin.getMargin(kMarginLeft) +
-                    child->mCssStyle->mMargin.getMargin(kMarginRight);
-          child->setWidthMeasureMode(kExactly);
-          child->setLayoutWidth(std::max(0.f, crossSize));
-        }
-      }
-    }
-
-    void WXCoreLayoutNode::setFrame(const float l, const float t, const float r, const float b) {
-      if (mLayoutResult->mLayoutPosition.getPosition(kPositionEdgeLeft) != l
-          || mLayoutResult->mLayoutPosition.getPosition(kPositionEdgeTop) != t
-          || mLayoutResult->mLayoutPosition.getPosition(kPositionEdgeRight) != r
-          || mLayoutResult->mLayoutPosition.getPosition(kPositionEdgeBottom) != b
-          || (l == 0.0f && t == 0.0f && r == 0.0f && b == 0.0f) ) {
-        setHasNewLayout(true);
-        setFrame(&mLayoutResult->mLayoutPosition, l, t, r, b);
-      }
-    }
-
-  void WXCoreLayoutNode::setFrame(WXCorePosition* position,const float l, const float t, const float r, const float b){
-    position->setPosition(kPositionEdgeLeft, l);
-    position->setPosition(kPositionEdgeTop, t);
-    position->setPosition(kPositionEdgeRight, r);
-    position->setPosition(kPositionEdgeBottom, b);
-  }
-
-  void WXCoreLayoutNode::layout(float left, float top, float right, float bottom, const bool absoluteFlexItem, const std::pair<float,float>* const renderPageSize) {
-    if(absoluteFlexItem) {
-      absoultePositon = new WXCorePosition();
-      setFrame(absoultePositon, left, top, right, bottom);
-    }
-    else{
-      switch (mCssStyle->mPositionType) {
-        case kFixed:
-        case kAbsolute:
-          calcAbsoluteOffset(left, top, right, bottom, renderPageSize);
-          break;
-        default:
-        case kRelative:
-          calcRelativeOffset(left, top, right, bottom);
-          break;
-      }
-      setFrame(left, top, right, bottom);
-      onLayout(left, top, right, bottom);
-    }
-  }
-
-  void WXCoreLayoutNode::calcRelativeOffset(float &left, float &top, float &right, float &bottom) const {
-    if (!isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft))) {
-      left += mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft);
-      right += mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft);
-    } else if (!isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeRight))) {
-      left -= mCssStyle->mStylePosition.getPosition(kPositionEdgeRight);
-      right -= mCssStyle->mStylePosition.getPosition(kPositionEdgeRight);
-    }
-
-    if (!isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeTop))) {
-      top += mCssStyle->mStylePosition.getPosition(kPositionEdgeTop);
-      bottom += mCssStyle->mStylePosition.getPosition(kPositionEdgeTop);
-    } else if (!isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom))) {
-      top -= mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom);
-      bottom -= mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom);
-    }
-  }
-
-  void WXCoreLayoutNode::calcAbsoluteOffset(float &left, float &top, float &right, float &bottom, const std::pair<float,float>* const renderPageSize){
-    WXCorePadding parentPadding;
-    WXCoreBorderWidth parentBorder;
-    WXCoreSize parentSize;
-    if (mCssStyle->mPositionType == kAbsolute && mParent != nullptr) {
-      parentPadding = mParent->mCssStyle->mPadding;
-      parentBorder = mParent->mCssStyle->mBorderWidth;
-      parentSize = mParent->mLayoutResult->mLayoutSize;
-      positionAbsoluteFlexItem(left, top, right, bottom);
-    } else if(mCssStyle->mPositionType == kFixed && renderPageSize!= nullptr){
-      parentSize.width = renderPageSize->first;
-      parentSize.height = renderPageSize->second;
-    }
-    updateLeftRightForAbsolute(left, right, parentPadding, parentBorder, parentSize);
-    updateTopBottomForAbsolute(top, bottom, parentPadding, parentBorder, parentSize);
-  }
-
-  void WXCoreLayoutNode::positionAbsoluteFlexItem(float &left, float &top, float &right, float &bottom){
-    if ((isnan(getStylePositionLeft()) && isnan(getStylePositionRight())) ||
-        (isnan(getStylePositionTop()) && isnan(getStylePositionBottom()))) {
-      WXCoreFlexLine tempLine;
-      mParent->updateFlexLineForAbsoluteItem(this, &tempLine);
-      mParent->onLayout(mParent->getLayoutPositionLeft(),
-                        mParent->getLayoutPositionTop(),
-                        mParent->getLayoutPositionRight(),
-                        mParent->getLayoutPositionBottom(),
-                        this, &tempLine);
-      if(absoultePositon != nullptr) {
-        if (isnan(getStylePositionLeft()) && isnan(getStylePositionRight())) {
-          left = absoultePositon->getPosition(kPositionEdgeLeft);
-          right = absoultePositon->getPosition(kPositionEdgeRight);
-        }
-        if (isnan(getStylePositionTop()) && isnan(getStylePositionBottom())) {
-          top = absoultePositon->getPosition(kPositionEdgeTop);
-          bottom = absoultePositon->getPosition(kPositionEdgeBottom);
-        }
-        delete absoultePositon;
-        absoultePositon = nullptr;
-      }
-    }
-  }
-
-  void WXCoreLayoutNode::updateFlexLineForAbsoluteItem(WXCoreLayoutNode *const absoluteFlexItem, WXCoreFlexLine *const flexLine){
-    flexLine->mMainSize = isMainAxisHorizontal(this) ?
-                         absoluteFlexItem->getLayoutWidth() + absoluteFlexItem->getMarginLeft()
-                             + absoluteFlexItem->getMarginRight() :
-                         absoluteFlexItem->getLayoutHeight() + absoluteFlexItem->getMarginTop()
-                             + absoluteFlexItem->getMarginBottom();
-    flexLine->mCrossSize = isMainAxisHorizontal(this) ?
-                          absoluteFlexItem->getLayoutHeight() + absoluteFlexItem->getMarginTop()
-                              + absoluteFlexItem->getMarginBottom() :
-                          absoluteFlexItem->getLayoutWidth() + absoluteFlexItem->getMarginLeft()
-                              + absoluteFlexItem->getMarginRight();
-    flexLine->mItemCount = 1;
-    determineCrossSize(getLayoutWidth(),
-                       getLayoutHeight(),
-                       flexLine);
-  }
-
-  void WXCoreLayoutNode::onLayout(const float left, const float top, const float right, const float bottom,
-                                  WXCoreLayoutNode *const absoulteItem, WXCoreFlexLine *const flexLine) {
-      // determin direction
-      if (mLayoutResult->mLayoutDirection == kDirectionInherit) {
-          if(mCssStyle->mDirection == kDirectionInherit) {
-              // default direction in css is inherit, inherit direction from parent node
-              mLayoutResult->mLayoutDirection = NULL == mParent ? WEEXCORE_CSS_DEFAULT_DIRECTION : mParent->getLayoutDirection();
-          } else {
-              // specific direction in current Node's style
-              mLayoutResult->mLayoutDirection = mCssStyle->mDirection;
-          }
-      }
-      
-      bool verticalRTL = false;
-      if (mLayoutResult->mLayoutDirection == kDirectionRTL) {
-          verticalRTL = mCssStyle->mFlexWrap != kWrapReverse;
-      } else {
-          verticalRTL = mCssStyle->mFlexWrap == kWrapReverse;
-      }
-      
-      switch (mCssStyle->mFlexDirection) {
-        case kFlexDirectionRow:
-            layoutHorizontal(mLayoutResult->mLayoutDirection == kDirectionRTL, left, top, right, bottom, absoulteItem, flexLine);
-            break;
-        case kFlexDirectionRowReverse:
-            layoutHorizontal(mLayoutResult->mLayoutDirection != kDirectionRTL, left, top, right, bottom, absoulteItem, flexLine);
-            break;
-          case kFlexDirectionColumnReverse:
-              layoutVertical(verticalRTL, true, left, top, right, bottom, absoulteItem, flexLine);
-              break;
-          case kFlexDirectionColumn:
-          default:
-              layoutVertical(verticalRTL, false, left, top, right, bottom, absoulteItem, flexLine);
-              break;
-      }
-  }
-
-  /**
-   * Sub method for {@link WXCoreLayoutNode #onLayout(int, int, int, int)} when the
-   * {@link #mFlexDirection} is either {@link WXCoreFlexDirection #WXCore_Flex_Direction_Row} or
-   * {@link WXCoreFlexDirection #WXCore_Flex_Direction_Row_REVERSE}.
-   *
-   * @param isRtl  {@code true} if the horizontal layout direction is mStyleRight to mStyleLeft, {@code
-   *               false} otherwise.
-   * @param left   the mStyleLeft position of this View
-   * @param top    the mStyleTop position of this View
-   * @param right  the mStyleRight position of this View
-   * @param bottom the mStyleBottom position of this View
-   */
-  void WXCoreLayoutNode::layoutHorizontal(const bool isRtl,
-                                          const float left, const float top,
-                                          const float right, const float bottom,
-                                          WXCoreLayoutNode *const absoulteItem,
-                                          WXCoreFlexLine *const flexLine) {
-    Index currentViewIndex = 0;
-    float height = bottom - top;
-    float width = right - left;
-
-    // childBottom is used if the mFlexWrap is FLEX_WRAP_WRAP_REVERSE otherwise
-    // childTop is used to align the vertical position of the children views.
-    float childBottom = height - getPaddingBottom() - getBorderWidthBottom();
-    float childTop = getPaddingTop() + getBorderWidthTop();
-
-    // Used only for RTL layout
-    // Use float to reduce the round error that may happen in when justifyContent ==
-    // SPACE_BETWEEN or SPACE_AROUND
-    float childLeft, childRight;
-    const std::vector<WXCoreFlexLine*> &lines = (flexLine == nullptr? mFlexLines: std::vector<WXCoreFlexLine*>{flexLine});
-
-    for (WXCoreFlexLine *flexLine: lines) {
-      float spaceBetweenItem = 0.f;
-      // Bugfix: when flex-direction is row-reverse, justify-content:flex-end is not available, it always performance as flex-start
-      // layoutFlexlineHorizontal(width, flexLine, childLeft, childRight, spaceBetweenItem);
-      layoutFlexlineHorizontal(isRtl, width, flexLine, childLeft, childRight, spaceBetweenItem);
-      spaceBetweenItem = std::max(spaceBetweenItem, 0.f);
-
-      if(absoulteItem == nullptr) {
-        for (Index j = 0; j < flexLine->mItemCount; j++) {
-          WXCoreLayoutNode *child = getChildAt(kNonBFC, currentViewIndex);
-          if (child == nullptr) {
-            continue;
-          }
-          layoutSingleChildHorizontal(isRtl, false, childBottom, childTop,
-                                     flexLine, child, childLeft, childRight);
-          childLeft += child->mLayoutResult->mLayoutSize.width + spaceBetweenItem + child->getMarginRight();
-          childRight -= child->mLayoutResult->mLayoutSize.width + spaceBetweenItem + child->getMarginLeft();
-          currentViewIndex++;
-        }
-        childTop += flexLine->mCrossSize;
-        childBottom -= flexLine->mCrossSize;
-      }
-      else{
-        layoutSingleChildHorizontal(isRtl, true, childBottom, childTop,
-                                   flexLine, absoulteItem, childLeft, childRight);
-      }
-    }
-  }
-
-  void WXCoreLayoutNode::layoutFlexlineHorizontal(const bool isRTL,
-                                                  const float width,
-                                                  const WXCoreFlexLine *const flexLine,
-                                                  float &childLeft,
-                                                  float &childRight,
-                                                  float &spaceBetweenItem) const {
-      Index visibleCount, visibleItem;
-      float denominator;
-      switch (mCssStyle->mJustifyContent) {
-          case kJustifyCenter:
-              childLeft = (width - flexLine->mMainSize - mCssStyle->sumPaddingBorderOfEdge(kRight)
-                              + mCssStyle->sumPaddingBorderOfEdge(kLeft)) / 2;
-              childRight = childLeft + flexLine->mMainSize;
-              break;
-          case kJustifySpaceAround:
-              visibleCount = flexLine->mItemCount;
-              if (visibleCount != 0) {
-                  spaceBetweenItem =
-                  (width - flexLine->mMainSize - sumPaddingBorderAlongAxis(this, true)) / visibleCount;
-              }
-              childLeft = getPaddingLeft() + getBorderWidthLeft() + spaceBetweenItem / 2.f;
-              childRight = width - getPaddingRight() - getBorderWidthRight() - spaceBetweenItem / 2.f;
-              break;
-          case kJustifySpaceBetween:
-              childLeft = getPaddingLeft() + getBorderWidthLeft();
-              visibleItem = flexLine->mItemCount;
-              denominator = visibleItem != 1 ? visibleItem - 1 : 1.f;
-              spaceBetweenItem =
-              (width - flexLine->mMainSize - sumPaddingBorderAlongAxis(this, true)) / denominator;
-              childRight = width - getPaddingRight() - getBorderWidthRight();
-              break;
-          case kJustifyFlexEnd:
-              if (isRTL) {
-                  childLeft = getPaddingLeft() + getBorderWidthLeft();
-                  childRight = flexLine->mMainSize + getPaddingLeft() + getBorderWidthLeft();
-              } else {
-                  childLeft = width - flexLine->mMainSize - getPaddingRight() - getBorderWidthRight();
-                  childRight = width - getPaddingRight() - getBorderWidthRight();
-              }
-              break;
-          case kJustifyFlexStart:
-          default:
-              if (isRTL) {
-                  childLeft = width - flexLine->mMainSize - getPaddingRight() - getBorderWidthRight();
-                  childRight = width - getPaddingRight() - getBorderWidthRight();
-              } else {
-                  childLeft = getPaddingLeft() + getBorderWidthLeft();
-                  childRight = flexLine->mMainSize + getPaddingLeft() + getBorderWidthLeft();
-              }
-              break;
-      }
-  }
-    
-  void WXCoreLayoutNode::layoutFlexlineHorizontal(const float width,
-                              const WXCoreFlexLine *const flexLine,
-                              float &childLeft,
-                              float &childRight,
-                              float &spaceBetweenItem) const {
-      layoutFlexlineHorizontal(false, width, flexLine, childLeft, childRight, spaceBetweenItem);
-  }
-
-  void WXCoreLayoutNode::layoutSingleChildHorizontal(const bool isRtl, const bool absoulteItem,
-                                                  float childBottom, float childTop,
-                                                  WXCoreFlexLine *const flexLine,
-                                                  WXCoreLayoutNode *const child,
-                                                  float &childLeft, float &childRight) {
-    childLeft += child->getMarginLeft();
-    childRight -= child->getMarginRight();
-    if (mCssStyle->mFlexWrap == kWrapReverse) {
-      if (isRtl) {
-        layoutSingleChildHorizontal(child,
-                                    flexLine,
-                                    mCssStyle->mFlexWrap,
-                                    mCssStyle->mAlignItems,
-                                    childRight - child->mLayoutResult->mLayoutSize.width,
-                                    childBottom - child->mLayoutResult->mLayoutSize.height,
-                                    childRight,
-                                    childBottom,
-                                    absoulteItem);
-      } else {
-        layoutSingleChildHorizontal(child,
-                                    flexLine,
-                                    mCssStyle->mFlexWrap,
-                                    mCssStyle->mAlignItems,
-                                    childLeft,
-                                    childBottom - child->mLayoutResult->mLayoutSize.height,
-                                    childLeft + child->mLayoutResult->mLayoutSize.width,
-                                    childBottom,
-                                    absoulteItem);
-      }
-    } else {
-      if (isRtl) {
-        layoutSingleChildHorizontal(child, flexLine, mCssStyle->mFlexWrap, mCssStyle->mAlignItems,
-                                    childRight - child->mLayoutResult->mLayoutSize.width, childTop,
-                                    childRight, childTop + child->mLayoutResult->mLayoutSize.height,
-                                    absoulteItem);
-      } else {
-        layoutSingleChildHorizontal(child, flexLine, mCssStyle->mFlexWrap, mCssStyle->mAlignItems,
-                                    childLeft, childTop,
-                                    childLeft + child->mLayoutResult->mLayoutSize.width,
-                                    childTop + child->mLayoutResult->mLayoutSize.height,
-                                    absoulteItem);
-      }
-    }
-  }
-
-  /**
-   * Place a single View when the layout direction is horizontal ({@link #mFlexDirection} is
-   * either {@link WXCoreFlexDirection #WXCore_Flex_Direction_Row} or
-   * {@link WXCoreFlexDirection #WXCore_Flex_Direction_Row_REVERSE}).
-   *
-   * @param node       the View to be placed
-   * @param flexLine   the {@link WXCoreFlexLine} where the View belongs to
-   * @param flexWrap   the flex wrap attribute of this BasicLayoutNode
-   * @param alignItems the align items attribute of this BasicLayoutNode
-   * @param left       the mStyleLeft position of the View, which the View's margin is already taken
-   *                   into account
-   * @param top        the mStyleTop position of the flex line where the View belongs to. The actual
-   *                   View's mStyleTop position is shifted depending on the flexWrap and alignItems
-   *                   attributes
-   * @param right      the mStyleRight position of the View, which the View's margin is already taken
-   *                   into account
-   * @param bottom     the mStyleBottom position of the flex line where the View belongs to. The actual
-   *                   View's mStyleBottom position is shifted depending on the flexWrap and alignItems
-   *                   attributes
-   */
-  void WXCoreLayoutNode::layoutSingleChildHorizontal(WXCoreLayoutNode *const node, WXCoreFlexLine* const flexLine,
-                                                     const WXCoreFlexWrap flexWrap, WXCoreAlignItems alignItems,
-                                                     const float left, const float top, const float right, const float bottom, const bool absoluteFlexItem) {
-    if (node->mCssStyle->mAlignSelf != kAlignSelfAuto) {
-      // Expecting the values for alignItems and alignSelf match except for ALIGN_SELF_AUTO.
-      // Assigning the alignSelf value as alignItems should work.
-      alignItems = static_cast<WXCoreAlignItems>(node->mCssStyle->mAlignSelf);
-    }
-
-    float crossSize = flexLine->mCrossSize;
-
-    switch (alignItems) {
-      case kAlignItemsFlexStart:
-      case kAlignItemsStretch:
-        if (flexWrap != kWrapReverse) {
-          node->layout(left, top + node->getMarginTop(), right, bottom + node->getMarginTop(), absoluteFlexItem);
-        } else {
-          node->layout(left, top - node->getMarginBottom(), right, bottom - node->getMarginBottom(), absoluteFlexItem);
-        }
-        break;
-      case kAlignItemsFlexEnd:
-        if (flexWrap != kWrapReverse) {
-          node->layout(left,
-                       top + crossSize - node->mLayoutResult->mLayoutSize.height - node->getMarginBottom(),
-                       right, top + crossSize - node->getMarginBottom(), absoluteFlexItem);
-        } else {
-          // If the flexWrap == FLEX_WRAP_WRAP_REVERSE, the direction of the
-          // flexEnd is flipped (from mStyleTop to mStyleBottom).
-          node->layout(left, top - crossSize + node->mLayoutResult->mLayoutSize.height + node->getMarginTop(),
-                       right, bottom - crossSize + node->mLayoutResult->mLayoutSize.height + node->getMarginTop(), absoluteFlexItem);
-        }
-        break;
-      case kAlignItemsCenter:
-        float topFromCrossAxis = (crossSize - node->mLayoutResult->mLayoutSize.height
-                                  + node->getMarginTop() - node->getMarginBottom()) / 2;
-        if (flexWrap != kWrapReverse) {
-          node->layout(left, top + topFromCrossAxis,
-                       right, top + topFromCrossAxis + node->mLayoutResult->mLayoutSize.height, absoluteFlexItem);
-        } else {
-          node->layout(left, top - topFromCrossAxis,
-                       right, top - topFromCrossAxis + node->mLayoutResult->mLayoutSize.height, absoluteFlexItem);
-        }
-        break;
-    }
-  }
-
-  /**
-   * Sub method for {@link WXCoreLayoutNode #onLayout(int, int, int, int)} when the
-   * {@link #mFlexDirection} is either {@link WXCoreFlexDirection #WXCore_Flex_Direction_Column} or
-   * {@link WXCoreFlexDirection #WXCore_Flex_Direction_Column_Reverse}.
-   *
-   * @param isRtl           {@code true} if the horizontal layout direction is mStyleRight to mStyleLeft,
-   *                        {@code false}
-   *                        otherwise
-   * @param fromBottomToTop {@code true} if the layout direction is mStyleBottom to mStyleTop, {@code false}
-   *                        otherwise
-   * @param left            the mStyleLeft position of this View
-   * @param top             the mStyleTop position of this View
-   * @param right           the mStyleRight position of this View
-   * @param bottom          the mStyleBottom position of this View
-   */
-  void
-  WXCoreLayoutNode::layoutVertical(const bool isRtl,
-                                   const bool fromBottomToTop,
-                                   const float left, const float top,
-                                   const float right, const float bottom,
-                                   WXCoreLayoutNode *const absoulteItem,
-                                   WXCoreFlexLine *const flexLine) {
-    float childLeft = getPaddingLeft() + getBorderWidthLeft();
-    Index currentViewIndex = 0;
-    float width = right - left;
-    float height = bottom - top;
-
-    // childRight is used if the mFlexWrap is FLEX_WRAP_WRAP_REVERSE otherwise
-    // childLeft is used to align the horizontal position of the children views.
-    float childRight = width - getPaddingRight() - getBorderWidthRight();
-
-    // Use float to reduce the round error that may happen in when justifyContent ==
-    // SPACE_BETWEEN or SPACE_AROUND
-    float childTop, childBottom;
-    const std::vector<WXCoreFlexLine*> &lines = (flexLine == nullptr? mFlexLines: std::vector<WXCoreFlexLine*>{flexLine});
-
-    for (WXCoreFlexLine *flexLine : lines) {
-      float spaceBetweenItem = 0.f;
-      layoutFlexlineVertical(height, flexLine, childTop, childBottom, spaceBetweenItem);
-      spaceBetweenItem = std::max(spaceBetweenItem, 0.f);
-      if(absoulteItem == nullptr) {
-        for (Index j = 0; j < flexLine->mItemCount; j++) {
-          WXCoreLayoutNode *child = getChildAt(kNonBFC, currentViewIndex);
-          if (child == nullptr) {
-            continue;
-          }
-          layoutSingleChildVertical(isRtl, fromBottomToTop, false,
-                                    childLeft, childRight, flexLine,
-                                    child, childTop, childBottom);
-          childTop += child->mLayoutResult->mLayoutSize.height + spaceBetweenItem + child->getMarginBottom();
-          childBottom -= child->mLayoutResult->mLayoutSize.height + spaceBetweenItem + child->getMarginTop();
-          currentViewIndex++;
-        }
-        childLeft += flexLine->mCrossSize;
-        childRight -= flexLine->mCrossSize;
-      }
-      else{
-        layoutSingleChildVertical(isRtl, fromBottomToTop, true,
-                                  childLeft, childRight, flexLine,
-                                  absoulteItem, childTop, childBottom);
-      }
-    }
-  }
-
-  void WXCoreLayoutNode::layoutFlexlineVertical(const float height,
-                            const WXCoreFlexLine *const flexLine,
-                            float &childTop,
-                            float &childBottom,
-                            float &spaceBetweenItem) const {
-    Index visibleCount, visibleItem;
-    float denominator;
-    switch (mCssStyle->mJustifyContent) {
-      case kJustifyFlexEnd:
-        childTop = height - flexLine->mMainSize - getPaddingBottom() - getBorderWidthBottom();
-        childBottom = height - getPaddingTop() - getBorderWidthTop();
-        break;
-      case kJustifyCenter:
-        childTop = (height - flexLine->mMainSize - mCssStyle->sumPaddingBorderOfEdge(kBottom)
-            + mCssStyle->sumPaddingBorderOfEdge(kTop)) / 2;
-        childBottom = childTop + flexLine->mMainSize;
-        break;
-      case kJustifySpaceAround:
-        visibleCount = flexLine->mItemCount;
-        if (visibleCount != 0) {
-          spaceBetweenItem = (height - flexLine->mMainSize - sumPaddingBorderAlongAxis(this, false))
-              / visibleCount;
-        }
-        childTop = getPaddingTop() + getBorderWidthTop() + spaceBetweenItem / 2;
-        childBottom = height - getPaddingBottom() - getBorderWidthBottom() - spaceBetweenItem / 2;
-        break;
-      case kJustifySpaceBetween:
-        childTop = getPaddingTop() + getBorderWidthTop();
-        visibleItem = flexLine->mItemCount;
-        denominator = visibleItem != 1 ? visibleItem - 1 : 1.f;
-        spaceBetweenItem =
-            (height - flexLine->mMainSize - sumPaddingBorderAlongAxis(this, false)) / denominator;
-        childBottom = height - getPaddingBottom() - getBorderWidthBottom();
-        break;
-      case kJustifyFlexStart:
-      default:
-        childTop = getPaddingTop() + getBorderWidthTop();
-        childBottom = height - getPaddingBottom() - getBorderWidthBottom();
-        break;
-    }
-  }
-
-  void WXCoreLayoutNode::layoutSingleChildVertical(const bool isRtl, const bool fromBottomToTop,
-                                                   const bool absoluteFlexItem,
-                                                   const float childLeft, const float childRight,
-                                                   WXCoreFlexLine *const flexLine,
-                                                   WXCoreLayoutNode *const child,
-                                                   float &childTop, float &childBottom) {
-    childTop += child->getMarginTop();
-    childBottom -= child->getMarginBottom();
-    if (isRtl) {
-      if (fromBottomToTop) {
-        layoutSingleChildVertical(child, flexLine, true,
-                                  mCssStyle->mAlignItems,
-                                  childRight - child->mLayoutResult->mLayoutSize.width,
-                                  childBottom - child->mLayoutResult->mLayoutSize.height,
-                                  childRight, childBottom, absoluteFlexItem);
-      } else {
-        layoutSingleChildVertical(child, flexLine, true, mCssStyle->mAlignItems,
-                                  childRight - child->mLayoutResult->mLayoutSize.width, childTop,
-                                  childRight, childTop + child->mLayoutResult->mLayoutSize.height,
-                                  absoluteFlexItem);
-      }
-    } else {
-      if (fromBottomToTop) {
-        layoutSingleChildVertical(child, flexLine, false, mCssStyle->mAlignItems,
-                                  childLeft, childBottom - child->mLayoutResult->mLayoutSize.height,
-                                  childLeft + child->mLayoutResult->mLayoutSize.width, childBottom,
-                                  absoluteFlexItem);
-      } else {
-        layoutSingleChildVertical(child, flexLine, false, mCssStyle->mAlignItems,
-                                  childLeft, childTop,
-                                  childLeft + child->mLayoutResult->mLayoutSize.width,
-                                  childTop + child->mLayoutResult->mLayoutSize.height,
-                                  absoluteFlexItem);
-      }
-    }
-  }
-
-  /**
-   * Place a single View when the layout direction is vertical ({@link #mFlexDirection} is
-   * either {@link WXCoreFlexDirection #WXCore_Flex_Direction_Column} or
-   * {@link WXCoreFlexDirection #WXCore_Flex_Direction_Column_Reverse}).
-   *
-   * @param node       the View to be placed
-   * @param flexLine   the {@link FlexLine} where the View belongs to
-   * @param isRtl      {@code true} if the layout direction is mStyleRight to mStyleLeft, {@code false}
-   *                   otherwise
-   * @param alignItems the align items attribute of this BasicLayoutNode
-   * @param left       the mStyleLeft position of the flex line where the View belongs to. The actual
-   *                   View's mStyleLeft position is shifted depending on the isRtl and alignItems
-   *                   attributes
-   * @param top        the mStyleTop position of the View, which the View's margin is already taken
-   *                   into account
-   * @param right      the mStyleRight position of the flex line where the View belongs to. The actual
-   *                   View's mStyleRight position is shifted depending on the isRtl and alignItems
-   *                   attributes
-   * @param bottom     the mStyleBottom position of the View, which the View's margin is already taken
-   *                   into account
-   */
-  void WXCoreLayoutNode::layoutSingleChildVertical(WXCoreLayoutNode* const node, WXCoreFlexLine* const flexLine, const bool isRtl,
-                                                   WXCoreAlignItems alignItems, const float left, const float top, const float right,
-                                                   const float bottom, const bool absoluteFlexItem) {
-    if (node->mCssStyle->mAlignSelf != kAlignSelfAuto) {
-      // Expecting the values for alignItems and alignSelf match except for ALIGN_SELF_AUTO.
-      // Assigning the alignSelf value as alignItems should work.
-      alignItems = static_cast<WXCoreAlignItems>(node->mCssStyle->mAlignSelf);
-    }
-
-    float crossSize = flexLine->mCrossSize;
-
-    switch (alignItems) {
-      case kAlignItemsFlexStart:
-      case kAlignItemsStretch:
-        if (!isRtl) {
-          node->layout(left + node->getMarginLeft(), top, right + node->getMarginLeft(), bottom, absoluteFlexItem);
-        } else {
-          node->layout(left - node->getMarginRight(), top, right - node->getMarginRight(), bottom, absoluteFlexItem);
-        }
-        break;
-      case kAlignItemsFlexEnd:
-        if (!isRtl) {
-          node->layout(left + crossSize - node->mLayoutResult->mLayoutSize.width - node->getMarginRight(),
-                       top, right + crossSize - node->mLayoutResult->mLayoutSize.width - node->getMarginRight(),
-                       bottom, absoluteFlexItem);
-        } else {
-          // If the flexWrap == FLEX_WRAP_WRAP_REVERSE, the direction of the
-          // flexEnd is flipped (from mStyleLeft to mStyleRight).
-          node->layout(left - crossSize + node->mLayoutResult->mLayoutSize.width + node->getMarginLeft(), top,
-                       right - crossSize + node->mLayoutResult->mLayoutSize.width + node->getMarginLeft(),
-                       bottom, absoluteFlexItem);
-        }
-        break;
-      case kAlignItemsCenter:
-        float leftFromCrossAxis = (crossSize - node->mLayoutResult->mLayoutSize.width
-                                   + node->getMarginLeft()
-                                   - node->getMarginRight()) / 2.f;
-        if (!isRtl) {
-          node->layout(left + leftFromCrossAxis, top, right + leftFromCrossAxis, bottom, absoluteFlexItem);
-        } else {
-          node->layout(left - leftFromCrossAxis, top, right - leftFromCrossAxis, bottom, absoluteFlexItem);
-        }
-        break;
-    }
-  }
-    void WXCoreLayoutNode::determineChildLayoutDirection(const WXCoreDirection direction) {
-        for (Index i = 0; i < getChildCount(kBFC); ++i) {
-            WXCoreLayoutNode *child = getChildAt(kBFC, i);
-            if (child == nullptr) {
-                continue;
-            }
-            if (child->mLayoutResult == nullptr || child->mCssStyle == nullptr) {
-                continue;
-            }
-            // determin direction
-            if (child->mLayoutResult->mLayoutDirection == kDirectionInherit) {
-                if(child->mCssStyle->mDirection == kDirectionInherit) {
-                    // default direction in css is inherit, inherit direction from parent node
-                    child->mLayoutResult->mLayoutDirection = direction;
-                } else {
-                    // specific direction in current Node's style
-                    child->mLayoutResult->mLayoutDirection = child->mCssStyle->mDirection;
-                }
-            }
-        }
-    }
-    
-    WXCoreDirection WXCoreLayoutNode::getLayoutDirectionFromPathNode() {
-        if (getLayoutDirection() != kDirectionInherit)
-            return getLayoutDirection();
-        if (getDirection() != kDirectionInherit) {
-            mLayoutResult->mLayoutDirection = getDirection();
-            return getLayoutDirection();
-        } else if (nullptr != mParent) {
-            mLayoutResult->mLayoutDirection = mParent->getLayoutDirectionFromPathNode();
-            return getLayoutDirection();
-        }
-        return WEEXCORE_CSS_DEFAULT_DIRECTION;
-    }
-}
-
-
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/layout/layout.h b/ios/Pods/WeexSDK/weex_core/Source/core/layout/layout.h
deleted file mode 100644
index d552063..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/layout/layout.h
+++ /dev/null
@@ -1,1228 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifdef __cplusplus
-
-#ifndef WEEXCORE_FLEXLAYOUT_WXCORELAYOUTNODE_H
-#define WEEXCORE_FLEXLAYOUT_WXCORELAYOUTNODE_H
-
-#include <string.h>
-#include <math.h>
-#include <vector>
-#include <iostream>
-#include <string>
-#include <algorithm>
-#include "style.h"
-#include "flex_enum.h"
-
-namespace WeexCore {
-
-  class WXCoreLayoutNode;
-
-  class WXCoreFlexLine;
-
-  enum FormattingContext {
-    kBFC,
-    kNonBFC,
-  } ;
-
-  enum MeasureMode {
-    kUnspecified = 0,
-    kExactly,
-  } ;
-
-  struct WXCoreSize {
-   private:
-    float hypotheticalWidth;
-    float hypotheticalHeight;
-   public:
-    friend class WXCoreLayoutNode;
-    float width;
-    float height;
-
-    WXCoreSize() : hypotheticalWidth(NAN),
-                   hypotheticalHeight(NAN),
-                   width(0), height(0) {}
-
-    inline void reset() {
-      hypotheticalWidth = NAN ;
-      hypotheticalHeight = NAN;
-      width = 0;
-      height = 0;
-    }
-
-    inline bool isNAN() {
-      return isnan(width) || isnan(height);
-    }
-  };
-
-  /**
-   * layout-result:layout-height、layout-width、position(left、right、top、bottom)、direction
-   */
-  struct WXCorelayoutResult {
-    WXCoreDirection mLayoutDirection;
-    WXCoreSize mLayoutSize;
-    WXCorePosition mLayoutPosition;
-
-    inline bool isNAN() {
-      return mLayoutSize.isNAN() || mLayoutPosition.isNAN();
-    }
-
-    inline void reset() {
-        mLayoutSize.reset();
-        mLayoutPosition.reset();
-        mLayoutDirection = kDirectionInherit;
-    }
-  };
-
-  typedef WXCoreSize(*WXCoreMeasureFunc)(WXCoreLayoutNode *node, float width,
-                                         MeasureMode widthMeasureMode,
-                                         float height, MeasureMode heightMeasureMode);
-
-  using Index = std::vector<WXCoreLayoutNode *>::size_type;
-
-  /**
-   * flie line
-   */
-  class WXCoreFlexLine {
-  public:
-    float mMainSize;
-
-    float mCrossSize;
-
-    Index mItemCount;
-
-    float mTotalFlexGrow;
-
-    float mTotalFlexibleSize;
-
-    /**
-     * Store the indices of the children views whose mAlignSelf property is stretch.
-     * The stored indices are the absolute indices including all children in the Flexbox,
-     * not the relative indices in this flex line.
-     */
-    std::vector<Index> mIndicesAlignSelfStretch;
-
-    WXCoreFlexLine() : mMainSize(0),
-                       mCrossSize(0),
-                       mItemCount(0),
-                       mTotalFlexGrow(0),
-                       mTotalFlexibleSize(0) {
-    }
-
-    ~WXCoreFlexLine() {
-      mMainSize = 0;
-      mCrossSize = 0;
-      mItemCount = 0;
-      mTotalFlexGrow = 0;
-      mTotalFlexibleSize = 0;
-      mIndicesAlignSelfStretch.clear();
-    }
-  };
-
-  /**
-   * Layout node
-   */
-  class WXCoreLayoutNode {
-
-  public:
-      WXCoreLayoutNode() :
-              mParent(nullptr),
-              dirty(true),
-              widthDirty{false},
-              heightDirty{false},
-              mHasNewLayout(true),
-              mIsDestroy(false),
-              measureFunc(nullptr) {
-        mCssStyle = new WXCoreCSSStyle();
-        mLayoutResult = new WXCorelayoutResult();
-      }
-
-      virtual ~WXCoreLayoutNode() {
-        mIsDestroy = true;
-        mHasNewLayout = true;
-        dirty = true;
-        measureFunc = nullptr;
-        mParent = nullptr;
-        mChildList.clear();
-        BFCs.clear();
-        NonBFCs.clear();
-        mChildrenFrozen.clear();
-
-        for (WXCoreFlexLine *flexLine : mFlexLines) {
-          if (flexLine != nullptr) {
-            delete flexLine;
-            flexLine = nullptr;
-          }
-        }
-        mFlexLines.clear();
-
-        if (mCssStyle != nullptr) {
-          delete mCssStyle;
-          mCssStyle = nullptr;
-        }
-
-        if (mLayoutResult != nullptr) {
-          delete mLayoutResult;
-          mLayoutResult = nullptr;
-        }
-      }
-
-  private:
-
-    /**
-     * Holds the 'frozen' state of children during measure. If a view is frozen it will no longer
-     * expand regardless of mFlexGrow. Items are indexed by the child's
-     * reordered index.
-     */
-    std::vector<bool> mChildrenFrozen;
-
-    std::vector<WXCoreFlexLine *> mFlexLines;
-
-    std::vector<WXCoreLayoutNode *> mChildList;
-
-    std::vector<WXCoreLayoutNode *> BFCs;
-
-    std::vector<WXCoreLayoutNode *> NonBFCs;
-
-    WXCoreLayoutNode *mParent = nullptr;
-
-    WXCoreCSSStyle *mCssStyle = nullptr;
-
-    MeasureMode widthMeasureMode = kUnspecified;
-
-    MeasureMode heightMeasureMode = kUnspecified;
-
-    WXCorelayoutResult *mLayoutResult = nullptr;
-
-    WXCorePosition *absoultePositon = nullptr;
-
-    bool mHasNewLayout;
-
-    bool dirty, widthDirty, heightDirty;
-
-    bool mIsDestroy = true;
-      
-    bool mNeedsPlatformDependentLayout = false;
-
-    WXCoreMeasureFunc measureFunc = nullptr;
-
-    void *context = nullptr;
-
-    /** ================================ Cache:Last calculate result =================================== **/
-
-  public:
-
-
-    /** ================================ Engine Entry Function =================================== **/
-
-    void calculateLayout(const std::pair<float,float>&);
-
-    /** ================================ measureFunc =================================== **/
-
-    inline void setMeasureFunc(WXCoreMeasureFunc measure) {
-      measureFunc = measure;
-      markDirty();
-    }
-
-    inline bool haveMeasureFunc() const {
-      return nullptr != measureFunc;
-    }
-
-    inline WXCoreMeasureFunc getMeasureFunc() const {
-      return measureFunc;
-    }
-
-      /** ================================ context =================================== **/
-
-
-    inline void *getContext() const {
-      return context;
-    }
-
-    inline void setContext(void * const context) {
-      this->context = context;
-    }
-      
-    inline void copyStyle(WXCoreLayoutNode *srcNode) {
-      if (srcNode != nullptr && memcmp(mCssStyle, srcNode->mCssStyle, sizeof(WXCoreCSSStyle)) != 0) {
-        memcpy(mCssStyle, srcNode->mCssStyle, sizeof(WXCoreCSSStyle));
-        markDirty();
-      }
-    }
-      
-    void copyFrom(WXCoreLayoutNode* srcNode){
-        if (srcNode == nullptr) return;
-        
-        memcpy(mCssStyle, srcNode->mCssStyle, sizeof(WXCoreCSSStyle));
-    }
-
-    inline void copyMeasureFunc(WXCoreLayoutNode *srcNode) {
-      if (srcNode != nullptr && memcmp(&measureFunc, &srcNode->measureFunc, sizeof(WXCoreMeasureFunc)) != 0) {
-        memcpy(&measureFunc, &srcNode->measureFunc, sizeof(WXCoreMeasureFunc));
-        markDirty();
-      }
-    }
-      
-      /** ================================ custom =================================== **/
-    inline bool getNeedsPlatformDependentLayout() const {
-      return mNeedsPlatformDependentLayout;
-    }
-      
-    inline void setNeedsPlatformDependentLayout(bool v) {
-      this->mNeedsPlatformDependentLayout = v;
-    }
-      
-  private:
-
-    /** ================================ measure =================================== **/
-
-    inline void reset() {
-      if (isDirty()) {
-        mLayoutResult->reset();
-        for (WXCoreFlexLine *flexLine : mFlexLines) {
-          if (flexLine != nullptr) {
-            delete flexLine;
-            flexLine = nullptr;
-          }
-        }
-        mFlexLines.clear();
-
-        mChildrenFrozen.assign(getChildCount(kNonBFC), false);
-      }
-      widthMeasureMode = isnan(mCssStyle->mStyleWidth) ? kUnspecified : kExactly;
-      heightMeasureMode = isnan(mCssStyle->mStyleHeight) ? kUnspecified : kExactly;
-    }
-
-    inline void setLayoutWidth(const float width) {
-      if (mLayoutResult->mLayoutSize.width != width &&
-          (!isnan(width) || !isnan(mLayoutResult->mLayoutSize.width))) {
-        mLayoutResult->mLayoutSize.width = width;
-        widthDirty = true;
-        markDirty(false);
-      }
-    }
-
-    inline void setLayoutHeight(const float height) {
-      if (mLayoutResult->mLayoutSize.height != height &&
-          (!isnan(height) || !isnan(mLayoutResult->mLayoutSize.height))) {
-        mLayoutResult->mLayoutSize.height = height;
-        heightDirty = true;
-        markDirty(false);
-      }
-    }
-
-    inline void setWidthMeasureMode(const MeasureMode measureMode) {
-      if (widthMeasureMode != measureMode) {
-        widthMeasureMode = measureMode;
-        if (getChildCount(kNonBFC) > 0) {
-          widthDirty = true;
-        }
-      }
-    }
-
-    inline void setHeightMeasureMode(const MeasureMode measureMode) {
-      if (heightMeasureMode != measureMode) {
-        heightMeasureMode = measureMode;
-        if (getChildCount(kNonBFC) > 0) {
-          heightDirty = true;
-        }
-      }
-    }
-
-    inline float firstLineCrossSize() const {
-      float sum = sumPaddingBorderAlongAxis(this, !isMainAxisHorizontal(this));
-      if (!mFlexLines.empty()) {
-        sum += mFlexLines[0]->mCrossSize;
-      }
-      return sum;
-    }
-
-    inline float getSumOfCrossSize() const {
-      float sum = sumPaddingBorderAlongAxis(this, !isMainAxisHorizontal(this));
-      for (WXCoreFlexLine *flexLine: mFlexLines) {
-        sum += flexLine->mCrossSize;
-      }
-      return sum;
-    }
-
-    inline bool isMainAxisHorizontal(const WXCoreLayoutNode* const node) const {
-      return node->mCssStyle->mFlexDirection == kFlexDirectionRow ||
-             node->mCssStyle->mFlexDirection == kFlexDirectionRowReverse;
-    }
-
-    inline bool isCrossExactly() const {
-      return isMainAxisHorizontal(this) ? heightMeasureMode == kExactly
-                                        : widthMeasureMode == kExactly;
-    }
-
-    inline float sumPaddingBorderAlongAxis(const WXCoreLayoutNode* const node, bool horizontal) const {
-      float paddingBorderAlongAxis;
-      if (horizontal) {
-        paddingBorderAlongAxis =
-            node->mCssStyle->mPadding.getPadding(kPaddingLeft) +
-            node->mCssStyle->mPadding.getPadding(kPaddingRight) +
-            node->mCssStyle->mBorderWidth.getBorderWidth(kBorderWidthLeft) +
-            node->mCssStyle->mBorderWidth.getBorderWidth(kBorderWidthRight);
-      } else {
-        paddingBorderAlongAxis =
-            node->mCssStyle->mPadding.getPadding(kPaddingTop) +
-            node->mCssStyle->mPadding.getPadding(kPaddingBottom) +
-            node->mCssStyle->mBorderWidth.getBorderWidth(kBorderWidthTop) +
-            node->mCssStyle->mBorderWidth.getBorderWidth(kBorderWidthBottom);
-      }
-      return paddingBorderAlongAxis;
-    }
-
-    inline bool isWrapRequired(const float &width, const float &height,
-                               const float &currentLength, const float &childLength) const {
-      float freeMainSize = CalculateFreeSpaceAlongMainAxis(width, height, currentLength);
-      return !isSingleFlexLine(freeMainSize) && freeMainSize < childLength;
-    }
-
-    //If width/height is NAN, ret is NAN, which property we use on purpose.
-    virtual float CalculateFreeSpaceAlongMainAxis(const float &width, const float &height,
-                                                  const float &currentLength) const{
-      float ret;
-      if(isMainAxisHorizontal(this)){
-        ret = width - sumPaddingBorderAlongAxis(this, true) - currentLength;
-      }
-      else{
-        ret = height - sumPaddingBorderAlongAxis(this, false) - currentLength;
-      }
-      return ret;
-    }
-
-    inline bool isSingleFlexLine(const float &mainSize) const {
-      return mCssStyle->mFlexWrap == kNoWrap || isnan(mainSize);
-    }
-
-    inline void sumFlexGrow(const WXCoreLayoutNode* const child, WXCoreFlexLine* const flexLine, Index i){
-      if (child->mCssStyle->mFlexGrow > 0) {
-        flexLine->mTotalFlexGrow += child->mCssStyle->mFlexGrow;
-        mChildrenFrozen[i] = false;
-        if (isMainAxisHorizontal(this)) {
-          if (!isnan(child->mLayoutResult->mLayoutSize.hypotheticalWidth)) {
-            flexLine->mTotalFlexibleSize += child->mLayoutResult->mLayoutSize.hypotheticalWidth;
-          }
-        } else {
-          if (!isnan(child->mLayoutResult->mLayoutSize.hypotheticalHeight)) {
-            flexLine->mTotalFlexibleSize += child->mLayoutResult->mLayoutSize.hypotheticalHeight;
-          }
-        }
-      } else {
-        mChildrenFrozen[i] = true;
-      }
-    }
-
-    inline void setMeasuredDimensionForFlex(
-        const float width, const MeasureMode widthMeasureMode,
-        const float height, const MeasureMode heightMeasureMode){
-      float actualWidth, actualHeight;
-      if (isMainAxisHorizontal(this)) {
-        actualWidth = widthMeasureMode == kExactly ? width : getLargestMainSize();
-        actualHeight = heightMeasureMode == kExactly ? height : getSumOfCrossSize();
-      } else {
-        actualHeight = heightMeasureMode == kExactly ? height : getLargestMainSize();
-        actualWidth = widthMeasureMode == kExactly ? width : firstLineCrossSize();
-      }
-      setMeasuredDimension(actualWidth, actualHeight);
-    }
-
-    inline float calcItemSizeAlongAxis(const WXCoreLayoutNode* const node, const bool horizontal, const bool useHypotheticalSize = false) const {
-      float ret;
-      if (horizontal) {
-        ret = node->mCssStyle->mMargin.getMargin(kMarginLeft) +
-            node->mCssStyle->mMargin.getMargin(kMarginRight);
-        ret += useHypotheticalSize ? node->mLayoutResult->mLayoutSize.hypotheticalWidth
-                                   : node->mLayoutResult->mLayoutSize.width;
-      } else {
-        ret = node->mCssStyle->mMargin.getMargin(kMarginTop) +
-            node->mCssStyle->mMargin.getMargin(kMarginBottom);
-        ret += useHypotheticalSize ? node->mLayoutResult->mLayoutSize.hypotheticalHeight
-                                   : node->mLayoutResult->mLayoutSize.height;
-      }
-      return ret;
-    }
-
-    inline void limitMainSizeForFlexGrow(WXCoreFlexLine* const flexLine, const Index childIndex,
-                                  const float flexGrow) {
-      mChildrenFrozen[childIndex] = true;
-      flexLine->mTotalFlexGrow -= flexGrow;
-    }
-
-    inline void setMeasuredDimension(const float width, const float height) {
-      mLayoutResult->mLayoutSize.width = width;
-      mLayoutResult->mLayoutSize.height = height;
-    }
-
-    inline std::pair<bool, float> limitChildMainSize(WXCoreFlexLine* const flexLine, const WXCoreLayoutNode* const child,
-                                                                       float childSizeAlongMainAxis, const Index childIndex){
-      bool needsReexpand = false;
-      if (isMainAxisHorizontal(this)) {
-        if (!isnan(child->mCssStyle->mMaxWidth) &&
-            childSizeAlongMainAxis > child->mCssStyle->mMaxWidth) {
-          needsReexpand = true;
-          childSizeAlongMainAxis = child->mCssStyle->mMaxWidth;
-        } else if (!isnan(child->mCssStyle->mMinWidth) &&
-            childSizeAlongMainAxis < child->mCssStyle->mMinWidth) {
-          needsReexpand = true;
-          childSizeAlongMainAxis = child->mCssStyle->mMinWidth;
-        }
-      } else {
-        if (!isnan(child->mCssStyle->mMaxHeight) &&
-            childSizeAlongMainAxis > child->mCssStyle->mMaxHeight) {
-          needsReexpand = true;
-          childSizeAlongMainAxis = child->mCssStyle->mMaxHeight;
-        } else if (!isnan(child->mCssStyle->mMinHeight) &&
-            childSizeAlongMainAxis < child->mCssStyle->mMinHeight) {
-          needsReexpand = true;
-          childSizeAlongMainAxis = child->mCssStyle->mMinHeight;
-        }
-      }
-      limitMainSizeForFlexGrow(flexLine, childIndex, child->mCssStyle->mFlexGrow);
-      return std::make_pair(needsReexpand, childSizeAlongMainAxis);
-    }
-
-    void updateLeftRightForAbsolute(float &left, float &right,
-                                    const WXCorePadding &parentPadding,
-                                    const WXCoreBorderWidth &parentBorder,
-                                    const WXCoreSize &parentSize) const {
-      if (isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft))) {
-        if (isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeRight))) {
-          ;
-        } else {
-          right += parentSize.width -
-              (parentBorder.getBorderWidth(kBorderWidthRight) +
-                  mCssStyle->mStylePosition.getPosition(kPositionEdgeRight)
-                  + mLayoutResult->mLayoutSize.width);
-          left += parentSize.width -
-              (parentBorder.getBorderWidth(kBorderWidthRight) +
-                  mCssStyle->mStylePosition.getPosition(kPositionEdgeRight)
-                  + mLayoutResult->mLayoutSize.width);
-        }
-      } else {
-        left += parentBorder.getBorderWidth(kBorderWidthLeft) +
-            mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft);
-        right += parentBorder.getBorderWidth(kBorderWidthLeft) +
-            mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft);
-      }
-    }
-
-    void updateTopBottomForAbsolute(float &top, float &bottom,
-                                    const WXCorePadding &parentPadding,
-                                    const WXCoreBorderWidth &parentBorder,
-                                    const WXCoreSize &parentSize) const {
-      if (isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeTop))) {
-        if (isnan(mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom))) {
-          ;
-        } else {
-          top += parentSize.height -
-              (parentBorder.getBorderWidth(kBorderWidthBottom) +
-                  mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom)
-                  + mLayoutResult->mLayoutSize.height);
-          bottom += parentSize.height -
-              (parentBorder.getBorderWidth(kBorderWidthBottom) +
-                  mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom)
-                  + mLayoutResult->mLayoutSize.height);
-        }
-      } else {
-        top += parentBorder.getBorderWidth(kBorderWidthTop) +
-            mCssStyle->mStylePosition.getPosition(kPositionEdgeTop);
-        bottom += parentBorder.getBorderWidth(kBorderWidthTop) +
-            mCssStyle->mStylePosition.getPosition(kPositionEdgeTop);
-      }
-    }
-
-    /** ================================ other =================================== **/
-
-    inline void clearDirty() {
-      dirty = false;
-      widthDirty = false;
-      heightDirty = false;
-    }
-
-    void
-    measure(float, float, bool);
-
-    void hypotheticalMeasure(float, float, bool = false);
-
-    void measureLeafNode(float, float, bool, bool);
-
-    void measureInternalNode(float, float, bool, bool);
-
-    void updateCurrentFlexline(Index, WXCoreFlexLine *, Index, const WXCoreLayoutNode *, bool);
-
-    void measureChild(WXCoreLayoutNode* , float, float, float, bool, bool);
-
-    void adjustChildSize(WXCoreLayoutNode *, float);
-
-    void adjustChildSize(const WXCoreLayoutNode *child,
-                         const float currentMainSize,
-                         const float parentWidth,
-                         const float parentHeight,
-                         float &childWidth,
-                         float &childHeight) const;
-
-    void stretchViewCrossSize();
-
-    void stretchViewCrossSize(WXCoreLayoutNode *, float);
-
-    Index expandItemsInFlexLine(WXCoreFlexLine *, float, Index);
-
-    void checkSizeConstraints(WXCoreLayoutNode *, bool);
-
-    void
-    determineMainSize(float width, float height);
-
-    void
-    determineCrossSize(float, float, bool);
-
-    void
-    determineCrossSize(float, float, WXCoreFlexLine *);
-
-    void setFrame(float, float, float, float);
-
-    void setFrame(WXCorePosition*,float, float, float, float);
-
-    /** ================================ layout =================================== **/
-
-    void layout(float left, float top, float right, float bottom, bool, const std::pair<float,float>* = nullptr);
-
-    void calcRelativeOffset(float &left, float &top, float &right, float &bottom) const ;
-
-    void calcAbsoluteOffset(float &left, float &top, float &right, float &bottom, const std::pair<float,float>* = nullptr);
-
-    void positionAbsoluteFlexItem(float &left, float &top, float &right, float &bottom);
-
-    void layoutHorizontal(bool isRtl, float left, float top, float right, float bottom,
-                          WXCoreLayoutNode*, WXCoreFlexLine *const flexLine);
-
-      void layoutFlexlineHorizontal(const bool isRTL,
-                                    const float width,
-                                    const WXCoreFlexLine *const flexLine,
-                                    float &childLeft,
-                                    float &childRight,
-                                    float &spaceBetweenItem) const;
-      
-    void layoutFlexlineHorizontal(const float width,
-                                         const WXCoreFlexLine *const flexLine,
-                                         float &childLeft,
-                                         float &childRight,
-                                         float &spaceBetweenItem) const;
-
-    void layoutSingleChildHorizontal(WXCoreLayoutNode *node, WXCoreFlexLine *flexLine,
-                                     WXCoreFlexWrap flexWrap, WXCoreAlignItems alignItems,
-                                     float, float, float, float, bool);
-
-    void layoutSingleChildHorizontal(const bool isRtl,
-                                    const bool,
-                                    float childBottom, float childTop,
-                                    WXCoreFlexLine *const flexLine,
-                                    WXCoreLayoutNode *const child,
-                                    float&, float&);
-
-    void layoutVertical(bool isRtl, bool fromBottomToTop, float left, float top, float right, float bottom,
-                        WXCoreLayoutNode*, WXCoreFlexLine *const flexLine);
-
-    void layoutFlexlineVertical(const float height,
-                                const WXCoreFlexLine *const flexLine,
-                                float &childTop,
-                                float &childBottom,
-                                float &spaceBetweenItem) const;
-    void layoutSingleChildVertical(WXCoreLayoutNode *node, WXCoreFlexLine *flexLine,
-                                   bool isRtl, WXCoreAlignItems alignItems,
-                                   float, float, float, float, bool);
-
-    void layoutSingleChildVertical(const bool isRtl, const bool fromBottomToTop,
-                                   const bool absoluteFlexItem,
-                                   const float childLeft, const float childRight,
-                                   WXCoreFlexLine *const flexLine,
-                                   WXCoreLayoutNode *const child,
-                                   float& ,float&);
-
-    void updateFlexLineForAbsoluteItem(WXCoreLayoutNode *const absoluteFlexItem, WXCoreFlexLine *const flexLine);
-
-    void initFormatingContext(std::vector<WXCoreLayoutNode *> &BFCs);
-
-    std::pair<bool,float> calculateBFCWidth(float, float);
-
-    std::pair<bool,float> calculateBFCHeight(float, float);
-
-    std::tuple<bool, float, float> calculateBFCDimension(const std::pair<float,float>&);
-
-    virtual void OnLayoutBefore() {
-
-    }
-
-    virtual void OnLayoutAfter(float width, float height) {
-
-    }
-
-
-  public:
-    virtual void onLayout(float left, float top, float right, float bottom, WXCoreLayoutNode* = nullptr, WXCoreFlexLine *const flexLine = nullptr);
-    /** ================================ tree =================================== **/
-
-    inline Index getChildCount(FormattingContext formattingContext) const {
-      switch (formattingContext) {
-        case kNonBFC:
-          return NonBFCs.size();
-        case kBFC:
-          return BFCs.size();
-        default:
-          return mChildList.size();
-      }
-    }
-
-    inline Index getChildCount() const {
-      return mChildList.size();
-    }
-
-    inline std::vector<WXCoreLayoutNode *>::const_iterator ChildListIterBegin() {
-      return mChildList.cbegin();
-    }
-
-    inline std::vector<WXCoreLayoutNode *>::const_iterator ChildListIterEnd() {
-      return mChildList.cend();
-    }
-
-    inline bool hasChild(const WXCoreLayoutNode* const child){
-       if(std::find(mChildList.begin(), mChildList.end(), child) != mChildList.end()){
-         return true;
-       }else{
-         return false;
-       }
-    }
-
-    inline void removeChild(const WXCoreLayoutNode* const child) {
-      for (int index = 0; index < mChildList.size(); index++) {
-        if (child == mChildList[index]) {
-          mChildList.erase(mChildList.begin() + index);
-          break;
-        }
-      }
-      
-      // also remove from BFC list, for determineChildLayoutDirection may encounter a wild pointer
-      for (int index = 0; index < BFCs.size(); index++) {
-          if (child == BFCs[index]) {
-              BFCs.erase(BFCs.begin() + index);
-              break;
-          }
-      }
-      
-      markDirty();
-    }
-
-    inline void addChildAt(WXCoreLayoutNode* const child, Index index) {
-      mChildList.insert(mChildList.begin() + index, child);
-      child->mParent = this;
-      markDirty();
-    }
-
-    inline WXCoreLayoutNode *getChildAt(const FormattingContext formattingContext, const Index index) const {
-      switch (formattingContext) {
-        case kNonBFC:
-          return NonBFCs[index];
-        case kBFC:
-          return BFCs[index];
-        default:
-          return mChildList[index];
-      }
-    }
-
-    inline WXCoreLayoutNode *getChildAt(const Index index) const {
-      return mChildList[index];
-    }
-
-    inline WXCoreLayoutNode *getParent() const {
-      return mParent;
-    }
-
-    inline void setParent(WXCoreLayoutNode * const parent, WXCoreLayoutNode * const child) const {
-       child->mParent = parent;
-    }
-
-    inline bool isBFC(WXCoreLayoutNode* const node) const {
-      return node->mCssStyle->mPositionType == kAbsolute || node->mCssStyle->mPositionType == kFixed;
-    }
-
-    /** ================================ margin =================================== **/
-
-    inline float getMarginTop() const {
-      return mCssStyle->mMargin.getMargin(kMarginTop);
-    }
-
-    inline float getMarginBottom() const {
-      return mCssStyle->mMargin.getMargin(kMarginBottom);
-    }
-
-    inline float getMarginLeft() const  {
-      return mCssStyle->mMargin.getMargin(kMarginLeft);
-    }
-
-    inline float getMarginRight() const {
-      return mCssStyle->mMargin.getMargin(kMarginRight);
-    }
-
-    inline void setMargin(const WXCoreMarginEdge &edge, const float margin) {
-      if (mCssStyle->mMargin.setMargin(edge, margin)) {
-        markDirty();
-      }
-    }
-
-    inline const WXCoreMargin &GetMargins() const {
-      return mCssStyle->mMargin;
-    }
-
-    /** ================================ padding =================================== **/
-
-    inline float getPaddingLeft() const {
-      return mCssStyle->mPadding.getPadding(kPaddingLeft);
-    }
-
-    inline float getPaddingRight() const {
-      return mCssStyle->mPadding.getPadding(kPaddingRight);
-    }
-
-    inline float getPaddingTop() const {
-      return mCssStyle->mPadding.getPadding(kPaddingTop);
-    }
-
-    inline float getPaddingBottom() const {
-      return mCssStyle->mPadding.getPadding(kPaddingBottom);
-    }
-
-    inline void setPadding(const WXCorePaddingEdge edge, const float padding) {
-      if (mCssStyle->mPadding.setPadding(edge, padding)) {
-        markDirty();
-      }
-    }
-
-    inline const WXCorePadding &GetPaddings() const {
-      return mCssStyle->mPadding;
-    }
-
-    /** ================================ border-width =================================== **/
-
-    inline float getBorderWidthLeft() const {
-      return mCssStyle->mBorderWidth.getBorderWidth(kBorderWidthLeft);
-    }
-
-    inline float getBorderWidthRight() const {
-      return mCssStyle->mBorderWidth.getBorderWidth(kBorderWidthRight);
-    }
-
-    inline float getBorderWidthTop() const {
-      return mCssStyle->mBorderWidth.getBorderWidth(kBorderWidthTop);
-    }
-
-    inline float getBorderWidthBottom() const {
-      return mCssStyle->mBorderWidth.getBorderWidth(kBorderWidthBottom);
-    }
-
-    inline void setBorderWidth(const WXCoreBorderWidthEdge edge, const float borderWidth) {
-      if (mCssStyle->mBorderWidth.setBorderWidth(edge, borderWidth)) {
-        markDirty();
-      }
-    }
-
-    inline const WXCoreBorderWidth &GetBorders() const {
-      return mCssStyle->mBorderWidth;
-    }
-
-    /** ================================ position-type =================================== **/
-
-    inline void setStylePositionType(const WXCorePositionType positionType) {
-      if (mCssStyle->mPositionType != positionType) {
-        mCssStyle->mPositionType = positionType;
-        markDirty();
-      }
-    }
-
-    inline WXCorePositionType getStylePositionType() const {
-      return mCssStyle->mPositionType;
-    }
-
-
-    /** ================================ position =================================== **/
-
-    inline float getStylePositionTop() const {
-      return mCssStyle->mStylePosition.getPosition(kPositionEdgeTop);
-    }
-
-    inline float getStylePositionBottom() const {
-      return mCssStyle->mStylePosition.getPosition(kPositionEdgeBottom);
-    }
-
-    inline float getStylePositionLeft() const {
-      return mCssStyle->mStylePosition.getPosition(kPositionEdgeLeft);
-    }
-
-    inline float getStylePositionRight() const {
-      return mCssStyle->mStylePosition.getPosition(kPositionEdgeRight);
-    }
-
-    inline void setStylePosition(const WXCorePositionEdge edge, const float positionRight) {
-      if (mCssStyle->mStylePosition.setPosition(edge, positionRight))
-        markDirty();
-    }
-
-
-    /** ================================ dimension =================================== **/
-
-    inline void setStyleWidthLevel(const DimensionLevel level) const {
-      if (mCssStyle->mStyleWidthLevel != level) {
-        mCssStyle->mStyleWidthLevel = level;
-      }
-    }
-
-    inline void setStyleHeightLevel(const DimensionLevel level) const {
-      if (mCssStyle->mStyleHeightLevel != level) {
-        mCssStyle->mStyleHeightLevel = level;
-      }
-    }
-
-    inline DimensionLevel getStyleHeightLevel() const {
-      return mCssStyle->mStyleHeightLevel;
-    }
-
-    inline DimensionLevel getStyleWidthLevel() const {
-      return mCssStyle->mStyleWidthLevel;
-    }
-
-    inline void setStyleWidth(const float width, const bool updating) {
-      if (mCssStyle->mStyleWidth != width) {
-        mCssStyle->mStyleWidth = width;
-        markDirty();
-        if(updating) {
-          markChildrenDirty(true);
-        }
-      }
-    }
-
-    inline void setStyleWidthToNAN() {
-      if (!isnan(mCssStyle->mStyleWidth)) {
-        mCssStyle->mStyleWidth = NAN;
-        markDirty();
-        markChildrenDirty(true);
-      }
-    }
-
-    inline float getStyleWidth() const {
-      return mCssStyle->mStyleWidth;
-    }
-
-    inline void setStyleHeight(const float height) {
-      if (mCssStyle->mStyleHeight != height) {
-        mCssStyle->mStyleHeight = height;
-        markDirty();
-      }
-    }
-
-    inline float getStyleHeight() const {
-      return mCssStyle->mStyleHeight;
-    }
-
-    inline void setMinWidth(const float minWidth, const bool updating) {
-      if (mCssStyle->mMinWidth != minWidth) {
-        mCssStyle->mMinWidth = minWidth;
-        markDirty();
-        if(updating) {
-          markChildrenDirty(true);
-        }
-      }
-    }
-
-    inline float getMinWidth() const {
-      return mCssStyle->mMinWidth;
-    }
-
-    inline void setMaxWidth(const float maxWidth, const bool updating) {
-      if (mCssStyle->mMaxWidth != maxWidth) {
-        mCssStyle->mMaxWidth = maxWidth;
-        markDirty();
-        if(updating) {
-          markChildrenDirty(true);
-        }
-      }
-    }
-
-    inline float getMaxWidth() const {
-      return mCssStyle->mMaxWidth;
-    }
-
-    inline void setMinHeight(const float minHeight) {
-      if (mCssStyle->mMinHeight != minHeight) {
-        mCssStyle->mMinHeight = minHeight;
-        markDirty();
-      }
-    }
-
-    inline float getMinHeight() const {
-      return mCssStyle->mMinHeight;
-    }
-
-    inline void setMaxHeight(const float maxHeight) {
-      if (mCssStyle->mMaxHeight != maxHeight) {
-        mCssStyle->mMaxHeight = maxHeight;
-        markDirty();
-      }
-    }
-
-    inline float getMaxHeight() const {
-      return mCssStyle->mMaxHeight;
-    }
-
-      inline void setDirection(const WXCoreDirection direction, const bool updating) {
-          if (nullptr == mCssStyle) return;
-          
-          if (mCssStyle->mDirection != direction) {
-              mCssStyle->mDirection = direction;
-              markDirty();
-              if (updating) {
-                  for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-                      (*it)->markInheritableDirty();
-                  }
-              }
-          }
-      }
-
-    inline WXCoreDirection getDirection() const {
-        if (mCssStyle == nullptr) {
-            return WEEXCORE_CSS_DEFAULT_DIRECTION;
-        }
-        return mCssStyle->mDirection;
-    }
-    
-    /** ================================ CSS direction For RTL =================================== **/
-      
-    void determineChildLayoutDirection(const WXCoreDirection direction);
-      
-    WXCoreDirection getLayoutDirectionFromPathNode();
-      
-    /** ================================ flex-style =================================== **/
-
-    inline void setFlexDirection(const WXCoreFlexDirection flexDirection, const bool updating) {
-      if (mCssStyle->mFlexDirection != flexDirection) {
-        mCssStyle->mFlexDirection = flexDirection;
-        markDirty();
-        if (updating) {
-          for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-            (*it)->markDirty(false);
-          }
-        }
-      }
-    }
-
-    inline WXCoreFlexDirection getFlexDirection() const {
-      return mCssStyle->mFlexDirection;
-    }
-
-    inline void setFlexWrap(const WXCoreFlexWrap flexWrap) {
-      if (mCssStyle->mFlexWrap != flexWrap) {
-        mCssStyle->mFlexWrap = flexWrap;
-        markDirty();
-      }
-    }
-
-    inline WXCoreFlexWrap getFlexWrap() const {
-      return mCssStyle->mFlexWrap;
-    }
-
-    inline void setJustifyContent(const WXCoreJustifyContent justifyContent) {
-      if (mCssStyle->mJustifyContent != justifyContent) {
-        mCssStyle->mJustifyContent = justifyContent;
-      }
-    }
-
-    inline WXCoreJustifyContent getJustifyContent() const {
-      return mCssStyle->mJustifyContent;
-    }
-
-    inline void setAlignItems(const WXCoreAlignItems alignItems) {
-      if (mCssStyle->mAlignItems != alignItems) {
-        mCssStyle->mAlignItems = alignItems;
-        markDirty();
-      }
-    }
-
-    inline WXCoreAlignItems getAlignItems() const {
-      return mCssStyle->mAlignItems;
-    }
-
-    inline void setAlignSelf(const WXCoreAlignSelf alignSelf) {
-      if (mCssStyle->mAlignSelf != alignSelf) {
-        mCssStyle->mAlignSelf = alignSelf;
-        markDirty();
-      }
-    }
-
-    inline WXCoreAlignSelf getAlignSelf() const {
-      return mCssStyle->mAlignSelf;
-    }
-
-    virtual void set_flex(const float flex) {
-      if (mCssStyle->mFlexGrow != flex) {
-        mCssStyle->mFlexGrow = flex;
-        markDirty();
-      }
-    }
-
-    inline float getFlex() const {
-      return mCssStyle->mFlexGrow;
-    }
-
-    /** ================================ layout-result =================================== **/
-
-    inline float getLayoutWidth() const {
-      return mLayoutResult->mLayoutSize.width;
-    }
-
-    inline float getLayoutHeight() const {
-      return mLayoutResult->mLayoutSize.height;
-    }
-
-    inline float getLayoutPositionTop() const {
-      return mLayoutResult->mLayoutPosition.getPosition(kPositionEdgeTop);
-    }
-
-    inline float getLayoutPositionBottom() const {
-      return mLayoutResult->mLayoutPosition.getPosition(kPositionEdgeBottom);
-    }
-
-    inline float getLayoutPositionLeft() const {
-      return mLayoutResult->mLayoutPosition.getPosition(kPositionEdgeLeft);
-    }
-
-    inline float getLayoutPositionRight() const  {
-      return mLayoutResult->mLayoutPosition.getPosition(kPositionEdgeRight);
-    }
-      
-    virtual inline WXCoreDirection getLayoutDirection() const {
-      if (nullptr == mLayoutResult) {
-        return WEEXCORE_CSS_DEFAULT_DIRECTION;
-      }
-      return mLayoutResult->mLayoutDirection;
-    }
-
-    inline void setLayoutDirection(WXCoreDirection direction) {
-        if (nullptr == mLayoutResult) return;
-        mLayoutResult->mLayoutDirection = direction;
-    }
-    inline bool hasNewLayout() const {
-      return mHasNewLayout;
-    }
-
-    inline bool isDirty() const {
-      return dirty;
-    }
-
-    inline void markDirty(const bool recursion = true) {
-      if (!isDirty()) {
-        dirty = true;
-        if (getParent() != nullptr && recursion) {
-          getParent()->markDirty();
-        }
-      }
-    }
-      
-    void markAllDirty() {
-      markDirty(false);
-      for (WXCoreLayoutNode* c : mChildList) {
-          c->markAllDirty();
-      }
-    }
-
-    bool markChildrenDirty(const bool updatedNode = false) {
-      bool ret = false;
-      if(getChildCount() == 0){
-        if(measureFunc!= nullptr){
-          ret = true;
-        }
-      }
-      else {
-        //isnan(mCssStyle->mStyleWidth) XOR updatedNode
-        if(isnan(mCssStyle->mStyleWidth) != updatedNode){
-          for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-            ret = ((*it)->markChildrenDirty() || ret) ;
-          }
-        }
-      }
-      dirty = ret || dirty;
-      return ret;
-    }
-
-    void markInheritableDirty() {
-        if (resetInheritableSet()) {
-            // if some style was inherited from parent, reset those styles
-            // then mark self dirty
-            markDirty(false);
-            
-            // traverse children to mark dirty
-            if(getChildCount() == 0){
-                return;
-            }
-            else {
-                for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-                    (*it)->markInheritableDirty();
-                }
-            }
-        }
-    }
-      
-    /**
-    * if some style was inherited from parent, reset those styles, then return true, eles return false
-    */
-    bool resetInheritableSet() {
-      if (mCssStyle == nullptr || mLayoutResult == nullptr) return false;
-        
-      bool hasInheritedStyle = false;
-      if (mCssStyle->mDirection == kDirectionInherit) {
-          mLayoutResult->mLayoutDirection = kDirectionInherit;
-          hasInheritedStyle = true;
-      }
-      return hasInheritedStyle;
-    }
-      
-    inline void setHasNewLayout(const bool hasNewLayout) {
-      this->mHasNewLayout = hasNewLayout;
-    }
-
-    inline float getLargestMainSize() const {
-      float largestSize = 0;
-      for (WXCoreFlexLine *flexLine : mFlexLines) {
-        largestSize = std::max(largestSize, flexLine->mMainSize);
-      }
-      return largestSize + sumPaddingBorderAlongAxis(this, isMainAxisHorizontal(this));
-    }
-      
-    inline void rewriteLayoutResult(float left, float top, float width, float height) {
-      if (mLayoutResult != nullptr) {
-          mLayoutResult->mLayoutPosition.setPosition(kPositionEdgeLeft, left);
-          mLayoutResult->mLayoutPosition.setPosition(kPositionEdgeTop, top);
-          mLayoutResult->mLayoutPosition.setPosition(kPositionEdgeRight, left + width);
-          mLayoutResult->mLayoutPosition.setPosition(kPositionEdgeBottom, top + height);
-          mLayoutResult->mLayoutSize.width = width;
-          mLayoutResult->mLayoutSize.height = height;
-      }
-    }
-  };
-}
-#endif //WEEXCORE_FLEXLAYOUT_WXCORELAYOUTNODE_H
-#endif
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/layout/measure_func_adapter.h b/ios/Pods/WeexSDK/weex_core/Source/core/layout/measure_func_adapter.h
deleted file mode 100644
index 114a267..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/layout/measure_func_adapter.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifdef __cplusplus
-
-#ifndef WEEX_CORE_MEASURE_FUNCTION_ADAPTER_H
-#define WEEX_CORE_MEASURE_FUNCTION_ADAPTER_H
-
-
-#include "layout.h"
-
-namespace WeexCore {
-
-  class MeasureFunctionAdapter {
-  public:
-
-    MeasureFunctionAdapter() {}
-
-    ~MeasureFunctionAdapter() {}
-
-    virtual WXCoreSize Measure(const char* page_id, long render_ptr, float width, MeasureMode widthMeasureMode,
-                               float height, MeasureMode heightMeasureMode) = 0;
-    virtual void LayoutBefore(const char* page_id, long render_ptr) = 0;
-
-    virtual void LayoutAfter(const char* page_id, long render_ptr, float width, float height) = 0;
-
-  };
-
-}
-
-#endif //WEEX_CORE_MEASURE_FUNCTION_ADAPTER_H
-#endif //__cplusplus
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/layout/style.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/layout/style.cpp
deleted file mode 100644
index 0bc0cb9..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/layout/style.cpp
+++ /dev/null
@@ -1,265 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include "style.h"
-
-namespace WeexCore {
-
-  bool WXCoreMargin::setMargin(const WXCoreMarginEdge &edge, float margin) {
-    bool dirty = false;
-    switch (edge) {
-      case kMarginALL:
-        if (mMarginLeft != margin
-            || mMarginTop != margin
-            || mMarginRight != margin
-            || mMarginBottom != margin) {
-          mMarginLeft = margin;
-          mMarginTop = margin;
-          mMarginRight = margin;
-          mMarginBottom = margin;
-          dirty = true;
-        }
-        break;
-      case kMarginLeft:
-        if (mMarginLeft != margin) {
-          mMarginLeft = margin;
-          dirty = true;
-        }
-        break;
-      case kMarginTop:
-        if (mMarginTop != margin) {
-          mMarginTop = margin;
-          dirty = true;
-        }
-        break;
-      case kMarginRight:
-        if (mMarginRight != margin) {
-          mMarginRight = margin;
-          dirty = true;
-        }
-        break;
-      case kMarginBottom:
-        if (mMarginBottom != margin) {
-          mMarginBottom = margin;
-          dirty = true;
-        }
-        break;
-    }
-    return dirty;
-  }
-
-  float WXCoreMargin::getMargin(const WXCoreMarginEdge &edge)const {
-    float margin = 0;
-    switch (edge) {
-      case kMarginLeft:
-        margin = mMarginLeft;
-        break;
-      case kMarginTop:
-        margin = mMarginTop;
-        break;
-      case kMarginRight:
-        margin = mMarginRight;
-        break;
-      case kMarginBottom:
-        margin = mMarginBottom;
-        break;
-      default:
-        break;
-    }
-    return margin;
-  }
-
-  bool WXCorePadding::setPadding(const WXCorePaddingEdge &edge, float padding) {
-    bool dirty = false;
-    switch (edge) {
-      case kPaddingALL:
-        if (mPaddingLeft != padding
-            || mPaddingTop != padding
-            || mPaddingRight != padding
-            || mPaddingBottom != padding) {
-          mPaddingLeft = padding;
-          mPaddingTop = padding;
-          mPaddingRight = padding;
-          mPaddingBottom = padding;
-          dirty = true;
-        }
-        break;
-      case kPaddingLeft:
-        if (mPaddingLeft != padding) {
-          mPaddingLeft = padding;
-          dirty = true;
-        }
-        break;
-      case kPaddingTop:
-        if (mPaddingTop != padding) {
-          mPaddingTop = padding;
-          dirty = true;
-        }
-        break;
-      case kPaddingRight:
-        if (mPaddingRight != padding) {
-          mPaddingRight = padding;
-          dirty = true;
-        }
-        break;
-      case kPaddingBottom:
-        if (mPaddingBottom != padding) {
-          mPaddingBottom = padding;
-          dirty = true;
-        }
-        break;
-    }
-    return dirty;
-  }
-
-  float WXCorePadding::getPadding(const WXCorePaddingEdge &edge)const {
-    float padding = 0;
-    switch (edge) {
-      case kPaddingLeft:
-        padding = mPaddingLeft;
-        break;
-      case kPaddingTop:
-        padding = mPaddingTop;
-        break;
-      case kPaddingRight:
-        padding = mPaddingRight;
-        break;
-      case kPaddingBottom:
-        padding = mPaddingBottom;
-        break;
-      default:
-        break;
-    }
-    return padding;
-  }
-
-  bool WXCoreBorderWidth::setBorderWidth(const WXCoreBorderWidthEdge &edge, float borderWidth) {
-    bool dirty = false;
-    switch (edge) {
-      case kBorderWidthALL:
-        if (mBorderWidthLeft != borderWidth
-            || mBorderWidthTop != borderWidth
-            || mBorderWidthRight != borderWidth
-            || mBorderWidthBottom != borderWidth) {
-          mBorderWidthLeft = borderWidth;
-          mBorderWidthTop = borderWidth;
-          mBorderWidthRight = borderWidth;
-          mBorderWidthBottom = borderWidth;
-          dirty = true;
-        }
-        break;
-      case kBorderWidthLeft:
-        if (mBorderWidthLeft != borderWidth) {
-          mBorderWidthLeft = borderWidth;
-          dirty = true;
-        }
-        break;
-      case kBorderWidthTop:
-        if (mBorderWidthTop != borderWidth) {
-          mBorderWidthTop = borderWidth;
-          dirty = true;
-        }
-        break;
-      case kBorderWidthRight:
-        if (mBorderWidthRight != borderWidth) {
-          mBorderWidthRight = borderWidth;
-          dirty = true;
-        }
-        break;
-      case kBorderWidthBottom:
-        if (mBorderWidthBottom != borderWidth) {
-          mBorderWidthBottom = borderWidth;
-          dirty = true;
-        }
-        break;
-    }
-    return dirty;
-  }
-
-  float WXCoreBorderWidth::getBorderWidth(const WXCoreBorderWidthEdge &edge)const {
-    float borderWidth = 0;
-    switch (edge) {
-      case kBorderWidthLeft:
-        borderWidth = mBorderWidthLeft;
-        break;
-      case kBorderWidthTop:
-        borderWidth = mBorderWidthTop;
-        break;
-      case kBorderWidthRight:
-        borderWidth = mBorderWidthRight;
-        break;
-      case kBorderWidthBottom:
-        borderWidth = mBorderWidthBottom;
-        break;
-      default:
-        break;
-    }
-    return borderWidth;
-  }
-
-  bool WXCorePosition::setPosition(const WXCorePositionEdge &edge, float position) {
-    bool dirty = false;
-    switch (edge) {
-      case kPositionEdgeLeft:
-        if (mLeft != position) {
-          mLeft = position;
-          dirty = true;
-        }
-        break;
-      case kPositionEdgeTop:
-        if (mTop != position) {
-          mTop = position;
-          dirty = true;
-        }
-        break;
-      case kPositionEdgeRight:
-        if (mRight != position) {
-          mRight = position;
-          dirty = true;
-        }
-        break;
-      case kPositionEdgeBottom:
-        if (mBottom != position) {
-          mBottom = position;
-          dirty = true;
-        }
-        break;
-    }
-    return dirty;
-  }
-
-  float WXCorePosition::getPosition(const WXCorePositionEdge &edge) {
-    float position = 0;
-    switch (edge) {
-      case kPositionEdgeLeft:
-        position = mLeft;
-        break;
-      case kPositionEdgeTop:
-        position = mTop;
-        break;
-      case kPositionEdgeRight:
-        position = mRight;
-        break;
-      case kPositionEdgeBottom:
-        position = mBottom;
-        break;
-    }
-    return position;
-  }
-
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/layout/style.h b/ios/Pods/WeexSDK/weex_core/Source/core/layout/style.h
deleted file mode 100644
index d39d61a..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/layout/style.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifdef __cplusplus
-
-#ifndef WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUMS_H
-#define WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUMS_H
-
-
-#include "flex_enum.h"
-#include <math.h>
-#include <cmath>
-
-namespace WeexCore {
-
-  /**
-   * Margin: margin-left、margin-right、margin-top、margin-bottom
-   */
-  class WXCoreMargin {
-  private:
-    float mMarginTop;
-    float mMarginBottom;
-    float mMarginLeft;
-    float mMarginRight;
-
-  public:
-    WXCoreMargin() : mMarginTop(0),
-                     mMarginBottom(0),
-                     mMarginLeft(0),
-                     mMarginRight(0) {}
-
-    ~WXCoreMargin() {
-      mMarginTop = 0;
-      mMarginBottom = 0;
-      mMarginLeft = 0;
-      mMarginRight = 0;
-    }
-
-    bool setMargin(const WXCoreMarginEdge &edge, float margin);
-
-    float getMargin(const WXCoreMarginEdge &edge)const;
-  };
-
-
-  /**
-   * Padding:padding-left、padding-right、padding-top、padding-bottom
-   */
-  class WXCorePadding {
-  private:
-    float mPaddingTop;
-    float mPaddingBottom;
-    float mPaddingLeft;
-    float mPaddingRight;
-
-  public:
-    WXCorePadding() : mPaddingTop(0),
-                      mPaddingBottom(0),
-                      mPaddingLeft(0),
-                      mPaddingRight(0) {}
-
-    ~WXCorePadding() {
-      mPaddingTop = 0;
-      mPaddingBottom = 0;
-      mPaddingLeft = 0;
-      mPaddingRight = 0;
-    }
-
-    bool setPadding(const WXCorePaddingEdge &edge, float padding);
-
-    float getPadding(const WXCorePaddingEdge &edge)const;
-  };
-
-
-  /**
-   * BorderWidth:borderwidth-left、borderwidth-right、borderwidth-top、borderwidth-bottom
-   */
-  class WXCoreBorderWidth {
-  private:
-    float mBorderWidthTop;
-    float mBorderWidthBottom;
-    float mBorderWidthLeft;
-    float mBorderWidthRight;
-
-  public:
-    WXCoreBorderWidth() : mBorderWidthTop(0),
-                          mBorderWidthBottom(0),
-                          mBorderWidthLeft(0),
-                          mBorderWidthRight(0) {}
-
-    ~WXCoreBorderWidth() {
-      mBorderWidthTop = 0;
-      mBorderWidthBottom = 0;
-      mBorderWidthLeft = 0;
-      mBorderWidthRight = 0;
-    }
-
-    bool setBorderWidth(const WXCoreBorderWidthEdge &edge, float borderWidth);
-
-    float getBorderWidth(const WXCoreBorderWidthEdge &edge)const;
-  };
-
-
-  /**
-   * position:left、right、top、bottom
-   */
-  class WXCorePosition {
-  private:
-    float mTop;
-    float mBottom;
-    float mLeft;
-    float mRight;
-
-  public:
-    WXCorePosition() : mTop(NAN),
-                       mBottom(NAN),
-                       mLeft(NAN),
-                       mRight(NAN) {}
-
-    ~WXCorePosition() {
-      reset();
-    }
-
-    inline bool isNAN() {
-      return isnan(mTop) || isnan(mBottom) || isnan(mLeft) || isnan(mRight);
-    }
-
-    inline void reset() {
-      mTop = 0;
-      mBottom = 0;
-      mLeft = 0;
-      mRight = 0;
-    }
-
-    bool setPosition(const WXCorePositionEdge &edge, float position);
-
-    float getPosition(const WXCorePositionEdge &edge);
-  };
-
-  enum DimensionLevel{
-    CSS_STYLE = 1,
-    INSTANCE_STYLE = 2,
-    FALLBACK_STYLE = 3
-  };
-
-  /**
-   * css-style
-   */
-  class WXCoreCSSStyle {
-  public:
-    /**
-     * The direction children items are placed inside the Flexbox layout, it determines the
-     * direction of the main axis (and the cross axis, perpendicular to the main axis).
-     * The default value is {@link WXCoreFlexDirection #WXCore_Flex_Direction_Row}.
-     */
-    WXCoreFlexDirection mFlexDirection;
-
-    /**
-     * This attribute controls whether the flex container is single-line or multi-line, and the
-     * direction of the cross axis.
-     * <ul>
-     * <li>{@link WXCoreFlexWrap}: The flex container is single-line.</li>
-     * <li>{@link WXCoreFlexWrap}: The flex container is multi-line.</li>
-     * <li>{@link WXCoreFlexWrap}: The flex container is multi-line. The direction of the
-     * cross axis is opposed to the direction as the {@link WXCoreFlexWrap}</li>
-     * </ul>
-     * The default value is {@link WXCoreFlexWrap #WXCore_Wrap_NoWrap}.
-     */
-    WXCoreFlexWrap mFlexWrap;
-
-    /**
-     * This attribute controls the alignment along the main axis.
-     * The default value is {@link WXCoreJustifyContent #WXCore_Justify_Flex_Start}.
-     */
-    WXCoreJustifyContent mJustifyContent;
-
-    /**
-     * This attribute controls the alignment along the cross axis.
-     * The default value is {@link WXCoreAlignItems #WXCore_AlignItems_Stretch}.
-     */
-    WXCoreAlignItems mAlignItems;
-
-    /**
-     * This attribute controls the alignment along the cross axis.
-     * The default value is {@link WXCoreAlignSelf #WXCore_AlignSelf_Auto}.
-     */
-    WXCoreAlignSelf mAlignSelf;
-
-    WXCorePositionType mPositionType;
-      
-
-    float mFlexGrow;
-
-    float mMinWidth;
-
-    float mMinHeight;
-
-    float mMaxWidth;
-
-    float mMaxHeight;
-
-    float mStyleWidth;
-
-    float mStyleHeight;
-
-    DimensionLevel mStyleWidthLevel;
-
-    DimensionLevel mStyleHeightLevel;
-
-    WXCoreMargin mMargin;
-
-    WXCorePadding mPadding;
-
-    WXCoreBorderWidth mBorderWidth;
-
-    WXCorePosition mStylePosition;
-
-    WXCoreDirection mDirection;
-
-    constexpr static float kFlexGrowDefault  = 0;
-      
-    constexpr static WXCoreDirection kDirectionDefault = kDirectionLTR;
-
-    constexpr static WXCoreFlexDirection kFlexDirectionDefault= kFlexDirectionColumn;
-
-    constexpr static WXCoreFlexWrap kFlexWrapDefault = kNoWrap;
-
-    constexpr static WXCoreJustifyContent kFlexJustifyContentDefault = kJustifyFlexStart;
-
-    constexpr static WXCoreAlignItems kFlexAlignItemsDefault = kAlignItemsStretch;
-
-    constexpr static WXCoreAlignSelf kFlexAlignSelfDefault = kAlignSelfAuto;
-
-    constexpr static WXCorePositionType kWXCorePositionTypeDefault = kRelative;
-
-    WXCoreCSSStyle() :
-                       mFlexDirection(kFlexDirectionDefault),
-                       mFlexWrap(kFlexWrapDefault),
-                       mJustifyContent(kFlexJustifyContentDefault),
-                       mAlignItems(kFlexAlignItemsDefault),
-                       mAlignSelf(kFlexAlignSelfDefault),
-                       mFlexGrow(kFlexGrowDefault),
-                       mPositionType(kWXCorePositionTypeDefault),
-                       mStyleWidth(NAN), mStyleHeight(NAN),
-                       mStyleHeightLevel(FALLBACK_STYLE), mStyleWidthLevel(FALLBACK_STYLE),
-                       mMaxWidth(NAN), mMaxHeight(NAN),
-                       mMinWidth(NAN), mMinHeight(NAN),
-                       mDirection(kDirectionInherit) {
-
-    }
-
-    ~WXCoreCSSStyle() {
-      mFlexDirection = kFlexDirectionDefault;
-      mFlexWrap = kFlexWrapDefault;
-      mJustifyContent = kFlexJustifyContentDefault;
-      mAlignItems = kFlexAlignItemsDefault;
-      mAlignSelf = kFlexAlignSelfDefault;
-      mFlexGrow = kFlexGrowDefault;
-      mStyleWidth = NAN;
-      mStyleHeight = NAN;
-      mStyleWidthLevel = FALLBACK_STYLE;
-      mStyleHeightLevel = FALLBACK_STYLE;
-      mMaxWidth = NAN;
-      mMaxHeight = NAN;
-      mMinWidth = NAN;
-      mMinHeight = NAN;
-      mDirection = kDirectionInherit;
-    }
-
-    inline float sumPaddingBorderOfEdge(const WXCoreEdge edge){
-      switch (edge) {
-        case kTop:
-          return mPadding.getPadding(kPaddingTop)
-              + mBorderWidth.getBorderWidth(kBorderWidthTop);
-        case kRight:
-          return mPadding.getPadding(kPaddingRight)
-              + mBorderWidth.getBorderWidth(kBorderWidthRight);
-        case kBottom:
-          return mPadding.getPadding(kPaddingBottom)
-              + mBorderWidth.getBorderWidth(kBorderWidthBottom);
-        case kLeft:
-          return mPadding.getPadding(kPaddingLeft)
-              + mBorderWidth.getBorderWidth(kBorderWidthLeft);
-      }
-    }
-
-    float sumMarginOfDirection(bool horizontal){
-      if(horizontal){
-        return mMargin.getMargin(kMarginLeft) + mMargin.getMargin(kMarginRight);
-      }
-      else{
-        return mMargin.getMargin(kMarginTop) + mMargin.getMargin(kMarginBottom);
-      }
-    }
-  };
-}
-#endif //WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUMS_H
-#endif
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/manager/weex_core_manager.h b/ios/Pods/WeexSDK/weex_core/Source/core/manager/weex_core_manager.h
deleted file mode 100644
index b520fd0..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/manager/weex_core_manager.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifdef __cplusplus
-
-#ifndef WEEXCORE_WEEX_CORE_MANAGER_H
-#define WEEXCORE_WEEX_CORE_MANAGER_H
-
-#include "base/thread/thread.h"
-#include "core/bridge/platform_bridge.h"
-#include "core/bridge/script_bridge.h"
-#include "core/bridge/log_bridge.h"
-#include "base/message_loop/message_loop.h"
-
-namespace WeexCore {
-class WeexCoreManager {
- public:
-  enum ProjectMode { MULTI_SO, MULTI_PROCESS, COMMON };
-
-  static WeexCoreManager *Instance() {
-    static auto s_instance = new WeexCoreManager();
-    return s_instance;
-  };
-
-  inline PlatformBridge *getPlatformBridge() { return platform_bridge_; }
-
-  inline void set_platform_bridge(PlatformBridge *bridge) {
-    platform_bridge_ = bridge;
-  }
-    
-  inline LogBridge *get_log_bridge() { return log_bridge_; }
-
-  inline void set_log_bridge(LogBridge *bridge) {
-    log_bridge_ = bridge;
-  }
-
-  inline ScriptBridge *script_bridge() { return script_bridge_; }
-
-  inline void set_script_bridge(ScriptBridge *script_bridge) {
-    script_bridge_ = script_bridge;
-  }
-
-  inline void set_measure_function_adapter(MeasureFunctionAdapter *adapter) {
-    measure_function_adapter_ = adapter;
-  }
-
-  inline MeasureFunctionAdapter *measure_function_adapter() {
-    return measure_function_adapter_;
-  }
-
-  inline ProjectMode project_mode() { return project_mode_; }
-
-  inline void set_project_mode(ProjectMode mode) { project_mode_ = mode; }
-
-  // Should be called on ScriptThread
-  inline void InitScriptThread() {
-    script_thread_ =
-        new weex::base::Thread(weex::base::MessageLoop::Type::PLATFORM);
-    script_thread_->Start();
-  }
-
-  inline weex::base::Thread *script_thread() { return script_thread_; }
-
- private:
-  PlatformBridge *platform_bridge_;
-  MeasureFunctionAdapter *measure_function_adapter_;
-  LogBridge *log_bridge_;
-  ScriptBridge *script_bridge_;
-  ProjectMode project_mode_;
-  weex::base::Thread *script_thread_;
-
-  WeexCoreManager()
-      : platform_bridge_(nullptr),
-        log_bridge_(nullptr),
-        measure_function_adapter_(nullptr),
-        script_bridge_(nullptr),
-        project_mode_(COMMON),
-        script_thread_(nullptr){};
-  ~WeexCoreManager(){};
-};
-}  // namespace WeexCore
-
-#endif  // WEEXCORE_WEEX_CORE_MANAGER_H
-#endif //#ifdef __cplusplus
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/moniter/render_performance.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/moniter/render_performance.cpp
deleted file mode 100644
index a35eeb4..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/moniter/render_performance.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include <cstdint>
-#include "render_performance.h"
-
-namespace WeexCore {
-
-  std::vector<int64_t> RenderPerformance::PrintPerformanceLog(PerformanceStage performanceStage) {
-
-    std::vector<int64_t> ret(3);
-
-    if (performanceStage == onFirstScreen) {
-      firstScreenCallBridgeTime = callBridgeTime;
-      firstScreenCssLayoutTime = cssLayoutTime;
-      firstScreenParseJsonTime = parseJsonTime;
-      ret[0] = firstScreenCallBridgeTime;
-      ret[1] = firstScreenCssLayoutTime;
-      ret[2] = firstScreenParseJsonTime;
-    } else {
-      onRenderSuccessCallBridgeTime = callBridgeTime;
-      onRenderSuccessCssLayoutTime = cssLayoutTime;
-      onRenderSuccessParseJsonTime = parseJsonTime;
-      ret[0] = onRenderSuccessCallBridgeTime;
-      ret[1] = onRenderSuccessCssLayoutTime;
-      ret[2] = onRenderSuccessParseJsonTime;
-    }
-
-    return ret;
-  }
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/moniter/render_performance.h b/ios/Pods/WeexSDK/weex_core/Source/core/moniter/render_performance.h
deleted file mode 100644
index 1eff88f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/moniter/render_performance.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef WEEX_PROJECT_WXPERFORMANCE_H
-#define WEEX_PROJECT_WXPERFORMANCE_H
-
-#include <vector>
-
-namespace WeexCore {
-
-  typedef enum PerformanceStage {
-    onFirstScreen, onRenderSuccess,
-  } PerformanceStage;
-
-  class RenderPerformance {
-
-  public:
-
-    int64_t callBridgeTime;
-
-    int64_t cssLayoutTime;
-
-    int64_t parseJsonTime;
-
-    int64_t firstScreenCallBridgeTime;
-
-    int64_t firstScreenCssLayoutTime;
-
-    int64_t firstScreenParseJsonTime;
-
-    int64_t onRenderSuccessCallBridgeTime;
-
-    int64_t onRenderSuccessCssLayoutTime;
-
-    int64_t onRenderSuccessParseJsonTime;
-
-    RenderPerformance() : callBridgeTime(0), cssLayoutTime(0), parseJsonTime(0),
-                          firstScreenCallBridgeTime(0), firstScreenCssLayoutTime(0),
-                          firstScreenParseJsonTime(0), onRenderSuccessCallBridgeTime(0),
-                          onRenderSuccessCssLayoutTime(0), onRenderSuccessParseJsonTime(0) {}
-
-    std::vector<int64_t> PrintPerformanceLog(PerformanceStage performanceStage);
-  };
-}
-
-#endif //WEEX_PROJECT_WXPERFORMANCE_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/network/http_module.cc b/ios/Pods/WeexSDK/weex_core/Source/core/network/http_module.cc
deleted file mode 100644
index 2768263..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/network/http_module.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include "core/network/http_module.h"
-#include "core/network/request_handler.h"
-
-namespace weex {
-namespace core {
-namespace network {
-
-HttpModule::HttpModule()
-    : request_handler_(RequestHandler::CreateDefaultHandler()) {}
-
-HttpModule::HttpModule(RequestHandler* request_handler)
-    : request_handler_(request_handler) {}
-
-void HttpModule::Send(const char* instance_id, const char* url,
-                      Callback callback) {
-  request_handler_->Send(instance_id, url, callback);
-}
-
-void HttpModule::GetBundleType(const char *instance_id, const char *content, Callback callback){
-  request_handler_->GetBundleType(instance_id, content, callback);
-}
-
-}  // namespace network
-}  // namespace core
-}  // namespace weex
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/network/http_module.h b/ios/Pods/WeexSDK/weex_core/Source/core/network/http_module.h
deleted file mode 100644
index edb9894..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/network/http_module.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_NETWORK_HTTP_MODULE_
-#define CORE_NETWORK_HTTP_MODULE_
-#include "core/network/request_handler.h"
-
-namespace weex {
-namespace core {
-namespace network {
-
-class HttpModule {
- public:
-  HttpModule();
-  HttpModule(RequestHandler *request_handler);
-  void Send(const char *instance_id, const char *url, Callback callback);
-  void GetBundleType(const char *instance_id, const char *content, Callback callback);
-
- private:
-  std::unique_ptr<RequestHandler> request_handler_;
-};
-
-}  // namespace network
-}  // namespace core
-}  // namespace weex
-#endif  // CORE_NETWORK_HTTP_MODULE_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/network/ios/default_request_handler.h b/ios/Pods/WeexSDK/weex_core/Source/core/network/ios/default_request_handler.h
deleted file mode 100644
index 2099d53..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/network/ios/default_request_handler.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_NETWORK_DEFAULT_REQUEST_HANDLER_H
-#define CORE_NETWORK_DEFAULT_REQUEST_HANDLER_H
-
-#include "core/network/request_handler.h"
-
-namespace weex {
-namespace core {
-namespace network {
-
-class DefaultRequestHandler : public RequestHandler {
- public:
-  DefaultRequestHandler();
-  ~DefaultRequestHandler() override;
-  void Send(const char* instance_id, const char* url,
-            Callback callback) override;
-};
-
-}  // namespace network
-}  // namespace core
-}  // namespace weex
-#endif  // CORE_NETWORK_DEFAULT_REQUEST_HANDLER_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/network/ios/default_request_handler.mm b/ios/Pods/WeexSDK/weex_core/Source/core/network/ios/default_request_handler.mm
deleted file mode 100644
index b2a741d..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/network/ios/default_request_handler.mm
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include "core/network/ios/default_request_handler.h"
-#import "WXConvertUtility.h"
-#import "WXSDKManager.h"
-#import "WXComponentManager.h"
-#include <string>
-
-namespace weex {
-namespace core {
-namespace network {
-    DefaultRequestHandler::DefaultRequestHandler() {}
-
-    DefaultRequestHandler::~DefaultRequestHandler() {}
-
-    void DefaultRequestHandler::Send(const char* instance_id, const char* url, Callback callback) {
-        NSURL* nsURL = [NSURL URLWithString:NSSTRING(url)];
-        [[WXSDKManager bridgeMgr] DownloadJS:@(instance_id) url:nsURL completion:^(NSString *script) {
-            WXPerformBlockOnBridgeThread(^{
-                NSString* bundleType = @"Vue";
-                callback([script UTF8String] ? : "", [bundleType UTF8String]);
-            });
-        }];
-    }
-
-    RequestHandler* RequestHandler::CreateDefaultHandler() {
-        return new DefaultRequestHandler();
-    }
-}
-}
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/network/request_handler.h b/ios/Pods/WeexSDK/weex_core/Source/core/network/request_handler.h
deleted file mode 100644
index ba21e9c..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/network/request_handler.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_NETWORK_REQUEST_HANDLER_H
-#define CORE_NETWORK_REQUEST_HANDLER_H
-#include <functional>
-#include <string>
-#include <memory>
-
-namespace weex {
-namespace core {
-namespace network {
-typedef std::function<void(const std::string&, const std::string&)> Callback;
-
-class RequestHandler {
- public:
-  RequestHandler() {}
-  virtual ~RequestHandler() {}
-  virtual void Send(const char* instance_id, const char* url,
-                    Callback callback) = 0;
-  virtual void GetBundleType(const char *instance_id, const char *content, Callback callback){
-     std::string result;
-     callback(result, result);
-  }
-  static RequestHandler* CreateDefaultHandler();
-};
-
-}  // namespace network
-}  // namespace core
-}  // namespace weex
-#endif  // CORE_NETWORK_REQUEST_HANDLER_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/parser/dom_wson.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/parser/dom_wson.cpp
deleted file mode 100644
index ea4e23e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/parser/dom_wson.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2018/5/15.
-//
-
-#include "core/render/node/render_object.h"
-#include "core/render/page/render_page.h"
-#include "core/render/node/factory/render_creator.h"
-#include "dom_wson.h"
-#include "wson/wson.h"
-#include "wson/wson_parser.h"
-
-namespace WeexCore {
-
-
-
-    inline bool  keys_order_as_expect(RenderObject *render, bool keyOrderRight){
-        return (render != nullptr && keyOrderRight);
-    }
-
-
-    /**
-     * parser wson to render object
-     * */
-    RenderObject *parserWson2RenderObject(wson_parser& parser, RenderObject *parent, int index, const std::string &pageId, bool reserveStyles){
-        int objectType = parser.nextType();
-        if(!parser.isMap(objectType)){
-            parser.skipValue(objectType);
-            return nullptr;
-        }
-        /**
-         * because strem key order specified, so will cann't dependecy it's keys order,
-         * if key orders right parse one time, if not first parse ref type create render object
-         * then parse others attrs
-         * */
-        int size = parser.nextMapSize();
-        std::string ref;
-        std::string renderType;
-        RenderObject *render = nullptr;
-        int state = parser.getState();
-        bool keyOrderRight = true;
-        for(int i=0; i < size; i++){
-            std::string objectKey = parser.nextMapKeyUTF8();
-            if(0 == strcmp(objectKey.c_str(), "ref")){
-                 ref = parser.nextStringUTF8(parser.nextType());
-                if (render != nullptr) {
-                    // ref may be after type, so need set to render
-                    render->set_ref(ref);
-                }
-            }else if (0 == strcmp(objectKey.c_str(), "type")) {
-                renderType = parser.nextStringUTF8(parser.nextType());
-                render = (RenderObject *) RenderCreator::GetInstance()->CreateRender(renderType, ref);
-                render->set_page_id(pageId);
-                if (parent != nullptr){
-                    parent->AddRenderObject(index, render);
-                }
-            }else if (0 == strcmp(objectKey.c_str(), "attr")){ //attr is map object
-                uint8_t attrType = parser.nextType();
-                if(parser.isMap(attrType) && keys_order_as_expect(render, keyOrderRight)){
-                    int attrMapSize = parser.nextMapSize();
-                    for(int attrIndex=0; attrIndex<attrMapSize; attrIndex++){
-                        std::string attrKeyString = parser.nextMapKeyUTF8();
-                        std::string attrValueString = parser.nextStringUTF8(parser.nextType());
-                        render->AddAttr(attrKeyString, attrValueString);
-                    }
-                }else{
-                    keyOrderRight = keys_order_as_expect(render, keyOrderRight);
-                    parser.skipValue(attrType);
-                }
-            }else if (0 == strcmp(objectKey.c_str(), "style")){ //style is map object
-                uint8_t styleType = parser.nextType();
-                if(parser.isMap(styleType) && keys_order_as_expect(render, keyOrderRight)){
-                    int styleMapSize = parser.nextMapSize();
-                    for(int styleIndex=0; styleIndex<styleMapSize; styleIndex++){
-                        std::string styleKeyString = parser.nextMapKeyUTF8();
-                        std::string styleValueString = parser.nextStringUTF8(parser.nextType());
-                        render->AddStyle(styleKeyString, styleValueString, reserveStyles);
-                    }
-                }else{
-                    keyOrderRight = keys_order_as_expect(render, keyOrderRight);
-                    parser.skipValue(styleType);
-                }
-            }else if (0 == strcmp(objectKey.c_str(), "event")) {//event is array
-                uint8_t  eventType = parser.nextType();
-                if(parser.isArray(eventType) && keys_order_as_expect(render, keyOrderRight)){
-                    int eventSize = parser.nextArraySize();
-                    for(int eventIndex=0; eventIndex < eventSize; eventIndex++){
-                        std::string eventValue = parser.nextStringUTF8(parser.nextType());
-                        if(eventValue.size() > 0){
-                            render->AddEvent(eventValue);
-                        }
-                    }
-                }else{
-                    keyOrderRight = keys_order_as_expect(render, keyOrderRight);
-                    parser.skipValue(eventType);
-                }
-            }else if (0 == strcmp(objectKey.c_str(), "children")) {
-                uint8_t  childType = parser.nextType();
-                if(parser.isArray(childType) && keys_order_as_expect(render, keyOrderRight)){
-                    int childSize = parser.nextArraySize();
-                    for(int childIndex=0; childIndex < childSize; childIndex++){
-                        parserWson2RenderObject(parser, render, childIndex, pageId, reserveStyles);
-                    }
-                }else{
-                    keyOrderRight = keys_order_as_expect(render, keyOrderRight);
-                    parser.skipValue(childType);
-                }
-            }else{
-                parser.skipValue(parser.nextType());
-            }
-        }
-
-        /**
-         * if key order not right, parse attr&style  events children again
-         * */
-        if(!keyOrderRight && render != nullptr){
-            parser.restoreToState(state);
-            for(int i=0; i < size; i++){
-                std::string objectKey = parser.nextMapKeyUTF8();
-                if (0 == strcmp(objectKey.c_str(), "attr")){ //attr is map object
-                    uint8_t attrType = parser.nextType();
-                    if(parser.isMap(attrType)){
-                        int attrMapSize = parser.nextMapSize();
-                        for(int attrIndex=0; attrIndex<attrMapSize; attrIndex++){
-                            std::string attrKeyString = parser.nextMapKeyUTF8();
-                            std::string attrValueString = parser.nextStringUTF8(parser.nextType());
-                            render->AddAttr(attrKeyString, attrValueString);
-                        }
-                    }else{
-                        parser.skipValue(attrType);
-                    }
-                }else if (0 == strcmp(objectKey.c_str(), "style")){ //style is map object
-                    uint8_t styleType = parser.nextType();
-                    if(parser.isMap(styleType)){
-                        int styleMapSize = parser.nextMapSize();
-                        for(int styleIndex=0; styleIndex<styleMapSize; styleIndex++){
-                            std::string styleKeyString = parser.nextMapKeyUTF8();
-                            std::string styleValueString = parser.nextStringUTF8(parser.nextType());
-                            render->AddStyle(styleKeyString, styleValueString, reserveStyles);
-                        }
-                    }else{
-                        parser.skipValue(styleType);
-                    }
-                }else if (0 == strcmp(objectKey.c_str(), "event")) {//event is array
-                    uint8_t  eventType = parser.nextType();
-                    if(parser.isArray(eventType)){
-                        int eventSize = parser.nextArraySize();
-                        for(int eventIndex=0; eventIndex < eventSize; eventIndex++){
-                            std::string eventValue = parser.nextStringUTF8(parser.nextType());
-                            if(eventValue.size() > 0){
-                                render->AddEvent(eventValue);
-                            }
-                        }
-                    }else{;
-                        parser.skipValue(eventType);
-                    }
-                }else if (0 == strcmp(objectKey.c_str(), "children")) {
-                    uint8_t  childType = parser.nextType();
-                    if(parser.isArray(childType)){
-                        int childSize = parser.nextArraySize();
-                        for(int childIndex=0; childIndex < childSize; childIndex++){
-                            parserWson2RenderObject(parser, render, childIndex, pageId, reserveStyles);
-                        }
-                    }else{
-                        parser.skipValue(childType);
-                    }
-                }else{
-                    parser.skipValue(parser.nextType());
-                }
-            }
-        }
-
-
-        if (render != nullptr) {
-            render->ApplyDefaultStyle(reserveStyles);
-            render->ApplyDefaultAttr();
-        }
-        return render;
-    }
-
-
-    RenderObject *Wson2RenderObject(const char *data, const std::string &pageId, bool reserveStyles){
-        if(!data){
-            return nullptr;
-        }
-        wson_parser parser(data);
-        return parserWson2RenderObject(parser, nullptr, 0, pageId, reserveStyles);
-    }
-
-    std::vector<std::pair<std::string, std::string>> *Wson2Pairs(const char *data){
-        if(!data){
-            return nullptr;
-        }
-        wson_parser parser(data);
-        std::vector<std::pair<std::string, std::string>> *pairs = nullptr;
-        uint8_t  type = parser.nextType();
-        if(parser.isMap(type)){
-            pairs = new std::vector<std::pair<std::string, std::string>>();
-            int mapSize = parser.nextMapSize();
-            for(int index=0; index < mapSize; index++){
-                std::string mapKeyString = parser.nextMapKeyUTF8();
-                std::string mapValueString = parser.nextStringUTF8(parser.nextType());
-                std::pair<std::string, std::string> mapPair(mapKeyString, mapValueString);
-                pairs->insert(pairs->end(), mapPair);
-            }
-        }
-        return pairs;
-    };
-    
-    static void WsonGenerate(wson_parser& parser, const std::string& parentRef, int index, const WsonObjectGenerator& genObject) {
-        int objectType = parser.nextType();
-        if(!parser.isMap(objectType)){
-            parser.skipValue(objectType);
-            return;
-        }
-        /**
-         * because strem key order specified, so will cann't dependecy it's keys order,
-         * if key orders right parse one time, if not first parse ref type create render object
-         * then parse others attrs
-         * */
-        std::string ref;
-        std::string renderType;
-        std::map<std::string, std::string>* styles = new std::map<std::string, std::string>();
-        std::map<std::string, std::string>* attrs = new std::map<std::string, std::string>();
-        std::set<std::string>* events = new std::set<std::string>();
-        
-        int size = parser.nextMapSize();
-        int state = parser.getState();
-        for(int i=0; i < size; i++){
-            std::string objectKey = parser.nextMapKeyUTF8();
-            if(0 == strcmp(objectKey.c_str(), "ref")){
-                ref = parser.nextStringUTF8(parser.nextType());
-            }else if (0 == strcmp(objectKey.c_str(), "type")) {
-                renderType = parser.nextStringUTF8(parser.nextType());
-            }else if (0 == strcmp(objectKey.c_str(), "attr")){ //attr is map object
-                uint8_t attrType = parser.nextType();
-                if(parser.isMap(attrType)){
-                    int attrMapSize = parser.nextMapSize();
-                    for(int attrIndex=0; attrIndex<attrMapSize; attrIndex++){
-                        std::string attrKeyString = parser.nextMapKeyUTF8();
-                        std::string attrValueString = parser.nextStringUTF8(parser.nextType());
-                        (*attrs)[attrKeyString] = attrValueString;
-                    }
-                }
-            }else if (0 == strcmp(objectKey.c_str(), "style")){ //style is map object
-                uint8_t styleType = parser.nextType();
-                if(parser.isMap(styleType)){
-                    int styleMapSize = parser.nextMapSize();
-                    for(int styleIndex=0; styleIndex<styleMapSize; styleIndex++){
-                        std::string styleKeyString = parser.nextMapKeyUTF8();
-                        std::string styleValueString = parser.nextStringUTF8(parser.nextType());
-                        (*styles)[styleKeyString] = styleValueString;
-                    }
-                }
-            }else if (0 == strcmp(objectKey.c_str(), "event")) {//event is array
-                uint8_t eventType = parser.nextType();
-                if(parser.isArray(eventType)){
-                    int eventSize = parser.nextArraySize();
-                    for(int eventIndex=0; eventIndex < eventSize; eventIndex++){
-                        std::string eventValue = parser.nextStringUTF8(parser.nextType());
-                        if(eventValue.size() > 0){
-                            events->insert(eventValue);
-                        }
-                    }
-                }
-            }else{
-                // skip children
-                parser.skipValue(parser.nextType());
-            }
-        }
-        
-        // gen one object
-        if (!renderType.empty() && !ref.empty()) {
-            genObject(ref, renderType, parentRef, styles, attrs, events, index);
-            
-            // parse children
-            parser.restoreToState(state);
-            for(int i=0; i < size; i++){
-                std::string objectKey = parser.nextMapKeyUTF8();
-                if (0 == strcmp(objectKey.c_str(), "children")) {
-                    uint8_t childType = parser.nextType();
-                    if (parser.isArray(childType)){
-                        int childSize = parser.nextArraySize();
-                        for(int childIndex=0; childIndex < childSize; childIndex++){
-                            WsonGenerate(parser, ref, childIndex, genObject);
-                        }
-                    } else {
-                        break;
-                    }
-                } else {
-                    parser.skipValue(parser.nextType());
-                }
-            }
-        }
-        else {
-            delete styles;
-            delete attrs;
-            delete events;
-        }
-    }
-
-    void WsonGenerate(const char* data, const std::string& parentRef, int index, const WsonObjectGenerator& genObject) {
-        if (!data) {
-            return;
-        }
-        wson_parser parser(data);
-        WsonGenerate(parser, parentRef, index, genObject);
-    }
-    
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/parser/dom_wson.h b/ios/Pods/WeexSDK/weex_core/Source/core/parser/dom_wson.h
deleted file mode 100644
index 5b754a5..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/parser/dom_wson.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2018/5/15.
-//
-
-#ifndef WEEX_PROJECT_WSON_PARSER_H
-#define WEEX_PROJECT_WSON_PARSER_H
-
-#include <vector>
-#include <string>
-#include <functional>
-
-namespace WeexCore {
-
-    class RenderObject;
-    class RenderPage;
-
-    RenderObject *Wson2RenderObject(const char *data, const std::string &pageId, bool reserveStyles);
-    std::vector<std::pair<std::string, std::string>> *Wson2Pairs(const char *data);
-    
-    typedef std::function<void (const std::string& ref,
-                                const std::string& type,
-                                const std::string& parentRef,
-                                std::map<std::string, std::string>* styles,
-                                std::map<std::string, std::string>* attrs,
-                                std::set<std::string>* events,
-                                int index)> WsonObjectGenerator;
-    
-    void WsonGenerate(const char* data, const std::string& parentRef, int index, const WsonObjectGenerator& genObject);
-}
-
-#endif //WEEX_PROJECT_WSON_PARSER_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_element.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_element.cpp
deleted file mode 100644
index 2cf46fd..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_element.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_add_element.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-
-RenderActionAddElement::RenderActionAddElement(const std::string &page_id,
-                                               const RenderObject *render,
-                                               const RenderObject *parent,
-                                               int index, bool will_layout) {
-  this->attributes_ = render->attributes();
-  this->styles_ = render->styles();
-  this->events_ = render->events();
-  this->margins_ = render->GetMargins();
-  this->paddings_ = render->GetPaddings();
-  this->borders_ = render->GetBorders();
-  this->page_id_ = page_id;
-  this->component_type_ = render->type();
-  this->ref_ = render->ref();
-  this->parent_ref_ = parent->ref();
-  this->index_ = index;
-  this->will_layout_ = will_layout;
-}
-
-void RenderActionAddElement::ExecuteAction() {
-  WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->AddElement(
-      this->page_id_.c_str(), this->component_type_.c_str(), this->ref_.c_str(),
-      this->index_, this->parent_ref_.c_str(), this->styles_, this->attributes_,
-      this->events_, this->margins_, this->paddings_, this->borders_,
-      this->will_layout_);
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_element.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_element.h
deleted file mode 100644
index ed828b0..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_element.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_ADD_ELEMENT_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_ADD_ELEMENT_H_
-
-#include <map>
-#include <set>
-#include <string>
-
-#include "core/layout/style.h"
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderObject;
-
-class RenderActionAddElement : public RenderAction {
- public:
-  explicit RenderActionAddElement(const std::string &page_id,
-                                  const RenderObject *render,
-                                  const RenderObject *parent, int index,
-                                  bool will_layout = true);
-
-  void ExecuteAction();
-
- public:
-  std::map<std::string, std::string> *styles_;
-  std::map<std::string, std::string> *attributes_;
-  std::set<std::string> *events_;
-  WXCoreMargin margins_;
-  WXCorePadding paddings_;
-  WXCoreBorderWidth borders_;
-  std::string page_id_;
-  std::string component_type_;
-  std::string parent_ref_;
-  std::string ref_;
-  int index_;
-  bool will_layout_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_ADD_ELEMENT_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_event.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_event.cpp
deleted file mode 100644
index 0f8339f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_event.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_add_event.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-RenderActionAddEvent::RenderActionAddEvent(const std::string &page_id,
-                                           const std::string &ref,
-                                           const std::string &event) {
-  this->page_id_ = page_id;
-  this->ref_ = ref;
-  this->event_ = event;
-}
-
-void RenderActionAddEvent::ExecuteAction() {
-  WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->AddEvent(
-      this->page_id_.c_str(), this->ref_.c_str(), this->event_.c_str());
-}
-
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_event.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_event.h
deleted file mode 100644
index b27f981..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_add_event.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_ADD_EVENT_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_ADD_EVENT_H_
-
-#include <string>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderActionAddEvent : public RenderAction {
- public:
-  explicit RenderActionAddEvent(const std::string &page_id,
-                                const std::string &ref,
-                                const std::string &event);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-  std::string ref_;
-  std::string event_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_ADD_EVENT_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_appendtree_createfinish.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_appendtree_createfinish.cpp
deleted file mode 100644
index d30d496..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_appendtree_createfinish.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_appendtree_createfinish.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-RenderActionAppendTreeCreateFinish::RenderActionAppendTreeCreateFinish(
-    const std::string &page_id, const std::string &ref) {
-  this->page_id_ = page_id;
-  this->ref_ = ref;
-}
-
-void RenderActionAppendTreeCreateFinish::ExecuteAction() {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->AppendTreeCreateFinish(this->page_id_.c_str(), this->ref_.c_str());
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_appendtree_createfinish.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_appendtree_createfinish.h
deleted file mode 100644
index 4ea40e8..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_appendtree_createfinish.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_APPENDTREE_CREATEFINISH_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_APPENDTREE_CREATEFINISH_H_
-
-#include <string>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderActionAppendTreeCreateFinish : public RenderAction {
- public:
-  explicit RenderActionAppendTreeCreateFinish(const std::string &page_id,
-                                              const std::string &ref);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-  std::string ref_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_APPENDTREE_CREATEFINISH_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createbody.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createbody.cpp
deleted file mode 100644
index ceb8318..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createbody.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_createbody.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-
-RenderActionCreateBody::RenderActionCreateBody(const std::string &page_id,
-                                               const RenderObject *render) {
-  this->attributes_ = render->attributes();
-  this->styles_ = render->styles();
-  this->events_ = render->events();
-  this->margins_ = render->GetMargins();
-  this->paddings_ = render->GetPaddings();
-  this->borders_ = render->GetBorders();
-  this->page_id_ = page_id;
-  this->component_type_ = render->type();
-  this->ref_ = render->ref();
-}
-
-void RenderActionCreateBody::ExecuteAction() {
-  WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->CreateBody(
-      this->page_id_.c_str(), this->component_type_.c_str(), this->ref_.c_str(),
-      this->styles_, this->attributes_, this->events_, this->margins_,
-      this->paddings_, this->borders_);
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createbody.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createbody.h
deleted file mode 100644
index 23d713c..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createbody.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_CREATEBODY_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_CREATEBODY_H_
-
-#include <map>
-#include <set>
-#include <string>
-
-#include "core/layout/style.h"
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderObject;
-
-class RenderActionCreateBody : public RenderAction {
- public:
-  explicit RenderActionCreateBody(const std::string &page_id,
-                                  const RenderObject *render);
-
-  void ExecuteAction();
-
- public:
-  std::map<std::string, std::string> *styles_;
-  std::map<std::string, std::string> *attributes_;
-  std::set<std::string> *events_;
-  WXCoreMargin margins_;
-  WXCorePadding paddings_;
-  WXCoreBorderWidth borders_;
-  std::string page_id_;
-  std::string component_type_;
-  std::string ref_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_CREATEBODY_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createfinish.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createfinish.cpp
deleted file mode 100644
index a2b63ef..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createfinish.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_createfinish.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-RenderActionCreateFinish::RenderActionCreateFinish(const std::string &page_id) {
-  LOGE("RenderActionCreateFinish::RenderActionCreateFinish");
-  this->page_id_ = page_id;
-}
-
-void RenderActionCreateFinish::ExecuteAction() {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->CreateFinish(this->page_id_.c_str());
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createfinish.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createfinish.h
deleted file mode 100644
index 4da25cf..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_createfinish.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_CREATEFINISH_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_CREATEFINISH_H_
-
-#include <string>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderActionCreateFinish : public RenderAction {
- public:
-  explicit RenderActionCreateFinish(const std::string &page_id);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_CREATEFINISH_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_interface.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_interface.h
deleted file mode 100644
index 0274450..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_interface.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_INTERFACE_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_INTERFACE_H_
-
-namespace WeexCore {
-
-class RenderAction {
- public:
-  virtual ~RenderAction() {}
-  virtual void ExecuteAction() = 0;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_INTERFACE_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_layout.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_layout.cpp
deleted file mode 100644
index 2b98cb5..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_layout.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_layout.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-
-RenderActionLayout::RenderActionLayout(const std::string &page_id,
-                                       const RenderObject *render, int index) {
-  this->page_id_ = page_id;
-  this->ref_ = render->ref();
-  this->index_ = index;
-  GetLayoutInfo(render);
-}
-
-void RenderActionLayout::ExecuteAction() {
-  WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->Layout(
-      this->page_id_.c_str(), this->ref_.c_str(), this->top_, this->bottom_,
-      this->left_, this->right_, this->height_, this->width_, this->isRTL_, this->index_);
-}
-
-void RenderActionLayout::GetLayoutInfo(const WXCoreLayoutNode *node) {
-  this->top_ = node->getLayoutPositionTop();
-  this->bottom_ = node->getLayoutPositionBottom();
-  this->right_ = node->getLayoutPositionRight();
-  this->left_ = node->getLayoutPositionLeft();
-  this->height_ = node->getLayoutHeight();
-  this->width_ = node->getLayoutWidth();
-  this->isRTL_ = node->getLayoutDirection() == WeexCore::kDirectionRTL;
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_layout.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_layout.h
deleted file mode 100644
index fc7e9b4..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_layout.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_LAYOUT_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_LAYOUT_H_
-
-#include <set>
-#include <string>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderObject;
-
-class WXCoreLayoutNode;
-
-class RenderActionLayout : public RenderAction {
- public:
-  explicit RenderActionLayout(const std::string &page_id,
-                              const RenderObject *render, const int index);
-
-  void ExecuteAction();
-
-  void GetLayoutInfo(const WXCoreLayoutNode *node);
-
- public:
-  std::string page_id_;
-  std::string ref_;
-  float width_;
-  float height_;
-  float top_;
-  float left_;
-  float bottom_;
-  float right_;
-  bool isRTL_;
-  int index_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_LAYOUT_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_move_element.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_move_element.cpp
deleted file mode 100644
index b6dc601..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_move_element.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_move_element.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-RenderActionMoveElement::RenderActionMoveElement(const std::string &page_id,
-                                                 const std::string &ref,
-                                                 const std::string &parent_ref,
-                                                 int index) {
-  this->page_id_ = page_id;
-  this->ref_ = ref;
-  this->parent_ref_ = parent_ref;
-  this->index_ = index;
-}
-
-void RenderActionMoveElement::ExecuteAction() {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->MoveElement(this->page_id_.c_str(), this->ref_.c_str(),
-                    this->parent_ref_.c_str(), this->index_);
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_move_element.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_move_element.h
deleted file mode 100644
index 88d9044..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_move_element.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_MOVE_ELEMENT_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_MOVE_ELEMENT_H_
-
-#include <string>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderActionMoveElement : public RenderAction {
- public:
-  explicit RenderActionMoveElement(const std::string &page_id,
-                                   const std::string &ref,
-                                   const std::string &parent_ref, int index);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-  std::string ref_;
-  std::string parent_ref_;
-  int index_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_MOVE_ELEMENT_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_element.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_element.cpp
deleted file mode 100644
index e3b3a6e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_element.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_remove_element.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-RenderActionRemoveElement::RenderActionRemoveElement(const std::string &page_id,
-                                                     const std::string &ref) {
-  this->page_id_ = page_id;
-  this->ref_ = ref;
-}
-
-void RenderActionRemoveElement::ExecuteAction() {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->RemoveElement(this->page_id_.c_str(), this->ref_.c_str());
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_element.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_element.h
deleted file mode 100644
index ff042d3..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_element.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_REMOVE_ELEMENT_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_REMOVE_ELEMENT_H_
-
-#include <string>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderActionRemoveElement : public RenderAction {
- public:
-  explicit RenderActionRemoveElement(const std::string &page_id,
-                                     const std::string &ref);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-  std::string ref_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_REMOVE_ELEMENT_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_event.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_event.cpp
deleted file mode 100644
index 81cdd19..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_event.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_remove_event.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-RenderActionRemoveEvent::RenderActionRemoveEvent(const std::string &page_id,
-                                                 const std::string &ref,
-                                                 const std::string &event) {
-  this->page_id_ = page_id;
-  this->ref_ = ref;
-  this->event_ = event;
-}
-
-void RenderActionRemoveEvent::ExecuteAction() {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->RemoveEvent(this->page_id_.c_str(), this->ref_.c_str(),
-                    this->event_.c_str());
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_event.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_event.h
deleted file mode 100644
index f448032..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_remove_event.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_REMOVE_EVENT_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_REMOVE_EVENT_H_
-
-#include <string>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderActionRemoveEvent : public RenderAction {
- public:
-  explicit RenderActionRemoveEvent(const std::string &page_id,
-                                   const std::string &ref,
-                                   const std::string &event);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-  std::string ref_;
-  std::string event_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_REMOVE_EVENT_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_render_success.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_render_success.cpp
deleted file mode 100644
index c672358..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_render_success.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_render_success.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-RenderActionRenderSuccess::RenderActionRenderSuccess(const std::string& page_id)
-    : page_id_(page_id) {}
-
-void RenderActionRenderSuccess::ExecuteAction() {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->RenderSuccess(page_id_.c_str());
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_render_success.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_render_success.h
deleted file mode 100644
index 28ef300..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_render_success.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_RENDER_SUCCESS_H
-#define CORE_RENDER_ACTION_RENDER_ACTION_RENDER_SUCCESS_H
-
-#include <string>
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-class RenderActionRenderSuccess : public RenderAction {
- public:
-  explicit RenderActionRenderSuccess(const std::string &page_id);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_RENDER_SUCCESS_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_trigger_vsync.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_trigger_vsync.cpp
deleted file mode 100644
index 247124f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_trigger_vsync.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_trigger_vsync.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-RenderActionTriggerVSync::RenderActionTriggerVSync(const std::string& page_id)
-    : page_id_(page_id) {}
-
-void RenderActionTriggerVSync::ExecuteAction() {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->TriggerVSync(page_id_.c_str());
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_trigger_vsync.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_trigger_vsync.h
deleted file mode 100644
index fd2fd05..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_trigger_vsync.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef CORE_RENDER_ACTION_TRIGGER_VSYNC_H
-#define CORE_RENDER_ACTION_TRIGGER_VSYNC_H
-
-#include <string>
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-class RenderActionTriggerVSync : public RenderAction {
- public:
-  explicit RenderActionTriggerVSync(const std::string &page_id);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_TRIGGER_VSYNC_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_attr.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_attr.cpp
deleted file mode 100644
index 5805337..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_attr.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_update_attr.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-RenderActionUpdateAttr::RenderActionUpdateAttr(
-    const std::string &page_id, const std::string &ref,
-    std::vector<std::pair<std::string, std::string>> *attrs) {
-  this->page_id_ = page_id;
-  this->ref_ = ref;
-  this->attrs_ = attrs;
-}
-
-void RenderActionUpdateAttr::ExecuteAction() {
-  WeexCoreManager::Instance()->getPlatformBridge()->platform_side()->UpdateAttr(
-      this->page_id_.c_str(), this->ref_.c_str(), this->attrs_);
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_attr.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_attr.h
deleted file mode 100644
index 56ebe90..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_attr.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_UPDATE_ATTR_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_UPDATE_ATTR_H_
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderActionUpdateAttr : public RenderAction {
- public:
-  explicit RenderActionUpdateAttr(
-      const std::string &page_id, const std::string &ref,
-      std::vector<std::pair<std::string, std::string>> *attrs);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-  std::string ref_;
-  std::vector<std::pair<std::string, std::string>> *attrs_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_UPDATE_ATTR_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_style.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_style.cpp
deleted file mode 100644
index f51810e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_style.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_update_style.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-RenderActionUpdateStyle::RenderActionUpdateStyle(
-    const std::string &page_id, const std::string &ref,
-    std::vector<std::pair<std::string, std::string>> *style,
-    std::vector<std::pair<std::string, std::string>> *margin,
-    std::vector<std::pair<std::string, std::string>> *padding,
-    std::vector<std::pair<std::string, std::string>> *border) {
-  this->page_id_ = page_id;
-  this->ref_ = ref;
-  this->style_ = style;
-  this->margin_ = margin;
-  this->padding_ = padding;
-  this->border_ = border;
-}
-
-void RenderActionUpdateStyle::ExecuteAction() {
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->UpdateStyle(this->page_id_.c_str(), this->ref_.c_str(), this->style_,
-                    this->margin_, this->padding_, this->border_);
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_style.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_style.h
deleted file mode 100644
index e60d500..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/action/render_action_update_style.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_ACTION_RENDER_ACTION_UPDATE_STYLE_H_
-#define CORE_RENDER_ACTION_RENDER_ACTION_UPDATE_STYLE_H_
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "core/render/action/render_action_interface.h"
-
-namespace WeexCore {
-
-class RenderActionUpdateStyle : public RenderAction {
- public:
-  explicit RenderActionUpdateStyle(
-      const std::string &page_id, const std::string &ref,
-      std::vector<std::pair<std::string, std::string>> *style,
-      std::vector<std::pair<std::string, std::string>> *margin,
-      std::vector<std::pair<std::string, std::string>> *padding,
-      std::vector<std::pair<std::string, std::string>> *border);
-
-  void ExecuteAction();
-
- public:
-  std::string page_id_;
-  std::string ref_;
-  std::vector<std::pair<std::string, std::string>> *style_;
-  std::vector<std::pair<std::string, std::string>> *margin_;
-  std::vector<std::pair<std::string, std::string>> *padding_;
-  std::vector<std::pair<std::string, std::string>> *border_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_ACTION_RENDER_ACTION_UPDATE_STYLE_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/manager/render_manager.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/manager/render_manager.cpp
deleted file mode 100644
index a09395e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/manager/render_manager.cpp
+++ /dev/null
@@ -1,632 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include "core/render/manager/render_manager.h"
-
-#include <chrono>
-#include <utility>
-#include <vector>
-
-#include "base/log_defines.h"
-#include "base/time_utils.h"
-#include "core/common/view_utils.h"
-#include "core/css/constants_name.h"
-#include "core/layout/measure_func_adapter.h"
-#include "core/parser/dom_wson.h"
-#include "core/render/node/render_object.h"
-#include "core/render/page/render_page.h"
-#include "core/render/page/render_page_custom.h"
-#include "core/render/target/render_target.h"
-#include "core/manager/weex_core_manager.h"
-#include "wson/wson_parser.h"
-
-namespace WeexCore {
-
-RenderManager *RenderManager::g_pInstance = nullptr;
-
-
-
-bool RenderManager::CreatePage(const std::string& page_id, const char *data) {
-    
-#if RENDER_LOG
-  wson_parser parser(data);
-  LOGD("[RenderManager] CreatePage >>>> pageId: %s, dom data: %s",
-       pageId.c_str(), parser.toStringUTF8().c_str());
-#endif
-    
-  std::string targetName = RenderTargetManager::getRenderTargetName(page_id);
-  if (!targetName.empty()) {
-    if (RenderTargetManager::sharedInstance()->getAvailableTargetNames().count(targetName) == 0) {
-      // cannot find the target, degress
-      targetName = "";
-    }
-  }
-
-  if (!targetName.empty()) {
-      RenderPageCustom* pageCustom = CreateCustomPage(page_id, targetName);
-      WsonGenerate(data, "", 0, [=](const std::string& ref,
-                                    const std::string& type,
-                                    const std::string& parentRef,
-                                    std::map<std::string, std::string>* styles,
-                                    std::map<std::string, std::string>* attrs,
-                                    std::set<std::string>* events,
-                                    int index) {
-          if (parentRef.empty()) {
-              pageCustom->CreateBody(ref, type, styles, attrs, events);
-          }
-          else {
-              pageCustom->AddRenderObject(ref, type, parentRef, index, styles, attrs, events);
-          }
-      });
-      return true;
-  }
-  else {
-      RenderPage *page = new RenderPage(page_id);
-      pages_.insert(std::pair<std::string, RenderPage *>(page_id, page));
-
-      initDeviceConfig(page, page_id);
-
-      int64_t start_time = getCurrentTime();
-      RenderObject *root = Wson2RenderObject(data, page_id, page->reserve_css_styles());
-      page->ParseJsonTime(getCurrentTime() - start_time);
-
-      return page->CreateRootRender(root);
-  }
-}
-
-bool RenderManager::CreatePage(const std::string& page_id, RenderObject *root) {
-#if RENDER_LOG
-  wson_parser parser(data);
-  LOGD("[RenderManager] CreatePage >>>> pageId: %s, dom data: %s",
-       pageId.c_str(), parser.toStringUTF8().c_str());
-#endif
-
-  RenderPage *page = new RenderPage(page_id);
-  this->pages_.insert(std::pair<std::string, RenderPage *>(page_id, page));
-
-  initDeviceConfig(page, page_id);
-
-  return page->CreateRootRender(root);
-}
-    
-bool RenderManager::CreatePage(const std::string& page_id, std::function<RenderObject* (RenderPage*)> constructRoot) {
-#if RENDER_LOG
-    LOGD("[RenderManager] CreatePage >>>> pageId: %s", pageId.c_str());
-#endif
-    
-    RenderPage *page = new RenderPage(page_id);
-    this->pages_.insert(std::pair<std::string, RenderPage *>(page_id, page));
-
-    initDeviceConfig(page, page_id);
-    
-    int64_t start_time = getCurrentTime();
-    RenderObject *root = constructRoot(page);
-    page->ParseJsonTime(getCurrentTime() - start_time);
-    
-    return page->CreateRootRender(root);
-}
-
-RenderPageCustom* RenderManager::CreateCustomPage(const std::string& page_id, const std::string& page_type) {
-#if RENDER_LOG
-    LOGD("[RenderManager] CreateCustomPage >>>> pageId: %s, pageType: %s", pageId.c_str(), page_type.c_str());
-#endif
-    
-    RenderPageCustom::PageOptions options;
-    
-    {
-        std::lock_guard<std::mutex> guard(page_args_mutex_);
-        auto findPageArgs = page_args_.find(page_id);
-        if (findPageArgs != page_args_.end()) {
-            options.args = findPageArgs->second;
-        }
-    }
-    
-    options.view_scale = 1;
-    auto value = WeexCore::WXCoreEnvironment::getInstance()->GetOption("pixel_scale");
-    if (value != "") {
-        options.view_scale = strtof(value.c_str(), NULL);
-    }
-    
-    auto findViewPort = options.args.find("viewportwidth");
-    if (findViewPort != options.args.end()) {
-        options.viewport_width = getFloat(findViewPort->second.c_str());
-    }
-    else {
-        options.viewport_width = kDefaultViewPortWidth;
-    }
-    
-    auto findDeviceWidth = options.args.find("devicewidth");
-    if (findDeviceWidth != options.args.end()) {
-        options.device_width = getFloat(findDeviceWidth->second.c_str());
-    }
-    else {
-        /* For iOS DeviceWidth stored by WeexCore is in UIKit view system coordinate(iPhone6 is 375).
-         So we must provide heron with the pixel device width here. */
-        options.device_width = WXCoreEnvironment::getInstance()->DeviceWidth() * options.view_scale;
-    }
-    
-    auto findDeviation = options.args.find("roundoffdeviation");
-    if (findDeviation != options.args.end()) {
-        options.is_round_off = getBool(findDeviation->second.c_str());
-    }
-    else {
-        options.is_round_off = kDefaultRoundOffDeviation;
-    }
-    
-    RenderPageCustom* page = new RenderPageCustom(page_id, page_type, options);
-    this->pages_.insert(std::pair<std::string, RenderPageCustom *>(page_id, page));
-    return page;
-}
-
-bool RenderManager::AddRenderObject(const std::string &page_id,
-                                    const std::string &parent_ref, int index,
-                                    const char *data) {
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  wson_parser parser(data);
-  LOGD(
-      "[RenderManager] AddRenderObject >>>> pageId: %s, parentRef: %s, index: "
-      "%d, dom data: %s",
-      pageId.c_str(), parentRef.c_str(), index, parser.toStringUTF8().c_str());
-#endif
-
-  int64_t start_time = getCurrentTime();
-
-  if (page->is_platform_page()) {
-      RenderObject *child = Wson2RenderObject(data, page_id, static_cast<RenderPage*>(page)->reserve_css_styles());
-      static_cast<RenderPage*>(page)->ParseJsonTime(getCurrentTime() - start_time);
-
-      if (child == nullptr) return false;
-
-      return static_cast<RenderPage*>(page)->AddRenderObject(parent_ref, index, child);
-  }
-  else {
-      WsonGenerate(data, parent_ref, index, [=] (const std::string& ref,
-                                                const std::string& type,
-                                                const std::string& parentRef,
-                                                std::map<std::string, std::string>* styles,
-                                                std::map<std::string, std::string>* attrs,
-                                                std::set<std::string>* events,
-                                                int index) {
-          page->AddRenderObject(ref, type, parentRef, index, styles, attrs, events);
-      });
-      
-      return true;
-  }
-}
-
-bool RenderManager::AddRenderObject(const std::string &page_id, const std::string &parent_ref,
-                                    int index, RenderObject *root) {
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  wson_parser parser(data);
-  LOGD(
-      "[RenderManager] AddRenderObject >>>> pageId: %s, parentRef: %s, index: "
-      "%d, dom data: %s",
-      pageId.c_str(), parentRef.c_str(), index, parser.toStringUTF8().c_str());
-#endif
-
-  if (root == nullptr) return false;
-    
-  if (page->is_platform_page()) {
-      return static_cast<RenderPage*>(page)->AddRenderObject(parent_ref, index, root);
-  }
-  else {
-      return false;
-  }
-}
-    
-bool RenderManager::AddRenderObject(const std::string &page_id,
-                                    const std::string &parent_ref, int index,
-                                    std::function<RenderObject* (RenderPage*)> constructRoot) {
-    RenderPageBase *page = GetPage(page_id);
-    if (page == nullptr) return false;
-    
-#if RENDER_LOG
-    wson_parser parser(data);
-    LOGD(
-         "[RenderManager] AddRenderObject >>>> pageId: %s, parentRef: %s, index: "
-         "%d, dom data: %s",
-         pageId.c_str(), parentRef.c_str(), index, parser.toStringUTF8().c_str());
-#endif
-    
-    RenderObject *root = constructRoot(static_cast<RenderPage*>(page));
-    if (root == nullptr) return false;
-    
-    static_cast<RenderPage*>(page)->set_is_dirty(true);
-    return static_cast<RenderPage*>(page)->AddRenderObject(parent_ref, index, root);
-}
-
-bool RenderManager::RemoveRenderObject(const std::string &page_id,
-                                       const std::string &ref) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  LOGD("[RenderManager] RemoveRenderObject >>>> pageId: %s, ref: %s",
-       pageId.c_str(), ref.c_str());
-#endif
-
-  return page->RemoveRenderObject(ref);
-}
-
-bool RenderManager::MoveRenderObject(const std::string &page_id,
-                                     const std::string &ref,
-                                     const std::string &parent_ref, int index) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  LOGD(
-      "[RenderManager] MoveRenderObject >>>> pageId: %s, ref: %s, parentRef: "
-      "%s, index: %d",
-      pageId.c_str(), ref.c_str(), parentRef.c_str(), index);
-#endif
-
-  return page->MoveRenderObject(ref, parent_ref, index);
-}
-
-bool RenderManager::UpdateAttr(const std::string &page_id,
-                               const std::string &ref, const char *data) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  wson_parser parser(data);
-  LOGD("[RenderManager] UpdateAttr >>>> pageId: %s, ref: %s, data: %s",
-       pageId.c_str(), ref.c_str(), parser.toStringUTF8().c_str());
-#endif
-
-  int64_t start_time = getCurrentTime();
-  std::vector<std::pair<std::string, std::string>> *attrs = Wson2Pairs(data);
-  page->ParseJsonTime(getCurrentTime() - start_time);
-
-  return page->UpdateAttr(ref, attrs);
-}
-
-bool RenderManager::UpdateAttr(const std::string &page_id, const std::string &ref,
-                               std::vector<std::pair<std::string, std::string>> *attrPair) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  wson_parser parser(data);
-  LOGD("[RenderManager] UpdateAttr >>>> pageId: %s, ref: %s, data: %s",
-       pageId.c_str(), ref.c_str(), parser.toStringUTF8().c_str());
-#endif
-
-  return page->UpdateAttr(ref, attrPair);
-}
-
-bool RenderManager::UpdateStyle(const std::string &page_id,
-                                const std::string &ref, const char *data) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  wson_parser parser(data);
-  LOGD("[RenderManager] UpdateStyle >>>> pageId: %s, ref: %s, data: %s",
-       pageId.c_str(), ref.c_str(), parser.toStringUTF8().c_str());
-#endif
-
-  int64_t start_time = getCurrentTime();
-  std::vector<std::pair<std::string, std::string>> *styles = Wson2Pairs(data);
-  page->ParseJsonTime(getCurrentTime() - start_time);
-
-  return page->UpdateStyle(ref, styles);
-}
-
-
-bool RenderManager::UpdateStyle(const std::string &page_id, const std::string &ref,
-                                std::vector<std::pair<std::string, std::string>> *stylePair) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  wson_parser parser(data);
-  LOGD("[RenderManager] UpdateStyle >>>> pageId: %s, ref: %s, data: %s",
-       pageId.c_str(), ref.c_str(), parser.toStringUTF8().c_str());
-#endif
-
-  return page->UpdateStyle(ref, stylePair);
-}
-
-
-bool RenderManager::AddEvent(const std::string &page_id, const std::string &ref,
-                             const std::string &event) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  LOGD("[RenderManager] AddEvent >>>> pageId: %s, ref: %s, event: %s",
-       pageId.c_str(), ref.c_str(), event.c_str());
-#endif
-
-  return page->AddEvent(ref, event);
-}
-
-bool RenderManager::RemoveEvent(const std::string &page_id,
-                                const std::string &ref,
-                                const std::string &event) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return false;
-
-#if RENDER_LOG
-  LOGD("[RenderManager] RemoveEvent >>>> pageId: %s, ref: %s, event: %s",
-       pageId.c_str(), ref.c_str(), event.c_str());
-#endif
-    
-  return page->RemoveEvent(ref, event);
-}
-
-bool RenderManager::CreateFinish(const std::string &page_id) {
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) return false;
-
-  LOGE("RenderManager::CreateFinish %s", page_id.data());
-
-#if RENDER_LOG
-  LOGD("[RenderManager] CreateFinish >>>> pageId: %s", pageId.c_str());
-#endif
-
-  bool b = page->CreateFinish();
-
-#if RENDER_LOG
-  auto end_time = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now());
-  LOGE("DATA_RENDER, Wx End %lld",end_time);
-#endif
-  return b;
-}
-
-std::unique_ptr<ValueWithType> RenderManager::CallNativeModule(const char *page_id, const char *module, const char *method,
-                                                               const char *arguments, int arguments_length,
-                                                               const char *options, int options_length) {
-  if (strcmp(module, "meta") == 0) {
-    CallMetaModule(page_id, method, arguments);
-  }
-  RenderPageBase* page = GetPage(page_id);
-  if (page == nullptr){ //page not exist, call normal platform layer
-      return WeexCoreManager::Instance()->
-              getPlatformBridge()->
-              platform_side()->
-              CallNativeModule(page_id, module, method, arguments, arguments_length, options, options_length);
-  }
-  //redirect to page.
-  return page->CallNativeModule(module, method, arguments, arguments_length, options, options_length);
-}
-    
-void RenderManager::CallNativeComponent(const char *page_id, const char *ref,
-                                        const char *method,
-                                        const char *arguments,
-                                        int arguments_length,
-                                        const char *options,
-                                        int options_length) {
-  RenderPageBase* page = GetPage(page_id);
-  if (page == nullptr) {
-    WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->CallNativeComponent(page_id, ref, method, arguments, arguments_length,
-                          options, options_length);
-    return;
-  }
-  // redirect to page
-  page->CallNativeComponent(ref, method, arguments, arguments_length, options, options_length);
-}
-    
-void RenderManager::CallMetaModule(const char *page_id, const char *method, const char *arguments) {
-  if (strcmp(method, "setViewport") == 0) {
-    wson_parser parser(arguments);
-    if (parser.isArray(parser.nextType())) {
-      int size = parser.nextArraySize();
-      for (int i = 0; i < size; i++) {
-        uint8_t value_type = parser.nextType();
-        if (parser.isMap(value_type)) {
-          int map_size = parser.nextMapSize();
-          for (int j = 0; j < map_size; j++) {
-            std::string key = parser.nextMapKeyUTF8();
-            std::string value = parser.nextStringUTF8(parser.nextType());
-            if (key == WIDTH) {
-              setPageArgument(page_id, "viewportwidth", value);
-            }
-            else if (key == ROUND_OFF_DEVIATION) {
-              setPageArgument(page_id, "roundoffdeviation", value);
-            }
-            else if (key == "deviceWidth") {
-              setPageArgument(page_id, "devicewidth", value);
-            }
-            else if (key == "deviceHeight") {
-              // unsupported now
-            }
-            else if (key == "reserveCssStyles") {
-              setPageArgument(page_id, "reserveCssStyles", value);
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
-RenderPageBase *RenderManager::GetPage(const std::string &page_id) {
-  std::map<std::string, RenderPageBase *>::iterator iter =
-      this->pages_.find(page_id);
-  if (iter != this->pages_.end()) {
-    return iter->second;
-  } else {
-    return nullptr;
-  }
-}
-
-bool RenderManager::ClosePage(const std::string &page_id) {
-  auto pageArgs = removePageArguments(page_id);
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) {
-    /* Page in WeexCore is created when js outputs createBody command.
-     But before createBody, custom render page like heron page may be created.
-     So we must tell heron manager to close the page
-     */
-    auto findPageType = pageArgs.find("renderType");
-    if (findPageType != pageArgs.end()) {
-      auto target = RenderTargetManager::sharedInstance()->getRenderTarget(findPageType->second);
-      if (target) {
-        target->deletePage(page_id);
-      }
-    }
-      
-    return false;
-  }
-
-#if RENDER_LOG
-  LOGD("[RenderManager] ClosePage >>>> pageId: %s", pageId.c_str());
-#endif
-  page->OnRenderPageClose();
-  this->pages_.erase(page_id);
-  delete page;
-  page = nullptr;
-    return true;
-}
-  
-bool RenderManager::ReloadPageLayout(const std::string& page_id)
-{
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) return false;
-  return page->ReapplyStyles();
-}
-
-float RenderManager::viewport_width(const std::string &page_id) {
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) return kDefaultViewPortWidth;
-
-  return page->GetViewportWidth();
-}
-
-void RenderManager::set_viewport_width(const std::string &page_id, float viewport_width) {
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) {
-      // page is not created yet, we should store the view port value
-      setPageArgument(page_id, "viewportwidth", std::to_string(viewport_width));
-      return;
-  }
-
-  page->SetViewportWidth(viewport_width);
-}
-
-float RenderManager::DeviceWidth(const std::string &page_id) {
-  RenderPageBase *page = GetPage(page_id);
-  if(page == nullptr){
-    return WXCoreEnvironment::getInstance()->DeviceWidth();
-  }
-  return page->GetDeviceWidth();
-}
-
-void RenderManager::setDeviceWidth(const std::string &page_id, float device_width) {
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) {
-    // page is not created yet, we should store the device width value
-    setPageArgument(page_id, "devicewidth", std::to_string(device_width));
-    return;
-  }
-  page->SetDeviceWidth(device_width);
-}
-
-bool RenderManager::round_off_deviation(const std::string &page_id) {
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) return kDefaultRoundOffDeviation;
-
-  return page->GetRoundOffDeviation();
-}
-
-void RenderManager::set_round_off_deviation(const std::string &page_id, bool round_off_deviation) {
-  RenderPageBase *page = GetPage(page_id);
-  if (page == nullptr) {
-    setPageArgument(page_id, "roundoffdeviation", round_off_deviation ? "true" : "false");
-    return;
-  }
-
-  page->SetRoundOffDeviation(round_off_deviation);
-}
-    
-void RenderManager::setPageArgument(const std::string& pageId, const std::string& key, const std::string& value) {
-    if (pageId.empty() || key.empty()) {
-        return;
-    }
-    std::lock_guard<std::mutex> guard(page_args_mutex_);
-    page_args_[pageId][key] = value;
-}
-    
-std::string RenderManager::getPageArgument(const std::string& pageId, const std::string& key) {
-    std::lock_guard<std::mutex> guard(page_args_mutex_);
-    auto findPage = page_args_.find(pageId);
-    if (findPage != page_args_.end()) {
-        auto findKey = findPage->second.find(key);
-        if (findKey != findPage->second.end()) {
-            return findKey->second;
-        }
-    }
-    return "";
-}
-
-std::map<std::string, std::string> RenderManager::removePageArguments(const std::string& pageId) {
-    std::lock_guard<std::mutex> guard(page_args_mutex_);
-    std::map<std::string, std::string> result;
-    auto findPage = page_args_.find(pageId);
-    if (findPage != page_args_.end()) {
-        std::swap(result, findPage->second);
-        page_args_.erase(findPage);
-    }
-    return result;
-}
-
-void RenderManager::Batch(const std::string &page_id) {
-  RenderPageBase *page = this->GetPage(page_id);
-  if (page == nullptr) return;
-  if (!page->is_platform_page()) return;
-
-  static_cast<RenderPage*>(page)->Batch();
-}
-
-void RenderManager::initDeviceConfig(RenderPage *page, const std::string &page_id) {
-  if (page == nullptr) return;
-  
-  auto viewPortWidth = getPageArgument(page_id, "viewportwidth");
-  if (!viewPortWidth.empty()) {
-    page->set_viewport_width(getFloat(viewPortWidth.c_str()));
-  }
-  
-  auto deviceWidth = getPageArgument(page_id, "devicewidth");
-  if (!deviceWidth.empty()) {
-    page->set_device_width(getFloat(deviceWidth.c_str()));
-  }
-  
-  auto roundOff = getPageArgument(page_id, "roundoffdeviation");
-  if (!roundOff.empty()) {
-    page->set_round_off_deviation(getBool(roundOff));
-  }
-  
-  auto reserveCssStyles = getPageArgument(page_id, "reserveCssStyles");
-  if (!reserveCssStyles.empty()) {
-    page->set_reserve_css_styles(getBool(reserveCssStyles));
-  }
-}
-
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/manager/render_manager.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/manager/render_manager.h
deleted file mode 100644
index 9501b9c..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/manager/render_manager.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_MANAGER_RENDER_MANAGER_H_
-#define CORE_RENDER_MANAGER_RENDER_MANAGER_H_
-
-#include <map>
-#include <string>
-
-#include "core/css/constants_value.h"
-#include "core/render/node/render_object.h"
-#include "include/WeexApiHeader.h"
-
-namespace WeexCore {
-
-class RenderPageBase;
-class RenderPageCustom;
-class RenderPage;
-class RenderObject;
-
-class RenderManager {
- private:
-  RenderManager() : pages_() {}
-
-  ~RenderManager() {}
-
-  // just to release singleton object
-  class Garbo {
-   public:
-    ~Garbo() {
-      if (RenderManager::g_pInstance) {
-        delete RenderManager::g_pInstance;
-      }
-    }
-  };
-
-  static Garbo garbo;
-
- public:
-  void Batch(const std::string &page_id);
-
-  // create root node
-  bool CreatePage(const std::string& page_id, const char *data);
-    
-  // create platform page
-  bool CreatePage(const std::string& page_id, RenderObject *root);
-    
-  bool CreatePage(const std::string& page_id, std::function<RenderObject* (RenderPage*)> constructRoot);
-    
-  // create custom page with self rendering
-  RenderPageCustom* CreateCustomPage(const std::string& page_id, const std::string& page_type);
-
-  /** use auto constructor is bad idea, it cann't transfer binary, use char* is
-   * better */
-  bool AddRenderObject(const std::string &page_id,
-                       const std::string &parent_ref, int index,
-                       const char *data);
-
-  bool AddRenderObject(const std::string &page_id,
-                       const std::string &parent_ref, int index,
-                       RenderObject *root);
-    
-  bool AddRenderObject(const std::string &page_id,
-                       const std::string &parent_ref, int index,
-                       std::function<RenderObject* (RenderPage*)> constructRoot);
-
-  bool RemoveRenderObject(const std::string &page_id, const std::string &ref);
-
-  bool MoveRenderObject(const std::string &page_id, const std::string &ref,
-                        const std::string &parent_ref, int index);
-
-  bool UpdateAttr(const std::string &page_id, const std::string &ref,
-                  const char *data);
-
-  bool UpdateAttr(const std::string &page_id, const std::string &ref,
-                  std::vector<std::pair<std::string, std::string>> *attrPair);
-
-  bool UpdateStyle(const std::string &page_id, const std::string &ref,
-                   const char *data);
-
-  bool UpdateStyle(const std::string &page_id, const std::string &ref,
-                   std::vector<std::pair<std::string, std::string>> *stylePair);
-
-  bool AddEvent(const std::string &page_id, const std::string &ref,
-                const std::string &event);
-
-  bool RemoveEvent(const std::string &page_id, const std::string &ref,
-                   const std::string &event);
-
-  bool CreateFinish(const std::string &page_id);
-
-  std::unique_ptr<ValueWithType> CallNativeModule(const char *page_id, const char *module, const char *method,
-                                                  const char *arguments, int arguments_length, const char *options,
-                                                  int options_length);
-    
-  void CallNativeComponent(const char *page_id, const char *ref,
-                           const char *method,
-                           const char *arguments,
-                           int arguments_length,
-                           const char *options,
-                           int options_length);
-
-  void CallMetaModule(const char *page_id, const char *method, const char *arguments);
-
-  RenderPageBase *GetPage(const std::string &page_id);
-
-  bool ClosePage(const std::string &page_id);
-    
-  bool ReloadPageLayout(const std::string& page_id);
-
-  float viewport_width(const std::string &page_id);
-
-  void set_viewport_width(const std::string &page_id, float viewport_width);
-
-  void setDeviceWidth(const std::string &page_id, float device_width);
-
-  float DeviceWidth(const std::string &page_id);
-
-  bool round_off_deviation(const std::string &page_id);
-
-  void set_round_off_deviation(const std::string &page_id, bool round_off_deviation);
-    
-  void setPageArgument(const std::string& pageId, const std::string& key, const std::string& value);
-  std::string getPageArgument(const std::string& pageId, const std::string& key);
-  std::map<std::string, std::string> removePageArguments(const std::string& pageId); // remove and return the page arguments
-
-  static RenderManager *GetInstance() {
-    if (NULL == g_pInstance) {
-      g_pInstance = new RenderManager();
-    }
-    return g_pInstance;
-  }
-
- private:
-    void initDeviceConfig(RenderPage *page, const std::string &page_id);
- private:
-  static RenderManager *g_pInstance;
-
-  std::map<std::string, RenderPageBase *> pages_;
-  std::mutex page_args_mutex_;
-  std::map<std::string, std::map<std::string, std::string>> page_args_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_MANAGER_RENDER_MANAGER_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_appbar_factory.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_appbar_factory.h
deleted file mode 100644
index 803666f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_appbar_factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_APPBAR_FACTORY_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_APPBAR_FACTORY_H_
-
-#include "core/render/node/factory/render_factory_interface.h"
-#include "core/render/node/render_appbar.h"
-
-namespace WeexCore {
-
-class RenderAppBarFactory : public IRenderFactory {
- public:
-  IRenderObject *CreateRender() { return new RenderAppBar(); }
-};
-
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_APPBAR_FACTORY_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_cell_factory.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_cell_factory.h
deleted file mode 100644
index d6d439a..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_cell_factory.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_CELL_FACTORY_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_CELL_FACTORY_H_
-
-#include "core/render/node/factory/render_factory_interface.h"
-#include "core/render/node/render_cell.h"
-
-namespace WeexCore {
-
-class RenderCellFactory : public IRenderFactory {
- public:
-  IRenderObject *CreateRender() { return new RenderCell(); }
-};
-
-}  // namespace WeexCore
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_CELL_FACTORY_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_creator.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_creator.cpp
deleted file mode 100644
index 83aaa6e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_creator.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include "core/render/node/factory/render_creator.h"
-#include "core/render/node/factory/render_appbar_factory.h"
-#include "core/render/node/factory/render_factory_interface.h"
-#include "core/render/node/factory/render_list_factory.h"
-#include "core/render/node/factory/render_mask_factory.h"
-#include "core/render/node/factory/render_object_interface.h"
-#include "core/render/node/factory/render_scroller_factory.h"
-#include "core/render/node/factory/render_text_factory.h"
-#include "core/render/node/factory/render_type.h"
-#include "core/render/node/factory/simple_render_factory.h"
-
-namespace WeexCore {
-
-RenderCreator *RenderCreator::g_pInstance = nullptr;
-
-IRenderFactory *RenderCreator::CreateFactory(const std::string &type) {
-  if (type == kRenderText) {
-    return new RenderTextFactory();
-  } else if (type == kRenderList || type == kRenderWaterfall ||
-             type == kRenderRecycleList) {
-    return new RenderListFactory();
-  } else if (type == kRenderMask) {
-    return new RenderMaskFactory();
-  } else if (type == kRenderScroller) {
-    return new RenderScrollerFactory();
-  } else if (type == kRenderAppBar) {
-    return new RenderAppBarFactory();
-  } else {
-    // search for affine types
-    auto findAffine = affineTypes_.find(type);
-    if (findAffine != affineTypes_.end()) {
-      return CreateFactory(findAffine->second);
-    }
-    else {
-      return new RenderCommonFactory();
-    }
-  }
-}
-
-IRenderObject *RenderCreator::CreateRender(const std::string &type,
-                                           const std::string &ref) {
-  IRenderFactory *factory = CreateFactory(type);
-  if (factory == nullptr) {
-    return nullptr;
-  }
-
-  IRenderObject *render = factory->CreateRender();
-  render->set_ref(ref);
-  render->set_type(type);
-  delete factory;
-  return render;
-}
-
-void RenderCreator::RegisterAffineType(const std::string &type, const std::string& asType) {
-  if (!type.empty() && !asType.empty() && type != asType) {
-    affineTypes_[type] = asType;
-  }
-}
-
-bool RenderCreator::IsAffineType(const std::string &type, const std::string& asType) {
-  if (type == asType) {
-    return true;
-  }
-
-  auto findAffine = affineTypes_.find(type);
-  if (findAffine == affineTypes_.end()) {
-    return false;
-  }
-  return IsAffineType(findAffine->second, asType);
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_creator.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_creator.h
deleted file mode 100644
index b3775d1..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_creator.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_CREATOR_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_CREATOR_H_
-
-#include <string>
-#include <map>
-
-namespace WeexCore {
-
-class IRenderObject;
-class IRenderFactory;
-
-class RenderCreator {
- private:
-  RenderCreator() {}
-
-  ~RenderCreator() {}
-
-  // just to release singleton object
-  class Garbo {
-   public:
-    ~Garbo() {
-      if (RenderCreator::g_pInstance) {
-        delete RenderCreator::g_pInstance;
-      }
-    }
-  };
-
-  static Garbo garbo;
-
- public:
-  static RenderCreator *GetInstance() {
-    if (!g_pInstance) {
-      g_pInstance = new RenderCreator();
-    }
-    return g_pInstance;
-  }
-
-  IRenderFactory *CreateFactory(const std::string &type);
-  IRenderObject *CreateRender(const std::string &type, const std::string &ref);
-  
-  void RegisterAffineType(const std::string &type, const std::string& asType);
-  bool IsAffineType(const std::string &type, const std::string& asType);
-
- private:
-  static RenderCreator *g_pInstance;
-  
-  std::map<std::string, std::string> affineTypes_; // affineTypes_[A] = B means A is rendered like B
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_CREATOR_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_factory_interface.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_factory_interface.h
deleted file mode 100644
index 9115bf7..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_factory_interface.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_FACTORY_INTERFACE_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_FACTORY_INTERFACE_H_
-
-#include "core/render/node/factory/render_object_interface.h"
-
-namespace WeexCore {
-class IRenderFactory {
- public:
-  virtual IRenderObject *CreateRender() = 0;
-  virtual ~IRenderFactory() {}
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_FACTORY_INTERFACE_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_list_factory.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_list_factory.h
deleted file mode 100644
index 50735f9..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_list_factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_LIST_FACTORY_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_LIST_FACTORY_H_
-
-#include "core/render/node/factory/render_factory_interface.h"
-#include "core/render/node/render_list.h"
-
-namespace WeexCore {
-
-class RenderListFactory : public IRenderFactory {
- public:
-  IRenderObject *CreateRender() { return new RenderList(); }
-};
-
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_LIST_FACTORY_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_mask_factory.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_mask_factory.h
deleted file mode 100644
index edd516f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_mask_factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_MASK_FACTORY_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_MASK_FACTORY_H_
-
-#include "core/render/node/factory/render_factory_interface.h"
-#include "core/render/node/render_mask.h"
-
-namespace WeexCore {
-
-class RenderMaskFactory : public IRenderFactory {
- public:
-  IRenderObject *CreateRender() { return new RenderMask(); }
-};
-
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_MASK_FACTORY_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_object_interface.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_object_interface.h
deleted file mode 100644
index 11a5ea9..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_object_interface.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_OBJECT_INTERFACE_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_OBJECT_INTERFACE_H_
-
-#include <string>
-
-#include "core/layout/layout.h"
-
-namespace WeexCore {
-
-class IRenderObject : public WXCoreLayoutNode {
- public:
-  virtual ~IRenderObject() {}
-  inline void set_ref(const std::string& ref) { this->ref_ = ref; }
-
-  inline const std::string &ref() const { return ref_; }
-
-  inline void set_page_id(const std::string& page_id) { this->page_id_ = page_id; }
-
-  inline const std::string &page_id() const { return page_id_; }
-
-  inline void set_type(const std::string& type) { this->tyle_ = type; }
-
-  inline const std::string &type() const { return tyle_; }
-
-  inline void CopyFrom(IRenderObject *src) {
-    WXCoreLayoutNode::copyFrom(src);
-    set_ref(src->ref());
-    set_page_id(src->page_id());
-    set_type(src->type());
-  }
-
- private:
-  std::string page_id_ = "";
-  std::string ref_ = "";
-  std::string tyle_ = "";
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_OBJECT_INTERFACE_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_scroller_factory.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_scroller_factory.h
deleted file mode 100644
index 53d268e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_scroller_factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_SCROLLER_FACTORY_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_SCROLLER_FACTORY_H_
-
-#include "core/render/node/factory/render_factory_interface.h"
-#include "core/render/node/render_scroller.h"
-
-namespace WeexCore {
-
-class RenderScrollerFactory : public IRenderFactory {
- public:
-  IRenderObject *CreateRender() { return new RenderScroller(); }
-};
-
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_SCROLLER_FACTORY_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_text_factory.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_text_factory.h
deleted file mode 100644
index e54d31b..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_text_factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_TEXT_FACTORY_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_TEXT_FACTORY_H_
-
-#include "core/render/node/factory/render_factory_interface.h"
-#include "core/render/node/render_text.h"
-
-namespace WeexCore {
-
-class RenderTextFactory : public IRenderFactory {
- public:
-  IRenderObject *CreateRender() { return new RenderText(); }
-};
-
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_TEXT_FACTORY_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_type.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_type.h
deleted file mode 100644
index c7242b8..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/render_type.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_RENDER_TYPE_H_
-#define CORE_RENDER_NODE_FACTORY_RENDER_TYPE_H_
-
-#include <string>
-
-namespace WeexCore {
-constexpr char kRenderCell[] = "cell";
-constexpr char kRenderCellSlot[] = "cell-slot";
-constexpr char kRenderList[] = "list";
-constexpr char kHList[] = "hlist";
-constexpr char kRenderRecycleList[] = "recycle-list";
-constexpr char kRenderMask[] = "mask";
-constexpr char kRenderScroller[] = "scroller";
-constexpr char kRenderText[] = "text";
-constexpr char kRenderHeader[] = "header";
-constexpr char kRenderFooter[] = "footer";
-constexpr char kRenderWaterfall[] = "waterfall";
-constexpr char kRenderAppBar[] = "appbar";
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_RENDER_TYPE_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/simple_render_factory.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/simple_render_factory.h
deleted file mode 100644
index f7e9b22..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/factory/simple_render_factory.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_FACTORY_SIMPLE_RENDER_FACTORY_H_
-#define CORE_RENDER_NODE_FACTORY_SIMPLE_RENDER_FACTORY_H_
-
-#include "core/render/node/factory/render_factory_interface.h"
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-
-class RenderCommonFactory : public IRenderFactory {
- public:
-  IRenderObject *CreateRender() { return new RenderObject(); }
-};
-
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_FACTORY_SIMPLE_RENDER_FACTORY_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_appbar.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_appbar.cpp
deleted file mode 100644
index 216906b..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_appbar.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include <utility>
-
-#include "core/common/view_utils.h"
-#include "core/config/core_environment.h"
-#include "core/css/constants_name.h"
-#include "core/render/node/render_appbar.h"
-
-namespace WeexCore {
-
-std::map<std::string, std::string> *RenderAppBar::GetDefaultStyle() {
-  this->default_nav_width_ = getFloat(
-      WXCoreEnvironment::getInstance()->GetOption("defaultNavWidth").c_str());
-
-  this->default_overflow_width_ =
-      getFloat(WXCoreEnvironment::getInstance()
-                   ->GetOption("defaultOverflowWidth")
-                   .c_str());
-
-  std::string appbar_color =
-      WXCoreEnvironment::getInstance()->GetOption("appbar_color");
-  std::string appbar_background_color =
-      WXCoreEnvironment::getInstance()->GetOption("appbar_background_color");
-
-  std::map<std::string, std::string> *style =
-      new std::map<std::string, std::string>();
-#if OS_IOS
-  style->insert(std::pair<std::string, std::string>(PADDING_LEFT, "44"));
-  style->insert(std::pair<std::string, std::string>(PADDING_RIGHT, "44"));
-#else
-  style->insert(std::pair<std::string, std::string>(PADDING_LEFT, "0"));
-  style->insert(std::pair<std::string, std::string>(PADDING_RIGHT, "0"));
-#endif
-
-  if (!appbar_color.empty() && appbar_color != "" && !StyleExist(COLOR))
-    style->insert(std::pair<std::string, std::string>(COLOR, appbar_color));
-  if (!appbar_background_color.empty() && appbar_background_color != "" &&
-      !StyleExist(BACKGROUND_COLOR))
-    style->insert(std::pair<std::string, std::string>(BACKGROUND_COLOR,
-                                                      appbar_background_color));
-  return style;
-}
-
-bool RenderAppBar::StyleExist(const std::string &key) {
-  std::string value = GetStyle(key);
-  return !value.empty() && value != "";
-}
-
-StyleType RenderAppBar::ApplyStyle(const std::string &key,
-                                   const std::string &value,
-                                   const bool updating) {
-  if (key == PADDING) {
-    UpdateStyleInternal(key, value, 0, [=](float foo) {
-        setPadding(kPaddingLeft, foo + this->default_nav_width_);
-        setPadding(kPaddingRight, foo + this->default_overflow_width_);
-        setPadding(kPaddingTop, foo);
-        setPadding(kPaddingBottom, foo);
-    });
-    return kTypePadding;
-  } else if (key == PADDING_LEFT) {
-    UpdateStyleInternal(key, value, 0, [=](float foo) {
-      setPadding(kPaddingLeft, foo + this->default_nav_width_);
-    });
-    return kTypePadding;
-  } else if (key == PADDING_RIGHT) {
-    UpdateStyleInternal(key, value, 0, [=](float foo) {
-      setPadding(kPaddingRight, foo + this->default_overflow_width_);
-    });
-    return kTypePadding;
-  } else {
-    return RenderObject::ApplyStyle(key, value, updating);
-  }
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_appbar.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_appbar.h
deleted file mode 100644
index 24e3957..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_appbar.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_RENDER_APPBAR_H_
-#define CORE_RENDER_NODE_RENDER_APPBAR_H_
-
-#include <map>
-#include <string>
-
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-class RenderAppBar : public RenderObject {
- private:
-  std::map<std::string, std::string> *GetDefaultStyle();
-
-  bool StyleExist(const std::string &key);
-
- public:
-  StyleType ApplyStyle(const std::string &key, const std::string &value,
-                       const bool updating);
-
- private:
-  float default_nav_width_;
-  float default_overflow_width_;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_RENDER_APPBAR_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_cell.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_cell.h
deleted file mode 100644
index 3421b6f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_cell.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_RENDER_CELL_H_
-#define CORE_RENDER_NODE_RENDER_CELL_H_
-
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-class RenderCell : public RenderObject {};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_RENDER_CELL_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_list.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_list.cpp
deleted file mode 100644
index 0e724e9..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_list.cpp
+++ /dev/null
@@ -1,381 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <math.h>
-#include <cmath>
-#include <utility>
-
-#include "core/common/view_utils.h"
-#include "core/css/constants_name.h"
-#include "core/render/manager/render_manager.h"
-#include "core/render/node/factory/render_type.h"
-#include "core/render/node/render_list.h"
-#include "core/render/node/render_object.h"
-#include "core/render/page/render_page.h"
-#include "core/render/node/factory/render_creator.h"
-
-namespace WeexCore {
-
-RenderList::~RenderList() {
-  if (this->cell_slots_copys_.size() > 0) {
-    for (auto it = this->cell_slots_copys_.begin();
-         it != this->cell_slots_copys_.end(); ++it) {
-      RenderObject *child = *it;
-      if (child) {
-        delete child;
-        child = nullptr;
-      }
-    }
-    this->cell_slots_copys_.clear();
-  }
-
-  if (this->cell_slots_.size() > 0) {
-    for (auto it = this->cell_slots_.begin(); it != this->cell_slots_.end();
-         ++it) {
-      RenderObject *child = *it;
-      if (child) {
-        delete child;
-        child = nullptr;
-      }
-    }
-    this->cell_slots_.clear();
-  }
-}
-
-void RenderList::AddCellSlotCopyTrack(RenderObject *cell_slot) {
-  cell_slot->setParent(this, cell_slot);
-  this->cell_slots_copys_.push_back(cell_slot);
-}
-
-std::map<std::string, std::string> *RenderList::GetDefaultStyle() {
-  std::map<std::string, std::string> *style =
-      new std::map<std::string, std::string>();
-
-  bool is_vertical = true;
-  RenderObject *parent = static_cast<RenderObject *>(getParent());
-
-  if (parent != nullptr && !parent->type().empty()) {
-    if (parent->type() == kHList) {
-      is_vertical = false;
-    } else if (TakeOrientation() == HORIZONTAL_VALUE) {
-      is_vertical = false;
-    }
-  }
-
-  std::string prop = is_vertical ? HEIGHT : WIDTH;
-
-  if (prop == HEIGHT && isnan(getStyleHeight()) && !this->is_set_flex_) {
-    this->is_set_flex_ = true;
-    style->insert(std::pair<std::string, std::string>(FLEX, "1"));
-  } else if (prop == WIDTH && isnan(TakeStyleWidth()) && !this->is_set_flex_) {
-    this->is_set_flex_ = true;
-    style->insert(std::pair<std::string, std::string>(FLEX, "1"));
-  }
-
-  return style;
-}
-
-void RenderList::set_flex(const float flex) {
-  this->is_set_flex_ = true;
-  WXCoreLayoutNode::set_flex(flex);
-}
-
-std::map<std::string, std::string> *RenderList::GetDefaultAttr() {
-  if (!this->is_pre_calculate_cell_width_) {
-    PreCalculateCellWidth();
-  }
-  return nullptr;
-}
-
-void RenderList::PreCalculateCellWidth() {
-  std::map<std::string, std::string> *attrs =
-      new std::map<std::string, std::string>();
-  if (attributes() != nullptr) {
-    this->column_count_ = TakeColumnCount();
-    this->column_width_ = TakeColumnWidth();
-    this->column_gap_ = TakeColumnGap();
-
-    this->left_gap_ = TakeLeftGap();
-    this->right_gap_ = TakeRightGap();
-
-    this->available_width_ =
-        TakeStyleWidth() -
-        getWebPxByWidth(getPaddingLeft(), RenderManager::GetInstance()->viewport_width(page_id())) -
-        getWebPxByWidth(getPaddingRight(), RenderManager::GetInstance()->viewport_width(page_id()));
-
-    if (AUTO_VALUE == this->column_count_ &&
-        AUTO_VALUE == this->column_width_) {
-      this->column_count_ = COLUMN_COUNT_NORMAL;
-      this->column_width_ = (this->available_width_ -
-                             ((this->column_count_ - 1) * this->column_gap_)) /
-                            this->column_count_;
-      this->column_width_ = this->column_width_ > 0 ? this->column_width_ : 0;
-    } else if (AUTO_VALUE == this->column_width_ &&
-               AUTO_VALUE != this->column_count_) {
-      this->column_width_ =
-          (this->available_width_ - this->left_gap_ - this->right_gap_ -
-           ((this->column_count_ - 1) * this->column_gap_)) /
-          this->column_count_;
-      this->column_width_ = this->column_width_ > 0 ? this->column_width_ : 0;
-    } else if (AUTO_VALUE != this->column_width_ &&
-               AUTO_VALUE == this->column_count_) {
-      this->column_count_ =
-          static_cast<int>(round((this->available_width_ + this->column_gap_) /
-                                     (this->column_width_ + this->column_gap_) -
-                                 0.5f));
-      this->column_count_ = this->column_count_ > 0 ? this->column_count_ : 1;
-      if (this->column_count_ <= 0) {
-        this->column_count_ = COLUMN_COUNT_NORMAL;
-      }
-      this->column_width_ = ((this->available_width_ + this->column_gap_ -
-                              this->left_gap_ - this->right_gap_) /
-                             this->column_count_) -
-                            this->column_gap_;
-
-    } else if (AUTO_VALUE != this->column_width_ &&
-               AUTO_VALUE != this->column_count_) {
-      int column_count =
-          static_cast<int>(round((this->available_width_ + this->column_gap_ -
-                                  this->left_gap_ - this->right_gap_) /
-                                     (this->column_width_ + this->column_gap_) -
-                                 0.5f));
-      this->column_count_ =
-          column_count > this->column_count_ ? this->column_count_ : column_count;
-      if (this->column_count_ <= 0) {
-        this->column_count_ = COLUMN_COUNT_NORMAL;
-      }
-      this->column_width_ = ((this->available_width_ + this->column_gap_ -
-                              this->left_gap_ - this->right_gap_) /
-                             this->column_count_) -
-                            this->column_gap_;
-    }
-
-    std::string span_offsets = CalculateSpanOffset();
-
-    this->is_pre_calculate_cell_width_ = true;
-    if (TakeColumnCount() > 0 || TakeColumnWidth() > 0 ||
-        this->column_count_ >= COLUMN_COUNT_NORMAL) {
-      attrs->insert(std::pair<std::string, std::string>(
-          COLUMN_COUNT, to_string(this->column_count_)));
-      attrs->insert(std::pair<std::string, std::string>(
-          COLUMN_GAP, to_string(this->column_gap_)));
-      attrs->insert(std::pair<std::string, std::string>(
-          COLUMN_WIDTH, to_string(this->column_width_)));
-    }
-    if (span_offsets.length() > 0) {
-      attrs->insert(std::pair<std::string, std::string>(
-          SPAN_OFFSETS, to_string(span_offsets)));
-    }
-
-    for (auto iter = attrs->cbegin(); iter != attrs->cend(); iter++) {
-      RenderObject::UpdateAttr(iter->first, iter->second);
-    }
-  }
-
-  RenderPage *page = GetRenderPage();
-
-  if (page != nullptr) page->SendUpdateAttrAction(this, attrs);
-
-  if (attrs != nullptr) {
-    attrs->clear();
-    delete attrs;
-    attrs = nullptr;
-  }
-}
-
-std::string RenderList::CalculateSpanOffset() {
-  std::string span_offsets;
-  float divide = available_width_ / column_count_;
-  float item_start_pos = 0;
-  if (this->left_gap_ > 0 || this->right_gap_ > 0 || column_gap_ > 0) {
-    span_offsets.append("[");
-    for (int i = 0; i < this->column_count_; i++) {
-      if (i == 0) {
-        item_start_pos += left_gap_;
-      } else {
-        item_start_pos += column_gap_ + column_width_;
-      }
-      float span_offset = item_start_pos - i * divide;
-      span_offsets.append(to_string(span_offset));
-      if (i != this->column_count_ - 1) {
-        span_offsets.append(",");
-      }
-    }
-    span_offsets.append("]");
-  }
-  return span_offsets;
-}
-
-float RenderList::TakeStyleWidth() {
-  float width =
-      getWebPxByWidth(getLayoutWidth(), RenderManager::GetInstance()->viewport_width(page_id()));
-  if (isnan(width) || width <= 0) {
-    if (getParent() != nullptr) {
-      width = getWebPxByWidth(getParent()->getLayoutWidth(),
-                              RenderManager::GetInstance()->viewport_width(page_id()));
-    }
-    if (isnan(width) || width <= 0) {
-      width = getWebPxByWidth(RenderObject::getStyleWidth(),
-                              RenderManager::GetInstance()->viewport_width(page_id()));
-    }
-  }
-  if (isnan(width) || width <= 0) {
-    width = RenderManager::GetInstance()->viewport_width(page_id());
-  }
-  return width;
-}
-
-int RenderList::AddRenderObject(int index, RenderObject *child) {
-  if (type() == kRenderRecycleList &&
-      (child->type() == kRenderCellSlot || child->type() == kRenderCell ||
-       child->type() == kRenderHeader)) {
-    child->setParent(this, child);
-    this->cell_slots_.insert(this->cell_slots_.end(), child);
-    index = -1;
-  } else {
-    index = RenderObject::AddRenderObject(index, child);
-  }
-
-  if (!this->is_pre_calculate_cell_width_) {
-    PreCalculateCellWidth();
-  }
-
-  if (this->column_width_ != 0 && !isnan(this->column_width_)) {
-    AddRenderObjectWidth(child, false);
-  }
-  return index;
-}
-
-void RenderList::AddRenderObjectWidth(RenderObject *child,
-                                      const bool updating) {
-  if ((RenderCreator::GetInstance()->IsAffineType(type(), kRenderWaterfall)) || type() == kRenderRecycleList) {
-    if (child->type() == kRenderHeader || child->type() == kRenderFooter) {
-      child->ApplyStyle(WIDTH, to_string(this->available_width_), updating);
-    } else if (child->is_sticky()) {
-      child->ApplyStyle(WIDTH, to_string(this->available_width_), updating);
-    } else if (child->type() == kRenderCell ||
-               child->type() == kRenderCellSlot) {
-      child->ApplyStyle(WIDTH, to_string(this->column_width_), updating);
-    }
-  }
-}
-
-
-void RenderList::AddAttr(std::string key, std::string value) {
-  MapInsertOrAssign(&mOriginalAttrs, key, value);
-  RenderObject::AddAttr(key, value);
-}
-
-
-void RenderList::UpdateAttr(std::string key, std::string value) {
-  MapInsertOrAssign(&mOriginalAttrs, key, value);
-  RenderObject::UpdateAttr(key, value);
-
-  if (!GetAttr(COLUMN_COUNT).empty() || !GetAttr(COLUMN_GAP).empty() ||
-      !GetAttr(COLUMN_WIDTH).empty()) {
-    PreCalculateCellWidth();
-
-    if (this->column_width_ == 0 && isnan(this->column_width_)) {
-      return;
-    }
-
-    Index count = getChildCount();
-    for (Index i = 0; i < count; i++) {
-      RenderObject *child = GetChild(i);
-      AddRenderObjectWidth(child, true);
-    }
-  }
-}
-
-static const std::string GetMapAttr(std::map<std::string,std::string>* attrs,  const std::string &key) {
-  if (attrs == nullptr) return "";
-  std::map<std::string, std::string>::iterator iter = attrs->find(key);
-  if (iter != attrs->end()) {
-    return iter->second;
-  } else {
-    return "";
-  }
-}
-
-float RenderList::TakeColumnCount() {
-  std::string column_count = GetMapAttr(&mOriginalAttrs, COLUMN_COUNT);
-
-  if (column_count.empty() || column_count == AUTO) {
-    return AUTO_VALUE;
-  }
-
-  float column_count_value = getFloat(column_count.c_str());
-  return (column_count_value > 0 && !isnan(column_count_value)) ? column_count_value
-                                                            : AUTO_VALUE;
-}
-
-float RenderList::TakeColumnGap() {
-  std::string column_gap = GetMapAttr(&mOriginalAttrs, COLUMN_GAP);
-
-  if (column_gap.empty() || column_gap == NORMAL) {
-    return COLUMN_GAP_NORMAL;
-  }
-
-  float column_gap_value = getFloat(column_gap.c_str());
-  return (column_gap_value > 0 && !isnan(column_gap_value)) ? column_gap_value
-                                                        : AUTO_VALUE;
-}
-
-float RenderList::TakeColumnWidth() {
-  std::string column_width = GetMapAttr(&mOriginalAttrs, COLUMN_WIDTH);
-
-  if (column_width.empty() || column_width == AUTO) {
-    return AUTO_VALUE;
-  }
-
-  float column_width_value = getFloat(column_width.c_str());
-  return (column_width_value > 0 && !isnan(column_width_value)) ? column_width_value
-                                                            : 0;
-}
-
-float RenderList::TakeLeftGap() {
-  std::string left_gap =GetMapAttr(&mOriginalAttrs, LEFT_GAP);
-
-  if (left_gap.empty() || left_gap == AUTO) {
-    return 0;
-  }
-
-  float left_gap_value = getFloat(left_gap.c_str());
-  return (left_gap_value > 0 && !isnan(left_gap_value)) ? left_gap_value : 0;
-}
-
-float RenderList::TakeRightGap() {
-  std::string right_gap =GetMapAttr(&mOriginalAttrs, RIGHT_GAP);
-
-  if (right_gap.empty() || right_gap == AUTO) {
-    return 0;
-  }
-
-  float right_gap_value = getFloat(right_gap.c_str());
-  return (right_gap_value > 0 && !isnan(right_gap_value)) ? right_gap_value : 0;
-}
-
-int RenderList::TakeOrientation() {
-  std::string direction = GetAttr(SCROLL_DIRECTION);
-  if (HORIZONTAL == direction) {
-    return HORIZONTAL_VALUE;
-  }
-  return VERTICAL_VALUE;
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_list.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_list.h
deleted file mode 100644
index 7250df9..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_list.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_RENDER_LIST_H_
-#define CORE_RENDER_NODE_RENDER_LIST_H_
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include "core/css/constants_value.h"
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-
-class RenderList : public RenderObject {
- public:
-  ~RenderList();
-
-  void set_flex(const float flex) override;
-
-  void AddCellSlotCopyTrack(RenderObject *cell_slot);
-
-  std::map<std::string, std::string> *GetDefaultStyle() override;
-
-  std::map<std::string, std::string> *GetDefaultAttr() override;
-
-  void PreCalculateCellWidth();
-
-  std::string CalculateSpanOffset();
-
-  float TakeStyleWidth();
-
-  int AddRenderObject(int index, RenderObject *child) override;
-
-  void AddRenderObjectWidth(RenderObject *child, const bool updating);
-
-  void AddAttr(std::string key, std::string value) override;
-
-  void UpdateAttr(std::string key, std::string value) override;
-
-  float TakeColumnCount();
-
-  float TakeColumnGap();
-
-  float TakeColumnWidth();
-
-  float TakeLeftGap();
-
-  float TakeRightGap();
-
-  int TakeOrientation();
-
-  inline float CalculateFreeSpaceAlongMainAxis(
-      const float &width, const float &height,
-      const float &currentLength) const override {
-    return NAN;
-  }
-
-  inline std::vector<RenderObject *> &CellSlots() { return cell_slots_; }
-
- private:
-  bool is_pre_calculate_cell_width_ = false;
-  int column_count_ = COLUMN_COUNT_NORMAL;
-  float column_width_ = AUTO_VALUE;
-  float available_width_ = 0;
-  float column_gap_ = COLUMN_GAP_NORMAL;
-  bool is_set_flex_ = false;
-  std::vector<RenderObject *> cell_slots_;
-  std::vector<RenderObject *> cell_slots_copys_;
-  float left_gap_ = 0;
-  float right_gap_ = 0;
-  std::map<std::string,std::string> mOriginalAttrs;
-
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_RENDER_LIST_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_mask.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_mask.cpp
deleted file mode 100644
index 4e3bd19..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_mask.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include <cstdlib>
-#include <utility>
-
-#include "core/common/view_utils.h"
-#include "core/render/manager/render_manager.h"
-#include "core/config/core_environment.h"
-#include "core/css/constants_name.h"
-#include "core/render/node/render_mask.h"
-
-namespace WeexCore {
-
-std::map<std::string, std::string> *RenderMask::GetDefaultStyle() {
-  std::map<std::string, std::string> *style =
-      new std::map<std::string, std::string>();
-
-  int width = WXCoreEnvironment::getInstance()->DeviceWidth();
-  int height = WXCoreEnvironment::getInstance()->DeviceHeight();
-
-  if (WXCoreEnvironment::getInstance()->GetOption("screen_width_pixels") !=
-          "" &&
-      WXCoreEnvironment::getInstance()->GetOption("screen_height_pixels") !=
-          "") {
-    width = atoi(WXCoreEnvironment::getInstance()
-                     ->GetOption("screen_width_pixels")
-                     .c_str());
-    height = atoi(WXCoreEnvironment::getInstance()
-                      ->GetOption("screen_height_pixels")
-                      .c_str());
-  }
-
-#if OS_IOS
-  // iOS height includes status bar
-#else
-  if (WXCoreEnvironment::getInstance()->GetOption("status_bar_height") != "") {
-    int status_bar_height = atoi(WXCoreEnvironment::getInstance()
-                                   ->GetOption("status_bar_height")
-                                   .c_str());
-    height -= status_bar_height;
-  }
-#endif
-
-  style->insert(std::pair<std::string, std::string>(POSITION, "absolute"));
-  style->insert(std::pair<std::string, std::string>(
-      WIDTH, to_string(getWebPxByWidth(width, RenderManager::GetInstance()->viewport_width(page_id())))));
-  style->insert(std::pair<std::string, std::string>(
-      HEIGHT, to_string(getWebPxByWidth(height, RenderManager::GetInstance()->viewport_width(page_id())))));
-  style->insert(std::pair<std::string, std::string>(TOP, "0"));
-  return style;
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_mask.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_mask.h
deleted file mode 100644
index 38201d0..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_mask.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_RENDER_MASK_H_
-#define CORE_RENDER_NODE_RENDER_MASK_H_
-
-#include <map>
-#include <string>
-
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-
-class RenderMask : public RenderObject {
- public:
-  std::map<std::string, std::string> *GetDefaultStyle();
-};
-}  // namespace WeexCore
-#endif  // CORE_RENDER_NODE_RENDER_MASK_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_object.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_object.cpp
deleted file mode 100644
index ff03197..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_object.cpp
+++ /dev/null
@@ -1,509 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/node/render_object.h"
-#include <math.h>
-
-#include "core/common/view_utils.h"
-#include "core/css/constants_name.h"
-#include "core/css/constants_value.h"
-#include "core/css/css_value_getter.h"
-#include "core/layout/layout.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/render/manager/render_manager.h"
-#include "core/render/page/render_page.h"
-
-namespace WeexCore {
-
-RenderObject::RenderObject() : parent_render_(nullptr) {
-  this->styles_ = new std::map<std::string, std::string>();
-  this->attributes_ = new std::map<std::string, std::string>();
-  this->events_ = new std::set<std::string>();
-  this->is_root_render_ = false;
-}
-
-RenderObject::~RenderObject() {
-  this->parent_render_ = nullptr;
-
-  if (this->styles_ != nullptr) {
-    delete this->styles_;
-    this->styles_ = nullptr;
-  }
-
-  if (this->attributes_ != nullptr) {
-    delete this->attributes_;
-    this->attributes_ = nullptr;
-  }
-
-  if (this->events_ != nullptr) {
-    delete this->events_;
-    this->events_ = nullptr;
-  }
-
-  for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-    RenderObject *child = static_cast<RenderObject *>(*it);
-    if (child != nullptr) {
-      delete child;
-    }
-  }
-}
-
-void RenderObject::ApplyDefaultStyle(bool reserve) {
-  std::map<std::string, std::string> *style = GetDefaultStyle();
-
-  if (style == nullptr) return;
-
-  for (auto iter = style->cbegin(); iter != style->cend(); iter++)
-    AddStyle(iter->first, iter->second, reserve);
-
-  if (style != nullptr) {
-    delete style;
-  }
-}
-
-void RenderObject::ApplyDefaultAttr() {
-  std::map<std::string, std::string> *attrs = GetDefaultAttr();
-
-  if (attrs == nullptr) return;
-
-  for (auto iter = attrs->cbegin(); iter != attrs->cend(); iter++) {
-    UpdateAttr(iter->first, iter->second);
-  }
-
-  if (attrs != nullptr) {
-    delete attrs;
-  }
-}
-
-static WXCoreSize measureFunc_Impl(WXCoreLayoutNode *node, float width,
-                            MeasureMode widthMeasureMode, float height,
-                            MeasureMode heightMeasureMode) {
-  WXCoreSize size;
-  size.height = 0;
-  size.width = 0;
-
-  if (!node->haveMeasureFunc()) return size;
-  return WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->InvokeMeasureFunction(
-          static_cast<RenderObject *>(node)->page_id().c_str(),
-          reinterpret_cast<intptr_t>(node), width, widthMeasureMode, height,
-          heightMeasureMode);
-}
-
-void RenderObject::BindMeasureFunc() { setMeasureFunc(measureFunc_Impl); }
-
-void RenderObject::OnLayoutBefore() {
-  if (!haveMeasureFunc()) return;
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->InvokeLayoutBefore(page_id().c_str(), reinterpret_cast<intptr_t>(this));
-}
-    
-void RenderObject::OnLayoutPlatform() {
-  if (!getNeedsPlatformDependentLayout()) return;
-  WeexCoreManager::Instance()
-    ->getPlatformBridge()
-    ->platform_side()
-    ->InvokeLayoutPlatform(page_id().c_str(), reinterpret_cast<intptr_t>(this));
-}
-
-void RenderObject::OnLayoutAfter(float width, float height) {
-  if (!haveMeasureFunc()) return;
-  WeexCoreManager::Instance()
-      ->getPlatformBridge()
-      ->platform_side()
-      ->InvokeLayoutAfter(page_id().c_str(), reinterpret_cast<intptr_t>(this),
-                          width, height);
-}
-
-StyleType RenderObject::ApplyStyle(const std::string &key,
-                                   const std::string &value,
-                                   const bool updating) {
-  bool insert = false;
-  if (value.length() > 0 && (value.at(0) == JSON_OBJECT_MARK_CHAR ||
-                             value.at(0) == JSON_ARRAY_MARK_CHAR)) {
-    MapInsertOrAssign(this->styles_, key, value);
-    insert = true;
-  }
-
-  if (key == ALIGN_ITEMS) {
-    setAlignItems(GetWXCoreAlignItem(value));
-    return kTypeLayout;
-  } else if (key == ALIGN_SELF) {
-    setAlignSelf(GetWXCoreAlignSelf(value));
-    return kTypeLayout;
-  } else if (key == FLEX) {
-    if (value.empty()) {
-      set_flex(0);
-    } else {
-      float ret = getFloat(value.c_str());
-      if (!isnan(ret)) {
-        set_flex(ret);
-      }
-    }
-    return kTypeLayout;
-  } else if (key == DIRECTION) {
-    WeexCore::WXCoreDirection direction = GetWXCoreDirection(value);
-    if (direction ==  WeexCore::kDirectionInherit && this->is_root_render_ ) {
-        direction = WeexCore::kDirectionLTR;
-    } 
-    setDirection(direction, updating);
-    return kTypeInheritableLayout;
-  } else if (key == FLEX_DIRECTION) {
-    setFlexDirection(GetWXCoreFlexDirection(value), updating);
-    return kTypeLayout;
-  } else if (key == JUSTIFY_CONTENT) {
-    setJustifyContent(GetWXCoreJustifyContent(value));
-    return kTypeLayout;
-  } else if (key == FLEX_WRAP) {
-    setFlexWrap(GetWXCoreFlexWrap(value));
-    return kTypeLayout;
-  } else if (key == MIN_WIDTH) {
-    UpdateStyleInternal(key, value, NAN,
-                        [=](float foo) { setMinWidth(foo, updating); });
-    return kTypeLayout;
-  } else if (key == MIN_HEIGHT) {
-    UpdateStyleInternal(key, value, NAN, [=](float foo) { setMinHeight(foo); });
-    return kTypeLayout;
-  } else if (key == MAX_WIDTH) {
-    UpdateStyleInternal(key, value, NAN,
-                        [=](float foo) { setMaxWidth(foo, updating); });
-    return kTypeLayout;
-  } else if (key == MAX_HEIGHT) {
-    UpdateStyleInternal(key, value, NAN, [=](float foo) { setMaxHeight(foo); });
-    return kTypeLayout;
-  } else if (key == HEIGHT) {
-    if (UpdateStyleInternal(key, value, NAN,
-                            [=](float foo) { setStyleHeight(foo); })) {
-      setStyleHeightLevel(CSS_STYLE);
-    }
-    return kTypeLayout;
-  } else if (key == WIDTH) {
-    if (UpdateStyleInternal(key, value, NAN,
-                            [=](float foo) { setStyleWidth(foo, updating); })) {
-      setStyleWidthLevel(CSS_STYLE);
-    }
-    return kTypeLayout;
-  } else if (key == POSITION) {
-    setStylePositionType(GetWXCorePositionType(value));
-    if (value == STICKY) {
-      this->is_sticky_ = true;
-    }
-    MapInsertOrAssign(this->styles_, key, value);
-    return kTypeStyle;
-  } else if (key == LEFT) {
-    UpdateStyleInternal(key, value, NAN, [=](float foo) {
-      setStylePosition(kPositionEdgeLeft, foo);
-    });
-    return kTypeLayout;
-  } else if (key == TOP) {
-    UpdateStyleInternal(key, value, NAN, [=](float foo) {
-      setStylePosition(kPositionEdgeTop, foo);
-    });
-    return kTypeLayout;
-  } else if (key == RIGHT) {
-    UpdateStyleInternal(key, value, NAN, [=](float foo) {
-      setStylePosition(kPositionEdgeRight, foo);
-    });
-    return kTypeLayout;
-  } else if (key == BOTTOM) {
-    UpdateStyleInternal(key, value, NAN, [=](float foo) {
-      setStylePosition(kPositionEdgeBottom, foo);
-    });
-    return kTypeLayout;
-  } else if (key == MARGIN) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setMargin(kMarginALL, foo); });
-    return kTypeMargin;
-  } else if (key == MARGIN_LEFT) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setMargin(kMarginLeft, foo); });
-    return kTypeMargin;
-  } else if (key == MARGIN_TOP) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setMargin(kMarginTop, foo); });
-    return kTypeMargin;
-  } else if (key == MARGIN_RIGHT) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setMargin(kMarginRight, foo); });
-    return kTypeMargin;
-  } else if (key == MARGIN_BOTTOM) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setMargin(kMarginBottom, foo); });
-    return kTypeMargin;
-  } else if (key == BORDER_WIDTH) {
-    UpdateStyleInternal(key, value, 0, [=](float foo) {
-      setBorderWidth(kBorderWidthALL, foo);
-    });
-    return kTypeBorder;
-  } else if (key == BORDER_TOP_WIDTH) {
-    UpdateStyleInternal(key, value, 0, [=](float foo) {
-      setBorderWidth(kBorderWidthTop, foo);
-    });
-    return kTypeBorder;
-  } else if (key == BORDER_RIGHT_WIDTH) {
-    UpdateStyleInternal(key, value, 0, [=](float foo) {
-      setBorderWidth(kBorderWidthRight, foo);
-    });
-    return kTypeBorder;
-  } else if (key == BORDER_BOTTOM_WIDTH) {
-    UpdateStyleInternal(key, value, 0, [=](float foo) {
-      setBorderWidth(kBorderWidthBottom, foo);
-    });
-    return kTypeBorder;
-  } else if (key == BORDER_LEFT_WIDTH) {
-    UpdateStyleInternal(key, value, 0, [=](float foo) {
-      setBorderWidth(kBorderWidthLeft, foo);
-    });
-    return kTypeBorder;
-  } else if (key == PADDING) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setPadding(kPaddingALL, foo); });
-    return kTypePadding;
-  } else if (key == PADDING_LEFT) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setPadding(kPaddingLeft, foo); });
-    return kTypePadding;
-  } else if (key == PADDING_TOP) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setPadding(kPaddingTop, foo); });
-    return kTypePadding;
-  } else if (key == PADDING_RIGHT) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setPadding(kPaddingRight, foo); });
-    return kTypePadding;
-  } else if (key == PADDING_BOTTOM) {
-    UpdateStyleInternal(key, value, 0,
-                        [=](float foo) { setPadding(kPaddingBottom, foo); });
-    return kTypePadding;
-  } else {
-    if (!insert) {
-      MapInsertOrAssign(this->styles_, key, value);
-    }
-    return kTypeStyle;
-  }
-}
-
-const std::string RenderObject::GetStyle(const std::string &key) {
-  if (this->styles_ == nullptr) return "";
-
-  std::map<std::string, std::string>::iterator iter = this->styles_->find(key);
-  if (iter != this->styles_->end()) {
-    return iter->second;
-  } else {
-    return "";
-  }
-}
-
-const std::string RenderObject::GetAttr(const std::string &key) {
-  if (this->attributes_ == nullptr) return "";
-
-  std::map<std::string, std::string>::iterator iter =
-      this->attributes_->find(key);
-  if (iter != this->attributes_->end()) {
-    return iter->second;
-  } else {
-    return "";
-  }
-}
-
-int RenderObject::AddRenderObject(int index, RenderObject *child) {
-  if (child == nullptr || index < -1) {
-    return index;
-  }
-
-  Index count = getChildCount();
-  index = index >= count ? -1 : index;
-  if (index == -1) {
-    addChildAt(child, getChildCount());
-  } else {
-    addChildAt(child, index);
-  }
-
-  child->set_parent_render(this);
-
-  return index;
-}
-
-Index RenderObject::IndexOf(const RenderObject *render) {
-  if (render == nullptr) {
-    return -1;
-  } else {
-    int i = 0;
-    for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-      RenderObject *child = static_cast<RenderObject *>(*it);
-      if (child != nullptr) {
-        if (render->ref() == child->ref()) return i;
-      }
-      ++i;
-    }
-  }
-  return -1;
-}
-
-bool RenderObject::UpdateStyleInternal(const std::string key,
-                                       const std::string value, float fallback,
-                                       std::function<void(float)> functor) {
-  bool ret = false;
-  if (value.empty()) {
-    functor(fallback);
-    ret = true;
-  } else {
-    float fvalue = getFloatByViewport(value,
-                                      RenderManager::GetInstance()->viewport_width(page_id()),
-                                      RenderManager::GetInstance()->DeviceWidth(page_id()),
-#if OS_IOS
-                                      // reduce a map search on iOS
-                                      false
-#else
-                                      RenderManager::GetInstance()->round_off_deviation(page_id())
-#endif
-                                      );
-    if (!isnan(fvalue)) {
-      functor(fvalue);
-      ret = true;
-    }
-  }
-  return ret;
-}
-
-void RenderObject::LayoutBeforeImpl() {
-  if (isDirty()) {
-    OnLayoutBefore();
-  }
-
-  for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-    RenderObject *child = static_cast<RenderObject *>(*it);
-    if (child != nullptr) {
-      child->LayoutBeforeImpl();
-    }
-  }
-}
-    
-void RenderObject::LayoutPlatformImpl() {
-  if (hasNewLayout()) {
-    OnLayoutPlatform();
-  }
-
-  for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-    RenderObject *child = static_cast<RenderObject *>(*it);
-    if (child != nullptr) {
-      child->LayoutPlatformImpl();
-    }
-  }
-}
-
-void RenderObject::LayoutAfterImpl() {
-  if (hasNewLayout()) {
-    OnLayoutAfter(getLayoutWidth(), getLayoutHeight());
-  }
-
-  for (auto it = ChildListIterBegin(); it != ChildListIterEnd(); it++) {
-    RenderObject *child = static_cast<RenderObject *>(*it);
-    if (child != nullptr) {
-      child->LayoutAfterImpl();
-    }
-  }
-}
-
-void RenderObject::CopyFrom(RenderObject *src) {
-  IRenderObject::CopyFrom(src);
-  this->styles_->insert(src->styles_->begin(), src->styles_->end());
-  this->attributes_->insert(src->attributes_->begin(), src->attributes_->end());
-  this->events_->insert(src->events_->begin(), src->events_->end());
-}
-
-void RenderObject::MapInsertOrAssign(
-    std::map<std::string, std::string> *targetMap, const std::string &key,
-    const std::string &value) {
-  std::map<std::string, std::string>::iterator it = targetMap->find(key);
-  if (it != targetMap->end()) {
-    it->second = value;
-  } else {
-    targetMap->insert({key, value});
-  }
-}
-
-bool RenderObject::ViewInit() {
-  return (!isnan(getStyleWidth()) && getStyleWidth() > 0) ||
-         (is_root_render() && GetRenderPage() != nullptr &&
-          GetRenderPage()->is_render_container_width_wrap_content());
-}
-
-RenderPage *RenderObject::GetRenderPage() {
-  return static_cast<RenderPage*>(RenderManager::GetInstance()->GetPage(page_id()));
-}
-
-bool RenderObject::IsAppendTree() {
-  std::string append = GetAttr(APPEND);
-  if (append == "tree") {
-    return true;
-  }
-  return false;
-}
-
-void RenderObject::UpdateAttr(std::string key, std::string value) {
-  MapInsertOrAssign(this->attributes_, key, value);
-}
-
-StyleType RenderObject::UpdateStyle(std::string key, std::string value) {
-  return ApplyStyle(key, value, true);
-}
-  
-void RenderObject::MergeStyles(std::vector<std::pair<std::string, std::string>> *src) {
-  if (src) {
-    for (auto& p : *src) {
-      MapInsertOrAssign(styles_, p.first, p.second);
-    }
-  }
-}
-
-RenderObject *RenderObject::GetChild(const Index &index) {
-  return static_cast<RenderObject *>(getChildAt(index));
-}
-
-void RenderObject::RemoveRenderObject(RenderObject *child) {
-  removeChild(child);
-}
-
-void RenderObject::AddAttr(std::string key, std::string value) {
-  MapInsertOrAssign(this->attributes_, key, value);
-}
-
-StyleType RenderObject::AddStyle(std::string key, std::string value, bool reserve) {
-  if (reserve) {
-    MapInsertOrAssign(styles_, key, value);
-  }
-  return ApplyStyle(key, value, false);
-}
-
-void RenderObject::AddEvent(std::string event) {
-  if (this->events_ == nullptr) {
-    this->events_ = new std::set<std::string>();
-  }
-  this->events_->insert(event);
-}
-
-void RenderObject::RemoveEvent(const std::string &event) {
-  this->events_->erase(event);
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_object.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_object.h
deleted file mode 100644
index 2123027..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_object.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_RENDER_OBJECT_H_
-#define CORE_RENDER_NODE_RENDER_OBJECT_H_
-
-#include <functional>
-#include <map>
-#include <set>
-#include <string>
-
-#include "core/render/node/factory/render_object_interface.h"
-
-#define JSON_OBJECT_MARK_CHAR '{'
-#define JSON_ARRAY_MARK_CHAR '['
-
-#define convert_render_object_to_long(render) ((long)((intptr_t)render))
-
-#define convert_long_to_render_object(ptr) ((RenderObject *)((intptr_t)ptr))
-
-namespace WeexCore {
-
-class RenderObject;
-
-class RenderPage;
-
-typedef enum StyleType {
-  kTypeStyle,
-  kTypeLayout,
-  kTypeMargin,
-  kTypePadding,
-  kTypeBorder,
-  kTypeInheritableLayout
-} StyleType;
-
-class RenderObject : public IRenderObject {
-  friend class RenderPage;
-
- public:
-  void LayoutBeforeImpl();
-
-  void LayoutPlatformImpl();
-    
-  void LayoutAfterImpl();
-
-  void CopyFrom(RenderObject *src);
-
-  void MapInsertOrAssign(std::map<std::string, std::string> *targetMap,
-                         const std::string &key, const std::string &value);
-
-  bool ViewInit();
-
-  virtual std::map<std::string, std::string> *GetDefaultStyle() {
-    return nullptr;
-  }
-
-  virtual std::map<std::string, std::string> *GetDefaultAttr() {
-    return nullptr;
-  }
-
- protected:
-  bool UpdateStyleInternal(const std::string key, const std::string value,
-                           float fallback, std::function<void(float)> functor);
-
- public:
-  RenderObject();
-
-  virtual ~RenderObject();
-
-  void BindMeasureFunc();
-
-  void OnLayoutBefore();
-    
-  void OnLayoutPlatform();
-
-  void OnLayoutAfter(float width, float height);
-
-  virtual StyleType ApplyStyle(const std::string &key, const std::string &value,
-                               const bool updating);
-
-  void ApplyDefaultStyle(bool reserve);
-
-  void ApplyDefaultAttr();
-
-  Index IndexOf(const RenderObject *render);
-
-  virtual int AddRenderObject(int index, RenderObject *child);
-
-  float GetViewPortWidth();
-
-  const std::string GetAttr(const std::string &key);
-
-  const std::string GetStyle(const std::string &key);
-
-  RenderPage *GetRenderPage();
-
-  virtual void UpdateAttr(std::string key, std::string value);
-
-  virtual StyleType UpdateStyle(std::string key, std::string value);
-  
-  void MergeStyles(std::vector<std::pair<std::string, std::string>> *src);
-
-  bool IsAppendTree();
-
-  RenderObject *GetChild(const Index &index);
-
-  void RemoveRenderObject(RenderObject *child);
-
-  virtual void AddAttr(std::string key, std::string value);
-
-  StyleType AddStyle(std::string key, std::string value, bool reserve);
-
-  void AddEvent(std::string event);
-
-  void RemoveEvent(const std::string &event);
-
- public:
-  inline void set_parent_render(RenderObject *render) {
-    this->parent_render_ = render;
-  }
-
-  inline RenderObject *parent_render() { return this->parent_render_; }
-
-  inline std::map<std::string, std::string> *styles() const {
-    return this->styles_;
-  }
-
-  inline std::map<std::string, std::string> *attributes() const {
-    return this->attributes_;
-  }
-
-  inline std::set<std::string> *events() const { return this->events_; }
-
-  inline void set_is_root_render() { this->is_root_render_ = true; }
-
-  inline bool is_root_render() { return this->is_root_render_; }
-
-  inline bool is_sticky() { return this->is_sticky_; }
-
- private:
-  RenderObject *parent_render_;
-  std::map<std::string, std::string> *styles_;
-  std::map<std::string, std::string> *attributes_;
-  std::set<std::string> *events_;
-  bool is_root_render_;
-  bool is_sticky_ = false;
-};
-}  // namespace WeexCore
-#endif  // CORE_RENDER_NODE_RENDER_OBJECT_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_scroller.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_scroller.cpp
deleted file mode 100644
index c89838f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_scroller.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <utility>
-#include <math.h>
-#include "core/css/constants_name.h"
-#include "core/render/node/render_scroller.h"
-
-namespace WeexCore {
-
-std::map<std::string, std::string> *RenderScroller::GetDefaultStyle() {
-  std::map<std::string, std::string> *style =
-      new std::map<std::string, std::string>();
-
-  bool is_vertical = true;
-  RenderObject *parent = static_cast<RenderObject *>(getParent());
-
-  if (parent != nullptr) {
-    if (parent->GetAttr(SCROLL_DIRECTION) == HORIZONTAL) {
-      is_vertical = false;
-    }
-  }
-
-  std::string prop = is_vertical ? HEIGHT : WIDTH;
-
-  if (prop == HEIGHT && isnan(getStyleHeight()) && !this->is_set_flex_) {
-    style->insert(std::pair<std::string, std::string>(FLEX, "1"));
-  } else if (prop == WIDTH && isnan(getStyleWidth()) && !this->is_set_flex_) {
-    style->insert(std::pair<std::string, std::string>(FLEX, "1"));
-  }
-
-  return style;
-}
-
-void RenderScroller::set_flex(const float flex) {
-  this->is_set_flex_ = true;
-  WXCoreLayoutNode::set_flex(flex);
-}
-
-void RenderScroller::onLayout(const float left, const float top, const float right, const float bottom,
-                                  WXCoreLayoutNode *const absoulteItem, WXCoreFlexLine *const flexLine) {
-  // In scroller only use left to right direction to caculate children frame
-  this->setLayoutDirection(kDirectionLTR);
-  RenderObject::onLayout(left, top, right, bottom, absoulteItem, flexLine);
-}
-
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_scroller.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_scroller.h
deleted file mode 100644
index 1cf6fc6..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_scroller.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_RENDER_SCROLLER_H_
-#define CORE_RENDER_NODE_RENDER_SCROLLER_H_
-
-#include <map>
-#include <string>
-
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-class RenderScroller : public RenderObject {
-  bool is_set_flex_ = false;
-
-  std::map<std::string, std::string> *GetDefaultStyle() override;
-
-  void set_flex(const float flex) override;
-
-  inline float CalculateFreeSpaceAlongMainAxis(
-      const float &width, const float &height,
-      const float &current_length) const override {
-    return NAN;
-  }
-
-protected:
-    void onLayout(const float left, const float top, const float right, const float bottom,
-                                  WXCoreLayoutNode *const absoulteItem, WXCoreFlexLine *const flexLine) override;
-
-    // Since scroll only use ltr to layout children actually,
-    // so we need override this method to return calculated inherit direction as normal render_object do
-    inline WXCoreDirection getLayoutDirection() const override {
-        WXCoreDirection styleDirection = this->getDirection();
-        if (styleDirection != kDirectionInherit) {
-            return styleDirection;
-        } else if (this->getParent() != nullptr) {
-            WXCoreLayoutNode *parent = this->getParent();
-            return parent->getLayoutDirection();
-        }
-        return WEEXCORE_CSS_DEFAULT_DIRECTION;
-    }
-
-};
-}  // namespace WeexCore
-#endif  // CORE_RENDER_NODE_RENDER_SCROLLER_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_text.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_text.cpp
deleted file mode 100644
index eda23e9..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_text.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include <string>
-
-#include "core/render/node/render_text.h"
-#include "core/render/page/render_page.h"
-
-namespace WeexCore {
-
-void RenderText::UpdateAttr(std::string key, std::string value) {
-  RenderObject::UpdateAttr(key, value);
-  markDirty();
-}
-
-StyleType RenderText::UpdateStyle(std::string key, std::string value) {
-  StyleType result_type = RenderObject::ApplyStyle(key, value, true);
-  markDirty();
-  return result_type;
-}
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_text.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_text.h
deleted file mode 100644
index 86e3733..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/node/render_text.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_NODE_RENDER_TEXT_H_
-#define CORE_RENDER_NODE_RENDER_TEXT_H_
-
-#include <string>
-
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-class RenderText : public RenderObject {
- private:
-  void UpdateAttr(std::string key, std::string value);
-
-  StyleType UpdateStyle(std::string key, std::string value);
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_NODE_RENDER_TEXT_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page.cpp
deleted file mode 100644
index 6768f14..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page.cpp
+++ /dev/null
@@ -1,723 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <math.h>
-#include "base/log_defines.h"
-#include "base/time_utils.h"
-#include "core/common/view_utils.h"
-#include "core/config/core_environment.h"
-#include "core/css/constants_value.h"
-#include "core/layout/layout.h"
-#include "core/manager/weex_core_manager.h"
-#include "core/moniter/render_performance.h"
-#include "core/render/page/render_page.h"
-#include "core/render/action/render_action_add_element.h"
-#include "core/render/action/render_action_add_event.h"
-#include "core/render/action/render_action_appendtree_createfinish.h"
-#include "core/render/action/render_action_createbody.h"
-#include "core/render/action/render_action_createfinish.h"
-#include "core/render/action/render_action_layout.h"
-#include "core/render/action/render_action_move_element.h"
-#include "core/render/action/render_action_remove_element.h"
-#include "core/render/action/render_action_remove_event.h"
-#include "core/render/action/render_action_render_success.h"
-#include "core/render/action/render_action_update_attr.h"
-#include "core/render/action/render_action_update_style.h"
-#include "core/render/action/render_action_trigger_vsync.h"
-#include "core/render/manager/render_manager.h"
-#include "core/render/node/factory/render_type.h"
-#include "core/render/node/render_list.h"
-#include "core/render/node/render_object.h"
-
-namespace WeexCore {
-
-RenderPage::RenderPage(const std::string &page_id)
-    : RenderPageBase(page_id, "platform"),
-    viewport_width_(0),
-      render_root_(nullptr),
-      render_page_size_(),
-      render_object_registers_() {
-#if RENDER_LOG
-  LOGD("[RenderPage] new RenderPage >>>> pageId: %s", pageId.c_str());
-#endif
-
-  this->render_page_size_.first =
-      WXCoreEnvironment::getInstance()->DeviceWidth();
-  this->render_page_size_.second = NAN;
-  this->viewport_width_ = kDefaultViewPortWidth;
-  this->device_width_ = WXCoreEnvironment::getInstance()->DeviceWidth();
-}
-
-RenderPage::~RenderPage() {
-  //#if RENDER_LOG
-  LOGE("[RenderPage] Delete RenderPage >>>> pageId: %s", page_id().c_str());
-  //#endif
-
-  this->render_object_registers_.clear();
-
-  if (this->render_root_ != nullptr) {
-    delete this->render_root_;
-    this->render_root_ = nullptr;
-  }
-}
-
-void RenderPage::CalculateLayout() {
-  if (this->render_root_ == nullptr || !this->render_root_->ViewInit()) return;
-
-#if RENDER_LOG
-  LOGD("[RenderPage] CalculateLayout >>>> pageId: %s", mPageId.c_str());
-#endif
-
-  int64_t start_time = getCurrentTime();
-  if (is_before_layout_needed_.load()) {
-    this->render_root_->LayoutBeforeImpl();
-  }
-  this->render_root_->calculateLayout(this->render_page_size_);
-  if (is_platform_layout_needed_.load()) {
-    this->render_root_->LayoutPlatformImpl();
-  }
-  if (is_after_layout_needed_.load()) {
-    this->render_root_->LayoutAfterImpl();
-  }
-  CssLayoutTime(getCurrentTime() - start_time);
-  TraverseTree(this->render_root_, 0);
-}
-
-void RenderPage::TraverseTree(RenderObject *render, long index) {
-  if (render == nullptr) return;
-
-  if (render->hasNewLayout()) {
-    SendLayoutAction(render, (int)index);
-    render->setHasNewLayout(false);
-  }
-
-  for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd();
-       it++) {
-    RenderObject *child = static_cast<RenderObject *>(*it);
-    if (child != nullptr) {
-      TraverseTree(child, it - render->ChildListIterBegin());
-    }
-  }
-}
-
-bool RenderPage::CreateRootRender(RenderObject *root) {
-  if (root == nullptr) return false;
-
-  set_is_dirty(true);
-  SetRootRenderObject(root);
-
-  if (isnan(this->render_root_->getStyleWidth())) {
-    this->render_root_->setStyleWidthLevel(FALLBACK_STYLE);
-    if (is_render_container_width_wrap_content())
-      this->render_root_->setStyleWidthToNAN();
-    else
-      this->render_root_->setStyleWidth(
-          WXCoreEnvironment::getInstance()->DeviceWidth(), false);
-  } else {
-    this->render_root_->setStyleWidthLevel(CSS_STYLE);
-  }
-  PushRenderToRegisterMap(root);
-
-  SendCreateBodyAction(root);
-  return true;
-}
-
-void RenderPage::SetRootRenderObject(RenderObject *root) {
-  if (root != nullptr) {
-    this->render_root_ = root;
-    this->render_root_->set_is_root_render();
-  }
-}
-
-bool RenderPage::AddRenderObject(const std::string &parent_ref,
-                                 int insert_posiotn, RenderObject *child) {
-  RenderObject *parent = GetRenderObject(parent_ref);
-  if (parent == nullptr || child == nullptr) {
-    return false;
-  }
-
-  if (WeexCore::WXCoreEnvironment::getInstance()->isInteractionLogOpen()) {
-    LOGD("wxInteractionAnalyzer: [weexcore][addElementStart],%s,%s,%s",
-         this->page_id().c_str(),child->type().c_str(),child->ref().c_str());
-  }
-
-  // add child to Render Tree
-  insert_posiotn = parent->AddRenderObject(insert_posiotn, child);
-  if (insert_posiotn < -1) {
-    return false;
-  }
-    
-  set_is_dirty(true);
-
-  PushRenderToRegisterMap(child);
-  SendAddElementAction(child, parent, insert_posiotn, false);
-
-  Batch();
-  if (WeexCore::WXCoreEnvironment::getInstance()->isInteractionLogOpen()) {
-    LOGD("wxInteractionAnalyzer: [weexcore][addElementEnd],%s,%s,%s",
-         this->page_id().c_str(),child->type().c_str(),child->ref().c_str());
-  }
-  return true;
-}
-
-bool RenderPage::RemoveRenderObject(const std::string &ref) {
-  RenderObject *child = GetRenderObject(ref);
-  if (child == nullptr) return false;
-
-  RenderObject *parent = child->parent_render();
-  if (parent == nullptr) return false;
-
-  set_is_dirty(true);
-  parent->RemoveRenderObject(child);
-
-  RemoveRenderFromRegisterMap(child);
-  SendRemoveElementAction(ref);
-    
-  delete child;
-  return true;
-}
-
-bool RenderPage::MoveRenderObject(const std::string &ref,
-                                  const std::string &parent_ref, int index) {
-  RenderObject *child = GetRenderObject(ref);
-  if (child == nullptr) return false;
-
-  RenderObject *old_parent = child->parent_render();
-  RenderObject *new_parent = GetRenderObject(parent_ref);
-  if (old_parent == nullptr || new_parent == nullptr) return false;
-
-  if (old_parent->ref() == new_parent->ref()) {
-    if (old_parent->IndexOf(child) == index) {
-      return false;
-    } else if (old_parent->IndexOf(child) < index) {
-      index = index - 1;
-    }
-  }
-
-  set_is_dirty(true);
-  child->getParent()->removeChild(child);
-  new_parent->addChildAt(child, index);
-
-  SendMoveElementAction(ref, parent_ref, index);
-  return true;
-}
-
-bool RenderPage::UpdateStyle(
-    const std::string &ref,
-    std::vector<std::pair<std::string, std::string>> *src) {
-  RenderObject *render = GetRenderObject(ref);
-  if (render == nullptr || src == nullptr || src->empty()) return false;
-    
-  set_is_dirty(true);
-
-  std::vector<std::pair<std::string, std::string>> *style = nullptr;
-  std::vector<std::pair<std::string, std::string>> *margin = nullptr;
-  std::vector<std::pair<std::string, std::string>> *padding = nullptr;
-  std::vector<std::pair<std::string, std::string>> *border = nullptr;
-  bool inheriableLayout = false;
-    
-  bool flag = false;
-  int result =
-      WeexCoreManager::Instance()
-          ->getPlatformBridge()
-          ->platform_side()
-          ->HasTransitionPros(this->page_id_.c_str(), ref.c_str(), src);
-  // int result =
-  // Bridge_Impl_Android::getInstance()->callHasTransitionPros(mPageId.c_str(),
-  // ref.c_str(), src);
-
-  if (result == 1) {
-    SendUpdateStyleAction(render, src, margin, padding, border);
-  } else {
-    for (auto iter = src->begin(); iter != src->end(); iter++) {
-      switch (render->UpdateStyle((*iter).first, (*iter).second)) {
-        case kTypeStyle:
-          if (style == nullptr) {
-            style = new std::vector<std::pair<std::string, std::string>>();
-          }
-          style->insert(style->end(), (*iter));
-          flag = true;
-          break;
-        case kTypeMargin:
-          if (margin == nullptr) {
-            margin = new std::vector<std::pair<std::string, std::string>>();
-          }
-          render->UpdateStyleInternal(
-              (*iter).first, (*iter).second, 0, [=, &flag](float foo) {
-                  (*iter).second = to_string(foo);
-                  margin->insert(margin->end(), (*iter));
-                  flag = true;
-              });
-          break;
-        case kTypePadding:
-          if (padding == nullptr) {
-            padding = new std::vector<std::pair<std::string, std::string>>();
-          }
-          render->UpdateStyleInternal(
-              (*iter).first, (*iter).second, 0, [=, &flag](float foo) {
-                  (*iter).second = to_string(foo);
-                  padding->insert(padding->end(), (*iter));
-                  flag = true;
-              });
-          break;
-        case kTypeBorder:
-          if (border == nullptr) {
-            border = new std::vector<std::pair<std::string, std::string>>();
-          }
-          render->UpdateStyleInternal(
-              (*iter).first, (*iter).second, 0, [=, &flag](float foo) {
-                  (*iter).second = to_string(foo);
-                  border->insert(border->end(), (*iter));
-                  flag = true;
-              });
-          break;
-          case kTypeInheritableLayout:
-              inheriableLayout = true;
-              break;
-        default: break;
-      }
-    }
-  }
-  
-  if (reserve_css_styles_ || render == render_root_) {
-    // If a page requires that all raw css styles saved, we merge to RenderObject's styles map
-    render->MergeStyles(src);
-  }
-
-  if (style != nullptr || margin != nullptr || padding != nullptr ||
-      border != nullptr || inheriableLayout)
-    SendUpdateStyleAction(render, style, margin, padding, border);
-
-  Batch();
-
-  if (src != nullptr) {
-    src->clear();
-    src->shrink_to_fit();
-    delete src;
-    src = nullptr;
-  }
-
-  if (style != nullptr) {
-    style->clear();
-    style->shrink_to_fit();
-    delete style;
-    style = nullptr;
-  }
-
-  if (margin != nullptr) {
-    margin->clear();
-    margin->shrink_to_fit();
-    delete margin;
-    margin = nullptr;
-  }
-
-  if (padding != nullptr) {
-    padding->clear();
-    padding->shrink_to_fit();
-    delete padding;
-    padding = nullptr;
-  }
-
-  if (border != nullptr) {
-    border->clear();
-    border->shrink_to_fit();
-    delete border;
-    border = nullptr;
-  }
-
-  return flag;
-}
-
-bool RenderPage::UpdateAttr(
-    const std::string &ref,
-    std::vector<std::pair<std::string, std::string>> *attrs) {
-  RenderObject *render = GetRenderObject(ref);
-  if (render == nullptr || attrs == nullptr || attrs->empty()) return false;
-
-  set_is_dirty(true);
-  SendUpdateAttrAction(render, attrs);
-
-  for (auto iter = attrs->cbegin(); iter != attrs->cend(); iter++) {
-    render->UpdateAttr((*iter).first, (*iter).second);
-  }
-  Batch();
-  if (attrs != nullptr) {
-    attrs->clear();
-    attrs->shrink_to_fit();
-    delete attrs;
-    attrs = nullptr;
-  }
-
-  return true;
-}
-
-void RenderPage::SetDefaultHeightAndWidthIntoRootRender(
-    const float default_width, const float default_height,
-    const bool is_width_wrap_content, const bool is_height_wrap_content) {
-  this->render_page_size_.first = default_width;
-  this->render_page_size_.second = default_height;
-  if (this->render_root_->getStyleWidthLevel() >= INSTANCE_STYLE) {
-    this->render_root_->setStyleWidthLevel(INSTANCE_STYLE);
-    if (is_width_wrap_content) {
-      set_is_render_container_width_wrap_content(true);
-      this->render_root_->setStyleWidthToNAN();
-      this->render_page_size_.first = NAN;
-    } else {
-      this->render_root_->setStyleWidth(default_width, true);
-    }
-    set_is_dirty(true);
-  }
-
-  if (this->render_root_->getStyleHeightLevel() >= INSTANCE_STYLE) {
-    if (!is_height_wrap_content) {
-      this->render_root_->setStyleHeightLevel(INSTANCE_STYLE);
-      this->render_root_->setStyleHeight(default_height);
-      set_is_dirty(true);
-    }
-  }
-
-  Batch();
-}
-
-bool RenderPage::AddEvent(const std::string &ref, const std::string &event) {
-  RenderObject *render = GetRenderObject(ref);
-  if (render == nullptr) return false;
-
-  set_is_dirty(true);
-  render->AddEvent(event);
-
-  RenderAction *action = new RenderActionAddEvent(this->page_id_, ref, event);
-  PostRenderAction(action);
-  return true;
-}
-
-bool RenderPage::RemoveEvent(const std::string &ref, const std::string &event) {
-  RenderObject *render = GetRenderObject(ref);
-  if (render == nullptr) return false;
-
-  set_is_dirty(true);
-  render->RemoveEvent(event);
-
-  RenderAction *action =
-      new RenderActionRemoveEvent(this->page_id_, ref, event);
-  PostRenderAction(action);
-  return true;
-}
-
-bool RenderPage::CreateFinish() {
-  if (this->render_root_ == nullptr) {
-    return false;
-  }
-
-  set_is_dirty(true);
-  Batch();
-  SendCreateFinishAction();
-  // RenderSuccess means the Dom created after executing script finishes layout
-  // and render, it will be trigger even though body not yet attaches to parent.
-  LayoutInner();
-  SendRenderSuccessAction();
-  return true;
-}
-    
-void RenderPage::LayoutInner() {
-  CalculateLayout();
-  this->need_layout_.store(false);
-  set_is_dirty(false);
-}
-
-void RenderPage::LayoutImmediately() {
-  if (is_dirty() && kUseVSync) {
-    LayoutInner();
-  }
-}
-
-void RenderPage::PushRenderToRegisterMap(RenderObject *render) {
-  if (render == nullptr) return;
-
-  std::string ref = render->ref();
-  this->render_object_registers_.insert(
-      std::pair<std::string, RenderObject *>(ref, render));
-
-  for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd();
-       it++) {
-    RenderObject *child = static_cast<RenderObject *>(*it);
-    if (child != nullptr) {
-      PushRenderToRegisterMap(child);
-    }
-  }
-}
-
-void RenderPage::RemoveRenderFromRegisterMap(RenderObject *render) {
-  if (render == nullptr) return;
-
-  this->render_object_registers_.erase(render->ref());
-
-  for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd();
-       it++) {
-    RenderObject *child = static_cast<RenderObject *>(*it);
-    if (child != nullptr) {
-      RemoveRenderFromRegisterMap(child);
-    }
-  }
-}
-
-void RenderPage::SendCreateBodyAction(RenderObject *render) {
-  if (render == nullptr) return;
-
-  RenderAction *action = new RenderActionCreateBody(page_id(), render);
-  PostRenderAction(action);
-
-  int i = 0;
-  for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd();
-       it++) {
-    RenderObject *child = static_cast<RenderObject *>(*it);
-    if (child != nullptr) {
-      SendAddElementAction(child, render, i, true);
-    }
-    ++i;
-  }
-
-  if (i > 0 && render->IsAppendTree()) {
-    SendAppendTreeCreateFinish(render->ref());
-  }
-}
-
-void RenderPage::SendAddElementAction(RenderObject *child, RenderObject *parent,
-                                      int index, bool is_recursion,
-                                      bool will_layout) {
-  if (child == nullptr || parent == nullptr) return;
-  if (parent != nullptr && parent->type() == WeexCore::kRenderRecycleList) {
-    will_layout = false;
-  }
-
-  RenderAction *action =
-      new RenderActionAddElement(page_id(), child, parent, index, will_layout);
-  PostRenderAction(action);
-
-  int i = 0;
-  for (auto it = child->ChildListIterBegin(); it != child->ChildListIterEnd();
-       it++) {
-    RenderObject *grandson = static_cast<RenderObject *>(*it);
-    if (grandson != nullptr) {
-      SendAddElementAction(grandson, child, i, true, will_layout);
-    }
-    ++i;
-  }
-
-  if (child->type() == WeexCore::kRenderRecycleList) {
-    RenderList *render_list = static_cast<RenderList *>(child);
-    std::vector<RenderObject *> &cell_slots = render_list->CellSlots();
-    for (auto it = cell_slots.begin(); it != cell_slots.end(); it++) {
-      RenderObject *grandson = static_cast<RenderObject *>(*it);
-      if (grandson != nullptr) {
-        SendAddElementAction(grandson, child, -1, true, will_layout);
-      }
-      ++i;
-    }
-  }
-
-  if (!is_recursion && i > 0 && child->IsAppendTree()) {
-    SendAppendTreeCreateFinish(child->ref());
-  }
-}
-
-void RenderPage::SendRemoveElementAction(const std::string &ref) {
-  RenderAction *action = new RenderActionRemoveElement(page_id(), ref);
-  PostRenderAction(action);
-}
-
-void RenderPage::SendMoveElementAction(const std::string &ref,
-                                       const std::string &parent_ref,
-                                       int index) {
-  RenderAction *action =
-      new RenderActionMoveElement(page_id(), ref, parent_ref, index);
-  PostRenderAction(action);
-}
-
-void RenderPage::SendLayoutAction(RenderObject *render, int index) {
-  if (render == nullptr) return;
-
-  RenderAction *action = new RenderActionLayout(page_id(), render, index);
-  PostRenderAction(action);
-}
-    
-void RenderPage::SendUpdateStyleAction(
-    RenderObject *render,
-    std::vector<std::pair<std::string, std::string>> *style,
-    std::vector<std::pair<std::string, std::string>> *margin,
-    std::vector<std::pair<std::string, std::string>> *padding,
-    std::vector<std::pair<std::string, std::string>> *border) {
-  RenderAction *action = new RenderActionUpdateStyle(
-      page_id(), render->ref(), style, margin, padding, border);
-  PostRenderAction(action);
-}
-
-void RenderPage::SendUpdateAttrAction(
-    RenderObject *render,
-    std::vector<std::pair<std::string, std::string>> *attrs) {
-  RenderAction *action =
-      new RenderActionUpdateAttr(page_id(), render->ref(), attrs);
-  PostRenderAction(action);
-}
-
-void RenderPage::SendUpdateAttrAction(
-    RenderObject *render, std::map<std::string, std::string> *attrs) {
-  std::vector<std::pair<std::string, std::string>> *vAttrs =
-      new std::vector<std::pair<std::string, std::string>>();
-  for (auto iter = attrs->cbegin(); iter != attrs->cend(); iter++) {
-    vAttrs->insert(vAttrs->begin(), std::pair<std::string, std::string>(
-                                        iter->first, iter->second));
-  }
-
-  RenderAction *action =
-      new RenderActionUpdateAttr(page_id(), render->ref(), vAttrs);
-  PostRenderAction(action);
-
-  if (vAttrs != nullptr) {
-    vAttrs->clear();
-    delete vAttrs;
-    vAttrs = nullptr;
-  }
-}
-
-void RenderPage::SendAppendTreeCreateFinish(const std::string &ref) {
-  RenderAction *action = new RenderActionAppendTreeCreateFinish(page_id(), ref);
-  PostRenderAction(action);
-}
-
-void RenderPage::Batch() {
-  if ((kUseVSync && this->need_layout_.load()) || !kUseVSync) {
-    LayoutInner();
-  }
-#if OS_IOS
-  // vsync may stopped, trigger once
-  RenderAction *action = new RenderActionTriggerVSync(page_id());
-  PostRenderAction(action);
-#endif
-}
-
-RenderObject *RenderPage::GetRenderObject(const std::string &ref) {
-  std::map<std::string, RenderObject *>::iterator iter =
-      this->render_object_registers_.find(ref);
-  if (iter != this->render_object_registers_.end()) {
-    return iter->second;
-  } else {
-    return nullptr;
-  }
-}
-
-void RenderPage::OnRenderPageInit() {}
-
-void RenderPage::OnRenderProcessStart() {}
-
-void RenderPage::OnRenderProcessExited() {}
-
-void RenderPage::OnRenderProcessGone() {}
-
-void RenderPage::OnRenderPageClose() {}
-
-bool RenderPage::ReapplyStyles() {
-  if (!reserve_css_styles_) {
-    LOGE("CSS styles of page %s are dropped, unable to do reapply styles actions.", page_id().c_str());
-    return false;
-  }
-  
-  for (auto it = render_object_registers_.begin(); it != render_object_registers_.end(); ++ it) {
-    if (it->second == nullptr) {
-      continue;
-    }
-    
-    auto stylesMap = it->second->styles_;
-    if (stylesMap != nullptr) {
-      std::vector<std::pair<std::string, std::string>> *style = nullptr;
-      std::vector<std::pair<std::string, std::string>> *margin = nullptr;
-      std::vector<std::pair<std::string, std::string>> *padding = nullptr;
-      std::vector<std::pair<std::string, std::string>> *border = nullptr;
-      bool inheriableLayout = false;
-      
-      for (auto sit = stylesMap->begin(); sit != stylesMap->end(); ++ sit) {
-        switch (it->second->UpdateStyle(sit->first, sit->second)) {
-          case kTypeStyle:
-            if (style == nullptr) {
-              style = new std::vector<std::pair<std::string, std::string>>();
-            }
-            style->insert(style->end(), std::make_pair(sit->first, sit->second));
-            break;
-          case kTypeMargin:
-            if (margin == nullptr) {
-              margin = new std::vector<std::pair<std::string, std::string>>();
-            }
-            it->second->UpdateStyleInternal(
-                                        sit->first, sit->second, 0, [=](float foo) {
-                                          margin->insert(margin->end(), std::make_pair(sit->first, to_string(foo)));
-                                        });
-            break;
-          case kTypePadding:
-            if (padding == nullptr) {
-              padding = new std::vector<std::pair<std::string, std::string>>();
-            }
-            it->second->UpdateStyleInternal(
-                                        sit->first, sit->second, 0, [=](float foo) {
-                                          padding->insert(padding->end(), std::make_pair(sit->first, to_string(foo)));
-                                        });
-            break;
-          case kTypeBorder:
-            if (border == nullptr) {
-              border = new std::vector<std::pair<std::string, std::string>>();
-            }
-            it->second->UpdateStyleInternal(
-                                        sit->first, sit->second, 0, [=](float foo) {
-                                          border->insert(border->end(), std::make_pair(sit->first, to_string(foo)));
-                                        });
-            break;
-          case kTypeInheritableLayout:
-            inheriableLayout = true;
-            break;
-          default: break;
-        }
-      }
-      
-      if (style != nullptr || margin != nullptr || padding != nullptr ||
-          border != nullptr || inheriableLayout) {
-        SendUpdateStyleAction(it->second, style, margin, padding, border);
-      }
-      
-      if (style != nullptr) {
-        delete style;
-      }
-      
-      if (margin != nullptr) {
-        delete margin;
-      }
-      
-      if (padding != nullptr) {
-        delete padding;
-      }
-      
-      if (border != nullptr) {
-        delete border;
-      }
-    }
-  }
-  
-  Batch();
-  return true;
-}
-  
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page.h
deleted file mode 100644
index d0a2dcb..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#ifndef CORE_RENDER_PAGE_RENDER_PAGE_H_
-#define CORE_RENDER_PAGE_RENDER_PAGE_H_
-
-#include <atomic>
-#include <cmath>
-#include <map>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "render_page_base.h"
-#include "core/css/constants_value.h"
-
-namespace WeexCore {
-
-class RenderAction;
-class RenderObject;
-
-class RenderPage: public RenderPageBase {
- private:
-  void TraverseTree(RenderObject *render, long index);
-
-  void SendCreateBodyAction(RenderObject *render);
-
-  void SendAddElementAction(RenderObject *child, RenderObject *parent,
-                            int index, bool is_recursion,
-                            bool will_layout = true);
-
-  void SendRemoveElementAction(const std::string &ref);
-
-  void SendMoveElementAction(const std::string &ref,
-                             const std::string &parent_ref, int index);
-
-  void SendLayoutAction(RenderObject *render, int index);
-
-  void SendUpdateStyleAction(
-      RenderObject *render,
-      std::vector<std::pair<std::string, std::string>> *style,
-      std::vector<std::pair<std::string, std::string>> *margin,
-      std::vector<std::pair<std::string, std::string>> *padding,
-      std::vector<std::pair<std::string, std::string>> *border);
-
-  void SendUpdateAttrAction(
-      RenderObject *render,
-      std::vector<std::pair<std::string, std::string>> *attrs);
-
-  void SendAppendTreeCreateFinish(const std::string &ref);
-  
-  void LayoutInner();
-
-public:
-  explicit RenderPage(const std::string& page_id);
-
-  ~RenderPage();
-
-  void CalculateLayout();
-
-  bool CreateRootRender(RenderObject *root);
-
-  bool AddRenderObject(const std::string &parent_ref, int insert_posiotn,
-                       RenderObject *child);
-
-  virtual bool RemoveRenderObject(const std::string &ref) override;
-
-  virtual bool MoveRenderObject(const std::string &ref, const std::string &parent_ref, int index) override;
-
-  virtual bool UpdateStyle(const std::string &ref,
-                   std::vector<std::pair<std::string, std::string>> *styles) override;
-
-  virtual bool UpdateAttr(const std::string &ref,
-                  std::vector<std::pair<std::string, std::string>> *attrs) override;
-
-  virtual void SetDefaultHeightAndWidthIntoRootRender(
-      const float default_width, const float default_height,
-      const bool is_width_wrap_content, const bool is_height_wrap_content) override;
-
-  virtual bool AddEvent(const std::string &ref, const std::string &event) override;
-
-  virtual bool RemoveEvent(const std::string &ref, const std::string &event) override;
-
-  virtual bool CreateFinish() override;
-
-  void Batch();
-
-  void LayoutImmediately();
-
-  void SendUpdateAttrAction(RenderObject *render,
-                            std::map<std::string, std::string> *attrs);
-
-  virtual RenderObject *GetRenderObject(const std::string &ref) override;
-
-  void SetRootRenderObject(RenderObject *root);
-    
-  // ****** Render object managing ****** //
-  
-  void PushRenderToRegisterMap(RenderObject *render);
-    
-  void RemoveRenderFromRegisterMap(RenderObject *render);
-
-  // ****** Life Cycle ****** //
-
-  void OnRenderPageInit();
-
-  void OnRenderProcessStart();
-
-  void OnRenderProcessExited();
-
-  void OnRenderProcessGone();
-
-  virtual void OnRenderPageClose() override;
-  
-  // Re-apply raw css styles to page and trigger layout
-  virtual bool ReapplyStyles() override;
-
- public:
-
-  inline bool is_dirty() { return this->is_dirty_.load(); }
-
-  inline void set_is_dirty(bool dirty) { this->is_dirty_.store(dirty); }
-
-  inline void set_is_render_container_width_wrap_content(bool wrap) {
-    this->is_render_container_width_wrap_content_.store(wrap);
-  }
-
-  inline bool is_render_container_width_wrap_content() {
-    return this->is_render_container_width_wrap_content_.load();
-  }
-
-
-  virtual float GetViewportWidth() override { return viewport_width_; }
-  virtual void SetViewportWidth(float value) override { viewport_width_ = value; };
-  virtual bool GetRoundOffDeviation() override { return round_off_deviation_; }
-  virtual void SetRoundOffDeviation(bool value) override { round_off_deviation_ = value; }
-  virtual float GetDeviceWidth() override { return device_width_; }
-  virtual void SetDeviceWidth(float value) override { device_width_ = value; }
-
-  inline float viewport_width() const { return this->viewport_width_; }
-
-  inline void set_viewport_width(float viewport_width) {
-    this->viewport_width_ = viewport_width;
-  }
-
-  inline float device_width(){
-    return this->device_width_;
-  }
-
-  inline void set_device_width(float device_width){
-    this->device_width_ = device_width;
-  }
-
-  inline bool round_off_deviation() const { return this->round_off_deviation_; }
-
-  inline void set_round_off_deviation(bool round_off_deviation) { this->round_off_deviation_ = round_off_deviation; }
-  
-  inline bool reserve_css_styles() const { return reserve_css_styles_; }
-  
-  inline void set_reserve_css_styles(bool value) { reserve_css_styles_ = value; }
-
-  inline void set_before_layout_needed(bool v) { is_before_layout_needed_.store(v); }
-
-  inline void set_platform_layout_needed(bool v) { is_platform_layout_needed_.store(v); }
-
-  inline void set_after_layout_needed(bool v) { is_after_layout_needed_.store(v); }
-
- public:
-  static constexpr bool kUseVSync = true;
-  std::atomic_bool need_layout_{false};
-  std::atomic_bool has_fore_layout_action_{false};
-
- private:
-  RenderObject *render_root_ = nullptr;
-  std::pair<float, float> render_page_size_;
-  std::map<std::string, RenderObject *> render_object_registers_;
-  std::atomic_bool is_dirty_{true};
-  std::atomic_bool is_render_container_width_wrap_content_{false};
-  std::atomic_bool is_render_container_height_wrap_content_{false};
-  std::atomic_bool is_before_layout_needed_{true};
-  std::atomic_bool is_platform_layout_needed_{false};
-  std::atomic_bool is_after_layout_needed_{true};
-  float viewport_width_ = -1;
-  float device_width_ = -1;
-  bool round_off_deviation_ = kDefaultRoundOffDeviation;
-  bool reserve_css_styles_ = false;
-};
-}  // namespace WeexCore
-
-#endif  // CORE_RENDER_PAGE_RENDER_PAGE_H_
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_base.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_base.cpp
deleted file mode 100644
index 8a3e914..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_base.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "core/render/action/render_action_createfinish.h"
-#include "core/render/action/render_action_render_success.h"
-#include "render_page_base.h"
-#include "core/moniter/render_performance.h"
-#include "core/manager/weex_core_manager.h"
-
-namespace WeexCore {
-
-    RenderPageBase::RenderPageBase(const std::string& page_id, const std::string& page_type):
-        page_id_(page_id), page_type_(page_type), render_performance_(nullptr) {
-            is_platform_page_ = page_type == "platform";
-            render_performance_ = new RenderPerformance();
-    }
-    
-    RenderPageBase::~RenderPageBase() {
-        if (render_performance_) {
-            delete render_performance_;
-        }
-    }
-    
-    void RenderPageBase::CssLayoutTime(const int64_t &time) {
-        if (this->render_performance_ != nullptr)
-            this->render_performance_->cssLayoutTime += time;
-    }
-    
-    void RenderPageBase::ParseJsonTime(const int64_t &time) {
-        if (this->render_performance_ != nullptr)
-            this->render_performance_->parseJsonTime += time;
-    }
-    
-    void RenderPageBase::CallBridgeTime(const int64_t &time) {
-        if (this->render_performance_ != nullptr)
-            this->render_performance_->callBridgeTime += time;
-    }
-    
-    std::vector<int64_t> RenderPageBase::PrintFirstScreenLog() {
-        std::vector<int64_t> ret;
-        if (this->render_performance_ != nullptr)
-            ret = this->render_performance_->PrintPerformanceLog(onFirstScreen);
-        return ret;
-    }
-    
-    std::vector<int64_t> RenderPageBase::PrintRenderSuccessLog() {
-        std::vector<int64_t> ret;
-        if (this->render_performance_ != nullptr)
-            ret = this->render_performance_->PrintPerformanceLog(onRenderSuccess);
-        return ret;
-    }
-    
-    std::unique_ptr<ValueWithType>
-    RenderPageBase::CallNativeModule(const char *module, const char *method,
-                                     const char *arguments, int arguments_length, const char *options,
-                                     int options_length) {
-        return WeexCoreManager::Instance()->
-        getPlatformBridge()->
-        platform_side()->
-        CallNativeModule(page_id_.c_str(), module, method, arguments, arguments_length, options, options_length);
-    }
-    
-    void RenderPageBase::CallNativeComponent(const char *ref, const char *method, const char *arguments, int arguments_length,
-                                             const char *options, int options_length) {
-        WeexCoreManager::Instance()
-        ->getPlatformBridge()
-        ->platform_side()
-        ->CallNativeComponent(page_id_.c_str(), ref, method, arguments, arguments_length,
-                              options, options_length);
-    }
-
-    void RenderPageBase::SendCreateFinishAction() {
-        RenderAction *action = new RenderActionCreateFinish(page_id());
-        PostRenderAction(action);
-    }
-
-    void RenderPageBase::SendRenderSuccessAction() {
-        RenderAction *action = new RenderActionRenderSuccess(page_id());
-        PostRenderAction(action);
-    }
-
-    void RenderPageBase::PostRenderAction(RenderAction *action) {
-        if (action != nullptr) {
-            action->ExecuteAction();
-            delete action;
-            action = nullptr;
-        }
-    }
-    
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_base.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_base.h
deleted file mode 100644
index 76e8658..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_base.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-#include <string>
-#include <map>
-#include <set>
-#include <vector>
-
-#include "include/WeexApiValue.h"
-
-namespace WeexCore {
-    
-class RenderObject;
-class RenderAction;
-class RenderPerformance;
-    
-class RenderPageBase {
-public:
-    explicit RenderPageBase(const std::string& page_id, const std::string& page_type);
-    virtual ~RenderPageBase();
-    
-    std::string page_id() { return page_id_; }
-    const std::string& page_type() const { return page_type_; }
-    bool is_platform_page() const { return is_platform_page_; }
-    
-    // DOM
-    virtual bool CreateBody(const std::string& ref, const std::string& type,
-                            std::map<std::string, std::string>* styles,
-                            std::map<std::string, std::string>* attrs,
-                            std::set<std::string>* events) { return false; }
-    
-    virtual bool AddRenderObject(const std::string& ref, const std::string& type,
-                                 const std::string &parent_ref, int index,
-                                 std::map<std::string, std::string>* styles,
-                                 std::map<std::string, std::string>* attrs,
-                                 std::set<std::string>* events) { return false; }
-    
-    virtual bool RemoveRenderObject(const std::string &ref) = 0;
-    
-    virtual bool MoveRenderObject(const std::string &ref, const std::string &parent_ref, int index) = 0;
-    
-    virtual bool UpdateStyle(const std::string &ref, std::vector<std::pair<std::string, std::string>> *src) = 0;
-    
-    virtual bool UpdateAttr(const std::string &ref, std::vector<std::pair<std::string, std::string>> *attrs) = 0;
-    
-    virtual bool AddEvent(const std::string &ref, const std::string &event) = 0;
-    
-    virtual bool RemoveEvent(const std::string &ref, const std::string &event) = 0;
-    
-    virtual bool CreateFinish() = 0;
-    
-    virtual std::unique_ptr<ValueWithType> CallNativeModule(const char *module, const char *method,
-                                                            const char *arguments, int arguments_length, const char *options,
-                                                            int options_length);
-    virtual void CallNativeComponent(const char *ref, const char *method, const char *arguments, int arguments_length,
-                                     const char *options, int options_length);
-    
-    // Performance
-    void CssLayoutTime(const int64_t &time);
-    void ParseJsonTime(const int64_t &time);
-    void CallBridgeTime(const int64_t &time);
-    std::vector<int64_t> PrintFirstScreenLog();
-    std::vector<int64_t> PrintRenderSuccessLog();
-    
-    // Life cycle
-    virtual RenderObject *GetRenderObject(const std::string &ref) { return nullptr; };
-    virtual void SetDefaultHeightAndWidthIntoRootRender(const float default_width, const float default_height,
-                                                        const bool is_width_wrap_content, const bool is_height_wrap_content) {};
-    
-    virtual void OnRenderPageClose() = 0;
-    
-    virtual bool ReapplyStyles() = 0;
-    
-    virtual float GetViewportWidth() = 0;
-    virtual void SetViewportWidth(float value) = 0;
-    virtual bool GetRoundOffDeviation() = 0;
-    virtual void SetRoundOffDeviation(bool value) = 0;
-    virtual float GetDeviceWidth() = 0;
-    virtual void SetDeviceWidth(float value) = 0;
-    
-protected:
-    virtual void SendCreateFinishAction();
-    virtual void SendRenderSuccessAction();
-    virtual void PostRenderAction(RenderAction *action);
-    
-protected:
-    bool is_platform_page_;
-    std::string page_id_;
-    std::string page_type_;
-    
-    RenderPerformance *render_performance_;
-};
-    
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_custom.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_custom.cpp
deleted file mode 100644
index 2317511..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_custom.cpp
+++ /dev/null
@@ -1,242 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-#include <wson_parser.h>
-#include "base/log_defines.h"
-#include "render_page_custom.h"
-
-namespace WeexCore {
-    
-    template<typename T>
-    static std::shared_ptr<T> SharedMove(T& source) {
-        return std::make_shared<T>(std::move(source));
-    }
-
-    RenderPageCustom::RenderPageCustom(const std::string& page_id, const std::string& page_type, const PageOptions& options): RenderPageBase(page_id, page_type) {
-        valid_ = true;
-        target_ = RenderTargetManager::sharedInstance()->getRenderTarget(page_type);
-        if (target_) {
-            RenderTarget::PageOptions targetOptions;
-            targetOptions.args = std::move(options.args);
-            targetOptions.view_scale = options.view_scale;
-            targetOptions.is_round_off = options.is_round_off;
-            targetOptions.viewport_width = options.viewport_width;
-            targetOptions.device_width = options.device_width;
-            target_->createPage(page_id, targetOptions);;
-        }
-    }
-    
-    bool RenderPageCustom::CreateBody(const std::string& ref, const std::string& type,
-                            std::map<std::string, std::string>* styles,
-                            std::map<std::string, std::string>* attrs,
-                            std::set<std::string>* events) {
-        if (target_) {
-            auto managedStyles = SharedMove(*styles);
-            auto managedAttrs = SharedMove(*attrs);
-            auto managedEvents = SharedMove(*events);
-            target_->createBody(page_id_, ref, type, managedStyles, managedAttrs, managedEvents);
-        }
-        delete styles;
-        delete attrs;
-        delete events;
-        return true;
-    }
-    
-    bool RenderPageCustom::AddRenderObject(const std::string& ref, const std::string& type,
-                                           const std::string &parent_ref, int index,
-                                           std::map<std::string, std::string>* styles,
-                                           std::map<std::string, std::string>* attrs,
-                                           std::set<std::string>* events) {
-        if (target_) {
-            auto managedStyles = SharedMove(*styles);
-            auto managedAttrs = SharedMove(*attrs);
-            auto managedEvents = SharedMove(*events);
-            target_->addElement(page_id_, ref, type, parent_ref, index, managedStyles, managedAttrs, managedEvents);
-        }
-        delete styles;
-        delete attrs;
-        delete events;
-        return true;
-    }
-    
-    bool RenderPageCustom::RemoveRenderObject(const std::string &ref) {
-        if (target_) {
-            target_->removeElement(page_id_, ref);
-        }
-        return true;
-    }
-    
-    bool RenderPageCustom::MoveRenderObject(const std::string &ref, const std::string &parent_ref, int index) {
-        if (target_) {
-            target_->moveElement(page_id_, ref, parent_ref, index);
-        }
-        return true;
-    }
-    
-    bool RenderPageCustom::UpdateStyle(const std::string &ref, std::vector<std::pair<std::string, std::string>> *styles) {
-        if (target_) {
-            std::shared_ptr<std::map<std::string, std::string>> managedStyles = std::make_shared<std::map<std::string, std::string>>();
-            for (auto& p : *styles) {
-                (*managedStyles)[std::move(p.first)] = std::move(p.second);
-            }
-            target_->updateStyles(page_id_, ref, managedStyles);
-        }
-        delete styles;
-        return true;
-    }
-    
-    bool RenderPageCustom::UpdateAttr(const std::string &ref, std::vector<std::pair<std::string, std::string>> *attrs) {
-        if (target_) {
-            std::shared_ptr<std::map<std::string, std::string>> managedAttrs = std::make_shared<std::map<std::string, std::string>>();
-            for (auto& p : *attrs) {
-                (*managedAttrs)[std::move(p.first)] = std::move(p.second);
-            }
-            target_->updateAttributes(page_id_, ref, managedAttrs);
-        }
-        delete attrs;
-        return true;
-    }
-    
-    bool RenderPageCustom::AddEvent(const std::string &ref, const std::string &event) {
-        if (target_) {
-            target_->addEvent(page_id_, ref, event);
-        }
-        return true;
-    }
-    
-    bool RenderPageCustom::RemoveEvent(const std::string &ref, const std::string &event) {
-        if (target_) {
-            target_->removeEvent(page_id_, ref, event);
-        }
-        return true;
-    }
-    
-    bool RenderPageCustom::CreateFinish() {
-        if (target_) {
-            target_->createFinish(page_id_);
-        }
-        SendCreateFinishAction();
-        SendRenderSuccessAction();
-        return true;
-    }
-    
-    std::unique_ptr<ValueWithType> RenderPageCustom::CallNativeModule(const char *module, const char *method,
-                                                                      const char *argumentsWson, int arguments_length, const char *optionsWson,
-                                                                      int options_length) {
-        // If render target can handle module method, we forward to render target.
-        if (target_) {
-            if (target_->shouldHandleModuleMethod(module, method)) {
-                bool handled = false;
-                //const char* will not assign, have some problem on android
-                std::string argumentsJson;
-                int jsonArgumentsLength = arguments_length;
-                if (argumentsWson) {
-                    wson_parser parser(argumentsWson, arguments_length);
-                    argumentsJson = parser.toStringUTF8();
-                    jsonArgumentsLength = (int)argumentsJson.length();
-                }
-                
-                std::string jsonOptions;
-                int jsonOptionsLength = options_length;
-                if (optionsWson) {
-                    wson_parser parser(optionsWson, options_length);
-                    jsonOptions = parser.toStringUTF8();
-                    jsonOptionsLength = (int)jsonOptions.length();
-                }
-
-                auto result = target_->callNativeModule(page_id_, module, method,
-                                                        argumentsJson, jsonArgumentsLength,
-                                                        jsonOptions, jsonOptionsLength, handled);
-                if (handled) {
-                    return result;
-                }
-            }
-            // custom page cannot handle this module method
-            return RenderPageBase::CallNativeModule(module, method, argumentsWson, arguments_length, optionsWson, options_length);
-        }
-        //None Render Target, Use Default CallNativeModule
-        return RenderPageBase::CallNativeModule(module, method, argumentsWson, arguments_length, optionsWson, options_length);
-    }
-    
-    void RenderPageCustom::CallNativeComponent(const char *ref, const char *method, const char *argumentsWson, int arguments_length,
-                                               const char *optionsWson, int options_length) {
-        if (target_) {
-            std::string argumentsJson;
-            int jsonArgumentsLength = arguments_length;
-            if (argumentsWson) {
-                wson_parser parser(argumentsWson, arguments_length);
-                argumentsJson = parser.toStringUTF8();
-                jsonArgumentsLength = (int)argumentsJson.length();
-            }
-            
-            std::string jsonOptions;
-            int jsonOptionsLength = options_length;
-            if (optionsWson) {
-                wson_parser parser(optionsWson, options_length);
-                jsonOptions = parser.toStringUTF8();
-                jsonOptionsLength = (int)jsonOptions.length();
-            }
-            
-            target_->callNativeComponent(page_id_, ref, method, argumentsJson, jsonArgumentsLength, jsonOptions, jsonOptionsLength);
-        }
-        else {
-            RenderPageBase::CallNativeComponent(ref, method, argumentsWson, arguments_length, optionsWson, options_length);
-        }
-    }
-    
-    // Life cycle
-    void RenderPageCustom::SetDefaultHeightAndWidthIntoRootRender(const float default_width, const float default_height,
-                                                                  const bool is_width_wrap_content, const bool is_height_wrap_content) {
-        
-    }
-    
-    void RenderPageCustom::OnRenderPageClose() {
-        if (target_) {
-            target_->deletePage(page_id_);
-        }
-    }
-    
-    bool RenderPageCustom::ReapplyStyles() {
-        return false;
-    }
-    
-    float RenderPageCustom::GetViewportWidth() {
-        return 0;
-    }
-    
-    void RenderPageCustom::SetViewportWidth(float value) {
-        
-    }
-    
-    bool RenderPageCustom::GetRoundOffDeviation() {
-        return true;
-    }
-    
-    void RenderPageCustom::SetRoundOffDeviation(bool value) {
-        
-    }
-    
-    float RenderPageCustom::GetDeviceWidth() {
-        return 0;
-    }
-    
-    void RenderPageCustom::SetDeviceWidth(float value) {
-        
-    }
-    
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_custom.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_custom.h
deleted file mode 100644
index ba51d31..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/page/render_page_custom.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-#include "render_page_base.h"
-#include "core/render/target/render_target.h"
-
-namespace WeexCore {
-    
-    class RenderTarget;
-    
-    class RenderPageCustom: public RenderPageBase {
-    public:
-        struct PageOptions {
-            bool is_round_off = false;
-            float viewport_width = -1;
-            float device_width = -1;
-            float view_scale = 1;
-            std::map<std::string, std::string> args;
-        };
-        
-    public:
-        RenderPageCustom() = delete;
-        explicit RenderPageCustom(const std::string& page_id, const std::string& page_type, const PageOptions& options);
-        
-        RenderTarget* GetRenderTarget() { return target_; }
-        bool IsValid() const { return valid_; }
-        void Invalidate() { valid_ = false; }
-        
-        virtual bool CreateBody(const std::string& ref, const std::string& type,
-                                std::map<std::string, std::string>* styles,
-                                std::map<std::string, std::string>* attrs,
-                                std::set<std::string>* events) override;
-        
-        virtual bool AddRenderObject(const std::string& ref, const std::string& type,
-                                     const std::string &parent_ref, int index,
-                                     std::map<std::string, std::string>* styles,
-                                     std::map<std::string, std::string>* attrs,
-                                     std::set<std::string>* events) override;
-        
-        virtual bool RemoveRenderObject(const std::string &ref) override;
-        
-        virtual bool MoveRenderObject(const std::string &ref, const std::string &parent_ref, int index) override;
-        
-        virtual bool UpdateStyle(const std::string &ref, std::vector<std::pair<std::string, std::string>> *styles) override;
-        
-        virtual bool UpdateAttr(const std::string &ref, std::vector<std::pair<std::string, std::string>> *attrs) override;
-        
-        virtual bool AddEvent(const std::string &ref, const std::string &event) override;
-        
-        virtual bool RemoveEvent(const std::string &ref, const std::string &event) override;
-        
-        virtual bool CreateFinish() override;
-        
-        virtual std::unique_ptr<ValueWithType> CallNativeModule(const char *module, const char *method,
-                                                                const char *arguments, int arguments_length, const char *options,
-                                                                int options_length) override;
-        virtual void CallNativeComponent(const char *ref, const char *method, const char *arguments, int arguments_length,
-                                         const char *options, int options_length) override;
-
-        // Life cycle
-        virtual void SetDefaultHeightAndWidthIntoRootRender(const float default_width, const float default_height,
-                                                            const bool is_width_wrap_content, const bool is_height_wrap_content) override;
-        
-        virtual void OnRenderPageClose() override;
-        
-        virtual bool ReapplyStyles() override;
-        
-        virtual float GetViewportWidth() override;
-        virtual void SetViewportWidth(float value) override;
-        virtual bool GetRoundOffDeviation() override;
-        virtual void SetRoundOffDeviation(bool value) override;
-        virtual float GetDeviceWidth() override;
-        virtual void SetDeviceWidth(float value) override;
-        
-    private:
-        bool valid_;
-        RenderTarget* target_;
-    };
-    
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/target/render_target.cpp b/ios/Pods/WeexSDK/weex_core/Source/core/render/target/render_target.cpp
deleted file mode 100644
index 5a2cae5..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/target/render_target.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "render_target.h"
-#include "core/render/manager/render_manager.h"
-
-namespace WeexCore {
-    
-    RenderTargetManager* RenderTargetManager::sharedInstance() {
-        // c++11 guarantees thread-safe on static initialization
-        static RenderTargetManager* instance = new RenderTargetManager();
-        return instance;
-    };
-
-    std::string RenderTargetManager::getRenderTargetName(const std::string& page) {
-        return RenderManager::GetInstance()->getPageArgument(page, "renderType");
-    }
-    
-    void RenderTargetManager::registerRenderTarget(RenderTarget* target) {
-        if (target) {
-            targets_.push_back(target);
-        }
-    }
-    
-    RenderTarget* RenderTargetManager::getRenderTarget(const std::string& type) {
-        for (auto t : targets_) {
-            if (t->type() == type) {
-                return t;
-            }
-        }
-        return nullptr;
-    }
-    
-    std::set<std::string> RenderTargetManager::getAvailableTargetNames() {
-        std::set<std::string> result;
-        for (auto t : targets_) {
-            result.insert(t->type());
-        }
-        return result;
-    }
-    
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/core/render/target/render_target.h b/ios/Pods/WeexSDK/weex_core/Source/core/render/target/render_target.h
deleted file mode 100644
index 81f7fc4..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/core/render/target/render_target.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-#include "../../api/wx_api.h"
-#if HERON_LIBRARY
-#include <jsengine/WeexApiValue.h>
-#else
-#include "../../../include/WeexApiValue.h"
-#endif
-#include <string>
-#include <vector>
-#include <map>
-#include <set>
-
-namespace WeexCore {
-
-    class WX_EXPORT RenderTarget {
-
-    public:
-        struct WX_EXPORT PageOptions {
-            bool is_round_off = false;
-            float viewport_width = -1;
-            float device_width = -1;
-            float view_scale = 1;
-            void* user_data = nullptr;
-            std::map<std::string, std::string> args;
-        };
-
-    public:
-        RenderTarget(const std::string& type): type_(type) {}
-
-        const std::string& type() { return type_; }
-
-    public:
-        // APIs that should be implemented by sub class
-        virtual void createPage(const std::string& page, const PageOptions& options) = 0;
-
-        virtual void deletePage(const std::string& page) = 0;
-
-        virtual void createBody(const std::string& page, const std::string& ref, const std::string& type,
-                                std::shared_ptr<std::map<std::string, std::string>> styles,
-                                std::shared_ptr<std::map<std::string, std::string>> attrs,
-                                std::shared_ptr<std::set<std::string>> events) = 0;
-
-        virtual void addElement(const std::string& page, const std::string& ref, const std::string& type,
-                                const std::string &parent_ref, int index,
-                                std::shared_ptr<std::map<std::string, std::string>> styles,
-                                std::shared_ptr<std::map<std::string, std::string>> attrs,
-                                std::shared_ptr<std::set<std::string>> events) = 0;
-
-        virtual void removeElement(const std::string& page, const std::string &ref) = 0;
-
-        virtual void moveElement(const std::string& page, const std::string &ref, const std::string &parent_ref, int index) = 0;
-
-        virtual void updateStyles(const std::string& page, const std::string &ref, std::shared_ptr<std::map<std::string, std::string>> styles) = 0;
-
-        virtual void updateAttributes(const std::string& page, const std::string &ref, std::shared_ptr<std::map<std::string, std::string>> attrs) = 0;
-
-        virtual void addEvent(const std::string& page, const std::string &ref, const std::string &event) = 0;
-
-        virtual void removeEvent(const std::string& page, const std::string &ref, const std::string &event) = 0;
-
-        virtual void createFinish(const std::string& page) = 0;
-        
-        virtual bool shouldHandleModuleMethod(const std::string& module, const std::string& method) = 0;
-        
-        virtual std::unique_ptr<ValueWithType> callNativeModule(const std::string& page,
-                                                                const std::string& module,
-                                                                const std::string& method,
-                                                                const std::string& arguments,
-                                                                int nArguments,
-                                                                const std::string& options,
-                                                                int nOptions, bool& handled) = 0;
-        
-        virtual void callNativeComponent(const std::string& page, const std::string& ref, const std::string& method, const std::string& arguments, int nArguments, const std::string& options, int nOptions) = 0;
-
-        // Life cycle
-        virtual uintptr_t createRootView(const std::string& page, float x, float y, float width, float height) = 0;
-
-        //        virtual void SetDefaultHeightAndWidthIntoRootRender(const float default_width, const float default_height,
-        //                                                            const bool is_width_wrap_content, const bool is_height_wrap_content) = 0;
-        //
-        //        virtual void OnRenderPageClose() = 0;
-        //
-        //        virtual float GetViewportWidth() = 0;
-        //        virtual void SetViewportWidth(float value) = 0;
-        //        virtual bool GetRoundOffDeviation() = 0;
-        //        virtual void SetRoundOffDeviation(bool value) = 0;
-
-    protected:
-        std::string type_;
-    };
-
-    class WX_EXPORT RenderTargetManager {
-    public:
-        WX_EXPORT static RenderTargetManager* sharedInstance();
-        
-        WX_EXPORT static std::string getRenderTargetName(const std::string& page);
-
-        WX_EXPORT void registerRenderTarget(RenderTarget* target);
-
-        WX_EXPORT RenderTarget* getRenderTarget(const std::string& type);
-
-        WX_EXPORT std::set<std::string> getAvailableTargetNames();
-
-    private:
-        std::vector<RenderTarget*> targets_;
-    };
-
-}  // namespace WeexCore
diff --git a/ios/Pods/WeexSDK/weex_core/Source/include/WeexApiHeader.h b/ios/Pods/WeexSDK/weex_core/Source/include/WeexApiHeader.h
deleted file mode 100644
index 0f5572e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/include/WeexApiHeader.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by Darin on 12/02/2018.
-//
-
-#ifndef WEEXV8_WEEXAPIHEADER_H
-#define WEEXV8_WEEXAPIHEADER_H
-
-#include <vector>
-#include <set>
-#include <map>
-#include "WeexApiValue.h"
-
-#ifdef OS_ANDROID
-#include <jni.h>
-#include "third_party/IPC/IPCResult.h"
-#endif
-
-namespace WeexCore {
-    class WXCoreMargin;
-    class WXCorePadding;
-    class WXCoreBorderWidth;
-    class WXCoreSize;
-}  // namespace WeexCore
-using namespace WeexCore;
-
-class WeexJSResult{
-public:
-    std::unique_ptr<char[]> data;
-    int length = 0;
-    WeexJSResult() : data(nullptr), length(0) {}
-    WeexJSResult(std::unique_ptr<char[]> d, int l) : data(std::move(d)), length(l) {}
-};
-
-typedef struct InitFrameworkParams {
-    WeexByteArray *type;
-    WeexByteArray *value;
-} INIT_FRAMEWORK_PARAMS;
-
-#ifdef OS_ANDROID
-
-typedef void (*FuncSetJSVersion)(const char *jsVersion);
-
-typedef void (*FuncReportException)(const char *pageId, const char *func, const char *exception_string);
-typedef void (*FuncReportServerCrash)(const char *instance_id);
-typedef void (*FuncReportNativeInitStatus)(const char *status_code, const char *error_msg);
-
-typedef void (*FuncCallNative)(const char *pageId, const char *task, const char *callback);
-
-typedef std::unique_ptr<ValueWithType> (*FuncCallNativeModule)(const char *pageId, const char *module, const char *method,
-                                                           const char *arguments, int argumentsLen, const char *options, int optionsLen);
-
-typedef void (*FuncCallNativeComponent)(const char *pageId, const char *ref,
-                                        const char *method, const char *arguments, int argumentsLen, const char *options, int optionsLen);
-
-typedef void (*FuncCallAddElement)(const char *pageId, const char *parentRef, const char *domStr, int domLen,
-                                   const char *index_cstr);
-
-typedef void (*FuncSetTimeout)(const char *callbackId, const char *time);
-
-typedef void (*FuncCallNativeLog)(const char *str_array);
-
-typedef void (*FuncCallCreateBody)(const char *pageId, const char *domStr, int domStrLen);
-
-typedef int (*FuncCallUpdateFinish)(const char *pageId, const char *task,int taskLen, const char *callback, int callbackLen);
-
-typedef void (*FuncCallCreateFinish)(const char *pageId);
-
-typedef int (*FuncCallRefreshFinish)(const char *pageId, const char *task, const char *callback);
-
-typedef void (*FuncCallUpdateAttrs)(const char *pageId, const char *ref, const char *data, int dataLen);
-
-typedef void (*FuncCallUpdateStyle)(const char *pageId, const char *ref, const char *data, int dataLen);
-
-typedef void (*FuncCallRemoveElement)(const char *pageId, const char *ref);
-
-typedef void (*FuncCallMoveElement)(const char *pageId, const char *ref, const char *parentRef, int index);
-
-typedef void (*FuncCallAddEvent)(const char *pageId, const char *ref, const char *event);
-
-typedef void (*FuncCallRemoveEvent)(const char *pageId, const char *ref, const char *event);
-
-typedef int (*FuncSetInterval)(const char *pageId, const char *callbackId, const char *_time);
-
-typedef void (*FuncClearInterval)(const char *pageId, const char *callbackId);
-
-typedef const char *(*FuncCallGCanvasLinkNative)(const char *pageId, int type, const char *args);
-
-typedef const char *(*FuncT3dLinkNative)(int type, const char *args);
-
-typedef void (*FuncCallHandlePostMessage)(const char *vimId, const char *data, int dataLength);
-
-typedef void
-(*FuncCallDIspatchMessage)(const char *clientId, const char *data, int dataLength, const char *callback, const char *vmId);
-
-typedef std::unique_ptr<WeexJSResult> (*FuncCallDispatchMessageSync)(
-    const char *clientId, const char *data, int dataLength, const char *vmId);
-
-typedef void
-(*FuncOnReceivedResult)(long callback_id, std::unique_ptr<WeexJSResult>& result);
-typedef void
-(*FuncUpdateComponentData)(const char* page_id, const char* cid, const char* json_data);
-
-
-typedef struct FunctionsExposedByCore {
-    FuncSetJSVersion funcSetJSVersion;
-    FuncReportException funcReportException;
-    FuncCallNative funcCallNative;
-    FuncCallNativeModule funcCallNativeModule;
-    FuncCallNativeComponent funcCallNativeComponent;
-    FuncCallAddElement funcCallAddElement;
-    FuncSetTimeout funcSetTimeout;
-    FuncCallNativeLog funcCallNativeLog;
-    FuncCallCreateBody funcCallCreateBody;
-    FuncCallUpdateFinish funcCallUpdateFinish;
-    FuncCallCreateFinish funcCallCreateFinish;
-    FuncCallRefreshFinish funcCallRefreshFinish;
-    FuncCallUpdateAttrs funcCallUpdateAttrs;
-    FuncCallUpdateStyle funcCallUpdateStyle;
-    FuncCallRemoveElement funcCallRemoveElement;
-    FuncCallMoveElement funcCallMoveElement;
-    FuncCallAddEvent funcCallAddEvent;
-    FuncCallRemoveEvent funcCallRemoveEvent;
-    FuncSetInterval funcSetInterval;
-    FuncClearInterval funcClearInterval;
-    FuncCallGCanvasLinkNative funcCallGCanvasLinkNative;
-    FuncT3dLinkNative funcT3dLinkNative;
-    FuncCallHandlePostMessage funcCallHandlePostMessage;
-    FuncCallDIspatchMessage funcCallDIspatchMessage;
-    FuncCallDispatchMessageSync funcCallDispatchMessageSync;
-    FuncOnReceivedResult  funcOnReceivedResult;
-    FuncUpdateComponentData funcUpdateComponentData;
-} FunctionsExposedByCore;
-
-typedef void (*FuncCallSetJSVersion)(const char* version);
-typedef int (*CallNative)(const char *pageId, const char *task, const char *callback);
-typedef int (*FuncCreateBody)(const char* page_id, const char *component_type, const char* ref,
-                              std::map<std::string, std::string> *styles,
-                              std::map<std::string, std::string> *attributes,
-                              std::set<std::string> *events,
-                              const WXCoreMargin &margins,
-                              const WXCorePadding &paddings,
-                              const WXCoreBorderWidth &borders);
-typedef int (*FuncCreateFinish)(const char *pageId);
-typedef int (*FuncAddElement)(const char* page_id, const char *component_type, const char* ref,
-                              int &index, const char* parentRef,
-                              std::map<std::string, std::string> *styles,
-                              std::map<std::string, std::string> *attributes,
-                              std::set<std::string> *events,
-                              const WXCoreMargin &margins,
-                              const WXCorePadding &paddings,
-                              const WXCoreBorderWidth &borders,
-                              bool willLayout);
-typedef int (*FuncRemoveElement)(const char *pageId, const char *ref);
-typedef int (*FuncMoveElement)(const char *pageId, const char *ref, const char *parentRef, int index);
-typedef int (*FuncAddEvent)(const char *pageId, const char *ref, const char *event);
-typedef int (*FuncRemoveEvent)(const char *pageId, const char *ref, const char *event);
-typedef int (*FuncUpdateStyle)(const char* page_id, const char* ref,
-                               std::vector<std::pair<std::string, std::string>> *style,
-                               std::vector<std::pair<std::string, std::string>> *margin,
-                               std::vector<std::pair<std::string, std::string>> *padding,
-                               std::vector<std::pair<std::string, std::string>> *border);
-typedef int (*FuncUpdateAttr)(const char* page_id, const char* ref,
-                              std::vector<std::pair<std::string, std::string>> *attrs);
-typedef int (*FuncLayout)(const char *page_id, const char *ref,
-                          int top, int bottom, int left, int right,
-                          int height, int width, int index);
-typedef int (*FuncAppendTreeCreateFinish)(const char* page_id, const char* ref);
-typedef int (*FuncHasTransitionPros)(const char* page_id, const char* ref,
-                                     std::vector<std::pair<std::string, std::string>> *style);
-typedef WXCoreSize (*InvokeMeasureFunction)(const char* page_id, long render_ptr, float width, int width_measure_mode, float height, int height_measure_mode);
-typedef void (*InvokeLayoutBefore)(const char* page_id, long render_ptr);
-typedef void (*InvokeLayoutAfter)(const char* page_id, long render_ptr, float width, float height);
-typedef struct PlatformExposeFunctions {
-    FuncCallSetJSVersion set_js_version;
-    FuncReportException report_exception;
-    FuncReportServerCrash report_server_crash;
-    FuncReportNativeInitStatus report_native_Init_status;
-    CallNative call_native;
-    FuncCallNativeModule call_native_module;
-    FuncCallNativeComponent call_native_component;
-    FuncAddElement add_element;
-    FuncSetTimeout set_timeout;
-    FuncCallNativeLog native_log;
-    FuncCreateBody create_body;
-    FuncCallUpdateFinish update_finish;
-    FuncCreateFinish create_finish;
-    FuncCreateFinish render_success;
-    FuncCallRefreshFinish refresh_finish;
-    FuncUpdateAttr update_attrs;
-    FuncUpdateStyle update_style;
-    FuncRemoveElement remove_element;
-    FuncMoveElement move_element;
-    FuncAddEvent add_event;
-    FuncRemoveEvent remove_event;
-    FuncCallHandlePostMessage post_message;
-    FuncCallDIspatchMessage dispatch_message;
-    FuncLayout layout;
-    FuncAppendTreeCreateFinish append_tree_create_finish;
-    FuncHasTransitionPros has_transition_pros;
-    InvokeMeasureFunction invoke_measure_function;
-    InvokeLayoutBefore invoke_layout_before;
-    InvokeLayoutAfter invoke_layout_after;
-} PlatformExposeFunctions;
-
-
-typedef int (*FuncInitFramework)(const char *script, std::vector<INIT_FRAMEWORK_PARAMS *> &params);
-
-
-typedef int (*FuncInitAppFramework)(const char *instanceId, const char *appFramework,
-                                    std::vector<INIT_FRAMEWORK_PARAMS *> &params);
-
-typedef int (*FuncCreateAppContext)(const char *instanceId, const char *jsBundle);
-
-typedef std::unique_ptr<WeexJSResult> (*FuncExeJSOnAppWithResult)(const char *instanceId, const char *jsBundle);
-
-typedef int (*FuncCallJSOnAppContext)(const char *instanceId, const char *func, std::vector<VALUE_WITH_TYPE *> &params);
-
-typedef int (*FuncDestroyAppContext)(const char *instanceId);
-
-typedef int (*FuncExeJsService)(const char *source);
-
-typedef int (*FuncExeCTimeCallback)(const char *source);
-
-typedef int (*FuncExeJS)(const char *instanceId, const char *nameSpace, const char *func,
-                         std::vector<VALUE_WITH_TYPE *> &params);
-
-typedef std::unique_ptr<WeexJSResult>(*FuncExeJSWithResult)(const char *instanceId, const char *nameSpace, const char *func,
-                                           std::vector<VALUE_WITH_TYPE *> &params);
-
-typedef void(*FuncExeJSWithResultId)(const char *instanceId, const char *nameSpace, const char *func,
-                                           std::vector<VALUE_WITH_TYPE *> &params, long callback_id);
-
-typedef int (*FuncCreateInstance)(const char *instanceId, const char *func, const char *script, const char *opts,
-                                  const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params);
-
-typedef std::unique_ptr<WeexJSResult> (*FuncExeJSOnInstance)(const char *instanceId, const char *script,int type);
-
-typedef int (*FuncDestroyInstance)(const char *instanceId);
-
-typedef int (*FuncUpdateGlobalConfig)(const char *config);
-
-typedef int (*FuncUpdateInitFrameworkParams)(const std::string& key, const std::string& value, const std::string& desc);
-
-typedef struct FunctionsExposedByJS {
-    FuncInitFramework funcInitFramework;
-    FuncInitAppFramework funcInitAppFramework;
-    FuncCreateAppContext funcCreateAppContext;
-    FuncExeJSOnAppWithResult funcExeJSOnAppWithResult;
-    FuncCallJSOnAppContext funcCallJSOnAppContext;
-    FuncDestroyAppContext funcDestroyAppContext;
-    FuncExeJsService funcExeJsService;
-    FuncExeCTimeCallback funcExeCTimeCallback;
-    FuncExeJS funcExeJS;
-    FuncExeJSWithResult funcExeJSWithResult;
-    FuncExeJSWithResultId funcExeJSWithResultId;
-    FuncCreateInstance funcCreateInstance;
-    FuncExeJSOnInstance funcExeJSOnInstance;
-    FuncDestroyInstance funcDestroyInstance;
-    FuncUpdateGlobalConfig funcUpdateGlobalConfig;
-    FuncUpdateInitFrameworkParams funcUpdateInitFrameworkParams;
-} FunctionsExposedByJS;
-
-
-typedef void (*SetDefaultHeightAndWidthIntoRootDomCallback)(const std::string &instance_id,
-                                                    float default_width,
-                                                    float default_height,
-                                                    bool is_width_wrap_content,
-                                                    bool is_height_wrap_content);
-typedef void (*OnInstanceCloseCallback)(const std::string &instance_id);
-typedef void (*SetStyleWidthCallback)(const std::string &instance_id, const std::string& render_ref, float width);
-typedef void (*SetStyleHeightCallback)(const std::string &instance_id, const std::string& render_ref, float height);
-typedef void (*SetMarginCallback)(const std::string &instance_id, const std::string& render_ref, int edge, float value);
-typedef void (*SetPaddingCallback)(const std::string &instance_id, const std::string& render_ref, int edge, float value);
-typedef void (*SetPositionCallback)(const std::string &instance_id, const std::string& render_ref, int edge, float value);
-typedef void (*MarkDirtyCallback)(const std::string &instance_id, const std::string& render_ref);
-typedef void (*SetViewPortWidthCallback)(const std::string &instance_id, float width);
-typedef void (*ForceLayoutCallback)(const std::string &instance_id);
-typedef bool (*NotifyLayoutCallback)(const std::string &instance_id);
-typedef std::vector<int64_t> (*GetFirstScreenRenderTimeCallback)(const std::string &instance_id);
-typedef std::vector<int64_t> (*GetRenderFinishTimeCallback)(const std::string &instance_id);
-typedef void (*SetRenderContainerWrapContentCallback)(const std::string &instance_id, bool wrap);
-typedef void (*BindMeasurementToRenderObjectCallback)(long ptr);
-typedef void (*RegisterCoreEnvCallback)(const std::string& key, const std::string& value);
-
-typedef long (*GetRenderObjectCallback)(const std::string &instance_id, const std::string& render_ref);
-typedef void (*UpdateRenderObjectStyleCallback)(long render_ptr, const std::string& key, const std::string& value);
-typedef void (*UpdateRenderObjectAttrCallback)(long render_ptr, const std::string& key, const std::string& value);
-typedef long (*CopyRenderObjectCallback)(long render_ptr);
-typedef void (*SetMeasureFunctionAdapter)();
-typedef void (*SetPlatform)(const std::string& platformName);
-typedef void (*SetDeviceWidthAndHeight)(float width, float height);
-typedef void (*AddOption)(const std::string& key, const std::string& value);
-typedef struct CoreSideFunctionsOfPlatformBridge {
-    SetDefaultHeightAndWidthIntoRootDomCallback set_default_height_and_width_into_root_dom;
-    OnInstanceCloseCallback on_instance_close;
-    SetStyleWidthCallback set_style_width;
-    SetStyleHeightCallback set_style_height;
-    SetMarginCallback set_margin;
-    SetPaddingCallback set_padding;
-    SetPositionCallback set_position;
-    MarkDirtyCallback mark_dirty;
-    SetViewPortWidthCallback set_view_port_width;
-    ForceLayoutCallback force_layout;
-    NotifyLayoutCallback notify_layout;
-    GetFirstScreenRenderTimeCallback get_first_screen_render_time;
-    GetRenderFinishTimeCallback get_render_finish_time;
-    SetRenderContainerWrapContentCallback set_render_container_wrap_content;
-    BindMeasurementToRenderObjectCallback bind_measurement_to_render_object;
-    RegisterCoreEnvCallback register_core_env;
-    GetRenderObjectCallback get_render_object;
-    UpdateRenderObjectStyleCallback update_render_object_style;
-    UpdateRenderObjectAttrCallback update_render_object_attr;
-    CopyRenderObjectCallback copy_render_object;
-    SetMeasureFunctionAdapter set_measure_function_adapter;
-    SetPlatform set_platform;
-    SetDeviceWidthAndHeight set_device_width_and_height;
-    AddOption add_option;
-
-    FuncInitFramework init_framework;
-    FuncInitAppFramework init_app_framework;
-    FuncCreateAppContext create_app_context;
-    FuncExeJSOnAppWithResult exec_js__on_app_with_result;
-    FuncCallJSOnAppContext call_js_on_app_context;
-    FuncDestroyAppContext destroy_app_context;
-    FuncExeJsService exec_js_service;
-    FuncExeCTimeCallback exec_time_callback;
-    FuncExeJS exec_js;
-    FuncExeJSWithResult exec_js_with_result;
-    FuncCreateInstance create_instance;
-    FuncExeJSOnInstance exec_js_on_instance;
-    FuncDestroyInstance destroy_instance;
-    FuncUpdateGlobalConfig update_global_config;
-} CoreSideFunctionsOfPlatformBridge;
-#endif
-
-#endif //WEEXV8_WEEXAPIHEADER_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/include/WeexApiValue.h b/ios/Pods/WeexSDK/weex_core/Source/include/WeexApiValue.h
deleted file mode 100644
index ef6e99e..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/include/WeexApiValue.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-#include "stdlib.h"
-
-struct WeexString {
-    uint32_t length;
-    uint16_t content[1];
-};
-
-struct WeexByteArray {
-    uint32_t length;
-    char content[1];
-};
-
-enum class ParamsType {
-    INT32 = 1,
-    INT64,
-    FLOAT,
-    DOUBLE,
-    JSONSTRING,
-    STRING,
-    BYTEARRAY, /* terminated with zero. */
-    VOID,
-    JSUNDEFINED,
-    BYTEARRAYSTRING,
-    BYTEARRAYJSONSTRING,
-    END,
-};
-
-typedef union ExecJsParamValue {
-    int32_t int32Value;
-    int64_t int64Value;
-    float floatValue;
-    double doubleValue;
-    WeexString *string;
-    WeexByteArray *byteArray;
-} EXEC_JS_PARAM_VALUE;
-
-typedef struct ValueWithType {
-    ParamsType type;
-    EXEC_JS_PARAM_VALUE value;
-
-    ValueWithType(): type(ParamsType::JSUNDEFINED) {}
-    
-    // ValueWithType((int32_t)-1) normally represents failure for call native weex jsframework
-    ValueWithType(int32_t intValue): type(ParamsType::INT32), value({.int32Value = intValue}) {}
-} VALUE_WITH_TYPE;
diff --git a/ios/Pods/WeexSDK/weex_core/Source/third_party/json11/json11.cc b/ios/Pods/WeexSDK/weex_core/Source/third_party/json11/json11.cc
deleted file mode 100755
index 0b9bf36..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/third_party/json11/json11.cc
+++ /dev/null
@@ -1,788 +0,0 @@
-/* Copyright (c) 2013 Dropbox, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "json11.hpp"
-#include <cassert>
-#include <cmath>
-#include <cstdlib>
-#include <cstdio>
-#include <limits>
-
-namespace json11 {
-
-static const int max_depth = 200;
-
-using std::string;
-using std::vector;
-using std::map;
-using std::make_shared;
-using std::initializer_list;
-using std::move;
-
-/* Helper for representing null - just a do-nothing struct, plus comparison
- * operators so the helpers in JsonValue work. We can't use nullptr_t because
- * it may not be orderable.
- */
-struct NullStruct {
-    bool operator==(NullStruct) const { return true; }
-    bool operator<(NullStruct) const { return false; }
-};
-
-/* * * * * * * * * * * * * * * * * * * *
- * Serialization
- */
-
-static void dump(NullStruct, string &out) {
-    out += "null";
-}
-
-static void dump(double value, string &out) {
-    if (std::isfinite(value)) {
-        char buf[32];
-        snprintf(buf, sizeof buf, "%.17g", value);
-        out += buf;
-    } else {
-        out += "null";
-    }
-}
-
-static void dump(int value, string &out) {
-    char buf[32];
-    snprintf(buf, sizeof buf, "%d", value);
-    out += buf;
-}
-
-static void dump(bool value, string &out) {
-    out += value ? "true" : "false";
-}
-
-static void dump(const string &value, string &out) {
-    out += '"';
-    for (size_t i = 0; i < value.length(); i++) {
-        const char ch = value[i];
-        if (ch == '\\') {
-            out += "\\\\";
-        } else if (ch == '"') {
-            out += "\\\"";
-        } else if (ch == '\b') {
-            out += "\\b";
-        } else if (ch == '\f') {
-            out += "\\f";
-        } else if (ch == '\n') {
-            out += "\\n";
-        } else if (ch == '\r') {
-            out += "\\r";
-        } else if (ch == '\t') {
-            out += "\\t";
-        } else if (static_cast<uint8_t>(ch) <= 0x1f) {
-            char buf[8];
-            snprintf(buf, sizeof buf, "\\u%04x", ch);
-            out += buf;
-        } else if (static_cast<uint8_t>(ch) == 0xe2 && static_cast<uint8_t>(value[i+1]) == 0x80
-                   && static_cast<uint8_t>(value[i+2]) == 0xa8) {
-            out += "\\u2028";
-            i += 2;
-        } else if (static_cast<uint8_t>(ch) == 0xe2 && static_cast<uint8_t>(value[i+1]) == 0x80
-                   && static_cast<uint8_t>(value[i+2]) == 0xa9) {
-            out += "\\u2029";
-            i += 2;
-        } else {
-            out += ch;
-        }
-    }
-    out += '"';
-}
-
-static void dump(const Json::array &values, string &out) {
-    bool first = true;
-    out += "[";
-    for (const auto &value : values) {
-        if (!first)
-            out += ", ";
-        value.dump(out);
-        first = false;
-    }
-    out += "]";
-}
-
-static void dump(const Json::object &values, string &out) {
-    bool first = true;
-    out += "{";
-    for (const auto &kv : values) {
-        if (!first)
-            out += ", ";
-        dump(kv.first, out);
-        out += ": ";
-        kv.second.dump(out);
-        first = false;
-    }
-    out += "}";
-}
-
-void Json::dump(string &out) const {
-    m_ptr->dump(out);
-}
-
-/* * * * * * * * * * * * * * * * * * * *
- * Value wrappers
- */
-
-template <Json::Type tag, typename T>
-class Value : public JsonValue {
-protected:
-
-    // Constructors
-    explicit Value(const T &value) : m_value(value) {}
-    explicit Value(T &&value)      : m_value(move(value)) {}
-
-    // Get type tag
-    Json::Type type() const override {
-        return tag;
-    }
-
-    // Comparisons
-    bool equals(const JsonValue * other) const override {
-        return m_value == static_cast<const Value<tag, T> *>(other)->m_value;
-    }
-    bool less(const JsonValue * other) const override {
-        return m_value < static_cast<const Value<tag, T> *>(other)->m_value;
-    }
-
-    const T m_value;
-    void dump(string &out) const override { json11::dump(m_value, out); }
-};
-
-class JsonDouble final : public Value<Json::NUMBER, double> {
-    double number_value() const override { return m_value; }
-    int int_value() const override { return static_cast<int>(m_value); }
-    bool equals(const JsonValue * other) const override { return m_value == other->number_value(); }
-    bool less(const JsonValue * other)   const override { return m_value <  other->number_value(); }
-public:
-    explicit JsonDouble(double value) : Value(value) {}
-};
-
-class JsonInt final : public Value<Json::NUMBER, int> {
-    double number_value() const override { return m_value; }
-    int int_value() const override { return m_value; }
-    bool equals(const JsonValue * other) const override { return m_value == other->number_value(); }
-    bool less(const JsonValue * other)   const override { return m_value <  other->number_value(); }
-public:
-    explicit JsonInt(int value) : Value(value) {}
-};
-
-class JsonBoolean final : public Value<Json::BOOL, bool> {
-    bool bool_value() const override { return m_value; }
-public:
-    explicit JsonBoolean(bool value) : Value(value) {}
-};
-
-class JsonString final : public Value<Json::STRING, string> {
-    const string &string_value() const override { return m_value; }
-public:
-    explicit JsonString(const string &value) : Value(value) {}
-    explicit JsonString(string &&value)      : Value(move(value)) {}
-};
-
-class JsonArray final : public Value<Json::ARRAY, Json::array> {
-    const Json::array &array_items() const override { return m_value; }
-    const Json & operator[](size_t i) const override;
-public:
-    explicit JsonArray(const Json::array &value) : Value(value) {}
-    explicit JsonArray(Json::array &&value)      : Value(move(value)) {}
-};
-
-class JsonObject final : public Value<Json::OBJECT, Json::object> {
-    const Json::object &object_items() const override { return m_value; }
-    const Json & operator[](const string &key) const override;
-public:
-    explicit JsonObject(const Json::object &value) : Value(value) {}
-    explicit JsonObject(Json::object &&value)      : Value(move(value)) {}
-};
-
-class JsonNull final : public Value<Json::NUL, NullStruct> {
-public:
-    JsonNull() : Value({}) {}
-};
-
-/* * * * * * * * * * * * * * * * * * * *
- * Static globals - static-init-safe
- */
-struct Statics {
-    const std::shared_ptr<JsonValue> null = make_shared<JsonNull>();
-    const std::shared_ptr<JsonValue> t = make_shared<JsonBoolean>(true);
-    const std::shared_ptr<JsonValue> f = make_shared<JsonBoolean>(false);
-    const string empty_string;
-    const vector<Json> empty_vector;
-    const map<string, Json> empty_map;
-    Statics() {}
-};
-
-static const Statics & statics() {
-    static const Statics *s = new Statics();
-    return *s;
-}
-
-static const Json & static_null() {
-    // This has to be separate, not in Statics, because Json() accesses statics().null.
-    static const Json *json_null = new Json();
-    return *json_null;
-}
-
-/* * * * * * * * * * * * * * * * * * * *
- * Constructors
- */
-
-Json::Json() noexcept                  : m_ptr(statics().null) {}
-Json::Json(std::nullptr_t) noexcept    : m_ptr(statics().null) {}
-Json::Json(double value)               : m_ptr(make_shared<JsonDouble>(value)) {}
-Json::Json(int value)                  : m_ptr(make_shared<JsonInt>(value)) {}
-Json::Json(bool value)                 : m_ptr(value ? statics().t : statics().f) {}
-Json::Json(const string &value)        : m_ptr(make_shared<JsonString>(value)) {}
-Json::Json(string &&value)             : m_ptr(make_shared<JsonString>(move(value))) {}
-Json::Json(const char * value)         : m_ptr(make_shared<JsonString>(value)) {}
-Json::Json(const Json::array &values)  : m_ptr(make_shared<JsonArray>(values)) {}
-Json::Json(Json::array &&values)       : m_ptr(make_shared<JsonArray>(move(values))) {}
-Json::Json(const Json::object &values) : m_ptr(make_shared<JsonObject>(values)) {}
-Json::Json(Json::object &&values)      : m_ptr(make_shared<JsonObject>(move(values))) {}
-
-/* * * * * * * * * * * * * * * * * * * *
- * Accessors
- */
-
-Json::Type Json::type()                           const { return m_ptr->type();         }
-double Json::number_value()                       const { return m_ptr->number_value(); }
-int Json::int_value()                             const { return m_ptr->int_value();    }
-bool Json::bool_value()                           const { return m_ptr->bool_value();   }
-const string & Json::string_value()               const { return m_ptr->string_value(); }
-const vector<Json> & Json::array_items()          const { return m_ptr->array_items();  }
-const map<string, Json> & Json::object_items()    const { return m_ptr->object_items(); }
-const Json & Json::operator[] (size_t i)          const { return (*m_ptr)[i];           }
-const Json & Json::operator[] (const string &key) const { return (*m_ptr)[key];         }
-
-double                    JsonValue::number_value()              const { return 0; }
-int                       JsonValue::int_value()                 const { return 0; }
-bool                      JsonValue::bool_value()                const { return false; }
-const string &            JsonValue::string_value()              const { return statics().empty_string; }
-const vector<Json> &      JsonValue::array_items()               const { return statics().empty_vector; }
-const map<string, Json> & JsonValue::object_items()              const { return statics().empty_map; }
-const Json &              JsonValue::operator[] (size_t)         const { return static_null(); }
-const Json &              JsonValue::operator[] (const string &) const { return static_null(); }
-
-const Json & JsonObject::operator[] (const string &key) const {
-    auto iter = m_value.find(key);
-    return (iter == m_value.end()) ? static_null() : iter->second;
-}
-const Json & JsonArray::operator[] (size_t i) const {
-    if (i >= m_value.size()) return static_null();
-    else return m_value[i];
-}
-
-/* * * * * * * * * * * * * * * * * * * *
- * Comparison
- */
-
-bool Json::operator== (const Json &other) const {
-    if (m_ptr == other.m_ptr)
-        return true;
-    if (m_ptr->type() != other.m_ptr->type())
-        return false;
-
-    return m_ptr->equals(other.m_ptr.get());
-}
-
-bool Json::operator< (const Json &other) const {
-    if (m_ptr == other.m_ptr)
-        return false;
-    if (m_ptr->type() != other.m_ptr->type())
-        return m_ptr->type() < other.m_ptr->type();
-
-    return m_ptr->less(other.m_ptr.get());
-}
-
-/* * * * * * * * * * * * * * * * * * * *
- * Parsing
- */
-
-/* esc(c)
- *
- * Format char c suitable for printing in an error message.
- */
-static inline string esc(char c) {
-    char buf[12];
-    if (static_cast<uint8_t>(c) >= 0x20 && static_cast<uint8_t>(c) <= 0x7f) {
-        snprintf(buf, sizeof buf, "'%c' (%d)", c, c);
-    } else {
-        snprintf(buf, sizeof buf, "(%d)", c);
-    }
-    return string(buf);
-}
-
-static inline bool in_range(long x, long lower, long upper) {
-    return (x >= lower && x <= upper);
-}
-
-namespace {
-/* JsonParser
- *
- * Object that tracks all state of an in-progress parse.
- */
-struct JsonParser final {
-
-    /* State
-     */
-    const string &str;
-    size_t i;
-    string &err;
-    bool failed;
-    const JsonParse strategy;
-
-    /* fail(msg, err_ret = Json())
-     *
-     * Mark this parse as failed.
-     */
-    Json fail(string &&msg) {
-        return fail(move(msg), Json());
-    }
-
-    template <typename T>
-    T fail(string &&msg, const T err_ret) {
-        if (!failed)
-            err = std::move(msg);
-        failed = true;
-        return err_ret;
-    }
-
-    /* consume_whitespace()
-     *
-     * Advance until the current character is non-whitespace.
-     */
-    void consume_whitespace() {
-        while (str[i] == ' ' || str[i] == '\r' || str[i] == '\n' || str[i] == '\t')
-            i++;
-    }
-
-    /* consume_comment()
-     *
-     * Advance comments (c-style inline and multiline).
-     */
-    bool consume_comment() {
-      bool comment_found = false;
-      if (str[i] == '/') {
-        i++;
-        if (i == str.size())
-          return fail("unexpected end of input after start of comment", false);
-        if (str[i] == '/') { // inline comment
-          i++;
-          // advance until next line, or end of input
-          while (i < str.size() && str[i] != '\n') {
-            i++;
-          }
-          comment_found = true;
-        }
-        else if (str[i] == '*') { // multiline comment
-          i++;
-          if (i > str.size()-2)
-            return fail("unexpected end of input inside multi-line comment", false);
-          // advance until closing tokens
-          while (!(str[i] == '*' && str[i+1] == '/')) {
-            i++;
-            if (i > str.size()-2)
-              return fail(
-                "unexpected end of input inside multi-line comment", false);
-          }
-          i += 2;
-          comment_found = true;
-        }
-        else
-          return fail("malformed comment", false);
-      }
-      return comment_found;
-    }
-
-    /* consume_garbage()
-     *
-     * Advance until the current character is non-whitespace and non-comment.
-     */
-    void consume_garbage() {
-      consume_whitespace();
-      if(strategy == JsonParse::COMMENTS) {
-        bool comment_found = false;
-        do {
-          comment_found = consume_comment();
-          if (failed) return;
-          consume_whitespace();
-        }
-        while(comment_found);
-      }
-    }
-
-    /* get_next_token()
-     *
-     * Return the next non-whitespace character. If the end of the input is reached,
-     * flag an error and return 0.
-     */
-    char get_next_token() {
-        consume_garbage();
-        if (failed) return (char)0;
-        if (i == str.size())
-            return fail("unexpected end of input", (char)0);
-
-        return str[i++];
-    }
-
-    /* encode_utf8(pt, out)
-     *
-     * Encode pt as UTF-8 and add it to out.
-     */
-    void encode_utf8(long pt, string & out) {
-        if (pt < 0)
-            return;
-
-        if (pt < 0x80) {
-            out += static_cast<char>(pt);
-        } else if (pt < 0x800) {
-            out += static_cast<char>((pt >> 6) | 0xC0);
-            out += static_cast<char>((pt & 0x3F) | 0x80);
-        } else if (pt < 0x10000) {
-            out += static_cast<char>((pt >> 12) | 0xE0);
-            out += static_cast<char>(((pt >> 6) & 0x3F) | 0x80);
-            out += static_cast<char>((pt & 0x3F) | 0x80);
-        } else {
-            out += static_cast<char>((pt >> 18) | 0xF0);
-            out += static_cast<char>(((pt >> 12) & 0x3F) | 0x80);
-            out += static_cast<char>(((pt >> 6) & 0x3F) | 0x80);
-            out += static_cast<char>((pt & 0x3F) | 0x80);
-        }
-    }
-
-    /* parse_string()
-     *
-     * Parse a string, starting at the current position.
-     */
-    string parse_string() {
-        string out;
-        long last_escaped_codepoint = -1;
-        while (true) {
-            if (i == str.size())
-                return fail("unexpected end of input in string", "");
-
-            char ch = str[i++];
-
-            if (ch == '"') {
-                encode_utf8(last_escaped_codepoint, out);
-                return out;
-            }
-
-            if (in_range(ch, 0, 0x1f))
-                return fail("unescaped " + esc(ch) + " in string", "");
-
-            // The usual case: non-escaped characters
-            if (ch != '\\') {
-                encode_utf8(last_escaped_codepoint, out);
-                last_escaped_codepoint = -1;
-                out += ch;
-                continue;
-            }
-
-            // Handle escapes
-            if (i == str.size())
-                return fail("unexpected end of input in string", "");
-
-            ch = str[i++];
-
-            if (ch == 'u') {
-                // Extract 4-byte escape sequence
-                string esc = str.substr(i, 4);
-                // Explicitly check length of the substring. The following loop
-                // relies on std::string returning the terminating NUL when
-                // accessing str[length]. Checking here reduces brittleness.
-                if (esc.length() < 4) {
-                    return fail("bad \\u escape: " + esc, "");
-                }
-                for (size_t j = 0; j < 4; j++) {
-                    if (!in_range(esc[j], 'a', 'f') && !in_range(esc[j], 'A', 'F')
-                            && !in_range(esc[j], '0', '9'))
-                        return fail("bad \\u escape: " + esc, "");
-                }
-
-                long codepoint = strtol(esc.data(), nullptr, 16);
-
-                // JSON specifies that characters outside the BMP shall be encoded as a pair
-                // of 4-hex-digit \u escapes encoding their surrogate pair components. Check
-                // whether we're in the middle of such a beast: the previous codepoint was an
-                // escaped lead (high) surrogate, and this is a trail (low) surrogate.
-                if (in_range(last_escaped_codepoint, 0xD800, 0xDBFF)
-                        && in_range(codepoint, 0xDC00, 0xDFFF)) {
-                    // Reassemble the two surrogate pairs into one astral-plane character, per
-                    // the UTF-16 algorithm.
-                    encode_utf8((((last_escaped_codepoint - 0xD800) << 10)
-                                 | (codepoint - 0xDC00)) + 0x10000, out);
-                    last_escaped_codepoint = -1;
-                } else {
-                    encode_utf8(last_escaped_codepoint, out);
-                    last_escaped_codepoint = codepoint;
-                }
-
-                i += 4;
-                continue;
-            }
-
-            encode_utf8(last_escaped_codepoint, out);
-            last_escaped_codepoint = -1;
-
-            if (ch == 'b') {
-                out += '\b';
-            } else if (ch == 'f') {
-                out += '\f';
-            } else if (ch == 'n') {
-                out += '\n';
-            } else if (ch == 'r') {
-                out += '\r';
-            } else if (ch == 't') {
-                out += '\t';
-            } else if (ch == '"' || ch == '\\' || ch == '/') {
-                out += ch;
-            } else {
-                return fail("invalid escape character " + esc(ch), "");
-            }
-        }
-    }
-
-    /* parse_number()
-     *
-     * Parse a double.
-     */
-    Json parse_number() {
-        size_t start_pos = i;
-
-        if (str[i] == '-')
-            i++;
-
-        // Integer part
-        if (str[i] == '0') {
-            i++;
-            if (in_range(str[i], '0', '9'))
-                return fail("leading 0s not permitted in numbers");
-        } else if (in_range(str[i], '1', '9')) {
-            i++;
-            while (in_range(str[i], '0', '9'))
-                i++;
-        } else {
-            return fail("invalid " + esc(str[i]) + " in number");
-        }
-
-        if (str[i] != '.' && str[i] != 'e' && str[i] != 'E'
-                && (i - start_pos) <= static_cast<size_t>(std::numeric_limits<int>::digits10)) {
-            return std::atoi(str.c_str() + start_pos);
-        }
-
-        // Decimal part
-        if (str[i] == '.') {
-            i++;
-            if (!in_range(str[i], '0', '9'))
-                return fail("at least one digit required in fractional part");
-
-            while (in_range(str[i], '0', '9'))
-                i++;
-        }
-
-        // Exponent part
-        if (str[i] == 'e' || str[i] == 'E') {
-            i++;
-
-            if (str[i] == '+' || str[i] == '-')
-                i++;
-
-            if (!in_range(str[i], '0', '9'))
-                return fail("at least one digit required in exponent");
-
-            while (in_range(str[i], '0', '9'))
-                i++;
-        }
-
-        return std::strtod(str.c_str() + start_pos, nullptr);
-    }
-
-    /* expect(str, res)
-     *
-     * Expect that 'str' starts at the character that was just read. If it does, advance
-     * the input and return res. If not, flag an error.
-     */
-    Json expect(const string &expected, Json res) {
-        assert(i != 0);
-        i--;
-        if (str.compare(i, expected.length(), expected) == 0) {
-            i += expected.length();
-            return res;
-        } else {
-            return fail("parse error: expected " + expected + ", got " + str.substr(i, expected.length()));
-        }
-    }
-
-    /* parse_json()
-     *
-     * Parse a JSON object.
-     */
-    Json parse_json(int depth) {
-        if (depth > max_depth) {
-            return fail("exceeded maximum nesting depth");
-        }
-
-        char ch = get_next_token();
-        if (failed)
-            return Json();
-
-        if (ch == '-' || (ch >= '0' && ch <= '9')) {
-            i--;
-            return parse_number();
-        }
-
-        if (ch == 't')
-            return expect("true", true);
-
-        if (ch == 'f')
-            return expect("false", false);
-
-        if (ch == 'n')
-            return expect("null", Json());
-
-        if (ch == '"')
-            return parse_string();
-
-        if (ch == '{') {
-            map<string, Json> data;
-            ch = get_next_token();
-            if (ch == '}')
-                return data;
-
-            while (1) {
-                if (ch != '"')
-                    return fail("expected '\"' in object, got " + esc(ch));
-
-                string key = parse_string();
-                if (failed)
-                    return Json();
-
-                ch = get_next_token();
-                if (ch != ':')
-                    return fail("expected ':' in object, got " + esc(ch));
-
-                data[std::move(key)] = parse_json(depth + 1);
-                if (failed)
-                    return Json();
-
-                ch = get_next_token();
-                if (ch == '}')
-                    break;
-                if (ch != ',')
-                    return fail("expected ',' in object, got " + esc(ch));
-
-                ch = get_next_token();
-            }
-            return data;
-        }
-
-        if (ch == '[') {
-            vector<Json> data;
-            ch = get_next_token();
-            if (ch == ']')
-                return data;
-
-            while (1) {
-                i--;
-                data.push_back(parse_json(depth + 1));
-                if (failed)
-                    return Json();
-
-                ch = get_next_token();
-                if (ch == ']')
-                    break;
-                if (ch != ',')
-                    return fail("expected ',' in list, got " + esc(ch));
-
-                ch = get_next_token();
-                (void)ch;
-            }
-            return data;
-        }
-
-        return fail("expected value, got " + esc(ch));
-    }
-};
-}//namespace {
-
-Json Json::parse(const string &in, string &err, JsonParse strategy) {
-    JsonParser parser { in, 0, err, false, strategy };
-    Json result = parser.parse_json(0);
-
-    // Check for any trailing garbage
-    parser.consume_garbage();
-    if (parser.failed)
-        return Json();
-    if (parser.i != in.size())
-        return parser.fail("unexpected trailing " + esc(in[parser.i]));
-
-    return result;
-}
-
-// Documented in json11.hpp
-vector<Json> Json::parse_multi(const string &in,
-                               std::string::size_type &parser_stop_pos,
-                               string &err,
-                               JsonParse strategy) {
-    JsonParser parser { in, 0, err, false, strategy };
-    parser_stop_pos = 0;
-    vector<Json> json_vec;
-    while (parser.i != in.size() && !parser.failed) {
-        json_vec.push_back(parser.parse_json(0));
-        if (parser.failed)
-            break;
-
-        // Check for another object
-        parser.consume_garbage();
-        if (parser.failed)
-            break;
-        parser_stop_pos = parser.i;
-    }
-    return json_vec;
-}
-
-/* * * * * * * * * * * * * * * * * * * *
- * Shape-checking
- */
-
-bool Json::has_shape(const shape & types, string & err) const {
-    if (!is_object()) {
-        err = "expected JSON object, got " + dump();
-        return false;
-    }
-
-    for (auto & item : types) {
-        if ((*this)[item.first].type() != item.second) {
-            err = "bad type for " + item.first + " in " + dump();
-            return false;
-        }
-    }
-
-    return true;
-}
-
-} // namespace json11
diff --git a/ios/Pods/WeexSDK/weex_core/Source/third_party/json11/json11.hpp b/ios/Pods/WeexSDK/weex_core/Source/third_party/json11/json11.hpp
deleted file mode 100755
index 0c47d05..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/third_party/json11/json11.hpp
+++ /dev/null
@@ -1,232 +0,0 @@
-/* json11
- *
- * json11 is a tiny JSON library for C++11, providing JSON parsing and serialization.
- *
- * The core object provided by the library is json11::Json. A Json object represents any JSON
- * value: null, bool, number (int or double), string (std::string), array (std::vector), or
- * object (std::map).
- *
- * Json objects act like values: they can be assigned, copied, moved, compared for equality or
- * order, etc. There are also helper methods Json::dump, to serialize a Json to a string, and
- * Json::parse (static) to parse a std::string as a Json object.
- *
- * Internally, the various types of Json object are represented by the JsonValue class
- * hierarchy.
- *
- * A note on numbers - JSON specifies the syntax of number formatting but not its semantics,
- * so some JSON implementations distinguish between integers and floating-point numbers, while
- * some don't. In json11, we choose the latter. Because some JSON implementations (namely
- * Javascript itself) treat all numbers as the same type, distinguishing the two leads
- * to JSON that will be *silently* changed by a round-trip through those implementations.
- * Dangerous! To avoid that risk, json11 stores all numbers as double internally, but also
- * provides integer helpers.
- *
- * Fortunately, double-precision IEEE754 ('double') can precisely store any integer in the
- * range +/-2^53, which includes every 'int' on most systems. (Timestamps often use int64
- * or long long to avoid the Y2038K problem; a double storing microseconds since some epoch
- * will be exact for +/- 275 years.)
- */
-
-/* Copyright (c) 2013 Dropbox, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#pragma once
-
-#include <string>
-#include <vector>
-#include <map>
-#include <memory>
-#include <initializer_list>
-
-#ifdef _MSC_VER
-    #if _MSC_VER <= 1800 // VS 2013
-        #ifndef noexcept
-            #define noexcept throw()
-        #endif
-
-        #ifndef snprintf
-            #define snprintf _snprintf_s
-        #endif
-    #endif
-#endif
-
-namespace json11 {
-
-enum JsonParse {
-    STANDARD, COMMENTS
-};
-
-class JsonValue;
-
-class Json final {
-public:
-    // Types
-    enum Type {
-        NUL, NUMBER, BOOL, STRING, ARRAY, OBJECT
-    };
-
-    // Array and object typedefs
-    typedef std::vector<Json> array;
-    typedef std::map<std::string, Json> object;
-
-    // Constructors for the various types of JSON value.
-    Json() noexcept;                // NUL
-    Json(std::nullptr_t) noexcept;  // NUL
-    Json(double value);             // NUMBER
-    Json(int value);                // NUMBER
-    Json(bool value);               // BOOL
-    Json(const std::string &value); // STRING
-    Json(std::string &&value);      // STRING
-    Json(const char * value);       // STRING
-    Json(const array &values);      // ARRAY
-    Json(array &&values);           // ARRAY
-    Json(const object &values);     // OBJECT
-    Json(object &&values);          // OBJECT
-
-    // Implicit constructor: anything with a to_json() function.
-    template <class T, class = decltype(&T::to_json)>
-    Json(const T & t) : Json(t.to_json()) {}
-
-    // Implicit constructor: map-like objects (std::map, std::unordered_map, etc)
-    template <class M, typename std::enable_if<
-        std::is_constructible<std::string, decltype(std::declval<M>().begin()->first)>::value
-        && std::is_constructible<Json, decltype(std::declval<M>().begin()->second)>::value,
-            int>::type = 0>
-    Json(const M & m) : Json(object(m.begin(), m.end())) {}
-
-    // Implicit constructor: vector-like objects (std::list, std::vector, std::set, etc)
-    template <class V, typename std::enable_if<
-        std::is_constructible<Json, decltype(*std::declval<V>().begin())>::value,
-            int>::type = 0>
-    Json(const V & v) : Json(array(v.begin(), v.end())) {}
-
-    // This prevents Json(some_pointer) from accidentally producing a bool. Use
-    // Json(bool(some_pointer)) if that behavior is desired.
-    Json(void *) = delete;
-
-    // Accessors
-    Type type() const;
-
-    bool is_null()   const { return type() == NUL; }
-    bool is_number() const { return type() == NUMBER; }
-    bool is_bool()   const { return type() == BOOL; }
-    bool is_string() const { return type() == STRING; }
-    bool is_array()  const { return type() == ARRAY; }
-    bool is_object() const { return type() == OBJECT; }
-
-    // Return the enclosed value if this is a number, 0 otherwise. Note that json11 does not
-    // distinguish between integer and non-integer numbers - number_value() and int_value()
-    // can both be applied to a NUMBER-typed object.
-    double number_value() const;
-    int int_value() const;
-
-    // Return the enclosed value if this is a boolean, false otherwise.
-    bool bool_value() const;
-    // Return the enclosed string if this is a string, "" otherwise.
-    const std::string &string_value() const;
-    // Return the enclosed std::vector if this is an array, or an empty vector otherwise.
-    const array &array_items() const;
-    // Return the enclosed std::map if this is an object, or an empty map otherwise.
-    const object &object_items() const;
-
-    // Return a reference to arr[i] if this is an array, Json() otherwise.
-    const Json & operator[](size_t i) const;
-    // Return a reference to obj[key] if this is an object, Json() otherwise.
-    const Json & operator[](const std::string &key) const;
-
-    // Serialize.
-    void dump(std::string &out) const;
-    std::string dump() const {
-        std::string out;
-        dump(out);
-        return out;
-    }
-
-    // Parse. If parse fails, return Json() and assign an error message to err.
-    static Json parse(const std::string & in,
-                      std::string & err,
-                      JsonParse strategy = JsonParse::STANDARD);
-    static Json parse(const char * in,
-                      std::string & err,
-                      JsonParse strategy = JsonParse::STANDARD) {
-        if (in) {
-            return parse(std::string(in), err, strategy);
-        } else {
-            err = "null input";
-            return nullptr;
-        }
-    }
-    // Parse multiple objects, concatenated or separated by whitespace
-    static std::vector<Json> parse_multi(
-        const std::string & in,
-        std::string::size_type & parser_stop_pos,
-        std::string & err,
-        JsonParse strategy = JsonParse::STANDARD);
-
-    static inline std::vector<Json> parse_multi(
-        const std::string & in,
-        std::string & err,
-        JsonParse strategy = JsonParse::STANDARD) {
-        std::string::size_type parser_stop_pos;
-        return parse_multi(in, parser_stop_pos, err, strategy);
-    }
-
-    bool operator== (const Json &rhs) const;
-    bool operator<  (const Json &rhs) const;
-    bool operator!= (const Json &rhs) const { return !(*this == rhs); }
-    bool operator<= (const Json &rhs) const { return !(rhs < *this); }
-    bool operator>  (const Json &rhs) const { return  (rhs < *this); }
-    bool operator>= (const Json &rhs) const { return !(*this < rhs); }
-
-    /* has_shape(types, err)
-     *
-     * Return true if this is a JSON object and, for each item in types, has a field of
-     * the given type. If not, return false and set err to a descriptive message.
-     */
-    typedef std::initializer_list<std::pair<std::string, Type>> shape;
-    bool has_shape(const shape & types, std::string & err) const;
-
-private:
-    std::shared_ptr<JsonValue> m_ptr;
-};
-
-// Internal class hierarchy - JsonValue objects are not exposed to users of this API.
-class JsonValue {
-protected:
-    friend class Json;
-    friend class JsonInt;
-    friend class JsonDouble;
-    virtual Json::Type type() const = 0;
-    virtual bool equals(const JsonValue * other) const = 0;
-    virtual bool less(const JsonValue * other) const = 0;
-    virtual void dump(std::string &out) const = 0;
-    virtual double number_value() const;
-    virtual int int_value() const;
-    virtual bool bool_value() const;
-    virtual const std::string &string_value() const;
-    virtual const Json::array &array_items() const;
-    virtual const Json &operator[](size_t i) const;
-    virtual const Json::object &object_items() const;
-    virtual const Json &operator[](const std::string &key) const;
-    virtual ~JsonValue() {}
-};
-
-} // namespace json11
diff --git a/ios/Pods/WeexSDK/weex_core/Source/wson/wson.c b/ios/Pods/WeexSDK/weex_core/Source/wson/wson.c
deleted file mode 100644
index 5534562..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/wson/wson.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2017/8/4.
-//
-
-#include "wson.h"
-#include <stdio.h>
-
-
-union double_number{
-    double  d;
-    uint64_t l;
-    int64_t  i64;
-};
-
-union float_number{
-    float  f;
-    uint32_t i;
-};
-
-#define WSON_BUFFER_SIZE  1024
-
-#define WSON_BUFFER_ENSURE_SIZE(size)  {if((buffer->length) < (buffer->position + (size))){\
-                                           msg_buffer_resize(buffer, (uint32_t)(size));\
-                                      }}
-
-static inline void msg_buffer_resize(wson_buffer* buffer, uint32_t size){
-    if(size < buffer->length){
-         if(buffer->length < 1024*16){
-            size = 1024*16;
-         }else{
-            size = buffer->length;
-         }
-    }else{
-        size +=WSON_BUFFER_SIZE;
-    }
-    size += buffer->length;
-    buffer->data = realloc(buffer->data, size);
-    buffer->length = size;
-}
-
-
-static inline int32_t msg_buffer_varint_Zag(uint32_t ziggedValue)
-{
-    int32_t value = (int32_t)ziggedValue;
-    return (-(value & 0x01)) ^ ((value >> 1) & ~( 1<< 31));
-}
-
-static inline uint32_t msg_buffer_varint_Zig(int32_t value)
-{
-    return (uint32_t)((value << 1) ^ (value >> 31));
-
-}
-
- wson_buffer* wson_buffer_new(void){
-    wson_buffer* ptr = malloc(sizeof(wson_buffer));
-    ptr->data = malloc(sizeof(int8_t)*WSON_BUFFER_SIZE);
-    ptr->position = 0;
-    ptr->length = WSON_BUFFER_SIZE;
-    return ptr;
-}
-
-wson_buffer* wson_buffer_from(void* data, uint32_t length){
-    wson_buffer* ptr = malloc(sizeof(wson_buffer));
-    ptr->data = data;
-    ptr->position = 0;
-    ptr->length = length;
-    return ptr;
-}
-
-
-inline void wson_buffer_require(wson_buffer *buffer, size_t size){
-    WSON_BUFFER_ENSURE_SIZE(size*sizeof(uint8_t));
-}
-
-
-inline void wson_push_int(wson_buffer *buffer, int32_t value){
-    uint32_t num = msg_buffer_varint_Zig(value);
-    wson_push_uint(buffer, num);
-}
-
-inline void wson_push_uint(wson_buffer *buffer, uint32_t num){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint32_t) + sizeof(uint8_t));
-    uint8_t * data = ((uint8_t*)buffer->data + buffer->position);
-    int size =0;
-    do{
-        data[size] = (uint8_t)((num & 0x7F) | 0x80);
-        size++;
-    }while((num >>= 7) != 0);
-    data[size - 1] &=0x7F;
-    buffer->position += size;
-}
-
-inline void wson_push_byte(wson_buffer *buffer, uint8_t bt){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = bt;
-    buffer->position += sizeof(uint8_t);
-}
-
-inline void wson_push_type(wson_buffer *buffer, uint8_t bt){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = bt;
-    buffer->position += sizeof(uint8_t);
-}
-
-
-inline void wson_push_type_boolean(wson_buffer *buffer, uint8_t value){
-      WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t) + sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    if(value){
-       *data = WSON_BOOLEAN_TYPE_TRUE;
-    }else{
-        *data = WSON_BOOLEAN_TYPE_FALSE;
-    }
-    buffer->position += sizeof(uint8_t);
- }
-
-
-inline void wson_push_type_int(wson_buffer *buffer, int32_t num){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_NUMBER_INT_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_int(buffer, num);
-}
-
-inline void wson_push_type_double(wson_buffer *buffer, double num){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_NUMBER_DOUBLE_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_double(buffer, num);
-}
-
-inline void wson_push_type_float(wson_buffer *buffer, float num) {
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_NUMBER_FLOAT_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_float(buffer, num);
-}
-
-inline void wson_push_type_long(wson_buffer *buffer, int64_t num){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_NUMBER_LONG_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_ulong(buffer, num);
-}
-
-inline void wson_push_type_string(wson_buffer *buffer, const void *src, int32_t length){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_STRING_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_uint(buffer, length);
-    wson_push_bytes(buffer, src, length);
-}
-
-inline void wson_push_type_uint8_string(wson_buffer *buffer, const uint8_t *src, int32_t length){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_UINT8_STRING_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_uint(buffer, length);
-    wson_push_bytes(buffer, src, length);
-}
-
-inline void wson_push_property(wson_buffer *buffer, const void *src, int32_t length){
-    wson_push_uint(buffer, length);
-    wson_push_bytes(buffer, src, length);
-}
-
-inline void wson_push_type_string_length(wson_buffer *buffer, int32_t length){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_STRING_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_uint(buffer, length);
-}
-
-inline void wson_push_type_null(wson_buffer *buffer){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_NULL_TYPE;
-    buffer->position += (sizeof(uint8_t));
-}
-
-inline void wson_push_type_map(wson_buffer *buffer, uint32_t size){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_MAP_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_uint(buffer, size);
-}
-
-inline void wson_push_type_array(wson_buffer *buffer, uint32_t size){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_ARRAY_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_uint(buffer, size);
-}
-
-
-inline void wson_push_type_extend(wson_buffer *buffer, const void *src, int32_t length){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    *data = WSON_EXTEND_TYPE;
-    buffer->position += (sizeof(uint8_t));
-    wson_push_uint(buffer, length);
-    wson_push_bytes(buffer, src, length);
-}
-
-inline void wson_push_ensure_size(wson_buffer *buffer, uint32_t dataSize){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint8_t)*dataSize);
-}
-
-inline void wson_push_ulong(wson_buffer *buffer, uint64_t num){
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint64_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    data[7] = (uint8_t)(num & 0xFF);
-    data[6] = (uint8_t)((num >> 8) & 0xFF);
-    data[5] = (uint8_t)((num >> 16) & 0xFF);
-    data[4] = (uint8_t)((num >> 24) & 0xFF);
-    data[3] = (uint8_t)((num >> 32) & 0xFF);
-    data[2] = (uint8_t)((num >> 40) & 0xFF);
-    data[1] = (uint8_t)((num >> 48) & 0xFF);
-    data[0] = (uint8_t)((num >> 56) & 0xFF);
-    buffer->position += sizeof(uint64_t);
-}
-
-void wson_push_double(wson_buffer *buffer, double num){
-    union double_number ld;
-    ld.d = num;
-    wson_push_ulong(buffer, ld.l);
-}
-
-void wson_push_float(wson_buffer *buffer, float f){
-    union float_number fn;
-    fn.f = f;
-    uint32_t num = fn.i;
-    WSON_BUFFER_ENSURE_SIZE(sizeof(uint32_t));
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    data[3] = (uint8_t)(num & 0xFF);
-    data[2] = (uint8_t)((num >> 8) & 0xFF);
-    data[1] = (uint8_t)((num >> 16) & 0xFF);
-    data[0] = (uint8_t)((num >> 24) & 0xFF);
-    buffer->position += sizeof(uint32_t);
-}
-
-
-inline void wson_push_bytes(wson_buffer *buffer, const void *src, int32_t length){
-    WSON_BUFFER_ENSURE_SIZE(length);
-    void* dst = ((uint8_t*)buffer->data + buffer->position);
-    memcpy(dst, src, length);
-    buffer->position += length;
-}
-
-inline int8_t wson_next_type(wson_buffer *buffer){
-    int8_t* ptr = (int8_t*)((uint8_t*)buffer->data + buffer->position);
-    buffer->position += sizeof(int8_t);
-    return *ptr;
-}
-
-inline int8_t wson_next_byte(wson_buffer *buffer){
-    int8_t* ptr = (int8_t*)(((uint8_t*)buffer->data + buffer->position));
-    buffer->position += sizeof(int8_t);
-    return *ptr;
-}
-
-
-int32_t wson_next_int(wson_buffer *buffer){
-    return msg_buffer_varint_Zag(wson_next_uint(buffer));
-}
-
-uint32_t wson_next_uint(wson_buffer *buffer){
-    uint8_t *  ptr = ((uint8_t*)buffer->data + buffer->position);
-    uint32_t num = *ptr;
-    if((num & 0x80) == 0){
-        buffer->position +=1;
-        return  num;
-    }
-    num &=0x7F;
-    uint8_t chunk =  ptr[1];
-    num |= (chunk & 0x7F) << 7;
-    if((chunk & 0x80) == 0){
-        buffer->position += 2;
-        return  num;
-    }
-    chunk = ptr[2];
-    num |= (chunk & 0x7F) << 14;
-    if((chunk & 0x80) == 0){
-        buffer->position += 3;
-        return  num;
-    }
-
-    chunk = ptr[3];
-    num |= (chunk & 0x7F) << 21;
-    if((chunk & 0x80) == 0){
-        buffer->position += 4;
-        return  num;
-    }
-    chunk = ptr[4];
-    num |= (chunk & 0x0F) << 28;
-    buffer->position += 5;
-    return  num;
-}
-
-int64_t wson_next_long(wson_buffer *buffer){
-    return wson_next_ulong(buffer);
-}
-
-inline uint64_t wson_next_ulong(wson_buffer *buffer){
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    buffer->position += sizeof(uint64_t);
-    return (((uint64_t)data[7]) & 0xFF)
-           + ((((uint64_t)data[6]) & 0xFF) << 8)
-           + ((((uint64_t)data[5]) & 0xFF) << 16)
-           + ((((uint64_t)data[4]) & 0xFF) << 24)
-           + ((((uint64_t)data[3]) & 0xFF) << 32)
-           + ((((uint64_t)data[2]) & 0xFF) << 40)
-           + ((((uint64_t)data[1]) & 0xFF) << 48)
-           + ((((uint64_t)data[0]) & 0xFF) << 56);
-}
-
-double wson_next_double(wson_buffer *buffer){
-    union double_number ld;
-    ld.l = wson_next_long(buffer);
-    return ld.d;
-}
-
-inline float wson_next_float(wson_buffer *buffer){
-    union float_number fn;
-    uint8_t* data = ((uint8_t*)buffer->data + buffer->position);
-    fn.i = ((data[3]) & 0xFF)
-           + (((data[2]) & 0xFF) << 8)
-           + (((data[1]) & 0xFF) << 16)
-           + (((data[0]) & 0xFF) << 24);
-    buffer->position += sizeof(uint32_t);
-    return fn.f;
-}
-
-
-inline uint8_t* wson_next_bts(wson_buffer *buffer, uint32_t length){
-    uint8_t * ptr = ((uint8_t*)buffer->data + buffer->position);
-    buffer->position += length;
-    return ptr;
-}
-
-void wson_buffer_free(wson_buffer *buffer){
-    if(buffer->data){
-        free(buffer->data);
-        buffer->data = NULL;
-    }
-    if(buffer){
-        free(buffer);
-        buffer = NULL;
-    }
-}
-
diff --git a/ios/Pods/WeexSDK/weex_core/Source/wson/wson.h b/ios/Pods/WeexSDK/weex_core/Source/wson/wson.h
deleted file mode 100644
index a45b628..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/wson/wson.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2017/8/4.
-//
-
-#ifndef WSON_H
-#define WSON_H
-
-#include <inttypes.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct wson_buffer{
-    void* data;
-    uint32_t position;
-    uint32_t length;
-} wson_buffer;
-
-
-
-
-/**
- * wson data type
- * */
-#define  WSON_NULL_TYPE   '0'
-#define  WSON_STRING_TYPE  's'
-#define  WSON_UINT8_STRING_TYPE 'u'
-#define  WSON_BOOLEAN_TYPE_TRUE 't'
-#define  WSON_BOOLEAN_TYPE_FALSE 'f'
-#define  WSON_NUMBER_INT_TYPE  'i'
-#define  WSON_NUMBER_FLOAT_TYPE  'F'
-#define  WSON_NUMBER_DOUBLE_TYPE  'd'
-#define  WSON_NUMBER_LONG_TYPE  'l'
-#define  WSON_NUMBER_BIG_INT_TYPE  'g'
-#define  WSON_NUMBER_BIG_DECIMAL_TYPE  'e'
-#define  WSON_ARRAY_TYPE  '['
-#define  WSON_MAP_TYPE   '{'
-#define  WSON_EXTEND_TYPE   'b'
-
-/**
- * create wson buffer
- * */
-wson_buffer* wson_buffer_new(void);
-
-void wson_buffer_require(wson_buffer *buffer, size_t size);
-/**
- * push value with type signature; 1 true, 0 false, with type WSON_BOOLEAN_TYPE
- * signature  + byte
- */
-void wson_push_type_boolean(wson_buffer *buffer, uint8_t value);
-void wson_push_type_int(wson_buffer *buffer, int32_t num);
-void wson_push_type_long(wson_buffer *buffer, int64_t num);
-void wson_push_type_double(wson_buffer *buffer, double num);
-void wson_push_type_float(wson_buffer *buffer, float num);
-void wson_push_type_string(wson_buffer *buffer, const void *src, int32_t length);
-void wson_push_type_uint8_string(wson_buffer *buffer, const uint8_t *src, int32_t length);
-void wson_push_type_null(wson_buffer *buffer);
-void wson_push_type_map(wson_buffer *buffer, uint32_t size);
-void wson_push_type_array(wson_buffer *buffer, uint32_t size);
-void wson_push_type_extend(wson_buffer *buffer, const void *src, int32_t length);
-void wson_push_ensure_size(wson_buffer *buffer, uint32_t dataSize);
-void wson_push_type_string_length(wson_buffer *buffer, int32_t length);
-void wson_push_property(wson_buffer *buffer, const void *src, int32_t length);
-    
-/**
- * push int, varint uint byte int double bts to buffer, without type signature
- * */
-void wson_push_int(wson_buffer *buffer, int32_t num);
-void wson_push_uint(wson_buffer *buffer, uint32_t num);
-void wson_push_byte(wson_buffer *buffer, uint8_t bt);
-void wson_push_type(wson_buffer *buffer, uint8_t bt);
-void wson_push_double(wson_buffer *buffer, double num);
-void wson_push_float(wson_buffer *buffer, float num);
-void wson_push_ulong(wson_buffer *buffer, uint64_t num);
-void wson_push_bytes(wson_buffer *buffer, const void *src, int32_t length);
-
-
-/**
- * free  buffer
- * */
-void wson_buffer_free(wson_buffer *buffer);
-
-
-/**
- * parse buffer, return data from current position not include signature
- * */
-int8_t wson_next_byte(wson_buffer *buffer);
-int8_t wson_next_type(wson_buffer *buffer);
-int32_t wson_next_int(wson_buffer *buffer);
-uint32_t wson_next_uint(wson_buffer *buffer);
-double wson_next_double(wson_buffer *buffer);
-float wson_next_float(wson_buffer *buffer);
-int64_t wson_next_long(wson_buffer *buffer);
-uint64_t wson_next_ulong(wson_buffer *buffer);
-uint8_t* wson_next_bts(wson_buffer *buffer, uint32_t length);
-inline bool wson_has_next(wson_buffer *buffer){
-    return buffer->position < buffer->length;
-}
-
-/** constructor with data */
-wson_buffer* wson_buffer_from(void* data, uint32_t length);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //WSON_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/wson/wson_parser.cpp b/ios/Pods/WeexSDK/weex_core/Source/wson/wson_parser.cpp
deleted file mode 100644
index 74edeb9..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/wson/wson_parser.cpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2018/5/15.
-//
-
-#include "wson_parser.h"
-#include "wson.h"
-#include "wson_util.h"
-
-wson_parser::wson_parser(const char *data) {
-
-    this->wsonBuffer = wson_buffer_from((void *) data, 1024*1024);
-}
-
-wson_parser::wson_parser(const char *data, int length) {
-    this->wsonBuffer = wson_buffer_from((void *) data, length);
-}
-
-wson_parser::~wson_parser() {
-    if(wsonBuffer){
-        wsonBuffer->data = nullptr;
-        free(wsonBuffer);
-        wsonBuffer = NULL;
-    }
-    if(decodingBuffer != nullptr && decodingBufferSize > 0){
-        delete [] decodingBuffer;
-        decodingBuffer = nullptr;
-    }
-}
-
-std::string wson_parser::nextMapKeyUTF8(){
-    int keyLength = wson_next_uint(wsonBuffer);
-    uint16_t * utf16 = ( uint16_t *)wson_next_bts(wsonBuffer, keyLength);
-    std::string str;
-    wson::utf16_convert_to_utf8_string(utf16, keyLength/sizeof(uint16_t), requireDecodingBuffer(keyLength*2), str);
-    return  str;
-}
-
-
-
-char* wson_parser::requireDecodingBuffer(int length){
-    if(decodingBufferSize <= 0 || decodingBufferSize < length){
-        if(decodingBuffer != nullptr && decodingBufferSize > 0){
-            delete [] decodingBuffer;
-            decodingBuffer = nullptr;
-        }
-        decodingBuffer = new char[length];
-        decodingBufferSize = length;
-    }else{
-        return decodingBuffer;
-    }
-    return decodingBuffer;
-}
-
-
-void wson_parser::toJSONtring(std::string &builder){
-    uint8_t  type = wson_next_type(wsonBuffer);
-    switch (type) {
-        case WSON_UINT8_STRING_TYPE: {
-            int size = wson_next_uint(wsonBuffer);
-            uint8_t *utf8 = wson_next_bts(wsonBuffer, size);
-            builder.append(reinterpret_cast<char*>(utf8), size);
-        }
-            return;
-        case WSON_STRING_TYPE:
-        case WSON_NUMBER_BIG_INT_TYPE:
-        case WSON_NUMBER_BIG_DECIMAL_TYPE: {
-                int size = wson_next_uint(wsonBuffer);
-                uint16_t *utf16 = (uint16_t *) wson_next_bts(wsonBuffer, size);
-                wson::utf16_convert_to_utf8_quote_string(utf16, size / sizeof(uint16_t),  requireDecodingBuffer(size*2), builder);
-            }
-            return;
-        case WSON_NULL_TYPE:
-            builder.append("\"\"");
-            break;
-        case WSON_NUMBER_INT_TYPE: {
-                int32_t num = wson_next_int(wsonBuffer);
-                wson::str_append_number(builder, num);
-            }
-            return;
-        case WSON_NUMBER_FLOAT_TYPE: {
-                float num = wson_next_float(wsonBuffer);
-                wson::str_append_number(builder, num);
-            }
-            return;
-        case WSON_NUMBER_DOUBLE_TYPE: {
-               double num = wson_next_double(wsonBuffer);
-               wson::str_append_number(builder, num);
-            }
-            return;
-        case WSON_NUMBER_LONG_TYPE: {
-               int64_t num = wson_next_long(wsonBuffer);
-               wson::str_append_number(builder, num);
-            }
-            return;
-        case WSON_BOOLEAN_TYPE_TRUE:
-            builder.append("true");
-            return;
-        case WSON_BOOLEAN_TYPE_FALSE:
-            builder.append("false");
-            return;
-        case WSON_MAP_TYPE:{
-                    int length = wson_next_uint(wsonBuffer);
-                    builder.append("{");
-                    for(int i=0; i<length; i++){
-                        int keyLength = wson_next_uint(wsonBuffer);
-                        uint16_t * utf16 = ( uint16_t *)wson_next_bts(wsonBuffer, keyLength);
-                        wson::utf16_convert_to_utf8_quote_string(utf16, keyLength/sizeof(uint16_t), requireDecodingBuffer(keyLength*2),  builder);
-                        builder.append(":");
-                        toJSONtring(builder);
-                        if(i != (length - 1)){
-                            builder.append(",");
-                        }
-                    }
-                    builder.append("}");
-            }
-            return;
-        case WSON_ARRAY_TYPE:{
-                builder.append("[");
-                int length = wson_next_uint(wsonBuffer);
-                for(int i=0; i<length; i++){
-                    toJSONtring(builder);
-                    if(i != (length - 1)){
-                        builder.append(",");
-                    }
-                }
-                builder.append("]");
-            }
-            return;
-        default:
-            break;
-    }
-}
-
-std::string wson_parser::nextStringUTF8(uint8_t type) {
-    std::string str;
-    switch (type) {
-        case WSON_UINT8_STRING_TYPE: {
-            int size = wson_next_uint(wsonBuffer);
-            uint8_t *utf8 = wson_next_bts(wsonBuffer, size);
-            str.append(reinterpret_cast<char *>(utf8), size);
-            return str;
-        }
-        case WSON_STRING_TYPE:
-        case WSON_NUMBER_BIG_INT_TYPE:
-        case WSON_NUMBER_BIG_DECIMAL_TYPE: {
-            int size = wson_next_uint(wsonBuffer);
-            uint16_t *utf16 = (uint16_t *) wson_next_bts(wsonBuffer, size);
-            wson::utf16_convert_to_utf8_string(utf16, size / sizeof(uint16_t), requireDecodingBuffer(size*2), str);
-            return str;
-        }
-        case WSON_NULL_TYPE:
-            str.append("");
-            break;
-        case WSON_NUMBER_INT_TYPE: {
-              int32_t num = wson_next_int(wsonBuffer);;
-               wson::str_append_number(str, num);
-            }
-            return str;
-        case WSON_NUMBER_FLOAT_TYPE: {
-            float num = wson_next_float(wsonBuffer);
-            wson::str_append_number(str, num);
-        }
-            return str;
-        case WSON_NUMBER_DOUBLE_TYPE: {
-            double num = wson_next_double(wsonBuffer);
-            wson::str_append_number(str, num);
-        }
-            return str;
-        case WSON_NUMBER_LONG_TYPE: {
-            int64_t num = wson_next_long(wsonBuffer);
-            wson::str_append_number(str, num);
-        }
-            return str;
-        case WSON_BOOLEAN_TYPE_TRUE:
-            str.append("true");
-            return str;
-        case WSON_BOOLEAN_TYPE_FALSE:
-            str.append("false");
-            return str;
-        case WSON_MAP_TYPE:
-        case WSON_ARRAY_TYPE:
-            wsonBuffer->position--;
-            toJSONtring(str);
-        default:
-            break;
-    }
-    return str;
-}
-
-double wson_parser::nextNumber(uint8_t type) {
-    switch (type) {
-        case WSON_UINT8_STRING_TYPE: {
-            int size = wson_next_uint(wsonBuffer);
-            std::string str;
-            wson_next_bts(wsonBuffer, size);
-            uint8_t *utf8 = wson_next_bts(wsonBuffer, size);
-            str.append(reinterpret_cast<char *>(utf8), size);
-            return atof(str.c_str());
-        }
-        case WSON_STRING_TYPE:
-        case WSON_NUMBER_BIG_INT_TYPE:
-        case WSON_NUMBER_BIG_DECIMAL_TYPE: {
-            int size = wson_next_uint(wsonBuffer);
-            std::string str;
-            wson_next_bts(wsonBuffer, size);
-            uint16_t *utf16 = (uint16_t *) wson_next_bts(wsonBuffer, size);
-            wson::utf16_convert_to_utf8_string(utf16, size/sizeof(uint16_t), requireDecodingBuffer(size*2),str);
-            return atof(str.c_str());
-        }
-        case WSON_NULL_TYPE:
-            return  0;
-        case WSON_NUMBER_INT_TYPE:{
-              int32_t num = wson_next_int(wsonBuffer);
-              return num;
-            }
-            break;
-        case WSON_NUMBER_FLOAT_TYPE:{
-                float num = wson_next_float(wsonBuffer);
-                return num;
-            }
-            break;
-        case WSON_NUMBER_DOUBLE_TYPE:{
-                double num = wson_next_double(wsonBuffer);
-                return num;
-            }
-            break;
-        case WSON_NUMBER_LONG_TYPE:{
-                int64_t num = wson_next_long(wsonBuffer);
-                return num;
-            }
-            break;
-        case WSON_BOOLEAN_TYPE_TRUE:
-            return 1;
-        case WSON_BOOLEAN_TYPE_FALSE:
-            return 0;
-        case WSON_MAP_TYPE:
-        case WSON_ARRAY_TYPE:
-        default:
-            break;
-    }
-    skipValue(type);
-    return 0;
-}
-
-bool wson_parser::nextBool(uint8_t type) {
-    if(type == WSON_BOOLEAN_TYPE_FALSE || type == WSON_NULL_TYPE){
-        return false;
-    }
-    skipValue(type);
-    return true;
-}
-
-void wson_parser::skipValue(uint8_t type) {
-    switch (type) {
-        case WSON_STRING_TYPE:
-        case WSON_UINT8_STRING_TYPE:
-        case WSON_NUMBER_BIG_INT_TYPE:
-        case WSON_NUMBER_BIG_DECIMAL_TYPE: {
-            int size = wson_next_uint(wsonBuffer);
-            wson_next_bts(wsonBuffer, size);
-            return;
-        }
-        case WSON_NULL_TYPE:
-            break;
-        case WSON_NUMBER_INT_TYPE:
-             wson_next_int(wsonBuffer);
-            return;
-        case WSON_NUMBER_FLOAT_TYPE:
-            wson_next_float(wsonBuffer);
-            return;
-        case WSON_NUMBER_DOUBLE_TYPE:
-            wson_next_double(wsonBuffer);
-            return;
-        case WSON_NUMBER_LONG_TYPE:
-             wson_next_long(wsonBuffer);
-            return;
-        case WSON_BOOLEAN_TYPE_TRUE:
-            return;
-        case WSON_BOOLEAN_TYPE_FALSE:
-            return;
-        case WSON_MAP_TYPE:{
-                int length = wson_next_uint(wsonBuffer);
-                for(int i=0; i<length; i++){
-                    int keyLength = wson_next_uint(wsonBuffer);
-                    wson_next_bts(wsonBuffer, keyLength);
-                    skipValue(wson_next_type(wsonBuffer));
-                }
-            }
-            return;
-        case WSON_ARRAY_TYPE:{
-                int length = wson_next_uint(wsonBuffer);
-                for(int i=0; i<length; i++){
-                    skipValue(wson_next_type(wsonBuffer));
-                }
-            }
-            return;
-        default:
-            break;
-    }
-}
-
-
-std::string wson_parser::toStringUTF8() {
-    int position = this->wsonBuffer->position;
-    this->wsonBuffer->position = 0;
-    std::string json = nextStringUTF8(nextType());
-    this->wsonBuffer->position = position;
-    return json;
-}
\ No newline at end of file
diff --git a/ios/Pods/WeexSDK/weex_core/Source/wson/wson_parser.h b/ios/Pods/WeexSDK/weex_core/Source/wson/wson_parser.h
deleted file mode 100644
index 0d19a9f..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/wson/wson_parser.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * c++ friendly interface for wson
- * */
-//
-// Created by furture on 2018/5/15.
-//
-
-#ifndef WSON_PARSER_H
-#define WSON_PARSER_H
-
-#include "wson.h"
-
-#include <vector>
-#include <string>
-
-typedef std::basic_string<uint16_t, std::char_traits<uint16_t>, std::allocator<uint16_t> > u16string;
-
-/** utf16 support which is so fast and cross javascriptcore java and c plus*/
-class wson_parser {
-
-public:
-    wson_parser(const char* data);
-    wson_parser(const char* data, int length);
-    ~wson_parser();
-
-    /**
-     * has next type
-     * */
-    inline bool hasNext(){
-        return wson_has_next(this->wsonBuffer);
-    }
-
-    /**
-     * return value type
-     * */
-    inline uint8_t nextType(){
-        if(wsonBuffer->data && wson_has_next(wsonBuffer)){
-            return  wson_next_type(wsonBuffer);
-        }
-        return WSON_NULL_TYPE;
-    }
-
-    /**
-     * return back type, move parse postion--;
-     * */
-    inline void backType(){
-        if(wsonBuffer && wsonBuffer->position > 0){
-            wsonBuffer->position--;
-        }
-    }
-
-    /**
-     * return is map object
-     * */
-    inline bool isMap(uint8_t type){
-        return type == WSON_MAP_TYPE;
-    }
-
-    /**
-     * return is array object
-     * */
-    inline bool isArray(uint8_t type){
-        return type == WSON_ARRAY_TYPE;
-    }
-
-    /**
-     * return is string object
-     * */
-    inline bool isString(uint8_t type){
-        return type == WSON_STRING_TYPE
-               || type == WSON_UINT8_STRING_TYPE
-               || type == WSON_NUMBER_BIG_INT_TYPE
-               || type == WSON_NUMBER_BIG_DECIMAL_TYPE;
-    }
-
-    /**
-     * return is bool object
-     * */
-    inline bool isBool(uint8_t type){
-        return type == WSON_BOOLEAN_TYPE_FALSE || type == WSON_BOOLEAN_TYPE_TRUE;
-    }
-
-    /**
-     * return is number object
-     * */
-    inline bool isNumber(uint8_t type){
-        return type == WSON_NUMBER_INT_TYPE
-               || type == WSON_NUMBER_FLOAT_TYPE
-               || type == WSON_NUMBER_LONG_TYPE
-               || type == WSON_NUMBER_DOUBLE_TYPE;
-    }
-
-    /**
-     * return is null object
-     * */
-    inline bool isNull(uint8_t type){
-        return type == WSON_NULL_TYPE;
-    }
-
-    /**
-     * return map size
-     * */
-    inline  int  nextMapSize(){
-        return wson_next_uint(wsonBuffer);
-    }
-
-    /**
-     * return array size
-     * */
-    inline  int  nextArraySize(){
-        return wson_next_uint(wsonBuffer);
-    }
-
-    /**
-     * auto convert  utf-16 string number to utf-8 string
-     * */
-    std::string nextMapKeyUTF8();
-
-    /**
-     * auto convert object or number to string
-     * */
-    std::string nextStringUTF8(uint8_t type);
-
-    /**
-     * return number value, if type is string convert to number
-     * */
-    double nextNumber(uint8_t type);
-
-    /** return bool value */
-    bool  nextBool(uint8_t type);
-
-    /**
-     * skip current value type
-     * */
-    void skipValue(uint8_t type);
-
-
-    /**
-     * reset to start position
-     * */
-    inline void  resetState(){
-        if(this->wsonBuffer){
-            this->wsonBuffer->position = 0;
-        }
-    }
-
-    /**
-     * get current state position
-     * */
-    inline int getState(){
-        return this->wsonBuffer->position;
-    }
-
-    /**restore parse to state */
-    inline int restoreToState(int state){
-        return this->wsonBuffer->position = state;
-    }
-    
-    /** conver wson to json string */
-    std::string toStringUTF8();
-
-
-private:
-    wson_buffer* wsonBuffer;
-    void toJSONtring(std::string &builder);
-
-    /**reuse buffer for decoding */
-    char *requireDecodingBuffer(int length);
-    char* decodingBuffer = nullptr;
-    int  decodingBufferSize = 0;
-};
-
-
-
-
-#endif //WEEX_PROJECT_WSON_PARSER_H
diff --git a/ios/Pods/WeexSDK/weex_core/Source/wson/wson_util.cpp b/ios/Pods/WeexSDK/weex_core/Source/wson/wson_util.cpp
deleted file mode 100644
index fcfbc2c..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/wson/wson_util.cpp
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2018/5/15.
-//
-
-#include "wson_util.h"
-#include <stdio.h>
-
-
-namespace wson {
-
-    /**
-     * see java jdk source to handle handle utf-16 in 4 byte
-     * */
-    static const u_int16_t  MIN_HIGH_SURROGATE = 0xD800;
-
-    static const u_int16_t MAX_HIGH_SURROGATE = 0xDBFF;
-
-    static const u_int16_t  MIN_LOW_SURROGATE  = 0xDC00;
-
-    static const u_int16_t MAX_LOW_SURROGATE  = 0xDFFF;
-
-    static const u_int32_t MIN_SUPPLEMENTARY_CODE_POINT = 0x010000;
-
-    inline bool isHighSurrogate(u_int16_t ch) {
-        return ch >= MIN_HIGH_SURROGATE && ch < (MAX_HIGH_SURROGATE + 1);
-    }
-
-    inline bool isLowSurrogate(u_int16_t ch) {
-        return ch >= MIN_LOW_SURROGATE && ch < (MAX_LOW_SURROGATE + 1);
-    }
-
-    inline u_int32_t toCodePoint(u_int16_t high, u_int16_t low) {
-        // Optimized form of:
-        // return ((high - MIN_HIGH_SURROGATE) << 10)
-        //         + (low - MIN_LOW_SURROGATE)
-        //         + MIN_SUPPLEMENTARY_CODE_POINT;
-        return ((high << 10) + low) + (MIN_SUPPLEMENTARY_CODE_POINT
-                                       - (MIN_HIGH_SURROGATE << 10)
-                                       - MIN_LOW_SURROGATE);
-    }
-
-
-    static inline int utf16_char_convert_to_utf8_cstr(u_int32_t codePoint, char* utf8){
-        if (codePoint <= 0x7F)
-        {
-            // Plain single-byte ASCII.
-            utf8[0] = ((char)codePoint);
-            return 1;
-        }
-        else if (codePoint <= 0x7FF)
-        {
-            // Two bytes.
-            utf8[0] = (0xC0 | (codePoint >> 6));
-            utf8[1] = (0x80 | ((codePoint) & 0x3F));
-            return 2;
-        }
-        else if (codePoint <= 0xFFFF)
-        {
-            // Three bytes.
-            utf8[0] = (0xE0 | (codePoint >> 12));
-            utf8[1] = ((0x80 | ((codePoint >> 6) & 0x3F)));
-            utf8[2] = ((0x80 | ((codePoint) & 0x3F)));
-            return 3;
-        }
-        else if (codePoint <= 0x1FFFFF)
-        {
-            // Four bytes.
-            utf8[0] = (0xF0 | (codePoint >> 18));
-            utf8[1] = (0x80 | ((codePoint >> 12) & 0x3F));
-            utf8[2] = (0x80 | ((codePoint >> 6) & 0x3F));
-            utf8[3] = (0x80 | ((codePoint) & 0x3F));
-            return 4;
-        }
-        else if (codePoint <= 0x3FFFFFF)
-        {
-            // Five bytes.
-            utf8[0] = (0xF8 | (codePoint >> 24));
-            utf8[1] = (0x80 | ((codePoint >> 18) & 0x3F));
-            utf8[2] = (0x80 | ((codePoint >> 12) & 0x3F));
-            utf8[3] = (0x80 | ((codePoint >> 6) & 0x3F));
-            utf8[4] = (0x80 | ((codePoint) & 0x3F));
-            return 5;
-        }
-        else if (codePoint  <= 0x7FFFFFFF)
-        {
-            // Six bytes.
-            utf8[0] = (0xFC | (codePoint >> 30));
-            utf8[1] = (0x80 | ((codePoint >> 24) & 0x3F));
-            utf8[2] = (0x80 | ((codePoint >> 18) & 0x3F));
-            utf8[3] = (0x80 | ((codePoint >> 12) & 0x3F));
-            utf8[4] = (0x80 | ((codePoint >> 6) & 0x3F));
-            utf8[5] = (0x80 | ((codePoint) & 0x3F));
-            return 6;
-        }
-        return 0;
-    }
-
-    void utf16_convert_to_utf8_string(uint16_t * utf16, int length, std::string& utf8){
-        char* dest = new char[length*4 + 4];
-        utf16_convert_to_utf8_string(utf16, length, dest, utf8);
-        delete [] dest;
-    }
-
-    void utf16_convert_to_utf8_quote_string(uint16_t *utf16, int length, std::string& utf8){
-        char* dest = new char[length*4 + 4];
-        utf16_convert_to_utf8_quote_string(utf16, length, dest, utf8);
-        delete [] dest;
-    }
-
-
-    void utf16_convert_to_utf8_string(uint16_t *utf16, int length, char* decodingBuffer, std::string& utf8){
-        int count = utf16_convert_to_utf8_cstr(utf16, length, decodingBuffer);
-        utf8.append(decodingBuffer, count);
-    }
-    void utf16_convert_to_utf8_quote_string(uint16_t *utf16, int length, char* decodingBuffer, std::string& utf8){
-        int count = utf16_convert_to_utf8_quote_cstr(utf16, length, decodingBuffer);
-        utf8.append(decodingBuffer, count);
-    }
-
-    int utf16_convert_to_utf8_cstr(uint16_t * utf16, int length, char* buffer){
-        char* src = buffer;
-        int count =0;
-        for(int i=0; i<length;){
-            u_int16_t c1 = utf16[i++];
-            if(isHighSurrogate(c1)){
-                if(i < length){
-                    u_int16_t c2 = utf16[i++];
-                    if (isLowSurrogate(c2)) {
-                        u_int32_t codePoint =  toCodePoint(c1, c2);
-                        count += utf16_char_convert_to_utf8_cstr(codePoint, src + count);
-                        continue;
-                    }else{
-                        i--;
-                    }
-                }
-            }
-            count += utf16_char_convert_to_utf8_cstr(c1, src + count);
-        }
-        src[count] = '\0';
-        return count;
-    }
-
-    int utf16_convert_to_utf8_quote_cstr(uint16_t *utf16, int length, char* buffer){
-        int count =0;
-
-        char* src = buffer;
-        src[count++] = '"';
-        for(int i=0; i<length;){
-            u_int16_t c1 = utf16[i++];
-            if(isHighSurrogate(c1)){
-                if(i < length){
-                    u_int16_t c2 = utf16[i++];
-                    if (isLowSurrogate(c2)) {
-                        u_int32_t codePoint =  toCodePoint(c1, c2);
-                        count += utf16_char_convert_to_utf8_cstr(codePoint, src + count);
-                        continue;
-                    }else{
-                        i--;
-                    }
-                }
-            }
-            if(c1 < 0x5D){ // 0X5C is '\'
-                if(c1 == '"' || c1 == '\\'){
-                    src[count++] = '\\';
-                }else{
-                    if(c1 <= 0x1F){ //max control latter
-                        switch (c1){
-                            case '\t':
-                                src[count++] = '\\';
-                                src[count++] = 't';
-                                continue;
-                            case '\r':
-                                src[count++] = '\\';
-                                src[count++] = 'r';
-                                continue;
-                            case '\n':
-                                src[count++] = '\\';
-                                src[count++] = 'n';
-                                continue;
-                            case '\f':
-                                src[count++] = '\\';
-                                src[count++] = 'f';
-                                continue;
-                            case '\b':
-                                src[count++] = '\\';
-                                src[count++] = 'b';
-                                continue;
-                        }
-                    }
-                }
-            }
-            count += utf16_char_convert_to_utf8_cstr(c1, src + count);
-        }
-        src[count++] = '"';
-        src[count] = '\0';
-        return count;
-    }
-
-
-    /** min size is 32 + 1 = 33 */
-    inline void number_to_buffer(char* buffer, int32_t num){
-        snprintf(buffer, 32,"%d", num);
-    }
-
-    /** min size is 64 + 1 = 65 */
-    inline void number_to_buffer(char* buffer, float num){
-        snprintf(buffer, 64, "%f", num);
-    }
-
-    /** min size is 64 + 1 = 65 */
-    inline void number_to_buffer(char* buffer, double num){
-        snprintf(buffer, 64, "%f", num);
-    }
-
-    /** min size is 64 + 1 = 65 */
-    inline void number_to_buffer(char* buffer, int64_t num){
-        snprintf(buffer, 64, "%lld", num);
-    }
-
-
-    void str_append_number(std::string& str, double  num){
-        char src[64 + 2];
-        char* buffer = src;
-        number_to_buffer(buffer, num);
-        str.append(src);
-    }
-
-    void str_append_number(std::string& str, float  num){
-        char src[64 + 2];
-        char* buffer = src;
-        number_to_buffer(buffer, num);
-        str.append(src);
-    }
-
-    void str_append_number(std::string& str, int32_t  num){
-        char src[32 + 2];
-        char* buffer = src;
-        number_to_buffer(buffer, num);
-        str.append(src);
-    }
-
-    void str_append_number(std::string& str, int64_t  num){
-        char src[64 + 2];
-        char* buffer = src;
-        number_to_buffer(buffer, num);
-        str.append(src);
-    }
-
-
-}
diff --git a/ios/Pods/WeexSDK/weex_core/Source/wson/wson_util.h b/ios/Pods/WeexSDK/weex_core/Source/wson/wson_util.h
deleted file mode 100644
index 6ebd950..0000000
--- a/ios/Pods/WeexSDK/weex_core/Source/wson/wson_util.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-//
-// Created by furture on 2018/5/15.
-//
-
-#ifndef WSON_UTIL_H
-#define WSON_UTIL_H
-
-#include <cstdint>
-#include <string>
-
-namespace wson{
-
-    /**
-     *  unicode to utf8 convertor with zero dependency inspired by java sdk character source
-     * */
-    void utf16_convert_to_utf8_string(uint16_t *utf16, int length, char* decodingBuffer, std::string& utf8);
-    void utf16_convert_to_utf8_quote_string(uint16_t *utf16, int length, char* decodingBuffer, std::string& utf8);
-
-    /**
-     *  unicode to utf8 convertor with zero dependency inspired by java sdk character source
-     * */
-    void utf16_convert_to_utf8_string(uint16_t *utf16, int length, std::string& utf8);
-    void utf16_convert_to_utf8_quote_string(uint16_t *utf16, int length, std::string& utf8);
-    /**
-     * return byte count in utf8, buffer size should can contains convert values
-     * */
-    int utf16_convert_to_utf8_cstr(uint16_t *utf16, int length, char* buffer);
-    int utf16_convert_to_utf8_quote_cstr(uint16_t *utf16, int length, char* buffer);
-
-    /**
-     * append support double float int32 int64
-     * */
-    void str_append_number(std::string& str, double  num);
-    void str_append_number(std::string& str, float  num);
-    void str_append_number(std::string& str, int32_t  num);
-    void str_append_number(std::string& str, int64_t  num);
-}
-
-
-#endif
diff --git a/ios/Pods/libwebp/COPYING b/ios/Pods/libwebp/COPYING
deleted file mode 100644
index 7a6f995..0000000
--- a/ios/Pods/libwebp/COPYING
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (c) 2010, Google Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-  * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-  * Neither the name of Google nor the names of its contributors may
-    be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/ios/Pods/libwebp/README b/ios/Pods/libwebp/README
deleted file mode 100644
index 502a4c1..0000000
--- a/ios/Pods/libwebp/README
+++ /dev/null
@@ -1,789 +0,0 @@
-          __   __  ____  ____  ____
-         /  \\/  \/  _ \/  _ )/  _ \
-         \       /   __/  _  \   __/
-          \__\__/\____/\_____/__/ ____  ___
-                / _/ /    \    \ /  _ \/ _/
-               /  \_/   / /   \ \   __/  \__
-               \____/____/\_____/_____/____/v1.0.2
-
-Description:
-============
-
-WebP codec: library to encode and decode images in WebP format. This package
-contains the library that can be used in other programs to add WebP support,
-as well as the command line tools 'cwebp' and 'dwebp'.
-
-See http://developers.google.com/speed/webp
-
-The latest source tree is available at
-https://chromium.googlesource.com/webm/libwebp
-
-It is released under the same license as the WebM project.
-See http://www.webmproject.org/license/software/ or the
-"COPYING" file for details. An additional intellectual
-property rights grant can be found in the file PATENTS.
-
-Building:
-=========
-
-Windows build:
---------------
-
-By running:
-
-  nmake /f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output
-
-the directory output\release-static\(x64|x86)\bin will contain the tools
-cwebp.exe and dwebp.exe. The directory output\release-static\(x64|x86)\lib will
-contain the libwebp static library.
-The target architecture (x86/x64) is detected by Makefile.vc from the Visual
-Studio compiler (cl.exe) available in the system path.
-
-Unix build using makefile.unix:
--------------------------------
-
-On platforms with GNU tools installed (gcc and make), running
-
-  make -f makefile.unix
-
-will build the binaries examples/cwebp and examples/dwebp, along
-with the static library src/libwebp.a. No system-wide installation
-is supplied, as this is a simple alternative to the full installation
-system based on the autoconf tools (see below).
-Please refer to makefile.unix for additional details and customizations.
-
-Using autoconf tools:
----------------------
-Prerequisites:
-A compiler (e.g., gcc), make, autoconf, automake, libtool.
-On a Debian-like system the following should install everything you need for a
-minimal build:
-$ sudo apt-get install gcc make autoconf automake libtool
-
-When building from git sources, you will need to run autogen.sh to generate the
-configure script.
-
-./configure
-make
-make install
-
-should be all you need to have the following files
-
-/usr/local/include/webp/decode.h
-/usr/local/include/webp/encode.h
-/usr/local/include/webp/types.h
-/usr/local/lib/libwebp.*
-/usr/local/bin/cwebp
-/usr/local/bin/dwebp
-
-installed.
-
-Note: A decode-only library, libwebpdecoder, is available using the
-'--enable-libwebpdecoder' flag. The encode library is built separately and can
-be installed independently using a minor modification in the corresponding
-Makefile.am configure files (see comments there). See './configure --help' for
-more options.
-
-Building for MIPS Linux:
-------------------------
-MIPS Linux toolchain stable available releases can be found at:
-https://community.imgtec.com/developers/mips/tools/codescape-mips-sdk/available-releases/
-
-# Add toolchain to PATH
-export PATH=$PATH:/path/to/toolchain/bin
-
-# 32-bit build for mips32r5 (p5600)
-HOST=mips-mti-linux-gnu
-MIPS_CFLAGS="-O3 -mips32r5 -mabi=32 -mtune=p5600 -mmsa -mfp64 \
-  -msched-weight -mload-store-pairs -fPIE"
-MIPS_LDFLAGS="-mips32r5 -mabi=32 -mmsa -mfp64 -pie"
-
-# 64-bit build for mips64r6 (i6400)
-HOST=mips-img-linux-gnu
-MIPS_CFLAGS="-O3 -mips64r6 -mabi=64 -mtune=i6400 -mmsa -mfp64 \
-  -msched-weight -mload-store-pairs -fPIE"
-MIPS_LDFLAGS="-mips64r6 -mabi=64 -mmsa -mfp64 -pie"
-
-./configure --host=${HOST} --build=`config.guess` \
-  CC="${HOST}-gcc -EL" \
-  CFLAGS="$MIPS_CFLAGS" \
-  LDFLAGS="$MIPS_LDFLAGS"
-make
-make install
-
-CMake:
-------
-With CMake, you can compile libwebp, cwebp, dwebp, gif2web, img2webp, webpinfo
-and the JS bindings.
-
-Prerequisites:
-A compiler (e.g., gcc with autotools) and CMake.
-On a Debian-like system the following should install everything you need for a
-minimal build:
-$ sudo apt-get install build-essential cmake
-
-When building from git sources, you will need to run cmake to generate the
-makefiles.
-
-mkdir build && cd build && cmake ../
-make
-make install
-
-If you also want any of the executables, you will need to enable them through
-CMake, e.g.:
-
-cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../
-
-or through your favorite interface (like ccmake or cmake-qt-gui).
-
-Use option -DWEBP_UNICODE=ON for Unicode support on Windows (with chcp 65001).
-
-Finally, once installed, you can also use WebP in your CMake project by doing:
-
-find_package(WebP)
-
-which will define the CMake variables WebP_INCLUDE_DIRS and WebP_LIBRARIES.
-
-Gradle:
--------
-The support for Gradle is minimal: it only helps you compile libwebp, cwebp and
-dwebp and webpmux_example.
-
-Prerequisites:
-A compiler (e.g., gcc with autotools) and gradle.
-On a Debian-like system the following should install everything you need for a
-minimal build:
-$ sudo apt-get install build-essential gradle
-
-When building from git sources, you will need to run the Gradle wrapper with the
-appropriate target, e.g. :
-
-./gradlew buildAllExecutables
-
-SWIG bindings:
---------------
-
-To generate language bindings from swig/libwebp.swig at least swig-1.3
-(http://www.swig.org) is required.
-
-Currently the following functions are mapped:
-Decode:
-  WebPGetDecoderVersion
-  WebPGetInfo
-  WebPDecodeRGBA
-  WebPDecodeARGB
-  WebPDecodeBGRA
-  WebPDecodeBGR
-  WebPDecodeRGB
-
-Encode:
-  WebPGetEncoderVersion
-  WebPEncodeRGBA
-  WebPEncodeBGRA
-  WebPEncodeRGB
-  WebPEncodeBGR
-  WebPEncodeLosslessRGBA
-  WebPEncodeLosslessBGRA
-  WebPEncodeLosslessRGB
-  WebPEncodeLosslessBGR
-
-See swig/README for more detailed build instructions.
-
-Java bindings:
-
-To build the swig-generated JNI wrapper code at least JDK-1.5 (or equivalent)
-is necessary for enum support. The output is intended to be a shared object /
-DLL that can be loaded via System.loadLibrary("webp_jni").
-
-Python bindings:
-
-To build the swig-generated Python extension code at least Python 2.6 is
-required. Python < 2.6 may build with some minor changes to libwebp.swig or the
-generated code, but is untested.
-
-Encoding tool:
-==============
-
-The examples/ directory contains tools for encoding (cwebp) and
-decoding (dwebp) images.
-
-The easiest use should look like:
-  cwebp input.png -q 80 -o output.webp
-which will convert the input file to a WebP file using a quality factor of 80
-on a 0->100 scale (0 being the lowest quality, 100 being the best. Default
-value is 75).
-You might want to try the -lossless flag too, which will compress the source
-(in RGBA format) without any loss. The -q quality parameter will in this case
-control the amount of processing time spent trying to make the output file as
-small as possible.
-
-A longer list of options is available using the -longhelp command line flag:
-
-> cwebp -longhelp
-Usage:
- cwebp [-preset <...>] [options] in_file [-o out_file]
-
-If input size (-s) for an image is not specified, it is
-assumed to be a PNG, JPEG, TIFF or WebP file.
-
-Options:
-  -h / -help ............. short help
-  -H / -longhelp ......... long help
-  -q <float> ............. quality factor (0:small..100:big), default=75
-  -alpha_q <int> ......... transparency-compression quality (0..100),
-                           default=100
-  -preset <string> ....... preset setting, one of:
-                            default, photo, picture,
-                            drawing, icon, text
-     -preset must come first, as it overwrites other parameters
-  -z <int> ............... activates lossless preset with given
-                           level in [0:fast, ..., 9:slowest]
-
-  -m <int> ............... compression method (0=fast, 6=slowest), default=4
-  -segments <int> ........ number of segments to use (1..4), default=4
-  -size <int> ............ target size (in bytes)
-  -psnr <float> .......... target PSNR (in dB. typically: 42)
-
-  -s <int> <int> ......... input size (width x height) for YUV
-  -sns <int> ............. spatial noise shaping (0:off, 100:max), default=50
-  -f <int> ............... filter strength (0=off..100), default=60
-  -sharpness <int> ....... filter sharpness (0:most .. 7:least sharp), default=0
-  -strong ................ use strong filter instead of simple (default)
-  -nostrong .............. use simple filter instead of strong
-  -sharp_yuv ............. use sharper (and slower) RGB->YUV conversion
-  -partition_limit <int> . limit quality to fit the 512k limit on
-                           the first partition (0=no degradation ... 100=full)
-  -pass <int> ............ analysis pass number (1..10)
-  -crop <x> <y> <w> <h> .. crop picture with the given rectangle
-  -resize <w> <h> ........ resize picture (after any cropping)
-  -mt .................... use multi-threading if available
-  -low_memory ............ reduce memory usage (slower encoding)
-  -map <int> ............. print map of extra info
-  -print_psnr ............ prints averaged PSNR distortion
-  -print_ssim ............ prints averaged SSIM distortion
-  -print_lsim ............ prints local-similarity distortion
-  -d <file.pgm> .......... dump the compressed output (PGM file)
-  -alpha_method <int> .... transparency-compression method (0..1), default=1
-  -alpha_filter <string> . predictive filtering for alpha plane,
-                           one of: none, fast (default) or best
-  -exact ................. preserve RGB values in transparent area, default=off
-  -blend_alpha <hex> ..... blend colors against background color
-                           expressed as RGB values written in
-                           hexadecimal, e.g. 0xc0e0d0 for red=0xc0
-                           green=0xe0 and blue=0xd0
-  -noalpha ............... discard any transparency information
-  -lossless .............. encode image losslessly, default=off
-  -near_lossless <int> ... use near-lossless image
-                           preprocessing (0..100=off), default=100
-  -hint <string> ......... specify image characteristics hint,
-                           one of: photo, picture or graph
-
-  -metadata <string> ..... comma separated list of metadata to
-                           copy from the input to the output if present.
-                           Valid values: all, none (default), exif, icc, xmp
-
-  -short ................. condense printed message
-  -quiet ................. don't print anything
-  -version ............... print version number and exit
-  -noasm ................. disable all assembly optimizations
-  -v ..................... verbose, e.g. print encoding/decoding times
-  -progress .............. report encoding progress
-
-Experimental Options:
-  -jpeg_like ............. roughly match expected JPEG size
-  -af .................... auto-adjust filter strength
-  -pre <int> ............. pre-processing filter
-
-The main options you might want to try in order to further tune the
-visual quality are:
- -preset
- -sns
- -f
- -m
-
-Namely:
-  * 'preset' will set up a default encoding configuration targeting a
-     particular type of input. It should appear first in the list of options,
-     so that subsequent options can take effect on top of this preset.
-     Default value is 'default'.
-  * 'sns' will progressively turn on (when going from 0 to 100) some additional
-     visual optimizations (like: segmentation map re-enforcement). This option
-     will balance the bit allocation differently. It tries to take bits from the
-     "easy" parts of the picture and use them in the "difficult" ones instead.
-     Usually, raising the sns value (at fixed -q value) leads to larger files,
-     but with better quality.
-     Typical value is around '75'.
-  * 'f' option directly links to the filtering strength used by the codec's
-     in-loop processing. The higher the value, the smoother the
-     highly-compressed area will look. This is particularly useful when aiming
-     at very small files. Typical values are around 20-30. Note that using the
-     option -strong/-nostrong will change the type of filtering. Use "-f 0" to
-     turn filtering off.
-  * 'm' controls the trade-off between encoding speed and quality. Default is 4.
-     You can try -m 5 or -m 6 to explore more (time-consuming) encoding
-     possibilities. A lower value will result in faster encoding at the expense
-     of quality.
-
-Decoding tool:
-==============
-
-There is a decoding sample in examples/dwebp.c which will take
-a .webp file and decode it to a PNG image file (amongst other formats).
-This is simply to demonstrate the use of the API. You can verify the
-file test.webp decodes to exactly the same as test_ref.ppm by using:
-
- cd examples
- ./dwebp test.webp -ppm -o test.ppm
- diff test.ppm test_ref.ppm
-
-The full list of options is available using -h:
-
-> dwebp -h
-Usage: dwebp in_file [options] [-o out_file]
-
-Decodes the WebP image file to PNG format [Default]
-Use following options to convert into alternate image formats:
-  -pam ......... save the raw RGBA samples as a color PAM
-  -ppm ......... save the raw RGB samples as a color PPM
-  -bmp ......... save as uncompressed BMP format
-  -tiff ........ save as uncompressed TIFF format
-  -pgm ......... save the raw YUV samples as a grayscale PGM
-                 file with IMC4 layout
-  -yuv ......... save the raw YUV samples in flat layout
-
- Other options are:
-  -version ..... print version number and exit
-  -nofancy ..... don't use the fancy YUV420 upscaler
-  -nofilter .... disable in-loop filtering
-  -nodither .... disable dithering
-  -dither <d> .. dithering strength (in 0..100)
-  -alpha_dither  use alpha-plane dithering if needed
-  -mt .......... use multi-threading
-  -crop <x> <y> <w> <h> ... crop output with the given rectangle
-  -resize <w> <h> ......... scale the output (*after* any cropping)
-  -flip ........ flip the output vertically
-  -alpha ....... only save the alpha plane
-  -incremental . use incremental decoding (useful for tests)
-  -h ........... this help message
-  -v ........... verbose (e.g. print encoding/decoding times)
-  -quiet ....... quiet mode, don't print anything
-  -noasm ....... disable all assembly optimizations
-
-WebP file analysis tool:
-========================
-
-'webpinfo' can be used to print out the chunk level structure and bitstream
-header information of WebP files. It can also check if the files are of valid
-WebP format.
-
-Usage: webpinfo [options] in_files
-Note: there could be multiple input files;
-      options must come before input files.
-Options:
-  -version ........... Print version number and exit.
-  -quiet ............. Do not show chunk parsing information.
-  -diag .............. Show parsing error diagnosis.
-  -summary ........... Show chunk stats summary.
-  -bitstream_info .... Parse bitstream header.
-
-Visualization tool:
-===================
-
-There's a little self-serve visualization tool called 'vwebp' under the
-examples/ directory. It uses OpenGL to open a simple drawing window and show
-a decoded WebP file. It's not yet integrated in the automake build system, but
-you can try to manually compile it using the recommendations below.
-
-Usage: vwebp in_file [options]
-
-Decodes the WebP image file and visualize it using OpenGL
-Options are:
-  -version ..... print version number and exit
-  -noicc ....... don't use the icc profile if present
-  -nofancy ..... don't use the fancy YUV420 upscaler
-  -nofilter .... disable in-loop filtering
-  -dither <int>  dithering strength (0..100), default=50
-  -noalphadither disable alpha plane dithering
-  -usebgcolor .. display background color
-  -mt .......... use multi-threading
-  -info ........ print info
-  -h ........... this help message
-
-Keyboard shortcuts:
-  'c' ................ toggle use of color profile
-  'b' ................ toggle background color display
-  'i' ................ overlay file information
-  'd' ................ disable blending & disposal (debug)
-  'q' / 'Q' / ESC .... quit
-
-Building:
----------
-
-Prerequisites:
-1) OpenGL & OpenGL Utility Toolkit (GLUT)
-  Linux:
-    $ sudo apt-get install freeglut3-dev mesa-common-dev
-  Mac + XCode:
-    - These libraries should be available in the OpenGL / GLUT frameworks.
-  Windows:
-    http://freeglut.sourceforge.net/index.php#download
-
-2) (Optional) qcms (Quick Color Management System)
-  i. Download qcms from Mozilla / Chromium:
-    http://hg.mozilla.org/mozilla-central/file/0e7639e3bdfb/gfx/qcms
-    http://src.chromium.org/viewvc/chrome/trunk/src/third_party/qcms
-  ii. Build and archive the source files as libqcms.a / qcms.lib
-  iii. Update makefile.unix / Makefile.vc
-    a) Define WEBP_HAVE_QCMS
-    b) Update include / library paths to reference the qcms directory.
-
-Build using makefile.unix / Makefile.vc:
-$ make -f makefile.unix examples/vwebp
-> nmake /f Makefile.vc CFG=release-static \
-    ../obj/x64/release-static/bin/vwebp.exe
-
-Animation creation tool:
-========================
-The utility 'img2webp' can turn a sequence of input images (PNG, JPEG, ...)
-into an animated WebP file. It offers fine control over duration, encoding
-modes, etc.
-
-Usage:
-
-  img2webp [file-level options] [image files...] [per-frame options...]
-
-File-level options (only used at the start of compression):
- -min_size ............ minimize size
- -loop <int> .......... loop count (default: 0, = infinite loop)
- -kmax <int> .......... maximum number of frame between key-frames
-                        (0=only keyframes)
- -kmin <int> .......... minimum number of frame between key-frames
-                        (0=disable key-frames altogether)
- -mixed ............... use mixed lossy/lossless automatic mode
- -v ................... verbose mode
- -h ................... this help
- -version ............. print version number and exit
-
-Per-frame options (only used for subsequent images input):
- -d <int> ............. frame duration in ms (default: 100)
- -lossless  ........... use lossless mode (default)
- -lossy ... ........... use lossy mode
- -q <float> ........... quality
- -m <int> ............. method to use
-
-example: img2webp -loop 2 in0.png -lossy in1.jpg
-                  -d 80 in2.tiff -o out.webp
-
-Note: if a single file name is passed as the argument, the arguments will be
-tokenized from this file. The file name must not start with the character '-'.
-
-Animated GIF conversion:
-========================
-Animated GIF files can be converted to WebP files with animation using the
-gif2webp utility available under examples/. The files can then be viewed using
-vwebp.
-
-Usage:
- gif2webp [options] gif_file -o webp_file
-Options:
-  -h / -help ............. this help
-  -lossy ................. encode image using lossy compression
-  -mixed ................. for each frame in the image, pick lossy
-                           or lossless compression heuristically
-  -q <float> ............. quality factor (0:small..100:big)
-  -m <int> ............... compression method (0=fast, 6=slowest)
-  -min_size .............. minimize output size (default:off)
-                           lossless compression by default; can be
-                           combined with -q, -m, -lossy or -mixed
-                           options
-  -kmin <int> ............ min distance between key frames
-  -kmax <int> ............ max distance between key frames
-  -f <int> ............... filter strength (0=off..100)
-  -metadata <string> ..... comma separated list of metadata to
-                           copy from the input to the output if present
-                           Valid values: all, none, icc, xmp (default)
-  -loop_compatibility .... use compatibility mode for Chrome
-                           version prior to M62 (inclusive)
-  -mt .................... use multi-threading if available
-
-  -version ............... print version number and exit
-  -v ..................... verbose
-  -quiet ................. don't print anything
-
-Building:
----------
-With the libgif development files installed, gif2webp can be built using
-makefile.unix:
-$ make -f makefile.unix examples/gif2webp
-
-or using autoconf:
-$ ./configure --enable-everything
-$ make
-
-Comparison of animated images:
-==============================
-Test utility anim_diff under examples/ can be used to compare two animated
-images (each can be GIF or WebP).
-
-Usage: anim_diff <image1> <image2> [options]
-
-Options:
-  -dump_frames <folder> dump decoded frames in PAM format
-  -min_psnr <float> ... minimum per-frame PSNR
-  -raw_comparison ..... if this flag is not used, RGB is
-                        premultiplied before comparison
-  -max_diff <int> ..... maximum allowed difference per channel
-                        between corresponding pixels in subsequent
-                        frames
-  -h .................. this help
-  -version ............ print version number and exit
-
-Building:
----------
-With the libgif development files and a C++ compiler installed, anim_diff can
-be built using makefile.unix:
-$ make -f makefile.unix examples/anim_diff
-
-or using autoconf:
-$ ./configure --enable-everything
-$ make
-
-Encoding API:
-=============
-
-The main encoding functions are available in the header src/webp/encode.h
-The ready-to-use ones are:
-size_t WebPEncodeRGB(const uint8_t* rgb, int width, int height, int stride,
-                     float quality_factor, uint8_t** output);
-size_t WebPEncodeBGR(const uint8_t* bgr, int width, int height, int stride,
-                     float quality_factor, uint8_t** output);
-size_t WebPEncodeRGBA(const uint8_t* rgba, int width, int height, int stride,
-                      float quality_factor, uint8_t** output);
-size_t WebPEncodeBGRA(const uint8_t* bgra, int width, int height, int stride,
-                      float quality_factor, uint8_t** output);
-
-They will convert raw RGB samples to a WebP data. The only control supplied
-is the quality factor.
-
-There are some variants for using the lossless format:
-
-size_t WebPEncodeLosslessRGB(const uint8_t* rgb, int width, int height,
-                             int stride, uint8_t** output);
-size_t WebPEncodeLosslessBGR(const uint8_t* bgr, int width, int height,
-                             int stride, uint8_t** output);
-size_t WebPEncodeLosslessRGBA(const uint8_t* rgba, int width, int height,
-                              int stride, uint8_t** output);
-size_t WebPEncodeLosslessBGRA(const uint8_t* bgra, int width, int height,
-                              int stride, uint8_t** output);
-
-Of course in this case, no quality factor is needed since the compression
-occurs without loss of the input values, at the expense of larger output sizes.
-
-Advanced encoding API:
-----------------------
-
-A more advanced API is based on the WebPConfig and WebPPicture structures.
-
-WebPConfig contains the encoding settings and is not tied to a particular
-picture.
-WebPPicture contains input data, on which some WebPConfig will be used for
-compression.
-The encoding flow looks like:
-
--------------------------------------- BEGIN PSEUDO EXAMPLE
-
-#include <webp/encode.h>
-
-  // Setup a config, starting form a preset and tuning some additional
-  // parameters
-  WebPConfig config;
-  if (!WebPConfigPreset(&config, WEBP_PRESET_PHOTO, quality_factor))
-    return 0;   // version error
-  }
-  // ... additional tuning
-  config.sns_strength = 90;
-  config.filter_sharpness = 6;
-  config_error = WebPValidateConfig(&config);  // not mandatory, but useful
-
-  // Setup the input data
-  WebPPicture pic;
-  if (!WebPPictureInit(&pic)) {
-    return 0;  // version error
-  }
-  pic.width = width;
-  pic.height = height;
-  // allocated picture of dimension width x height
-  if (!WebPPictureAllocate(&pic)) {
-    return 0;   // memory error
-  }
-  // at this point, 'pic' has been initialized as a container,
-  // and can receive the Y/U/V samples.
-  // Alternatively, one could use ready-made import functions like
-  // WebPPictureImportRGB(), which will take care of memory allocation.
-  // In any case, past this point, one will have to call
-  // WebPPictureFree(&pic) to reclaim memory.
-
-  // Set up a byte-output write method. WebPMemoryWriter, for instance.
-  WebPMemoryWriter wrt;
-  WebPMemoryWriterInit(&wrt);     // initialize 'wrt'
-
-  pic.writer = MyFileWriter;
-  pic.custom_ptr = my_opaque_structure_to_make_MyFileWriter_work;
-
-  // Compress!
-  int ok = WebPEncode(&config, &pic);   // ok = 0 => error occurred!
-  WebPPictureFree(&pic);  // must be called independently of the 'ok' result.
-
-  // output data should have been handled by the writer at that point.
-  // -> compressed data is the memory buffer described by wrt.mem / wrt.size
-
-  // deallocate the memory used by compressed data
-  WebPMemoryWriterClear(&wrt);
-
--------------------------------------- END PSEUDO EXAMPLE
-
-Decoding API:
-=============
-
-This is mainly just one function to call:
-
-#include "webp/decode.h"
-uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size,
-                       int* width, int* height);
-
-Please have a look at the file src/webp/decode.h for the details.
-There are variants for decoding in BGR/RGBA/ARGB/BGRA order, along with
-decoding to raw Y'CbCr samples. One can also decode the image directly into a
-pre-allocated buffer.
-
-To detect a WebP file and gather the picture's dimensions, the function:
-  int WebPGetInfo(const uint8_t* data, size_t data_size,
-                  int* width, int* height);
-is supplied. No decoding is involved when using it.
-
-Incremental decoding API:
-=========================
-
-In the case when data is being progressively transmitted, pictures can still
-be incrementally decoded using a slightly more complicated API. Decoder state
-is stored into an instance of the WebPIDecoder object. This object can be
-created with the purpose of decoding either RGB or Y'CbCr samples.
-For instance:
-
-  WebPDecBuffer buffer;
-  WebPInitDecBuffer(&buffer);
-  buffer.colorspace = MODE_BGR;
-  ...
-  WebPIDecoder* idec = WebPINewDecoder(&buffer);
-
-As data is made progressively available, this incremental-decoder object
-can be used to decode the picture further. There are two (mutually exclusive)
-ways to pass freshly arrived data:
-
-either by appending the fresh bytes:
-
-  WebPIAppend(idec, fresh_data, size_of_fresh_data);
-
-or by just mentioning the new size of the transmitted data:
-
-  WebPIUpdate(idec, buffer, size_of_transmitted_buffer);
-
-Note that 'buffer' can be modified between each call to WebPIUpdate, in
-particular when the buffer is resized to accommodate larger data.
-
-These functions will return the decoding status: either VP8_STATUS_SUSPENDED if
-decoding is not finished yet or VP8_STATUS_OK when decoding is done. Any other
-status is an error condition.
-
-The 'idec' object must always be released (even upon an error condition) by
-calling: WebPDelete(idec).
-
-To retrieve partially decoded picture samples, one must use the corresponding
-method: WebPIDecGetRGB or WebPIDecGetYUVA.
-It will return the last displayable pixel row.
-
-Lastly, note that decoding can also be performed into a pre-allocated pixel
-buffer. This buffer must be passed when creating a WebPIDecoder, calling
-WebPINewRGB() or WebPINewYUVA().
-
-Please have a look at the src/webp/decode.h header for further details.
-
-Advanced Decoding API:
-======================
-
-WebP decoding supports an advanced API which provides on-the-fly cropping and
-rescaling, something of great usefulness on memory-constrained environments like
-mobile phones. Basically, the memory usage will scale with the output's size,
-not the input's, when one only needs a quick preview or a zoomed in portion of
-an otherwise too-large picture. Some CPU can be saved too, incidentally.
-
--------------------------------------- BEGIN PSEUDO EXAMPLE
-     // A) Init a configuration object
-     WebPDecoderConfig config;
-     CHECK(WebPInitDecoderConfig(&config));
-
-     // B) optional: retrieve the bitstream's features.
-     CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK);
-
-     // C) Adjust 'config' options, if needed
-     config.options.no_fancy_upsampling = 1;
-     config.options.use_scaling = 1;
-     config.options.scaled_width = scaledWidth();
-     config.options.scaled_height = scaledHeight();
-     // etc.
-
-     // D) Specify 'config' output options for specifying output colorspace.
-     // Optionally the external image decode buffer can also be specified.
-     config.output.colorspace = MODE_BGRA;
-     // Optionally, the config.output can be pointed to an external buffer as
-     // well for decoding the image. This externally supplied memory buffer
-     // should be big enough to store the decoded picture.
-     config.output.u.RGBA.rgba = (uint8_t*) memory_buffer;
-     config.output.u.RGBA.stride = scanline_stride;
-     config.output.u.RGBA.size = total_size_of_the_memory_buffer;
-     config.output.is_external_memory = 1;
-
-     // E) Decode the WebP image. There are two variants w.r.t decoding image.
-     // The first one (E.1) decodes the full image and the second one (E.2) is
-     // used to incrementally decode the image using small input buffers.
-     // Any one of these steps can be used to decode the WebP image.
-
-     // E.1) Decode full image.
-     CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK);
-
-     // E.2) Decode image incrementally.
-     WebPIDecoder* const idec = WebPIDecode(NULL, NULL, &config);
-     CHECK(idec != NULL);
-     while (bytes_remaining > 0) {
-       VP8StatusCode status = WebPIAppend(idec, input, bytes_read);
-       if (status == VP8_STATUS_OK || status == VP8_STATUS_SUSPENDED) {
-         bytes_remaining -= bytes_read;
-       } else {
-         break;
-       }
-     }
-     WebPIDelete(idec);
-
-     // F) Decoded image is now in config.output (and config.output.u.RGBA).
-     // It can be saved, displayed or otherwise processed.
-
-     // G) Reclaim memory allocated in config's object. It's safe to call
-     // this function even if the memory is external and wasn't allocated
-     // by WebPDecode().
-     WebPFreeDecBuffer(&config.output);
-
--------------------------------------- END PSEUDO EXAMPLE
-
-Bugs:
-=====
-
-Please report all bugs to the issue tracker:
-    https://bugs.chromium.org/p/webp
-Patches welcome! See this page to get started:
-    http://www.webmproject.org/code/contribute/submitting-patches/
-
-Discuss:
-========
-
-Email: webp-discuss@webmproject.org
-Web: http://groups.google.com/a/webmproject.org/group/webp-discuss
diff --git a/ios/Pods/libwebp/README.mux b/ios/Pods/libwebp/README.mux
deleted file mode 100644
index 7e9c3c9..0000000
--- a/ios/Pods/libwebp/README.mux
+++ /dev/null
@@ -1,256 +0,0 @@
-          __   __  ____  ____  ____  __ __  _     __ __
-         /  \\/  \/  _ \/  _ \/  _ \/  \  \/ \___/_ / _\
-         \       /   __/  _  \   __/      /  /  (_/  /__
-          \__\__/\_____/_____/__/  \__//_/\_____/__/___/v1.0.2
-
-
-Description:
-============
-
-WebPMux: set of two libraries 'Mux' and 'Demux' for creation, extraction and
-manipulation of an extended format WebP file, which can have features like
-color profile, metadata and animation. Reference command-line tools 'webpmux'
-and 'vwebp' as well as the WebP container specification
-'doc/webp-container-spec.txt' are also provided in this package.
-
-WebP Mux tool:
-==============
-
-The examples/ directory contains a tool (webpmux) for manipulating WebP
-files. The webpmux tool can be used to create an extended format WebP file and
-also to extract or strip relevant data from such a file.
-
-A list of options is available using the -help command line flag:
-
-> webpmux -help
-Usage: webpmux -get GET_OPTIONS INPUT -o OUTPUT
-       webpmux -set SET_OPTIONS INPUT -o OUTPUT
-       webpmux -duration DURATION_OPTIONS [-duration ...]
-               INPUT -o OUTPUT
-       webpmux -strip STRIP_OPTIONS INPUT -o OUTPUT
-       webpmux -frame FRAME_OPTIONS [-frame...] [-loop LOOP_COUNT]
-               [-bgcolor BACKGROUND_COLOR] -o OUTPUT
-       webpmux -info INPUT
-       webpmux [-h|-help]
-       webpmux -version
-       webpmux argument_file_name
-
-GET_OPTIONS:
- Extract relevant data:
-   icc       get ICC profile
-   exif      get EXIF metadata
-   xmp       get XMP metadata
-   frame n   get nth frame
-
-SET_OPTIONS:
- Set color profile/metadata:
-   icc  file.icc     set ICC profile
-   exif file.exif    set EXIF metadata
-   xmp  file.xmp     set XMP metadata
-   where:    'file.icc' contains the ICC profile to be set,
-             'file.exif' contains the EXIF metadata to be set
-             'file.xmp' contains the XMP metadata to be set
-
-DURATION_OPTIONS:
- Set duration of selected frames:
-   duration            set duration for each frames
-   duration,frame      set duration of a particular frame
-   duration,start,end  set duration of frames in the
-                        interval [start,end])
-   where: 'duration' is the duration in milliseconds
-          'start' is the start frame index
-          'end' is the inclusive end frame index
-           The special 'end' value '0' means: last frame.
-
-STRIP_OPTIONS:
- Strip color profile/metadata:
-   icc       strip ICC profile
-   exif      strip EXIF metadata
-   xmp       strip XMP metadata
-
-FRAME_OPTIONS(i):
- Create animation:
-   file_i +di+[xi+yi[+mi[bi]]]
-   where:    'file_i' is the i'th animation frame (WebP format),
-             'di' is the pause duration before next frame,
-             'xi','yi' specify the image offset for this frame,
-             'mi' is the dispose method for this frame (0 or 1),
-             'bi' is the blending method for this frame (+b or -b)
-
-LOOP_COUNT:
- Number of times to repeat the animation.
- Valid range is 0 to 65535 [Default: 0 (infinite)].
-
-BACKGROUND_COLOR:
- Background color of the canvas.
-  A,R,G,B
-  where:    'A', 'R', 'G' and 'B' are integers in the range 0 to 255 specifying
-            the Alpha, Red, Green and Blue component values respectively
-            [Default: 255,255,255,255]
-
-INPUT & OUTPUT are in WebP format.
-
-Note: The nature of EXIF, XMP and ICC data is not checked and is assumed to be
-valid.
-
-Note: if a single file name is passed as the argument, the arguments will be
-tokenized from this file. The file name must not start with the character '-'.
-
-Visualization tool:
-===================
-
-The examples/ directory also contains a tool (vwebp) for viewing WebP files.
-It decodes the image and visualizes it using OpenGL. See the libwebp README
-for details on building and running this program.
-
-Mux API:
-========
-The Mux API contains methods for adding data to and reading data from WebP
-files. This API currently supports XMP/EXIF metadata, ICC profile and animation.
-Other features may be added in subsequent releases.
-
-Example#1 (pseudo code): Creating a WebPMux object with image data, color
-profile and XMP metadata.
-
-  int copy_data = 0;
-  WebPMux* mux = WebPMuxNew();
-  // ... (Prepare image data).
-  WebPMuxSetImage(mux, &image, copy_data);
-  // ... (Prepare ICC profile data).
-  WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data);
-  // ... (Prepare XMP metadata).
-  WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data);
-  // Get data from mux in WebP RIFF format.
-  WebPMuxAssemble(mux, &output_data);
-  WebPMuxDelete(mux);
-  // ... (Consume output_data; e.g. write output_data.bytes to file).
-  WebPDataClear(&output_data);
-
-
-Example#2 (pseudo code): Get image and color profile data from a WebP file.
-
-  int copy_data = 0;
-  // ... (Read data from file).
-  WebPMux* mux = WebPMuxCreate(&data, copy_data);
-  WebPMuxGetFrame(mux, 1, &image);
-  // ... (Consume image; e.g. call WebPDecode() to decode the data).
-  WebPMuxGetChunk(mux, "ICCP", &icc_profile);
-  // ... (Consume icc_profile).
-  WebPMuxDelete(mux);
-  free(data);
-
-
-For a detailed Mux API reference, please refer to the header file
-(src/webp/mux.h).
-
-Demux API:
-==========
-The Demux API enables extraction of images and extended format data from
-WebP files. This API currently supports reading of XMP/EXIF metadata, ICC
-profile and animated images. Other features may be added in subsequent
-releases.
-
-Code example: Demuxing WebP data to extract all the frames, ICC profile
-and EXIF/XMP metadata.
-
-  WebPDemuxer* demux = WebPDemux(&webp_data);
-  uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
-  uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT);
-  // ... (Get information about the features present in the WebP file).
-  uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS);
-
-  // ... (Iterate over all frames).
-  WebPIterator iter;
-  if (WebPDemuxGetFrame(demux, 1, &iter)) {
-    do {
-      // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(),
-      // ... and get other frame properties like width, height, offsets etc.
-      // ... see 'struct WebPIterator' below for more info).
-    } while (WebPDemuxNextFrame(&iter));
-    WebPDemuxReleaseIterator(&iter);
-  }
-
-  // ... (Extract metadata).
-  WebPChunkIterator chunk_iter;
-  if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter);
-  // ... (Consume the ICC profile in 'chunk_iter.chunk').
-  WebPDemuxReleaseChunkIterator(&chunk_iter);
-  if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter);
-  // ... (Consume the EXIF metadata in 'chunk_iter.chunk').
-  WebPDemuxReleaseChunkIterator(&chunk_iter);
-  if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter);
-  // ... (Consume the XMP metadata in 'chunk_iter.chunk').
-  WebPDemuxReleaseChunkIterator(&chunk_iter);
-  WebPDemuxDelete(demux);
-
-
-For a detailed Demux API reference, please refer to the header file
-(src/webp/demux.h).
-
-AnimEncoder API:
-================
-The AnimEncoder API can be used to create animated WebP images.
-
-Code example:
-
-  WebPAnimEncoderOptions enc_options;
-  WebPAnimEncoderOptionsInit(&enc_options);
-  // ... (Tune 'enc_options' as needed).
-  WebPAnimEncoder* enc = WebPAnimEncoderNew(width, height, &enc_options);
-  while(<there are more frames>) {
-    WebPConfig config;
-    WebPConfigInit(&config);
-    // ... (Tune 'config' as needed).
-    WebPAnimEncoderAdd(enc, frame, duration, &config);
-  }
-  WebPAnimEncoderAssemble(enc, webp_data);
-  WebPAnimEncoderDelete(enc);
-  // ... (Write the 'webp_data' to a file, or re-mux it further).
-
-
-For a detailed AnimEncoder API reference, please refer to the header file
-(src/webp/mux.h).
-
-AnimDecoder API:
-================
-This AnimDecoder API allows decoding (possibly) animated WebP images.
-
-Code Example:
-
-  WebPAnimDecoderOptions dec_options;
-  WebPAnimDecoderOptionsInit(&dec_options);
-  // Tune 'dec_options' as needed.
-  WebPAnimDecoder* dec = WebPAnimDecoderNew(webp_data, &dec_options);
-  WebPAnimInfo anim_info;
-  WebPAnimDecoderGetInfo(dec, &anim_info);
-  for (uint32_t i = 0; i < anim_info.loop_count; ++i) {
-    while (WebPAnimDecoderHasMoreFrames(dec)) {
-      uint8_t* buf;
-      int timestamp;
-      WebPAnimDecoderGetNext(dec, &buf, &timestamp);
-      // ... (Render 'buf' based on 'timestamp').
-      // ... (Do NOT free 'buf', as it is owned by 'dec').
-    }
-    WebPAnimDecoderReset(dec);
-  }
-  const WebPDemuxer* demuxer = WebPAnimDecoderGetDemuxer(dec);
-  // ... (Do something using 'demuxer'; e.g. get EXIF/XMP/ICC data).
-  WebPAnimDecoderDelete(dec);
-
-For a detailed AnimDecoder API reference, please refer to the header file
-(src/webp/demux.h).
-
-
-Bugs:
-=====
-
-Please report all bugs to the issue tracker:
-    https://bugs.chromium.org/p/webp
-Patches welcome! See this page to get started:
-    http://www.webmproject.org/code/contribute/submitting-patches/
-
-Discuss:
-========
-
-Email: webp-discuss@webmproject.org
-Web: http://groups.google.com/a/webmproject.org/group/webp-discuss
diff --git a/ios/Pods/libwebp/README.webp_js b/ios/Pods/libwebp/README.webp_js
deleted file mode 100644
index 2805354..0000000
--- a/ios/Pods/libwebp/README.webp_js
+++ /dev/null
@@ -1,76 +0,0 @@
-     __   __ ____ ____ ____     __  ____
-    /  \\/  \  _ \  _ \  _ \   (__)/  __\
-    \       /  __/ _  \  __/   _)  \_   \
-     \__\__/_____/____/_/     /____/____/
-
-Description:
-============
-
-This file describes the compilation of libwebp into a JavaScript decoder
-using Emscripten and CMake.
-
- - install the Emscripten SDK following the procedure described at:
-   https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html
-   After installation, you should have some global variable positioned to the
-   location of the SDK. In particular, $EMSCRIPTEN should point to the
-   top-level directory containing Emscripten tools.
-
- - make sure the file $EMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake is
-   accessible. This is the toolchain file used by CMake to invoke Emscripten.
-
- - configure the project 'WEBP_JS' with CMake using:
-
- cd webp_js && \
- cmake -DWEBP_BUILD_WEBP_JS=ON \
-       -DEMSCRIPTEN_GENERATE_BITCODE_STATIC_LIBRARIES=1 \
-       -DCMAKE_TOOLCHAIN_FILE=$EMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake \
-       ../
-
- - compile webp.js using 'make'.
-
- - that's it! Upon completion, you should have the webp.js and
-   webp.js.mem files generated.
-
-The callable JavaScript function is WebPToSDL(), which decodes a raw WebP
-bitstream into a canvas. See webp_js/index.html for a simple usage sample
-(see below for instructions).
-
-Demo HTML page:
-===============
-
-   The HTML page webp_js/index.html requires an HTTP server to serve the WebP
-   image example. It's easy to just use Python for that.
-
-cd webp_js && python -m SimpleHTTPServer 8080
-
-and then navigate to http://localhost:8080 in your favorite browser.
-
-
-Web-Assembly (WASM) version:
-============================
-
-  CMakeLists.txt is configured to build the WASM version when using
-  the option WEBP_BUILD_WEBP_JS=ON. The compilation step will assemble
-  the files 'webp_wasm.js', 'webp_wasm.wasm' in the webp_js/ directory.
-  See webp_js/index_wasm.html for a simple demo page using the WASM version
-  of the library.
-
-  You will need a fairly recent version of Emscripten (at least 1.37.8) and of
-  your WASM-enabled browser to run this version. Consider it very experimental!
-
-Caveat:
-=======
-
-  - First decoding using the library is usually slower, due to just-in-time
-    compilation.
-
-  - Some versions of llvm produce the following compile error when SSE2 is
-    enabled.
-
-"Unsupported:   %516 = bitcast <8 x i16> %481 to i128
- LLVM ERROR: BitCast Instruction not yet supported for integer types larger than 64 bits"
-
-    The corresponding Emscripten bug is at:
-    https://github.com/kripken/emscripten/issues/3788
-
-    Therefore, SSE2 optimization is currently disabled in CMakeLists.txt.
diff --git a/ios/Pods/libwebp/src/dec/alpha_dec.c b/ios/Pods/libwebp/src/dec/alpha_dec.c
deleted file mode 100644
index bce735b..0000000
--- a/ios/Pods/libwebp/src/dec/alpha_dec.c
+++ /dev/null
@@ -1,232 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Alpha-plane decompression.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <stdlib.h>
-#include "src/dec/alphai_dec.h"
-#include "src/dec/vp8i_dec.h"
-#include "src/dec/vp8li_dec.h"
-#include "src/dsp/dsp.h"
-#include "src/utils/quant_levels_dec_utils.h"
-#include "src/utils/utils.h"
-#include "src/webp/format_constants.h"
-
-//------------------------------------------------------------------------------
-// ALPHDecoder object.
-
-// Allocates a new alpha decoder instance.
-static ALPHDecoder* ALPHNew(void) {
-  ALPHDecoder* const dec = (ALPHDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec));
-  return dec;
-}
-
-// Clears and deallocates an alpha decoder instance.
-static void ALPHDelete(ALPHDecoder* const dec) {
-  if (dec != NULL) {
-    VP8LDelete(dec->vp8l_dec_);
-    dec->vp8l_dec_ = NULL;
-    WebPSafeFree(dec);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Decoding.
-
-// Initialize alpha decoding by parsing the alpha header and decoding the image
-// header for alpha data stored using lossless compression.
-// Returns false in case of error in alpha header (data too short, invalid
-// compression method or filter, error in lossless header data etc).
-static int ALPHInit(ALPHDecoder* const dec, const uint8_t* data,
-                    size_t data_size, const VP8Io* const src_io,
-                    uint8_t* output) {
-  int ok = 0;
-  const uint8_t* const alpha_data = data + ALPHA_HEADER_LEN;
-  const size_t alpha_data_size = data_size - ALPHA_HEADER_LEN;
-  int rsrv;
-  VP8Io* const io = &dec->io_;
-
-  assert(data != NULL && output != NULL && src_io != NULL);
-
-  VP8FiltersInit();
-  dec->output_ = output;
-  dec->width_ = src_io->width;
-  dec->height_ = src_io->height;
-  assert(dec->width_ > 0 && dec->height_ > 0);
-
-  if (data_size <= ALPHA_HEADER_LEN) {
-    return 0;
-  }
-
-  dec->method_ = (data[0] >> 0) & 0x03;
-  dec->filter_ = (WEBP_FILTER_TYPE)((data[0] >> 2) & 0x03);
-  dec->pre_processing_ = (data[0] >> 4) & 0x03;
-  rsrv = (data[0] >> 6) & 0x03;
-  if (dec->method_ < ALPHA_NO_COMPRESSION ||
-      dec->method_ > ALPHA_LOSSLESS_COMPRESSION ||
-      dec->filter_ >= WEBP_FILTER_LAST ||
-      dec->pre_processing_ > ALPHA_PREPROCESSED_LEVELS ||
-      rsrv != 0) {
-    return 0;
-  }
-
-  // Copy the necessary parameters from src_io to io
-  VP8InitIo(io);
-  WebPInitCustomIo(NULL, io);
-  io->opaque = dec;
-  io->width = src_io->width;
-  io->height = src_io->height;
-
-  io->use_cropping = src_io->use_cropping;
-  io->crop_left = src_io->crop_left;
-  io->crop_right = src_io->crop_right;
-  io->crop_top = src_io->crop_top;
-  io->crop_bottom = src_io->crop_bottom;
-  // No need to copy the scaling parameters.
-
-  if (dec->method_ == ALPHA_NO_COMPRESSION) {
-    const size_t alpha_decoded_size = dec->width_ * dec->height_;
-    ok = (alpha_data_size >= alpha_decoded_size);
-  } else {
-    assert(dec->method_ == ALPHA_LOSSLESS_COMPRESSION);
-    ok = VP8LDecodeAlphaHeader(dec, alpha_data, alpha_data_size);
-  }
-
-  return ok;
-}
-
-// Decodes, unfilters and dequantizes *at least* 'num_rows' rows of alpha
-// starting from row number 'row'. It assumes that rows up to (row - 1) have
-// already been decoded.
-// Returns false in case of bitstream error.
-static int ALPHDecode(VP8Decoder* const dec, int row, int num_rows) {
-  ALPHDecoder* const alph_dec = dec->alph_dec_;
-  const int width = alph_dec->width_;
-  const int height = alph_dec->io_.crop_bottom;
-  if (alph_dec->method_ == ALPHA_NO_COMPRESSION) {
-    int y;
-    const uint8_t* prev_line = dec->alpha_prev_line_;
-    const uint8_t* deltas = dec->alpha_data_ + ALPHA_HEADER_LEN + row * width;
-    uint8_t* dst = dec->alpha_plane_ + row * width;
-    assert(deltas <= &dec->alpha_data_[dec->alpha_data_size_]);
-    if (alph_dec->filter_ != WEBP_FILTER_NONE) {
-      assert(WebPUnfilters[alph_dec->filter_] != NULL);
-      for (y = 0; y < num_rows; ++y) {
-        WebPUnfilters[alph_dec->filter_](prev_line, deltas, dst, width);
-        prev_line = dst;
-        dst += width;
-        deltas += width;
-      }
-    } else {
-      for (y = 0; y < num_rows; ++y) {
-        memcpy(dst, deltas, width * sizeof(*dst));
-        prev_line = dst;
-        dst += width;
-        deltas += width;
-      }
-    }
-    dec->alpha_prev_line_ = prev_line;
-  } else {  // alph_dec->method_ == ALPHA_LOSSLESS_COMPRESSION
-    assert(alph_dec->vp8l_dec_ != NULL);
-    if (!VP8LDecodeAlphaImageStream(alph_dec, row + num_rows)) {
-      return 0;
-    }
-  }
-
-  if (row + num_rows >= height) {
-    dec->is_alpha_decoded_ = 1;
-  }
-  return 1;
-}
-
-static int AllocateAlphaPlane(VP8Decoder* const dec, const VP8Io* const io) {
-  const int stride = io->width;
-  const int height = io->crop_bottom;
-  const uint64_t alpha_size = (uint64_t)stride * height;
-  assert(dec->alpha_plane_mem_ == NULL);
-  dec->alpha_plane_mem_ =
-      (uint8_t*)WebPSafeMalloc(alpha_size, sizeof(*dec->alpha_plane_));
-  if (dec->alpha_plane_mem_ == NULL) {
-    return 0;
-  }
-  dec->alpha_plane_ = dec->alpha_plane_mem_;
-  dec->alpha_prev_line_ = NULL;
-  return 1;
-}
-
-void WebPDeallocateAlphaMemory(VP8Decoder* const dec) {
-  assert(dec != NULL);
-  WebPSafeFree(dec->alpha_plane_mem_);
-  dec->alpha_plane_mem_ = NULL;
-  dec->alpha_plane_ = NULL;
-  ALPHDelete(dec->alph_dec_);
-  dec->alph_dec_ = NULL;
-}
-
-//------------------------------------------------------------------------------
-// Main entry point.
-
-const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec,
-                                      const VP8Io* const io,
-                                      int row, int num_rows) {
-  const int width = io->width;
-  const int height = io->crop_bottom;
-
-  assert(dec != NULL && io != NULL);
-
-  if (row < 0 || num_rows <= 0 || row + num_rows > height) {
-    return NULL;    // sanity check.
-  }
-
-  if (!dec->is_alpha_decoded_) {
-    if (dec->alph_dec_ == NULL) {    // Initialize decoder.
-      dec->alph_dec_ = ALPHNew();
-      if (dec->alph_dec_ == NULL) return NULL;
-      if (!AllocateAlphaPlane(dec, io)) goto Error;
-      if (!ALPHInit(dec->alph_dec_, dec->alpha_data_, dec->alpha_data_size_,
-                    io, dec->alpha_plane_)) {
-        goto Error;
-      }
-      // if we allowed use of alpha dithering, check whether it's needed at all
-      if (dec->alph_dec_->pre_processing_ != ALPHA_PREPROCESSED_LEVELS) {
-        dec->alpha_dithering_ = 0;   // disable dithering
-      } else {
-        num_rows = height - row;     // decode everything in one pass
-      }
-    }
-
-    assert(dec->alph_dec_ != NULL);
-    assert(row + num_rows <= height);
-    if (!ALPHDecode(dec, row, num_rows)) goto Error;
-
-    if (dec->is_alpha_decoded_) {   // finished?
-      ALPHDelete(dec->alph_dec_);
-      dec->alph_dec_ = NULL;
-      if (dec->alpha_dithering_ > 0) {
-        uint8_t* const alpha = dec->alpha_plane_ + io->crop_top * width
-                             + io->crop_left;
-        if (!WebPDequantizeLevels(alpha,
-                                  io->crop_right - io->crop_left,
-                                  io->crop_bottom - io->crop_top,
-                                  width, dec->alpha_dithering_)) {
-          goto Error;
-        }
-      }
-    }
-  }
-
-  // Return a pointer to the current decoded row.
-  return dec->alpha_plane_ + row * width;
-
- Error:
-  WebPDeallocateAlphaMemory(dec);
-  return NULL;
-}
diff --git a/ios/Pods/libwebp/src/dec/alphai_dec.h b/ios/Pods/libwebp/src/dec/alphai_dec.h
deleted file mode 100644
index a64104a..0000000
--- a/ios/Pods/libwebp/src/dec/alphai_dec.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Alpha decoder: internal header.
-//
-// Author: Urvang (urvang@google.com)
-
-#ifndef WEBP_DEC_ALPHAI_DEC_H_
-#define WEBP_DEC_ALPHAI_DEC_H_
-
-#include "src/dec/webpi_dec.h"
-#include "src/utils/filters_utils.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct VP8LDecoder;  // Defined in dec/vp8li.h.
-
-typedef struct ALPHDecoder ALPHDecoder;
-struct ALPHDecoder {
-  int width_;
-  int height_;
-  int method_;
-  WEBP_FILTER_TYPE filter_;
-  int pre_processing_;
-  struct VP8LDecoder* vp8l_dec_;
-  VP8Io io_;
-  int use_8b_decode_;  // Although alpha channel requires only 1 byte per
-                       // pixel, sometimes VP8LDecoder may need to allocate
-                       // 4 bytes per pixel internally during decode.
-  uint8_t* output_;
-  const uint8_t* prev_line_;   // last output row (or NULL)
-};
-
-//------------------------------------------------------------------------------
-// internal functions. Not public.
-
-// Deallocate memory associated to dec->alpha_plane_ decoding
-void WebPDeallocateAlphaMemory(VP8Decoder* const dec);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DEC_ALPHAI_DEC_H_
diff --git a/ios/Pods/libwebp/src/dec/buffer_dec.c b/ios/Pods/libwebp/src/dec/buffer_dec.c
deleted file mode 100644
index 3cd94eb..0000000
--- a/ios/Pods/libwebp/src/dec/buffer_dec.c
+++ /dev/null
@@ -1,312 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Everything about WebPDecBuffer
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <stdlib.h>
-
-#include "src/dec/vp8i_dec.h"
-#include "src/dec/webpi_dec.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// WebPDecBuffer
-
-// Number of bytes per pixel for the different color-spaces.
-static const uint8_t kModeBpp[MODE_LAST] = {
-  3, 4, 3, 4, 4, 2, 2,
-  4, 4, 4, 2,    // pre-multiplied modes
-  1, 1 };
-
-// Check that webp_csp_mode is within the bounds of WEBP_CSP_MODE.
-// Convert to an integer to handle both the unsigned/signed enum cases
-// without the need for casting to remove type limit warnings.
-static int IsValidColorspace(int webp_csp_mode) {
-  return (webp_csp_mode >= MODE_RGB && webp_csp_mode < MODE_LAST);
-}
-
-// strictly speaking, the very last (or first, if flipped) row
-// doesn't require padding.
-#define MIN_BUFFER_SIZE(WIDTH, HEIGHT, STRIDE)       \
-    ((uint64_t)(STRIDE) * ((HEIGHT) - 1) + (WIDTH))
-
-static VP8StatusCode CheckDecBuffer(const WebPDecBuffer* const buffer) {
-  int ok = 1;
-  const WEBP_CSP_MODE mode = buffer->colorspace;
-  const int width = buffer->width;
-  const int height = buffer->height;
-  if (!IsValidColorspace(mode)) {
-    ok = 0;
-  } else if (!WebPIsRGBMode(mode)) {   // YUV checks
-    const WebPYUVABuffer* const buf = &buffer->u.YUVA;
-    const int uv_width  = (width  + 1) / 2;
-    const int uv_height = (height + 1) / 2;
-    const int y_stride = abs(buf->y_stride);
-    const int u_stride = abs(buf->u_stride);
-    const int v_stride = abs(buf->v_stride);
-    const int a_stride = abs(buf->a_stride);
-    const uint64_t y_size = MIN_BUFFER_SIZE(width, height, y_stride);
-    const uint64_t u_size = MIN_BUFFER_SIZE(uv_width, uv_height, u_stride);
-    const uint64_t v_size = MIN_BUFFER_SIZE(uv_width, uv_height, v_stride);
-    const uint64_t a_size = MIN_BUFFER_SIZE(width, height, a_stride);
-    ok &= (y_size <= buf->y_size);
-    ok &= (u_size <= buf->u_size);
-    ok &= (v_size <= buf->v_size);
-    ok &= (y_stride >= width);
-    ok &= (u_stride >= uv_width);
-    ok &= (v_stride >= uv_width);
-    ok &= (buf->y != NULL);
-    ok &= (buf->u != NULL);
-    ok &= (buf->v != NULL);
-    if (mode == MODE_YUVA) {
-      ok &= (a_stride >= width);
-      ok &= (a_size <= buf->a_size);
-      ok &= (buf->a != NULL);
-    }
-  } else {    // RGB checks
-    const WebPRGBABuffer* const buf = &buffer->u.RGBA;
-    const int stride = abs(buf->stride);
-    const uint64_t size =
-        MIN_BUFFER_SIZE(width * kModeBpp[mode], height, stride);
-    ok &= (size <= buf->size);
-    ok &= (stride >= width * kModeBpp[mode]);
-    ok &= (buf->rgba != NULL);
-  }
-  return ok ? VP8_STATUS_OK : VP8_STATUS_INVALID_PARAM;
-}
-#undef MIN_BUFFER_SIZE
-
-static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) {
-  const int w = buffer->width;
-  const int h = buffer->height;
-  const WEBP_CSP_MODE mode = buffer->colorspace;
-
-  if (w <= 0 || h <= 0 || !IsValidColorspace(mode)) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-
-  if (buffer->is_external_memory <= 0 && buffer->private_memory == NULL) {
-    uint8_t* output;
-    int uv_stride = 0, a_stride = 0;
-    uint64_t uv_size = 0, a_size = 0, total_size;
-    // We need memory and it hasn't been allocated yet.
-    // => initialize output buffer, now that dimensions are known.
-    int stride;
-    uint64_t size;
-
-    if ((uint64_t)w * kModeBpp[mode] >= (1ull << 32)) {
-      return VP8_STATUS_INVALID_PARAM;
-    }
-    stride = w * kModeBpp[mode];
-    size = (uint64_t)stride * h;
-    if (!WebPIsRGBMode(mode)) {
-      uv_stride = (w + 1) / 2;
-      uv_size = (uint64_t)uv_stride * ((h + 1) / 2);
-      if (mode == MODE_YUVA) {
-        a_stride = w;
-        a_size = (uint64_t)a_stride * h;
-      }
-    }
-    total_size = size + 2 * uv_size + a_size;
-
-    // Security/sanity checks
-    output = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*output));
-    if (output == NULL) {
-      return VP8_STATUS_OUT_OF_MEMORY;
-    }
-    buffer->private_memory = output;
-
-    if (!WebPIsRGBMode(mode)) {   // YUVA initialization
-      WebPYUVABuffer* const buf = &buffer->u.YUVA;
-      buf->y = output;
-      buf->y_stride = stride;
-      buf->y_size = (size_t)size;
-      buf->u = output + size;
-      buf->u_stride = uv_stride;
-      buf->u_size = (size_t)uv_size;
-      buf->v = output + size + uv_size;
-      buf->v_stride = uv_stride;
-      buf->v_size = (size_t)uv_size;
-      if (mode == MODE_YUVA) {
-        buf->a = output + size + 2 * uv_size;
-      }
-      buf->a_size = (size_t)a_size;
-      buf->a_stride = a_stride;
-    } else {  // RGBA initialization
-      WebPRGBABuffer* const buf = &buffer->u.RGBA;
-      buf->rgba = output;
-      buf->stride = stride;
-      buf->size = (size_t)size;
-    }
-  }
-  return CheckDecBuffer(buffer);
-}
-
-VP8StatusCode WebPFlipBuffer(WebPDecBuffer* const buffer) {
-  if (buffer == NULL) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  if (WebPIsRGBMode(buffer->colorspace)) {
-    WebPRGBABuffer* const buf = &buffer->u.RGBA;
-    buf->rgba += (buffer->height - 1) * buf->stride;
-    buf->stride = -buf->stride;
-  } else {
-    WebPYUVABuffer* const buf = &buffer->u.YUVA;
-    const int H = buffer->height;
-    buf->y += (H - 1) * buf->y_stride;
-    buf->y_stride = -buf->y_stride;
-    buf->u += ((H - 1) >> 1) * buf->u_stride;
-    buf->u_stride = -buf->u_stride;
-    buf->v += ((H - 1) >> 1) * buf->v_stride;
-    buf->v_stride = -buf->v_stride;
-    if (buf->a != NULL) {
-      buf->a += (H - 1) * buf->a_stride;
-      buf->a_stride = -buf->a_stride;
-    }
-  }
-  return VP8_STATUS_OK;
-}
-
-VP8StatusCode WebPAllocateDecBuffer(int width, int height,
-                                    const WebPDecoderOptions* const options,
-                                    WebPDecBuffer* const buffer) {
-  VP8StatusCode status;
-  if (buffer == NULL || width <= 0 || height <= 0) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  if (options != NULL) {    // First, apply options if there is any.
-    if (options->use_cropping) {
-      const int cw = options->crop_width;
-      const int ch = options->crop_height;
-      const int x = options->crop_left & ~1;
-      const int y = options->crop_top & ~1;
-      if (x < 0 || y < 0 || cw <= 0 || ch <= 0 ||
-          x + cw > width || y + ch > height) {
-        return VP8_STATUS_INVALID_PARAM;   // out of frame boundary.
-      }
-      width = cw;
-      height = ch;
-    }
-
-    if (options->use_scaling) {
-#if !defined(WEBP_REDUCE_SIZE)
-      int scaled_width = options->scaled_width;
-      int scaled_height = options->scaled_height;
-      if (!WebPRescalerGetScaledDimensions(
-              width, height, &scaled_width, &scaled_height)) {
-        return VP8_STATUS_INVALID_PARAM;
-      }
-      width = scaled_width;
-      height = scaled_height;
-#else
-      return VP8_STATUS_INVALID_PARAM;   // rescaling not supported
-#endif
-    }
-  }
-  buffer->width = width;
-  buffer->height = height;
-
-  // Then, allocate buffer for real.
-  status = AllocateBuffer(buffer);
-  if (status != VP8_STATUS_OK) return status;
-
-  // Use the stride trick if vertical flip is needed.
-  if (options != NULL && options->flip) {
-    status = WebPFlipBuffer(buffer);
-  }
-  return status;
-}
-
-//------------------------------------------------------------------------------
-// constructors / destructors
-
-int WebPInitDecBufferInternal(WebPDecBuffer* buffer, int version) {
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DECODER_ABI_VERSION)) {
-    return 0;  // version mismatch
-  }
-  if (buffer == NULL) return 0;
-  memset(buffer, 0, sizeof(*buffer));
-  return 1;
-}
-
-void WebPFreeDecBuffer(WebPDecBuffer* buffer) {
-  if (buffer != NULL) {
-    if (buffer->is_external_memory <= 0) {
-      WebPSafeFree(buffer->private_memory);
-    }
-    buffer->private_memory = NULL;
-  }
-}
-
-void WebPCopyDecBuffer(const WebPDecBuffer* const src,
-                       WebPDecBuffer* const dst) {
-  if (src != NULL && dst != NULL) {
-    *dst = *src;
-    if (src->private_memory != NULL) {
-      dst->is_external_memory = 1;   // dst buffer doesn't own the memory.
-      dst->private_memory = NULL;
-    }
-  }
-}
-
-// Copy and transfer ownership from src to dst (beware of parameter order!)
-void WebPGrabDecBuffer(WebPDecBuffer* const src, WebPDecBuffer* const dst) {
-  if (src != NULL && dst != NULL) {
-    *dst = *src;
-    if (src->private_memory != NULL) {
-      src->is_external_memory = 1;   // src relinquishes ownership
-      src->private_memory = NULL;
-    }
-  }
-}
-
-VP8StatusCode WebPCopyDecBufferPixels(const WebPDecBuffer* const src_buf,
-                                      WebPDecBuffer* const dst_buf) {
-  assert(src_buf != NULL && dst_buf != NULL);
-  assert(src_buf->colorspace == dst_buf->colorspace);
-
-  dst_buf->width = src_buf->width;
-  dst_buf->height = src_buf->height;
-  if (CheckDecBuffer(dst_buf) != VP8_STATUS_OK) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  if (WebPIsRGBMode(src_buf->colorspace)) {
-    const WebPRGBABuffer* const src = &src_buf->u.RGBA;
-    const WebPRGBABuffer* const dst = &dst_buf->u.RGBA;
-    WebPCopyPlane(src->rgba, src->stride, dst->rgba, dst->stride,
-                  src_buf->width * kModeBpp[src_buf->colorspace],
-                  src_buf->height);
-  } else {
-    const WebPYUVABuffer* const src = &src_buf->u.YUVA;
-    const WebPYUVABuffer* const dst = &dst_buf->u.YUVA;
-    WebPCopyPlane(src->y, src->y_stride, dst->y, dst->y_stride,
-                  src_buf->width, src_buf->height);
-    WebPCopyPlane(src->u, src->u_stride, dst->u, dst->u_stride,
-                  (src_buf->width + 1) / 2, (src_buf->height + 1) / 2);
-    WebPCopyPlane(src->v, src->v_stride, dst->v, dst->v_stride,
-                  (src_buf->width + 1) / 2, (src_buf->height + 1) / 2);
-    if (WebPIsAlphaMode(src_buf->colorspace)) {
-      WebPCopyPlane(src->a, src->a_stride, dst->a, dst->a_stride,
-                    src_buf->width, src_buf->height);
-    }
-  }
-  return VP8_STATUS_OK;
-}
-
-int WebPAvoidSlowMemory(const WebPDecBuffer* const output,
-                        const WebPBitstreamFeatures* const features) {
-  assert(output != NULL);
-  return (output->is_external_memory >= 2) &&
-         WebPIsPremultipliedMode(output->colorspace) &&
-         (features != NULL && features->has_alpha);
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dec/common_dec.h b/ios/Pods/libwebp/src/dec/common_dec.h
deleted file mode 100644
index b158550..0000000
--- a/ios/Pods/libwebp/src/dec/common_dec.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Definitions and macros common to encoding and decoding
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_DEC_COMMON_DEC_H_
-#define WEBP_DEC_COMMON_DEC_H_
-
-// intra prediction modes
-enum { B_DC_PRED = 0,   // 4x4 modes
-       B_TM_PRED = 1,
-       B_VE_PRED = 2,
-       B_HE_PRED = 3,
-       B_RD_PRED = 4,
-       B_VR_PRED = 5,
-       B_LD_PRED = 6,
-       B_VL_PRED = 7,
-       B_HD_PRED = 8,
-       B_HU_PRED = 9,
-       NUM_BMODES = B_HU_PRED + 1 - B_DC_PRED,  // = 10
-
-       // Luma16 or UV modes
-       DC_PRED = B_DC_PRED, V_PRED = B_VE_PRED,
-       H_PRED = B_HE_PRED, TM_PRED = B_TM_PRED,
-       B_PRED = NUM_BMODES,   // refined I4x4 mode
-       NUM_PRED_MODES = 4,
-
-       // special modes
-       B_DC_PRED_NOTOP = 4,
-       B_DC_PRED_NOLEFT = 5,
-       B_DC_PRED_NOTOPLEFT = 6,
-       NUM_B_DC_MODES = 7 };
-
-enum { MB_FEATURE_TREE_PROBS = 3,
-       NUM_MB_SEGMENTS = 4,
-       NUM_REF_LF_DELTAS = 4,
-       NUM_MODE_LF_DELTAS = 4,    // I4x4, ZERO, *, SPLIT
-       MAX_NUM_PARTITIONS = 8,
-       // Probabilities
-       NUM_TYPES = 4,   // 0: i16-AC,  1: i16-DC,  2:chroma-AC,  3:i4-AC
-       NUM_BANDS = 8,
-       NUM_CTX = 3,
-       NUM_PROBAS = 11
-     };
-
-#endif  // WEBP_DEC_COMMON_DEC_H_
diff --git a/ios/Pods/libwebp/src/dec/frame_dec.c b/ios/Pods/libwebp/src/dec/frame_dec.c
deleted file mode 100644
index bda9e1a..0000000
--- a/ios/Pods/libwebp/src/dec/frame_dec.c
+++ /dev/null
@@ -1,803 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Frame-reconstruction function. Memory allocation.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <stdlib.h>
-#include "src/dec/vp8i_dec.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// Main reconstruction function.
-
-static const uint16_t kScan[16] = {
-  0 +  0 * BPS,  4 +  0 * BPS, 8 +  0 * BPS, 12 +  0 * BPS,
-  0 +  4 * BPS,  4 +  4 * BPS, 8 +  4 * BPS, 12 +  4 * BPS,
-  0 +  8 * BPS,  4 +  8 * BPS, 8 +  8 * BPS, 12 +  8 * BPS,
-  0 + 12 * BPS,  4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS
-};
-
-static int CheckMode(int mb_x, int mb_y, int mode) {
-  if (mode == B_DC_PRED) {
-    if (mb_x == 0) {
-      return (mb_y == 0) ? B_DC_PRED_NOTOPLEFT : B_DC_PRED_NOLEFT;
-    } else {
-      return (mb_y == 0) ? B_DC_PRED_NOTOP : B_DC_PRED;
-    }
-  }
-  return mode;
-}
-
-static void Copy32b(uint8_t* const dst, const uint8_t* const src) {
-  memcpy(dst, src, 4);
-}
-
-static WEBP_INLINE void DoTransform(uint32_t bits, const int16_t* const src,
-                                    uint8_t* const dst) {
-  switch (bits >> 30) {
-    case 3:
-      VP8Transform(src, dst, 0);
-      break;
-    case 2:
-      VP8TransformAC3(src, dst);
-      break;
-    case 1:
-      VP8TransformDC(src, dst);
-      break;
-    default:
-      break;
-  }
-}
-
-static void DoUVTransform(uint32_t bits, const int16_t* const src,
-                          uint8_t* const dst) {
-  if (bits & 0xff) {    // any non-zero coeff at all?
-    if (bits & 0xaa) {  // any non-zero AC coefficient?
-      VP8TransformUV(src, dst);   // note we don't use the AC3 variant for U/V
-    } else {
-      VP8TransformDCUV(src, dst);
-    }
-  }
-}
-
-static void ReconstructRow(const VP8Decoder* const dec,
-                           const VP8ThreadContext* ctx) {
-  int j;
-  int mb_x;
-  const int mb_y = ctx->mb_y_;
-  const int cache_id = ctx->id_;
-  uint8_t* const y_dst = dec->yuv_b_ + Y_OFF;
-  uint8_t* const u_dst = dec->yuv_b_ + U_OFF;
-  uint8_t* const v_dst = dec->yuv_b_ + V_OFF;
-
-  // Initialize left-most block.
-  for (j = 0; j < 16; ++j) {
-    y_dst[j * BPS - 1] = 129;
-  }
-  for (j = 0; j < 8; ++j) {
-    u_dst[j * BPS - 1] = 129;
-    v_dst[j * BPS - 1] = 129;
-  }
-
-  // Init top-left sample on left column too.
-  if (mb_y > 0) {
-    y_dst[-1 - BPS] = u_dst[-1 - BPS] = v_dst[-1 - BPS] = 129;
-  } else {
-    // we only need to do this init once at block (0,0).
-    // Afterward, it remains valid for the whole topmost row.
-    memset(y_dst - BPS - 1, 127, 16 + 4 + 1);
-    memset(u_dst - BPS - 1, 127, 8 + 1);
-    memset(v_dst - BPS - 1, 127, 8 + 1);
-  }
-
-  // Reconstruct one row.
-  for (mb_x = 0; mb_x < dec->mb_w_; ++mb_x) {
-    const VP8MBData* const block = ctx->mb_data_ + mb_x;
-
-    // Rotate in the left samples from previously decoded block. We move four
-    // pixels at a time for alignment reason, and because of in-loop filter.
-    if (mb_x > 0) {
-      for (j = -1; j < 16; ++j) {
-        Copy32b(&y_dst[j * BPS - 4], &y_dst[j * BPS + 12]);
-      }
-      for (j = -1; j < 8; ++j) {
-        Copy32b(&u_dst[j * BPS - 4], &u_dst[j * BPS + 4]);
-        Copy32b(&v_dst[j * BPS - 4], &v_dst[j * BPS + 4]);
-      }
-    }
-    {
-      // bring top samples into the cache
-      VP8TopSamples* const top_yuv = dec->yuv_t_ + mb_x;
-      const int16_t* const coeffs = block->coeffs_;
-      uint32_t bits = block->non_zero_y_;
-      int n;
-
-      if (mb_y > 0) {
-        memcpy(y_dst - BPS, top_yuv[0].y, 16);
-        memcpy(u_dst - BPS, top_yuv[0].u, 8);
-        memcpy(v_dst - BPS, top_yuv[0].v, 8);
-      }
-
-      // predict and add residuals
-      if (block->is_i4x4_) {   // 4x4
-        uint32_t* const top_right = (uint32_t*)(y_dst - BPS + 16);
-
-        if (mb_y > 0) {
-          if (mb_x >= dec->mb_w_ - 1) {    // on rightmost border
-            memset(top_right, top_yuv[0].y[15], sizeof(*top_right));
-          } else {
-            memcpy(top_right, top_yuv[1].y, sizeof(*top_right));
-          }
-        }
-        // replicate the top-right pixels below
-        top_right[BPS] = top_right[2 * BPS] = top_right[3 * BPS] = top_right[0];
-
-        // predict and add residuals for all 4x4 blocks in turn.
-        for (n = 0; n < 16; ++n, bits <<= 2) {
-          uint8_t* const dst = y_dst + kScan[n];
-          VP8PredLuma4[block->imodes_[n]](dst);
-          DoTransform(bits, coeffs + n * 16, dst);
-        }
-      } else {    // 16x16
-        const int pred_func = CheckMode(mb_x, mb_y, block->imodes_[0]);
-        VP8PredLuma16[pred_func](y_dst);
-        if (bits != 0) {
-          for (n = 0; n < 16; ++n, bits <<= 2) {
-            DoTransform(bits, coeffs + n * 16, y_dst + kScan[n]);
-          }
-        }
-      }
-      {
-        // Chroma
-        const uint32_t bits_uv = block->non_zero_uv_;
-        const int pred_func = CheckMode(mb_x, mb_y, block->uvmode_);
-        VP8PredChroma8[pred_func](u_dst);
-        VP8PredChroma8[pred_func](v_dst);
-        DoUVTransform(bits_uv >> 0, coeffs + 16 * 16, u_dst);
-        DoUVTransform(bits_uv >> 8, coeffs + 20 * 16, v_dst);
-      }
-
-      // stash away top samples for next block
-      if (mb_y < dec->mb_h_ - 1) {
-        memcpy(top_yuv[0].y, y_dst + 15 * BPS, 16);
-        memcpy(top_yuv[0].u, u_dst +  7 * BPS,  8);
-        memcpy(top_yuv[0].v, v_dst +  7 * BPS,  8);
-      }
-    }
-    // Transfer reconstructed samples from yuv_b_ cache to final destination.
-    {
-      const int y_offset = cache_id * 16 * dec->cache_y_stride_;
-      const int uv_offset = cache_id * 8 * dec->cache_uv_stride_;
-      uint8_t* const y_out = dec->cache_y_ + mb_x * 16 + y_offset;
-      uint8_t* const u_out = dec->cache_u_ + mb_x * 8 + uv_offset;
-      uint8_t* const v_out = dec->cache_v_ + mb_x * 8 + uv_offset;
-      for (j = 0; j < 16; ++j) {
-        memcpy(y_out + j * dec->cache_y_stride_, y_dst + j * BPS, 16);
-      }
-      for (j = 0; j < 8; ++j) {
-        memcpy(u_out + j * dec->cache_uv_stride_, u_dst + j * BPS, 8);
-        memcpy(v_out + j * dec->cache_uv_stride_, v_dst + j * BPS, 8);
-      }
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Filtering
-
-// kFilterExtraRows[] = How many extra lines are needed on the MB boundary
-// for caching, given a filtering level.
-// Simple filter:  up to 2 luma samples are read and 1 is written.
-// Complex filter: up to 4 luma samples are read and 3 are written. Same for
-//                 U/V, so it's 8 samples total (because of the 2x upsampling).
-static const uint8_t kFilterExtraRows[3] = { 0, 2, 8 };
-
-static void DoFilter(const VP8Decoder* const dec, int mb_x, int mb_y) {
-  const VP8ThreadContext* const ctx = &dec->thread_ctx_;
-  const int cache_id = ctx->id_;
-  const int y_bps = dec->cache_y_stride_;
-  const VP8FInfo* const f_info = ctx->f_info_ + mb_x;
-  uint8_t* const y_dst = dec->cache_y_ + cache_id * 16 * y_bps + mb_x * 16;
-  const int ilevel = f_info->f_ilevel_;
-  const int limit = f_info->f_limit_;
-  if (limit == 0) {
-    return;
-  }
-  assert(limit >= 3);
-  if (dec->filter_type_ == 1) {   // simple
-    if (mb_x > 0) {
-      VP8SimpleHFilter16(y_dst, y_bps, limit + 4);
-    }
-    if (f_info->f_inner_) {
-      VP8SimpleHFilter16i(y_dst, y_bps, limit);
-    }
-    if (mb_y > 0) {
-      VP8SimpleVFilter16(y_dst, y_bps, limit + 4);
-    }
-    if (f_info->f_inner_) {
-      VP8SimpleVFilter16i(y_dst, y_bps, limit);
-    }
-  } else {    // complex
-    const int uv_bps = dec->cache_uv_stride_;
-    uint8_t* const u_dst = dec->cache_u_ + cache_id * 8 * uv_bps + mb_x * 8;
-    uint8_t* const v_dst = dec->cache_v_ + cache_id * 8 * uv_bps + mb_x * 8;
-    const int hev_thresh = f_info->hev_thresh_;
-    if (mb_x > 0) {
-      VP8HFilter16(y_dst, y_bps, limit + 4, ilevel, hev_thresh);
-      VP8HFilter8(u_dst, v_dst, uv_bps, limit + 4, ilevel, hev_thresh);
-    }
-    if (f_info->f_inner_) {
-      VP8HFilter16i(y_dst, y_bps, limit, ilevel, hev_thresh);
-      VP8HFilter8i(u_dst, v_dst, uv_bps, limit, ilevel, hev_thresh);
-    }
-    if (mb_y > 0) {
-      VP8VFilter16(y_dst, y_bps, limit + 4, ilevel, hev_thresh);
-      VP8VFilter8(u_dst, v_dst, uv_bps, limit + 4, ilevel, hev_thresh);
-    }
-    if (f_info->f_inner_) {
-      VP8VFilter16i(y_dst, y_bps, limit, ilevel, hev_thresh);
-      VP8VFilter8i(u_dst, v_dst, uv_bps, limit, ilevel, hev_thresh);
-    }
-  }
-}
-
-// Filter the decoded macroblock row (if needed)
-static void FilterRow(const VP8Decoder* const dec) {
-  int mb_x;
-  const int mb_y = dec->thread_ctx_.mb_y_;
-  assert(dec->thread_ctx_.filter_row_);
-  for (mb_x = dec->tl_mb_x_; mb_x < dec->br_mb_x_; ++mb_x) {
-    DoFilter(dec, mb_x, mb_y);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Precompute the filtering strength for each segment and each i4x4/i16x16 mode.
-
-static void PrecomputeFilterStrengths(VP8Decoder* const dec) {
-  if (dec->filter_type_ > 0) {
-    int s;
-    const VP8FilterHeader* const hdr = &dec->filter_hdr_;
-    for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
-      int i4x4;
-      // First, compute the initial level
-      int base_level;
-      if (dec->segment_hdr_.use_segment_) {
-        base_level = dec->segment_hdr_.filter_strength_[s];
-        if (!dec->segment_hdr_.absolute_delta_) {
-          base_level += hdr->level_;
-        }
-      } else {
-        base_level = hdr->level_;
-      }
-      for (i4x4 = 0; i4x4 <= 1; ++i4x4) {
-        VP8FInfo* const info = &dec->fstrengths_[s][i4x4];
-        int level = base_level;
-        if (hdr->use_lf_delta_) {
-          level += hdr->ref_lf_delta_[0];
-          if (i4x4) {
-            level += hdr->mode_lf_delta_[0];
-          }
-        }
-        level = (level < 0) ? 0 : (level > 63) ? 63 : level;
-        if (level > 0) {
-          int ilevel = level;
-          if (hdr->sharpness_ > 0) {
-            if (hdr->sharpness_ > 4) {
-              ilevel >>= 2;
-            } else {
-              ilevel >>= 1;
-            }
-            if (ilevel > 9 - hdr->sharpness_) {
-              ilevel = 9 - hdr->sharpness_;
-            }
-          }
-          if (ilevel < 1) ilevel = 1;
-          info->f_ilevel_ = ilevel;
-          info->f_limit_ = 2 * level + ilevel;
-          info->hev_thresh_ = (level >= 40) ? 2 : (level >= 15) ? 1 : 0;
-        } else {
-          info->f_limit_ = 0;  // no filtering
-        }
-        info->f_inner_ = i4x4;
-      }
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Dithering
-
-// minimal amp that will provide a non-zero dithering effect
-#define MIN_DITHER_AMP 4
-
-#define DITHER_AMP_TAB_SIZE 12
-static const uint8_t kQuantToDitherAmp[DITHER_AMP_TAB_SIZE] = {
-  // roughly, it's dqm->uv_mat_[1]
-  8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1
-};
-
-void VP8InitDithering(const WebPDecoderOptions* const options,
-                      VP8Decoder* const dec) {
-  assert(dec != NULL);
-  if (options != NULL) {
-    const int d = options->dithering_strength;
-    const int max_amp = (1 << VP8_RANDOM_DITHER_FIX) - 1;
-    const int f = (d < 0) ? 0 : (d > 100) ? max_amp : (d * max_amp / 100);
-    if (f > 0) {
-      int s;
-      int all_amp = 0;
-      for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
-        VP8QuantMatrix* const dqm = &dec->dqm_[s];
-        if (dqm->uv_quant_ < DITHER_AMP_TAB_SIZE) {
-          const int idx = (dqm->uv_quant_ < 0) ? 0 : dqm->uv_quant_;
-          dqm->dither_ = (f * kQuantToDitherAmp[idx]) >> 3;
-        }
-        all_amp |= dqm->dither_;
-      }
-      if (all_amp != 0) {
-        VP8InitRandom(&dec->dithering_rg_, 1.0f);
-        dec->dither_ = 1;
-      }
-    }
-    // potentially allow alpha dithering
-    dec->alpha_dithering_ = options->alpha_dithering_strength;
-    if (dec->alpha_dithering_ > 100) {
-      dec->alpha_dithering_ = 100;
-    } else if (dec->alpha_dithering_ < 0) {
-      dec->alpha_dithering_ = 0;
-    }
-  }
-}
-
-// Convert to range: [-2,2] for dither=50, [-4,4] for dither=100
-static void Dither8x8(VP8Random* const rg, uint8_t* dst, int bps, int amp) {
-  uint8_t dither[64];
-  int i;
-  for (i = 0; i < 8 * 8; ++i) {
-    dither[i] = VP8RandomBits2(rg, VP8_DITHER_AMP_BITS + 1, amp);
-  }
-  VP8DitherCombine8x8(dither, dst, bps);
-}
-
-static void DitherRow(VP8Decoder* const dec) {
-  int mb_x;
-  assert(dec->dither_);
-  for (mb_x = dec->tl_mb_x_; mb_x < dec->br_mb_x_; ++mb_x) {
-    const VP8ThreadContext* const ctx = &dec->thread_ctx_;
-    const VP8MBData* const data = ctx->mb_data_ + mb_x;
-    const int cache_id = ctx->id_;
-    const int uv_bps = dec->cache_uv_stride_;
-    if (data->dither_ >= MIN_DITHER_AMP) {
-      uint8_t* const u_dst = dec->cache_u_ + cache_id * 8 * uv_bps + mb_x * 8;
-      uint8_t* const v_dst = dec->cache_v_ + cache_id * 8 * uv_bps + mb_x * 8;
-      Dither8x8(&dec->dithering_rg_, u_dst, uv_bps, data->dither_);
-      Dither8x8(&dec->dithering_rg_, v_dst, uv_bps, data->dither_);
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// This function is called after a row of macroblocks is finished decoding.
-// It also takes into account the following restrictions:
-//  * In case of in-loop filtering, we must hold off sending some of the bottom
-//    pixels as they are yet unfiltered. They will be when the next macroblock
-//    row is decoded. Meanwhile, we must preserve them by rotating them in the
-//    cache area. This doesn't hold for the very bottom row of the uncropped
-//    picture of course.
-//  * we must clip the remaining pixels against the cropping area. The VP8Io
-//    struct must have the following fields set correctly before calling put():
-
-#define MACROBLOCK_VPOS(mb_y)  ((mb_y) * 16)    // vertical position of a MB
-
-// Finalize and transmit a complete row. Return false in case of user-abort.
-static int FinishRow(void* arg1, void* arg2) {
-  VP8Decoder* const dec = (VP8Decoder*)arg1;
-  VP8Io* const io = (VP8Io*)arg2;
-  int ok = 1;
-  const VP8ThreadContext* const ctx = &dec->thread_ctx_;
-  const int cache_id = ctx->id_;
-  const int extra_y_rows = kFilterExtraRows[dec->filter_type_];
-  const int ysize = extra_y_rows * dec->cache_y_stride_;
-  const int uvsize = (extra_y_rows / 2) * dec->cache_uv_stride_;
-  const int y_offset = cache_id * 16 * dec->cache_y_stride_;
-  const int uv_offset = cache_id * 8 * dec->cache_uv_stride_;
-  uint8_t* const ydst = dec->cache_y_ - ysize + y_offset;
-  uint8_t* const udst = dec->cache_u_ - uvsize + uv_offset;
-  uint8_t* const vdst = dec->cache_v_ - uvsize + uv_offset;
-  const int mb_y = ctx->mb_y_;
-  const int is_first_row = (mb_y == 0);
-  const int is_last_row = (mb_y >= dec->br_mb_y_ - 1);
-
-  if (dec->mt_method_ == 2) {
-    ReconstructRow(dec, ctx);
-  }
-
-  if (ctx->filter_row_) {
-    FilterRow(dec);
-  }
-
-  if (dec->dither_) {
-    DitherRow(dec);
-  }
-
-  if (io->put != NULL) {
-    int y_start = MACROBLOCK_VPOS(mb_y);
-    int y_end = MACROBLOCK_VPOS(mb_y + 1);
-    if (!is_first_row) {
-      y_start -= extra_y_rows;
-      io->y = ydst;
-      io->u = udst;
-      io->v = vdst;
-    } else {
-      io->y = dec->cache_y_ + y_offset;
-      io->u = dec->cache_u_ + uv_offset;
-      io->v = dec->cache_v_ + uv_offset;
-    }
-
-    if (!is_last_row) {
-      y_end -= extra_y_rows;
-    }
-    if (y_end > io->crop_bottom) {
-      y_end = io->crop_bottom;    // make sure we don't overflow on last row.
-    }
-    // If dec->alpha_data_ is not NULL, we have some alpha plane present.
-    io->a = NULL;
-    if (dec->alpha_data_ != NULL && y_start < y_end) {
-      io->a = VP8DecompressAlphaRows(dec, io, y_start, y_end - y_start);
-      if (io->a == NULL) {
-        return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR,
-                           "Could not decode alpha data.");
-      }
-    }
-    if (y_start < io->crop_top) {
-      const int delta_y = io->crop_top - y_start;
-      y_start = io->crop_top;
-      assert(!(delta_y & 1));
-      io->y += dec->cache_y_stride_ * delta_y;
-      io->u += dec->cache_uv_stride_ * (delta_y >> 1);
-      io->v += dec->cache_uv_stride_ * (delta_y >> 1);
-      if (io->a != NULL) {
-        io->a += io->width * delta_y;
-      }
-    }
-    if (y_start < y_end) {
-      io->y += io->crop_left;
-      io->u += io->crop_left >> 1;
-      io->v += io->crop_left >> 1;
-      if (io->a != NULL) {
-        io->a += io->crop_left;
-      }
-      io->mb_y = y_start - io->crop_top;
-      io->mb_w = io->crop_right - io->crop_left;
-      io->mb_h = y_end - y_start;
-      ok = io->put(io);
-    }
-  }
-  // rotate top samples if needed
-  if (cache_id + 1 == dec->num_caches_) {
-    if (!is_last_row) {
-      memcpy(dec->cache_y_ - ysize, ydst + 16 * dec->cache_y_stride_, ysize);
-      memcpy(dec->cache_u_ - uvsize, udst + 8 * dec->cache_uv_stride_, uvsize);
-      memcpy(dec->cache_v_ - uvsize, vdst + 8 * dec->cache_uv_stride_, uvsize);
-    }
-  }
-
-  return ok;
-}
-
-#undef MACROBLOCK_VPOS
-
-//------------------------------------------------------------------------------
-
-int VP8ProcessRow(VP8Decoder* const dec, VP8Io* const io) {
-  int ok = 1;
-  VP8ThreadContext* const ctx = &dec->thread_ctx_;
-  const int filter_row =
-      (dec->filter_type_ > 0) &&
-      (dec->mb_y_ >= dec->tl_mb_y_) && (dec->mb_y_ <= dec->br_mb_y_);
-  if (dec->mt_method_ == 0) {
-    // ctx->id_ and ctx->f_info_ are already set
-    ctx->mb_y_ = dec->mb_y_;
-    ctx->filter_row_ = filter_row;
-    ReconstructRow(dec, ctx);
-    ok = FinishRow(dec, io);
-  } else {
-    WebPWorker* const worker = &dec->worker_;
-    // Finish previous job *before* updating context
-    ok &= WebPGetWorkerInterface()->Sync(worker);
-    assert(worker->status_ == OK);
-    if (ok) {   // spawn a new deblocking/output job
-      ctx->io_ = *io;
-      ctx->id_ = dec->cache_id_;
-      ctx->mb_y_ = dec->mb_y_;
-      ctx->filter_row_ = filter_row;
-      if (dec->mt_method_ == 2) {  // swap macroblock data
-        VP8MBData* const tmp = ctx->mb_data_;
-        ctx->mb_data_ = dec->mb_data_;
-        dec->mb_data_ = tmp;
-      } else {
-        // perform reconstruction directly in main thread
-        ReconstructRow(dec, ctx);
-      }
-      if (filter_row) {            // swap filter info
-        VP8FInfo* const tmp = ctx->f_info_;
-        ctx->f_info_ = dec->f_info_;
-        dec->f_info_ = tmp;
-      }
-      // (reconstruct)+filter in parallel
-      WebPGetWorkerInterface()->Launch(worker);
-      if (++dec->cache_id_ == dec->num_caches_) {
-        dec->cache_id_ = 0;
-      }
-    }
-  }
-  return ok;
-}
-
-//------------------------------------------------------------------------------
-// Finish setting up the decoding parameter once user's setup() is called.
-
-VP8StatusCode VP8EnterCritical(VP8Decoder* const dec, VP8Io* const io) {
-  // Call setup() first. This may trigger additional decoding features on 'io'.
-  // Note: Afterward, we must call teardown() no matter what.
-  if (io->setup != NULL && !io->setup(io)) {
-    VP8SetError(dec, VP8_STATUS_USER_ABORT, "Frame setup failed");
-    return dec->status_;
-  }
-
-  // Disable filtering per user request
-  if (io->bypass_filtering) {
-    dec->filter_type_ = 0;
-  }
-
-  // Define the area where we can skip in-loop filtering, in case of cropping.
-  //
-  // 'Simple' filter reads two luma samples outside of the macroblock
-  // and filters one. It doesn't filter the chroma samples. Hence, we can
-  // avoid doing the in-loop filtering before crop_top/crop_left position.
-  // For the 'Complex' filter, 3 samples are read and up to 3 are filtered.
-  // Means: there's a dependency chain that goes all the way up to the
-  // top-left corner of the picture (MB #0). We must filter all the previous
-  // macroblocks.
-  {
-    const int extra_pixels = kFilterExtraRows[dec->filter_type_];
-    if (dec->filter_type_ == 2) {
-      // For complex filter, we need to preserve the dependency chain.
-      dec->tl_mb_x_ = 0;
-      dec->tl_mb_y_ = 0;
-    } else {
-      // For simple filter, we can filter only the cropped region.
-      // We include 'extra_pixels' on the other side of the boundary, since
-      // vertical or horizontal filtering of the previous macroblock can
-      // modify some abutting pixels.
-      dec->tl_mb_x_ = (io->crop_left - extra_pixels) >> 4;
-      dec->tl_mb_y_ = (io->crop_top - extra_pixels) >> 4;
-      if (dec->tl_mb_x_ < 0) dec->tl_mb_x_ = 0;
-      if (dec->tl_mb_y_ < 0) dec->tl_mb_y_ = 0;
-    }
-    // We need some 'extra' pixels on the right/bottom.
-    dec->br_mb_y_ = (io->crop_bottom + 15 + extra_pixels) >> 4;
-    dec->br_mb_x_ = (io->crop_right + 15 + extra_pixels) >> 4;
-    if (dec->br_mb_x_ > dec->mb_w_) {
-      dec->br_mb_x_ = dec->mb_w_;
-    }
-    if (dec->br_mb_y_ > dec->mb_h_) {
-      dec->br_mb_y_ = dec->mb_h_;
-    }
-  }
-  PrecomputeFilterStrengths(dec);
-  return VP8_STATUS_OK;
-}
-
-int VP8ExitCritical(VP8Decoder* const dec, VP8Io* const io) {
-  int ok = 1;
-  if (dec->mt_method_ > 0) {
-    ok = WebPGetWorkerInterface()->Sync(&dec->worker_);
-  }
-
-  if (io->teardown != NULL) {
-    io->teardown(io);
-  }
-  return ok;
-}
-
-//------------------------------------------------------------------------------
-// For multi-threaded decoding we need to use 3 rows of 16 pixels as delay line.
-//
-// Reason is: the deblocking filter cannot deblock the bottom horizontal edges
-// immediately, and needs to wait for first few rows of the next macroblock to
-// be decoded. Hence, deblocking is lagging behind by 4 or 8 pixels (depending
-// on strength).
-// With two threads, the vertical positions of the rows being decoded are:
-// Decode:  [ 0..15][16..31][32..47][48..63][64..79][...
-// Deblock:         [ 0..11][12..27][28..43][44..59][...
-// If we use two threads and two caches of 16 pixels, the sequence would be:
-// Decode:  [ 0..15][16..31][ 0..15!!][16..31][ 0..15][...
-// Deblock:         [ 0..11][12..27!!][-4..11][12..27][...
-// The problem occurs during row [12..15!!] that both the decoding and
-// deblocking threads are writing simultaneously.
-// With 3 cache lines, one get a safe write pattern:
-// Decode:  [ 0..15][16..31][32..47][ 0..15][16..31][32..47][0..
-// Deblock:         [ 0..11][12..27][28..43][-4..11][12..27][28...
-// Note that multi-threaded output _without_ deblocking can make use of two
-// cache lines of 16 pixels only, since there's no lagging behind. The decoding
-// and output process have non-concurrent writing:
-// Decode:  [ 0..15][16..31][ 0..15][16..31][...
-// io->put:         [ 0..15][16..31][ 0..15][...
-
-#define MT_CACHE_LINES 3
-#define ST_CACHE_LINES 1   // 1 cache row only for single-threaded case
-
-// Initialize multi/single-thread worker
-static int InitThreadContext(VP8Decoder* const dec) {
-  dec->cache_id_ = 0;
-  if (dec->mt_method_ > 0) {
-    WebPWorker* const worker = &dec->worker_;
-    if (!WebPGetWorkerInterface()->Reset(worker)) {
-      return VP8SetError(dec, VP8_STATUS_OUT_OF_MEMORY,
-                         "thread initialization failed.");
-    }
-    worker->data1 = dec;
-    worker->data2 = (void*)&dec->thread_ctx_.io_;
-    worker->hook = FinishRow;
-    dec->num_caches_ =
-      (dec->filter_type_ > 0) ? MT_CACHE_LINES : MT_CACHE_LINES - 1;
-  } else {
-    dec->num_caches_ = ST_CACHE_LINES;
-  }
-  return 1;
-}
-
-int VP8GetThreadMethod(const WebPDecoderOptions* const options,
-                       const WebPHeaderStructure* const headers,
-                       int width, int height) {
-  if (options == NULL || options->use_threads == 0) {
-    return 0;
-  }
-  (void)headers;
-  (void)width;
-  (void)height;
-  assert(headers == NULL || !headers->is_lossless);
-#if defined(WEBP_USE_THREAD)
-  if (width >= MIN_WIDTH_FOR_THREADS) return 2;
-#endif
-  return 0;
-}
-
-#undef MT_CACHE_LINES
-#undef ST_CACHE_LINES
-
-//------------------------------------------------------------------------------
-// Memory setup
-
-static int AllocateMemory(VP8Decoder* const dec) {
-  const int num_caches = dec->num_caches_;
-  const int mb_w = dec->mb_w_;
-  // Note: we use 'size_t' when there's no overflow risk, uint64_t otherwise.
-  const size_t intra_pred_mode_size = 4 * mb_w * sizeof(uint8_t);
-  const size_t top_size = sizeof(VP8TopSamples) * mb_w;
-  const size_t mb_info_size = (mb_w + 1) * sizeof(VP8MB);
-  const size_t f_info_size =
-      (dec->filter_type_ > 0) ?
-          mb_w * (dec->mt_method_ > 0 ? 2 : 1) * sizeof(VP8FInfo)
-        : 0;
-  const size_t yuv_size = YUV_SIZE * sizeof(*dec->yuv_b_);
-  const size_t mb_data_size =
-      (dec->mt_method_ == 2 ? 2 : 1) * mb_w * sizeof(*dec->mb_data_);
-  const size_t cache_height = (16 * num_caches
-                            + kFilterExtraRows[dec->filter_type_]) * 3 / 2;
-  const size_t cache_size = top_size * cache_height;
-  // alpha_size is the only one that scales as width x height.
-  const uint64_t alpha_size = (dec->alpha_data_ != NULL) ?
-      (uint64_t)dec->pic_hdr_.width_ * dec->pic_hdr_.height_ : 0ULL;
-  const uint64_t needed = (uint64_t)intra_pred_mode_size
-                        + top_size + mb_info_size + f_info_size
-                        + yuv_size + mb_data_size
-                        + cache_size + alpha_size + WEBP_ALIGN_CST;
-  uint8_t* mem;
-
-  if (needed != (size_t)needed) return 0;  // check for overflow
-  if (needed > dec->mem_size_) {
-    WebPSafeFree(dec->mem_);
-    dec->mem_size_ = 0;
-    dec->mem_ = WebPSafeMalloc(needed, sizeof(uint8_t));
-    if (dec->mem_ == NULL) {
-      return VP8SetError(dec, VP8_STATUS_OUT_OF_MEMORY,
-                         "no memory during frame initialization.");
-    }
-    // down-cast is ok, thanks to WebPSafeMalloc() above.
-    dec->mem_size_ = (size_t)needed;
-  }
-
-  mem = (uint8_t*)dec->mem_;
-  dec->intra_t_ = mem;
-  mem += intra_pred_mode_size;
-
-  dec->yuv_t_ = (VP8TopSamples*)mem;
-  mem += top_size;
-
-  dec->mb_info_ = ((VP8MB*)mem) + 1;
-  mem += mb_info_size;
-
-  dec->f_info_ = f_info_size ? (VP8FInfo*)mem : NULL;
-  mem += f_info_size;
-  dec->thread_ctx_.id_ = 0;
-  dec->thread_ctx_.f_info_ = dec->f_info_;
-  if (dec->mt_method_ > 0) {
-    // secondary cache line. The deblocking process need to make use of the
-    // filtering strength from previous macroblock row, while the new ones
-    // are being decoded in parallel. We'll just swap the pointers.
-    dec->thread_ctx_.f_info_ += mb_w;
-  }
-
-  mem = (uint8_t*)WEBP_ALIGN(mem);
-  assert((yuv_size & WEBP_ALIGN_CST) == 0);
-  dec->yuv_b_ = mem;
-  mem += yuv_size;
-
-  dec->mb_data_ = (VP8MBData*)mem;
-  dec->thread_ctx_.mb_data_ = (VP8MBData*)mem;
-  if (dec->mt_method_ == 2) {
-    dec->thread_ctx_.mb_data_ += mb_w;
-  }
-  mem += mb_data_size;
-
-  dec->cache_y_stride_ = 16 * mb_w;
-  dec->cache_uv_stride_ = 8 * mb_w;
-  {
-    const int extra_rows = kFilterExtraRows[dec->filter_type_];
-    const int extra_y = extra_rows * dec->cache_y_stride_;
-    const int extra_uv = (extra_rows / 2) * dec->cache_uv_stride_;
-    dec->cache_y_ = mem + extra_y;
-    dec->cache_u_ = dec->cache_y_
-                  + 16 * num_caches * dec->cache_y_stride_ + extra_uv;
-    dec->cache_v_ = dec->cache_u_
-                  + 8 * num_caches * dec->cache_uv_stride_ + extra_uv;
-    dec->cache_id_ = 0;
-  }
-  mem += cache_size;
-
-  // alpha plane
-  dec->alpha_plane_ = alpha_size ? mem : NULL;
-  mem += alpha_size;
-  assert(mem <= (uint8_t*)dec->mem_ + dec->mem_size_);
-
-  // note: left/top-info is initialized once for all.
-  memset(dec->mb_info_ - 1, 0, mb_info_size);
-  VP8InitScanline(dec);   // initialize left too.
-
-  // initialize top
-  memset(dec->intra_t_, B_DC_PRED, intra_pred_mode_size);
-
-  return 1;
-}
-
-static void InitIo(VP8Decoder* const dec, VP8Io* io) {
-  // prepare 'io'
-  io->mb_y = 0;
-  io->y = dec->cache_y_;
-  io->u = dec->cache_u_;
-  io->v = dec->cache_v_;
-  io->y_stride = dec->cache_y_stride_;
-  io->uv_stride = dec->cache_uv_stride_;
-  io->a = NULL;
-}
-
-int VP8InitFrame(VP8Decoder* const dec, VP8Io* const io) {
-  if (!InitThreadContext(dec)) return 0;  // call first. Sets dec->num_caches_.
-  if (!AllocateMemory(dec)) return 0;
-  InitIo(dec, io);
-  VP8DspInit();  // Init critical function pointers and look-up tables.
-  return 1;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dec/idec_dec.c b/ios/Pods/libwebp/src/dec/idec_dec.c
deleted file mode 100644
index 9bc9166..0000000
--- a/ios/Pods/libwebp/src/dec/idec_dec.c
+++ /dev/null
@@ -1,903 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Incremental decoding
-//
-// Author: somnath@google.com (Somnath Banerjee)
-
-#include <assert.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "src/dec/alphai_dec.h"
-#include "src/dec/webpi_dec.h"
-#include "src/dec/vp8i_dec.h"
-#include "src/utils/utils.h"
-
-// In append mode, buffer allocations increase as multiples of this value.
-// Needs to be a power of 2.
-#define CHUNK_SIZE 4096
-#define MAX_MB_SIZE 4096
-
-//------------------------------------------------------------------------------
-// Data structures for memory and states
-
-// Decoding states. State normally flows as:
-// WEBP_HEADER->VP8_HEADER->VP8_PARTS0->VP8_DATA->DONE for a lossy image, and
-// WEBP_HEADER->VP8L_HEADER->VP8L_DATA->DONE for a lossless image.
-// If there is any error the decoder goes into state ERROR.
-typedef enum {
-  STATE_WEBP_HEADER,  // All the data before that of the VP8/VP8L chunk.
-  STATE_VP8_HEADER,   // The VP8 Frame header (within the VP8 chunk).
-  STATE_VP8_PARTS0,
-  STATE_VP8_DATA,
-  STATE_VP8L_HEADER,
-  STATE_VP8L_DATA,
-  STATE_DONE,
-  STATE_ERROR
-} DecState;
-
-// Operating state for the MemBuffer
-typedef enum {
-  MEM_MODE_NONE = 0,
-  MEM_MODE_APPEND,
-  MEM_MODE_MAP
-} MemBufferMode;
-
-// storage for partition #0 and partial data (in a rolling fashion)
-typedef struct {
-  MemBufferMode mode_;  // Operation mode
-  size_t start_;        // start location of the data to be decoded
-  size_t end_;          // end location
-  size_t buf_size_;     // size of the allocated buffer
-  uint8_t* buf_;        // We don't own this buffer in case WebPIUpdate()
-
-  size_t part0_size_;         // size of partition #0
-  const uint8_t* part0_buf_;  // buffer to store partition #0
-} MemBuffer;
-
-struct WebPIDecoder {
-  DecState state_;         // current decoding state
-  WebPDecParams params_;   // Params to store output info
-  int is_lossless_;        // for down-casting 'dec_'.
-  void* dec_;              // either a VP8Decoder or a VP8LDecoder instance
-  VP8Io io_;
-
-  MemBuffer mem_;          // input memory buffer.
-  WebPDecBuffer output_;   // output buffer (when no external one is supplied,
-                           // or if the external one has slow-memory)
-  WebPDecBuffer* final_output_;  // Slow-memory output to copy to eventually.
-  size_t chunk_size_;      // Compressed VP8/VP8L size extracted from Header.
-
-  int last_mb_y_;          // last row reached for intra-mode decoding
-};
-
-// MB context to restore in case VP8DecodeMB() fails
-typedef struct {
-  VP8MB left_;
-  VP8MB info_;
-  VP8BitReader token_br_;
-} MBContext;
-
-//------------------------------------------------------------------------------
-// MemBuffer: incoming data handling
-
-static WEBP_INLINE size_t MemDataSize(const MemBuffer* mem) {
-  return (mem->end_ - mem->start_);
-}
-
-// Check if we need to preserve the compressed alpha data, as it may not have
-// been decoded yet.
-static int NeedCompressedAlpha(const WebPIDecoder* const idec) {
-  if (idec->state_ == STATE_WEBP_HEADER) {
-    // We haven't parsed the headers yet, so we don't know whether the image is
-    // lossy or lossless. This also means that we haven't parsed the ALPH chunk.
-    return 0;
-  }
-  if (idec->is_lossless_) {
-    return 0;  // ALPH chunk is not present for lossless images.
-  } else {
-    const VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
-    assert(dec != NULL);  // Must be true as idec->state_ != STATE_WEBP_HEADER.
-    return (dec->alpha_data_ != NULL) && !dec->is_alpha_decoded_;
-  }
-}
-
-static void DoRemap(WebPIDecoder* const idec, ptrdiff_t offset) {
-  MemBuffer* const mem = &idec->mem_;
-  const uint8_t* const new_base = mem->buf_ + mem->start_;
-  // note: for VP8, setting up idec->io_ is only really needed at the beginning
-  // of the decoding, till partition #0 is complete.
-  idec->io_.data = new_base;
-  idec->io_.data_size = MemDataSize(mem);
-
-  if (idec->dec_ != NULL) {
-    if (!idec->is_lossless_) {
-      VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
-      const uint32_t last_part = dec->num_parts_minus_one_;
-      if (offset != 0) {
-        uint32_t p;
-        for (p = 0; p <= last_part; ++p) {
-          VP8RemapBitReader(dec->parts_ + p, offset);
-        }
-        // Remap partition #0 data pointer to new offset, but only in MAP
-        // mode (in APPEND mode, partition #0 is copied into a fixed memory).
-        if (mem->mode_ == MEM_MODE_MAP) {
-          VP8RemapBitReader(&dec->br_, offset);
-        }
-      }
-      {
-        const uint8_t* const last_start = dec->parts_[last_part].buf_;
-        VP8BitReaderSetBuffer(&dec->parts_[last_part], last_start,
-                              mem->buf_ + mem->end_ - last_start);
-      }
-      if (NeedCompressedAlpha(idec)) {
-        ALPHDecoder* const alph_dec = dec->alph_dec_;
-        dec->alpha_data_ += offset;
-        if (alph_dec != NULL && alph_dec->vp8l_dec_ != NULL) {
-          if (alph_dec->method_ == ALPHA_LOSSLESS_COMPRESSION) {
-            VP8LDecoder* const alph_vp8l_dec = alph_dec->vp8l_dec_;
-            assert(dec->alpha_data_size_ >= ALPHA_HEADER_LEN);
-            VP8LBitReaderSetBuffer(&alph_vp8l_dec->br_,
-                                   dec->alpha_data_ + ALPHA_HEADER_LEN,
-                                   dec->alpha_data_size_ - ALPHA_HEADER_LEN);
-          } else {  // alph_dec->method_ == ALPHA_NO_COMPRESSION
-            // Nothing special to do in this case.
-          }
-        }
-      }
-    } else {    // Resize lossless bitreader
-      VP8LDecoder* const dec = (VP8LDecoder*)idec->dec_;
-      VP8LBitReaderSetBuffer(&dec->br_, new_base, MemDataSize(mem));
-    }
-  }
-}
-
-// Appends data to the end of MemBuffer->buf_. It expands the allocated memory
-// size if required and also updates VP8BitReader's if new memory is allocated.
-static int AppendToMemBuffer(WebPIDecoder* const idec,
-                             const uint8_t* const data, size_t data_size) {
-  VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
-  MemBuffer* const mem = &idec->mem_;
-  const int need_compressed_alpha = NeedCompressedAlpha(idec);
-  const uint8_t* const old_start = mem->buf_ + mem->start_;
-  const uint8_t* const old_base =
-      need_compressed_alpha ? dec->alpha_data_ : old_start;
-  assert(mem->mode_ == MEM_MODE_APPEND);
-  if (data_size > MAX_CHUNK_PAYLOAD) {
-    // security safeguard: trying to allocate more than what the format
-    // allows for a chunk should be considered a smoke smell.
-    return 0;
-  }
-
-  if (mem->end_ + data_size > mem->buf_size_) {  // Need some free memory
-    const size_t new_mem_start = old_start - old_base;
-    const size_t current_size = MemDataSize(mem) + new_mem_start;
-    const uint64_t new_size = (uint64_t)current_size + data_size;
-    const uint64_t extra_size = (new_size + CHUNK_SIZE - 1) & ~(CHUNK_SIZE - 1);
-    uint8_t* const new_buf =
-        (uint8_t*)WebPSafeMalloc(extra_size, sizeof(*new_buf));
-    if (new_buf == NULL) return 0;
-    memcpy(new_buf, old_base, current_size);
-    WebPSafeFree(mem->buf_);
-    mem->buf_ = new_buf;
-    mem->buf_size_ = (size_t)extra_size;
-    mem->start_ = new_mem_start;
-    mem->end_ = current_size;
-  }
-
-  memcpy(mem->buf_ + mem->end_, data, data_size);
-  mem->end_ += data_size;
-  assert(mem->end_ <= mem->buf_size_);
-
-  DoRemap(idec, mem->buf_ + mem->start_ - old_start);
-  return 1;
-}
-
-static int RemapMemBuffer(WebPIDecoder* const idec,
-                          const uint8_t* const data, size_t data_size) {
-  MemBuffer* const mem = &idec->mem_;
-  const uint8_t* const old_buf = mem->buf_;
-  const uint8_t* const old_start = old_buf + mem->start_;
-  assert(mem->mode_ == MEM_MODE_MAP);
-
-  if (data_size < mem->buf_size_) return 0;  // can't remap to a shorter buffer!
-
-  mem->buf_ = (uint8_t*)data;
-  mem->end_ = mem->buf_size_ = data_size;
-
-  DoRemap(idec, mem->buf_ + mem->start_ - old_start);
-  return 1;
-}
-
-static void InitMemBuffer(MemBuffer* const mem) {
-  mem->mode_       = MEM_MODE_NONE;
-  mem->buf_        = NULL;
-  mem->buf_size_   = 0;
-  mem->part0_buf_  = NULL;
-  mem->part0_size_ = 0;
-}
-
-static void ClearMemBuffer(MemBuffer* const mem) {
-  assert(mem);
-  if (mem->mode_ == MEM_MODE_APPEND) {
-    WebPSafeFree(mem->buf_);
-    WebPSafeFree((void*)mem->part0_buf_);
-  }
-}
-
-static int CheckMemBufferMode(MemBuffer* const mem, MemBufferMode expected) {
-  if (mem->mode_ == MEM_MODE_NONE) {
-    mem->mode_ = expected;    // switch to the expected mode
-  } else if (mem->mode_ != expected) {
-    return 0;         // we mixed the modes => error
-  }
-  assert(mem->mode_ == expected);   // mode is ok
-  return 1;
-}
-
-// To be called last.
-static VP8StatusCode FinishDecoding(WebPIDecoder* const idec) {
-  const WebPDecoderOptions* const options = idec->params_.options;
-  WebPDecBuffer* const output = idec->params_.output;
-
-  idec->state_ = STATE_DONE;
-  if (options != NULL && options->flip) {
-    const VP8StatusCode status = WebPFlipBuffer(output);
-    if (status != VP8_STATUS_OK) return status;
-  }
-  if (idec->final_output_ != NULL) {
-    WebPCopyDecBufferPixels(output, idec->final_output_);  // do the slow-copy
-    WebPFreeDecBuffer(&idec->output_);
-    *output = *idec->final_output_;
-    idec->final_output_ = NULL;
-  }
-  return VP8_STATUS_OK;
-}
-
-//------------------------------------------------------------------------------
-// Macroblock-decoding contexts
-
-static void SaveContext(const VP8Decoder* dec, const VP8BitReader* token_br,
-                        MBContext* const context) {
-  context->left_ = dec->mb_info_[-1];
-  context->info_ = dec->mb_info_[dec->mb_x_];
-  context->token_br_ = *token_br;
-}
-
-static void RestoreContext(const MBContext* context, VP8Decoder* const dec,
-                           VP8BitReader* const token_br) {
-  dec->mb_info_[-1] = context->left_;
-  dec->mb_info_[dec->mb_x_] = context->info_;
-  *token_br = context->token_br_;
-}
-
-//------------------------------------------------------------------------------
-
-static VP8StatusCode IDecError(WebPIDecoder* const idec, VP8StatusCode error) {
-  if (idec->state_ == STATE_VP8_DATA) {
-    // Synchronize the thread, clean-up and check for errors.
-    VP8ExitCritical((VP8Decoder*)idec->dec_, &idec->io_);
-  }
-  idec->state_ = STATE_ERROR;
-  return error;
-}
-
-static void ChangeState(WebPIDecoder* const idec, DecState new_state,
-                        size_t consumed_bytes) {
-  MemBuffer* const mem = &idec->mem_;
-  idec->state_ = new_state;
-  mem->start_ += consumed_bytes;
-  assert(mem->start_ <= mem->end_);
-  idec->io_.data = mem->buf_ + mem->start_;
-  idec->io_.data_size = MemDataSize(mem);
-}
-
-// Headers
-static VP8StatusCode DecodeWebPHeaders(WebPIDecoder* const idec) {
-  MemBuffer* const mem = &idec->mem_;
-  const uint8_t* data = mem->buf_ + mem->start_;
-  size_t curr_size = MemDataSize(mem);
-  VP8StatusCode status;
-  WebPHeaderStructure headers;
-
-  headers.data = data;
-  headers.data_size = curr_size;
-  headers.have_all_data = 0;
-  status = WebPParseHeaders(&headers);
-  if (status == VP8_STATUS_NOT_ENOUGH_DATA) {
-    return VP8_STATUS_SUSPENDED;  // We haven't found a VP8 chunk yet.
-  } else if (status != VP8_STATUS_OK) {
-    return IDecError(idec, status);
-  }
-
-  idec->chunk_size_ = headers.compressed_size;
-  idec->is_lossless_ = headers.is_lossless;
-  if (!idec->is_lossless_) {
-    VP8Decoder* const dec = VP8New();
-    if (dec == NULL) {
-      return VP8_STATUS_OUT_OF_MEMORY;
-    }
-    idec->dec_ = dec;
-    dec->alpha_data_ = headers.alpha_data;
-    dec->alpha_data_size_ = headers.alpha_data_size;
-    ChangeState(idec, STATE_VP8_HEADER, headers.offset);
-  } else {
-    VP8LDecoder* const dec = VP8LNew();
-    if (dec == NULL) {
-      return VP8_STATUS_OUT_OF_MEMORY;
-    }
-    idec->dec_ = dec;
-    ChangeState(idec, STATE_VP8L_HEADER, headers.offset);
-  }
-  return VP8_STATUS_OK;
-}
-
-static VP8StatusCode DecodeVP8FrameHeader(WebPIDecoder* const idec) {
-  const uint8_t* data = idec->mem_.buf_ + idec->mem_.start_;
-  const size_t curr_size = MemDataSize(&idec->mem_);
-  int width, height;
-  uint32_t bits;
-
-  if (curr_size < VP8_FRAME_HEADER_SIZE) {
-    // Not enough data bytes to extract VP8 Frame Header.
-    return VP8_STATUS_SUSPENDED;
-  }
-  if (!VP8GetInfo(data, curr_size, idec->chunk_size_, &width, &height)) {
-    return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR);
-  }
-
-  bits = data[0] | (data[1] << 8) | (data[2] << 16);
-  idec->mem_.part0_size_ = (bits >> 5) + VP8_FRAME_HEADER_SIZE;
-
-  idec->io_.data = data;
-  idec->io_.data_size = curr_size;
-  idec->state_ = STATE_VP8_PARTS0;
-  return VP8_STATUS_OK;
-}
-
-// Partition #0
-static VP8StatusCode CopyParts0Data(WebPIDecoder* const idec) {
-  VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
-  VP8BitReader* const br = &dec->br_;
-  const size_t part_size = br->buf_end_ - br->buf_;
-  MemBuffer* const mem = &idec->mem_;
-  assert(!idec->is_lossless_);
-  assert(mem->part0_buf_ == NULL);
-  // the following is a format limitation, no need for runtime check:
-  assert(part_size <= mem->part0_size_);
-  if (part_size == 0) {   // can't have zero-size partition #0
-    return VP8_STATUS_BITSTREAM_ERROR;
-  }
-  if (mem->mode_ == MEM_MODE_APPEND) {
-    // We copy and grab ownership of the partition #0 data.
-    uint8_t* const part0_buf = (uint8_t*)WebPSafeMalloc(1ULL, part_size);
-    if (part0_buf == NULL) {
-      return VP8_STATUS_OUT_OF_MEMORY;
-    }
-    memcpy(part0_buf, br->buf_, part_size);
-    mem->part0_buf_ = part0_buf;
-    VP8BitReaderSetBuffer(br, part0_buf, part_size);
-  } else {
-    // Else: just keep pointers to the partition #0's data in dec_->br_.
-  }
-  mem->start_ += part_size;
-  return VP8_STATUS_OK;
-}
-
-static VP8StatusCode DecodePartition0(WebPIDecoder* const idec) {
-  VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
-  VP8Io* const io = &idec->io_;
-  const WebPDecParams* const params = &idec->params_;
-  WebPDecBuffer* const output = params->output;
-
-  // Wait till we have enough data for the whole partition #0
-  if (MemDataSize(&idec->mem_) < idec->mem_.part0_size_) {
-    return VP8_STATUS_SUSPENDED;
-  }
-
-  if (!VP8GetHeaders(dec, io)) {
-    const VP8StatusCode status = dec->status_;
-    if (status == VP8_STATUS_SUSPENDED ||
-        status == VP8_STATUS_NOT_ENOUGH_DATA) {
-      // treating NOT_ENOUGH_DATA as SUSPENDED state
-      return VP8_STATUS_SUSPENDED;
-    }
-    return IDecError(idec, status);
-  }
-
-  // Allocate/Verify output buffer now
-  dec->status_ = WebPAllocateDecBuffer(io->width, io->height, params->options,
-                                       output);
-  if (dec->status_ != VP8_STATUS_OK) {
-    return IDecError(idec, dec->status_);
-  }
-  // This change must be done before calling VP8InitFrame()
-  dec->mt_method_ = VP8GetThreadMethod(params->options, NULL,
-                                       io->width, io->height);
-  VP8InitDithering(params->options, dec);
-
-  dec->status_ = CopyParts0Data(idec);
-  if (dec->status_ != VP8_STATUS_OK) {
-    return IDecError(idec, dec->status_);
-  }
-
-  // Finish setting up the decoding parameters. Will call io->setup().
-  if (VP8EnterCritical(dec, io) != VP8_STATUS_OK) {
-    return IDecError(idec, dec->status_);
-  }
-
-  // Note: past this point, teardown() must always be called
-  // in case of error.
-  idec->state_ = STATE_VP8_DATA;
-  // Allocate memory and prepare everything.
-  if (!VP8InitFrame(dec, io)) {
-    return IDecError(idec, dec->status_);
-  }
-  return VP8_STATUS_OK;
-}
-
-// Remaining partitions
-static VP8StatusCode DecodeRemaining(WebPIDecoder* const idec) {
-  VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
-  VP8Io* const io = &idec->io_;
-
-  // Make sure partition #0 has been read before, to set dec to ready_.
-  if (!dec->ready_) {
-    return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR);
-  }
-  for (; dec->mb_y_ < dec->mb_h_; ++dec->mb_y_) {
-    if (idec->last_mb_y_ != dec->mb_y_) {
-      if (!VP8ParseIntraModeRow(&dec->br_, dec)) {
-        // note: normally, error shouldn't occur since we already have the whole
-        // partition0 available here in DecodeRemaining(). Reaching EOF while
-        // reading intra modes really means a BITSTREAM_ERROR.
-        return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR);
-      }
-      idec->last_mb_y_ = dec->mb_y_;
-    }
-    for (; dec->mb_x_ < dec->mb_w_; ++dec->mb_x_) {
-      VP8BitReader* const token_br =
-          &dec->parts_[dec->mb_y_ & dec->num_parts_minus_one_];
-      MBContext context;
-      SaveContext(dec, token_br, &context);
-      if (!VP8DecodeMB(dec, token_br)) {
-        // We shouldn't fail when MAX_MB data was available
-        if (dec->num_parts_minus_one_ == 0 &&
-            MemDataSize(&idec->mem_) > MAX_MB_SIZE) {
-          return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR);
-        }
-        // Synchronize the threads.
-        if (dec->mt_method_ > 0) {
-          if (!WebPGetWorkerInterface()->Sync(&dec->worker_)) {
-            return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR);
-          }
-        }
-        RestoreContext(&context, dec, token_br);
-        return VP8_STATUS_SUSPENDED;
-      }
-      // Release buffer only if there is only one partition
-      if (dec->num_parts_minus_one_ == 0) {
-        idec->mem_.start_ = token_br->buf_ - idec->mem_.buf_;
-        assert(idec->mem_.start_ <= idec->mem_.end_);
-      }
-    }
-    VP8InitScanline(dec);   // Prepare for next scanline
-
-    // Reconstruct, filter and emit the row.
-    if (!VP8ProcessRow(dec, io)) {
-      return IDecError(idec, VP8_STATUS_USER_ABORT);
-    }
-  }
-  // Synchronize the thread and check for errors.
-  if (!VP8ExitCritical(dec, io)) {
-    idec->state_ = STATE_ERROR;  // prevent re-entry in IDecError
-    return IDecError(idec, VP8_STATUS_USER_ABORT);
-  }
-  dec->ready_ = 0;
-  return FinishDecoding(idec);
-}
-
-static VP8StatusCode ErrorStatusLossless(WebPIDecoder* const idec,
-                                         VP8StatusCode status) {
-  if (status == VP8_STATUS_SUSPENDED || status == VP8_STATUS_NOT_ENOUGH_DATA) {
-    return VP8_STATUS_SUSPENDED;
-  }
-  return IDecError(idec, status);
-}
-
-static VP8StatusCode DecodeVP8LHeader(WebPIDecoder* const idec) {
-  VP8Io* const io = &idec->io_;
-  VP8LDecoder* const dec = (VP8LDecoder*)idec->dec_;
-  const WebPDecParams* const params = &idec->params_;
-  WebPDecBuffer* const output = params->output;
-  size_t curr_size = MemDataSize(&idec->mem_);
-  assert(idec->is_lossless_);
-
-  // Wait until there's enough data for decoding header.
-  if (curr_size < (idec->chunk_size_ >> 3)) {
-    dec->status_ = VP8_STATUS_SUSPENDED;
-    return ErrorStatusLossless(idec, dec->status_);
-  }
-
-  if (!VP8LDecodeHeader(dec, io)) {
-    if (dec->status_ == VP8_STATUS_BITSTREAM_ERROR &&
-        curr_size < idec->chunk_size_) {
-      dec->status_ = VP8_STATUS_SUSPENDED;
-    }
-    return ErrorStatusLossless(idec, dec->status_);
-  }
-  // Allocate/verify output buffer now.
-  dec->status_ = WebPAllocateDecBuffer(io->width, io->height, params->options,
-                                       output);
-  if (dec->status_ != VP8_STATUS_OK) {
-    return IDecError(idec, dec->status_);
-  }
-
-  idec->state_ = STATE_VP8L_DATA;
-  return VP8_STATUS_OK;
-}
-
-static VP8StatusCode DecodeVP8LData(WebPIDecoder* const idec) {
-  VP8LDecoder* const dec = (VP8LDecoder*)idec->dec_;
-  const size_t curr_size = MemDataSize(&idec->mem_);
-  assert(idec->is_lossless_);
-
-  // Switch to incremental decoding if we don't have all the bytes available.
-  dec->incremental_ = (curr_size < idec->chunk_size_);
-
-  if (!VP8LDecodeImage(dec)) {
-    return ErrorStatusLossless(idec, dec->status_);
-  }
-  assert(dec->status_ == VP8_STATUS_OK || dec->status_ == VP8_STATUS_SUSPENDED);
-  return (dec->status_ == VP8_STATUS_SUSPENDED) ? dec->status_
-                                                : FinishDecoding(idec);
-}
-
-  // Main decoding loop
-static VP8StatusCode IDecode(WebPIDecoder* idec) {
-  VP8StatusCode status = VP8_STATUS_SUSPENDED;
-
-  if (idec->state_ == STATE_WEBP_HEADER) {
-    status = DecodeWebPHeaders(idec);
-  } else {
-    if (idec->dec_ == NULL) {
-      return VP8_STATUS_SUSPENDED;    // can't continue if we have no decoder.
-    }
-  }
-  if (idec->state_ == STATE_VP8_HEADER) {
-    status = DecodeVP8FrameHeader(idec);
-  }
-  if (idec->state_ == STATE_VP8_PARTS0) {
-    status = DecodePartition0(idec);
-  }
-  if (idec->state_ == STATE_VP8_DATA) {
-    const VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
-    if (dec == NULL) {
-      return VP8_STATUS_SUSPENDED;  // can't continue if we have no decoder.
-    }
-    status = DecodeRemaining(idec);
-  }
-  if (idec->state_ == STATE_VP8L_HEADER) {
-    status = DecodeVP8LHeader(idec);
-  }
-  if (idec->state_ == STATE_VP8L_DATA) {
-    status = DecodeVP8LData(idec);
-  }
-  return status;
-}
-
-//------------------------------------------------------------------------------
-// Internal constructor
-
-static WebPIDecoder* NewDecoder(WebPDecBuffer* const output_buffer,
-                                const WebPBitstreamFeatures* const features) {
-  WebPIDecoder* idec = (WebPIDecoder*)WebPSafeCalloc(1ULL, sizeof(*idec));
-  if (idec == NULL) {
-    return NULL;
-  }
-
-  idec->state_ = STATE_WEBP_HEADER;
-  idec->chunk_size_ = 0;
-
-  idec->last_mb_y_ = -1;
-
-  InitMemBuffer(&idec->mem_);
-  WebPInitDecBuffer(&idec->output_);
-  VP8InitIo(&idec->io_);
-
-  WebPResetDecParams(&idec->params_);
-  if (output_buffer == NULL || WebPAvoidSlowMemory(output_buffer, features)) {
-    idec->params_.output = &idec->output_;
-    idec->final_output_ = output_buffer;
-    if (output_buffer != NULL) {
-      idec->params_.output->colorspace = output_buffer->colorspace;
-    }
-  } else {
-    idec->params_.output = output_buffer;
-    idec->final_output_ = NULL;
-  }
-  WebPInitCustomIo(&idec->params_, &idec->io_);  // Plug the I/O functions.
-
-  return idec;
-}
-
-//------------------------------------------------------------------------------
-// Public functions
-
-WebPIDecoder* WebPINewDecoder(WebPDecBuffer* output_buffer) {
-  return NewDecoder(output_buffer, NULL);
-}
-
-WebPIDecoder* WebPIDecode(const uint8_t* data, size_t data_size,
-                          WebPDecoderConfig* config) {
-  WebPIDecoder* idec;
-  WebPBitstreamFeatures tmp_features;
-  WebPBitstreamFeatures* const features =
-      (config == NULL) ? &tmp_features : &config->input;
-  memset(&tmp_features, 0, sizeof(tmp_features));
-
-  // Parse the bitstream's features, if requested:
-  if (data != NULL && data_size > 0) {
-    if (WebPGetFeatures(data, data_size, features) != VP8_STATUS_OK) {
-      return NULL;
-    }
-  }
-
-  // Create an instance of the incremental decoder
-  idec = (config != NULL) ? NewDecoder(&config->output, features)
-                          : NewDecoder(NULL, features);
-  if (idec == NULL) {
-    return NULL;
-  }
-  // Finish initialization
-  if (config != NULL) {
-    idec->params_.options = &config->options;
-  }
-  return idec;
-}
-
-void WebPIDelete(WebPIDecoder* idec) {
-  if (idec == NULL) return;
-  if (idec->dec_ != NULL) {
-    if (!idec->is_lossless_) {
-      if (idec->state_ == STATE_VP8_DATA) {
-        // Synchronize the thread, clean-up and check for errors.
-        VP8ExitCritical((VP8Decoder*)idec->dec_, &idec->io_);
-      }
-      VP8Delete((VP8Decoder*)idec->dec_);
-    } else {
-      VP8LDelete((VP8LDecoder*)idec->dec_);
-    }
-  }
-  ClearMemBuffer(&idec->mem_);
-  WebPFreeDecBuffer(&idec->output_);
-  WebPSafeFree(idec);
-}
-
-//------------------------------------------------------------------------------
-// Wrapper toward WebPINewDecoder
-
-WebPIDecoder* WebPINewRGB(WEBP_CSP_MODE csp, uint8_t* output_buffer,
-                          size_t output_buffer_size, int output_stride) {
-  const int is_external_memory = (output_buffer != NULL) ? 1 : 0;
-  WebPIDecoder* idec;
-
-  if (csp >= MODE_YUV) return NULL;
-  if (is_external_memory == 0) {    // Overwrite parameters to sane values.
-    output_buffer_size = 0;
-    output_stride = 0;
-  } else {  // A buffer was passed. Validate the other params.
-    if (output_stride == 0 || output_buffer_size == 0) {
-      return NULL;   // invalid parameter.
-    }
-  }
-  idec = WebPINewDecoder(NULL);
-  if (idec == NULL) return NULL;
-  idec->output_.colorspace = csp;
-  idec->output_.is_external_memory = is_external_memory;
-  idec->output_.u.RGBA.rgba = output_buffer;
-  idec->output_.u.RGBA.stride = output_stride;
-  idec->output_.u.RGBA.size = output_buffer_size;
-  return idec;
-}
-
-WebPIDecoder* WebPINewYUVA(uint8_t* luma, size_t luma_size, int luma_stride,
-                           uint8_t* u, size_t u_size, int u_stride,
-                           uint8_t* v, size_t v_size, int v_stride,
-                           uint8_t* a, size_t a_size, int a_stride) {
-  const int is_external_memory = (luma != NULL) ? 1 : 0;
-  WebPIDecoder* idec;
-  WEBP_CSP_MODE colorspace;
-
-  if (is_external_memory == 0) {    // Overwrite parameters to sane values.
-    luma_size = u_size = v_size = a_size = 0;
-    luma_stride = u_stride = v_stride = a_stride = 0;
-    u = v = a = NULL;
-    colorspace = MODE_YUVA;
-  } else {  // A luma buffer was passed. Validate the other parameters.
-    if (u == NULL || v == NULL) return NULL;
-    if (luma_size == 0 || u_size == 0 || v_size == 0) return NULL;
-    if (luma_stride == 0 || u_stride == 0 || v_stride == 0) return NULL;
-    if (a != NULL) {
-      if (a_size == 0 || a_stride == 0) return NULL;
-    }
-    colorspace = (a == NULL) ? MODE_YUV : MODE_YUVA;
-  }
-
-  idec = WebPINewDecoder(NULL);
-  if (idec == NULL) return NULL;
-
-  idec->output_.colorspace = colorspace;
-  idec->output_.is_external_memory = is_external_memory;
-  idec->output_.u.YUVA.y = luma;
-  idec->output_.u.YUVA.y_stride = luma_stride;
-  idec->output_.u.YUVA.y_size = luma_size;
-  idec->output_.u.YUVA.u = u;
-  idec->output_.u.YUVA.u_stride = u_stride;
-  idec->output_.u.YUVA.u_size = u_size;
-  idec->output_.u.YUVA.v = v;
-  idec->output_.u.YUVA.v_stride = v_stride;
-  idec->output_.u.YUVA.v_size = v_size;
-  idec->output_.u.YUVA.a = a;
-  idec->output_.u.YUVA.a_stride = a_stride;
-  idec->output_.u.YUVA.a_size = a_size;
-  return idec;
-}
-
-WebPIDecoder* WebPINewYUV(uint8_t* luma, size_t luma_size, int luma_stride,
-                          uint8_t* u, size_t u_size, int u_stride,
-                          uint8_t* v, size_t v_size, int v_stride) {
-  return WebPINewYUVA(luma, luma_size, luma_stride,
-                      u, u_size, u_stride,
-                      v, v_size, v_stride,
-                      NULL, 0, 0);
-}
-
-//------------------------------------------------------------------------------
-
-static VP8StatusCode IDecCheckStatus(const WebPIDecoder* const idec) {
-  assert(idec);
-  if (idec->state_ == STATE_ERROR) {
-    return VP8_STATUS_BITSTREAM_ERROR;
-  }
-  if (idec->state_ == STATE_DONE) {
-    return VP8_STATUS_OK;
-  }
-  return VP8_STATUS_SUSPENDED;
-}
-
-VP8StatusCode WebPIAppend(WebPIDecoder* idec,
-                          const uint8_t* data, size_t data_size) {
-  VP8StatusCode status;
-  if (idec == NULL || data == NULL) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  status = IDecCheckStatus(idec);
-  if (status != VP8_STATUS_SUSPENDED) {
-    return status;
-  }
-  // Check mixed calls between RemapMemBuffer and AppendToMemBuffer.
-  if (!CheckMemBufferMode(&idec->mem_, MEM_MODE_APPEND)) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  // Append data to memory buffer
-  if (!AppendToMemBuffer(idec, data, data_size)) {
-    return VP8_STATUS_OUT_OF_MEMORY;
-  }
-  return IDecode(idec);
-}
-
-VP8StatusCode WebPIUpdate(WebPIDecoder* idec,
-                          const uint8_t* data, size_t data_size) {
-  VP8StatusCode status;
-  if (idec == NULL || data == NULL) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  status = IDecCheckStatus(idec);
-  if (status != VP8_STATUS_SUSPENDED) {
-    return status;
-  }
-  // Check mixed calls between RemapMemBuffer and AppendToMemBuffer.
-  if (!CheckMemBufferMode(&idec->mem_, MEM_MODE_MAP)) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  // Make the memory buffer point to the new buffer
-  if (!RemapMemBuffer(idec, data, data_size)) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  return IDecode(idec);
-}
-
-//------------------------------------------------------------------------------
-
-static const WebPDecBuffer* GetOutputBuffer(const WebPIDecoder* const idec) {
-  if (idec == NULL || idec->dec_ == NULL) {
-    return NULL;
-  }
-  if (idec->state_ <= STATE_VP8_PARTS0) {
-    return NULL;
-  }
-  if (idec->final_output_ != NULL) {
-    return NULL;   // not yet slow-copied
-  }
-  return idec->params_.output;
-}
-
-const WebPDecBuffer* WebPIDecodedArea(const WebPIDecoder* idec,
-                                      int* left, int* top,
-                                      int* width, int* height) {
-  const WebPDecBuffer* const src = GetOutputBuffer(idec);
-  if (left != NULL) *left = 0;
-  if (top != NULL) *top = 0;
-  if (src != NULL) {
-    if (width != NULL) *width = src->width;
-    if (height != NULL) *height = idec->params_.last_y;
-  } else {
-    if (width != NULL) *width = 0;
-    if (height != NULL) *height = 0;
-  }
-  return src;
-}
-
-uint8_t* WebPIDecGetRGB(const WebPIDecoder* idec, int* last_y,
-                        int* width, int* height, int* stride) {
-  const WebPDecBuffer* const src = GetOutputBuffer(idec);
-  if (src == NULL) return NULL;
-  if (src->colorspace >= MODE_YUV) {
-    return NULL;
-  }
-
-  if (last_y != NULL) *last_y = idec->params_.last_y;
-  if (width != NULL) *width = src->width;
-  if (height != NULL) *height = src->height;
-  if (stride != NULL) *stride = src->u.RGBA.stride;
-
-  return src->u.RGBA.rgba;
-}
-
-uint8_t* WebPIDecGetYUVA(const WebPIDecoder* idec, int* last_y,
-                         uint8_t** u, uint8_t** v, uint8_t** a,
-                         int* width, int* height,
-                         int* stride, int* uv_stride, int* a_stride) {
-  const WebPDecBuffer* const src = GetOutputBuffer(idec);
-  if (src == NULL) return NULL;
-  if (src->colorspace < MODE_YUV) {
-    return NULL;
-  }
-
-  if (last_y != NULL) *last_y = idec->params_.last_y;
-  if (u != NULL) *u = src->u.YUVA.u;
-  if (v != NULL) *v = src->u.YUVA.v;
-  if (a != NULL) *a = src->u.YUVA.a;
-  if (width != NULL) *width = src->width;
-  if (height != NULL) *height = src->height;
-  if (stride != NULL) *stride = src->u.YUVA.y_stride;
-  if (uv_stride != NULL) *uv_stride = src->u.YUVA.u_stride;
-  if (a_stride != NULL) *a_stride = src->u.YUVA.a_stride;
-
-  return src->u.YUVA.y;
-}
-
-int WebPISetIOHooks(WebPIDecoder* const idec,
-                    VP8IoPutHook put,
-                    VP8IoSetupHook setup,
-                    VP8IoTeardownHook teardown,
-                    void* user_data) {
-  if (idec == NULL || idec->state_ > STATE_WEBP_HEADER) {
-    return 0;
-  }
-
-  idec->io_.put = put;
-  idec->io_.setup = setup;
-  idec->io_.teardown = teardown;
-  idec->io_.opaque = user_data;
-
-  return 1;
-}
diff --git a/ios/Pods/libwebp/src/dec/io_dec.c b/ios/Pods/libwebp/src/dec/io_dec.c
deleted file mode 100644
index e603f19..0000000
--- a/ios/Pods/libwebp/src/dec/io_dec.c
+++ /dev/null
@@ -1,649 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// functions for sample output.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>
-#include "src/dec/vp8i_dec.h"
-#include "src/dec/webpi_dec.h"
-#include "src/dsp/dsp.h"
-#include "src/dsp/yuv.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// Main YUV<->RGB conversion functions
-
-static int EmitYUV(const VP8Io* const io, WebPDecParams* const p) {
-  WebPDecBuffer* output = p->output;
-  const WebPYUVABuffer* const buf = &output->u.YUVA;
-  uint8_t* const y_dst = buf->y + io->mb_y * buf->y_stride;
-  uint8_t* const u_dst = buf->u + (io->mb_y >> 1) * buf->u_stride;
-  uint8_t* const v_dst = buf->v + (io->mb_y >> 1) * buf->v_stride;
-  const int mb_w = io->mb_w;
-  const int mb_h = io->mb_h;
-  const int uv_w = (mb_w + 1) / 2;
-  const int uv_h = (mb_h + 1) / 2;
-  int j;
-  for (j = 0; j < mb_h; ++j) {
-    memcpy(y_dst + j * buf->y_stride, io->y + j * io->y_stride, mb_w);
-  }
-  for (j = 0; j < uv_h; ++j) {
-    memcpy(u_dst + j * buf->u_stride, io->u + j * io->uv_stride, uv_w);
-    memcpy(v_dst + j * buf->v_stride, io->v + j * io->uv_stride, uv_w);
-  }
-  return io->mb_h;
-}
-
-// Point-sampling U/V sampler.
-static int EmitSampledRGB(const VP8Io* const io, WebPDecParams* const p) {
-  WebPDecBuffer* const output = p->output;
-  WebPRGBABuffer* const buf = &output->u.RGBA;
-  uint8_t* const dst = buf->rgba + io->mb_y * buf->stride;
-  WebPSamplerProcessPlane(io->y, io->y_stride,
-                          io->u, io->v, io->uv_stride,
-                          dst, buf->stride, io->mb_w, io->mb_h,
-                          WebPSamplers[output->colorspace]);
-  return io->mb_h;
-}
-
-//------------------------------------------------------------------------------
-// Fancy upsampling
-
-#ifdef FANCY_UPSAMPLING
-static int EmitFancyRGB(const VP8Io* const io, WebPDecParams* const p) {
-  int num_lines_out = io->mb_h;   // a priori guess
-  const WebPRGBABuffer* const buf = &p->output->u.RGBA;
-  uint8_t* dst = buf->rgba + io->mb_y * buf->stride;
-  WebPUpsampleLinePairFunc upsample = WebPUpsamplers[p->output->colorspace];
-  const uint8_t* cur_y = io->y;
-  const uint8_t* cur_u = io->u;
-  const uint8_t* cur_v = io->v;
-  const uint8_t* top_u = p->tmp_u;
-  const uint8_t* top_v = p->tmp_v;
-  int y = io->mb_y;
-  const int y_end = io->mb_y + io->mb_h;
-  const int mb_w = io->mb_w;
-  const int uv_w = (mb_w + 1) / 2;
-
-  if (y == 0) {
-    // First line is special cased. We mirror the u/v samples at boundary.
-    upsample(cur_y, NULL, cur_u, cur_v, cur_u, cur_v, dst, NULL, mb_w);
-  } else {
-    // We can finish the left-over line from previous call.
-    upsample(p->tmp_y, cur_y, top_u, top_v, cur_u, cur_v,
-             dst - buf->stride, dst, mb_w);
-    ++num_lines_out;
-  }
-  // Loop over each output pairs of row.
-  for (; y + 2 < y_end; y += 2) {
-    top_u = cur_u;
-    top_v = cur_v;
-    cur_u += io->uv_stride;
-    cur_v += io->uv_stride;
-    dst += 2 * buf->stride;
-    cur_y += 2 * io->y_stride;
-    upsample(cur_y - io->y_stride, cur_y,
-             top_u, top_v, cur_u, cur_v,
-             dst - buf->stride, dst, mb_w);
-  }
-  // move to last row
-  cur_y += io->y_stride;
-  if (io->crop_top + y_end < io->crop_bottom) {
-    // Save the unfinished samples for next call (as we're not done yet).
-    memcpy(p->tmp_y, cur_y, mb_w * sizeof(*p->tmp_y));
-    memcpy(p->tmp_u, cur_u, uv_w * sizeof(*p->tmp_u));
-    memcpy(p->tmp_v, cur_v, uv_w * sizeof(*p->tmp_v));
-    // The fancy upsampler leaves a row unfinished behind
-    // (except for the very last row)
-    num_lines_out--;
-  } else {
-    // Process the very last row of even-sized picture
-    if (!(y_end & 1)) {
-      upsample(cur_y, NULL, cur_u, cur_v, cur_u, cur_v,
-               dst + buf->stride, NULL, mb_w);
-    }
-  }
-  return num_lines_out;
-}
-
-#endif    /* FANCY_UPSAMPLING */
-
-//------------------------------------------------------------------------------
-
-static void FillAlphaPlane(uint8_t* dst, int w, int h, int stride) {
-  int j;
-  for (j = 0; j < h; ++j) {
-    memset(dst, 0xff, w * sizeof(*dst));
-    dst += stride;
-  }
-}
-
-static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
-                        int expected_num_lines_out) {
-  const uint8_t* alpha = io->a;
-  const WebPYUVABuffer* const buf = &p->output->u.YUVA;
-  const int mb_w = io->mb_w;
-  const int mb_h = io->mb_h;
-  uint8_t* dst = buf->a + io->mb_y * buf->a_stride;
-  int j;
-  (void)expected_num_lines_out;
-  assert(expected_num_lines_out == mb_h);
-  if (alpha != NULL) {
-    for (j = 0; j < mb_h; ++j) {
-      memcpy(dst, alpha, mb_w * sizeof(*dst));
-      alpha += io->width;
-      dst += buf->a_stride;
-    }
-  } else if (buf->a != NULL) {
-    // the user requested alpha, but there is none, set it to opaque.
-    FillAlphaPlane(dst, mb_w, mb_h, buf->a_stride);
-  }
-  return 0;
-}
-
-static int GetAlphaSourceRow(const VP8Io* const io,
-                             const uint8_t** alpha, int* const num_rows) {
-  int start_y = io->mb_y;
-  *num_rows = io->mb_h;
-
-  // Compensate for the 1-line delay of the fancy upscaler.
-  // This is similar to EmitFancyRGB().
-  if (io->fancy_upsampling) {
-    if (start_y == 0) {
-      // We don't process the last row yet. It'll be done during the next call.
-      --*num_rows;
-    } else {
-      --start_y;
-      // Fortunately, *alpha data is persistent, so we can go back
-      // one row and finish alpha blending, now that the fancy upscaler
-      // completed the YUV->RGB interpolation.
-      *alpha -= io->width;
-    }
-    if (io->crop_top + io->mb_y + io->mb_h == io->crop_bottom) {
-      // If it's the very last call, we process all the remaining rows!
-      *num_rows = io->crop_bottom - io->crop_top - start_y;
-    }
-  }
-  return start_y;
-}
-
-static int EmitAlphaRGB(const VP8Io* const io, WebPDecParams* const p,
-                        int expected_num_lines_out) {
-  const uint8_t* alpha = io->a;
-  if (alpha != NULL) {
-    const int mb_w = io->mb_w;
-    const WEBP_CSP_MODE colorspace = p->output->colorspace;
-    const int alpha_first =
-        (colorspace == MODE_ARGB || colorspace == MODE_Argb);
-    const WebPRGBABuffer* const buf = &p->output->u.RGBA;
-    int num_rows;
-    const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
-    uint8_t* const base_rgba = buf->rgba + start_y * buf->stride;
-    uint8_t* const dst = base_rgba + (alpha_first ? 0 : 3);
-    const int has_alpha = WebPDispatchAlpha(alpha, io->width, mb_w,
-                                            num_rows, dst, buf->stride);
-    (void)expected_num_lines_out;
-    assert(expected_num_lines_out == num_rows);
-    // has_alpha is true if there's non-trivial alpha to premultiply with.
-    if (has_alpha && WebPIsPremultipliedMode(colorspace)) {
-      WebPApplyAlphaMultiply(base_rgba, alpha_first,
-                             mb_w, num_rows, buf->stride);
-    }
-  }
-  return 0;
-}
-
-static int EmitAlphaRGBA4444(const VP8Io* const io, WebPDecParams* const p,
-                             int expected_num_lines_out) {
-  const uint8_t* alpha = io->a;
-  if (alpha != NULL) {
-    const int mb_w = io->mb_w;
-    const WEBP_CSP_MODE colorspace = p->output->colorspace;
-    const WebPRGBABuffer* const buf = &p->output->u.RGBA;
-    int num_rows;
-    const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
-    uint8_t* const base_rgba = buf->rgba + start_y * buf->stride;
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    uint8_t* alpha_dst = base_rgba;
-#else
-    uint8_t* alpha_dst = base_rgba + 1;
-#endif
-    uint32_t alpha_mask = 0x0f;
-    int i, j;
-    for (j = 0; j < num_rows; ++j) {
-      for (i = 0; i < mb_w; ++i) {
-        // Fill in the alpha value (converted to 4 bits).
-        const uint32_t alpha_value = alpha[i] >> 4;
-        alpha_dst[2 * i] = (alpha_dst[2 * i] & 0xf0) | alpha_value;
-        alpha_mask &= alpha_value;
-      }
-      alpha += io->width;
-      alpha_dst += buf->stride;
-    }
-    (void)expected_num_lines_out;
-    assert(expected_num_lines_out == num_rows);
-    if (alpha_mask != 0x0f && WebPIsPremultipliedMode(colorspace)) {
-      WebPApplyAlphaMultiply4444(base_rgba, mb_w, num_rows, buf->stride);
-    }
-  }
-  return 0;
-}
-
-//------------------------------------------------------------------------------
-// YUV rescaling (no final RGB conversion needed)
-
-#if !defined(WEBP_REDUCE_SIZE)
-static int Rescale(const uint8_t* src, int src_stride,
-                   int new_lines, WebPRescaler* const wrk) {
-  int num_lines_out = 0;
-  while (new_lines > 0) {    // import new contributions of source rows.
-    const int lines_in = WebPRescalerImport(wrk, new_lines, src, src_stride);
-    src += lines_in * src_stride;
-    new_lines -= lines_in;
-    num_lines_out += WebPRescalerExport(wrk);    // emit output row(s)
-  }
-  return num_lines_out;
-}
-
-static int EmitRescaledYUV(const VP8Io* const io, WebPDecParams* const p) {
-  const int mb_h = io->mb_h;
-  const int uv_mb_h = (mb_h + 1) >> 1;
-  WebPRescaler* const scaler = p->scaler_y;
-  int num_lines_out = 0;
-  if (WebPIsAlphaMode(p->output->colorspace) && io->a != NULL) {
-    // Before rescaling, we premultiply the luma directly into the io->y
-    // internal buffer. This is OK since these samples are not used for
-    // intra-prediction (the top samples are saved in cache_y_/u_/v_).
-    // But we need to cast the const away, though.
-    WebPMultRows((uint8_t*)io->y, io->y_stride,
-                 io->a, io->width, io->mb_w, mb_h, 0);
-  }
-  num_lines_out = Rescale(io->y, io->y_stride, mb_h, scaler);
-  Rescale(io->u, io->uv_stride, uv_mb_h, p->scaler_u);
-  Rescale(io->v, io->uv_stride, uv_mb_h, p->scaler_v);
-  return num_lines_out;
-}
-
-static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
-                                int expected_num_lines_out) {
-  const WebPYUVABuffer* const buf = &p->output->u.YUVA;
-  uint8_t* const dst_a = buf->a + p->last_y * buf->a_stride;
-  if (io->a != NULL) {
-    uint8_t* const dst_y = buf->y + p->last_y * buf->y_stride;
-    const int num_lines_out = Rescale(io->a, io->width, io->mb_h, p->scaler_a);
-    assert(expected_num_lines_out == num_lines_out);
-    if (num_lines_out > 0) {   // unmultiply the Y
-      WebPMultRows(dst_y, buf->y_stride, dst_a, buf->a_stride,
-                   p->scaler_a->dst_width, num_lines_out, 1);
-    }
-  } else if (buf->a != NULL) {
-    // the user requested alpha, but there is none, set it to opaque.
-    assert(p->last_y + expected_num_lines_out <= io->scaled_height);
-    FillAlphaPlane(dst_a, io->scaled_width, expected_num_lines_out,
-                   buf->a_stride);
-  }
-  return 0;
-}
-
-static int InitYUVRescaler(const VP8Io* const io, WebPDecParams* const p) {
-  const int has_alpha = WebPIsAlphaMode(p->output->colorspace);
-  const WebPYUVABuffer* const buf = &p->output->u.YUVA;
-  const int out_width  = io->scaled_width;
-  const int out_height = io->scaled_height;
-  const int uv_out_width  = (out_width + 1) >> 1;
-  const int uv_out_height = (out_height + 1) >> 1;
-  const int uv_in_width  = (io->mb_w + 1) >> 1;
-  const int uv_in_height = (io->mb_h + 1) >> 1;
-  const size_t work_size = 2 * out_width;   // scratch memory for luma rescaler
-  const size_t uv_work_size = 2 * uv_out_width;  // and for each u/v ones
-  size_t tmp_size, rescaler_size;
-  rescaler_t* work;
-  WebPRescaler* scalers;
-  const int num_rescalers = has_alpha ? 4 : 3;
-
-  tmp_size = (work_size + 2 * uv_work_size) * sizeof(*work);
-  if (has_alpha) {
-    tmp_size += work_size * sizeof(*work);
-  }
-  rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST;
-
-  p->memory = WebPSafeMalloc(1ULL, tmp_size + rescaler_size);
-  if (p->memory == NULL) {
-    return 0;   // memory error
-  }
-  work = (rescaler_t*)p->memory;
-
-  scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + tmp_size);
-  p->scaler_y = &scalers[0];
-  p->scaler_u = &scalers[1];
-  p->scaler_v = &scalers[2];
-  p->scaler_a = has_alpha ? &scalers[3] : NULL;
-
-  WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
-                   buf->y, out_width, out_height, buf->y_stride, 1,
-                   work);
-  WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
-                   buf->u, uv_out_width, uv_out_height, buf->u_stride, 1,
-                   work + work_size);
-  WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
-                   buf->v, uv_out_width, uv_out_height, buf->v_stride, 1,
-                   work + work_size + uv_work_size);
-  p->emit = EmitRescaledYUV;
-
-  if (has_alpha) {
-    WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
-                     buf->a, out_width, out_height, buf->a_stride, 1,
-                     work + work_size + 2 * uv_work_size);
-    p->emit_alpha = EmitRescaledAlphaYUV;
-    WebPInitAlphaProcessing();
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-// RGBA rescaling
-
-static int ExportRGB(WebPDecParams* const p, int y_pos) {
-  const WebPYUV444Converter convert =
-      WebPYUV444Converters[p->output->colorspace];
-  const WebPRGBABuffer* const buf = &p->output->u.RGBA;
-  uint8_t* dst = buf->rgba + y_pos * buf->stride;
-  int num_lines_out = 0;
-  // For RGB rescaling, because of the YUV420, current scan position
-  // U/V can be +1/-1 line from the Y one.  Hence the double test.
-  while (WebPRescalerHasPendingOutput(p->scaler_y) &&
-         WebPRescalerHasPendingOutput(p->scaler_u)) {
-    assert(y_pos + num_lines_out < p->output->height);
-    assert(p->scaler_u->y_accum == p->scaler_v->y_accum);
-    WebPRescalerExportRow(p->scaler_y);
-    WebPRescalerExportRow(p->scaler_u);
-    WebPRescalerExportRow(p->scaler_v);
-    convert(p->scaler_y->dst, p->scaler_u->dst, p->scaler_v->dst,
-            dst, p->scaler_y->dst_width);
-    dst += buf->stride;
-    ++num_lines_out;
-  }
-  return num_lines_out;
-}
-
-static int EmitRescaledRGB(const VP8Io* const io, WebPDecParams* const p) {
-  const int mb_h = io->mb_h;
-  const int uv_mb_h = (mb_h + 1) >> 1;
-  int j = 0, uv_j = 0;
-  int num_lines_out = 0;
-  while (j < mb_h) {
-    const int y_lines_in =
-        WebPRescalerImport(p->scaler_y, mb_h - j,
-                           io->y + j * io->y_stride, io->y_stride);
-    j += y_lines_in;
-    if (WebPRescaleNeededLines(p->scaler_u, uv_mb_h - uv_j)) {
-      const int u_lines_in =
-          WebPRescalerImport(p->scaler_u, uv_mb_h - uv_j,
-                             io->u + uv_j * io->uv_stride, io->uv_stride);
-      const int v_lines_in =
-          WebPRescalerImport(p->scaler_v, uv_mb_h - uv_j,
-                             io->v + uv_j * io->uv_stride, io->uv_stride);
-      (void)v_lines_in;   // remove a gcc warning
-      assert(u_lines_in == v_lines_in);
-      uv_j += u_lines_in;
-    }
-    num_lines_out += ExportRGB(p, p->last_y + num_lines_out);
-  }
-  return num_lines_out;
-}
-
-static int ExportAlpha(WebPDecParams* const p, int y_pos, int max_lines_out) {
-  const WebPRGBABuffer* const buf = &p->output->u.RGBA;
-  uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride;
-  const WEBP_CSP_MODE colorspace = p->output->colorspace;
-  const int alpha_first =
-      (colorspace == MODE_ARGB || colorspace == MODE_Argb);
-  uint8_t* dst = base_rgba + (alpha_first ? 0 : 3);
-  int num_lines_out = 0;
-  const int is_premult_alpha = WebPIsPremultipliedMode(colorspace);
-  uint32_t non_opaque = 0;
-  const int width = p->scaler_a->dst_width;
-
-  while (WebPRescalerHasPendingOutput(p->scaler_a) &&
-         num_lines_out < max_lines_out) {
-    assert(y_pos + num_lines_out < p->output->height);
-    WebPRescalerExportRow(p->scaler_a);
-    non_opaque |= WebPDispatchAlpha(p->scaler_a->dst, 0, width, 1, dst, 0);
-    dst += buf->stride;
-    ++num_lines_out;
-  }
-  if (is_premult_alpha && non_opaque) {
-    WebPApplyAlphaMultiply(base_rgba, alpha_first,
-                           width, num_lines_out, buf->stride);
-  }
-  return num_lines_out;
-}
-
-static int ExportAlphaRGBA4444(WebPDecParams* const p, int y_pos,
-                               int max_lines_out) {
-  const WebPRGBABuffer* const buf = &p->output->u.RGBA;
-  uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride;
-#if (WEBP_SWAP_16BIT_CSP == 1)
-  uint8_t* alpha_dst = base_rgba;
-#else
-  uint8_t* alpha_dst = base_rgba + 1;
-#endif
-  int num_lines_out = 0;
-  const WEBP_CSP_MODE colorspace = p->output->colorspace;
-  const int width = p->scaler_a->dst_width;
-  const int is_premult_alpha = WebPIsPremultipliedMode(colorspace);
-  uint32_t alpha_mask = 0x0f;
-
-  while (WebPRescalerHasPendingOutput(p->scaler_a) &&
-         num_lines_out < max_lines_out) {
-    int i;
-    assert(y_pos + num_lines_out < p->output->height);
-    WebPRescalerExportRow(p->scaler_a);
-    for (i = 0; i < width; ++i) {
-      // Fill in the alpha value (converted to 4 bits).
-      const uint32_t alpha_value = p->scaler_a->dst[i] >> 4;
-      alpha_dst[2 * i] = (alpha_dst[2 * i] & 0xf0) | alpha_value;
-      alpha_mask &= alpha_value;
-    }
-    alpha_dst += buf->stride;
-    ++num_lines_out;
-  }
-  if (is_premult_alpha && alpha_mask != 0x0f) {
-    WebPApplyAlphaMultiply4444(base_rgba, width, num_lines_out, buf->stride);
-  }
-  return num_lines_out;
-}
-
-static int EmitRescaledAlphaRGB(const VP8Io* const io, WebPDecParams* const p,
-                                int expected_num_out_lines) {
-  if (io->a != NULL) {
-    WebPRescaler* const scaler = p->scaler_a;
-    int lines_left = expected_num_out_lines;
-    const int y_end = p->last_y + lines_left;
-    while (lines_left > 0) {
-      const int row_offset = scaler->src_y - io->mb_y;
-      WebPRescalerImport(scaler, io->mb_h + io->mb_y - scaler->src_y,
-                         io->a + row_offset * io->width, io->width);
-      lines_left -= p->emit_alpha_row(p, y_end - lines_left, lines_left);
-    }
-  }
-  return 0;
-}
-
-static int InitRGBRescaler(const VP8Io* const io, WebPDecParams* const p) {
-  const int has_alpha = WebPIsAlphaMode(p->output->colorspace);
-  const int out_width  = io->scaled_width;
-  const int out_height = io->scaled_height;
-  const int uv_in_width  = (io->mb_w + 1) >> 1;
-  const int uv_in_height = (io->mb_h + 1) >> 1;
-  const size_t work_size = 2 * out_width;   // scratch memory for one rescaler
-  rescaler_t* work;  // rescalers work area
-  uint8_t* tmp;   // tmp storage for scaled YUV444 samples before RGB conversion
-  size_t tmp_size1, tmp_size2, total_size, rescaler_size;
-  WebPRescaler* scalers;
-  const int num_rescalers = has_alpha ? 4 : 3;
-
-  tmp_size1 = 3 * work_size;
-  tmp_size2 = 3 * out_width;
-  if (has_alpha) {
-    tmp_size1 += work_size;
-    tmp_size2 += out_width;
-  }
-  total_size = tmp_size1 * sizeof(*work) + tmp_size2 * sizeof(*tmp);
-  rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST;
-
-  p->memory = WebPSafeMalloc(1ULL, total_size + rescaler_size);
-  if (p->memory == NULL) {
-    return 0;   // memory error
-  }
-  work = (rescaler_t*)p->memory;
-  tmp = (uint8_t*)(work + tmp_size1);
-
-  scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + total_size);
-  p->scaler_y = &scalers[0];
-  p->scaler_u = &scalers[1];
-  p->scaler_v = &scalers[2];
-  p->scaler_a = has_alpha ? &scalers[3] : NULL;
-
-  WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
-                   tmp + 0 * out_width, out_width, out_height, 0, 1,
-                   work + 0 * work_size);
-  WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
-                   tmp + 1 * out_width, out_width, out_height, 0, 1,
-                   work + 1 * work_size);
-  WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
-                   tmp + 2 * out_width, out_width, out_height, 0, 1,
-                   work + 2 * work_size);
-  p->emit = EmitRescaledRGB;
-  WebPInitYUV444Converters();
-
-  if (has_alpha) {
-    WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
-                     tmp + 3 * out_width, out_width, out_height, 0, 1,
-                     work + 3 * work_size);
-    p->emit_alpha = EmitRescaledAlphaRGB;
-    if (p->output->colorspace == MODE_RGBA_4444 ||
-        p->output->colorspace == MODE_rgbA_4444) {
-      p->emit_alpha_row = ExportAlphaRGBA4444;
-    } else {
-      p->emit_alpha_row = ExportAlpha;
-    }
-    WebPInitAlphaProcessing();
-  }
-  return 1;
-}
-
-#endif  // WEBP_REDUCE_SIZE
-
-//------------------------------------------------------------------------------
-// Default custom functions
-
-static int CustomSetup(VP8Io* io) {
-  WebPDecParams* const p = (WebPDecParams*)io->opaque;
-  const WEBP_CSP_MODE colorspace = p->output->colorspace;
-  const int is_rgb = WebPIsRGBMode(colorspace);
-  const int is_alpha = WebPIsAlphaMode(colorspace);
-
-  p->memory = NULL;
-  p->emit = NULL;
-  p->emit_alpha = NULL;
-  p->emit_alpha_row = NULL;
-  if (!WebPIoInitFromOptions(p->options, io, is_alpha ? MODE_YUV : MODE_YUVA)) {
-    return 0;
-  }
-  if (is_alpha && WebPIsPremultipliedMode(colorspace)) {
-    WebPInitUpsamplers();
-  }
-  if (io->use_scaling) {
-#if !defined(WEBP_REDUCE_SIZE)
-    const int ok = is_rgb ? InitRGBRescaler(io, p) : InitYUVRescaler(io, p);
-    if (!ok) {
-      return 0;    // memory error
-    }
-#else
-    return 0;   // rescaling support not compiled
-#endif
-  } else {
-    if (is_rgb) {
-      WebPInitSamplers();
-      p->emit = EmitSampledRGB;   // default
-      if (io->fancy_upsampling) {
-#ifdef FANCY_UPSAMPLING
-        const int uv_width = (io->mb_w + 1) >> 1;
-        p->memory = WebPSafeMalloc(1ULL, (size_t)(io->mb_w + 2 * uv_width));
-        if (p->memory == NULL) {
-          return 0;   // memory error.
-        }
-        p->tmp_y = (uint8_t*)p->memory;
-        p->tmp_u = p->tmp_y + io->mb_w;
-        p->tmp_v = p->tmp_u + uv_width;
-        p->emit = EmitFancyRGB;
-        WebPInitUpsamplers();
-#endif
-      }
-    } else {
-      p->emit = EmitYUV;
-    }
-    if (is_alpha) {  // need transparency output
-      p->emit_alpha =
-          (colorspace == MODE_RGBA_4444 || colorspace == MODE_rgbA_4444) ?
-              EmitAlphaRGBA4444
-          : is_rgb ? EmitAlphaRGB
-          : EmitAlphaYUV;
-      if (is_rgb) {
-        WebPInitAlphaProcessing();
-      }
-    }
-  }
-
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-
-static int CustomPut(const VP8Io* io) {
-  WebPDecParams* const p = (WebPDecParams*)io->opaque;
-  const int mb_w = io->mb_w;
-  const int mb_h = io->mb_h;
-  int num_lines_out;
-  assert(!(io->mb_y & 1));
-
-  if (mb_w <= 0 || mb_h <= 0) {
-    return 0;
-  }
-  num_lines_out = p->emit(io, p);
-  if (p->emit_alpha != NULL) {
-    p->emit_alpha(io, p, num_lines_out);
-  }
-  p->last_y += num_lines_out;
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-
-static void CustomTeardown(const VP8Io* io) {
-  WebPDecParams* const p = (WebPDecParams*)io->opaque;
-  WebPSafeFree(p->memory);
-  p->memory = NULL;
-}
-
-//------------------------------------------------------------------------------
-// Main entry point
-
-void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io) {
-  io->put      = CustomPut;
-  io->setup    = CustomSetup;
-  io->teardown = CustomTeardown;
-  io->opaque   = params;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dec/quant_dec.c b/ios/Pods/libwebp/src/dec/quant_dec.c
deleted file mode 100644
index f07212a..0000000
--- a/ios/Pods/libwebp/src/dec/quant_dec.c
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Quantizer initialization
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dec/vp8i_dec.h"
-
-static WEBP_INLINE int clip(int v, int M) {
-  return v < 0 ? 0 : v > M ? M : v;
-}
-
-// Paragraph 14.1
-static const uint8_t kDcTable[128] = {
-  4,     5,   6,   7,   8,   9,  10,  10,
-  11,   12,  13,  14,  15,  16,  17,  17,
-  18,   19,  20,  20,  21,  21,  22,  22,
-  23,   23,  24,  25,  25,  26,  27,  28,
-  29,   30,  31,  32,  33,  34,  35,  36,
-  37,   37,  38,  39,  40,  41,  42,  43,
-  44,   45,  46,  46,  47,  48,  49,  50,
-  51,   52,  53,  54,  55,  56,  57,  58,
-  59,   60,  61,  62,  63,  64,  65,  66,
-  67,   68,  69,  70,  71,  72,  73,  74,
-  75,   76,  76,  77,  78,  79,  80,  81,
-  82,   83,  84,  85,  86,  87,  88,  89,
-  91,   93,  95,  96,  98, 100, 101, 102,
-  104, 106, 108, 110, 112, 114, 116, 118,
-  122, 124, 126, 128, 130, 132, 134, 136,
-  138, 140, 143, 145, 148, 151, 154, 157
-};
-
-static const uint16_t kAcTable[128] = {
-  4,     5,   6,   7,   8,   9,  10,  11,
-  12,   13,  14,  15,  16,  17,  18,  19,
-  20,   21,  22,  23,  24,  25,  26,  27,
-  28,   29,  30,  31,  32,  33,  34,  35,
-  36,   37,  38,  39,  40,  41,  42,  43,
-  44,   45,  46,  47,  48,  49,  50,  51,
-  52,   53,  54,  55,  56,  57,  58,  60,
-  62,   64,  66,  68,  70,  72,  74,  76,
-  78,   80,  82,  84,  86,  88,  90,  92,
-  94,   96,  98, 100, 102, 104, 106, 108,
-  110, 112, 114, 116, 119, 122, 125, 128,
-  131, 134, 137, 140, 143, 146, 149, 152,
-  155, 158, 161, 164, 167, 170, 173, 177,
-  181, 185, 189, 193, 197, 201, 205, 209,
-  213, 217, 221, 225, 229, 234, 239, 245,
-  249, 254, 259, 264, 269, 274, 279, 284
-};
-
-//------------------------------------------------------------------------------
-// Paragraph 9.6
-
-void VP8ParseQuant(VP8Decoder* const dec) {
-  VP8BitReader* const br = &dec->br_;
-  const int base_q0 = VP8GetValue(br, 7);
-  const int dqy1_dc = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0;
-  const int dqy2_dc = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0;
-  const int dqy2_ac = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0;
-  const int dquv_dc = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0;
-  const int dquv_ac = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0;
-
-  const VP8SegmentHeader* const hdr = &dec->segment_hdr_;
-  int i;
-
-  for (i = 0; i < NUM_MB_SEGMENTS; ++i) {
-    int q;
-    if (hdr->use_segment_) {
-      q = hdr->quantizer_[i];
-      if (!hdr->absolute_delta_) {
-        q += base_q0;
-      }
-    } else {
-      if (i > 0) {
-        dec->dqm_[i] = dec->dqm_[0];
-        continue;
-      } else {
-        q = base_q0;
-      }
-    }
-    {
-      VP8QuantMatrix* const m = &dec->dqm_[i];
-      m->y1_mat_[0] = kDcTable[clip(q + dqy1_dc, 127)];
-      m->y1_mat_[1] = kAcTable[clip(q + 0,       127)];
-
-      m->y2_mat_[0] = kDcTable[clip(q + dqy2_dc, 127)] * 2;
-      // For all x in [0..284], x*155/100 is bitwise equal to (x*101581) >> 16.
-      // The smallest precision for that is '(x*6349) >> 12' but 16 is a good
-      // word size.
-      m->y2_mat_[1] = (kAcTable[clip(q + dqy2_ac, 127)] * 101581) >> 16;
-      if (m->y2_mat_[1] < 8) m->y2_mat_[1] = 8;
-
-      m->uv_mat_[0] = kDcTable[clip(q + dquv_dc, 117)];
-      m->uv_mat_[1] = kAcTable[clip(q + dquv_ac, 127)];
-
-      m->uv_quant_ = q + dquv_ac;   // for dithering strength evaluation
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-
diff --git a/ios/Pods/libwebp/src/dec/tree_dec.c b/ios/Pods/libwebp/src/dec/tree_dec.c
deleted file mode 100644
index 3f5a957..0000000
--- a/ios/Pods/libwebp/src/dec/tree_dec.c
+++ /dev/null
@@ -1,532 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Coding trees and probas
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dec/vp8i_dec.h"
-#include "src/utils/bit_reader_inl_utils.h"
-
-#if !defined(USE_GENERIC_TREE)
-#if !defined(__arm__) && !defined(_M_ARM) && !defined(__aarch64__)
-// using a table is ~1-2% slower on ARM. Prefer the coded-tree approach then.
-#define USE_GENERIC_TREE 1   // ALTERNATE_CODE
-#else
-#define USE_GENERIC_TREE 0
-#endif
-#endif  // USE_GENERIC_TREE
-
-#if (USE_GENERIC_TREE == 1)
-static const int8_t kYModesIntra4[18] = {
-  -B_DC_PRED, 1,
-    -B_TM_PRED, 2,
-      -B_VE_PRED, 3,
-        4, 6,
-          -B_HE_PRED, 5,
-            -B_RD_PRED, -B_VR_PRED,
-        -B_LD_PRED, 7,
-          -B_VL_PRED, 8,
-            -B_HD_PRED, -B_HU_PRED
-};
-#endif
-
-//------------------------------------------------------------------------------
-// Default probabilities
-
-// Paragraph 13.5
-static const uint8_t
-  CoeffsProba0[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS] = {
-  { { { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 },
-      { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 },
-      { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 },
-      { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 },
-      { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 },
-    },
-    { { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 },
-      { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 },
-      { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 },
-    },
-    { { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 },
-      { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 },
-      { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 },
-      { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 },
-      { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 },
-      { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 },
-      { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
-    }
-  },
-  { { { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 },
-      { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 },
-      { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 }
-    },
-    { { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 },
-      { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 },
-      { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 }
-    },
-    { { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 },
-      { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 },
-      { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 }
-    },
-    { { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 },
-      { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 },
-      { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 },
-      { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 },
-      { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 }
-    },
-    { { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 },
-      { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 },
-      { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 }
-    },
-    { { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 },
-      { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 },
-      { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 }
-    },
-    { { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 },
-      { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 }
-    }
-  },
-  { { { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 },
-      { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 },
-      { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 }
-    },
-    { { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 },
-      { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 },
-      { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 },
-      { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 },
-      { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 }
-    },
-    { { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 },
-      { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 },
-      { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
-    }
-  },
-  { { { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 },
-      { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 },
-      { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 }
-    },
-    { { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 },
-      { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 },
-      { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 }
-    },
-    { { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 },
-      { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 },
-      { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 }
-    },
-    { { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 },
-      { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 },
-      { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 }
-    },
-    { { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 },
-      { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 },
-      { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 }
-    },
-    { { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 },
-      { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 },
-      { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 },
-      { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 },
-      { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 }
-    },
-    { { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
-    }
-  }
-};
-
-// Paragraph 11.5
-static const uint8_t kBModesProba[NUM_BMODES][NUM_BMODES][NUM_BMODES - 1] = {
-  { { 231, 120, 48, 89, 115, 113, 120, 152, 112 },
-    { 152, 179, 64, 126, 170, 118, 46, 70, 95 },
-    { 175, 69, 143, 80, 85, 82, 72, 155, 103 },
-    { 56, 58, 10, 171, 218, 189, 17, 13, 152 },
-    { 114, 26, 17, 163, 44, 195, 21, 10, 173 },
-    { 121, 24, 80, 195, 26, 62, 44, 64, 85 },
-    { 144, 71, 10, 38, 171, 213, 144, 34, 26 },
-    { 170, 46, 55, 19, 136, 160, 33, 206, 71 },
-    { 63, 20, 8, 114, 114, 208, 12, 9, 226 },
-    { 81, 40, 11, 96, 182, 84, 29, 16, 36 } },
-  { { 134, 183, 89, 137, 98, 101, 106, 165, 148 },
-    { 72, 187, 100, 130, 157, 111, 32, 75, 80 },
-    { 66, 102, 167, 99, 74, 62, 40, 234, 128 },
-    { 41, 53, 9, 178, 241, 141, 26, 8, 107 },
-    { 74, 43, 26, 146, 73, 166, 49, 23, 157 },
-    { 65, 38, 105, 160, 51, 52, 31, 115, 128 },
-    { 104, 79, 12, 27, 217, 255, 87, 17, 7 },
-    { 87, 68, 71, 44, 114, 51, 15, 186, 23 },
-    { 47, 41, 14, 110, 182, 183, 21, 17, 194 },
-    { 66, 45, 25, 102, 197, 189, 23, 18, 22 } },
-  { { 88, 88, 147, 150, 42, 46, 45, 196, 205 },
-    { 43, 97, 183, 117, 85, 38, 35, 179, 61 },
-    { 39, 53, 200, 87, 26, 21, 43, 232, 171 },
-    { 56, 34, 51, 104, 114, 102, 29, 93, 77 },
-    { 39, 28, 85, 171, 58, 165, 90, 98, 64 },
-    { 34, 22, 116, 206, 23, 34, 43, 166, 73 },
-    { 107, 54, 32, 26, 51, 1, 81, 43, 31 },
-    { 68, 25, 106, 22, 64, 171, 36, 225, 114 },
-    { 34, 19, 21, 102, 132, 188, 16, 76, 124 },
-    { 62, 18, 78, 95, 85, 57, 50, 48, 51 } },
-  { { 193, 101, 35, 159, 215, 111, 89, 46, 111 },
-    { 60, 148, 31, 172, 219, 228, 21, 18, 111 },
-    { 112, 113, 77, 85, 179, 255, 38, 120, 114 },
-    { 40, 42, 1, 196, 245, 209, 10, 25, 109 },
-    { 88, 43, 29, 140, 166, 213, 37, 43, 154 },
-    { 61, 63, 30, 155, 67, 45, 68, 1, 209 },
-    { 100, 80, 8, 43, 154, 1, 51, 26, 71 },
-    { 142, 78, 78, 16, 255, 128, 34, 197, 171 },
-    { 41, 40, 5, 102, 211, 183, 4, 1, 221 },
-    { 51, 50, 17, 168, 209, 192, 23, 25, 82 } },
-  { { 138, 31, 36, 171, 27, 166, 38, 44, 229 },
-    { 67, 87, 58, 169, 82, 115, 26, 59, 179 },
-    { 63, 59, 90, 180, 59, 166, 93, 73, 154 },
-    { 40, 40, 21, 116, 143, 209, 34, 39, 175 },
-    { 47, 15, 16, 183, 34, 223, 49, 45, 183 },
-    { 46, 17, 33, 183, 6, 98, 15, 32, 183 },
-    { 57, 46, 22, 24, 128, 1, 54, 17, 37 },
-    { 65, 32, 73, 115, 28, 128, 23, 128, 205 },
-    { 40, 3, 9, 115, 51, 192, 18, 6, 223 },
-    { 87, 37, 9, 115, 59, 77, 64, 21, 47 } },
-  { { 104, 55, 44, 218, 9, 54, 53, 130, 226 },
-    { 64, 90, 70, 205, 40, 41, 23, 26, 57 },
-    { 54, 57, 112, 184, 5, 41, 38, 166, 213 },
-    { 30, 34, 26, 133, 152, 116, 10, 32, 134 },
-    { 39, 19, 53, 221, 26, 114, 32, 73, 255 },
-    { 31, 9, 65, 234, 2, 15, 1, 118, 73 },
-    { 75, 32, 12, 51, 192, 255, 160, 43, 51 },
-    { 88, 31, 35, 67, 102, 85, 55, 186, 85 },
-    { 56, 21, 23, 111, 59, 205, 45, 37, 192 },
-    { 55, 38, 70, 124, 73, 102, 1, 34, 98 } },
-  { { 125, 98, 42, 88, 104, 85, 117, 175, 82 },
-    { 95, 84, 53, 89, 128, 100, 113, 101, 45 },
-    { 75, 79, 123, 47, 51, 128, 81, 171, 1 },
-    { 57, 17, 5, 71, 102, 57, 53, 41, 49 },
-    { 38, 33, 13, 121, 57, 73, 26, 1, 85 },
-    { 41, 10, 67, 138, 77, 110, 90, 47, 114 },
-    { 115, 21, 2, 10, 102, 255, 166, 23, 6 },
-    { 101, 29, 16, 10, 85, 128, 101, 196, 26 },
-    { 57, 18, 10, 102, 102, 213, 34, 20, 43 },
-    { 117, 20, 15, 36, 163, 128, 68, 1, 26 } },
-  { { 102, 61, 71, 37, 34, 53, 31, 243, 192 },
-    { 69, 60, 71, 38, 73, 119, 28, 222, 37 },
-    { 68, 45, 128, 34, 1, 47, 11, 245, 171 },
-    { 62, 17, 19, 70, 146, 85, 55, 62, 70 },
-    { 37, 43, 37, 154, 100, 163, 85, 160, 1 },
-    { 63, 9, 92, 136, 28, 64, 32, 201, 85 },
-    { 75, 15, 9, 9, 64, 255, 184, 119, 16 },
-    { 86, 6, 28, 5, 64, 255, 25, 248, 1 },
-    { 56, 8, 17, 132, 137, 255, 55, 116, 128 },
-    { 58, 15, 20, 82, 135, 57, 26, 121, 40 } },
-  { { 164, 50, 31, 137, 154, 133, 25, 35, 218 },
-    { 51, 103, 44, 131, 131, 123, 31, 6, 158 },
-    { 86, 40, 64, 135, 148, 224, 45, 183, 128 },
-    { 22, 26, 17, 131, 240, 154, 14, 1, 209 },
-    { 45, 16, 21, 91, 64, 222, 7, 1, 197 },
-    { 56, 21, 39, 155, 60, 138, 23, 102, 213 },
-    { 83, 12, 13, 54, 192, 255, 68, 47, 28 },
-    { 85, 26, 85, 85, 128, 128, 32, 146, 171 },
-    { 18, 11, 7, 63, 144, 171, 4, 4, 246 },
-    { 35, 27, 10, 146, 174, 171, 12, 26, 128 } },
-  { { 190, 80, 35, 99, 180, 80, 126, 54, 45 },
-    { 85, 126, 47, 87, 176, 51, 41, 20, 32 },
-    { 101, 75, 128, 139, 118, 146, 116, 128, 85 },
-    { 56, 41, 15, 176, 236, 85, 37, 9, 62 },
-    { 71, 30, 17, 119, 118, 255, 17, 18, 138 },
-    { 101, 38, 60, 138, 55, 70, 43, 26, 142 },
-    { 146, 36, 19, 30, 171, 255, 97, 27, 20 },
-    { 138, 45, 61, 62, 219, 1, 81, 188, 64 },
-    { 32, 41, 20, 117, 151, 142, 20, 21, 163 },
-    { 112, 19, 12, 61, 195, 128, 48, 4, 24 } }
-};
-
-void VP8ResetProba(VP8Proba* const proba) {
-  memset(proba->segments_, 255u, sizeof(proba->segments_));
-  // proba->bands_[][] is initialized later
-}
-
-static void ParseIntraMode(VP8BitReader* const br,
-                           VP8Decoder* const dec, int mb_x) {
-  uint8_t* const top = dec->intra_t_ + 4 * mb_x;
-  uint8_t* const left = dec->intra_l_;
-  VP8MBData* const block = dec->mb_data_ + mb_x;
-
-  // Note: we don't save segment map (yet), as we don't expect
-  // to decode more than 1 keyframe.
-  if (dec->segment_hdr_.update_map_) {
-    // Hardcoded tree parsing
-    block->segment_ = !VP8GetBit(br, dec->proba_.segments_[0])
-                    ? VP8GetBit(br, dec->proba_.segments_[1])
-                    : 2 + VP8GetBit(br, dec->proba_.segments_[2]);
-  } else {
-    block->segment_ = 0;  // default for intra
-  }
-  if (dec->use_skip_proba_) block->skip_ = VP8GetBit(br, dec->skip_p_);
-
-  block->is_i4x4_ = !VP8GetBit(br, 145);   // decide for B_PRED first
-  if (!block->is_i4x4_) {
-    // Hardcoded 16x16 intra-mode decision tree.
-    const int ymode =
-        VP8GetBit(br, 156) ? (VP8GetBit(br, 128) ? TM_PRED : H_PRED)
-                           : (VP8GetBit(br, 163) ? V_PRED : DC_PRED);
-    block->imodes_[0] = ymode;
-    memset(top, ymode, 4 * sizeof(*top));
-    memset(left, ymode, 4 * sizeof(*left));
-  } else {
-    uint8_t* modes = block->imodes_;
-    int y;
-    for (y = 0; y < 4; ++y) {
-      int ymode = left[y];
-      int x;
-      for (x = 0; x < 4; ++x) {
-        const uint8_t* const prob = kBModesProba[top[x]][ymode];
-#if (USE_GENERIC_TREE == 1)
-        // Generic tree-parsing
-        int i = kYModesIntra4[VP8GetBit(br, prob[0])];
-        while (i > 0) {
-          i = kYModesIntra4[2 * i + VP8GetBit(br, prob[i])];
-        }
-        ymode = -i;
-#else
-        // Hardcoded tree parsing
-        ymode = !VP8GetBit(br, prob[0]) ? B_DC_PRED :
-                  !VP8GetBit(br, prob[1]) ? B_TM_PRED :
-                    !VP8GetBit(br, prob[2]) ? B_VE_PRED :
-                      !VP8GetBit(br, prob[3]) ?
-                        (!VP8GetBit(br, prob[4]) ? B_HE_PRED :
-                          (!VP8GetBit(br, prob[5]) ? B_RD_PRED : B_VR_PRED)) :
-                        (!VP8GetBit(br, prob[6]) ? B_LD_PRED :
-                          (!VP8GetBit(br, prob[7]) ? B_VL_PRED :
-                            (!VP8GetBit(br, prob[8]) ? B_HD_PRED : B_HU_PRED)));
-#endif  // USE_GENERIC_TREE
-        top[x] = ymode;
-      }
-      memcpy(modes, top, 4 * sizeof(*top));
-      modes += 4;
-      left[y] = ymode;
-    }
-  }
-  // Hardcoded UVMode decision tree
-  block->uvmode_ = !VP8GetBit(br, 142) ? DC_PRED
-                 : !VP8GetBit(br, 114) ? V_PRED
-                 : VP8GetBit(br, 183) ? TM_PRED : H_PRED;
-}
-
-int VP8ParseIntraModeRow(VP8BitReader* const br, VP8Decoder* const dec) {
-  int mb_x;
-  for (mb_x = 0; mb_x < dec->mb_w_; ++mb_x) {
-    ParseIntraMode(br, dec, mb_x);
-  }
-  return !dec->br_.eof_;
-}
-
-//------------------------------------------------------------------------------
-// Paragraph 13
-
-static const uint8_t
-    CoeffsUpdateProba[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS] = {
-  { { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 },
-      { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    }
-  },
-  { { { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 },
-      { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 }
-    },
-    { { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    }
-  },
-  { { { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 },
-      { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    }
-  },
-  { { { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 },
-      { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    }
-  }
-};
-
-// Paragraph 9.9
-
-static const uint8_t kBands[16 + 1] = {
-  0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
-  0  // extra entry as sentinel
-};
-
-void VP8ParseProba(VP8BitReader* const br, VP8Decoder* const dec) {
-  VP8Proba* const proba = &dec->proba_;
-  int t, b, c, p;
-  for (t = 0; t < NUM_TYPES; ++t) {
-    for (b = 0; b < NUM_BANDS; ++b) {
-      for (c = 0; c < NUM_CTX; ++c) {
-        for (p = 0; p < NUM_PROBAS; ++p) {
-          const int v = VP8GetBit(br, CoeffsUpdateProba[t][b][c][p]) ?
-                        VP8GetValue(br, 8) : CoeffsProba0[t][b][c][p];
-          proba->bands_[t][b].probas_[c][p] = v;
-        }
-      }
-    }
-    for (b = 0; b < 16 + 1; ++b) {
-      proba->bands_ptr_[t][b] = &proba->bands_[t][kBands[b]];
-    }
-  }
-  dec->use_skip_proba_ = VP8Get(br);
-  if (dec->use_skip_proba_) {
-    dec->skip_p_ = VP8GetValue(br, 8);
-  }
-}
-
diff --git a/ios/Pods/libwebp/src/dec/vp8_dec.c b/ios/Pods/libwebp/src/dec/vp8_dec.c
deleted file mode 100644
index c904b52..0000000
--- a/ios/Pods/libwebp/src/dec/vp8_dec.c
+++ /dev/null
@@ -1,721 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// main entry for the decoder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <stdlib.h>
-
-#include "src/dec/alphai_dec.h"
-#include "src/dec/vp8i_dec.h"
-#include "src/dec/vp8li_dec.h"
-#include "src/dec/webpi_dec.h"
-#include "src/utils/bit_reader_inl_utils.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-
-int WebPGetDecoderVersion(void) {
-  return (DEC_MAJ_VERSION << 16) | (DEC_MIN_VERSION << 8) | DEC_REV_VERSION;
-}
-
-//------------------------------------------------------------------------------
-// Signature and pointer-to-function for GetCoeffs() variants below.
-
-typedef int (*GetCoeffsFunc)(VP8BitReader* const br,
-                             const VP8BandProbas* const prob[],
-                             int ctx, const quant_t dq, int n, int16_t* out);
-static volatile GetCoeffsFunc GetCoeffs = NULL;
-
-static void InitGetCoeffs(void);
-
-//------------------------------------------------------------------------------
-// VP8Decoder
-
-static void SetOk(VP8Decoder* const dec) {
-  dec->status_ = VP8_STATUS_OK;
-  dec->error_msg_ = "OK";
-}
-
-int VP8InitIoInternal(VP8Io* const io, int version) {
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DECODER_ABI_VERSION)) {
-    return 0;  // mismatch error
-  }
-  if (io != NULL) {
-    memset(io, 0, sizeof(*io));
-  }
-  return 1;
-}
-
-VP8Decoder* VP8New(void) {
-  VP8Decoder* const dec = (VP8Decoder*)WebPSafeCalloc(1ULL, sizeof(*dec));
-  if (dec != NULL) {
-    SetOk(dec);
-    WebPGetWorkerInterface()->Init(&dec->worker_);
-    dec->ready_ = 0;
-    dec->num_parts_minus_one_ = 0;
-    InitGetCoeffs();
-  }
-  return dec;
-}
-
-VP8StatusCode VP8Status(VP8Decoder* const dec) {
-  if (!dec) return VP8_STATUS_INVALID_PARAM;
-  return dec->status_;
-}
-
-const char* VP8StatusMessage(VP8Decoder* const dec) {
-  if (dec == NULL) return "no object";
-  if (!dec->error_msg_) return "OK";
-  return dec->error_msg_;
-}
-
-void VP8Delete(VP8Decoder* const dec) {
-  if (dec != NULL) {
-    VP8Clear(dec);
-    WebPSafeFree(dec);
-  }
-}
-
-int VP8SetError(VP8Decoder* const dec,
-                VP8StatusCode error, const char* const msg) {
-  // The oldest error reported takes precedence over the new one.
-  if (dec->status_ == VP8_STATUS_OK) {
-    dec->status_ = error;
-    dec->error_msg_ = msg;
-    dec->ready_ = 0;
-  }
-  return 0;
-}
-
-//------------------------------------------------------------------------------
-
-int VP8CheckSignature(const uint8_t* const data, size_t data_size) {
-  return (data_size >= 3 &&
-          data[0] == 0x9d && data[1] == 0x01 && data[2] == 0x2a);
-}
-
-int VP8GetInfo(const uint8_t* data, size_t data_size, size_t chunk_size,
-               int* const width, int* const height) {
-  if (data == NULL || data_size < VP8_FRAME_HEADER_SIZE) {
-    return 0;         // not enough data
-  }
-  // check signature
-  if (!VP8CheckSignature(data + 3, data_size - 3)) {
-    return 0;         // Wrong signature.
-  } else {
-    const uint32_t bits = data[0] | (data[1] << 8) | (data[2] << 16);
-    const int key_frame = !(bits & 1);
-    const int w = ((data[7] << 8) | data[6]) & 0x3fff;
-    const int h = ((data[9] << 8) | data[8]) & 0x3fff;
-
-    if (!key_frame) {   // Not a keyframe.
-      return 0;
-    }
-
-    if (((bits >> 1) & 7) > 3) {
-      return 0;         // unknown profile
-    }
-    if (!((bits >> 4) & 1)) {
-      return 0;         // first frame is invisible!
-    }
-    if (((bits >> 5)) >= chunk_size) {  // partition_length
-      return 0;         // inconsistent size information.
-    }
-    if (w == 0 || h == 0) {
-      return 0;         // We don't support both width and height to be zero.
-    }
-
-    if (width) {
-      *width = w;
-    }
-    if (height) {
-      *height = h;
-    }
-
-    return 1;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Header parsing
-
-static void ResetSegmentHeader(VP8SegmentHeader* const hdr) {
-  assert(hdr != NULL);
-  hdr->use_segment_ = 0;
-  hdr->update_map_ = 0;
-  hdr->absolute_delta_ = 1;
-  memset(hdr->quantizer_, 0, sizeof(hdr->quantizer_));
-  memset(hdr->filter_strength_, 0, sizeof(hdr->filter_strength_));
-}
-
-// Paragraph 9.3
-static int ParseSegmentHeader(VP8BitReader* br,
-                              VP8SegmentHeader* hdr, VP8Proba* proba) {
-  assert(br != NULL);
-  assert(hdr != NULL);
-  hdr->use_segment_ = VP8Get(br);
-  if (hdr->use_segment_) {
-    hdr->update_map_ = VP8Get(br);
-    if (VP8Get(br)) {   // update data
-      int s;
-      hdr->absolute_delta_ = VP8Get(br);
-      for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
-        hdr->quantizer_[s] = VP8Get(br) ? VP8GetSignedValue(br, 7) : 0;
-      }
-      for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
-        hdr->filter_strength_[s] = VP8Get(br) ? VP8GetSignedValue(br, 6) : 0;
-      }
-    }
-    if (hdr->update_map_) {
-      int s;
-      for (s = 0; s < MB_FEATURE_TREE_PROBS; ++s) {
-        proba->segments_[s] = VP8Get(br) ? VP8GetValue(br, 8) : 255u;
-      }
-    }
-  } else {
-    hdr->update_map_ = 0;
-  }
-  return !br->eof_;
-}
-
-// Paragraph 9.5
-// This function returns VP8_STATUS_SUSPENDED if we don't have all the
-// necessary data in 'buf'.
-// This case is not necessarily an error (for incremental decoding).
-// Still, no bitreader is ever initialized to make it possible to read
-// unavailable memory.
-// If we don't even have the partitions' sizes, than VP8_STATUS_NOT_ENOUGH_DATA
-// is returned, and this is an unrecoverable error.
-// If the partitions were positioned ok, VP8_STATUS_OK is returned.
-static VP8StatusCode ParsePartitions(VP8Decoder* const dec,
-                                     const uint8_t* buf, size_t size) {
-  VP8BitReader* const br = &dec->br_;
-  const uint8_t* sz = buf;
-  const uint8_t* buf_end = buf + size;
-  const uint8_t* part_start;
-  size_t size_left = size;
-  size_t last_part;
-  size_t p;
-
-  dec->num_parts_minus_one_ = (1 << VP8GetValue(br, 2)) - 1;
-  last_part = dec->num_parts_minus_one_;
-  if (size < 3 * last_part) {
-    // we can't even read the sizes with sz[]! That's a failure.
-    return VP8_STATUS_NOT_ENOUGH_DATA;
-  }
-  part_start = buf + last_part * 3;
-  size_left -= last_part * 3;
-  for (p = 0; p < last_part; ++p) {
-    size_t psize = sz[0] | (sz[1] << 8) | (sz[2] << 16);
-    if (psize > size_left) psize = size_left;
-    VP8InitBitReader(dec->parts_ + p, part_start, psize);
-    part_start += psize;
-    size_left -= psize;
-    sz += 3;
-  }
-  VP8InitBitReader(dec->parts_ + last_part, part_start, size_left);
-  return (part_start < buf_end) ? VP8_STATUS_OK :
-           VP8_STATUS_SUSPENDED;   // Init is ok, but there's not enough data
-}
-
-// Paragraph 9.4
-static int ParseFilterHeader(VP8BitReader* br, VP8Decoder* const dec) {
-  VP8FilterHeader* const hdr = &dec->filter_hdr_;
-  hdr->simple_    = VP8Get(br);
-  hdr->level_     = VP8GetValue(br, 6);
-  hdr->sharpness_ = VP8GetValue(br, 3);
-  hdr->use_lf_delta_ = VP8Get(br);
-  if (hdr->use_lf_delta_) {
-    if (VP8Get(br)) {   // update lf-delta?
-      int i;
-      for (i = 0; i < NUM_REF_LF_DELTAS; ++i) {
-        if (VP8Get(br)) {
-          hdr->ref_lf_delta_[i] = VP8GetSignedValue(br, 6);
-        }
-      }
-      for (i = 0; i < NUM_MODE_LF_DELTAS; ++i) {
-        if (VP8Get(br)) {
-          hdr->mode_lf_delta_[i] = VP8GetSignedValue(br, 6);
-        }
-      }
-    }
-  }
-  dec->filter_type_ = (hdr->level_ == 0) ? 0 : hdr->simple_ ? 1 : 2;
-  return !br->eof_;
-}
-
-// Topmost call
-int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io) {
-  const uint8_t* buf;
-  size_t buf_size;
-  VP8FrameHeader* frm_hdr;
-  VP8PictureHeader* pic_hdr;
-  VP8BitReader* br;
-  VP8StatusCode status;
-
-  if (dec == NULL) {
-    return 0;
-  }
-  SetOk(dec);
-  if (io == NULL) {
-    return VP8SetError(dec, VP8_STATUS_INVALID_PARAM,
-                       "null VP8Io passed to VP8GetHeaders()");
-  }
-  buf = io->data;
-  buf_size = io->data_size;
-  if (buf_size < 4) {
-    return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA,
-                       "Truncated header.");
-  }
-
-  // Paragraph 9.1
-  {
-    const uint32_t bits = buf[0] | (buf[1] << 8) | (buf[2] << 16);
-    frm_hdr = &dec->frm_hdr_;
-    frm_hdr->key_frame_ = !(bits & 1);
-    frm_hdr->profile_ = (bits >> 1) & 7;
-    frm_hdr->show_ = (bits >> 4) & 1;
-    frm_hdr->partition_length_ = (bits >> 5);
-    if (frm_hdr->profile_ > 3) {
-      return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR,
-                         "Incorrect keyframe parameters.");
-    }
-    if (!frm_hdr->show_) {
-      return VP8SetError(dec, VP8_STATUS_UNSUPPORTED_FEATURE,
-                         "Frame not displayable.");
-    }
-    buf += 3;
-    buf_size -= 3;
-  }
-
-  pic_hdr = &dec->pic_hdr_;
-  if (frm_hdr->key_frame_) {
-    // Paragraph 9.2
-    if (buf_size < 7) {
-      return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA,
-                         "cannot parse picture header");
-    }
-    if (!VP8CheckSignature(buf, buf_size)) {
-      return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR,
-                         "Bad code word");
-    }
-    pic_hdr->width_ = ((buf[4] << 8) | buf[3]) & 0x3fff;
-    pic_hdr->xscale_ = buf[4] >> 6;   // ratio: 1, 5/4 5/3 or 2
-    pic_hdr->height_ = ((buf[6] << 8) | buf[5]) & 0x3fff;
-    pic_hdr->yscale_ = buf[6] >> 6;
-    buf += 7;
-    buf_size -= 7;
-
-    dec->mb_w_ = (pic_hdr->width_ + 15) >> 4;
-    dec->mb_h_ = (pic_hdr->height_ + 15) >> 4;
-
-    // Setup default output area (can be later modified during io->setup())
-    io->width = pic_hdr->width_;
-    io->height = pic_hdr->height_;
-    // IMPORTANT! use some sane dimensions in crop_* and scaled_* fields.
-    // So they can be used interchangeably without always testing for
-    // 'use_cropping'.
-    io->use_cropping = 0;
-    io->crop_top  = 0;
-    io->crop_left = 0;
-    io->crop_right  = io->width;
-    io->crop_bottom = io->height;
-    io->use_scaling  = 0;
-    io->scaled_width = io->width;
-    io->scaled_height = io->height;
-
-    io->mb_w = io->width;   // sanity check
-    io->mb_h = io->height;  // ditto
-
-    VP8ResetProba(&dec->proba_);
-    ResetSegmentHeader(&dec->segment_hdr_);
-  }
-
-  // Check if we have all the partition #0 available, and initialize dec->br_
-  // to read this partition (and this partition only).
-  if (frm_hdr->partition_length_ > buf_size) {
-    return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA,
-                       "bad partition length");
-  }
-
-  br = &dec->br_;
-  VP8InitBitReader(br, buf, frm_hdr->partition_length_);
-  buf += frm_hdr->partition_length_;
-  buf_size -= frm_hdr->partition_length_;
-
-  if (frm_hdr->key_frame_) {
-    pic_hdr->colorspace_ = VP8Get(br);
-    pic_hdr->clamp_type_ = VP8Get(br);
-  }
-  if (!ParseSegmentHeader(br, &dec->segment_hdr_, &dec->proba_)) {
-    return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR,
-                       "cannot parse segment header");
-  }
-  // Filter specs
-  if (!ParseFilterHeader(br, dec)) {
-    return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR,
-                       "cannot parse filter header");
-  }
-  status = ParsePartitions(dec, buf, buf_size);
-  if (status != VP8_STATUS_OK) {
-    return VP8SetError(dec, status, "cannot parse partitions");
-  }
-
-  // quantizer change
-  VP8ParseQuant(dec);
-
-  // Frame buffer marking
-  if (!frm_hdr->key_frame_) {
-    return VP8SetError(dec, VP8_STATUS_UNSUPPORTED_FEATURE,
-                       "Not a key frame.");
-  }
-
-  VP8Get(br);   // ignore the value of update_proba_
-
-  VP8ParseProba(br, dec);
-
-  // sanitized state
-  dec->ready_ = 1;
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-// Residual decoding (Paragraph 13.2 / 13.3)
-
-static const uint8_t kCat3[] = { 173, 148, 140, 0 };
-static const uint8_t kCat4[] = { 176, 155, 140, 135, 0 };
-static const uint8_t kCat5[] = { 180, 157, 141, 134, 130, 0 };
-static const uint8_t kCat6[] =
-  { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0 };
-static const uint8_t* const kCat3456[] = { kCat3, kCat4, kCat5, kCat6 };
-static const uint8_t kZigzag[16] = {
-  0, 1, 4, 8,  5, 2, 3, 6,  9, 12, 13, 10,  7, 11, 14, 15
-};
-
-// See section 13-2: http://tools.ietf.org/html/rfc6386#section-13.2
-static int GetLargeValue(VP8BitReader* const br, const uint8_t* const p) {
-  int v;
-  if (!VP8GetBit(br, p[3])) {
-    if (!VP8GetBit(br, p[4])) {
-      v = 2;
-    } else {
-      v = 3 + VP8GetBit(br, p[5]);
-    }
-  } else {
-    if (!VP8GetBit(br, p[6])) {
-      if (!VP8GetBit(br, p[7])) {
-        v = 5 + VP8GetBit(br, 159);
-      } else {
-        v = 7 + 2 * VP8GetBit(br, 165);
-        v += VP8GetBit(br, 145);
-      }
-    } else {
-      const uint8_t* tab;
-      const int bit1 = VP8GetBit(br, p[8]);
-      const int bit0 = VP8GetBit(br, p[9 + bit1]);
-      const int cat = 2 * bit1 + bit0;
-      v = 0;
-      for (tab = kCat3456[cat]; *tab; ++tab) {
-        v += v + VP8GetBit(br, *tab);
-      }
-      v += 3 + (8 << cat);
-    }
-  }
-  return v;
-}
-
-// Returns the position of the last non-zero coeff plus one
-static int GetCoeffsFast(VP8BitReader* const br,
-                         const VP8BandProbas* const prob[],
-                         int ctx, const quant_t dq, int n, int16_t* out) {
-  const uint8_t* p = prob[n]->probas_[ctx];
-  for (; n < 16; ++n) {
-    if (!VP8GetBit(br, p[0])) {
-      return n;  // previous coeff was last non-zero coeff
-    }
-    while (!VP8GetBit(br, p[1])) {       // sequence of zero coeffs
-      p = prob[++n]->probas_[0];
-      if (n == 16) return 16;
-    }
-    {        // non zero coeff
-      const VP8ProbaArray* const p_ctx = &prob[n + 1]->probas_[0];
-      int v;
-      if (!VP8GetBit(br, p[2])) {
-        v = 1;
-        p = p_ctx[1];
-      } else {
-        v = GetLargeValue(br, p);
-        p = p_ctx[2];
-      }
-      out[kZigzag[n]] = VP8GetSigned(br, v) * dq[n > 0];
-    }
-  }
-  return 16;
-}
-
-// This version of GetCoeffs() uses VP8GetBitAlt() which is an alternate version
-// of VP8GetBitAlt() targeting specific platforms.
-static int GetCoeffsAlt(VP8BitReader* const br,
-                        const VP8BandProbas* const prob[],
-                        int ctx, const quant_t dq, int n, int16_t* out) {
-  const uint8_t* p = prob[n]->probas_[ctx];
-  for (; n < 16; ++n) {
-    if (!VP8GetBitAlt(br, p[0])) {
-      return n;  // previous coeff was last non-zero coeff
-    }
-    while (!VP8GetBitAlt(br, p[1])) {       // sequence of zero coeffs
-      p = prob[++n]->probas_[0];
-      if (n == 16) return 16;
-    }
-    {        // non zero coeff
-      const VP8ProbaArray* const p_ctx = &prob[n + 1]->probas_[0];
-      int v;
-      if (!VP8GetBitAlt(br, p[2])) {
-        v = 1;
-        p = p_ctx[1];
-      } else {
-        v = GetLargeValue(br, p);
-        p = p_ctx[2];
-      }
-      out[kZigzag[n]] = VP8GetSigned(br, v) * dq[n > 0];
-    }
-  }
-  return 16;
-}
-
-static WEBP_TSAN_IGNORE_FUNCTION void InitGetCoeffs(void) {
-  if (GetCoeffs == NULL) {
-    if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) {
-      GetCoeffs = GetCoeffsAlt;
-    } else {
-      GetCoeffs = GetCoeffsFast;
-    }
-  }
-}
-
-static WEBP_INLINE uint32_t NzCodeBits(uint32_t nz_coeffs, int nz, int dc_nz) {
-  nz_coeffs <<= 2;
-  nz_coeffs |= (nz > 3) ? 3 : (nz > 1) ? 2 : dc_nz;
-  return nz_coeffs;
-}
-
-static int ParseResiduals(VP8Decoder* const dec,
-                          VP8MB* const mb, VP8BitReader* const token_br) {
-  const VP8BandProbas* (* const bands)[16 + 1] = dec->proba_.bands_ptr_;
-  const VP8BandProbas* const * ac_proba;
-  VP8MBData* const block = dec->mb_data_ + dec->mb_x_;
-  const VP8QuantMatrix* const q = &dec->dqm_[block->segment_];
-  int16_t* dst = block->coeffs_;
-  VP8MB* const left_mb = dec->mb_info_ - 1;
-  uint8_t tnz, lnz;
-  uint32_t non_zero_y = 0;
-  uint32_t non_zero_uv = 0;
-  int x, y, ch;
-  uint32_t out_t_nz, out_l_nz;
-  int first;
-
-  memset(dst, 0, 384 * sizeof(*dst));
-  if (!block->is_i4x4_) {    // parse DC
-    int16_t dc[16] = { 0 };
-    const int ctx = mb->nz_dc_ + left_mb->nz_dc_;
-    const int nz = GetCoeffs(token_br, bands[1], ctx, q->y2_mat_, 0, dc);
-    mb->nz_dc_ = left_mb->nz_dc_ = (nz > 0);
-    if (nz > 1) {   // more than just the DC -> perform the full transform
-      VP8TransformWHT(dc, dst);
-    } else {        // only DC is non-zero -> inlined simplified transform
-      int i;
-      const int dc0 = (dc[0] + 3) >> 3;
-      for (i = 0; i < 16 * 16; i += 16) dst[i] = dc0;
-    }
-    first = 1;
-    ac_proba = bands[0];
-  } else {
-    first = 0;
-    ac_proba = bands[3];
-  }
-
-  tnz = mb->nz_ & 0x0f;
-  lnz = left_mb->nz_ & 0x0f;
-  for (y = 0; y < 4; ++y) {
-    int l = lnz & 1;
-    uint32_t nz_coeffs = 0;
-    for (x = 0; x < 4; ++x) {
-      const int ctx = l + (tnz & 1);
-      const int nz = GetCoeffs(token_br, ac_proba, ctx, q->y1_mat_, first, dst);
-      l = (nz > first);
-      tnz = (tnz >> 1) | (l << 7);
-      nz_coeffs = NzCodeBits(nz_coeffs, nz, dst[0] != 0);
-      dst += 16;
-    }
-    tnz >>= 4;
-    lnz = (lnz >> 1) | (l << 7);
-    non_zero_y = (non_zero_y << 8) | nz_coeffs;
-  }
-  out_t_nz = tnz;
-  out_l_nz = lnz >> 4;
-
-  for (ch = 0; ch < 4; ch += 2) {
-    uint32_t nz_coeffs = 0;
-    tnz = mb->nz_ >> (4 + ch);
-    lnz = left_mb->nz_ >> (4 + ch);
-    for (y = 0; y < 2; ++y) {
-      int l = lnz & 1;
-      for (x = 0; x < 2; ++x) {
-        const int ctx = l + (tnz & 1);
-        const int nz = GetCoeffs(token_br, bands[2], ctx, q->uv_mat_, 0, dst);
-        l = (nz > 0);
-        tnz = (tnz >> 1) | (l << 3);
-        nz_coeffs = NzCodeBits(nz_coeffs, nz, dst[0] != 0);
-        dst += 16;
-      }
-      tnz >>= 2;
-      lnz = (lnz >> 1) | (l << 5);
-    }
-    // Note: we don't really need the per-4x4 details for U/V blocks.
-    non_zero_uv |= nz_coeffs << (4 * ch);
-    out_t_nz |= (tnz << 4) << ch;
-    out_l_nz |= (lnz & 0xf0) << ch;
-  }
-  mb->nz_ = out_t_nz;
-  left_mb->nz_ = out_l_nz;
-
-  block->non_zero_y_ = non_zero_y;
-  block->non_zero_uv_ = non_zero_uv;
-
-  // We look at the mode-code of each block and check if some blocks have less
-  // than three non-zero coeffs (code < 2). This is to avoid dithering flat and
-  // empty blocks.
-  block->dither_ = (non_zero_uv & 0xaaaa) ? 0 : q->dither_;
-
-  return !(non_zero_y | non_zero_uv);  // will be used for further optimization
-}
-
-//------------------------------------------------------------------------------
-// Main loop
-
-int VP8DecodeMB(VP8Decoder* const dec, VP8BitReader* const token_br) {
-  VP8MB* const left = dec->mb_info_ - 1;
-  VP8MB* const mb = dec->mb_info_ + dec->mb_x_;
-  VP8MBData* const block = dec->mb_data_ + dec->mb_x_;
-  int skip = dec->use_skip_proba_ ? block->skip_ : 0;
-
-  if (!skip) {
-    skip = ParseResiduals(dec, mb, token_br);
-  } else {
-    left->nz_ = mb->nz_ = 0;
-    if (!block->is_i4x4_) {
-      left->nz_dc_ = mb->nz_dc_ = 0;
-    }
-    block->non_zero_y_ = 0;
-    block->non_zero_uv_ = 0;
-    block->dither_ = 0;
-  }
-
-  if (dec->filter_type_ > 0) {  // store filter info
-    VP8FInfo* const finfo = dec->f_info_ + dec->mb_x_;
-    *finfo = dec->fstrengths_[block->segment_][block->is_i4x4_];
-    finfo->f_inner_ |= !skip;
-  }
-
-  return !token_br->eof_;
-}
-
-void VP8InitScanline(VP8Decoder* const dec) {
-  VP8MB* const left = dec->mb_info_ - 1;
-  left->nz_ = 0;
-  left->nz_dc_ = 0;
-  memset(dec->intra_l_, B_DC_PRED, sizeof(dec->intra_l_));
-  dec->mb_x_ = 0;
-}
-
-static int ParseFrame(VP8Decoder* const dec, VP8Io* io) {
-  for (dec->mb_y_ = 0; dec->mb_y_ < dec->br_mb_y_; ++dec->mb_y_) {
-    // Parse bitstream for this row.
-    VP8BitReader* const token_br =
-        &dec->parts_[dec->mb_y_ & dec->num_parts_minus_one_];
-    if (!VP8ParseIntraModeRow(&dec->br_, dec)) {
-      return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA,
-                         "Premature end-of-partition0 encountered.");
-    }
-    for (; dec->mb_x_ < dec->mb_w_; ++dec->mb_x_) {
-      if (!VP8DecodeMB(dec, token_br)) {
-        return VP8SetError(dec, VP8_STATUS_NOT_ENOUGH_DATA,
-                           "Premature end-of-file encountered.");
-      }
-    }
-    VP8InitScanline(dec);   // Prepare for next scanline
-
-    // Reconstruct, filter and emit the row.
-    if (!VP8ProcessRow(dec, io)) {
-      return VP8SetError(dec, VP8_STATUS_USER_ABORT, "Output aborted.");
-    }
-  }
-  if (dec->mt_method_ > 0) {
-    if (!WebPGetWorkerInterface()->Sync(&dec->worker_)) return 0;
-  }
-
-  return 1;
-}
-
-// Main entry point
-int VP8Decode(VP8Decoder* const dec, VP8Io* const io) {
-  int ok = 0;
-  if (dec == NULL) {
-    return 0;
-  }
-  if (io == NULL) {
-    return VP8SetError(dec, VP8_STATUS_INVALID_PARAM,
-                       "NULL VP8Io parameter in VP8Decode().");
-  }
-
-  if (!dec->ready_) {
-    if (!VP8GetHeaders(dec, io)) {
-      return 0;
-    }
-  }
-  assert(dec->ready_);
-
-  // Finish setting up the decoding parameter. Will call io->setup().
-  ok = (VP8EnterCritical(dec, io) == VP8_STATUS_OK);
-  if (ok) {   // good to go.
-    // Will allocate memory and prepare everything.
-    if (ok) ok = VP8InitFrame(dec, io);
-
-    // Main decoding loop
-    if (ok) ok = ParseFrame(dec, io);
-
-    // Exit.
-    ok &= VP8ExitCritical(dec, io);
-  }
-
-  if (!ok) {
-    VP8Clear(dec);
-    return 0;
-  }
-
-  dec->ready_ = 0;
-  return ok;
-}
-
-void VP8Clear(VP8Decoder* const dec) {
-  if (dec == NULL) {
-    return;
-  }
-  WebPGetWorkerInterface()->End(&dec->worker_);
-  WebPDeallocateAlphaMemory(dec);
-  WebPSafeFree(dec->mem_);
-  dec->mem_ = NULL;
-  dec->mem_size_ = 0;
-  memset(&dec->br_, 0, sizeof(dec->br_));
-  dec->ready_ = 0;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dec/vp8_dec.h b/ios/Pods/libwebp/src/dec/vp8_dec.h
deleted file mode 100644
index a05405d..0000000
--- a/ios/Pods/libwebp/src/dec/vp8_dec.h
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  Low-level API for VP8 decoder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_DEC_VP8_DEC_H_
-#define WEBP_DEC_VP8_DEC_H_
-
-#include "src/webp/decode.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Lower-level API
-//
-// These functions provide fine-grained control of the decoding process.
-// The call flow should resemble:
-//
-//   VP8Io io;
-//   VP8InitIo(&io);
-//   io.data = data;
-//   io.data_size = size;
-//   /* customize io's functions (setup()/put()/teardown()) if needed. */
-//
-//   VP8Decoder* dec = VP8New();
-//   int ok = VP8Decode(dec, &io);
-//   if (!ok) printf("Error: %s\n", VP8StatusMessage(dec));
-//   VP8Delete(dec);
-//   return ok;
-
-// Input / Output
-typedef struct VP8Io VP8Io;
-typedef int (*VP8IoPutHook)(const VP8Io* io);
-typedef int (*VP8IoSetupHook)(VP8Io* io);
-typedef void (*VP8IoTeardownHook)(const VP8Io* io);
-
-struct VP8Io {
-  // set by VP8GetHeaders()
-  int width, height;         // picture dimensions, in pixels (invariable).
-                             // These are the original, uncropped dimensions.
-                             // The actual area passed to put() is stored
-                             // in mb_w / mb_h fields.
-
-  // set before calling put()
-  int mb_y;                  // position of the current rows (in pixels)
-  int mb_w;                  // number of columns in the sample
-  int mb_h;                  // number of rows in the sample
-  const uint8_t* y, *u, *v;  // rows to copy (in yuv420 format)
-  int y_stride;              // row stride for luma
-  int uv_stride;             // row stride for chroma
-
-  void* opaque;              // user data
-
-  // called when fresh samples are available. Currently, samples are in
-  // YUV420 format, and can be up to width x 24 in size (depending on the
-  // in-loop filtering level, e.g.). Should return false in case of error
-  // or abort request. The actual size of the area to update is mb_w x mb_h
-  // in size, taking cropping into account.
-  VP8IoPutHook put;
-
-  // called just before starting to decode the blocks.
-  // Must return false in case of setup error, true otherwise. If false is
-  // returned, teardown() will NOT be called. But if the setup succeeded
-  // and true is returned, then teardown() will always be called afterward.
-  VP8IoSetupHook setup;
-
-  // Called just after block decoding is finished (or when an error occurred
-  // during put()). Is NOT called if setup() failed.
-  VP8IoTeardownHook teardown;
-
-  // this is a recommendation for the user-side yuv->rgb converter. This flag
-  // is set when calling setup() hook and can be overwritten by it. It then
-  // can be taken into consideration during the put() method.
-  int fancy_upsampling;
-
-  // Input buffer.
-  size_t data_size;
-  const uint8_t* data;
-
-  // If true, in-loop filtering will not be performed even if present in the
-  // bitstream. Switching off filtering may speed up decoding at the expense
-  // of more visible blocking. Note that output will also be non-compliant
-  // with the VP8 specifications.
-  int bypass_filtering;
-
-  // Cropping parameters.
-  int use_cropping;
-  int crop_left, crop_right, crop_top, crop_bottom;
-
-  // Scaling parameters.
-  int use_scaling;
-  int scaled_width, scaled_height;
-
-  // If non NULL, pointer to the alpha data (if present) corresponding to the
-  // start of the current row (That is: it is pre-offset by mb_y and takes
-  // cropping into account).
-  const uint8_t* a;
-};
-
-// Internal, version-checked, entry point
-int VP8InitIoInternal(VP8Io* const, int);
-
-// Set the custom IO function pointers and user-data. The setter for IO hooks
-// should be called before initiating incremental decoding. Returns true if
-// WebPIDecoder object is successfully modified, false otherwise.
-int WebPISetIOHooks(WebPIDecoder* const idec,
-                    VP8IoPutHook put,
-                    VP8IoSetupHook setup,
-                    VP8IoTeardownHook teardown,
-                    void* user_data);
-
-// Main decoding object. This is an opaque structure.
-typedef struct VP8Decoder VP8Decoder;
-
-// Create a new decoder object.
-VP8Decoder* VP8New(void);
-
-// Must be called to make sure 'io' is initialized properly.
-// Returns false in case of version mismatch. Upon such failure, no other
-// decoding function should be called (VP8Decode, VP8GetHeaders, ...)
-static WEBP_INLINE int VP8InitIo(VP8Io* const io) {
-  return VP8InitIoInternal(io, WEBP_DECODER_ABI_VERSION);
-}
-
-// Decode the VP8 frame header. Returns true if ok.
-// Note: 'io->data' must be pointing to the start of the VP8 frame header.
-int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io);
-
-// Decode a picture. Will call VP8GetHeaders() if it wasn't done already.
-// Returns false in case of error.
-int VP8Decode(VP8Decoder* const dec, VP8Io* const io);
-
-// Return current status of the decoder:
-VP8StatusCode VP8Status(VP8Decoder* const dec);
-
-// return readable string corresponding to the last status.
-const char* VP8StatusMessage(VP8Decoder* const dec);
-
-// Resets the decoder in its initial state, reclaiming memory.
-// Not a mandatory call between calls to VP8Decode().
-void VP8Clear(VP8Decoder* const dec);
-
-// Destroy the decoder object.
-void VP8Delete(VP8Decoder* const dec);
-
-//------------------------------------------------------------------------------
-// Miscellaneous VP8/VP8L bitstream probing functions.
-
-// Returns true if the next 3 bytes in data contain the VP8 signature.
-WEBP_EXTERN int VP8CheckSignature(const uint8_t* const data, size_t data_size);
-
-// Validates the VP8 data-header and retrieves basic header information viz
-// width and height. Returns 0 in case of formatting error. *width/*height
-// can be passed NULL.
-WEBP_EXTERN int VP8GetInfo(
-    const uint8_t* data,
-    size_t data_size,    // data available so far
-    size_t chunk_size,   // total data size expected in the chunk
-    int* const width, int* const height);
-
-// Returns true if the next byte(s) in data is a VP8L signature.
-WEBP_EXTERN int VP8LCheckSignature(const uint8_t* const data, size_t size);
-
-// Validates the VP8L data-header and retrieves basic header information viz
-// width, height and alpha. Returns 0 in case of formatting error.
-// width/height/has_alpha can be passed NULL.
-WEBP_EXTERN int VP8LGetInfo(
-    const uint8_t* data, size_t data_size,  // data available so far
-    int* const width, int* const height, int* const has_alpha);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DEC_VP8_DEC_H_
diff --git a/ios/Pods/libwebp/src/dec/vp8i_dec.h b/ios/Pods/libwebp/src/dec/vp8i_dec.h
deleted file mode 100644
index 2d7900a..0000000
--- a/ios/Pods/libwebp/src/dec/vp8i_dec.h
+++ /dev/null
@@ -1,319 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// VP8 decoder: internal header.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_DEC_VP8I_DEC_H_
-#define WEBP_DEC_VP8I_DEC_H_
-
-#include <string.h>     // for memcpy()
-#include "src/dec/common_dec.h"
-#include "src/dec/vp8li_dec.h"
-#include "src/utils/bit_reader_utils.h"
-#include "src/utils/random_utils.h"
-#include "src/utils/thread_utils.h"
-#include "src/dsp/dsp.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Various defines and enums
-
-// version numbers
-#define DEC_MAJ_VERSION 1
-#define DEC_MIN_VERSION 0
-#define DEC_REV_VERSION 2
-
-// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline).
-// Constraints are: We need to store one 16x16 block of luma samples (y),
-// and two 8x8 chroma blocks (u/v). These are better be 16-bytes aligned,
-// in order to be SIMD-friendly. We also need to store the top, left and
-// top-left samples (from previously decoded blocks), along with four
-// extra top-right samples for luma (intra4x4 prediction only).
-// One possible layout is, using 32 * (17 + 9) bytes:
-//
-//   .+------   <- only 1 pixel high
-//   .|yyyyt.
-//   .|yyyyt.
-//   .|yyyyt.
-//   .|yyyy..
-//   .+--.+--   <- only 1 pixel high
-//   .|uu.|vv
-//   .|uu.|vv
-//
-// Every character is a 4x4 block, with legend:
-//  '.' = unused
-//  'y' = y-samples   'u' = u-samples     'v' = u-samples
-//  '|' = left sample,   '-' = top sample,    '+' = top-left sample
-//  't' = extra top-right sample for 4x4 modes
-#define YUV_SIZE (BPS * 17 + BPS * 9)
-#define Y_OFF    (BPS * 1 + 8)
-#define U_OFF    (Y_OFF + BPS * 16 + BPS)
-#define V_OFF    (U_OFF + 16)
-
-// minimal width under which lossy multi-threading is always disabled
-#define MIN_WIDTH_FOR_THREADS 512
-
-//------------------------------------------------------------------------------
-// Headers
-
-typedef struct {
-  uint8_t key_frame_;
-  uint8_t profile_;
-  uint8_t show_;
-  uint32_t partition_length_;
-} VP8FrameHeader;
-
-typedef struct {
-  uint16_t width_;
-  uint16_t height_;
-  uint8_t xscale_;
-  uint8_t yscale_;
-  uint8_t colorspace_;   // 0 = YCbCr
-  uint8_t clamp_type_;
-} VP8PictureHeader;
-
-// segment features
-typedef struct {
-  int use_segment_;
-  int update_map_;        // whether to update the segment map or not
-  int absolute_delta_;    // absolute or delta values for quantizer and filter
-  int8_t quantizer_[NUM_MB_SEGMENTS];        // quantization changes
-  int8_t filter_strength_[NUM_MB_SEGMENTS];  // filter strength for segments
-} VP8SegmentHeader;
-
-// probas associated to one of the contexts
-typedef uint8_t VP8ProbaArray[NUM_PROBAS];
-
-typedef struct {   // all the probas associated to one band
-  VP8ProbaArray probas_[NUM_CTX];
-} VP8BandProbas;
-
-// Struct collecting all frame-persistent probabilities.
-typedef struct {
-  uint8_t segments_[MB_FEATURE_TREE_PROBS];
-  // Type: 0:Intra16-AC  1:Intra16-DC   2:Chroma   3:Intra4
-  VP8BandProbas bands_[NUM_TYPES][NUM_BANDS];
-  const VP8BandProbas* bands_ptr_[NUM_TYPES][16 + 1];
-} VP8Proba;
-
-// Filter parameters
-typedef struct {
-  int simple_;                  // 0=complex, 1=simple
-  int level_;                   // [0..63]
-  int sharpness_;               // [0..7]
-  int use_lf_delta_;
-  int ref_lf_delta_[NUM_REF_LF_DELTAS];
-  int mode_lf_delta_[NUM_MODE_LF_DELTAS];
-} VP8FilterHeader;
-
-//------------------------------------------------------------------------------
-// Informations about the macroblocks.
-
-typedef struct {  // filter specs
-  uint8_t f_limit_;      // filter limit in [3..189], or 0 if no filtering
-  uint8_t f_ilevel_;     // inner limit in [1..63]
-  uint8_t f_inner_;      // do inner filtering?
-  uint8_t hev_thresh_;   // high edge variance threshold in [0..2]
-} VP8FInfo;
-
-typedef struct {  // Top/Left Contexts used for syntax-parsing
-  uint8_t nz_;        // non-zero AC/DC coeffs (4bit for luma + 4bit for chroma)
-  uint8_t nz_dc_;     // non-zero DC coeff (1bit)
-} VP8MB;
-
-// Dequantization matrices
-typedef int quant_t[2];      // [DC / AC].  Can be 'uint16_t[2]' too (~slower).
-typedef struct {
-  quant_t y1_mat_, y2_mat_, uv_mat_;
-
-  int uv_quant_;   // U/V quantizer value
-  int dither_;     // dithering amplitude (0 = off, max=255)
-} VP8QuantMatrix;
-
-// Data needed to reconstruct a macroblock
-typedef struct {
-  int16_t coeffs_[384];   // 384 coeffs = (16+4+4) * 4*4
-  uint8_t is_i4x4_;       // true if intra4x4
-  uint8_t imodes_[16];    // one 16x16 mode (#0) or sixteen 4x4 modes
-  uint8_t uvmode_;        // chroma prediction mode
-  // bit-wise info about the content of each sub-4x4 blocks (in decoding order).
-  // Each of the 4x4 blocks for y/u/v is associated with a 2b code according to:
-  //   code=0 -> no coefficient
-  //   code=1 -> only DC
-  //   code=2 -> first three coefficients are non-zero
-  //   code=3 -> more than three coefficients are non-zero
-  // This allows to call specialized transform functions.
-  uint32_t non_zero_y_;
-  uint32_t non_zero_uv_;
-  uint8_t dither_;      // local dithering strength (deduced from non_zero_*)
-  uint8_t skip_;
-  uint8_t segment_;
-} VP8MBData;
-
-// Persistent information needed by the parallel processing
-typedef struct {
-  int id_;              // cache row to process (in [0..2])
-  int mb_y_;            // macroblock position of the row
-  int filter_row_;      // true if row-filtering is needed
-  VP8FInfo* f_info_;    // filter strengths (swapped with dec->f_info_)
-  VP8MBData* mb_data_;  // reconstruction data (swapped with dec->mb_data_)
-  VP8Io io_;            // copy of the VP8Io to pass to put()
-} VP8ThreadContext;
-
-// Saved top samples, per macroblock. Fits into a cache-line.
-typedef struct {
-  uint8_t y[16], u[8], v[8];
-} VP8TopSamples;
-
-//------------------------------------------------------------------------------
-// VP8Decoder: the main opaque structure handed over to user
-
-struct VP8Decoder {
-  VP8StatusCode status_;
-  int ready_;     // true if ready to decode a picture with VP8Decode()
-  const char* error_msg_;  // set when status_ is not OK.
-
-  // Main data source
-  VP8BitReader br_;
-
-  // headers
-  VP8FrameHeader   frm_hdr_;
-  VP8PictureHeader pic_hdr_;
-  VP8FilterHeader  filter_hdr_;
-  VP8SegmentHeader segment_hdr_;
-
-  // Worker
-  WebPWorker worker_;
-  int mt_method_;      // multi-thread method: 0=off, 1=[parse+recon][filter]
-                       // 2=[parse][recon+filter]
-  int cache_id_;       // current cache row
-  int num_caches_;     // number of cached rows of 16 pixels (1, 2 or 3)
-  VP8ThreadContext thread_ctx_;  // Thread context
-
-  // dimension, in macroblock units.
-  int mb_w_, mb_h_;
-
-  // Macroblock to process/filter, depending on cropping and filter_type.
-  int tl_mb_x_, tl_mb_y_;  // top-left MB that must be in-loop filtered
-  int br_mb_x_, br_mb_y_;  // last bottom-right MB that must be decoded
-
-  // number of partitions minus one.
-  uint32_t num_parts_minus_one_;
-  // per-partition boolean decoders.
-  VP8BitReader parts_[MAX_NUM_PARTITIONS];
-
-  // Dithering strength, deduced from decoding options
-  int dither_;                // whether to use dithering or not
-  VP8Random dithering_rg_;    // random generator for dithering
-
-  // dequantization (one set of DC/AC dequant factor per segment)
-  VP8QuantMatrix dqm_[NUM_MB_SEGMENTS];
-
-  // probabilities
-  VP8Proba proba_;
-  int use_skip_proba_;
-  uint8_t skip_p_;
-
-  // Boundary data cache and persistent buffers.
-  uint8_t* intra_t_;      // top intra modes values: 4 * mb_w_
-  uint8_t  intra_l_[4];   // left intra modes values
-
-  VP8TopSamples* yuv_t_;  // top y/u/v samples
-
-  VP8MB* mb_info_;        // contextual macroblock info (mb_w_ + 1)
-  VP8FInfo* f_info_;      // filter strength info
-  uint8_t* yuv_b_;        // main block for Y/U/V (size = YUV_SIZE)
-
-  uint8_t* cache_y_;      // macroblock row for storing unfiltered samples
-  uint8_t* cache_u_;
-  uint8_t* cache_v_;
-  int cache_y_stride_;
-  int cache_uv_stride_;
-
-  // main memory chunk for the above data. Persistent.
-  void* mem_;
-  size_t mem_size_;
-
-  // Per macroblock non-persistent infos.
-  int mb_x_, mb_y_;       // current position, in macroblock units
-  VP8MBData* mb_data_;    // parsed reconstruction data
-
-  // Filtering side-info
-  int filter_type_;                          // 0=off, 1=simple, 2=complex
-  VP8FInfo fstrengths_[NUM_MB_SEGMENTS][2];  // precalculated per-segment/type
-
-  // Alpha
-  struct ALPHDecoder* alph_dec_;  // alpha-plane decoder object
-  const uint8_t* alpha_data_;     // compressed alpha data (if present)
-  size_t alpha_data_size_;
-  int is_alpha_decoded_;      // true if alpha_data_ is decoded in alpha_plane_
-  uint8_t* alpha_plane_mem_;  // memory allocated for alpha_plane_
-  uint8_t* alpha_plane_;      // output. Persistent, contains the whole data.
-  const uint8_t* alpha_prev_line_;  // last decoded alpha row (or NULL)
-  int alpha_dithering_;       // derived from decoding options (0=off, 100=full)
-};
-
-//------------------------------------------------------------------------------
-// internal functions. Not public.
-
-// in vp8.c
-int VP8SetError(VP8Decoder* const dec,
-                VP8StatusCode error, const char* const msg);
-
-// in tree.c
-void VP8ResetProba(VP8Proba* const proba);
-void VP8ParseProba(VP8BitReader* const br, VP8Decoder* const dec);
-// parses one row of intra mode data in partition 0, returns !eof
-int VP8ParseIntraModeRow(VP8BitReader* const br, VP8Decoder* const dec);
-
-// in quant.c
-void VP8ParseQuant(VP8Decoder* const dec);
-
-// in frame.c
-int VP8InitFrame(VP8Decoder* const dec, VP8Io* const io);
-// Call io->setup() and finish setting up scan parameters.
-// After this call returns, one must always call VP8ExitCritical() with the
-// same parameters. Both functions should be used in pair. Returns VP8_STATUS_OK
-// if ok, otherwise sets and returns the error status on *dec.
-VP8StatusCode VP8EnterCritical(VP8Decoder* const dec, VP8Io* const io);
-// Must always be called in pair with VP8EnterCritical().
-// Returns false in case of error.
-int VP8ExitCritical(VP8Decoder* const dec, VP8Io* const io);
-// Return the multi-threading method to use (0=off), depending
-// on options and bitstream size. Only for lossy decoding.
-int VP8GetThreadMethod(const WebPDecoderOptions* const options,
-                       const WebPHeaderStructure* const headers,
-                       int width, int height);
-// Initialize dithering post-process if needed.
-void VP8InitDithering(const WebPDecoderOptions* const options,
-                      VP8Decoder* const dec);
-// Process the last decoded row (filtering + output).
-int VP8ProcessRow(VP8Decoder* const dec, VP8Io* const io);
-// To be called at the start of a new scanline, to initialize predictors.
-void VP8InitScanline(VP8Decoder* const dec);
-// Decode one macroblock. Returns false if there is not enough data.
-int VP8DecodeMB(VP8Decoder* const dec, VP8BitReader* const token_br);
-
-// in alpha.c
-const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec,
-                                      const VP8Io* const io,
-                                      int row, int num_rows);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DEC_VP8I_DEC_H_
diff --git a/ios/Pods/libwebp/src/dec/vp8l_dec.c b/ios/Pods/libwebp/src/dec/vp8l_dec.c
deleted file mode 100644
index 333bb3e..0000000
--- a/ios/Pods/libwebp/src/dec/vp8l_dec.c
+++ /dev/null
@@ -1,1742 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// main entry for the decoder
-//
-// Authors: Vikas Arora (vikaas.arora@gmail.com)
-//          Jyrki Alakuijala (jyrki@google.com)
-
-#include <stdlib.h>
-
-#include "src/dec/alphai_dec.h"
-#include "src/dec/vp8li_dec.h"
-#include "src/dsp/dsp.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-#include "src/dsp/yuv.h"
-#include "src/utils/endian_inl_utils.h"
-#include "src/utils/huffman_utils.h"
-#include "src/utils/utils.h"
-
-#define NUM_ARGB_CACHE_ROWS          16
-
-static const int kCodeLengthLiterals = 16;
-static const int kCodeLengthRepeatCode = 16;
-static const uint8_t kCodeLengthExtraBits[3] = { 2, 3, 7 };
-static const uint8_t kCodeLengthRepeatOffsets[3] = { 3, 3, 11 };
-
-// -----------------------------------------------------------------------------
-//  Five Huffman codes are used at each meta code:
-//  1. green + length prefix codes + color cache codes,
-//  2. alpha,
-//  3. red,
-//  4. blue, and,
-//  5. distance prefix codes.
-typedef enum {
-  GREEN = 0,
-  RED   = 1,
-  BLUE  = 2,
-  ALPHA = 3,
-  DIST  = 4
-} HuffIndex;
-
-static const uint16_t kAlphabetSize[HUFFMAN_CODES_PER_META_CODE] = {
-  NUM_LITERAL_CODES + NUM_LENGTH_CODES,
-  NUM_LITERAL_CODES, NUM_LITERAL_CODES, NUM_LITERAL_CODES,
-  NUM_DISTANCE_CODES
-};
-
-static const uint8_t kLiteralMap[HUFFMAN_CODES_PER_META_CODE] = {
-  0, 1, 1, 1, 0
-};
-
-#define NUM_CODE_LENGTH_CODES       19
-static const uint8_t kCodeLengthCodeOrder[NUM_CODE_LENGTH_CODES] = {
-  17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
-};
-
-#define CODE_TO_PLANE_CODES        120
-static const uint8_t kCodeToPlane[CODE_TO_PLANE_CODES] = {
-  0x18, 0x07, 0x17, 0x19, 0x28, 0x06, 0x27, 0x29, 0x16, 0x1a,
-  0x26, 0x2a, 0x38, 0x05, 0x37, 0x39, 0x15, 0x1b, 0x36, 0x3a,
-  0x25, 0x2b, 0x48, 0x04, 0x47, 0x49, 0x14, 0x1c, 0x35, 0x3b,
-  0x46, 0x4a, 0x24, 0x2c, 0x58, 0x45, 0x4b, 0x34, 0x3c, 0x03,
-  0x57, 0x59, 0x13, 0x1d, 0x56, 0x5a, 0x23, 0x2d, 0x44, 0x4c,
-  0x55, 0x5b, 0x33, 0x3d, 0x68, 0x02, 0x67, 0x69, 0x12, 0x1e,
-  0x66, 0x6a, 0x22, 0x2e, 0x54, 0x5c, 0x43, 0x4d, 0x65, 0x6b,
-  0x32, 0x3e, 0x78, 0x01, 0x77, 0x79, 0x53, 0x5d, 0x11, 0x1f,
-  0x64, 0x6c, 0x42, 0x4e, 0x76, 0x7a, 0x21, 0x2f, 0x75, 0x7b,
-  0x31, 0x3f, 0x63, 0x6d, 0x52, 0x5e, 0x00, 0x74, 0x7c, 0x41,
-  0x4f, 0x10, 0x20, 0x62, 0x6e, 0x30, 0x73, 0x7d, 0x51, 0x5f,
-  0x40, 0x72, 0x7e, 0x61, 0x6f, 0x50, 0x71, 0x7f, 0x60, 0x70
-};
-
-// Memory needed for lookup tables of one Huffman tree group. Red, blue, alpha
-// and distance alphabets are constant (256 for red, blue and alpha, 40 for
-// distance) and lookup table sizes for them in worst case are 630 and 410
-// respectively. Size of green alphabet depends on color cache size and is equal
-// to 256 (green component values) + 24 (length prefix values)
-// + color_cache_size (between 0 and 2048).
-// All values computed for 8-bit first level lookup with Mark Adler's tool:
-// http://www.hdfgroup.org/ftp/lib-external/zlib/zlib-1.2.5/examples/enough.c
-#define FIXED_TABLE_SIZE (630 * 3 + 410)
-static const uint16_t kTableSize[12] = {
-  FIXED_TABLE_SIZE + 654,
-  FIXED_TABLE_SIZE + 656,
-  FIXED_TABLE_SIZE + 658,
-  FIXED_TABLE_SIZE + 662,
-  FIXED_TABLE_SIZE + 670,
-  FIXED_TABLE_SIZE + 686,
-  FIXED_TABLE_SIZE + 718,
-  FIXED_TABLE_SIZE + 782,
-  FIXED_TABLE_SIZE + 912,
-  FIXED_TABLE_SIZE + 1168,
-  FIXED_TABLE_SIZE + 1680,
-  FIXED_TABLE_SIZE + 2704
-};
-
-static int DecodeImageStream(int xsize, int ysize,
-                             int is_level0,
-                             VP8LDecoder* const dec,
-                             uint32_t** const decoded_data);
-
-//------------------------------------------------------------------------------
-
-int VP8LCheckSignature(const uint8_t* const data, size_t size) {
-  return (size >= VP8L_FRAME_HEADER_SIZE &&
-          data[0] == VP8L_MAGIC_BYTE &&
-          (data[4] >> 5) == 0);  // version
-}
-
-static int ReadImageInfo(VP8LBitReader* const br,
-                         int* const width, int* const height,
-                         int* const has_alpha) {
-  if (VP8LReadBits(br, 8) != VP8L_MAGIC_BYTE) return 0;
-  *width = VP8LReadBits(br, VP8L_IMAGE_SIZE_BITS) + 1;
-  *height = VP8LReadBits(br, VP8L_IMAGE_SIZE_BITS) + 1;
-  *has_alpha = VP8LReadBits(br, 1);
-  if (VP8LReadBits(br, VP8L_VERSION_BITS) != 0) return 0;
-  return !br->eos_;
-}
-
-int VP8LGetInfo(const uint8_t* data, size_t data_size,
-                int* const width, int* const height, int* const has_alpha) {
-  if (data == NULL || data_size < VP8L_FRAME_HEADER_SIZE) {
-    return 0;         // not enough data
-  } else if (!VP8LCheckSignature(data, data_size)) {
-    return 0;         // bad signature
-  } else {
-    int w, h, a;
-    VP8LBitReader br;
-    VP8LInitBitReader(&br, data, data_size);
-    if (!ReadImageInfo(&br, &w, &h, &a)) {
-      return 0;
-    }
-    if (width != NULL) *width = w;
-    if (height != NULL) *height = h;
-    if (has_alpha != NULL) *has_alpha = a;
-    return 1;
-  }
-}
-
-//------------------------------------------------------------------------------
-
-static WEBP_INLINE int GetCopyDistance(int distance_symbol,
-                                       VP8LBitReader* const br) {
-  int extra_bits, offset;
-  if (distance_symbol < 4) {
-    return distance_symbol + 1;
-  }
-  extra_bits = (distance_symbol - 2) >> 1;
-  offset = (2 + (distance_symbol & 1)) << extra_bits;
-  return offset + VP8LReadBits(br, extra_bits) + 1;
-}
-
-static WEBP_INLINE int GetCopyLength(int length_symbol,
-                                     VP8LBitReader* const br) {
-  // Length and distance prefixes are encoded the same way.
-  return GetCopyDistance(length_symbol, br);
-}
-
-static WEBP_INLINE int PlaneCodeToDistance(int xsize, int plane_code) {
-  if (plane_code > CODE_TO_PLANE_CODES) {
-    return plane_code - CODE_TO_PLANE_CODES;
-  } else {
-    const int dist_code = kCodeToPlane[plane_code - 1];
-    const int yoffset = dist_code >> 4;
-    const int xoffset = 8 - (dist_code & 0xf);
-    const int dist = yoffset * xsize + xoffset;
-    return (dist >= 1) ? dist : 1;  // dist<1 can happen if xsize is very small
-  }
-}
-
-//------------------------------------------------------------------------------
-// Decodes the next Huffman code from bit-stream.
-// FillBitWindow(br) needs to be called at minimum every second call
-// to ReadSymbol, in order to pre-fetch enough bits.
-static WEBP_INLINE int ReadSymbol(const HuffmanCode* table,
-                                  VP8LBitReader* const br) {
-  int nbits;
-  uint32_t val = VP8LPrefetchBits(br);
-  table += val & HUFFMAN_TABLE_MASK;
-  nbits = table->bits - HUFFMAN_TABLE_BITS;
-  if (nbits > 0) {
-    VP8LSetBitPos(br, br->bit_pos_ + HUFFMAN_TABLE_BITS);
-    val = VP8LPrefetchBits(br);
-    table += table->value;
-    table += val & ((1 << nbits) - 1);
-  }
-  VP8LSetBitPos(br, br->bit_pos_ + table->bits);
-  return table->value;
-}
-
-// Reads packed symbol depending on GREEN channel
-#define BITS_SPECIAL_MARKER 0x100  // something large enough (and a bit-mask)
-#define PACKED_NON_LITERAL_CODE 0  // must be < NUM_LITERAL_CODES
-static WEBP_INLINE int ReadPackedSymbols(const HTreeGroup* group,
-                                         VP8LBitReader* const br,
-                                         uint32_t* const dst) {
-  const uint32_t val = VP8LPrefetchBits(br) & (HUFFMAN_PACKED_TABLE_SIZE - 1);
-  const HuffmanCode32 code = group->packed_table[val];
-  assert(group->use_packed_table);
-  if (code.bits < BITS_SPECIAL_MARKER) {
-    VP8LSetBitPos(br, br->bit_pos_ + code.bits);
-    *dst = code.value;
-    return PACKED_NON_LITERAL_CODE;
-  } else {
-    VP8LSetBitPos(br, br->bit_pos_ + code.bits - BITS_SPECIAL_MARKER);
-    assert(code.value >= NUM_LITERAL_CODES);
-    return code.value;
-  }
-}
-
-static int AccumulateHCode(HuffmanCode hcode, int shift,
-                           HuffmanCode32* const huff) {
-  huff->bits += hcode.bits;
-  huff->value |= (uint32_t)hcode.value << shift;
-  assert(huff->bits <= HUFFMAN_TABLE_BITS);
-  return hcode.bits;
-}
-
-static void BuildPackedTable(HTreeGroup* const htree_group) {
-  uint32_t code;
-  for (code = 0; code < HUFFMAN_PACKED_TABLE_SIZE; ++code) {
-    uint32_t bits = code;
-    HuffmanCode32* const huff = &htree_group->packed_table[bits];
-    HuffmanCode hcode = htree_group->htrees[GREEN][bits];
-    if (hcode.value >= NUM_LITERAL_CODES) {
-      huff->bits = hcode.bits + BITS_SPECIAL_MARKER;
-      huff->value = hcode.value;
-    } else {
-      huff->bits = 0;
-      huff->value = 0;
-      bits >>= AccumulateHCode(hcode, 8, huff);
-      bits >>= AccumulateHCode(htree_group->htrees[RED][bits], 16, huff);
-      bits >>= AccumulateHCode(htree_group->htrees[BLUE][bits], 0, huff);
-      bits >>= AccumulateHCode(htree_group->htrees[ALPHA][bits], 24, huff);
-      (void)bits;
-    }
-  }
-}
-
-static int ReadHuffmanCodeLengths(
-    VP8LDecoder* const dec, const int* const code_length_code_lengths,
-    int num_symbols, int* const code_lengths) {
-  int ok = 0;
-  VP8LBitReader* const br = &dec->br_;
-  int symbol;
-  int max_symbol;
-  int prev_code_len = DEFAULT_CODE_LENGTH;
-  HuffmanCode table[1 << LENGTHS_TABLE_BITS];
-
-  if (!VP8LBuildHuffmanTable(table, LENGTHS_TABLE_BITS,
-                             code_length_code_lengths,
-                             NUM_CODE_LENGTH_CODES)) {
-    goto End;
-  }
-
-  if (VP8LReadBits(br, 1)) {    // use length
-    const int length_nbits = 2 + 2 * VP8LReadBits(br, 3);
-    max_symbol = 2 + VP8LReadBits(br, length_nbits);
-    if (max_symbol > num_symbols) {
-      goto End;
-    }
-  } else {
-    max_symbol = num_symbols;
-  }
-
-  symbol = 0;
-  while (symbol < num_symbols) {
-    const HuffmanCode* p;
-    int code_len;
-    if (max_symbol-- == 0) break;
-    VP8LFillBitWindow(br);
-    p = &table[VP8LPrefetchBits(br) & LENGTHS_TABLE_MASK];
-    VP8LSetBitPos(br, br->bit_pos_ + p->bits);
-    code_len = p->value;
-    if (code_len < kCodeLengthLiterals) {
-      code_lengths[symbol++] = code_len;
-      if (code_len != 0) prev_code_len = code_len;
-    } else {
-      const int use_prev = (code_len == kCodeLengthRepeatCode);
-      const int slot = code_len - kCodeLengthLiterals;
-      const int extra_bits = kCodeLengthExtraBits[slot];
-      const int repeat_offset = kCodeLengthRepeatOffsets[slot];
-      int repeat = VP8LReadBits(br, extra_bits) + repeat_offset;
-      if (symbol + repeat > num_symbols) {
-        goto End;
-      } else {
-        const int length = use_prev ? prev_code_len : 0;
-        while (repeat-- > 0) code_lengths[symbol++] = length;
-      }
-    }
-  }
-  ok = 1;
-
- End:
-  if (!ok) dec->status_ = VP8_STATUS_BITSTREAM_ERROR;
-  return ok;
-}
-
-// 'code_lengths' is pre-allocated temporary buffer, used for creating Huffman
-// tree.
-static int ReadHuffmanCode(int alphabet_size, VP8LDecoder* const dec,
-                           int* const code_lengths, HuffmanCode* const table) {
-  int ok = 0;
-  int size = 0;
-  VP8LBitReader* const br = &dec->br_;
-  const int simple_code = VP8LReadBits(br, 1);
-
-  memset(code_lengths, 0, alphabet_size * sizeof(*code_lengths));
-
-  if (simple_code) {  // Read symbols, codes & code lengths directly.
-    const int num_symbols = VP8LReadBits(br, 1) + 1;
-    const int first_symbol_len_code = VP8LReadBits(br, 1);
-    // The first code is either 1 bit or 8 bit code.
-    int symbol = VP8LReadBits(br, (first_symbol_len_code == 0) ? 1 : 8);
-    code_lengths[symbol] = 1;
-    // The second code (if present), is always 8 bit long.
-    if (num_symbols == 2) {
-      symbol = VP8LReadBits(br, 8);
-      code_lengths[symbol] = 1;
-    }
-    ok = 1;
-  } else {  // Decode Huffman-coded code lengths.
-    int i;
-    int code_length_code_lengths[NUM_CODE_LENGTH_CODES] = { 0 };
-    const int num_codes = VP8LReadBits(br, 4) + 4;
-    if (num_codes > NUM_CODE_LENGTH_CODES) {
-      dec->status_ = VP8_STATUS_BITSTREAM_ERROR;
-      return 0;
-    }
-
-    for (i = 0; i < num_codes; ++i) {
-      code_length_code_lengths[kCodeLengthCodeOrder[i]] = VP8LReadBits(br, 3);
-    }
-    ok = ReadHuffmanCodeLengths(dec, code_length_code_lengths, alphabet_size,
-                                code_lengths);
-  }
-
-  ok = ok && !br->eos_;
-  if (ok) {
-    size = VP8LBuildHuffmanTable(table, HUFFMAN_TABLE_BITS,
-                                 code_lengths, alphabet_size);
-  }
-  if (!ok || size == 0) {
-    dec->status_ = VP8_STATUS_BITSTREAM_ERROR;
-    return 0;
-  }
-  return size;
-}
-
-static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize,
-                            int color_cache_bits, int allow_recursion) {
-  int i, j;
-  VP8LBitReader* const br = &dec->br_;
-  VP8LMetadata* const hdr = &dec->hdr_;
-  uint32_t* huffman_image = NULL;
-  HTreeGroup* htree_groups = NULL;
-  // When reading htrees, some might be unused, as the format allows it.
-  // We will still read them but put them in this htree_group_bogus.
-  HTreeGroup htree_group_bogus;
-  HuffmanCode* huffman_tables = NULL;
-  HuffmanCode* huffman_tables_bogus = NULL;
-  HuffmanCode* next = NULL;
-  int num_htree_groups = 1;
-  int num_htree_groups_max = 1;
-  int max_alphabet_size = 0;
-  int* code_lengths = NULL;
-  const int table_size = kTableSize[color_cache_bits];
-  int* mapping = NULL;
-  int ok = 0;
-
-  if (allow_recursion && VP8LReadBits(br, 1)) {
-    // use meta Huffman codes.
-    const int huffman_precision = VP8LReadBits(br, 3) + 2;
-    const int huffman_xsize = VP8LSubSampleSize(xsize, huffman_precision);
-    const int huffman_ysize = VP8LSubSampleSize(ysize, huffman_precision);
-    const int huffman_pixs = huffman_xsize * huffman_ysize;
-    if (!DecodeImageStream(huffman_xsize, huffman_ysize, 0, dec,
-                           &huffman_image)) {
-      goto Error;
-    }
-    hdr->huffman_subsample_bits_ = huffman_precision;
-    for (i = 0; i < huffman_pixs; ++i) {
-      // The huffman data is stored in red and green bytes.
-      const int group = (huffman_image[i] >> 8) & 0xffff;
-      huffman_image[i] = group;
-      if (group >= num_htree_groups_max) {
-        num_htree_groups_max = group + 1;
-      }
-    }
-    // Check the validity of num_htree_groups_max. If it seems too big, use a
-    // smaller value for later. This will prevent big memory allocations to end
-    // up with a bad bitstream anyway.
-    // The value of 1000 is totally arbitrary. We know that num_htree_groups_max
-    // is smaller than (1 << 16) and should be smaller than the number of pixels
-    // (though the format allows it to be bigger).
-    if (num_htree_groups_max > 1000 || num_htree_groups_max > xsize * ysize) {
-      // Create a mapping from the used indices to the minimal set of used
-      // values [0, num_htree_groups)
-      mapping = (int*)WebPSafeMalloc(num_htree_groups_max, sizeof(*mapping));
-      if (mapping == NULL) {
-        dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-        goto Error;
-      }
-      // -1 means a value is unmapped, and therefore unused in the Huffman
-      // image.
-      memset(mapping, 0xff, num_htree_groups_max * sizeof(*mapping));
-      for (num_htree_groups = 0, i = 0; i < huffman_pixs; ++i) {
-        // Get the current mapping for the group and remap the Huffman image.
-        int* const mapped_group = &mapping[huffman_image[i]];
-        if (*mapped_group == -1) *mapped_group = num_htree_groups++;
-        huffman_image[i] = *mapped_group;
-      }
-      huffman_tables_bogus = (HuffmanCode*)WebPSafeMalloc(
-          table_size, sizeof(*huffman_tables_bogus));
-      if (huffman_tables_bogus == NULL) {
-        dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-        goto Error;
-      }
-    } else {
-      num_htree_groups = num_htree_groups_max;
-    }
-  }
-
-  if (br->eos_) goto Error;
-
-  // Find maximum alphabet size for the htree group.
-  for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) {
-    int alphabet_size = kAlphabetSize[j];
-    if (j == 0 && color_cache_bits > 0) {
-      alphabet_size += 1 << color_cache_bits;
-    }
-    if (max_alphabet_size < alphabet_size) {
-      max_alphabet_size = alphabet_size;
-    }
-  }
-
-  code_lengths = (int*)WebPSafeCalloc((uint64_t)max_alphabet_size,
-                                      sizeof(*code_lengths));
-  huffman_tables = (HuffmanCode*)WebPSafeMalloc(num_htree_groups * table_size,
-                                                sizeof(*huffman_tables));
-  htree_groups = VP8LHtreeGroupsNew(num_htree_groups);
-
-  if (htree_groups == NULL || code_lengths == NULL || huffman_tables == NULL) {
-    dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  next = huffman_tables;
-  for (i = 0; i < num_htree_groups_max; ++i) {
-    // If the index "i" is unused in the Huffman image, read the coefficients
-    // but store them to a bogus htree_group.
-    const int is_bogus = (mapping != NULL && mapping[i] == -1);
-    HTreeGroup* const htree_group =
-        is_bogus ? &htree_group_bogus :
-        &htree_groups[(mapping == NULL) ? i : mapping[i]];
-    HuffmanCode** const htrees = htree_group->htrees;
-    HuffmanCode* huffman_tables_i = is_bogus ? huffman_tables_bogus : next;
-    int size;
-    int total_size = 0;
-    int is_trivial_literal = 1;
-    int max_bits = 0;
-    for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) {
-      int alphabet_size = kAlphabetSize[j];
-      htrees[j] = huffman_tables_i;
-      if (j == 0 && color_cache_bits > 0) {
-        alphabet_size += 1 << color_cache_bits;
-      }
-      size =
-          ReadHuffmanCode(alphabet_size, dec, code_lengths, huffman_tables_i);
-      if (size == 0) {
-        goto Error;
-      }
-      if (is_trivial_literal && kLiteralMap[j] == 1) {
-        is_trivial_literal = (huffman_tables_i->bits == 0);
-      }
-      total_size += huffman_tables_i->bits;
-      huffman_tables_i += size;
-      if (j <= ALPHA) {
-        int local_max_bits = code_lengths[0];
-        int k;
-        for (k = 1; k < alphabet_size; ++k) {
-          if (code_lengths[k] > local_max_bits) {
-            local_max_bits = code_lengths[k];
-          }
-        }
-        max_bits += local_max_bits;
-      }
-    }
-    if (!is_bogus) next = huffman_tables_i;
-    htree_group->is_trivial_literal = is_trivial_literal;
-    htree_group->is_trivial_code = 0;
-    if (is_trivial_literal) {
-      const int red = htrees[RED][0].value;
-      const int blue = htrees[BLUE][0].value;
-      const int alpha = htrees[ALPHA][0].value;
-      htree_group->literal_arb = ((uint32_t)alpha << 24) | (red << 16) | blue;
-      if (total_size == 0 && htrees[GREEN][0].value < NUM_LITERAL_CODES) {
-        htree_group->is_trivial_code = 1;
-        htree_group->literal_arb |= htrees[GREEN][0].value << 8;
-      }
-    }
-    htree_group->use_packed_table =
-        !htree_group->is_trivial_code && (max_bits < HUFFMAN_PACKED_BITS);
-    if (htree_group->use_packed_table) BuildPackedTable(htree_group);
-  }
-  ok = 1;
-
-  // All OK. Finalize pointers.
-  hdr->huffman_image_ = huffman_image;
-  hdr->num_htree_groups_ = num_htree_groups;
-  hdr->htree_groups_ = htree_groups;
-  hdr->huffman_tables_ = huffman_tables;
-
- Error:
-  WebPSafeFree(code_lengths);
-  WebPSafeFree(huffman_tables_bogus);
-  WebPSafeFree(mapping);
-  if (!ok) {
-    WebPSafeFree(huffman_image);
-    WebPSafeFree(huffman_tables);
-    VP8LHtreeGroupsFree(htree_groups);
-  }
-  return ok;
-}
-
-//------------------------------------------------------------------------------
-// Scaling.
-
-#if !defined(WEBP_REDUCE_SIZE)
-static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) {
-  const int num_channels = 4;
-  const int in_width = io->mb_w;
-  const int out_width = io->scaled_width;
-  const int in_height = io->mb_h;
-  const int out_height = io->scaled_height;
-  const uint64_t work_size = 2 * num_channels * (uint64_t)out_width;
-  rescaler_t* work;        // Rescaler work area.
-  const uint64_t scaled_data_size = (uint64_t)out_width;
-  uint32_t* scaled_data;  // Temporary storage for scaled BGRA data.
-  const uint64_t memory_size = sizeof(*dec->rescaler) +
-                               work_size * sizeof(*work) +
-                               scaled_data_size * sizeof(*scaled_data);
-  uint8_t* memory = (uint8_t*)WebPSafeMalloc(memory_size, sizeof(*memory));
-  if (memory == NULL) {
-    dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-    return 0;
-  }
-  assert(dec->rescaler_memory == NULL);
-  dec->rescaler_memory = memory;
-
-  dec->rescaler = (WebPRescaler*)memory;
-  memory += sizeof(*dec->rescaler);
-  work = (rescaler_t*)memory;
-  memory += work_size * sizeof(*work);
-  scaled_data = (uint32_t*)memory;
-
-  WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data,
-                   out_width, out_height, 0, num_channels, work);
-  return 1;
-}
-#endif   // WEBP_REDUCE_SIZE
-
-//------------------------------------------------------------------------------
-// Export to ARGB
-
-#if !defined(WEBP_REDUCE_SIZE)
-
-// We have special "export" function since we need to convert from BGRA
-static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace,
-                  int rgba_stride, uint8_t* const rgba) {
-  uint32_t* const src = (uint32_t*)rescaler->dst;
-  const int dst_width = rescaler->dst_width;
-  int num_lines_out = 0;
-  while (WebPRescalerHasPendingOutput(rescaler)) {
-    uint8_t* const dst = rgba + num_lines_out * rgba_stride;
-    WebPRescalerExportRow(rescaler);
-    WebPMultARGBRow(src, dst_width, 1);
-    VP8LConvertFromBGRA(src, dst_width, colorspace, dst);
-    ++num_lines_out;
-  }
-  return num_lines_out;
-}
-
-// Emit scaled rows.
-static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec,
-                                uint8_t* in, int in_stride, int mb_h,
-                                uint8_t* const out, int out_stride) {
-  const WEBP_CSP_MODE colorspace = dec->output_->colorspace;
-  int num_lines_in = 0;
-  int num_lines_out = 0;
-  while (num_lines_in < mb_h) {
-    uint8_t* const row_in = in + num_lines_in * in_stride;
-    uint8_t* const row_out = out + num_lines_out * out_stride;
-    const int lines_left = mb_h - num_lines_in;
-    const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left);
-    int lines_imported;
-    assert(needed_lines > 0 && needed_lines <= lines_left);
-    WebPMultARGBRows(row_in, in_stride,
-                     dec->rescaler->src_width, needed_lines, 0);
-    lines_imported =
-        WebPRescalerImport(dec->rescaler, lines_left, row_in, in_stride);
-    assert(lines_imported == needed_lines);
-    num_lines_in += lines_imported;
-    num_lines_out += Export(dec->rescaler, colorspace, out_stride, row_out);
-  }
-  return num_lines_out;
-}
-
-#endif   // WEBP_REDUCE_SIZE
-
-// Emit rows without any scaling.
-static int EmitRows(WEBP_CSP_MODE colorspace,
-                    const uint8_t* row_in, int in_stride,
-                    int mb_w, int mb_h,
-                    uint8_t* const out, int out_stride) {
-  int lines = mb_h;
-  uint8_t* row_out = out;
-  while (lines-- > 0) {
-    VP8LConvertFromBGRA((const uint32_t*)row_in, mb_w, colorspace, row_out);
-    row_in += in_stride;
-    row_out += out_stride;
-  }
-  return mb_h;  // Num rows out == num rows in.
-}
-
-//------------------------------------------------------------------------------
-// Export to YUVA
-
-static void ConvertToYUVA(const uint32_t* const src, int width, int y_pos,
-                          const WebPDecBuffer* const output) {
-  const WebPYUVABuffer* const buf = &output->u.YUVA;
-
-  // first, the luma plane
-  WebPConvertARGBToY(src, buf->y + y_pos * buf->y_stride, width);
-
-  // then U/V planes
-  {
-    uint8_t* const u = buf->u + (y_pos >> 1) * buf->u_stride;
-    uint8_t* const v = buf->v + (y_pos >> 1) * buf->v_stride;
-    // even lines: store values
-    // odd lines: average with previous values
-    WebPConvertARGBToUV(src, u, v, width, !(y_pos & 1));
-  }
-  // Lastly, store alpha if needed.
-  if (buf->a != NULL) {
-    uint8_t* const a = buf->a + y_pos * buf->a_stride;
-#if defined(WORDS_BIGENDIAN)
-    WebPExtractAlpha((uint8_t*)src + 0, 0, width, 1, a, 0);
-#else
-    WebPExtractAlpha((uint8_t*)src + 3, 0, width, 1, a, 0);
-#endif
-  }
-}
-
-static int ExportYUVA(const VP8LDecoder* const dec, int y_pos) {
-  WebPRescaler* const rescaler = dec->rescaler;
-  uint32_t* const src = (uint32_t*)rescaler->dst;
-  const int dst_width = rescaler->dst_width;
-  int num_lines_out = 0;
-  while (WebPRescalerHasPendingOutput(rescaler)) {
-    WebPRescalerExportRow(rescaler);
-    WebPMultARGBRow(src, dst_width, 1);
-    ConvertToYUVA(src, dst_width, y_pos, dec->output_);
-    ++y_pos;
-    ++num_lines_out;
-  }
-  return num_lines_out;
-}
-
-static int EmitRescaledRowsYUVA(const VP8LDecoder* const dec,
-                                uint8_t* in, int in_stride, int mb_h) {
-  int num_lines_in = 0;
-  int y_pos = dec->last_out_row_;
-  while (num_lines_in < mb_h) {
-    const int lines_left = mb_h - num_lines_in;
-    const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left);
-    int lines_imported;
-    WebPMultARGBRows(in, in_stride, dec->rescaler->src_width, needed_lines, 0);
-    lines_imported =
-        WebPRescalerImport(dec->rescaler, lines_left, in, in_stride);
-    assert(lines_imported == needed_lines);
-    num_lines_in += lines_imported;
-    in += needed_lines * in_stride;
-    y_pos += ExportYUVA(dec, y_pos);
-  }
-  return y_pos;
-}
-
-static int EmitRowsYUVA(const VP8LDecoder* const dec,
-                        const uint8_t* in, int in_stride,
-                        int mb_w, int num_rows) {
-  int y_pos = dec->last_out_row_;
-  while (num_rows-- > 0) {
-    ConvertToYUVA((const uint32_t*)in, mb_w, y_pos, dec->output_);
-    in += in_stride;
-    ++y_pos;
-  }
-  return y_pos;
-}
-
-//------------------------------------------------------------------------------
-// Cropping.
-
-// Sets io->mb_y, io->mb_h & io->mb_w according to start row, end row and
-// crop options. Also updates the input data pointer, so that it points to the
-// start of the cropped window. Note that pixels are in ARGB format even if
-// 'in_data' is uint8_t*.
-// Returns true if the crop window is not empty.
-static int SetCropWindow(VP8Io* const io, int y_start, int y_end,
-                         uint8_t** const in_data, int pixel_stride) {
-  assert(y_start < y_end);
-  assert(io->crop_left < io->crop_right);
-  if (y_end > io->crop_bottom) {
-    y_end = io->crop_bottom;  // make sure we don't overflow on last row.
-  }
-  if (y_start < io->crop_top) {
-    const int delta = io->crop_top - y_start;
-    y_start = io->crop_top;
-    *in_data += delta * pixel_stride;
-  }
-  if (y_start >= y_end) return 0;  // Crop window is empty.
-
-  *in_data += io->crop_left * sizeof(uint32_t);
-
-  io->mb_y = y_start - io->crop_top;
-  io->mb_w = io->crop_right - io->crop_left;
-  io->mb_h = y_end - y_start;
-  return 1;  // Non-empty crop window.
-}
-
-//------------------------------------------------------------------------------
-
-static WEBP_INLINE int GetMetaIndex(
-    const uint32_t* const image, int xsize, int bits, int x, int y) {
-  if (bits == 0) return 0;
-  return image[xsize * (y >> bits) + (x >> bits)];
-}
-
-static WEBP_INLINE HTreeGroup* GetHtreeGroupForPos(VP8LMetadata* const hdr,
-                                                   int x, int y) {
-  const int meta_index = GetMetaIndex(hdr->huffman_image_, hdr->huffman_xsize_,
-                                      hdr->huffman_subsample_bits_, x, y);
-  assert(meta_index < hdr->num_htree_groups_);
-  return hdr->htree_groups_ + meta_index;
-}
-
-//------------------------------------------------------------------------------
-// Main loop, with custom row-processing function
-
-typedef void (*ProcessRowsFunc)(VP8LDecoder* const dec, int row);
-
-static void ApplyInverseTransforms(VP8LDecoder* const dec, int num_rows,
-                                   const uint32_t* const rows) {
-  int n = dec->next_transform_;
-  const int cache_pixs = dec->width_ * num_rows;
-  const int start_row = dec->last_row_;
-  const int end_row = start_row + num_rows;
-  const uint32_t* rows_in = rows;
-  uint32_t* const rows_out = dec->argb_cache_;
-
-  // Inverse transforms.
-  while (n-- > 0) {
-    VP8LTransform* const transform = &dec->transforms_[n];
-    VP8LInverseTransform(transform, start_row, end_row, rows_in, rows_out);
-    rows_in = rows_out;
-  }
-  if (rows_in != rows_out) {
-    // No transform called, hence just copy.
-    memcpy(rows_out, rows_in, cache_pixs * sizeof(*rows_out));
-  }
-}
-
-// Processes (transforms, scales & color-converts) the rows decoded after the
-// last call.
-static void ProcessRows(VP8LDecoder* const dec, int row) {
-  const uint32_t* const rows = dec->pixels_ + dec->width_ * dec->last_row_;
-  const int num_rows = row - dec->last_row_;
-
-  assert(row <= dec->io_->crop_bottom);
-  // We can't process more than NUM_ARGB_CACHE_ROWS at a time (that's the size
-  // of argb_cache_), but we currently don't need more than that.
-  assert(num_rows <= NUM_ARGB_CACHE_ROWS);
-  if (num_rows > 0) {    // Emit output.
-    VP8Io* const io = dec->io_;
-    uint8_t* rows_data = (uint8_t*)dec->argb_cache_;
-    const int in_stride = io->width * sizeof(uint32_t);  // in unit of RGBA
-
-    ApplyInverseTransforms(dec, num_rows, rows);
-    if (!SetCropWindow(io, dec->last_row_, row, &rows_data, in_stride)) {
-      // Nothing to output (this time).
-    } else {
-      const WebPDecBuffer* const output = dec->output_;
-      if (WebPIsRGBMode(output->colorspace)) {  // convert to RGBA
-        const WebPRGBABuffer* const buf = &output->u.RGBA;
-        uint8_t* const rgba = buf->rgba + dec->last_out_row_ * buf->stride;
-        const int num_rows_out =
-#if !defined(WEBP_REDUCE_SIZE)
-         io->use_scaling ?
-            EmitRescaledRowsRGBA(dec, rows_data, in_stride, io->mb_h,
-                                 rgba, buf->stride) :
-#endif  // WEBP_REDUCE_SIZE
-            EmitRows(output->colorspace, rows_data, in_stride,
-                     io->mb_w, io->mb_h, rgba, buf->stride);
-        // Update 'last_out_row_'.
-        dec->last_out_row_ += num_rows_out;
-      } else {                              // convert to YUVA
-        dec->last_out_row_ = io->use_scaling ?
-            EmitRescaledRowsYUVA(dec, rows_data, in_stride, io->mb_h) :
-            EmitRowsYUVA(dec, rows_data, in_stride, io->mb_w, io->mb_h);
-      }
-      assert(dec->last_out_row_ <= output->height);
-    }
-  }
-
-  // Update 'last_row_'.
-  dec->last_row_ = row;
-  assert(dec->last_row_ <= dec->height_);
-}
-
-// Row-processing for the special case when alpha data contains only one
-// transform (color indexing), and trivial non-green literals.
-static int Is8bOptimizable(const VP8LMetadata* const hdr) {
-  int i;
-  if (hdr->color_cache_size_ > 0) return 0;
-  // When the Huffman tree contains only one symbol, we can skip the
-  // call to ReadSymbol() for red/blue/alpha channels.
-  for (i = 0; i < hdr->num_htree_groups_; ++i) {
-    HuffmanCode** const htrees = hdr->htree_groups_[i].htrees;
-    if (htrees[RED][0].bits > 0) return 0;
-    if (htrees[BLUE][0].bits > 0) return 0;
-    if (htrees[ALPHA][0].bits > 0) return 0;
-  }
-  return 1;
-}
-
-static void AlphaApplyFilter(ALPHDecoder* const alph_dec,
-                             int first_row, int last_row,
-                             uint8_t* out, int stride) {
-  if (alph_dec->filter_ != WEBP_FILTER_NONE) {
-    int y;
-    const uint8_t* prev_line = alph_dec->prev_line_;
-    assert(WebPUnfilters[alph_dec->filter_] != NULL);
-    for (y = first_row; y < last_row; ++y) {
-      WebPUnfilters[alph_dec->filter_](prev_line, out, out, stride);
-      prev_line = out;
-      out += stride;
-    }
-    alph_dec->prev_line_ = prev_line;
-  }
-}
-
-static void ExtractPalettedAlphaRows(VP8LDecoder* const dec, int last_row) {
-  // For vertical and gradient filtering, we need to decode the part above the
-  // crop_top row, in order to have the correct spatial predictors.
-  ALPHDecoder* const alph_dec = (ALPHDecoder*)dec->io_->opaque;
-  const int top_row =
-      (alph_dec->filter_ == WEBP_FILTER_NONE ||
-       alph_dec->filter_ == WEBP_FILTER_HORIZONTAL) ? dec->io_->crop_top
-                                                    : dec->last_row_;
-  const int first_row = (dec->last_row_ < top_row) ? top_row : dec->last_row_;
-  assert(last_row <= dec->io_->crop_bottom);
-  if (last_row > first_row) {
-    // Special method for paletted alpha data. We only process the cropped area.
-    const int width = dec->io_->width;
-    uint8_t* out = alph_dec->output_ + width * first_row;
-    const uint8_t* const in =
-      (uint8_t*)dec->pixels_ + dec->width_ * first_row;
-    VP8LTransform* const transform = &dec->transforms_[0];
-    assert(dec->next_transform_ == 1);
-    assert(transform->type_ == COLOR_INDEXING_TRANSFORM);
-    VP8LColorIndexInverseTransformAlpha(transform, first_row, last_row,
-                                        in, out);
-    AlphaApplyFilter(alph_dec, first_row, last_row, out, width);
-  }
-  dec->last_row_ = dec->last_out_row_ = last_row;
-}
-
-//------------------------------------------------------------------------------
-// Helper functions for fast pattern copy (8b and 32b)
-
-// cyclic rotation of pattern word
-static WEBP_INLINE uint32_t Rotate8b(uint32_t V) {
-#if defined(WORDS_BIGENDIAN)
-  return ((V & 0xff000000u) >> 24) | (V << 8);
-#else
-  return ((V & 0xffu) << 24) | (V >> 8);
-#endif
-}
-
-// copy 1, 2 or 4-bytes pattern
-static WEBP_INLINE void CopySmallPattern8b(const uint8_t* src, uint8_t* dst,
-                                           int length, uint32_t pattern) {
-  int i;
-  // align 'dst' to 4-bytes boundary. Adjust the pattern along the way.
-  while ((uintptr_t)dst & 3) {
-    *dst++ = *src++;
-    pattern = Rotate8b(pattern);
-    --length;
-  }
-  // Copy the pattern 4 bytes at a time.
-  for (i = 0; i < (length >> 2); ++i) {
-    ((uint32_t*)dst)[i] = pattern;
-  }
-  // Finish with left-overs. 'pattern' is still correctly positioned,
-  // so no Rotate8b() call is needed.
-  for (i <<= 2; i < length; ++i) {
-    dst[i] = src[i];
-  }
-}
-
-static WEBP_INLINE void CopyBlock8b(uint8_t* const dst, int dist, int length) {
-  const uint8_t* src = dst - dist;
-  if (length >= 8) {
-    uint32_t pattern = 0;
-    switch (dist) {
-      case 1:
-        pattern = src[0];
-#if defined(__arm__) || defined(_M_ARM)   // arm doesn't like multiply that much
-        pattern |= pattern << 8;
-        pattern |= pattern << 16;
-#elif defined(WEBP_USE_MIPS_DSP_R2)
-        __asm__ volatile ("replv.qb %0, %0" : "+r"(pattern));
-#else
-        pattern = 0x01010101u * pattern;
-#endif
-        break;
-      case 2:
-#if !defined(WORDS_BIGENDIAN)
-        memcpy(&pattern, src, sizeof(uint16_t));
-#else
-        pattern = ((uint32_t)src[0] << 8) | src[1];
-#endif
-#if defined(__arm__) || defined(_M_ARM)
-        pattern |= pattern << 16;
-#elif defined(WEBP_USE_MIPS_DSP_R2)
-        __asm__ volatile ("replv.ph %0, %0" : "+r"(pattern));
-#else
-        pattern = 0x00010001u * pattern;
-#endif
-        break;
-      case 4:
-        memcpy(&pattern, src, sizeof(uint32_t));
-        break;
-      default:
-        goto Copy;
-        break;
-    }
-    CopySmallPattern8b(src, dst, length, pattern);
-    return;
-  }
- Copy:
-  if (dist >= length) {  // no overlap -> use memcpy()
-    memcpy(dst, src, length * sizeof(*dst));
-  } else {
-    int i;
-    for (i = 0; i < length; ++i) dst[i] = src[i];
-  }
-}
-
-// copy pattern of 1 or 2 uint32_t's
-static WEBP_INLINE void CopySmallPattern32b(const uint32_t* src,
-                                            uint32_t* dst,
-                                            int length, uint64_t pattern) {
-  int i;
-  if ((uintptr_t)dst & 4) {           // Align 'dst' to 8-bytes boundary.
-    *dst++ = *src++;
-    pattern = (pattern >> 32) | (pattern << 32);
-    --length;
-  }
-  assert(0 == ((uintptr_t)dst & 7));
-  for (i = 0; i < (length >> 1); ++i) {
-    ((uint64_t*)dst)[i] = pattern;    // Copy the pattern 8 bytes at a time.
-  }
-  if (length & 1) {                   // Finish with left-over.
-    dst[i << 1] = src[i << 1];
-  }
-}
-
-static WEBP_INLINE void CopyBlock32b(uint32_t* const dst,
-                                     int dist, int length) {
-  const uint32_t* const src = dst - dist;
-  if (dist <= 2 && length >= 4 && ((uintptr_t)dst & 3) == 0) {
-    uint64_t pattern;
-    if (dist == 1) {
-      pattern = (uint64_t)src[0];
-      pattern |= pattern << 32;
-    } else {
-      memcpy(&pattern, src, sizeof(pattern));
-    }
-    CopySmallPattern32b(src, dst, length, pattern);
-  } else if (dist >= length) {  // no overlap
-    memcpy(dst, src, length * sizeof(*dst));
-  } else {
-    int i;
-    for (i = 0; i < length; ++i) dst[i] = src[i];
-  }
-}
-
-//------------------------------------------------------------------------------
-
-static int DecodeAlphaData(VP8LDecoder* const dec, uint8_t* const data,
-                           int width, int height, int last_row) {
-  int ok = 1;
-  int row = dec->last_pixel_ / width;
-  int col = dec->last_pixel_ % width;
-  VP8LBitReader* const br = &dec->br_;
-  VP8LMetadata* const hdr = &dec->hdr_;
-  int pos = dec->last_pixel_;         // current position
-  const int end = width * height;     // End of data
-  const int last = width * last_row;  // Last pixel to decode
-  const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES;
-  const int mask = hdr->huffman_mask_;
-  const HTreeGroup* htree_group =
-      (pos < last) ? GetHtreeGroupForPos(hdr, col, row) : NULL;
-  assert(pos <= end);
-  assert(last_row <= height);
-  assert(Is8bOptimizable(hdr));
-
-  while (!br->eos_ && pos < last) {
-    int code;
-    // Only update when changing tile.
-    if ((col & mask) == 0) {
-      htree_group = GetHtreeGroupForPos(hdr, col, row);
-    }
-    assert(htree_group != NULL);
-    VP8LFillBitWindow(br);
-    code = ReadSymbol(htree_group->htrees[GREEN], br);
-    if (code < NUM_LITERAL_CODES) {  // Literal
-      data[pos] = code;
-      ++pos;
-      ++col;
-      if (col >= width) {
-        col = 0;
-        ++row;
-        if (row <= last_row && (row % NUM_ARGB_CACHE_ROWS == 0)) {
-          ExtractPalettedAlphaRows(dec, row);
-        }
-      }
-    } else if (code < len_code_limit) {  // Backward reference
-      int dist_code, dist;
-      const int length_sym = code - NUM_LITERAL_CODES;
-      const int length = GetCopyLength(length_sym, br);
-      const int dist_symbol = ReadSymbol(htree_group->htrees[DIST], br);
-      VP8LFillBitWindow(br);
-      dist_code = GetCopyDistance(dist_symbol, br);
-      dist = PlaneCodeToDistance(width, dist_code);
-      if (pos >= dist && end - pos >= length) {
-        CopyBlock8b(data + pos, dist, length);
-      } else {
-        ok = 0;
-        goto End;
-      }
-      pos += length;
-      col += length;
-      while (col >= width) {
-        col -= width;
-        ++row;
-        if (row <= last_row && (row % NUM_ARGB_CACHE_ROWS == 0)) {
-          ExtractPalettedAlphaRows(dec, row);
-        }
-      }
-      if (pos < last && (col & mask)) {
-        htree_group = GetHtreeGroupForPos(hdr, col, row);
-      }
-    } else {  // Not reached
-      ok = 0;
-      goto End;
-    }
-    br->eos_ = VP8LIsEndOfStream(br);
-  }
-  // Process the remaining rows corresponding to last row-block.
-  ExtractPalettedAlphaRows(dec, row > last_row ? last_row : row);
-
- End:
-  br->eos_ = VP8LIsEndOfStream(br);
-  if (!ok || (br->eos_ && pos < end)) {
-    ok = 0;
-    dec->status_ = br->eos_ ? VP8_STATUS_SUSPENDED
-                            : VP8_STATUS_BITSTREAM_ERROR;
-  } else {
-    dec->last_pixel_ = pos;
-  }
-  return ok;
-}
-
-static void SaveState(VP8LDecoder* const dec, int last_pixel) {
-  assert(dec->incremental_);
-  dec->saved_br_ = dec->br_;
-  dec->saved_last_pixel_ = last_pixel;
-  if (dec->hdr_.color_cache_size_ > 0) {
-    VP8LColorCacheCopy(&dec->hdr_.color_cache_, &dec->hdr_.saved_color_cache_);
-  }
-}
-
-static void RestoreState(VP8LDecoder* const dec) {
-  assert(dec->br_.eos_);
-  dec->status_ = VP8_STATUS_SUSPENDED;
-  dec->br_ = dec->saved_br_;
-  dec->last_pixel_ = dec->saved_last_pixel_;
-  if (dec->hdr_.color_cache_size_ > 0) {
-    VP8LColorCacheCopy(&dec->hdr_.saved_color_cache_, &dec->hdr_.color_cache_);
-  }
-}
-
-#define SYNC_EVERY_N_ROWS 8  // minimum number of rows between check-points
-static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data,
-                           int width, int height, int last_row,
-                           ProcessRowsFunc process_func) {
-  int row = dec->last_pixel_ / width;
-  int col = dec->last_pixel_ % width;
-  VP8LBitReader* const br = &dec->br_;
-  VP8LMetadata* const hdr = &dec->hdr_;
-  uint32_t* src = data + dec->last_pixel_;
-  uint32_t* last_cached = src;
-  uint32_t* const src_end = data + width * height;     // End of data
-  uint32_t* const src_last = data + width * last_row;  // Last pixel to decode
-  const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES;
-  const int color_cache_limit = len_code_limit + hdr->color_cache_size_;
-  int next_sync_row = dec->incremental_ ? row : 1 << 24;
-  VP8LColorCache* const color_cache =
-      (hdr->color_cache_size_ > 0) ? &hdr->color_cache_ : NULL;
-  const int mask = hdr->huffman_mask_;
-  const HTreeGroup* htree_group =
-      (src < src_last) ? GetHtreeGroupForPos(hdr, col, row) : NULL;
-  assert(dec->last_row_ < last_row);
-  assert(src_last <= src_end);
-
-  while (src < src_last) {
-    int code;
-    if (row >= next_sync_row) {
-      SaveState(dec, (int)(src - data));
-      next_sync_row = row + SYNC_EVERY_N_ROWS;
-    }
-    // Only update when changing tile. Note we could use this test:
-    // if "((((prev_col ^ col) | prev_row ^ row)) > mask)" -> tile changed
-    // but that's actually slower and needs storing the previous col/row.
-    if ((col & mask) == 0) {
-      htree_group = GetHtreeGroupForPos(hdr, col, row);
-    }
-    assert(htree_group != NULL);
-    if (htree_group->is_trivial_code) {
-      *src = htree_group->literal_arb;
-      goto AdvanceByOne;
-    }
-    VP8LFillBitWindow(br);
-    if (htree_group->use_packed_table) {
-      code = ReadPackedSymbols(htree_group, br, src);
-      if (VP8LIsEndOfStream(br)) break;
-      if (code == PACKED_NON_LITERAL_CODE) goto AdvanceByOne;
-    } else {
-      code = ReadSymbol(htree_group->htrees[GREEN], br);
-    }
-    if (VP8LIsEndOfStream(br)) break;
-    if (code < NUM_LITERAL_CODES) {  // Literal
-      if (htree_group->is_trivial_literal) {
-        *src = htree_group->literal_arb | (code << 8);
-      } else {
-        int red, blue, alpha;
-        red = ReadSymbol(htree_group->htrees[RED], br);
-        VP8LFillBitWindow(br);
-        blue = ReadSymbol(htree_group->htrees[BLUE], br);
-        alpha = ReadSymbol(htree_group->htrees[ALPHA], br);
-        if (VP8LIsEndOfStream(br)) break;
-        *src = ((uint32_t)alpha << 24) | (red << 16) | (code << 8) | blue;
-      }
-    AdvanceByOne:
-      ++src;
-      ++col;
-      if (col >= width) {
-        col = 0;
-        ++row;
-        if (process_func != NULL) {
-          if (row <= last_row && (row % NUM_ARGB_CACHE_ROWS == 0)) {
-            process_func(dec, row);
-          }
-        }
-        if (color_cache != NULL) {
-          while (last_cached < src) {
-            VP8LColorCacheInsert(color_cache, *last_cached++);
-          }
-        }
-      }
-    } else if (code < len_code_limit) {  // Backward reference
-      int dist_code, dist;
-      const int length_sym = code - NUM_LITERAL_CODES;
-      const int length = GetCopyLength(length_sym, br);
-      const int dist_symbol = ReadSymbol(htree_group->htrees[DIST], br);
-      VP8LFillBitWindow(br);
-      dist_code = GetCopyDistance(dist_symbol, br);
-      dist = PlaneCodeToDistance(width, dist_code);
-      if (VP8LIsEndOfStream(br)) break;
-      if (src - data < (ptrdiff_t)dist || src_end - src < (ptrdiff_t)length) {
-        goto Error;
-      } else {
-        CopyBlock32b(src, dist, length);
-      }
-      src += length;
-      col += length;
-      while (col >= width) {
-        col -= width;
-        ++row;
-        if (process_func != NULL) {
-          if (row <= last_row && (row % NUM_ARGB_CACHE_ROWS == 0)) {
-            process_func(dec, row);
-          }
-        }
-      }
-      // Because of the check done above (before 'src' was incremented by
-      // 'length'), the following holds true.
-      assert(src <= src_end);
-      if (col & mask) htree_group = GetHtreeGroupForPos(hdr, col, row);
-      if (color_cache != NULL) {
-        while (last_cached < src) {
-          VP8LColorCacheInsert(color_cache, *last_cached++);
-        }
-      }
-    } else if (code < color_cache_limit) {  // Color cache
-      const int key = code - len_code_limit;
-      assert(color_cache != NULL);
-      while (last_cached < src) {
-        VP8LColorCacheInsert(color_cache, *last_cached++);
-      }
-      *src = VP8LColorCacheLookup(color_cache, key);
-      goto AdvanceByOne;
-    } else {  // Not reached
-      goto Error;
-    }
-  }
-
-  br->eos_ = VP8LIsEndOfStream(br);
-  if (dec->incremental_ && br->eos_ && src < src_end) {
-    RestoreState(dec);
-  } else if (!br->eos_) {
-    // Process the remaining rows corresponding to last row-block.
-    if (process_func != NULL) {
-      process_func(dec, row > last_row ? last_row : row);
-    }
-    dec->status_ = VP8_STATUS_OK;
-    dec->last_pixel_ = (int)(src - data);  // end-of-scan marker
-  } else {
-    // if not incremental, and we are past the end of buffer (eos_=1), then this
-    // is a real bitstream error.
-    goto Error;
-  }
-  return 1;
-
- Error:
-  dec->status_ = VP8_STATUS_BITSTREAM_ERROR;
-  return 0;
-}
-
-// -----------------------------------------------------------------------------
-// VP8LTransform
-
-static void ClearTransform(VP8LTransform* const transform) {
-  WebPSafeFree(transform->data_);
-  transform->data_ = NULL;
-}
-
-// For security reason, we need to remap the color map to span
-// the total possible bundled values, and not just the num_colors.
-static int ExpandColorMap(int num_colors, VP8LTransform* const transform) {
-  int i;
-  const int final_num_colors = 1 << (8 >> transform->bits_);
-  uint32_t* const new_color_map =
-      (uint32_t*)WebPSafeMalloc((uint64_t)final_num_colors,
-                                sizeof(*new_color_map));
-  if (new_color_map == NULL) {
-    return 0;
-  } else {
-    uint8_t* const data = (uint8_t*)transform->data_;
-    uint8_t* const new_data = (uint8_t*)new_color_map;
-    new_color_map[0] = transform->data_[0];
-    for (i = 4; i < 4 * num_colors; ++i) {
-      // Equivalent to AddPixelEq(), on a byte-basis.
-      new_data[i] = (data[i] + new_data[i - 4]) & 0xff;
-    }
-    for (; i < 4 * final_num_colors; ++i) {
-      new_data[i] = 0;  // black tail.
-    }
-    WebPSafeFree(transform->data_);
-    transform->data_ = new_color_map;
-  }
-  return 1;
-}
-
-static int ReadTransform(int* const xsize, int const* ysize,
-                         VP8LDecoder* const dec) {
-  int ok = 1;
-  VP8LBitReader* const br = &dec->br_;
-  VP8LTransform* transform = &dec->transforms_[dec->next_transform_];
-  const VP8LImageTransformType type =
-      (VP8LImageTransformType)VP8LReadBits(br, 2);
-
-  // Each transform type can only be present once in the stream.
-  if (dec->transforms_seen_ & (1U << type)) {
-    return 0;  // Already there, let's not accept the second same transform.
-  }
-  dec->transforms_seen_ |= (1U << type);
-
-  transform->type_ = type;
-  transform->xsize_ = *xsize;
-  transform->ysize_ = *ysize;
-  transform->data_ = NULL;
-  ++dec->next_transform_;
-  assert(dec->next_transform_ <= NUM_TRANSFORMS);
-
-  switch (type) {
-    case PREDICTOR_TRANSFORM:
-    case CROSS_COLOR_TRANSFORM:
-      transform->bits_ = VP8LReadBits(br, 3) + 2;
-      ok = DecodeImageStream(VP8LSubSampleSize(transform->xsize_,
-                                               transform->bits_),
-                             VP8LSubSampleSize(transform->ysize_,
-                                               transform->bits_),
-                             0, dec, &transform->data_);
-      break;
-    case COLOR_INDEXING_TRANSFORM: {
-       const int num_colors = VP8LReadBits(br, 8) + 1;
-       const int bits = (num_colors > 16) ? 0
-                      : (num_colors > 4) ? 1
-                      : (num_colors > 2) ? 2
-                      : 3;
-       *xsize = VP8LSubSampleSize(transform->xsize_, bits);
-       transform->bits_ = bits;
-       ok = DecodeImageStream(num_colors, 1, 0, dec, &transform->data_);
-       ok = ok && ExpandColorMap(num_colors, transform);
-      break;
-    }
-    case SUBTRACT_GREEN:
-      break;
-    default:
-      assert(0);    // can't happen
-      break;
-  }
-
-  return ok;
-}
-
-// -----------------------------------------------------------------------------
-// VP8LMetadata
-
-static void InitMetadata(VP8LMetadata* const hdr) {
-  assert(hdr != NULL);
-  memset(hdr, 0, sizeof(*hdr));
-}
-
-static void ClearMetadata(VP8LMetadata* const hdr) {
-  assert(hdr != NULL);
-
-  WebPSafeFree(hdr->huffman_image_);
-  WebPSafeFree(hdr->huffman_tables_);
-  VP8LHtreeGroupsFree(hdr->htree_groups_);
-  VP8LColorCacheClear(&hdr->color_cache_);
-  VP8LColorCacheClear(&hdr->saved_color_cache_);
-  InitMetadata(hdr);
-}
-
-// -----------------------------------------------------------------------------
-// VP8LDecoder
-
-VP8LDecoder* VP8LNew(void) {
-  VP8LDecoder* const dec = (VP8LDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec));
-  if (dec == NULL) return NULL;
-  dec->status_ = VP8_STATUS_OK;
-  dec->state_ = READ_DIM;
-
-  VP8LDspInit();  // Init critical function pointers.
-
-  return dec;
-}
-
-void VP8LClear(VP8LDecoder* const dec) {
-  int i;
-  if (dec == NULL) return;
-  ClearMetadata(&dec->hdr_);
-
-  WebPSafeFree(dec->pixels_);
-  dec->pixels_ = NULL;
-  for (i = 0; i < dec->next_transform_; ++i) {
-    ClearTransform(&dec->transforms_[i]);
-  }
-  dec->next_transform_ = 0;
-  dec->transforms_seen_ = 0;
-
-  WebPSafeFree(dec->rescaler_memory);
-  dec->rescaler_memory = NULL;
-
-  dec->output_ = NULL;   // leave no trace behind
-}
-
-void VP8LDelete(VP8LDecoder* const dec) {
-  if (dec != NULL) {
-    VP8LClear(dec);
-    WebPSafeFree(dec);
-  }
-}
-
-static void UpdateDecoder(VP8LDecoder* const dec, int width, int height) {
-  VP8LMetadata* const hdr = &dec->hdr_;
-  const int num_bits = hdr->huffman_subsample_bits_;
-  dec->width_ = width;
-  dec->height_ = height;
-
-  hdr->huffman_xsize_ = VP8LSubSampleSize(width, num_bits);
-  hdr->huffman_mask_ = (num_bits == 0) ? ~0 : (1 << num_bits) - 1;
-}
-
-static int DecodeImageStream(int xsize, int ysize,
-                             int is_level0,
-                             VP8LDecoder* const dec,
-                             uint32_t** const decoded_data) {
-  int ok = 1;
-  int transform_xsize = xsize;
-  int transform_ysize = ysize;
-  VP8LBitReader* const br = &dec->br_;
-  VP8LMetadata* const hdr = &dec->hdr_;
-  uint32_t* data = NULL;
-  int color_cache_bits = 0;
-
-  // Read the transforms (may recurse).
-  if (is_level0) {
-    while (ok && VP8LReadBits(br, 1)) {
-      ok = ReadTransform(&transform_xsize, &transform_ysize, dec);
-    }
-  }
-
-  // Color cache
-  if (ok && VP8LReadBits(br, 1)) {
-    color_cache_bits = VP8LReadBits(br, 4);
-    ok = (color_cache_bits >= 1 && color_cache_bits <= MAX_CACHE_BITS);
-    if (!ok) {
-      dec->status_ = VP8_STATUS_BITSTREAM_ERROR;
-      goto End;
-    }
-  }
-
-  // Read the Huffman codes (may recurse).
-  ok = ok && ReadHuffmanCodes(dec, transform_xsize, transform_ysize,
-                              color_cache_bits, is_level0);
-  if (!ok) {
-    dec->status_ = VP8_STATUS_BITSTREAM_ERROR;
-    goto End;
-  }
-
-  // Finish setting up the color-cache
-  if (color_cache_bits > 0) {
-    hdr->color_cache_size_ = 1 << color_cache_bits;
-    if (!VP8LColorCacheInit(&hdr->color_cache_, color_cache_bits)) {
-      dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-      ok = 0;
-      goto End;
-    }
-  } else {
-    hdr->color_cache_size_ = 0;
-  }
-  UpdateDecoder(dec, transform_xsize, transform_ysize);
-
-  if (is_level0) {   // level 0 complete
-    dec->state_ = READ_HDR;
-    goto End;
-  }
-
-  {
-    const uint64_t total_size = (uint64_t)transform_xsize * transform_ysize;
-    data = (uint32_t*)WebPSafeMalloc(total_size, sizeof(*data));
-    if (data == NULL) {
-      dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-      ok = 0;
-      goto End;
-    }
-  }
-
-  // Use the Huffman trees to decode the LZ77 encoded data.
-  ok = DecodeImageData(dec, data, transform_xsize, transform_ysize,
-                       transform_ysize, NULL);
-  ok = ok && !br->eos_;
-
- End:
-  if (!ok) {
-    WebPSafeFree(data);
-    ClearMetadata(hdr);
-  } else {
-    if (decoded_data != NULL) {
-      *decoded_data = data;
-    } else {
-      // We allocate image data in this function only for transforms. At level 0
-      // (that is: not the transforms), we shouldn't have allocated anything.
-      assert(data == NULL);
-      assert(is_level0);
-    }
-    dec->last_pixel_ = 0;  // Reset for future DECODE_DATA_FUNC() calls.
-    if (!is_level0) ClearMetadata(hdr);  // Clean up temporary data behind.
-  }
-  return ok;
-}
-
-//------------------------------------------------------------------------------
-// Allocate internal buffers dec->pixels_ and dec->argb_cache_.
-static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) {
-  const uint64_t num_pixels = (uint64_t)dec->width_ * dec->height_;
-  // Scratch buffer corresponding to top-prediction row for transforming the
-  // first row in the row-blocks. Not needed for paletted alpha.
-  const uint64_t cache_top_pixels = (uint16_t)final_width;
-  // Scratch buffer for temporary BGRA storage. Not needed for paletted alpha.
-  const uint64_t cache_pixels = (uint64_t)final_width * NUM_ARGB_CACHE_ROWS;
-  const uint64_t total_num_pixels =
-      num_pixels + cache_top_pixels + cache_pixels;
-
-  assert(dec->width_ <= final_width);
-  dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint32_t));
-  if (dec->pixels_ == NULL) {
-    dec->argb_cache_ = NULL;    // for sanity check
-    dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-    return 0;
-  }
-  dec->argb_cache_ = dec->pixels_ + num_pixels + cache_top_pixels;
-  return 1;
-}
-
-static int AllocateInternalBuffers8b(VP8LDecoder* const dec) {
-  const uint64_t total_num_pixels = (uint64_t)dec->width_ * dec->height_;
-  dec->argb_cache_ = NULL;    // for sanity check
-  dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint8_t));
-  if (dec->pixels_ == NULL) {
-    dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-    return 0;
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-
-// Special row-processing that only stores the alpha data.
-static void ExtractAlphaRows(VP8LDecoder* const dec, int last_row) {
-  int cur_row = dec->last_row_;
-  int num_rows = last_row - cur_row;
-  const uint32_t* in = dec->pixels_ + dec->width_ * cur_row;
-
-  assert(last_row <= dec->io_->crop_bottom);
-  while (num_rows > 0) {
-    const int num_rows_to_process =
-        (num_rows > NUM_ARGB_CACHE_ROWS) ? NUM_ARGB_CACHE_ROWS : num_rows;
-    // Extract alpha (which is stored in the green plane).
-    ALPHDecoder* const alph_dec = (ALPHDecoder*)dec->io_->opaque;
-    uint8_t* const output = alph_dec->output_;
-    const int width = dec->io_->width;      // the final width (!= dec->width_)
-    const int cache_pixs = width * num_rows_to_process;
-    uint8_t* const dst = output + width * cur_row;
-    const uint32_t* const src = dec->argb_cache_;
-    ApplyInverseTransforms(dec, num_rows_to_process, in);
-    WebPExtractGreen(src, dst, cache_pixs);
-    AlphaApplyFilter(alph_dec,
-                     cur_row, cur_row + num_rows_to_process, dst, width);
-    num_rows -= num_rows_to_process;
-    in += num_rows_to_process * dec->width_;
-    cur_row += num_rows_to_process;
-  }
-  assert(cur_row == last_row);
-  dec->last_row_ = dec->last_out_row_ = last_row;
-}
-
-int VP8LDecodeAlphaHeader(ALPHDecoder* const alph_dec,
-                          const uint8_t* const data, size_t data_size) {
-  int ok = 0;
-  VP8LDecoder* dec = VP8LNew();
-
-  if (dec == NULL) return 0;
-
-  assert(alph_dec != NULL);
-
-  dec->width_ = alph_dec->width_;
-  dec->height_ = alph_dec->height_;
-  dec->io_ = &alph_dec->io_;
-  dec->io_->opaque = alph_dec;
-  dec->io_->width = alph_dec->width_;
-  dec->io_->height = alph_dec->height_;
-
-  dec->status_ = VP8_STATUS_OK;
-  VP8LInitBitReader(&dec->br_, data, data_size);
-
-  if (!DecodeImageStream(alph_dec->width_, alph_dec->height_, 1, dec, NULL)) {
-    goto Err;
-  }
-
-  // Special case: if alpha data uses only the color indexing transform and
-  // doesn't use color cache (a frequent case), we will use DecodeAlphaData()
-  // method that only needs allocation of 1 byte per pixel (alpha channel).
-  if (dec->next_transform_ == 1 &&
-      dec->transforms_[0].type_ == COLOR_INDEXING_TRANSFORM &&
-      Is8bOptimizable(&dec->hdr_)) {
-    alph_dec->use_8b_decode_ = 1;
-    ok = AllocateInternalBuffers8b(dec);
-  } else {
-    // Allocate internal buffers (note that dec->width_ may have changed here).
-    alph_dec->use_8b_decode_ = 0;
-    ok = AllocateInternalBuffers32b(dec, alph_dec->width_);
-  }
-
-  if (!ok) goto Err;
-
-  // Only set here, once we are sure it is valid (to avoid thread races).
-  alph_dec->vp8l_dec_ = dec;
-  return 1;
-
- Err:
-  VP8LDelete(dec);
-  return 0;
-}
-
-int VP8LDecodeAlphaImageStream(ALPHDecoder* const alph_dec, int last_row) {
-  VP8LDecoder* const dec = alph_dec->vp8l_dec_;
-  assert(dec != NULL);
-  assert(last_row <= dec->height_);
-
-  if (dec->last_row_ >= last_row) {
-    return 1;  // done
-  }
-
-  if (!alph_dec->use_8b_decode_) WebPInitAlphaProcessing();
-
-  // Decode (with special row processing).
-  return alph_dec->use_8b_decode_ ?
-      DecodeAlphaData(dec, (uint8_t*)dec->pixels_, dec->width_, dec->height_,
-                      last_row) :
-      DecodeImageData(dec, dec->pixels_, dec->width_, dec->height_,
-                      last_row, ExtractAlphaRows);
-}
-
-//------------------------------------------------------------------------------
-
-int VP8LDecodeHeader(VP8LDecoder* const dec, VP8Io* const io) {
-  int width, height, has_alpha;
-
-  if (dec == NULL) return 0;
-  if (io == NULL) {
-    dec->status_ = VP8_STATUS_INVALID_PARAM;
-    return 0;
-  }
-
-  dec->io_ = io;
-  dec->status_ = VP8_STATUS_OK;
-  VP8LInitBitReader(&dec->br_, io->data, io->data_size);
-  if (!ReadImageInfo(&dec->br_, &width, &height, &has_alpha)) {
-    dec->status_ = VP8_STATUS_BITSTREAM_ERROR;
-    goto Error;
-  }
-  dec->state_ = READ_DIM;
-  io->width = width;
-  io->height = height;
-
-  if (!DecodeImageStream(width, height, 1, dec, NULL)) goto Error;
-  return 1;
-
- Error:
-  VP8LClear(dec);
-  assert(dec->status_ != VP8_STATUS_OK);
-  return 0;
-}
-
-int VP8LDecodeImage(VP8LDecoder* const dec) {
-  VP8Io* io = NULL;
-  WebPDecParams* params = NULL;
-
-  // Sanity checks.
-  if (dec == NULL) return 0;
-
-  assert(dec->hdr_.huffman_tables_ != NULL);
-  assert(dec->hdr_.htree_groups_ != NULL);
-  assert(dec->hdr_.num_htree_groups_ > 0);
-
-  io = dec->io_;
-  assert(io != NULL);
-  params = (WebPDecParams*)io->opaque;
-  assert(params != NULL);
-
-  // Initialization.
-  if (dec->state_ != READ_DATA) {
-    dec->output_ = params->output;
-    assert(dec->output_ != NULL);
-
-    if (!WebPIoInitFromOptions(params->options, io, MODE_BGRA)) {
-      dec->status_ = VP8_STATUS_INVALID_PARAM;
-      goto Err;
-    }
-
-    if (!AllocateInternalBuffers32b(dec, io->width)) goto Err;
-
-#if !defined(WEBP_REDUCE_SIZE)
-    if (io->use_scaling && !AllocateAndInitRescaler(dec, io)) goto Err;
-#else
-    if (io->use_scaling) {
-      dec->status_ = VP8_STATUS_INVALID_PARAM;
-      goto Err;
-    }
-#endif
-    if (io->use_scaling || WebPIsPremultipliedMode(dec->output_->colorspace)) {
-      // need the alpha-multiply functions for premultiplied output or rescaling
-      WebPInitAlphaProcessing();
-    }
-
-    if (!WebPIsRGBMode(dec->output_->colorspace)) {
-      WebPInitConvertARGBToYUV();
-      if (dec->output_->u.YUVA.a != NULL) WebPInitAlphaProcessing();
-    }
-    if (dec->incremental_) {
-      if (dec->hdr_.color_cache_size_ > 0 &&
-          dec->hdr_.saved_color_cache_.colors_ == NULL) {
-        if (!VP8LColorCacheInit(&dec->hdr_.saved_color_cache_,
-                                dec->hdr_.color_cache_.hash_bits_)) {
-          dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
-          goto Err;
-        }
-      }
-    }
-    dec->state_ = READ_DATA;
-  }
-
-  // Decode.
-  if (!DecodeImageData(dec, dec->pixels_, dec->width_, dec->height_,
-                       io->crop_bottom, ProcessRows)) {
-    goto Err;
-  }
-
-  params->last_y = dec->last_out_row_;
-  return 1;
-
- Err:
-  VP8LClear(dec);
-  assert(dec->status_ != VP8_STATUS_OK);
-  return 0;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dec/vp8li_dec.h b/ios/Pods/libwebp/src/dec/vp8li_dec.h
deleted file mode 100644
index 0a4d613..0000000
--- a/ios/Pods/libwebp/src/dec/vp8li_dec.h
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Lossless decoder: internal header.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-//         Vikas Arora(vikaas.arora@gmail.com)
-
-#ifndef WEBP_DEC_VP8LI_DEC_H_
-#define WEBP_DEC_VP8LI_DEC_H_
-
-#include <string.h>     // for memcpy()
-#include "src/dec/webpi_dec.h"
-#include "src/utils/bit_reader_utils.h"
-#include "src/utils/color_cache_utils.h"
-#include "src/utils/huffman_utils.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
-  READ_DATA = 0,
-  READ_HDR = 1,
-  READ_DIM = 2
-} VP8LDecodeState;
-
-typedef struct VP8LTransform VP8LTransform;
-struct VP8LTransform {
-  VP8LImageTransformType type_;   // transform type.
-  int                    bits_;   // subsampling bits defining transform window.
-  int                    xsize_;  // transform window X index.
-  int                    ysize_;  // transform window Y index.
-  uint32_t              *data_;   // transform data.
-};
-
-typedef struct {
-  int             color_cache_size_;
-  VP8LColorCache  color_cache_;
-  VP8LColorCache  saved_color_cache_;  // for incremental
-
-  int             huffman_mask_;
-  int             huffman_subsample_bits_;
-  int             huffman_xsize_;
-  uint32_t       *huffman_image_;
-  int             num_htree_groups_;
-  HTreeGroup     *htree_groups_;
-  HuffmanCode    *huffman_tables_;
-} VP8LMetadata;
-
-typedef struct VP8LDecoder VP8LDecoder;
-struct VP8LDecoder {
-  VP8StatusCode    status_;
-  VP8LDecodeState  state_;
-  VP8Io           *io_;
-
-  const WebPDecBuffer *output_;    // shortcut to io->opaque->output
-
-  uint32_t        *pixels_;        // Internal data: either uint8_t* for alpha
-                                   // or uint32_t* for BGRA.
-  uint32_t        *argb_cache_;    // Scratch buffer for temporary BGRA storage.
-
-  VP8LBitReader    br_;
-  int              incremental_;   // if true, incremental decoding is expected
-  VP8LBitReader    saved_br_;      // note: could be local variables too
-  int              saved_last_pixel_;
-
-  int              width_;
-  int              height_;
-  int              last_row_;      // last input row decoded so far.
-  int              last_pixel_;    // last pixel decoded so far. However, it may
-                                   // not be transformed, scaled and
-                                   // color-converted yet.
-  int              last_out_row_;  // last row output so far.
-
-  VP8LMetadata     hdr_;
-
-  int              next_transform_;
-  VP8LTransform    transforms_[NUM_TRANSFORMS];
-  // or'd bitset storing the transforms types.
-  uint32_t         transforms_seen_;
-
-  uint8_t         *rescaler_memory;  // Working memory for rescaling work.
-  WebPRescaler    *rescaler;         // Common rescaler for all channels.
-};
-
-//------------------------------------------------------------------------------
-// internal functions. Not public.
-
-struct ALPHDecoder;  // Defined in dec/alphai.h.
-
-// in vp8l.c
-
-// Decodes image header for alpha data stored using lossless compression.
-// Returns false in case of error.
-int VP8LDecodeAlphaHeader(struct ALPHDecoder* const alph_dec,
-                          const uint8_t* const data, size_t data_size);
-
-// Decodes *at least* 'last_row' rows of alpha. If some of the initial rows are
-// already decoded in previous call(s), it will resume decoding from where it
-// was paused.
-// Returns false in case of bitstream error.
-int VP8LDecodeAlphaImageStream(struct ALPHDecoder* const alph_dec,
-                               int last_row);
-
-// Allocates and initialize a new lossless decoder instance.
-VP8LDecoder* VP8LNew(void);
-
-// Decodes the image header. Returns false in case of error.
-int VP8LDecodeHeader(VP8LDecoder* const dec, VP8Io* const io);
-
-// Decodes an image. It's required to decode the lossless header before calling
-// this function. Returns false in case of error, with updated dec->status_.
-int VP8LDecodeImage(VP8LDecoder* const dec);
-
-// Resets the decoder in its initial state, reclaiming memory.
-// Preserves the dec->status_ value.
-void VP8LClear(VP8LDecoder* const dec);
-
-// Clears and deallocate a lossless decoder instance.
-void VP8LDelete(VP8LDecoder* const dec);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DEC_VP8LI_DEC_H_
diff --git a/ios/Pods/libwebp/src/dec/webp_dec.c b/ios/Pods/libwebp/src/dec/webp_dec.c
deleted file mode 100644
index 42d0988..0000000
--- a/ios/Pods/libwebp/src/dec/webp_dec.c
+++ /dev/null
@@ -1,845 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Main decoding functions for WEBP images.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <stdlib.h>
-
-#include "src/dec/vp8i_dec.h"
-#include "src/dec/vp8li_dec.h"
-#include "src/dec/webpi_dec.h"
-#include "src/utils/utils.h"
-#include "src/webp/mux_types.h"  // ALPHA_FLAG
-
-//------------------------------------------------------------------------------
-// RIFF layout is:
-//   Offset  tag
-//   0...3   "RIFF" 4-byte tag
-//   4...7   size of image data (including metadata) starting at offset 8
-//   8...11  "WEBP"   our form-type signature
-// The RIFF container (12 bytes) is followed by appropriate chunks:
-//   12..15  "VP8 ": 4-bytes tags, signaling the use of VP8 video format
-//   16..19  size of the raw VP8 image data, starting at offset 20
-//   20....  the VP8 bytes
-// Or,
-//   12..15  "VP8L": 4-bytes tags, signaling the use of VP8L lossless format
-//   16..19  size of the raw VP8L image data, starting at offset 20
-//   20....  the VP8L bytes
-// Or,
-//   12..15  "VP8X": 4-bytes tags, describing the extended-VP8 chunk.
-//   16..19  size of the VP8X chunk starting at offset 20.
-//   20..23  VP8X flags bit-map corresponding to the chunk-types present.
-//   24..26  Width of the Canvas Image.
-//   27..29  Height of the Canvas Image.
-// There can be extra chunks after the "VP8X" chunk (ICCP, ANMF, VP8, VP8L,
-// XMP, EXIF  ...)
-// All sizes are in little-endian order.
-// Note: chunk data size must be padded to multiple of 2 when written.
-
-// Validates the RIFF container (if detected) and skips over it.
-// If a RIFF container is detected, returns:
-//     VP8_STATUS_BITSTREAM_ERROR for invalid header,
-//     VP8_STATUS_NOT_ENOUGH_DATA for truncated data if have_all_data is true,
-// and VP8_STATUS_OK otherwise.
-// In case there are not enough bytes (partial RIFF container), return 0 for
-// *riff_size. Else return the RIFF size extracted from the header.
-static VP8StatusCode ParseRIFF(const uint8_t** const data,
-                               size_t* const data_size, int have_all_data,
-                               size_t* const riff_size) {
-  assert(data != NULL);
-  assert(data_size != NULL);
-  assert(riff_size != NULL);
-
-  *riff_size = 0;  // Default: no RIFF present.
-  if (*data_size >= RIFF_HEADER_SIZE && !memcmp(*data, "RIFF", TAG_SIZE)) {
-    if (memcmp(*data + 8, "WEBP", TAG_SIZE)) {
-      return VP8_STATUS_BITSTREAM_ERROR;  // Wrong image file signature.
-    } else {
-      const uint32_t size = GetLE32(*data + TAG_SIZE);
-      // Check that we have at least one chunk (i.e "WEBP" + "VP8?nnnn").
-      if (size < TAG_SIZE + CHUNK_HEADER_SIZE) {
-        return VP8_STATUS_BITSTREAM_ERROR;
-      }
-      if (size > MAX_CHUNK_PAYLOAD) {
-        return VP8_STATUS_BITSTREAM_ERROR;
-      }
-      if (have_all_data && (size > *data_size - CHUNK_HEADER_SIZE)) {
-        return VP8_STATUS_NOT_ENOUGH_DATA;  // Truncated bitstream.
-      }
-      // We have a RIFF container. Skip it.
-      *riff_size = size;
-      *data += RIFF_HEADER_SIZE;
-      *data_size -= RIFF_HEADER_SIZE;
-    }
-  }
-  return VP8_STATUS_OK;
-}
-
-// Validates the VP8X header and skips over it.
-// Returns VP8_STATUS_BITSTREAM_ERROR for invalid VP8X header,
-//         VP8_STATUS_NOT_ENOUGH_DATA in case of insufficient data, and
-//         VP8_STATUS_OK otherwise.
-// If a VP8X chunk is found, found_vp8x is set to true and *width_ptr,
-// *height_ptr and *flags_ptr are set to the corresponding values extracted
-// from the VP8X chunk.
-static VP8StatusCode ParseVP8X(const uint8_t** const data,
-                               size_t* const data_size,
-                               int* const found_vp8x,
-                               int* const width_ptr, int* const height_ptr,
-                               uint32_t* const flags_ptr) {
-  const uint32_t vp8x_size = CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE;
-  assert(data != NULL);
-  assert(data_size != NULL);
-  assert(found_vp8x != NULL);
-
-  *found_vp8x = 0;
-
-  if (*data_size < CHUNK_HEADER_SIZE) {
-    return VP8_STATUS_NOT_ENOUGH_DATA;  // Insufficient data.
-  }
-
-  if (!memcmp(*data, "VP8X", TAG_SIZE)) {
-    int width, height;
-    uint32_t flags;
-    const uint32_t chunk_size = GetLE32(*data + TAG_SIZE);
-    if (chunk_size != VP8X_CHUNK_SIZE) {
-      return VP8_STATUS_BITSTREAM_ERROR;  // Wrong chunk size.
-    }
-
-    // Verify if enough data is available to validate the VP8X chunk.
-    if (*data_size < vp8x_size) {
-      return VP8_STATUS_NOT_ENOUGH_DATA;  // Insufficient data.
-    }
-    flags = GetLE32(*data + 8);
-    width = 1 + GetLE24(*data + 12);
-    height = 1 + GetLE24(*data + 15);
-    if (width * (uint64_t)height >= MAX_IMAGE_AREA) {
-      return VP8_STATUS_BITSTREAM_ERROR;  // image is too large
-    }
-
-    if (flags_ptr != NULL) *flags_ptr = flags;
-    if (width_ptr != NULL) *width_ptr = width;
-    if (height_ptr != NULL) *height_ptr = height;
-    // Skip over VP8X header bytes.
-    *data += vp8x_size;
-    *data_size -= vp8x_size;
-    *found_vp8x = 1;
-  }
-  return VP8_STATUS_OK;
-}
-
-// Skips to the next VP8/VP8L chunk header in the data given the size of the
-// RIFF chunk 'riff_size'.
-// Returns VP8_STATUS_BITSTREAM_ERROR if any invalid chunk size is encountered,
-//         VP8_STATUS_NOT_ENOUGH_DATA in case of insufficient data, and
-//         VP8_STATUS_OK otherwise.
-// If an alpha chunk is found, *alpha_data and *alpha_size are set
-// appropriately.
-static VP8StatusCode ParseOptionalChunks(const uint8_t** const data,
-                                         size_t* const data_size,
-                                         size_t const riff_size,
-                                         const uint8_t** const alpha_data,
-                                         size_t* const alpha_size) {
-  const uint8_t* buf;
-  size_t buf_size;
-  uint32_t total_size = TAG_SIZE +           // "WEBP".
-                        CHUNK_HEADER_SIZE +  // "VP8Xnnnn".
-                        VP8X_CHUNK_SIZE;     // data.
-  assert(data != NULL);
-  assert(data_size != NULL);
-  buf = *data;
-  buf_size = *data_size;
-
-  assert(alpha_data != NULL);
-  assert(alpha_size != NULL);
-  *alpha_data = NULL;
-  *alpha_size = 0;
-
-  while (1) {
-    uint32_t chunk_size;
-    uint32_t disk_chunk_size;   // chunk_size with padding
-
-    *data = buf;
-    *data_size = buf_size;
-
-    if (buf_size < CHUNK_HEADER_SIZE) {  // Insufficient data.
-      return VP8_STATUS_NOT_ENOUGH_DATA;
-    }
-
-    chunk_size = GetLE32(buf + TAG_SIZE);
-    if (chunk_size > MAX_CHUNK_PAYLOAD) {
-      return VP8_STATUS_BITSTREAM_ERROR;          // Not a valid chunk size.
-    }
-    // For odd-sized chunk-payload, there's one byte padding at the end.
-    disk_chunk_size = (CHUNK_HEADER_SIZE + chunk_size + 1) & ~1;
-    total_size += disk_chunk_size;
-
-    // Check that total bytes skipped so far does not exceed riff_size.
-    if (riff_size > 0 && (total_size > riff_size)) {
-      return VP8_STATUS_BITSTREAM_ERROR;          // Not a valid chunk size.
-    }
-
-    // Start of a (possibly incomplete) VP8/VP8L chunk implies that we have
-    // parsed all the optional chunks.
-    // Note: This check must occur before the check 'buf_size < disk_chunk_size'
-    // below to allow incomplete VP8/VP8L chunks.
-    if (!memcmp(buf, "VP8 ", TAG_SIZE) ||
-        !memcmp(buf, "VP8L", TAG_SIZE)) {
-      return VP8_STATUS_OK;
-    }
-
-    if (buf_size < disk_chunk_size) {             // Insufficient data.
-      return VP8_STATUS_NOT_ENOUGH_DATA;
-    }
-
-    if (!memcmp(buf, "ALPH", TAG_SIZE)) {         // A valid ALPH header.
-      *alpha_data = buf + CHUNK_HEADER_SIZE;
-      *alpha_size = chunk_size;
-    }
-
-    // We have a full and valid chunk; skip it.
-    buf += disk_chunk_size;
-    buf_size -= disk_chunk_size;
-  }
-}
-
-// Validates the VP8/VP8L Header ("VP8 nnnn" or "VP8L nnnn") and skips over it.
-// Returns VP8_STATUS_BITSTREAM_ERROR for invalid (chunk larger than
-//         riff_size) VP8/VP8L header,
-//         VP8_STATUS_NOT_ENOUGH_DATA in case of insufficient data, and
-//         VP8_STATUS_OK otherwise.
-// If a VP8/VP8L chunk is found, *chunk_size is set to the total number of bytes
-// extracted from the VP8/VP8L chunk header.
-// The flag '*is_lossless' is set to 1 in case of VP8L chunk / raw VP8L data.
-static VP8StatusCode ParseVP8Header(const uint8_t** const data_ptr,
-                                    size_t* const data_size, int have_all_data,
-                                    size_t riff_size, size_t* const chunk_size,
-                                    int* const is_lossless) {
-  const uint8_t* const data = *data_ptr;
-  const int is_vp8 = !memcmp(data, "VP8 ", TAG_SIZE);
-  const int is_vp8l = !memcmp(data, "VP8L", TAG_SIZE);
-  const uint32_t minimal_size =
-      TAG_SIZE + CHUNK_HEADER_SIZE;  // "WEBP" + "VP8 nnnn" OR
-                                     // "WEBP" + "VP8Lnnnn"
-  assert(data != NULL);
-  assert(data_size != NULL);
-  assert(chunk_size != NULL);
-  assert(is_lossless != NULL);
-
-  if (*data_size < CHUNK_HEADER_SIZE) {
-    return VP8_STATUS_NOT_ENOUGH_DATA;  // Insufficient data.
-  }
-
-  if (is_vp8 || is_vp8l) {
-    // Bitstream contains VP8/VP8L header.
-    const uint32_t size = GetLE32(data + TAG_SIZE);
-    if ((riff_size >= minimal_size) && (size > riff_size - minimal_size)) {
-      return VP8_STATUS_BITSTREAM_ERROR;  // Inconsistent size information.
-    }
-    if (have_all_data && (size > *data_size - CHUNK_HEADER_SIZE)) {
-      return VP8_STATUS_NOT_ENOUGH_DATA;  // Truncated bitstream.
-    }
-    // Skip over CHUNK_HEADER_SIZE bytes from VP8/VP8L Header.
-    *chunk_size = size;
-    *data_ptr += CHUNK_HEADER_SIZE;
-    *data_size -= CHUNK_HEADER_SIZE;
-    *is_lossless = is_vp8l;
-  } else {
-    // Raw VP8/VP8L bitstream (no header).
-    *is_lossless = VP8LCheckSignature(data, *data_size);
-    *chunk_size = *data_size;
-  }
-
-  return VP8_STATUS_OK;
-}
-
-//------------------------------------------------------------------------------
-
-// Fetch '*width', '*height', '*has_alpha' and fill out 'headers' based on
-// 'data'. All the output parameters may be NULL. If 'headers' is NULL only the
-// minimal amount will be read to fetch the remaining parameters.
-// If 'headers' is non-NULL this function will attempt to locate both alpha
-// data (with or without a VP8X chunk) and the bitstream chunk (VP8/VP8L).
-// Note: The following chunk sequences (before the raw VP8/VP8L data) are
-// considered valid by this function:
-// RIFF + VP8(L)
-// RIFF + VP8X + (optional chunks) + VP8(L)
-// ALPH + VP8 <-- Not a valid WebP format: only allowed for internal purpose.
-// VP8(L)     <-- Not a valid WebP format: only allowed for internal purpose.
-static VP8StatusCode ParseHeadersInternal(const uint8_t* data,
-                                          size_t data_size,
-                                          int* const width,
-                                          int* const height,
-                                          int* const has_alpha,
-                                          int* const has_animation,
-                                          int* const format,
-                                          WebPHeaderStructure* const headers) {
-  int canvas_width = 0;
-  int canvas_height = 0;
-  int image_width = 0;
-  int image_height = 0;
-  int found_riff = 0;
-  int found_vp8x = 0;
-  int animation_present = 0;
-  const int have_all_data = (headers != NULL) ? headers->have_all_data : 0;
-
-  VP8StatusCode status;
-  WebPHeaderStructure hdrs;
-
-  if (data == NULL || data_size < RIFF_HEADER_SIZE) {
-    return VP8_STATUS_NOT_ENOUGH_DATA;
-  }
-  memset(&hdrs, 0, sizeof(hdrs));
-  hdrs.data = data;
-  hdrs.data_size = data_size;
-
-  // Skip over RIFF header.
-  status = ParseRIFF(&data, &data_size, have_all_data, &hdrs.riff_size);
-  if (status != VP8_STATUS_OK) {
-    return status;   // Wrong RIFF header / insufficient data.
-  }
-  found_riff = (hdrs.riff_size > 0);
-
-  // Skip over VP8X.
-  {
-    uint32_t flags = 0;
-    status = ParseVP8X(&data, &data_size, &found_vp8x,
-                       &canvas_width, &canvas_height, &flags);
-    if (status != VP8_STATUS_OK) {
-      return status;  // Wrong VP8X / insufficient data.
-    }
-    animation_present = !!(flags & ANIMATION_FLAG);
-    if (!found_riff && found_vp8x) {
-      // Note: This restriction may be removed in the future, if it becomes
-      // necessary to send VP8X chunk to the decoder.
-      return VP8_STATUS_BITSTREAM_ERROR;
-    }
-    if (has_alpha != NULL) *has_alpha = !!(flags & ALPHA_FLAG);
-    if (has_animation != NULL) *has_animation = animation_present;
-    if (format != NULL) *format = 0;   // default = undefined
-
-    image_width = canvas_width;
-    image_height = canvas_height;
-    if (found_vp8x && animation_present && headers == NULL) {
-      status = VP8_STATUS_OK;
-      goto ReturnWidthHeight;  // Just return features from VP8X header.
-    }
-  }
-
-  if (data_size < TAG_SIZE) {
-    status = VP8_STATUS_NOT_ENOUGH_DATA;
-    goto ReturnWidthHeight;
-  }
-
-  // Skip over optional chunks if data started with "RIFF + VP8X" or "ALPH".
-  if ((found_riff && found_vp8x) ||
-      (!found_riff && !found_vp8x && !memcmp(data, "ALPH", TAG_SIZE))) {
-    status = ParseOptionalChunks(&data, &data_size, hdrs.riff_size,
-                                 &hdrs.alpha_data, &hdrs.alpha_data_size);
-    if (status != VP8_STATUS_OK) {
-      goto ReturnWidthHeight;  // Invalid chunk size / insufficient data.
-    }
-  }
-
-  // Skip over VP8/VP8L header.
-  status = ParseVP8Header(&data, &data_size, have_all_data, hdrs.riff_size,
-                          &hdrs.compressed_size, &hdrs.is_lossless);
-  if (status != VP8_STATUS_OK) {
-    goto ReturnWidthHeight;  // Wrong VP8/VP8L chunk-header / insufficient data.
-  }
-  if (hdrs.compressed_size > MAX_CHUNK_PAYLOAD) {
-    return VP8_STATUS_BITSTREAM_ERROR;
-  }
-
-  if (format != NULL && !animation_present) {
-    *format = hdrs.is_lossless ? 2 : 1;
-  }
-
-  if (!hdrs.is_lossless) {
-    if (data_size < VP8_FRAME_HEADER_SIZE) {
-      status = VP8_STATUS_NOT_ENOUGH_DATA;
-      goto ReturnWidthHeight;
-    }
-    // Validates raw VP8 data.
-    if (!VP8GetInfo(data, data_size, (uint32_t)hdrs.compressed_size,
-                    &image_width, &image_height)) {
-      return VP8_STATUS_BITSTREAM_ERROR;
-    }
-  } else {
-    if (data_size < VP8L_FRAME_HEADER_SIZE) {
-      status = VP8_STATUS_NOT_ENOUGH_DATA;
-      goto ReturnWidthHeight;
-    }
-    // Validates raw VP8L data.
-    if (!VP8LGetInfo(data, data_size, &image_width, &image_height, has_alpha)) {
-      return VP8_STATUS_BITSTREAM_ERROR;
-    }
-  }
-  // Validates image size coherency.
-  if (found_vp8x) {
-    if (canvas_width != image_width || canvas_height != image_height) {
-      return VP8_STATUS_BITSTREAM_ERROR;
-    }
-  }
-  if (headers != NULL) {
-    *headers = hdrs;
-    headers->offset = data - headers->data;
-    assert((uint64_t)(data - headers->data) < MAX_CHUNK_PAYLOAD);
-    assert(headers->offset == headers->data_size - data_size);
-  }
- ReturnWidthHeight:
-  if (status == VP8_STATUS_OK ||
-      (status == VP8_STATUS_NOT_ENOUGH_DATA && found_vp8x && headers == NULL)) {
-    if (has_alpha != NULL) {
-      // If the data did not contain a VP8X/VP8L chunk the only definitive way
-      // to set this is by looking for alpha data (from an ALPH chunk).
-      *has_alpha |= (hdrs.alpha_data != NULL);
-    }
-    if (width != NULL) *width = image_width;
-    if (height != NULL) *height = image_height;
-    return VP8_STATUS_OK;
-  } else {
-    return status;
-  }
-}
-
-VP8StatusCode WebPParseHeaders(WebPHeaderStructure* const headers) {
-  // status is marked volatile as a workaround for a clang-3.8 (aarch64) bug
-  volatile VP8StatusCode status;
-  int has_animation = 0;
-  assert(headers != NULL);
-  // fill out headers, ignore width/height/has_alpha.
-  status = ParseHeadersInternal(headers->data, headers->data_size,
-                                NULL, NULL, NULL, &has_animation,
-                                NULL, headers);
-  if (status == VP8_STATUS_OK || status == VP8_STATUS_NOT_ENOUGH_DATA) {
-    // The WebPDemux API + libwebp can be used to decode individual
-    // uncomposited frames or the WebPAnimDecoder can be used to fully
-    // reconstruct them (see webp/demux.h).
-    if (has_animation) {
-      status = VP8_STATUS_UNSUPPORTED_FEATURE;
-    }
-  }
-  return status;
-}
-
-//------------------------------------------------------------------------------
-// WebPDecParams
-
-void WebPResetDecParams(WebPDecParams* const params) {
-  if (params != NULL) {
-    memset(params, 0, sizeof(*params));
-  }
-}
-
-//------------------------------------------------------------------------------
-// "Into" decoding variants
-
-// Main flow
-static VP8StatusCode DecodeInto(const uint8_t* const data, size_t data_size,
-                                WebPDecParams* const params) {
-  VP8StatusCode status;
-  VP8Io io;
-  WebPHeaderStructure headers;
-
-  headers.data = data;
-  headers.data_size = data_size;
-  headers.have_all_data = 1;
-  status = WebPParseHeaders(&headers);   // Process Pre-VP8 chunks.
-  if (status != VP8_STATUS_OK) {
-    return status;
-  }
-
-  assert(params != NULL);
-  VP8InitIo(&io);
-  io.data = headers.data + headers.offset;
-  io.data_size = headers.data_size - headers.offset;
-  WebPInitCustomIo(params, &io);  // Plug the I/O functions.
-
-  if (!headers.is_lossless) {
-    VP8Decoder* const dec = VP8New();
-    if (dec == NULL) {
-      return VP8_STATUS_OUT_OF_MEMORY;
-    }
-    dec->alpha_data_ = headers.alpha_data;
-    dec->alpha_data_size_ = headers.alpha_data_size;
-
-    // Decode bitstream header, update io->width/io->height.
-    if (!VP8GetHeaders(dec, &io)) {
-      status = dec->status_;   // An error occurred. Grab error status.
-    } else {
-      // Allocate/check output buffers.
-      status = WebPAllocateDecBuffer(io.width, io.height, params->options,
-                                     params->output);
-      if (status == VP8_STATUS_OK) {  // Decode
-        // This change must be done before calling VP8Decode()
-        dec->mt_method_ = VP8GetThreadMethod(params->options, &headers,
-                                             io.width, io.height);
-        VP8InitDithering(params->options, dec);
-        if (!VP8Decode(dec, &io)) {
-          status = dec->status_;
-        }
-      }
-    }
-    VP8Delete(dec);
-  } else {
-    VP8LDecoder* const dec = VP8LNew();
-    if (dec == NULL) {
-      return VP8_STATUS_OUT_OF_MEMORY;
-    }
-    if (!VP8LDecodeHeader(dec, &io)) {
-      status = dec->status_;   // An error occurred. Grab error status.
-    } else {
-      // Allocate/check output buffers.
-      status = WebPAllocateDecBuffer(io.width, io.height, params->options,
-                                     params->output);
-      if (status == VP8_STATUS_OK) {  // Decode
-        if (!VP8LDecodeImage(dec)) {
-          status = dec->status_;
-        }
-      }
-    }
-    VP8LDelete(dec);
-  }
-
-  if (status != VP8_STATUS_OK) {
-    WebPFreeDecBuffer(params->output);
-  } else {
-    if (params->options != NULL && params->options->flip) {
-      // This restores the original stride values if options->flip was used
-      // during the call to WebPAllocateDecBuffer above.
-      status = WebPFlipBuffer(params->output);
-    }
-  }
-  return status;
-}
-
-// Helpers
-static uint8_t* DecodeIntoRGBABuffer(WEBP_CSP_MODE colorspace,
-                                     const uint8_t* const data,
-                                     size_t data_size,
-                                     uint8_t* const rgba,
-                                     int stride, size_t size) {
-  WebPDecParams params;
-  WebPDecBuffer buf;
-  if (rgba == NULL) {
-    return NULL;
-  }
-  WebPInitDecBuffer(&buf);
-  WebPResetDecParams(&params);
-  params.output = &buf;
-  buf.colorspace    = colorspace;
-  buf.u.RGBA.rgba   = rgba;
-  buf.u.RGBA.stride = stride;
-  buf.u.RGBA.size   = size;
-  buf.is_external_memory = 1;
-  if (DecodeInto(data, data_size, &params) != VP8_STATUS_OK) {
-    return NULL;
-  }
-  return rgba;
-}
-
-uint8_t* WebPDecodeRGBInto(const uint8_t* data, size_t data_size,
-                           uint8_t* output, size_t size, int stride) {
-  return DecodeIntoRGBABuffer(MODE_RGB, data, data_size, output, stride, size);
-}
-
-uint8_t* WebPDecodeRGBAInto(const uint8_t* data, size_t data_size,
-                            uint8_t* output, size_t size, int stride) {
-  return DecodeIntoRGBABuffer(MODE_RGBA, data, data_size, output, stride, size);
-}
-
-uint8_t* WebPDecodeARGBInto(const uint8_t* data, size_t data_size,
-                            uint8_t* output, size_t size, int stride) {
-  return DecodeIntoRGBABuffer(MODE_ARGB, data, data_size, output, stride, size);
-}
-
-uint8_t* WebPDecodeBGRInto(const uint8_t* data, size_t data_size,
-                           uint8_t* output, size_t size, int stride) {
-  return DecodeIntoRGBABuffer(MODE_BGR, data, data_size, output, stride, size);
-}
-
-uint8_t* WebPDecodeBGRAInto(const uint8_t* data, size_t data_size,
-                            uint8_t* output, size_t size, int stride) {
-  return DecodeIntoRGBABuffer(MODE_BGRA, data, data_size, output, stride, size);
-}
-
-uint8_t* WebPDecodeYUVInto(const uint8_t* data, size_t data_size,
-                           uint8_t* luma, size_t luma_size, int luma_stride,
-                           uint8_t* u, size_t u_size, int u_stride,
-                           uint8_t* v, size_t v_size, int v_stride) {
-  WebPDecParams params;
-  WebPDecBuffer output;
-  if (luma == NULL) return NULL;
-  WebPInitDecBuffer(&output);
-  WebPResetDecParams(&params);
-  params.output = &output;
-  output.colorspace      = MODE_YUV;
-  output.u.YUVA.y        = luma;
-  output.u.YUVA.y_stride = luma_stride;
-  output.u.YUVA.y_size   = luma_size;
-  output.u.YUVA.u        = u;
-  output.u.YUVA.u_stride = u_stride;
-  output.u.YUVA.u_size   = u_size;
-  output.u.YUVA.v        = v;
-  output.u.YUVA.v_stride = v_stride;
-  output.u.YUVA.v_size   = v_size;
-  output.is_external_memory = 1;
-  if (DecodeInto(data, data_size, &params) != VP8_STATUS_OK) {
-    return NULL;
-  }
-  return luma;
-}
-
-//------------------------------------------------------------------------------
-
-static uint8_t* Decode(WEBP_CSP_MODE mode, const uint8_t* const data,
-                       size_t data_size, int* const width, int* const height,
-                       WebPDecBuffer* const keep_info) {
-  WebPDecParams params;
-  WebPDecBuffer output;
-
-  WebPInitDecBuffer(&output);
-  WebPResetDecParams(&params);
-  params.output = &output;
-  output.colorspace = mode;
-
-  // Retrieve (and report back) the required dimensions from bitstream.
-  if (!WebPGetInfo(data, data_size, &output.width, &output.height)) {
-    return NULL;
-  }
-  if (width != NULL) *width = output.width;
-  if (height != NULL) *height = output.height;
-
-  // Decode
-  if (DecodeInto(data, data_size, &params) != VP8_STATUS_OK) {
-    return NULL;
-  }
-  if (keep_info != NULL) {    // keep track of the side-info
-    WebPCopyDecBuffer(&output, keep_info);
-  }
-  // return decoded samples (don't clear 'output'!)
-  return WebPIsRGBMode(mode) ? output.u.RGBA.rgba : output.u.YUVA.y;
-}
-
-uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size,
-                       int* width, int* height) {
-  return Decode(MODE_RGB, data, data_size, width, height, NULL);
-}
-
-uint8_t* WebPDecodeRGBA(const uint8_t* data, size_t data_size,
-                        int* width, int* height) {
-  return Decode(MODE_RGBA, data, data_size, width, height, NULL);
-}
-
-uint8_t* WebPDecodeARGB(const uint8_t* data, size_t data_size,
-                        int* width, int* height) {
-  return Decode(MODE_ARGB, data, data_size, width, height, NULL);
-}
-
-uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size,
-                       int* width, int* height) {
-  return Decode(MODE_BGR, data, data_size, width, height, NULL);
-}
-
-uint8_t* WebPDecodeBGRA(const uint8_t* data, size_t data_size,
-                        int* width, int* height) {
-  return Decode(MODE_BGRA, data, data_size, width, height, NULL);
-}
-
-uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size,
-                       int* width, int* height, uint8_t** u, uint8_t** v,
-                       int* stride, int* uv_stride) {
-  WebPDecBuffer output;   // only to preserve the side-infos
-  uint8_t* const out = Decode(MODE_YUV, data, data_size,
-                              width, height, &output);
-
-  if (out != NULL) {
-    const WebPYUVABuffer* const buf = &output.u.YUVA;
-    *u = buf->u;
-    *v = buf->v;
-    *stride = buf->y_stride;
-    *uv_stride = buf->u_stride;
-    assert(buf->u_stride == buf->v_stride);
-  }
-  return out;
-}
-
-static void DefaultFeatures(WebPBitstreamFeatures* const features) {
-  assert(features != NULL);
-  memset(features, 0, sizeof(*features));
-}
-
-static VP8StatusCode GetFeatures(const uint8_t* const data, size_t data_size,
-                                 WebPBitstreamFeatures* const features) {
-  if (features == NULL || data == NULL) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  DefaultFeatures(features);
-
-  // Only parse enough of the data to retrieve the features.
-  return ParseHeadersInternal(data, data_size,
-                              &features->width, &features->height,
-                              &features->has_alpha, &features->has_animation,
-                              &features->format, NULL);
-}
-
-//------------------------------------------------------------------------------
-// WebPGetInfo()
-
-int WebPGetInfo(const uint8_t* data, size_t data_size,
-                int* width, int* height) {
-  WebPBitstreamFeatures features;
-
-  if (GetFeatures(data, data_size, &features) != VP8_STATUS_OK) {
-    return 0;
-  }
-
-  if (width != NULL) {
-    *width  = features.width;
-  }
-  if (height != NULL) {
-    *height = features.height;
-  }
-
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-// Advance decoding API
-
-int WebPInitDecoderConfigInternal(WebPDecoderConfig* config,
-                                  int version) {
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DECODER_ABI_VERSION)) {
-    return 0;   // version mismatch
-  }
-  if (config == NULL) {
-    return 0;
-  }
-  memset(config, 0, sizeof(*config));
-  DefaultFeatures(&config->input);
-  WebPInitDecBuffer(&config->output);
-  return 1;
-}
-
-VP8StatusCode WebPGetFeaturesInternal(const uint8_t* data, size_t data_size,
-                                      WebPBitstreamFeatures* features,
-                                      int version) {
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DECODER_ABI_VERSION)) {
-    return VP8_STATUS_INVALID_PARAM;   // version mismatch
-  }
-  if (features == NULL) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-  return GetFeatures(data, data_size, features);
-}
-
-VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size,
-                         WebPDecoderConfig* config) {
-  WebPDecParams params;
-  VP8StatusCode status;
-
-  if (config == NULL) {
-    return VP8_STATUS_INVALID_PARAM;
-  }
-
-  status = GetFeatures(data, data_size, &config->input);
-  if (status != VP8_STATUS_OK) {
-    if (status == VP8_STATUS_NOT_ENOUGH_DATA) {
-      return VP8_STATUS_BITSTREAM_ERROR;  // Not-enough-data treated as error.
-    }
-    return status;
-  }
-
-  WebPResetDecParams(&params);
-  params.options = &config->options;
-  params.output = &config->output;
-  if (WebPAvoidSlowMemory(params.output, &config->input)) {
-    // decoding to slow memory: use a temporary in-mem buffer to decode into.
-    WebPDecBuffer in_mem_buffer;
-    WebPInitDecBuffer(&in_mem_buffer);
-    in_mem_buffer.colorspace = config->output.colorspace;
-    in_mem_buffer.width = config->input.width;
-    in_mem_buffer.height = config->input.height;
-    params.output = &in_mem_buffer;
-    status = DecodeInto(data, data_size, &params);
-    if (status == VP8_STATUS_OK) {  // do the slow-copy
-      status = WebPCopyDecBufferPixels(&in_mem_buffer, &config->output);
-    }
-    WebPFreeDecBuffer(&in_mem_buffer);
-  } else {
-    status = DecodeInto(data, data_size, &params);
-  }
-
-  return status;
-}
-
-//------------------------------------------------------------------------------
-// Cropping and rescaling.
-
-int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
-                          VP8Io* const io, WEBP_CSP_MODE src_colorspace) {
-  const int W = io->width;
-  const int H = io->height;
-  int x = 0, y = 0, w = W, h = H;
-
-  // Cropping
-  io->use_cropping = (options != NULL) && (options->use_cropping > 0);
-  if (io->use_cropping) {
-    w = options->crop_width;
-    h = options->crop_height;
-    x = options->crop_left;
-    y = options->crop_top;
-    if (!WebPIsRGBMode(src_colorspace)) {   // only snap for YUV420
-      x &= ~1;
-      y &= ~1;
-    }
-    if (x < 0 || y < 0 || w <= 0 || h <= 0 || x + w > W || y + h > H) {
-      return 0;  // out of frame boundary error
-    }
-  }
-  io->crop_left   = x;
-  io->crop_top    = y;
-  io->crop_right  = x + w;
-  io->crop_bottom = y + h;
-  io->mb_w = w;
-  io->mb_h = h;
-
-  // Scaling
-  io->use_scaling = (options != NULL) && (options->use_scaling > 0);
-  if (io->use_scaling) {
-    int scaled_width = options->scaled_width;
-    int scaled_height = options->scaled_height;
-    if (!WebPRescalerGetScaledDimensions(w, h, &scaled_width, &scaled_height)) {
-      return 0;
-    }
-    io->scaled_width = scaled_width;
-    io->scaled_height = scaled_height;
-  }
-
-  // Filter
-  io->bypass_filtering = (options != NULL) && options->bypass_filtering;
-
-  // Fancy upsampler
-#ifdef FANCY_UPSAMPLING
-  io->fancy_upsampling = (options == NULL) || (!options->no_fancy_upsampling);
-#endif
-
-  if (io->use_scaling) {
-    // disable filter (only for large downscaling ratio).
-    io->bypass_filtering = (io->scaled_width < W * 3 / 4) &&
-                           (io->scaled_height < H * 3 / 4);
-    io->fancy_upsampling = 0;
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dec/webpi_dec.h b/ios/Pods/libwebp/src/dec/webpi_dec.h
deleted file mode 100644
index 24baff5..0000000
--- a/ios/Pods/libwebp/src/dec/webpi_dec.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Internal header: WebP decoding parameters and custom IO on buffer
-//
-// Author: somnath@google.com (Somnath Banerjee)
-
-#ifndef WEBP_DEC_WEBPI_DEC_H_
-#define WEBP_DEC_WEBPI_DEC_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "src/utils/rescaler_utils.h"
-#include "src/dec/vp8_dec.h"
-
-//------------------------------------------------------------------------------
-// WebPDecParams: Decoding output parameters. Transient internal object.
-
-typedef struct WebPDecParams WebPDecParams;
-typedef int (*OutputFunc)(const VP8Io* const io, WebPDecParams* const p);
-typedef int (*OutputAlphaFunc)(const VP8Io* const io, WebPDecParams* const p,
-                               int expected_num_out_lines);
-typedef int (*OutputRowFunc)(WebPDecParams* const p, int y_pos,
-                             int max_out_lines);
-
-struct WebPDecParams {
-  WebPDecBuffer* output;             // output buffer.
-  uint8_t* tmp_y, *tmp_u, *tmp_v;    // cache for the fancy upsampler
-                                     // or used for tmp rescaling
-
-  int last_y;                 // coordinate of the line that was last output
-  const WebPDecoderOptions* options;  // if not NULL, use alt decoding features
-
-  WebPRescaler* scaler_y, *scaler_u, *scaler_v, *scaler_a;  // rescalers
-  void* memory;                  // overall scratch memory for the output work.
-
-  OutputFunc emit;               // output RGB or YUV samples
-  OutputAlphaFunc emit_alpha;    // output alpha channel
-  OutputRowFunc emit_alpha_row;  // output one line of rescaled alpha values
-};
-
-// Should be called first, before any use of the WebPDecParams object.
-void WebPResetDecParams(WebPDecParams* const params);
-
-//------------------------------------------------------------------------------
-// Header parsing helpers
-
-// Structure storing a description of the RIFF headers.
-typedef struct {
-  const uint8_t* data;         // input buffer
-  size_t data_size;            // input buffer size
-  int have_all_data;           // true if all data is known to be available
-  size_t offset;               // offset to main data chunk (VP8 or VP8L)
-  const uint8_t* alpha_data;   // points to alpha chunk (if present)
-  size_t alpha_data_size;      // alpha chunk size
-  size_t compressed_size;      // VP8/VP8L compressed data size
-  size_t riff_size;            // size of the riff payload (or 0 if absent)
-  int is_lossless;             // true if a VP8L chunk is present
-} WebPHeaderStructure;
-
-// Skips over all valid chunks prior to the first VP8/VP8L frame header.
-// Returns: VP8_STATUS_OK, VP8_STATUS_BITSTREAM_ERROR (invalid header/chunk),
-// VP8_STATUS_NOT_ENOUGH_DATA (partial input) or VP8_STATUS_UNSUPPORTED_FEATURE
-// in the case of non-decodable features (animation for instance).
-// In 'headers', compressed_size, offset, alpha_data, alpha_size, and lossless
-// fields are updated appropriately upon success.
-VP8StatusCode WebPParseHeaders(WebPHeaderStructure* const headers);
-
-//------------------------------------------------------------------------------
-// Misc utils
-
-// Initializes VP8Io with custom setup, io and teardown functions. The default
-// hooks will use the supplied 'params' as io->opaque handle.
-void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io);
-
-// Setup crop_xxx fields, mb_w and mb_h in io. 'src_colorspace' refers
-// to the *compressed* format, not the output one.
-int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
-                          VP8Io* const io, WEBP_CSP_MODE src_colorspace);
-
-//------------------------------------------------------------------------------
-// Internal functions regarding WebPDecBuffer memory (in buffer.c).
-// Don't really need to be externally visible for now.
-
-// Prepare 'buffer' with the requested initial dimensions width/height.
-// If no external storage is supplied, initializes buffer by allocating output
-// memory and setting up the stride information. Validate the parameters. Return
-// an error code in case of problem (no memory, or invalid stride / size /
-// dimension / etc.). If *options is not NULL, also verify that the options'
-// parameters are valid and apply them to the width/height dimensions of the
-// output buffer. This takes cropping / scaling / rotation into account.
-// Also incorporates the options->flip flag to flip the buffer parameters if
-// needed.
-VP8StatusCode WebPAllocateDecBuffer(int width, int height,
-                                    const WebPDecoderOptions* const options,
-                                    WebPDecBuffer* const buffer);
-
-// Flip buffer vertically by negating the various strides.
-VP8StatusCode WebPFlipBuffer(WebPDecBuffer* const buffer);
-
-// Copy 'src' into 'dst' buffer, making sure 'dst' is not marked as owner of the
-// memory (still held by 'src'). No pixels are copied.
-void WebPCopyDecBuffer(const WebPDecBuffer* const src,
-                       WebPDecBuffer* const dst);
-
-// Copy and transfer ownership from src to dst (beware of parameter order!)
-void WebPGrabDecBuffer(WebPDecBuffer* const src, WebPDecBuffer* const dst);
-
-// Copy pixels from 'src' into a *preallocated* 'dst' buffer. Returns
-// VP8_STATUS_INVALID_PARAM if the 'dst' is not set up correctly for the copy.
-VP8StatusCode WebPCopyDecBufferPixels(const WebPDecBuffer* const src,
-                                      WebPDecBuffer* const dst);
-
-// Returns true if decoding will be slow with the current configuration
-// and bitstream features.
-int WebPAvoidSlowMemory(const WebPDecBuffer* const output,
-                        const WebPBitstreamFeatures* const features);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DEC_WEBPI_DEC_H_
diff --git a/ios/Pods/libwebp/src/demux/anim_decode.c b/ios/Pods/libwebp/src/demux/anim_decode.c
deleted file mode 100644
index 05dd707..0000000
--- a/ios/Pods/libwebp/src/demux/anim_decode.c
+++ /dev/null
@@ -1,454 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  AnimDecoder implementation.
-//
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include <assert.h>
-#include <string.h>
-
-#include "src/utils/utils.h"
-#include "src/webp/decode.h"
-#include "src/webp/demux.h"
-
-#define NUM_CHANNELS 4
-
-typedef void (*BlendRowFunc)(uint32_t* const, const uint32_t* const, int);
-static void BlendPixelRowNonPremult(uint32_t* const src,
-                                    const uint32_t* const dst, int num_pixels);
-static void BlendPixelRowPremult(uint32_t* const src, const uint32_t* const dst,
-                                 int num_pixels);
-
-struct WebPAnimDecoder {
-  WebPDemuxer* demux_;             // Demuxer created from given WebP bitstream.
-  WebPDecoderConfig config_;       // Decoder config.
-  // Note: we use a pointer to a function blending multiple pixels at a time to
-  // allow possible inlining of per-pixel blending function.
-  BlendRowFunc blend_func_;        // Pointer to the chose blend row function.
-  WebPAnimInfo info_;              // Global info about the animation.
-  uint8_t* curr_frame_;            // Current canvas (not disposed).
-  uint8_t* prev_frame_disposed_;   // Previous canvas (properly disposed).
-  int prev_frame_timestamp_;       // Previous frame timestamp (milliseconds).
-  WebPIterator prev_iter_;         // Iterator object for previous frame.
-  int prev_frame_was_keyframe_;    // True if previous frame was a keyframe.
-  int next_frame_;                 // Index of the next frame to be decoded
-                                   // (starting from 1).
-};
-
-static void DefaultDecoderOptions(WebPAnimDecoderOptions* const dec_options) {
-  dec_options->color_mode = MODE_RGBA;
-  dec_options->use_threads = 0;
-}
-
-int WebPAnimDecoderOptionsInitInternal(WebPAnimDecoderOptions* dec_options,
-                                       int abi_version) {
-  if (dec_options == NULL ||
-      WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_DEMUX_ABI_VERSION)) {
-    return 0;
-  }
-  DefaultDecoderOptions(dec_options);
-  return 1;
-}
-
-static int ApplyDecoderOptions(const WebPAnimDecoderOptions* const dec_options,
-                               WebPAnimDecoder* const dec) {
-  WEBP_CSP_MODE mode;
-  WebPDecoderConfig* config = &dec->config_;
-  assert(dec_options != NULL);
-
-  mode = dec_options->color_mode;
-  if (mode != MODE_RGBA && mode != MODE_BGRA &&
-      mode != MODE_rgbA && mode != MODE_bgrA) {
-    return 0;
-  }
-  dec->blend_func_ = (mode == MODE_RGBA || mode == MODE_BGRA)
-                         ? &BlendPixelRowNonPremult
-                         : &BlendPixelRowPremult;
-  WebPInitDecoderConfig(config);
-  config->output.colorspace = mode;
-  config->output.is_external_memory = 1;
-  config->options.use_threads = dec_options->use_threads;
-  // Note: config->output.u.RGBA is set at the time of decoding each frame.
-  return 1;
-}
-
-WebPAnimDecoder* WebPAnimDecoderNewInternal(
-    const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options,
-    int abi_version) {
-  WebPAnimDecoderOptions options;
-  WebPAnimDecoder* dec = NULL;
-  if (webp_data == NULL ||
-      WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_DEMUX_ABI_VERSION)) {
-    return NULL;
-  }
-
-  // Note: calloc() so that the pointer members are initialized to NULL.
-  dec = (WebPAnimDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec));
-  if (dec == NULL) goto Error;
-
-  if (dec_options != NULL) {
-    options = *dec_options;
-  } else {
-    DefaultDecoderOptions(&options);
-  }
-  if (!ApplyDecoderOptions(&options, dec)) goto Error;
-
-  dec->demux_ = WebPDemux(webp_data);
-  if (dec->demux_ == NULL) goto Error;
-
-  dec->info_.canvas_width = WebPDemuxGetI(dec->demux_, WEBP_FF_CANVAS_WIDTH);
-  dec->info_.canvas_height = WebPDemuxGetI(dec->demux_, WEBP_FF_CANVAS_HEIGHT);
-  dec->info_.loop_count = WebPDemuxGetI(dec->demux_, WEBP_FF_LOOP_COUNT);
-  dec->info_.bgcolor = WebPDemuxGetI(dec->demux_, WEBP_FF_BACKGROUND_COLOR);
-  dec->info_.frame_count = WebPDemuxGetI(dec->demux_, WEBP_FF_FRAME_COUNT);
-
-  // Note: calloc() because we fill frame with zeroes as well.
-  dec->curr_frame_ = (uint8_t*)WebPSafeCalloc(
-      dec->info_.canvas_width * NUM_CHANNELS, dec->info_.canvas_height);
-  if (dec->curr_frame_ == NULL) goto Error;
-  dec->prev_frame_disposed_ = (uint8_t*)WebPSafeCalloc(
-      dec->info_.canvas_width * NUM_CHANNELS, dec->info_.canvas_height);
-  if (dec->prev_frame_disposed_ == NULL) goto Error;
-
-  WebPAnimDecoderReset(dec);
-  return dec;
-
- Error:
-  WebPAnimDecoderDelete(dec);
-  return NULL;
-}
-
-int WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec, WebPAnimInfo* info) {
-  if (dec == NULL || info == NULL) return 0;
-  *info = dec->info_;
-  return 1;
-}
-
-// Returns true if the frame covers the full canvas.
-static int IsFullFrame(int width, int height, int canvas_width,
-                       int canvas_height) {
-  return (width == canvas_width && height == canvas_height);
-}
-
-// Clear the canvas to transparent.
-static int ZeroFillCanvas(uint8_t* buf, uint32_t canvas_width,
-                          uint32_t canvas_height) {
-  const uint64_t size =
-      (uint64_t)canvas_width * canvas_height * NUM_CHANNELS * sizeof(*buf);
-  if (size != (size_t)size) return 0;
-  memset(buf, 0, (size_t)size);
-  return 1;
-}
-
-// Clear given frame rectangle to transparent.
-static void ZeroFillFrameRect(uint8_t* buf, int buf_stride, int x_offset,
-                              int y_offset, int width, int height) {
-  int j;
-  assert(width * NUM_CHANNELS <= buf_stride);
-  buf += y_offset * buf_stride + x_offset * NUM_CHANNELS;
-  for (j = 0; j < height; ++j) {
-    memset(buf, 0, width * NUM_CHANNELS);
-    buf += buf_stride;
-  }
-}
-
-// Copy width * height pixels from 'src' to 'dst'.
-static int CopyCanvas(const uint8_t* src, uint8_t* dst,
-                      uint32_t width, uint32_t height) {
-  const uint64_t size = (uint64_t)width * height * NUM_CHANNELS;
-  if (size != (size_t)size) return 0;
-  assert(src != NULL && dst != NULL);
-  memcpy(dst, src, (size_t)size);
-  return 1;
-}
-
-// Returns true if the current frame is a key-frame.
-static int IsKeyFrame(const WebPIterator* const curr,
-                      const WebPIterator* const prev,
-                      int prev_frame_was_key_frame,
-                      int canvas_width, int canvas_height) {
-  if (curr->frame_num == 1) {
-    return 1;
-  } else if ((!curr->has_alpha || curr->blend_method == WEBP_MUX_NO_BLEND) &&
-             IsFullFrame(curr->width, curr->height,
-                         canvas_width, canvas_height)) {
-    return 1;
-  } else {
-    return (prev->dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) &&
-           (IsFullFrame(prev->width, prev->height, canvas_width,
-                        canvas_height) ||
-            prev_frame_was_key_frame);
-  }
-}
-
-
-// Blend a single channel of 'src' over 'dst', given their alpha channel values.
-// 'src' and 'dst' are assumed to be NOT pre-multiplied by alpha.
-static uint8_t BlendChannelNonPremult(uint32_t src, uint8_t src_a,
-                                      uint32_t dst, uint8_t dst_a,
-                                      uint32_t scale, int shift) {
-  const uint8_t src_channel = (src >> shift) & 0xff;
-  const uint8_t dst_channel = (dst >> shift) & 0xff;
-  const uint32_t blend_unscaled = src_channel * src_a + dst_channel * dst_a;
-  assert(blend_unscaled < (1ULL << 32) / scale);
-  return (blend_unscaled * scale) >> 24;
-}
-
-// Blend 'src' over 'dst' assuming they are NOT pre-multiplied by alpha.
-static uint32_t BlendPixelNonPremult(uint32_t src, uint32_t dst) {
-  const uint8_t src_a = (src >> 24) & 0xff;
-
-  if (src_a == 0) {
-    return dst;
-  } else {
-    const uint8_t dst_a = (dst >> 24) & 0xff;
-    // This is the approximate integer arithmetic for the actual formula:
-    // dst_factor_a = (dst_a * (255 - src_a)) / 255.
-    const uint8_t dst_factor_a = (dst_a * (256 - src_a)) >> 8;
-    const uint8_t blend_a = src_a + dst_factor_a;
-    const uint32_t scale = (1UL << 24) / blend_a;
-
-    const uint8_t blend_r =
-        BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 0);
-    const uint8_t blend_g =
-        BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 8);
-    const uint8_t blend_b =
-        BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 16);
-    assert(src_a + dst_factor_a < 256);
-
-    return (blend_r << 0) |
-           (blend_g << 8) |
-           (blend_b << 16) |
-           ((uint32_t)blend_a << 24);
-  }
-}
-
-// Blend 'num_pixels' in 'src' over 'dst' assuming they are NOT pre-multiplied
-// by alpha.
-static void BlendPixelRowNonPremult(uint32_t* const src,
-                                    const uint32_t* const dst, int num_pixels) {
-  int i;
-  for (i = 0; i < num_pixels; ++i) {
-    const uint8_t src_alpha = (src[i] >> 24) & 0xff;
-    if (src_alpha != 0xff) {
-      src[i] = BlendPixelNonPremult(src[i], dst[i]);
-    }
-  }
-}
-
-// Individually multiply each channel in 'pix' by 'scale'.
-static WEBP_INLINE uint32_t ChannelwiseMultiply(uint32_t pix, uint32_t scale) {
-  uint32_t mask = 0x00FF00FF;
-  uint32_t rb = ((pix & mask) * scale) >> 8;
-  uint32_t ag = ((pix >> 8) & mask) * scale;
-  return (rb & mask) | (ag & ~mask);
-}
-
-// Blend 'src' over 'dst' assuming they are pre-multiplied by alpha.
-static uint32_t BlendPixelPremult(uint32_t src, uint32_t dst) {
-  const uint8_t src_a = (src >> 24) & 0xff;
-  return src + ChannelwiseMultiply(dst, 256 - src_a);
-}
-
-// Blend 'num_pixels' in 'src' over 'dst' assuming they are pre-multiplied by
-// alpha.
-static void BlendPixelRowPremult(uint32_t* const src, const uint32_t* const dst,
-                                 int num_pixels) {
-  int i;
-  for (i = 0; i < num_pixels; ++i) {
-    const uint8_t src_alpha = (src[i] >> 24) & 0xff;
-    if (src_alpha != 0xff) {
-      src[i] = BlendPixelPremult(src[i], dst[i]);
-    }
-  }
-}
-
-// Returns two ranges (<left, width> pairs) at row 'canvas_y', that belong to
-// 'src' but not 'dst'. A point range is empty if the corresponding width is 0.
-static void FindBlendRangeAtRow(const WebPIterator* const src,
-                                const WebPIterator* const dst, int canvas_y,
-                                int* const left1, int* const width1,
-                                int* const left2, int* const width2) {
-  const int src_max_x = src->x_offset + src->width;
-  const int dst_max_x = dst->x_offset + dst->width;
-  const int dst_max_y = dst->y_offset + dst->height;
-  assert(canvas_y >= src->y_offset && canvas_y < (src->y_offset + src->height));
-  *left1 = -1;
-  *width1 = 0;
-  *left2 = -1;
-  *width2 = 0;
-
-  if (canvas_y < dst->y_offset || canvas_y >= dst_max_y ||
-      src->x_offset >= dst_max_x || src_max_x <= dst->x_offset) {
-    *left1 = src->x_offset;
-    *width1 = src->width;
-    return;
-  }
-
-  if (src->x_offset < dst->x_offset) {
-    *left1 = src->x_offset;
-    *width1 = dst->x_offset - src->x_offset;
-  }
-
-  if (src_max_x > dst_max_x) {
-    *left2 = dst_max_x;
-    *width2 = src_max_x - dst_max_x;
-  }
-}
-
-int WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
-                           uint8_t** buf_ptr, int* timestamp_ptr) {
-  WebPIterator iter;
-  uint32_t width;
-  uint32_t height;
-  int is_key_frame;
-  int timestamp;
-  BlendRowFunc blend_row;
-
-  if (dec == NULL || buf_ptr == NULL || timestamp_ptr == NULL) return 0;
-  if (!WebPAnimDecoderHasMoreFrames(dec)) return 0;
-
-  width = dec->info_.canvas_width;
-  height = dec->info_.canvas_height;
-  blend_row = dec->blend_func_;
-
-  // Get compressed frame.
-  if (!WebPDemuxGetFrame(dec->demux_, dec->next_frame_, &iter)) {
-    return 0;
-  }
-  timestamp = dec->prev_frame_timestamp_ + iter.duration;
-
-  // Initialize.
-  is_key_frame = IsKeyFrame(&iter, &dec->prev_iter_,
-                            dec->prev_frame_was_keyframe_, width, height);
-  if (is_key_frame) {
-    if (!ZeroFillCanvas(dec->curr_frame_, width, height)) {
-      goto Error;
-    }
-  } else {
-    if (!CopyCanvas(dec->prev_frame_disposed_, dec->curr_frame_,
-                    width, height)) {
-      goto Error;
-    }
-  }
-
-  // Decode.
-  {
-    const uint8_t* in = iter.fragment.bytes;
-    const size_t in_size = iter.fragment.size;
-    const size_t out_offset =
-        (iter.y_offset * width + iter.x_offset) * NUM_CHANNELS;
-    WebPDecoderConfig* const config = &dec->config_;
-    WebPRGBABuffer* const buf = &config->output.u.RGBA;
-    buf->stride = NUM_CHANNELS * width;
-    buf->size = buf->stride * iter.height;
-    buf->rgba = dec->curr_frame_ + out_offset;
-
-    if (WebPDecode(in, in_size, config) != VP8_STATUS_OK) {
-      goto Error;
-    }
-  }
-
-  // During the decoding of current frame, we may have set some pixels to be
-  // transparent (i.e. alpha < 255). However, the value of each of these
-  // pixels should have been determined by blending it against the value of
-  // that pixel in the previous frame if blending method of is WEBP_MUX_BLEND.
-  if (iter.frame_num > 1 && iter.blend_method == WEBP_MUX_BLEND &&
-      !is_key_frame) {
-    if (dec->prev_iter_.dispose_method == WEBP_MUX_DISPOSE_NONE) {
-      int y;
-      // Blend transparent pixels with pixels in previous canvas.
-      for (y = 0; y < iter.height; ++y) {
-        const size_t offset =
-            (iter.y_offset + y) * width + iter.x_offset;
-        blend_row((uint32_t*)dec->curr_frame_ + offset,
-                  (uint32_t*)dec->prev_frame_disposed_ + offset, iter.width);
-      }
-    } else {
-      int y;
-      assert(dec->prev_iter_.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND);
-      // We need to blend a transparent pixel with its value just after
-      // initialization. That is, blend it with:
-      // * Fully transparent pixel if it belongs to prevRect <-- No-op.
-      // * The pixel in the previous canvas otherwise <-- Need alpha-blending.
-      for (y = 0; y < iter.height; ++y) {
-        const int canvas_y = iter.y_offset + y;
-        int left1, width1, left2, width2;
-        FindBlendRangeAtRow(&iter, &dec->prev_iter_, canvas_y, &left1, &width1,
-                            &left2, &width2);
-        if (width1 > 0) {
-          const size_t offset1 = canvas_y * width + left1;
-          blend_row((uint32_t*)dec->curr_frame_ + offset1,
-                    (uint32_t*)dec->prev_frame_disposed_ + offset1, width1);
-        }
-        if (width2 > 0) {
-          const size_t offset2 = canvas_y * width + left2;
-          blend_row((uint32_t*)dec->curr_frame_ + offset2,
-                    (uint32_t*)dec->prev_frame_disposed_ + offset2, width2);
-        }
-      }
-    }
-  }
-
-  // Update info of the previous frame and dispose it for the next iteration.
-  dec->prev_frame_timestamp_ = timestamp;
-  WebPDemuxReleaseIterator(&dec->prev_iter_);
-  dec->prev_iter_ = iter;
-  dec->prev_frame_was_keyframe_ = is_key_frame;
-  CopyCanvas(dec->curr_frame_, dec->prev_frame_disposed_, width, height);
-  if (dec->prev_iter_.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) {
-    ZeroFillFrameRect(dec->prev_frame_disposed_, width * NUM_CHANNELS,
-                      dec->prev_iter_.x_offset, dec->prev_iter_.y_offset,
-                      dec->prev_iter_.width, dec->prev_iter_.height);
-  }
-  ++dec->next_frame_;
-
-  // All OK, fill in the values.
-  *buf_ptr = dec->curr_frame_;
-  *timestamp_ptr = timestamp;
-  return 1;
-
- Error:
-  WebPDemuxReleaseIterator(&iter);
-  return 0;
-}
-
-int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec) {
-  if (dec == NULL) return 0;
-  return (dec->next_frame_ <= (int)dec->info_.frame_count);
-}
-
-void WebPAnimDecoderReset(WebPAnimDecoder* dec) {
-  if (dec != NULL) {
-    dec->prev_frame_timestamp_ = 0;
-    WebPDemuxReleaseIterator(&dec->prev_iter_);
-    memset(&dec->prev_iter_, 0, sizeof(dec->prev_iter_));
-    dec->prev_frame_was_keyframe_ = 0;
-    dec->next_frame_ = 1;
-  }
-}
-
-const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec) {
-  if (dec == NULL) return NULL;
-  return dec->demux_;
-}
-
-void WebPAnimDecoderDelete(WebPAnimDecoder* dec) {
-  if (dec != NULL) {
-    WebPDemuxReleaseIterator(&dec->prev_iter_);
-    WebPDemuxDelete(dec->demux_);
-    WebPSafeFree(dec->curr_frame_);
-    WebPSafeFree(dec->prev_frame_disposed_);
-    WebPSafeFree(dec);
-  }
-}
diff --git a/ios/Pods/libwebp/src/demux/demux.c b/ios/Pods/libwebp/src/demux/demux.c
deleted file mode 100644
index d8f7a40..0000000
--- a/ios/Pods/libwebp/src/demux/demux.c
+++ /dev/null
@@ -1,967 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  WebP container demux.
-//
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "src/utils/utils.h"
-#include "src/webp/decode.h"     // WebPGetFeatures
-#include "src/webp/demux.h"
-#include "src/webp/format_constants.h"
-
-#define DMUX_MAJ_VERSION 1
-#define DMUX_MIN_VERSION 0
-#define DMUX_REV_VERSION 2
-
-typedef struct {
-  size_t start_;        // start location of the data
-  size_t end_;          // end location
-  size_t riff_end_;     // riff chunk end location, can be > end_.
-  size_t buf_size_;     // size of the buffer
-  const uint8_t* buf_;
-} MemBuffer;
-
-typedef struct {
-  size_t offset_;
-  size_t size_;
-} ChunkData;
-
-typedef struct Frame {
-  int x_offset_, y_offset_;
-  int width_, height_;
-  int has_alpha_;
-  int duration_;
-  WebPMuxAnimDispose dispose_method_;
-  WebPMuxAnimBlend blend_method_;
-  int frame_num_;
-  int complete_;   // img_components_ contains a full image.
-  ChunkData img_components_[2];  // 0=VP8{,L} 1=ALPH
-  struct Frame* next_;
-} Frame;
-
-typedef struct Chunk {
-  ChunkData data_;
-  struct Chunk* next_;
-} Chunk;
-
-struct WebPDemuxer {
-  MemBuffer mem_;
-  WebPDemuxState state_;
-  int is_ext_format_;
-  uint32_t feature_flags_;
-  int canvas_width_, canvas_height_;
-  int loop_count_;
-  uint32_t bgcolor_;
-  int num_frames_;
-  Frame* frames_;
-  Frame** frames_tail_;
-  Chunk* chunks_;  // non-image chunks
-  Chunk** chunks_tail_;
-};
-
-typedef enum {
-  PARSE_OK,
-  PARSE_NEED_MORE_DATA,
-  PARSE_ERROR
-} ParseStatus;
-
-typedef struct ChunkParser {
-  uint8_t id[4];
-  ParseStatus (*parse)(WebPDemuxer* const dmux);
-  int (*valid)(const WebPDemuxer* const dmux);
-} ChunkParser;
-
-static ParseStatus ParseSingleImage(WebPDemuxer* const dmux);
-static ParseStatus ParseVP8X(WebPDemuxer* const dmux);
-static int IsValidSimpleFormat(const WebPDemuxer* const dmux);
-static int IsValidExtendedFormat(const WebPDemuxer* const dmux);
-
-static const ChunkParser kMasterChunks[] = {
-  { { 'V', 'P', '8', ' ' }, ParseSingleImage, IsValidSimpleFormat },
-  { { 'V', 'P', '8', 'L' }, ParseSingleImage, IsValidSimpleFormat },
-  { { 'V', 'P', '8', 'X' }, ParseVP8X,        IsValidExtendedFormat },
-  { { '0', '0', '0', '0' }, NULL,             NULL },
-};
-
-//------------------------------------------------------------------------------
-
-int WebPGetDemuxVersion(void) {
-  return (DMUX_MAJ_VERSION << 16) | (DMUX_MIN_VERSION << 8) | DMUX_REV_VERSION;
-}
-
-// -----------------------------------------------------------------------------
-// MemBuffer
-
-static int RemapMemBuffer(MemBuffer* const mem,
-                          const uint8_t* data, size_t size) {
-  if (size < mem->buf_size_) return 0;  // can't remap to a shorter buffer!
-
-  mem->buf_ = data;
-  mem->end_ = mem->buf_size_ = size;
-  return 1;
-}
-
-static int InitMemBuffer(MemBuffer* const mem,
-                         const uint8_t* data, size_t size) {
-  memset(mem, 0, sizeof(*mem));
-  return RemapMemBuffer(mem, data, size);
-}
-
-// Return the remaining data size available in 'mem'.
-static WEBP_INLINE size_t MemDataSize(const MemBuffer* const mem) {
-  return (mem->end_ - mem->start_);
-}
-
-// Return true if 'size' exceeds the end of the RIFF chunk.
-static WEBP_INLINE int SizeIsInvalid(const MemBuffer* const mem, size_t size) {
-  return (size > mem->riff_end_ - mem->start_);
-}
-
-static WEBP_INLINE void Skip(MemBuffer* const mem, size_t size) {
-  mem->start_ += size;
-}
-
-static WEBP_INLINE void Rewind(MemBuffer* const mem, size_t size) {
-  mem->start_ -= size;
-}
-
-static WEBP_INLINE const uint8_t* GetBuffer(MemBuffer* const mem) {
-  return mem->buf_ + mem->start_;
-}
-
-// Read from 'mem' and skip the read bytes.
-static WEBP_INLINE uint8_t ReadByte(MemBuffer* const mem) {
-  const uint8_t byte = mem->buf_[mem->start_];
-  Skip(mem, 1);
-  return byte;
-}
-
-static WEBP_INLINE int ReadLE16s(MemBuffer* const mem) {
-  const uint8_t* const data = mem->buf_ + mem->start_;
-  const int val = GetLE16(data);
-  Skip(mem, 2);
-  return val;
-}
-
-static WEBP_INLINE int ReadLE24s(MemBuffer* const mem) {
-  const uint8_t* const data = mem->buf_ + mem->start_;
-  const int val = GetLE24(data);
-  Skip(mem, 3);
-  return val;
-}
-
-static WEBP_INLINE uint32_t ReadLE32(MemBuffer* const mem) {
-  const uint8_t* const data = mem->buf_ + mem->start_;
-  const uint32_t val = GetLE32(data);
-  Skip(mem, 4);
-  return val;
-}
-
-// -----------------------------------------------------------------------------
-// Secondary chunk parsing
-
-static void AddChunk(WebPDemuxer* const dmux, Chunk* const chunk) {
-  *dmux->chunks_tail_ = chunk;
-  chunk->next_ = NULL;
-  dmux->chunks_tail_ = &chunk->next_;
-}
-
-// Add a frame to the end of the list, ensuring the last frame is complete.
-// Returns true on success, false otherwise.
-static int AddFrame(WebPDemuxer* const dmux, Frame* const frame) {
-  const Frame* const last_frame = *dmux->frames_tail_;
-  if (last_frame != NULL && !last_frame->complete_) return 0;
-
-  *dmux->frames_tail_ = frame;
-  frame->next_ = NULL;
-  dmux->frames_tail_ = &frame->next_;
-  return 1;
-}
-
-static void SetFrameInfo(size_t start_offset, size_t size,
-                         int frame_num, int complete,
-                         const WebPBitstreamFeatures* const features,
-                         Frame* const frame) {
-  frame->img_components_[0].offset_ = start_offset;
-  frame->img_components_[0].size_ = size;
-  frame->width_ = features->width;
-  frame->height_ = features->height;
-  frame->has_alpha_ |= features->has_alpha;
-  frame->frame_num_ = frame_num;
-  frame->complete_ = complete;
-}
-
-// Store image bearing chunks to 'frame'. 'min_size' is an optional size
-// requirement, it may be zero.
-static ParseStatus StoreFrame(int frame_num, uint32_t min_size,
-                              MemBuffer* const mem, Frame* const frame) {
-  int alpha_chunks = 0;
-  int image_chunks = 0;
-  int done = (MemDataSize(mem) < CHUNK_HEADER_SIZE ||
-              MemDataSize(mem) < min_size);
-  ParseStatus status = PARSE_OK;
-
-  if (done) return PARSE_NEED_MORE_DATA;
-
-  do {
-    const size_t chunk_start_offset = mem->start_;
-    const uint32_t fourcc = ReadLE32(mem);
-    const uint32_t payload_size = ReadLE32(mem);
-    const uint32_t payload_size_padded = payload_size + (payload_size & 1);
-    const size_t payload_available = (payload_size_padded > MemDataSize(mem))
-                                   ? MemDataSize(mem) : payload_size_padded;
-    const size_t chunk_size = CHUNK_HEADER_SIZE + payload_available;
-
-    if (payload_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR;
-    if (SizeIsInvalid(mem, payload_size_padded)) return PARSE_ERROR;
-    if (payload_size_padded > MemDataSize(mem)) status = PARSE_NEED_MORE_DATA;
-
-    switch (fourcc) {
-      case MKFOURCC('A', 'L', 'P', 'H'):
-        if (alpha_chunks == 0) {
-          ++alpha_chunks;
-          frame->img_components_[1].offset_ = chunk_start_offset;
-          frame->img_components_[1].size_ = chunk_size;
-          frame->has_alpha_ = 1;
-          frame->frame_num_ = frame_num;
-          Skip(mem, payload_available);
-        } else {
-          goto Done;
-        }
-        break;
-      case MKFOURCC('V', 'P', '8', 'L'):
-        if (alpha_chunks > 0) return PARSE_ERROR;  // VP8L has its own alpha
-        // fall through
-      case MKFOURCC('V', 'P', '8', ' '):
-        if (image_chunks == 0) {
-          // Extract the bitstream features, tolerating failures when the data
-          // is incomplete.
-          WebPBitstreamFeatures features;
-          const VP8StatusCode vp8_status =
-              WebPGetFeatures(mem->buf_ + chunk_start_offset, chunk_size,
-                              &features);
-          if (status == PARSE_NEED_MORE_DATA &&
-              vp8_status == VP8_STATUS_NOT_ENOUGH_DATA) {
-            return PARSE_NEED_MORE_DATA;
-          } else if (vp8_status != VP8_STATUS_OK) {
-            // We have enough data, and yet WebPGetFeatures() failed.
-            return PARSE_ERROR;
-          }
-          ++image_chunks;
-          SetFrameInfo(chunk_start_offset, chunk_size, frame_num,
-                       status == PARSE_OK, &features, frame);
-          Skip(mem, payload_available);
-        } else {
-          goto Done;
-        }
-        break;
- Done:
-      default:
-        // Restore fourcc/size when moving up one level in parsing.
-        Rewind(mem, CHUNK_HEADER_SIZE);
-        done = 1;
-        break;
-    }
-
-    if (mem->start_ == mem->riff_end_) {
-      done = 1;
-    } else if (MemDataSize(mem) < CHUNK_HEADER_SIZE) {
-      status = PARSE_NEED_MORE_DATA;
-    }
-  } while (!done && status == PARSE_OK);
-
-  return status;
-}
-
-// Creates a new Frame if 'actual_size' is within bounds and 'mem' contains
-// enough data ('min_size') to parse the payload.
-// Returns PARSE_OK on success with *frame pointing to the new Frame.
-// Returns PARSE_NEED_MORE_DATA with insufficient data, PARSE_ERROR otherwise.
-static ParseStatus NewFrame(const MemBuffer* const mem,
-                            uint32_t min_size, uint32_t actual_size,
-                            Frame** frame) {
-  if (SizeIsInvalid(mem, min_size)) return PARSE_ERROR;
-  if (actual_size < min_size) return PARSE_ERROR;
-  if (MemDataSize(mem) < min_size)  return PARSE_NEED_MORE_DATA;
-
-  *frame = (Frame*)WebPSafeCalloc(1ULL, sizeof(**frame));
-  return (*frame == NULL) ? PARSE_ERROR : PARSE_OK;
-}
-
-// Parse a 'ANMF' chunk and any image bearing chunks that immediately follow.
-// 'frame_chunk_size' is the previously validated, padded chunk size.
-static ParseStatus ParseAnimationFrame(
-    WebPDemuxer* const dmux, uint32_t frame_chunk_size) {
-  const int is_animation = !!(dmux->feature_flags_ & ANIMATION_FLAG);
-  const uint32_t anmf_payload_size = frame_chunk_size - ANMF_CHUNK_SIZE;
-  int added_frame = 0;
-  int bits;
-  MemBuffer* const mem = &dmux->mem_;
-  Frame* frame;
-  ParseStatus status =
-      NewFrame(mem, ANMF_CHUNK_SIZE, frame_chunk_size, &frame);
-  if (status != PARSE_OK) return status;
-
-  frame->x_offset_       = 2 * ReadLE24s(mem);
-  frame->y_offset_       = 2 * ReadLE24s(mem);
-  frame->width_          = 1 + ReadLE24s(mem);
-  frame->height_         = 1 + ReadLE24s(mem);
-  frame->duration_       = ReadLE24s(mem);
-  bits = ReadByte(mem);
-  frame->dispose_method_ =
-      (bits & 1) ? WEBP_MUX_DISPOSE_BACKGROUND : WEBP_MUX_DISPOSE_NONE;
-  frame->blend_method_ = (bits & 2) ? WEBP_MUX_NO_BLEND : WEBP_MUX_BLEND;
-  if (frame->width_ * (uint64_t)frame->height_ >= MAX_IMAGE_AREA) {
-    WebPSafeFree(frame);
-    return PARSE_ERROR;
-  }
-
-  // Store a frame only if the animation flag is set there is some data for
-  // this frame is available.
-  status = StoreFrame(dmux->num_frames_ + 1, anmf_payload_size, mem, frame);
-  if (status != PARSE_ERROR && is_animation && frame->frame_num_ > 0) {
-    added_frame = AddFrame(dmux, frame);
-    if (added_frame) {
-      ++dmux->num_frames_;
-    } else {
-      status = PARSE_ERROR;
-    }
-  }
-
-  if (!added_frame) WebPSafeFree(frame);
-  return status;
-}
-
-// General chunk storage, starting with the header at 'start_offset', allowing
-// the user to request the payload via a fourcc string. 'size' includes the
-// header and the unpadded payload size.
-// Returns true on success, false otherwise.
-static int StoreChunk(WebPDemuxer* const dmux,
-                      size_t start_offset, uint32_t size) {
-  Chunk* const chunk = (Chunk*)WebPSafeCalloc(1ULL, sizeof(*chunk));
-  if (chunk == NULL) return 0;
-
-  chunk->data_.offset_ = start_offset;
-  chunk->data_.size_ = size;
-  AddChunk(dmux, chunk);
-  return 1;
-}
-
-// -----------------------------------------------------------------------------
-// Primary chunk parsing
-
-static ParseStatus ReadHeader(MemBuffer* const mem) {
-  const size_t min_size = RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE;
-  uint32_t riff_size;
-
-  // Basic file level validation.
-  if (MemDataSize(mem) < min_size) return PARSE_NEED_MORE_DATA;
-  if (memcmp(GetBuffer(mem), "RIFF", CHUNK_SIZE_BYTES) ||
-      memcmp(GetBuffer(mem) + CHUNK_HEADER_SIZE, "WEBP", CHUNK_SIZE_BYTES)) {
-    return PARSE_ERROR;
-  }
-
-  riff_size = GetLE32(GetBuffer(mem) + TAG_SIZE);
-  if (riff_size < CHUNK_HEADER_SIZE) return PARSE_ERROR;
-  if (riff_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR;
-
-  // There's no point in reading past the end of the RIFF chunk
-  mem->riff_end_ = riff_size + CHUNK_HEADER_SIZE;
-  if (mem->buf_size_ > mem->riff_end_) {
-    mem->buf_size_ = mem->end_ = mem->riff_end_;
-  }
-
-  Skip(mem, RIFF_HEADER_SIZE);
-  return PARSE_OK;
-}
-
-static ParseStatus ParseSingleImage(WebPDemuxer* const dmux) {
-  const size_t min_size = CHUNK_HEADER_SIZE;
-  MemBuffer* const mem = &dmux->mem_;
-  Frame* frame;
-  ParseStatus status;
-  int image_added = 0;
-
-  if (dmux->frames_ != NULL) return PARSE_ERROR;
-  if (SizeIsInvalid(mem, min_size)) return PARSE_ERROR;
-  if (MemDataSize(mem) < min_size) return PARSE_NEED_MORE_DATA;
-
-  frame = (Frame*)WebPSafeCalloc(1ULL, sizeof(*frame));
-  if (frame == NULL) return PARSE_ERROR;
-
-  // For the single image case we allow parsing of a partial frame, so no
-  // minimum size is imposed here.
-  status = StoreFrame(1, 0, &dmux->mem_, frame);
-  if (status != PARSE_ERROR) {
-    const int has_alpha = !!(dmux->feature_flags_ & ALPHA_FLAG);
-    // Clear any alpha when the alpha flag is missing.
-    if (!has_alpha && frame->img_components_[1].size_ > 0) {
-      frame->img_components_[1].offset_ = 0;
-      frame->img_components_[1].size_ = 0;
-      frame->has_alpha_ = 0;
-    }
-
-    // Use the frame width/height as the canvas values for non-vp8x files.
-    // Also, set ALPHA_FLAG if this is a lossless image with alpha.
-    if (!dmux->is_ext_format_ && frame->width_ > 0 && frame->height_ > 0) {
-      dmux->state_ = WEBP_DEMUX_PARSED_HEADER;
-      dmux->canvas_width_ = frame->width_;
-      dmux->canvas_height_ = frame->height_;
-      dmux->feature_flags_ |= frame->has_alpha_ ? ALPHA_FLAG : 0;
-    }
-    if (!AddFrame(dmux, frame)) {
-      status = PARSE_ERROR;  // last frame was left incomplete
-    } else {
-      image_added = 1;
-      dmux->num_frames_ = 1;
-    }
-  }
-
-  if (!image_added) WebPSafeFree(frame);
-  return status;
-}
-
-static ParseStatus ParseVP8XChunks(WebPDemuxer* const dmux) {
-  const int is_animation = !!(dmux->feature_flags_ & ANIMATION_FLAG);
-  MemBuffer* const mem = &dmux->mem_;
-  int anim_chunks = 0;
-  ParseStatus status = PARSE_OK;
-
-  do {
-    int store_chunk = 1;
-    const size_t chunk_start_offset = mem->start_;
-    const uint32_t fourcc = ReadLE32(mem);
-    const uint32_t chunk_size = ReadLE32(mem);
-    const uint32_t chunk_size_padded = chunk_size + (chunk_size & 1);
-
-    if (chunk_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR;
-    if (SizeIsInvalid(mem, chunk_size_padded)) return PARSE_ERROR;
-
-    switch (fourcc) {
-      case MKFOURCC('V', 'P', '8', 'X'): {
-        return PARSE_ERROR;
-      }
-      case MKFOURCC('A', 'L', 'P', 'H'):
-      case MKFOURCC('V', 'P', '8', ' '):
-      case MKFOURCC('V', 'P', '8', 'L'): {
-        // check that this isn't an animation (all frames should be in an ANMF).
-        if (anim_chunks > 0 || is_animation) return PARSE_ERROR;
-
-        Rewind(mem, CHUNK_HEADER_SIZE);
-        status = ParseSingleImage(dmux);
-        break;
-      }
-      case MKFOURCC('A', 'N', 'I', 'M'): {
-        if (chunk_size_padded < ANIM_CHUNK_SIZE) return PARSE_ERROR;
-
-        if (MemDataSize(mem) < chunk_size_padded) {
-          status = PARSE_NEED_MORE_DATA;
-        } else if (anim_chunks == 0) {
-          ++anim_chunks;
-          dmux->bgcolor_ = ReadLE32(mem);
-          dmux->loop_count_ = ReadLE16s(mem);
-          Skip(mem, chunk_size_padded - ANIM_CHUNK_SIZE);
-        } else {
-          store_chunk = 0;
-          goto Skip;
-        }
-        break;
-      }
-      case MKFOURCC('A', 'N', 'M', 'F'): {
-        if (anim_chunks == 0) return PARSE_ERROR;  // 'ANIM' precedes frames.
-        status = ParseAnimationFrame(dmux, chunk_size_padded);
-        break;
-      }
-      case MKFOURCC('I', 'C', 'C', 'P'): {
-        store_chunk = !!(dmux->feature_flags_ & ICCP_FLAG);
-        goto Skip;
-      }
-      case MKFOURCC('E', 'X', 'I', 'F'): {
-        store_chunk = !!(dmux->feature_flags_ & EXIF_FLAG);
-        goto Skip;
-      }
-      case MKFOURCC('X', 'M', 'P', ' '): {
-        store_chunk = !!(dmux->feature_flags_ & XMP_FLAG);
-        goto Skip;
-      }
- Skip:
-      default: {
-        if (chunk_size_padded <= MemDataSize(mem)) {
-          if (store_chunk) {
-            // Store only the chunk header and unpadded size as only the payload
-            // will be returned to the user.
-            if (!StoreChunk(dmux, chunk_start_offset,
-                            CHUNK_HEADER_SIZE + chunk_size)) {
-              return PARSE_ERROR;
-            }
-          }
-          Skip(mem, chunk_size_padded);
-        } else {
-          status = PARSE_NEED_MORE_DATA;
-        }
-      }
-    }
-
-    if (mem->start_ == mem->riff_end_) {
-      break;
-    } else if (MemDataSize(mem) < CHUNK_HEADER_SIZE) {
-      status = PARSE_NEED_MORE_DATA;
-    }
-  } while (status == PARSE_OK);
-
-  return status;
-}
-
-static ParseStatus ParseVP8X(WebPDemuxer* const dmux) {
-  MemBuffer* const mem = &dmux->mem_;
-  uint32_t vp8x_size;
-
-  if (MemDataSize(mem) < CHUNK_HEADER_SIZE) return PARSE_NEED_MORE_DATA;
-
-  dmux->is_ext_format_ = 1;
-  Skip(mem, TAG_SIZE);  // VP8X
-  vp8x_size = ReadLE32(mem);
-  if (vp8x_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR;
-  if (vp8x_size < VP8X_CHUNK_SIZE) return PARSE_ERROR;
-  vp8x_size += vp8x_size & 1;
-  if (SizeIsInvalid(mem, vp8x_size)) return PARSE_ERROR;
-  if (MemDataSize(mem) < vp8x_size) return PARSE_NEED_MORE_DATA;
-
-  dmux->feature_flags_ = ReadByte(mem);
-  Skip(mem, 3);  // Reserved.
-  dmux->canvas_width_  = 1 + ReadLE24s(mem);
-  dmux->canvas_height_ = 1 + ReadLE24s(mem);
-  if (dmux->canvas_width_ * (uint64_t)dmux->canvas_height_ >= MAX_IMAGE_AREA) {
-    return PARSE_ERROR;  // image final dimension is too large
-  }
-  Skip(mem, vp8x_size - VP8X_CHUNK_SIZE);  // skip any trailing data.
-  dmux->state_ = WEBP_DEMUX_PARSED_HEADER;
-
-  if (SizeIsInvalid(mem, CHUNK_HEADER_SIZE)) return PARSE_ERROR;
-  if (MemDataSize(mem) < CHUNK_HEADER_SIZE) return PARSE_NEED_MORE_DATA;
-
-  return ParseVP8XChunks(dmux);
-}
-
-// -----------------------------------------------------------------------------
-// Format validation
-
-static int IsValidSimpleFormat(const WebPDemuxer* const dmux) {
-  const Frame* const frame = dmux->frames_;
-  if (dmux->state_ == WEBP_DEMUX_PARSING_HEADER) return 1;
-
-  if (dmux->canvas_width_ <= 0 || dmux->canvas_height_ <= 0) return 0;
-  if (dmux->state_ == WEBP_DEMUX_DONE && frame == NULL) return 0;
-
-  if (frame->width_ <= 0 || frame->height_ <= 0) return 0;
-  return 1;
-}
-
-// If 'exact' is true, check that the image resolution matches the canvas.
-// If 'exact' is false, check that the x/y offsets do not exceed the canvas.
-static int CheckFrameBounds(const Frame* const frame, int exact,
-                            int canvas_width, int canvas_height) {
-  if (exact) {
-    if (frame->x_offset_ != 0 || frame->y_offset_ != 0) {
-      return 0;
-    }
-    if (frame->width_ != canvas_width || frame->height_ != canvas_height) {
-      return 0;
-    }
-  } else {
-    if (frame->x_offset_ < 0 || frame->y_offset_ < 0) return 0;
-    if (frame->width_ + frame->x_offset_ > canvas_width) return 0;
-    if (frame->height_ + frame->y_offset_ > canvas_height) return 0;
-  }
-  return 1;
-}
-
-static int IsValidExtendedFormat(const WebPDemuxer* const dmux) {
-  const int is_animation = !!(dmux->feature_flags_ & ANIMATION_FLAG);
-  const Frame* f = dmux->frames_;
-
-  if (dmux->state_ == WEBP_DEMUX_PARSING_HEADER) return 1;
-
-  if (dmux->canvas_width_ <= 0 || dmux->canvas_height_ <= 0) return 0;
-  if (dmux->loop_count_ < 0) return 0;
-  if (dmux->state_ == WEBP_DEMUX_DONE && dmux->frames_ == NULL) return 0;
-  if (dmux->feature_flags_ & ~ALL_VALID_FLAGS) return 0;  // invalid bitstream
-
-  while (f != NULL) {
-    const int cur_frame_set = f->frame_num_;
-    int frame_count = 0;
-
-    // Check frame properties.
-    for (; f != NULL && f->frame_num_ == cur_frame_set; f = f->next_) {
-      const ChunkData* const image = f->img_components_;
-      const ChunkData* const alpha = f->img_components_ + 1;
-
-      if (!is_animation && f->frame_num_ > 1) return 0;
-
-      if (f->complete_) {
-        if (alpha->size_ == 0 && image->size_ == 0) return 0;
-        // Ensure alpha precedes image bitstream.
-        if (alpha->size_ > 0 && alpha->offset_ > image->offset_) {
-          return 0;
-        }
-
-        if (f->width_ <= 0 || f->height_ <= 0) return 0;
-      } else {
-        // There shouldn't be a partial frame in a complete file.
-        if (dmux->state_ == WEBP_DEMUX_DONE) return 0;
-
-        // Ensure alpha precedes image bitstream.
-        if (alpha->size_ > 0 && image->size_ > 0 &&
-            alpha->offset_ > image->offset_) {
-          return 0;
-        }
-        // There shouldn't be any frames after an incomplete one.
-        if (f->next_ != NULL) return 0;
-      }
-
-      if (f->width_ > 0 && f->height_ > 0 &&
-          !CheckFrameBounds(f, !is_animation,
-                            dmux->canvas_width_, dmux->canvas_height_)) {
-        return 0;
-      }
-
-      ++frame_count;
-    }
-  }
-  return 1;
-}
-
-// -----------------------------------------------------------------------------
-// WebPDemuxer object
-
-static void InitDemux(WebPDemuxer* const dmux, const MemBuffer* const mem) {
-  dmux->state_ = WEBP_DEMUX_PARSING_HEADER;
-  dmux->loop_count_ = 1;
-  dmux->bgcolor_ = 0xFFFFFFFF;  // White background by default.
-  dmux->canvas_width_ = -1;
-  dmux->canvas_height_ = -1;
-  dmux->frames_tail_ = &dmux->frames_;
-  dmux->chunks_tail_ = &dmux->chunks_;
-  dmux->mem_ = *mem;
-}
-
-static ParseStatus CreateRawImageDemuxer(MemBuffer* const mem,
-                                         WebPDemuxer** demuxer) {
-  WebPBitstreamFeatures features;
-  const VP8StatusCode status =
-      WebPGetFeatures(mem->buf_, mem->buf_size_, &features);
-  *demuxer = NULL;
-  if (status != VP8_STATUS_OK) {
-    return (status == VP8_STATUS_NOT_ENOUGH_DATA) ? PARSE_NEED_MORE_DATA
-                                                  : PARSE_ERROR;
-  }
-
-  {
-    WebPDemuxer* const dmux = (WebPDemuxer*)WebPSafeCalloc(1ULL, sizeof(*dmux));
-    Frame* const frame = (Frame*)WebPSafeCalloc(1ULL, sizeof(*frame));
-    if (dmux == NULL || frame == NULL) goto Error;
-    InitDemux(dmux, mem);
-    SetFrameInfo(0, mem->buf_size_, 1 /*frame_num*/, 1 /*complete*/, &features,
-                 frame);
-    if (!AddFrame(dmux, frame)) goto Error;
-    dmux->state_ = WEBP_DEMUX_DONE;
-    dmux->canvas_width_ = frame->width_;
-    dmux->canvas_height_ = frame->height_;
-    dmux->feature_flags_ |= frame->has_alpha_ ? ALPHA_FLAG : 0;
-    dmux->num_frames_ = 1;
-    assert(IsValidSimpleFormat(dmux));
-    *demuxer = dmux;
-    return PARSE_OK;
-
- Error:
-    WebPSafeFree(dmux);
-    WebPSafeFree(frame);
-    return PARSE_ERROR;
-  }
-}
-
-WebPDemuxer* WebPDemuxInternal(const WebPData* data, int allow_partial,
-                               WebPDemuxState* state, int version) {
-  const ChunkParser* parser;
-  int partial;
-  ParseStatus status = PARSE_ERROR;
-  MemBuffer mem;
-  WebPDemuxer* dmux;
-
-  if (state != NULL) *state = WEBP_DEMUX_PARSE_ERROR;
-
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_DEMUX_ABI_VERSION)) return NULL;
-  if (data == NULL || data->bytes == NULL || data->size == 0) return NULL;
-
-  if (!InitMemBuffer(&mem, data->bytes, data->size)) return NULL;
-  status = ReadHeader(&mem);
-  if (status != PARSE_OK) {
-    // If parsing of the webp file header fails attempt to handle a raw
-    // VP8/VP8L frame. Note 'allow_partial' is ignored in this case.
-    if (status == PARSE_ERROR) {
-      status = CreateRawImageDemuxer(&mem, &dmux);
-      if (status == PARSE_OK) {
-        if (state != NULL) *state = WEBP_DEMUX_DONE;
-        return dmux;
-      }
-    }
-    if (state != NULL) {
-      *state = (status == PARSE_NEED_MORE_DATA) ? WEBP_DEMUX_PARSING_HEADER
-                                                : WEBP_DEMUX_PARSE_ERROR;
-    }
-    return NULL;
-  }
-
-  partial = (mem.buf_size_ < mem.riff_end_);
-  if (!allow_partial && partial) return NULL;
-
-  dmux = (WebPDemuxer*)WebPSafeCalloc(1ULL, sizeof(*dmux));
-  if (dmux == NULL) return NULL;
-  InitDemux(dmux, &mem);
-
-  status = PARSE_ERROR;
-  for (parser = kMasterChunks; parser->parse != NULL; ++parser) {
-    if (!memcmp(parser->id, GetBuffer(&dmux->mem_), TAG_SIZE)) {
-      status = parser->parse(dmux);
-      if (status == PARSE_OK) dmux->state_ = WEBP_DEMUX_DONE;
-      if (status == PARSE_NEED_MORE_DATA && !partial) status = PARSE_ERROR;
-      if (status != PARSE_ERROR && !parser->valid(dmux)) status = PARSE_ERROR;
-      if (status == PARSE_ERROR) dmux->state_ = WEBP_DEMUX_PARSE_ERROR;
-      break;
-    }
-  }
-  if (state != NULL) *state = dmux->state_;
-
-  if (status == PARSE_ERROR) {
-    WebPDemuxDelete(dmux);
-    return NULL;
-  }
-  return dmux;
-}
-
-void WebPDemuxDelete(WebPDemuxer* dmux) {
-  Chunk* c;
-  Frame* f;
-  if (dmux == NULL) return;
-
-  for (f = dmux->frames_; f != NULL;) {
-    Frame* const cur_frame = f;
-    f = f->next_;
-    WebPSafeFree(cur_frame);
-  }
-  for (c = dmux->chunks_; c != NULL;) {
-    Chunk* const cur_chunk = c;
-    c = c->next_;
-    WebPSafeFree(cur_chunk);
-  }
-  WebPSafeFree(dmux);
-}
-
-// -----------------------------------------------------------------------------
-
-uint32_t WebPDemuxGetI(const WebPDemuxer* dmux, WebPFormatFeature feature) {
-  if (dmux == NULL) return 0;
-
-  switch (feature) {
-    case WEBP_FF_FORMAT_FLAGS:     return dmux->feature_flags_;
-    case WEBP_FF_CANVAS_WIDTH:     return (uint32_t)dmux->canvas_width_;
-    case WEBP_FF_CANVAS_HEIGHT:    return (uint32_t)dmux->canvas_height_;
-    case WEBP_FF_LOOP_COUNT:       return (uint32_t)dmux->loop_count_;
-    case WEBP_FF_BACKGROUND_COLOR: return dmux->bgcolor_;
-    case WEBP_FF_FRAME_COUNT:      return (uint32_t)dmux->num_frames_;
-  }
-  return 0;
-}
-
-// -----------------------------------------------------------------------------
-// Frame iteration
-
-static const Frame* GetFrame(const WebPDemuxer* const dmux, int frame_num) {
-  const Frame* f;
-  for (f = dmux->frames_; f != NULL; f = f->next_) {
-    if (frame_num == f->frame_num_) break;
-  }
-  return f;
-}
-
-static const uint8_t* GetFramePayload(const uint8_t* const mem_buf,
-                                      const Frame* const frame,
-                                      size_t* const data_size) {
-  *data_size = 0;
-  if (frame != NULL) {
-    const ChunkData* const image = frame->img_components_;
-    const ChunkData* const alpha = frame->img_components_ + 1;
-    size_t start_offset = image->offset_;
-    *data_size = image->size_;
-
-    // if alpha exists it precedes image, update the size allowing for
-    // intervening chunks.
-    if (alpha->size_ > 0) {
-      const size_t inter_size = (image->offset_ > 0)
-                              ? image->offset_ - (alpha->offset_ + alpha->size_)
-                              : 0;
-      start_offset = alpha->offset_;
-      *data_size  += alpha->size_ + inter_size;
-    }
-    return mem_buf + start_offset;
-  }
-  return NULL;
-}
-
-// Create a whole 'frame' from VP8 (+ alpha) or lossless.
-static int SynthesizeFrame(const WebPDemuxer* const dmux,
-                           const Frame* const frame,
-                           WebPIterator* const iter) {
-  const uint8_t* const mem_buf = dmux->mem_.buf_;
-  size_t payload_size = 0;
-  const uint8_t* const payload = GetFramePayload(mem_buf, frame, &payload_size);
-  if (payload == NULL) return 0;
-  assert(frame != NULL);
-
-  iter->frame_num      = frame->frame_num_;
-  iter->num_frames     = dmux->num_frames_;
-  iter->x_offset       = frame->x_offset_;
-  iter->y_offset       = frame->y_offset_;
-  iter->width          = frame->width_;
-  iter->height         = frame->height_;
-  iter->has_alpha      = frame->has_alpha_;
-  iter->duration       = frame->duration_;
-  iter->dispose_method = frame->dispose_method_;
-  iter->blend_method   = frame->blend_method_;
-  iter->complete       = frame->complete_;
-  iter->fragment.bytes = payload;
-  iter->fragment.size  = payload_size;
-  return 1;
-}
-
-static int SetFrame(int frame_num, WebPIterator* const iter) {
-  const Frame* frame;
-  const WebPDemuxer* const dmux = (WebPDemuxer*)iter->private_;
-  if (dmux == NULL || frame_num < 0) return 0;
-  if (frame_num > dmux->num_frames_) return 0;
-  if (frame_num == 0) frame_num = dmux->num_frames_;
-
-  frame = GetFrame(dmux, frame_num);
-  if (frame == NULL) return 0;
-
-  return SynthesizeFrame(dmux, frame, iter);
-}
-
-int WebPDemuxGetFrame(const WebPDemuxer* dmux, int frame, WebPIterator* iter) {
-  if (iter == NULL) return 0;
-
-  memset(iter, 0, sizeof(*iter));
-  iter->private_ = (void*)dmux;
-  return SetFrame(frame, iter);
-}
-
-int WebPDemuxNextFrame(WebPIterator* iter) {
-  if (iter == NULL) return 0;
-  return SetFrame(iter->frame_num + 1, iter);
-}
-
-int WebPDemuxPrevFrame(WebPIterator* iter) {
-  if (iter == NULL) return 0;
-  if (iter->frame_num <= 1) return 0;
-  return SetFrame(iter->frame_num - 1, iter);
-}
-
-void WebPDemuxReleaseIterator(WebPIterator* iter) {
-  (void)iter;
-}
-
-// -----------------------------------------------------------------------------
-// Chunk iteration
-
-static int ChunkCount(const WebPDemuxer* const dmux, const char fourcc[4]) {
-  const uint8_t* const mem_buf = dmux->mem_.buf_;
-  const Chunk* c;
-  int count = 0;
-  for (c = dmux->chunks_; c != NULL; c = c->next_) {
-    const uint8_t* const header = mem_buf + c->data_.offset_;
-    if (!memcmp(header, fourcc, TAG_SIZE)) ++count;
-  }
-  return count;
-}
-
-static const Chunk* GetChunk(const WebPDemuxer* const dmux,
-                             const char fourcc[4], int chunk_num) {
-  const uint8_t* const mem_buf = dmux->mem_.buf_;
-  const Chunk* c;
-  int count = 0;
-  for (c = dmux->chunks_; c != NULL; c = c->next_) {
-    const uint8_t* const header = mem_buf + c->data_.offset_;
-    if (!memcmp(header, fourcc, TAG_SIZE)) ++count;
-    if (count == chunk_num) break;
-  }
-  return c;
-}
-
-static int SetChunk(const char fourcc[4], int chunk_num,
-                    WebPChunkIterator* const iter) {
-  const WebPDemuxer* const dmux = (WebPDemuxer*)iter->private_;
-  int count;
-
-  if (dmux == NULL || fourcc == NULL || chunk_num < 0) return 0;
-  count = ChunkCount(dmux, fourcc);
-  if (count == 0) return 0;
-  if (chunk_num == 0) chunk_num = count;
-
-  if (chunk_num <= count) {
-    const uint8_t* const mem_buf = dmux->mem_.buf_;
-    const Chunk* const chunk = GetChunk(dmux, fourcc, chunk_num);
-    iter->chunk.bytes = mem_buf + chunk->data_.offset_ + CHUNK_HEADER_SIZE;
-    iter->chunk.size  = chunk->data_.size_ - CHUNK_HEADER_SIZE;
-    iter->num_chunks  = count;
-    iter->chunk_num   = chunk_num;
-    return 1;
-  }
-  return 0;
-}
-
-int WebPDemuxGetChunk(const WebPDemuxer* dmux,
-                      const char fourcc[4], int chunk_num,
-                      WebPChunkIterator* iter) {
-  if (iter == NULL) return 0;
-
-  memset(iter, 0, sizeof(*iter));
-  iter->private_ = (void*)dmux;
-  return SetChunk(fourcc, chunk_num, iter);
-}
-
-int WebPDemuxNextChunk(WebPChunkIterator* iter) {
-  if (iter != NULL) {
-    const char* const fourcc =
-        (const char*)iter->chunk.bytes - CHUNK_HEADER_SIZE;
-    return SetChunk(fourcc, iter->chunk_num + 1, iter);
-  }
-  return 0;
-}
-
-int WebPDemuxPrevChunk(WebPChunkIterator* iter) {
-  if (iter != NULL && iter->chunk_num > 1) {
-    const char* const fourcc =
-        (const char*)iter->chunk.bytes - CHUNK_HEADER_SIZE;
-    return SetChunk(fourcc, iter->chunk_num - 1, iter);
-  }
-  return 0;
-}
-
-void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter) {
-  (void)iter;
-}
-
diff --git a/ios/Pods/libwebp/src/dsp/alpha_processing.c b/ios/Pods/libwebp/src/dsp/alpha_processing.c
deleted file mode 100644
index 819d139..0000000
--- a/ios/Pods/libwebp/src/dsp/alpha_processing.c
+++ /dev/null
@@ -1,472 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Utilities for processing transparent channel.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include "src/dsp/dsp.h"
-
-// Tables can be faster on some platform but incur some extra binary size (~2k).
-#if !defined(USE_TABLES_FOR_ALPHA_MULT)
-#define USE_TABLES_FOR_ALPHA_MULT 0   // ALTERNATE_CODE
-#endif
-
-
-// -----------------------------------------------------------------------------
-
-#define MFIX 24    // 24bit fixed-point arithmetic
-#define HALF ((1u << MFIX) >> 1)
-#define KINV_255 ((1u << MFIX) / 255u)
-
-static uint32_t Mult(uint8_t x, uint32_t mult) {
-  const uint32_t v = (x * mult + HALF) >> MFIX;
-  assert(v <= 255);  // <- 24bit precision is enough to ensure that.
-  return v;
-}
-
-#if (USE_TABLES_FOR_ALPHA_MULT == 1)
-
-static const uint32_t kMultTables[2][256] = {
-  {    // (255u << MFIX) / alpha
-    0x00000000, 0xff000000, 0x7f800000, 0x55000000, 0x3fc00000, 0x33000000,
-    0x2a800000, 0x246db6db, 0x1fe00000, 0x1c555555, 0x19800000, 0x172e8ba2,
-    0x15400000, 0x139d89d8, 0x1236db6d, 0x11000000, 0x0ff00000, 0x0f000000,
-    0x0e2aaaaa, 0x0d6bca1a, 0x0cc00000, 0x0c249249, 0x0b9745d1, 0x0b1642c8,
-    0x0aa00000, 0x0a333333, 0x09cec4ec, 0x0971c71c, 0x091b6db6, 0x08cb08d3,
-    0x08800000, 0x0839ce73, 0x07f80000, 0x07ba2e8b, 0x07800000, 0x07492492,
-    0x07155555, 0x06e45306, 0x06b5e50d, 0x0689d89d, 0x06600000, 0x063831f3,
-    0x06124924, 0x05ee23b8, 0x05cba2e8, 0x05aaaaaa, 0x058b2164, 0x056cefa8,
-    0x05500000, 0x05343eb1, 0x05199999, 0x05000000, 0x04e76276, 0x04cfb2b7,
-    0x04b8e38e, 0x04a2e8ba, 0x048db6db, 0x0479435e, 0x04658469, 0x045270d0,
-    0x04400000, 0x042e29f7, 0x041ce739, 0x040c30c3, 0x03fc0000, 0x03ec4ec4,
-    0x03dd1745, 0x03ce540f, 0x03c00000, 0x03b21642, 0x03a49249, 0x03976fc6,
-    0x038aaaaa, 0x037e3f1f, 0x03722983, 0x03666666, 0x035af286, 0x034fcace,
-    0x0344ec4e, 0x033a5440, 0x03300000, 0x0325ed09, 0x031c18f9, 0x0312818a,
-    0x03092492, 0x03000000, 0x02f711dc, 0x02ee5846, 0x02e5d174, 0x02dd7baf,
-    0x02d55555, 0x02cd5cd5, 0x02c590b2, 0x02bdef7b, 0x02b677d4, 0x02af286b,
-    0x02a80000, 0x02a0fd5c, 0x029a1f58, 0x029364d9, 0x028ccccc, 0x0286562d,
-    0x02800000, 0x0279c952, 0x0273b13b, 0x026db6db, 0x0267d95b, 0x026217ec,
-    0x025c71c7, 0x0256e62a, 0x0251745d, 0x024c1bac, 0x0246db6d, 0x0241b2f9,
-    0x023ca1af, 0x0237a6f4, 0x0232c234, 0x022df2df, 0x02293868, 0x02249249,
-    0x02200000, 0x021b810e, 0x021714fb, 0x0212bb51, 0x020e739c, 0x020a3d70,
-    0x02061861, 0x02020408, 0x01fe0000, 0x01fa0be8, 0x01f62762, 0x01f25213,
-    0x01ee8ba2, 0x01ead3ba, 0x01e72a07, 0x01e38e38, 0x01e00000, 0x01dc7f10,
-    0x01d90b21, 0x01d5a3e9, 0x01d24924, 0x01cefa8d, 0x01cbb7e3, 0x01c880e5,
-    0x01c55555, 0x01c234f7, 0x01bf1f8f, 0x01bc14e5, 0x01b914c1, 0x01b61eed,
-    0x01b33333, 0x01b05160, 0x01ad7943, 0x01aaaaaa, 0x01a7e567, 0x01a5294a,
-    0x01a27627, 0x019fcbd2, 0x019d2a20, 0x019a90e7, 0x01980000, 0x01957741,
-    0x0192f684, 0x01907da4, 0x018e0c7c, 0x018ba2e8, 0x018940c5, 0x0186e5f0,
-    0x01849249, 0x018245ae, 0x01800000, 0x017dc11f, 0x017b88ee, 0x0179574e,
-    0x01772c23, 0x01750750, 0x0172e8ba, 0x0170d045, 0x016ebdd7, 0x016cb157,
-    0x016aaaaa, 0x0168a9b9, 0x0166ae6a, 0x0164b8a7, 0x0162c859, 0x0160dd67,
-    0x015ef7bd, 0x015d1745, 0x015b3bea, 0x01596596, 0x01579435, 0x0155c7b4,
-    0x01540000, 0x01523d03, 0x01507eae, 0x014ec4ec, 0x014d0fac, 0x014b5edc,
-    0x0149b26c, 0x01480a4a, 0x01466666, 0x0144c6af, 0x01432b16, 0x0141938b,
-    0x01400000, 0x013e7063, 0x013ce4a9, 0x013b5cc0, 0x0139d89d, 0x01385830,
-    0x0136db6d, 0x01356246, 0x0133ecad, 0x01327a97, 0x01310bf6, 0x012fa0be,
-    0x012e38e3, 0x012cd459, 0x012b7315, 0x012a150a, 0x0128ba2e, 0x01276276,
-    0x01260dd6, 0x0124bc44, 0x01236db6, 0x01222222, 0x0120d97c, 0x011f93bc,
-    0x011e50d7, 0x011d10c4, 0x011bd37a, 0x011a98ef, 0x0119611a, 0x01182bf2,
-    0x0116f96f, 0x0115c988, 0x01149c34, 0x0113716a, 0x01124924, 0x01112358,
-    0x01100000, 0x010edf12, 0x010dc087, 0x010ca458, 0x010b8a7d, 0x010a72f0,
-    0x01095da8, 0x01084a9f, 0x010739ce, 0x01062b2e, 0x01051eb8, 0x01041465,
-    0x01030c30, 0x01020612, 0x01010204, 0x01000000 },
-  {   // alpha * KINV_255
-    0x00000000, 0x00010101, 0x00020202, 0x00030303, 0x00040404, 0x00050505,
-    0x00060606, 0x00070707, 0x00080808, 0x00090909, 0x000a0a0a, 0x000b0b0b,
-    0x000c0c0c, 0x000d0d0d, 0x000e0e0e, 0x000f0f0f, 0x00101010, 0x00111111,
-    0x00121212, 0x00131313, 0x00141414, 0x00151515, 0x00161616, 0x00171717,
-    0x00181818, 0x00191919, 0x001a1a1a, 0x001b1b1b, 0x001c1c1c, 0x001d1d1d,
-    0x001e1e1e, 0x001f1f1f, 0x00202020, 0x00212121, 0x00222222, 0x00232323,
-    0x00242424, 0x00252525, 0x00262626, 0x00272727, 0x00282828, 0x00292929,
-    0x002a2a2a, 0x002b2b2b, 0x002c2c2c, 0x002d2d2d, 0x002e2e2e, 0x002f2f2f,
-    0x00303030, 0x00313131, 0x00323232, 0x00333333, 0x00343434, 0x00353535,
-    0x00363636, 0x00373737, 0x00383838, 0x00393939, 0x003a3a3a, 0x003b3b3b,
-    0x003c3c3c, 0x003d3d3d, 0x003e3e3e, 0x003f3f3f, 0x00404040, 0x00414141,
-    0x00424242, 0x00434343, 0x00444444, 0x00454545, 0x00464646, 0x00474747,
-    0x00484848, 0x00494949, 0x004a4a4a, 0x004b4b4b, 0x004c4c4c, 0x004d4d4d,
-    0x004e4e4e, 0x004f4f4f, 0x00505050, 0x00515151, 0x00525252, 0x00535353,
-    0x00545454, 0x00555555, 0x00565656, 0x00575757, 0x00585858, 0x00595959,
-    0x005a5a5a, 0x005b5b5b, 0x005c5c5c, 0x005d5d5d, 0x005e5e5e, 0x005f5f5f,
-    0x00606060, 0x00616161, 0x00626262, 0x00636363, 0x00646464, 0x00656565,
-    0x00666666, 0x00676767, 0x00686868, 0x00696969, 0x006a6a6a, 0x006b6b6b,
-    0x006c6c6c, 0x006d6d6d, 0x006e6e6e, 0x006f6f6f, 0x00707070, 0x00717171,
-    0x00727272, 0x00737373, 0x00747474, 0x00757575, 0x00767676, 0x00777777,
-    0x00787878, 0x00797979, 0x007a7a7a, 0x007b7b7b, 0x007c7c7c, 0x007d7d7d,
-    0x007e7e7e, 0x007f7f7f, 0x00808080, 0x00818181, 0x00828282, 0x00838383,
-    0x00848484, 0x00858585, 0x00868686, 0x00878787, 0x00888888, 0x00898989,
-    0x008a8a8a, 0x008b8b8b, 0x008c8c8c, 0x008d8d8d, 0x008e8e8e, 0x008f8f8f,
-    0x00909090, 0x00919191, 0x00929292, 0x00939393, 0x00949494, 0x00959595,
-    0x00969696, 0x00979797, 0x00989898, 0x00999999, 0x009a9a9a, 0x009b9b9b,
-    0x009c9c9c, 0x009d9d9d, 0x009e9e9e, 0x009f9f9f, 0x00a0a0a0, 0x00a1a1a1,
-    0x00a2a2a2, 0x00a3a3a3, 0x00a4a4a4, 0x00a5a5a5, 0x00a6a6a6, 0x00a7a7a7,
-    0x00a8a8a8, 0x00a9a9a9, 0x00aaaaaa, 0x00ababab, 0x00acacac, 0x00adadad,
-    0x00aeaeae, 0x00afafaf, 0x00b0b0b0, 0x00b1b1b1, 0x00b2b2b2, 0x00b3b3b3,
-    0x00b4b4b4, 0x00b5b5b5, 0x00b6b6b6, 0x00b7b7b7, 0x00b8b8b8, 0x00b9b9b9,
-    0x00bababa, 0x00bbbbbb, 0x00bcbcbc, 0x00bdbdbd, 0x00bebebe, 0x00bfbfbf,
-    0x00c0c0c0, 0x00c1c1c1, 0x00c2c2c2, 0x00c3c3c3, 0x00c4c4c4, 0x00c5c5c5,
-    0x00c6c6c6, 0x00c7c7c7, 0x00c8c8c8, 0x00c9c9c9, 0x00cacaca, 0x00cbcbcb,
-    0x00cccccc, 0x00cdcdcd, 0x00cecece, 0x00cfcfcf, 0x00d0d0d0, 0x00d1d1d1,
-    0x00d2d2d2, 0x00d3d3d3, 0x00d4d4d4, 0x00d5d5d5, 0x00d6d6d6, 0x00d7d7d7,
-    0x00d8d8d8, 0x00d9d9d9, 0x00dadada, 0x00dbdbdb, 0x00dcdcdc, 0x00dddddd,
-    0x00dedede, 0x00dfdfdf, 0x00e0e0e0, 0x00e1e1e1, 0x00e2e2e2, 0x00e3e3e3,
-    0x00e4e4e4, 0x00e5e5e5, 0x00e6e6e6, 0x00e7e7e7, 0x00e8e8e8, 0x00e9e9e9,
-    0x00eaeaea, 0x00ebebeb, 0x00ececec, 0x00ededed, 0x00eeeeee, 0x00efefef,
-    0x00f0f0f0, 0x00f1f1f1, 0x00f2f2f2, 0x00f3f3f3, 0x00f4f4f4, 0x00f5f5f5,
-    0x00f6f6f6, 0x00f7f7f7, 0x00f8f8f8, 0x00f9f9f9, 0x00fafafa, 0x00fbfbfb,
-    0x00fcfcfc, 0x00fdfdfd, 0x00fefefe, 0x00ffffff }
-};
-
-static WEBP_INLINE uint32_t GetScale(uint32_t a, int inverse) {
-  return kMultTables[!inverse][a];
-}
-
-#else
-
-static WEBP_INLINE uint32_t GetScale(uint32_t a, int inverse) {
-  return inverse ? (255u << MFIX) / a : a * KINV_255;
-}
-
-#endif  // USE_TABLES_FOR_ALPHA_MULT
-
-void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse) {
-  int x;
-  for (x = 0; x < width; ++x) {
-    const uint32_t argb = ptr[x];
-    if (argb < 0xff000000u) {      // alpha < 255
-      if (argb <= 0x00ffffffu) {   // alpha == 0
-        ptr[x] = 0;
-      } else {
-        const uint32_t alpha = (argb >> 24) & 0xff;
-        const uint32_t scale = GetScale(alpha, inverse);
-        uint32_t out = argb & 0xff000000u;
-        out |= Mult(argb >>  0, scale) <<  0;
-        out |= Mult(argb >>  8, scale) <<  8;
-        out |= Mult(argb >> 16, scale) << 16;
-        ptr[x] = out;
-      }
-    }
-  }
-}
-
-void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha,
-                   int width, int inverse) {
-  int x;
-  for (x = 0; x < width; ++x) {
-    const uint32_t a = alpha[x];
-    if (a != 255) {
-      if (a == 0) {
-        ptr[x] = 0;
-      } else {
-        const uint32_t scale = GetScale(a, inverse);
-        ptr[x] = Mult(ptr[x], scale);
-      }
-    }
-  }
-}
-
-#undef KINV_255
-#undef HALF
-#undef MFIX
-
-void (*WebPMultARGBRow)(uint32_t* const ptr, int width, int inverse);
-void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha,
-                    int width, int inverse);
-
-//------------------------------------------------------------------------------
-// Generic per-plane calls
-
-void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows,
-                      int inverse) {
-  int n;
-  for (n = 0; n < num_rows; ++n) {
-    WebPMultARGBRow((uint32_t*)ptr, width, inverse);
-    ptr += stride;
-  }
-}
-
-void WebPMultRows(uint8_t* ptr, int stride,
-                  const uint8_t* alpha, int alpha_stride,
-                  int width, int num_rows, int inverse) {
-  int n;
-  for (n = 0; n < num_rows; ++n) {
-    WebPMultRow(ptr, alpha, width, inverse);
-    ptr += stride;
-    alpha += alpha_stride;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Premultiplied modes
-
-// non dithered-modes
-
-// (x * a * 32897) >> 23 is bit-wise equivalent to (int)(x * a / 255.)
-// for all 8bit x or a. For bit-wise equivalence to (int)(x * a / 255. + .5),
-// one can use instead: (x * a * 65793 + (1 << 23)) >> 24
-#if 1     // (int)(x * a / 255.)
-#define MULTIPLIER(a)   ((a) * 32897U)
-#define PREMULTIPLY(x, m) (((x) * (m)) >> 23)
-#else     // (int)(x * a / 255. + .5)
-#define MULTIPLIER(a) ((a) * 65793U)
-#define PREMULTIPLY(x, m) (((x) * (m) + (1U << 23)) >> 24)
-#endif
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void ApplyAlphaMultiply_C(uint8_t* rgba, int alpha_first,
-                                 int w, int h, int stride) {
-  while (h-- > 0) {
-    uint8_t* const rgb = rgba + (alpha_first ? 1 : 0);
-    const uint8_t* const alpha = rgba + (alpha_first ? 0 : 3);
-    int i;
-    for (i = 0; i < w; ++i) {
-      const uint32_t a = alpha[4 * i];
-      if (a != 0xff) {
-        const uint32_t mult = MULTIPLIER(a);
-        rgb[4 * i + 0] = PREMULTIPLY(rgb[4 * i + 0], mult);
-        rgb[4 * i + 1] = PREMULTIPLY(rgb[4 * i + 1], mult);
-        rgb[4 * i + 2] = PREMULTIPLY(rgb[4 * i + 2], mult);
-      }
-    }
-    rgba += stride;
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-#undef MULTIPLIER
-#undef PREMULTIPLY
-
-// rgbA4444
-
-#define MULTIPLIER(a)  ((a) * 0x1111)    // 0x1111 ~= (1 << 16) / 15
-
-static WEBP_INLINE uint8_t dither_hi(uint8_t x) {
-  return (x & 0xf0) | (x >> 4);
-}
-
-static WEBP_INLINE uint8_t dither_lo(uint8_t x) {
-  return (x & 0x0f) | (x << 4);
-}
-
-static WEBP_INLINE uint8_t multiply(uint8_t x, uint32_t m) {
-  return (x * m) >> 16;
-}
-
-static WEBP_INLINE void ApplyAlphaMultiply4444_C(uint8_t* rgba4444,
-                                                 int w, int h, int stride,
-                                                 int rg_byte_pos /* 0 or 1 */) {
-  while (h-- > 0) {
-    int i;
-    for (i = 0; i < w; ++i) {
-      const uint32_t rg = rgba4444[2 * i + rg_byte_pos];
-      const uint32_t ba = rgba4444[2 * i + (rg_byte_pos ^ 1)];
-      const uint8_t a = ba & 0x0f;
-      const uint32_t mult = MULTIPLIER(a);
-      const uint8_t r = multiply(dither_hi(rg), mult);
-      const uint8_t g = multiply(dither_lo(rg), mult);
-      const uint8_t b = multiply(dither_hi(ba), mult);
-      rgba4444[2 * i + rg_byte_pos] = (r & 0xf0) | ((g >> 4) & 0x0f);
-      rgba4444[2 * i + (rg_byte_pos ^ 1)] = (b & 0xf0) | a;
-    }
-    rgba4444 += stride;
-  }
-}
-#undef MULTIPLIER
-
-static void ApplyAlphaMultiply_16b_C(uint8_t* rgba4444,
-                                     int w, int h, int stride) {
-#if (WEBP_SWAP_16BIT_CSP == 1)
-  ApplyAlphaMultiply4444_C(rgba4444, w, h, stride, 1);
-#else
-  ApplyAlphaMultiply4444_C(rgba4444, w, h, stride, 0);
-#endif
-}
-
-#if !WEBP_NEON_OMIT_C_CODE
-static int DispatchAlpha_C(const uint8_t* alpha, int alpha_stride,
-                           int width, int height,
-                           uint8_t* dst, int dst_stride) {
-  uint32_t alpha_mask = 0xff;
-  int i, j;
-
-  for (j = 0; j < height; ++j) {
-    for (i = 0; i < width; ++i) {
-      const uint32_t alpha_value = alpha[i];
-      dst[4 * i] = alpha_value;
-      alpha_mask &= alpha_value;
-    }
-    alpha += alpha_stride;
-    dst += dst_stride;
-  }
-
-  return (alpha_mask != 0xff);
-}
-
-static void DispatchAlphaToGreen_C(const uint8_t* alpha, int alpha_stride,
-                                   int width, int height,
-                                   uint32_t* dst, int dst_stride) {
-  int i, j;
-  for (j = 0; j < height; ++j) {
-    for (i = 0; i < width; ++i) {
-      dst[i] = alpha[i] << 8;  // leave A/R/B channels zero'd.
-    }
-    alpha += alpha_stride;
-    dst += dst_stride;
-  }
-}
-
-static int ExtractAlpha_C(const uint8_t* argb, int argb_stride,
-                          int width, int height,
-                          uint8_t* alpha, int alpha_stride) {
-  uint8_t alpha_mask = 0xff;
-  int i, j;
-
-  for (j = 0; j < height; ++j) {
-    for (i = 0; i < width; ++i) {
-      const uint8_t alpha_value = argb[4 * i];
-      alpha[i] = alpha_value;
-      alpha_mask &= alpha_value;
-    }
-    argb += argb_stride;
-    alpha += alpha_stride;
-  }
-  return (alpha_mask == 0xff);
-}
-
-static void ExtractGreen_C(const uint32_t* argb, uint8_t* alpha, int size) {
-  int i;
-  for (i = 0; i < size; ++i) alpha[i] = argb[i] >> 8;
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-//------------------------------------------------------------------------------
-
-static int HasAlpha8b_C(const uint8_t* src, int length) {
-  while (length-- > 0) if (*src++ != 0xff) return 1;
-  return 0;
-}
-
-static int HasAlpha32b_C(const uint8_t* src, int length) {
-  int x;
-  for (x = 0; length-- > 0; x += 4) if (src[x] != 0xff) return 1;
-  return 0;
-}
-
-//------------------------------------------------------------------------------
-// Simple channel manipulations.
-
-static WEBP_INLINE uint32_t MakeARGB32(int a, int r, int g, int b) {
-  return (((uint32_t)a << 24) | (r << 16) | (g << 8) | b);
-}
-
-#ifdef WORDS_BIGENDIAN
-static void PackARGB_C(const uint8_t* a, const uint8_t* r, const uint8_t* g,
-                       const uint8_t* b, int len, uint32_t* out) {
-  int i;
-  for (i = 0; i < len; ++i) {
-    out[i] = MakeARGB32(a[4 * i], r[4 * i], g[4 * i], b[4 * i]);
-  }
-}
-#endif
-
-static void PackRGB_C(const uint8_t* r, const uint8_t* g, const uint8_t* b,
-                      int len, int step, uint32_t* out) {
-  int i, offset = 0;
-  for (i = 0; i < len; ++i) {
-    out[i] = MakeARGB32(0xff, r[offset], g[offset], b[offset]);
-    offset += step;
-  }
-}
-
-void (*WebPApplyAlphaMultiply)(uint8_t*, int, int, int, int);
-void (*WebPApplyAlphaMultiply4444)(uint8_t*, int, int, int);
-int (*WebPDispatchAlpha)(const uint8_t*, int, int, int, uint8_t*, int);
-void (*WebPDispatchAlphaToGreen)(const uint8_t*, int, int, int, uint32_t*, int);
-int (*WebPExtractAlpha)(const uint8_t*, int, int, int, uint8_t*, int);
-void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size);
-#ifdef WORDS_BIGENDIAN
-void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r, const uint8_t* g,
-                     const uint8_t* b, int, uint32_t*);
-#endif
-void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b,
-                    int len, int step, uint32_t* out);
-
-int (*WebPHasAlpha8b)(const uint8_t* src, int length);
-int (*WebPHasAlpha32b)(const uint8_t* src, int length);
-
-//------------------------------------------------------------------------------
-// Init function
-
-extern void WebPInitAlphaProcessingMIPSdspR2(void);
-extern void WebPInitAlphaProcessingSSE2(void);
-extern void WebPInitAlphaProcessingSSE41(void);
-extern void WebPInitAlphaProcessingNEON(void);
-
-WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) {
-  WebPMultARGBRow = WebPMultARGBRow_C;
-  WebPMultRow = WebPMultRow_C;
-  WebPApplyAlphaMultiply4444 = ApplyAlphaMultiply_16b_C;
-
-#ifdef WORDS_BIGENDIAN
-  WebPPackARGB = PackARGB_C;
-#endif
-  WebPPackRGB = PackRGB_C;
-#if !WEBP_NEON_OMIT_C_CODE
-  WebPApplyAlphaMultiply = ApplyAlphaMultiply_C;
-  WebPDispatchAlpha = DispatchAlpha_C;
-  WebPDispatchAlphaToGreen = DispatchAlphaToGreen_C;
-  WebPExtractAlpha = ExtractAlpha_C;
-  WebPExtractGreen = ExtractGreen_C;
-#endif
-
-  WebPHasAlpha8b = HasAlpha8b_C;
-  WebPHasAlpha32b = HasAlpha32b_C;
-
-  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      WebPInitAlphaProcessingSSE2();
-#if defined(WEBP_USE_SSE41)
-      if (VP8GetCPUInfo(kSSE4_1)) {
-        WebPInitAlphaProcessingSSE41();
-      }
-#endif
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      WebPInitAlphaProcessingMIPSdspR2();
-    }
-#endif
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    WebPInitAlphaProcessingNEON();
-  }
-#endif
-
-  assert(WebPMultARGBRow != NULL);
-  assert(WebPMultRow != NULL);
-  assert(WebPApplyAlphaMultiply != NULL);
-  assert(WebPApplyAlphaMultiply4444 != NULL);
-  assert(WebPDispatchAlpha != NULL);
-  assert(WebPDispatchAlphaToGreen != NULL);
-  assert(WebPExtractAlpha != NULL);
-  assert(WebPExtractGreen != NULL);
-#ifdef WORDS_BIGENDIAN
-  assert(WebPPackARGB != NULL);
-#endif
-  assert(WebPPackRGB != NULL);
-  assert(WebPHasAlpha8b != NULL);
-  assert(WebPHasAlpha32b != NULL);
-}
diff --git a/ios/Pods/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c
deleted file mode 100644
index 0090e87..0000000
--- a/ios/Pods/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Utilities for processing transparent channel.
-//
-// Author(s): Branimir Vasic (branimir.vasic@imgtec.com)
-//            Djordje Pesut  (djordje.pesut@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-static int DispatchAlpha_MIPSdspR2(const uint8_t* alpha, int alpha_stride,
-                                   int width, int height,
-                                   uint8_t* dst, int dst_stride) {
-  uint32_t alpha_mask = 0xffffffff;
-  int i, j, temp0;
-
-  for (j = 0; j < height; ++j) {
-    uint8_t* pdst = dst;
-    const uint8_t* palpha = alpha;
-    for (i = 0; i < (width >> 2); ++i) {
-      int temp1, temp2, temp3;
-
-      __asm__ volatile (
-        "ulw    %[temp0],      0(%[palpha])                \n\t"
-        "addiu  %[palpha],     %[palpha],     4            \n\t"
-        "addiu  %[pdst],       %[pdst],       16           \n\t"
-        "srl    %[temp1],      %[temp0],      8            \n\t"
-        "srl    %[temp2],      %[temp0],      16           \n\t"
-        "srl    %[temp3],      %[temp0],      24           \n\t"
-        "and    %[alpha_mask], %[alpha_mask], %[temp0]     \n\t"
-        "sb     %[temp0],      -16(%[pdst])                \n\t"
-        "sb     %[temp1],      -12(%[pdst])                \n\t"
-        "sb     %[temp2],      -8(%[pdst])                 \n\t"
-        "sb     %[temp3],      -4(%[pdst])                 \n\t"
-        : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-          [temp3]"=&r"(temp3), [palpha]"+r"(palpha), [pdst]"+r"(pdst),
-          [alpha_mask]"+r"(alpha_mask)
-        :
-        : "memory"
-      );
-    }
-
-    for (i = 0; i < (width & 3); ++i) {
-      __asm__ volatile (
-        "lbu    %[temp0],      0(%[palpha])                \n\t"
-        "addiu  %[palpha],     %[palpha],     1            \n\t"
-        "sb     %[temp0],      0(%[pdst])                  \n\t"
-        "and    %[alpha_mask], %[alpha_mask], %[temp0]     \n\t"
-        "addiu  %[pdst],       %[pdst],       4            \n\t"
-        : [temp0]"=&r"(temp0), [palpha]"+r"(palpha), [pdst]"+r"(pdst),
-          [alpha_mask]"+r"(alpha_mask)
-        :
-        : "memory"
-      );
-    }
-    alpha += alpha_stride;
-    dst += dst_stride;
-  }
-
-  __asm__ volatile (
-    "ext    %[temp0],      %[alpha_mask], 0, 16            \n\t"
-    "srl    %[alpha_mask], %[alpha_mask], 16               \n\t"
-    "and    %[alpha_mask], %[alpha_mask], %[temp0]         \n\t"
-    "ext    %[temp0],      %[alpha_mask], 0, 8             \n\t"
-    "srl    %[alpha_mask], %[alpha_mask], 8                \n\t"
-    "and    %[alpha_mask], %[alpha_mask], %[temp0]         \n\t"
-    : [temp0]"=&r"(temp0), [alpha_mask]"+r"(alpha_mask)
-    :
-  );
-
-  return (alpha_mask != 0xff);
-}
-
-static void MultARGBRow_MIPSdspR2(uint32_t* const ptr, int width,
-                                  int inverse) {
-  int x;
-  const uint32_t c_00ffffff = 0x00ffffffu;
-  const uint32_t c_ff000000 = 0xff000000u;
-  const uint32_t c_8000000  = 0x00800000u;
-  const uint32_t c_8000080  = 0x00800080u;
-  for (x = 0; x < width; ++x) {
-    const uint32_t argb = ptr[x];
-    if (argb < 0xff000000u) {      // alpha < 255
-      if (argb <= 0x00ffffffu) {   // alpha == 0
-        ptr[x] = 0;
-      } else {
-        int temp0, temp1, temp2, temp3, alpha;
-        __asm__ volatile (
-          "srl          %[alpha],   %[argb],       24                \n\t"
-          "replv.qb     %[temp0],   %[alpha]                         \n\t"
-          "and          %[temp0],   %[temp0],      %[c_00ffffff]     \n\t"
-          "beqz         %[inverse], 0f                               \n\t"
-          "divu         $zero,      %[c_ff000000], %[alpha]          \n\t"
-          "mflo         %[temp0]                                     \n\t"
-        "0:                                                          \n\t"
-          "andi         %[temp1],   %[argb],       0xff              \n\t"
-          "ext          %[temp2],   %[argb],       8,             8  \n\t"
-          "ext          %[temp3],   %[argb],       16,            8  \n\t"
-          "mul          %[temp1],   %[temp1],      %[temp0]          \n\t"
-          "mul          %[temp2],   %[temp2],      %[temp0]          \n\t"
-          "mul          %[temp3],   %[temp3],      %[temp0]          \n\t"
-          "precrq.ph.w  %[temp1],   %[temp2],      %[temp1]          \n\t"
-          "addu         %[temp3],   %[temp3],      %[c_8000000]      \n\t"
-          "addu         %[temp1],   %[temp1],      %[c_8000080]      \n\t"
-          "precrq.ph.w  %[temp3],   %[argb],       %[temp3]          \n\t"
-          "precrq.qb.ph %[temp1],   %[temp3],      %[temp1]          \n\t"
-          : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-            [temp3]"=&r"(temp3), [alpha]"=&r"(alpha)
-          : [inverse]"r"(inverse), [c_00ffffff]"r"(c_00ffffff),
-            [c_8000000]"r"(c_8000000), [c_8000080]"r"(c_8000080),
-            [c_ff000000]"r"(c_ff000000), [argb]"r"(argb)
-          : "memory", "hi", "lo"
-        );
-        ptr[x] = temp1;
-      }
-    }
-  }
-}
-
-#ifdef WORDS_BIGENDIAN
-static void PackARGB_MIPSdspR2(const uint8_t* a, const uint8_t* r,
-                               const uint8_t* g, const uint8_t* b, int len,
-                               uint32_t* out) {
-  int temp0, temp1, temp2, temp3, offset;
-  const int rest = len & 1;
-  const uint32_t* const loop_end = out + len - rest;
-  const int step = 4;
-  __asm__ volatile (
-    "xor          %[offset],   %[offset], %[offset]    \n\t"
-    "beq          %[loop_end], %[out],    0f           \n\t"
-  "2:                                                  \n\t"
-    "lbux         %[temp0],    %[offset](%[a])         \n\t"
-    "lbux         %[temp1],    %[offset](%[r])         \n\t"
-    "lbux         %[temp2],    %[offset](%[g])         \n\t"
-    "lbux         %[temp3],    %[offset](%[b])         \n\t"
-    "ins          %[temp1],    %[temp0],  16,     16   \n\t"
-    "ins          %[temp3],    %[temp2],  16,     16   \n\t"
-    "addiu        %[out],      %[out],    4            \n\t"
-    "precr.qb.ph  %[temp0],    %[temp1],  %[temp3]     \n\t"
-    "sw           %[temp0],    -4(%[out])              \n\t"
-    "addu         %[offset],   %[offset], %[step]      \n\t"
-    "bne          %[loop_end], %[out],    2b           \n\t"
-  "0:                                                  \n\t"
-    "beq          %[rest],     $zero,     1f           \n\t"
-    "lbux         %[temp0],    %[offset](%[a])         \n\t"
-    "lbux         %[temp1],    %[offset](%[r])         \n\t"
-    "lbux         %[temp2],    %[offset](%[g])         \n\t"
-    "lbux         %[temp3],    %[offset](%[b])         \n\t"
-    "ins          %[temp1],    %[temp0],  16,     16   \n\t"
-    "ins          %[temp3],    %[temp2],  16,     16   \n\t"
-    "precr.qb.ph  %[temp0],    %[temp1],  %[temp3]     \n\t"
-    "sw           %[temp0],    0(%[out])               \n\t"
-  "1:                                                  \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [offset]"=&r"(offset), [out]"+&r"(out)
-    : [a]"r"(a), [r]"r"(r), [g]"r"(g), [b]"r"(b), [step]"r"(step),
-      [loop_end]"r"(loop_end), [rest]"r"(rest)
-    : "memory"
-  );
-}
-#endif  // WORDS_BIGENDIAN
-
-static void PackRGB_MIPSdspR2(const uint8_t* r, const uint8_t* g,
-                              const uint8_t* b, int len, int step,
-                              uint32_t* out) {
-  int temp0, temp1, temp2, offset;
-  const int rest = len & 1;
-  const int a = 0xff;
-  const uint32_t* const loop_end = out + len - rest;
-  __asm__ volatile (
-    "xor          %[offset],   %[offset], %[offset]    \n\t"
-    "beq          %[loop_end], %[out],    0f           \n\t"
-  "2:                                                  \n\t"
-    "lbux         %[temp0],    %[offset](%[r])         \n\t"
-    "lbux         %[temp1],    %[offset](%[g])         \n\t"
-    "lbux         %[temp2],    %[offset](%[b])         \n\t"
-    "ins          %[temp0],    %[a],      16,     16   \n\t"
-    "ins          %[temp2],    %[temp1],  16,     16   \n\t"
-    "addiu        %[out],      %[out],    4            \n\t"
-    "precr.qb.ph  %[temp0],    %[temp0],  %[temp2]     \n\t"
-    "sw           %[temp0],    -4(%[out])              \n\t"
-    "addu         %[offset],   %[offset], %[step]      \n\t"
-    "bne          %[loop_end], %[out],    2b           \n\t"
-  "0:                                                  \n\t"
-    "beq          %[rest],     $zero,     1f           \n\t"
-    "lbux         %[temp0],    %[offset](%[r])         \n\t"
-    "lbux         %[temp1],    %[offset](%[g])         \n\t"
-    "lbux         %[temp2],    %[offset](%[b])         \n\t"
-    "ins          %[temp0],    %[a],      16,     16   \n\t"
-    "ins          %[temp2],    %[temp1],  16,     16   \n\t"
-    "precr.qb.ph  %[temp0],    %[temp0],  %[temp2]     \n\t"
-    "sw           %[temp0],    0(%[out])               \n\t"
-  "1:                                                  \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [offset]"=&r"(offset), [out]"+&r"(out)
-    : [a]"r"(a), [r]"r"(r), [g]"r"(g), [b]"r"(b), [step]"r"(step),
-      [loop_end]"r"(loop_end), [rest]"r"(rest)
-    : "memory"
-  );
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitAlphaProcessingMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingMIPSdspR2(void) {
-  WebPDispatchAlpha = DispatchAlpha_MIPSdspR2;
-  WebPMultARGBRow = MultARGBRow_MIPSdspR2;
-#ifdef WORDS_BIGENDIAN
-  WebPPackARGB = PackARGB_MIPSdspR2;
-#endif
-  WebPPackRGB = PackRGB_MIPSdspR2;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(WebPInitAlphaProcessingMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/alpha_processing_neon.c b/ios/Pods/libwebp/src/dsp/alpha_processing_neon.c
deleted file mode 100644
index 9d55421..0000000
--- a/ios/Pods/libwebp/src/dsp/alpha_processing_neon.c
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Utilities for processing transparent channel, NEON version.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include "src/dsp/neon.h"
-
-//------------------------------------------------------------------------------
-
-#define MULTIPLIER(a) ((a) * 0x8081)
-#define PREMULTIPLY(x, m) (((x) * (m)) >> 23)
-
-#define MULTIPLY_BY_ALPHA(V, ALPHA, OTHER) do {                        \
-  const uint8x8_t alpha = (V).val[(ALPHA)];                            \
-  const uint16x8_t r1 = vmull_u8((V).val[1], alpha);                   \
-  const uint16x8_t g1 = vmull_u8((V).val[2], alpha);                   \
-  const uint16x8_t b1 = vmull_u8((V).val[(OTHER)], alpha);             \
-  /* we use: v / 255 = (v + 1 + (v >> 8)) >> 8 */                      \
-  const uint16x8_t r2 = vsraq_n_u16(r1, r1, 8);                        \
-  const uint16x8_t g2 = vsraq_n_u16(g1, g1, 8);                        \
-  const uint16x8_t b2 = vsraq_n_u16(b1, b1, 8);                        \
-  const uint16x8_t r3 = vaddq_u16(r2, kOne);                           \
-  const uint16x8_t g3 = vaddq_u16(g2, kOne);                           \
-  const uint16x8_t b3 = vaddq_u16(b2, kOne);                           \
-  (V).val[1] = vshrn_n_u16(r3, 8);                                     \
-  (V).val[2] = vshrn_n_u16(g3, 8);                                     \
-  (V).val[(OTHER)] = vshrn_n_u16(b3, 8);                               \
-} while (0)
-
-static void ApplyAlphaMultiply_NEON(uint8_t* rgba, int alpha_first,
-                                    int w, int h, int stride) {
-  const uint16x8_t kOne = vdupq_n_u16(1u);
-  while (h-- > 0) {
-    uint32_t* const rgbx = (uint32_t*)rgba;
-    int i = 0;
-    if (alpha_first) {
-      for (; i + 8 <= w; i += 8) {
-        // load aaaa...|rrrr...|gggg...|bbbb...
-        uint8x8x4_t RGBX = vld4_u8((const uint8_t*)(rgbx + i));
-        MULTIPLY_BY_ALPHA(RGBX, 0, 3);
-        vst4_u8((uint8_t*)(rgbx + i), RGBX);
-      }
-    } else {
-      for (; i + 8 <= w; i += 8) {
-        uint8x8x4_t RGBX = vld4_u8((const uint8_t*)(rgbx + i));
-        MULTIPLY_BY_ALPHA(RGBX, 3, 0);
-        vst4_u8((uint8_t*)(rgbx + i), RGBX);
-      }
-    }
-    // Finish with left-overs.
-    for (; i < w; ++i) {
-      uint8_t* const rgb = rgba + (alpha_first ? 1 : 0);
-      const uint8_t* const alpha = rgba + (alpha_first ? 0 : 3);
-      const uint32_t a = alpha[4 * i];
-      if (a != 0xff) {
-        const uint32_t mult = MULTIPLIER(a);
-        rgb[4 * i + 0] = PREMULTIPLY(rgb[4 * i + 0], mult);
-        rgb[4 * i + 1] = PREMULTIPLY(rgb[4 * i + 1], mult);
-        rgb[4 * i + 2] = PREMULTIPLY(rgb[4 * i + 2], mult);
-      }
-    }
-    rgba += stride;
-  }
-}
-#undef MULTIPLY_BY_ALPHA
-#undef MULTIPLIER
-#undef PREMULTIPLY
-
-//------------------------------------------------------------------------------
-
-static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride,
-                              int width, int height,
-                              uint8_t* dst, int dst_stride) {
-  uint32_t alpha_mask = 0xffffffffu;
-  uint8x8_t mask8 = vdup_n_u8(0xff);
-  uint32_t tmp[2];
-  int i, j;
-  for (j = 0; j < height; ++j) {
-    // We don't know if alpha is first or last in dst[] (depending on rgbA/Argb
-    // mode). So we must be sure dst[4*i + 8 - 1] is writable for the store.
-    // Hence the test with 'width - 1' instead of just 'width'.
-    for (i = 0; i + 8 <= width - 1; i += 8) {
-      uint8x8x4_t rgbX = vld4_u8((const uint8_t*)(dst + 4 * i));
-      const uint8x8_t alphas = vld1_u8(alpha + i);
-      rgbX.val[0] = alphas;
-      vst4_u8((uint8_t*)(dst + 4 * i), rgbX);
-      mask8 = vand_u8(mask8, alphas);
-    }
-    for (; i < width; ++i) {
-      const uint32_t alpha_value = alpha[i];
-      dst[4 * i] = alpha_value;
-      alpha_mask &= alpha_value;
-    }
-    alpha += alpha_stride;
-    dst += dst_stride;
-  }
-  vst1_u8((uint8_t*)tmp, mask8);
-  alpha_mask &= tmp[0];
-  alpha_mask &= tmp[1];
-  return (alpha_mask != 0xffffffffu);
-}
-
-static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride,
-                                      int width, int height,
-                                      uint32_t* dst, int dst_stride) {
-  int i, j;
-  uint8x8x4_t greens;   // leave A/R/B channels zero'd.
-  greens.val[0] = vdup_n_u8(0);
-  greens.val[2] = vdup_n_u8(0);
-  greens.val[3] = vdup_n_u8(0);
-  for (j = 0; j < height; ++j) {
-    for (i = 0; i + 8 <= width; i += 8) {
-      greens.val[1] = vld1_u8(alpha + i);
-      vst4_u8((uint8_t*)(dst + i), greens);
-    }
-    for (; i < width; ++i) dst[i] = alpha[i] << 8;
-    alpha += alpha_stride;
-    dst += dst_stride;
-  }
-}
-
-static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride,
-                             int width, int height,
-                             uint8_t* alpha, int alpha_stride) {
-  uint32_t alpha_mask = 0xffffffffu;
-  uint8x8_t mask8 = vdup_n_u8(0xff);
-  uint32_t tmp[2];
-  int i, j;
-  for (j = 0; j < height; ++j) {
-    // We don't know if alpha is first or last in dst[] (depending on rgbA/Argb
-    // mode). So we must be sure dst[4*i + 8 - 1] is writable for the store.
-    // Hence the test with 'width - 1' instead of just 'width'.
-    for (i = 0; i + 8 <= width - 1; i += 8) {
-      const uint8x8x4_t rgbX = vld4_u8((const uint8_t*)(argb + 4 * i));
-      const uint8x8_t alphas = rgbX.val[0];
-      vst1_u8((uint8_t*)(alpha + i), alphas);
-      mask8 = vand_u8(mask8, alphas);
-    }
-    for (; i < width; ++i) {
-      alpha[i] = argb[4 * i];
-      alpha_mask &= alpha[i];
-    }
-    argb += argb_stride;
-    alpha += alpha_stride;
-  }
-  vst1_u8((uint8_t*)tmp, mask8);
-  alpha_mask &= tmp[0];
-  alpha_mask &= tmp[1];
-  return (alpha_mask == 0xffffffffu);
-}
-
-static void ExtractGreen_NEON(const uint32_t* argb,
-                              uint8_t* alpha, int size) {
-  int i;
-  for (i = 0; i + 16 <= size; i += 16) {
-    const uint8x16x4_t rgbX = vld4q_u8((const uint8_t*)(argb + i));
-    const uint8x16_t greens = rgbX.val[1];
-    vst1q_u8(alpha + i, greens);
-  }
-  for (; i < size; ++i) alpha[i] = (argb[i] >> 8) & 0xff;
-}
-
-//------------------------------------------------------------------------------
-
-extern void WebPInitAlphaProcessingNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingNEON(void) {
-  WebPApplyAlphaMultiply = ApplyAlphaMultiply_NEON;
-  WebPDispatchAlpha = DispatchAlpha_NEON;
-  WebPDispatchAlphaToGreen = DispatchAlphaToGreen_NEON;
-  WebPExtractAlpha = ExtractAlpha_NEON;
-  WebPExtractGreen = ExtractGreen_NEON;
-}
-
-#else  // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(WebPInitAlphaProcessingNEON)
-
-#endif  // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/alpha_processing_sse2.c b/ios/Pods/libwebp/src/dsp/alpha_processing_sse2.c
deleted file mode 100644
index 7658700..0000000
--- a/ios/Pods/libwebp/src/dsp/alpha_processing_sse2.c
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Utilities for processing transparent channel.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-#include <emmintrin.h>
-
-//------------------------------------------------------------------------------
-
-static int DispatchAlpha_SSE2(const uint8_t* alpha, int alpha_stride,
-                              int width, int height,
-                              uint8_t* dst, int dst_stride) {
-  // alpha_and stores an 'and' operation of all the alpha[] values. The final
-  // value is not 0xff if any of the alpha[] is not equal to 0xff.
-  uint32_t alpha_and = 0xff;
-  int i, j;
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i rgb_mask = _mm_set1_epi32(0xffffff00u);  // to preserve RGB
-  const __m128i all_0xff = _mm_set_epi32(0, 0, ~0u, ~0u);
-  __m128i all_alphas = all_0xff;
-
-  // We must be able to access 3 extra bytes after the last written byte
-  // 'dst[4 * width - 4]', because we don't know if alpha is the first or the
-  // last byte of the quadruplet.
-  const int limit = (width - 1) & ~7;
-
-  for (j = 0; j < height; ++j) {
-    __m128i* out = (__m128i*)dst;
-    for (i = 0; i < limit; i += 8) {
-      // load 8 alpha bytes
-      const __m128i a0 = _mm_loadl_epi64((const __m128i*)&alpha[i]);
-      const __m128i a1 = _mm_unpacklo_epi8(a0, zero);
-      const __m128i a2_lo = _mm_unpacklo_epi16(a1, zero);
-      const __m128i a2_hi = _mm_unpackhi_epi16(a1, zero);
-      // load 8 dst pixels (32 bytes)
-      const __m128i b0_lo = _mm_loadu_si128(out + 0);
-      const __m128i b0_hi = _mm_loadu_si128(out + 1);
-      // mask dst alpha values
-      const __m128i b1_lo = _mm_and_si128(b0_lo, rgb_mask);
-      const __m128i b1_hi = _mm_and_si128(b0_hi, rgb_mask);
-      // combine
-      const __m128i b2_lo = _mm_or_si128(b1_lo, a2_lo);
-      const __m128i b2_hi = _mm_or_si128(b1_hi, a2_hi);
-      // store
-      _mm_storeu_si128(out + 0, b2_lo);
-      _mm_storeu_si128(out + 1, b2_hi);
-      // accumulate eight alpha 'and' in parallel
-      all_alphas = _mm_and_si128(all_alphas, a0);
-      out += 2;
-    }
-    for (; i < width; ++i) {
-      const uint32_t alpha_value = alpha[i];
-      dst[4 * i] = alpha_value;
-      alpha_and &= alpha_value;
-    }
-    alpha += alpha_stride;
-    dst += dst_stride;
-  }
-  // Combine the eight alpha 'and' into a 8-bit mask.
-  alpha_and &= _mm_movemask_epi8(_mm_cmpeq_epi8(all_alphas, all_0xff));
-  return (alpha_and != 0xff);
-}
-
-static void DispatchAlphaToGreen_SSE2(const uint8_t* alpha, int alpha_stride,
-                                      int width, int height,
-                                      uint32_t* dst, int dst_stride) {
-  int i, j;
-  const __m128i zero = _mm_setzero_si128();
-  const int limit = width & ~15;
-  for (j = 0; j < height; ++j) {
-    for (i = 0; i < limit; i += 16) {   // process 16 alpha bytes
-      const __m128i a0 = _mm_loadu_si128((const __m128i*)&alpha[i]);
-      const __m128i a1 = _mm_unpacklo_epi8(zero, a0);  // note the 'zero' first!
-      const __m128i b1 = _mm_unpackhi_epi8(zero, a0);
-      const __m128i a2_lo = _mm_unpacklo_epi16(a1, zero);
-      const __m128i b2_lo = _mm_unpacklo_epi16(b1, zero);
-      const __m128i a2_hi = _mm_unpackhi_epi16(a1, zero);
-      const __m128i b2_hi = _mm_unpackhi_epi16(b1, zero);
-      _mm_storeu_si128((__m128i*)&dst[i +  0], a2_lo);
-      _mm_storeu_si128((__m128i*)&dst[i +  4], a2_hi);
-      _mm_storeu_si128((__m128i*)&dst[i +  8], b2_lo);
-      _mm_storeu_si128((__m128i*)&dst[i + 12], b2_hi);
-    }
-    for (; i < width; ++i) dst[i] = alpha[i] << 8;
-    alpha += alpha_stride;
-    dst += dst_stride;
-  }
-}
-
-static int ExtractAlpha_SSE2(const uint8_t* argb, int argb_stride,
-                             int width, int height,
-                             uint8_t* alpha, int alpha_stride) {
-  // alpha_and stores an 'and' operation of all the alpha[] values. The final
-  // value is not 0xff if any of the alpha[] is not equal to 0xff.
-  uint32_t alpha_and = 0xff;
-  int i, j;
-  const __m128i a_mask = _mm_set1_epi32(0xffu);  // to preserve alpha
-  const __m128i all_0xff = _mm_set_epi32(0, 0, ~0u, ~0u);
-  __m128i all_alphas = all_0xff;
-
-  // We must be able to access 3 extra bytes after the last written byte
-  // 'src[4 * width - 4]', because we don't know if alpha is the first or the
-  // last byte of the quadruplet.
-  const int limit = (width - 1) & ~7;
-
-  for (j = 0; j < height; ++j) {
-    const __m128i* src = (const __m128i*)argb;
-    for (i = 0; i < limit; i += 8) {
-      // load 32 argb bytes
-      const __m128i a0 = _mm_loadu_si128(src + 0);
-      const __m128i a1 = _mm_loadu_si128(src + 1);
-      const __m128i b0 = _mm_and_si128(a0, a_mask);
-      const __m128i b1 = _mm_and_si128(a1, a_mask);
-      const __m128i c0 = _mm_packs_epi32(b0, b1);
-      const __m128i d0 = _mm_packus_epi16(c0, c0);
-      // store
-      _mm_storel_epi64((__m128i*)&alpha[i], d0);
-      // accumulate eight alpha 'and' in parallel
-      all_alphas = _mm_and_si128(all_alphas, d0);
-      src += 2;
-    }
-    for (; i < width; ++i) {
-      const uint32_t alpha_value = argb[4 * i];
-      alpha[i] = alpha_value;
-      alpha_and &= alpha_value;
-    }
-    argb += argb_stride;
-    alpha += alpha_stride;
-  }
-  // Combine the eight alpha 'and' into a 8-bit mask.
-  alpha_and &= _mm_movemask_epi8(_mm_cmpeq_epi8(all_alphas, all_0xff));
-  return (alpha_and == 0xff);
-}
-
-//------------------------------------------------------------------------------
-// Non-dither premultiplied modes
-
-#define MULTIPLIER(a)   ((a) * 0x8081)
-#define PREMULTIPLY(x, m) (((x) * (m)) >> 23)
-
-// We can't use a 'const int' for the SHUFFLE value, because it has to be an
-// immediate in the _mm_shufflexx_epi16() instruction. We really need a macro.
-// We use: v / 255 = (v * 0x8081) >> 23, where v = alpha * {r,g,b} is a 16bit
-// value.
-#define APPLY_ALPHA(RGBX, SHUFFLE) do {                              \
-  const __m128i argb0 = _mm_loadu_si128((const __m128i*)&(RGBX));    \
-  const __m128i argb1_lo = _mm_unpacklo_epi8(argb0, zero);           \
-  const __m128i argb1_hi = _mm_unpackhi_epi8(argb0, zero);           \
-  const __m128i alpha0_lo = _mm_or_si128(argb1_lo, kMask);           \
-  const __m128i alpha0_hi = _mm_or_si128(argb1_hi, kMask);           \
-  const __m128i alpha1_lo = _mm_shufflelo_epi16(alpha0_lo, SHUFFLE); \
-  const __m128i alpha1_hi = _mm_shufflelo_epi16(alpha0_hi, SHUFFLE); \
-  const __m128i alpha2_lo = _mm_shufflehi_epi16(alpha1_lo, SHUFFLE); \
-  const __m128i alpha2_hi = _mm_shufflehi_epi16(alpha1_hi, SHUFFLE); \
-  /* alpha2 = [ff a0 a0 a0][ff a1 a1 a1] */                          \
-  const __m128i A0_lo = _mm_mullo_epi16(alpha2_lo, argb1_lo);        \
-  const __m128i A0_hi = _mm_mullo_epi16(alpha2_hi, argb1_hi);        \
-  const __m128i A1_lo = _mm_mulhi_epu16(A0_lo, kMult);               \
-  const __m128i A1_hi = _mm_mulhi_epu16(A0_hi, kMult);               \
-  const __m128i A2_lo = _mm_srli_epi16(A1_lo, 7);                    \
-  const __m128i A2_hi = _mm_srli_epi16(A1_hi, 7);                    \
-  const __m128i A3 = _mm_packus_epi16(A2_lo, A2_hi);                 \
-  _mm_storeu_si128((__m128i*)&(RGBX), A3);                           \
-} while (0)
-
-static void ApplyAlphaMultiply_SSE2(uint8_t* rgba, int alpha_first,
-                                    int w, int h, int stride) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i kMult = _mm_set1_epi16(0x8081u);
-  const __m128i kMask = _mm_set_epi16(0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0);
-  const int kSpan = 4;
-  while (h-- > 0) {
-    uint32_t* const rgbx = (uint32_t*)rgba;
-    int i;
-    if (!alpha_first) {
-      for (i = 0; i + kSpan <= w; i += kSpan) {
-        APPLY_ALPHA(rgbx[i], _MM_SHUFFLE(2, 3, 3, 3));
-      }
-    } else {
-      for (i = 0; i + kSpan <= w; i += kSpan) {
-        APPLY_ALPHA(rgbx[i], _MM_SHUFFLE(0, 0, 0, 1));
-      }
-    }
-    // Finish with left-overs.
-    for (; i < w; ++i) {
-      uint8_t* const rgb = rgba + (alpha_first ? 1 : 0);
-      const uint8_t* const alpha = rgba + (alpha_first ? 0 : 3);
-      const uint32_t a = alpha[4 * i];
-      if (a != 0xff) {
-        const uint32_t mult = MULTIPLIER(a);
-        rgb[4 * i + 0] = PREMULTIPLY(rgb[4 * i + 0], mult);
-        rgb[4 * i + 1] = PREMULTIPLY(rgb[4 * i + 1], mult);
-        rgb[4 * i + 2] = PREMULTIPLY(rgb[4 * i + 2], mult);
-      }
-    }
-    rgba += stride;
-  }
-}
-#undef MULTIPLIER
-#undef PREMULTIPLY
-
-//------------------------------------------------------------------------------
-// Alpha detection
-
-static int HasAlpha8b_SSE2(const uint8_t* src, int length) {
-  const __m128i all_0xff = _mm_set1_epi8(0xff);
-  int i = 0;
-  for (; i + 16 <= length; i += 16) {
-    const __m128i v = _mm_loadu_si128((const __m128i*)(src + i));
-    const __m128i bits = _mm_cmpeq_epi8(v, all_0xff);
-    const int mask = _mm_movemask_epi8(bits);
-    if (mask != 0xffff) return 1;
-  }
-  for (; i < length; ++i) if (src[i] != 0xff) return 1;
-  return 0;
-}
-
-static int HasAlpha32b_SSE2(const uint8_t* src, int length) {
-  const __m128i alpha_mask = _mm_set1_epi32(0xff);
-  const __m128i all_0xff = _mm_set1_epi8(0xff);
-  int i = 0;
-  // We don't know if we can access the last 3 bytes after the last alpha
-  // value 'src[4 * length - 4]' (because we don't know if alpha is the first
-  // or the last byte of the quadruplet). Hence the '-3' protection below.
-  length = length * 4 - 3;   // size in bytes
-  for (; i + 64 <= length; i += 64) {
-    const __m128i a0 = _mm_loadu_si128((const __m128i*)(src + i +  0));
-    const __m128i a1 = _mm_loadu_si128((const __m128i*)(src + i + 16));
-    const __m128i a2 = _mm_loadu_si128((const __m128i*)(src + i + 32));
-    const __m128i a3 = _mm_loadu_si128((const __m128i*)(src + i + 48));
-    const __m128i b0 = _mm_and_si128(a0, alpha_mask);
-    const __m128i b1 = _mm_and_si128(a1, alpha_mask);
-    const __m128i b2 = _mm_and_si128(a2, alpha_mask);
-    const __m128i b3 = _mm_and_si128(a3, alpha_mask);
-    const __m128i c0 = _mm_packs_epi32(b0, b1);
-    const __m128i c1 = _mm_packs_epi32(b2, b3);
-    const __m128i d  = _mm_packus_epi16(c0, c1);
-    const __m128i bits = _mm_cmpeq_epi8(d, all_0xff);
-    const int mask = _mm_movemask_epi8(bits);
-    if (mask != 0xffff) return 1;
-  }
-  for (; i + 32 <= length; i += 32) {
-    const __m128i a0 = _mm_loadu_si128((const __m128i*)(src + i +  0));
-    const __m128i a1 = _mm_loadu_si128((const __m128i*)(src + i + 16));
-    const __m128i b0 = _mm_and_si128(a0, alpha_mask);
-    const __m128i b1 = _mm_and_si128(a1, alpha_mask);
-    const __m128i c  = _mm_packs_epi32(b0, b1);
-    const __m128i d  = _mm_packus_epi16(c, c);
-    const __m128i bits = _mm_cmpeq_epi8(d, all_0xff);
-    const int mask = _mm_movemask_epi8(bits);
-    if (mask != 0xffff) return 1;
-  }
-  for (; i <= length; i += 4) if (src[i] != 0xff) return 1;
-  return 0;
-}
-
-// -----------------------------------------------------------------------------
-// Apply alpha value to rows
-
-static void MultARGBRow_SSE2(uint32_t* const ptr, int width, int inverse) {
-  int x = 0;
-  if (!inverse) {
-    const int kSpan = 2;
-    const __m128i zero = _mm_setzero_si128();
-    const __m128i k128 = _mm_set1_epi16(128);
-    const __m128i kMult = _mm_set1_epi16(0x0101);
-    const __m128i kMask = _mm_set_epi16(0, 0xff, 0, 0, 0, 0xff, 0, 0);
-    for (x = 0; x + kSpan <= width; x += kSpan) {
-      // To compute 'result = (int)(a * x / 255. + .5)', we use:
-      //   tmp = a * v + 128, result = (tmp * 0x0101u) >> 16
-      const __m128i A0 = _mm_loadl_epi64((const __m128i*)&ptr[x]);
-      const __m128i A1 = _mm_unpacklo_epi8(A0, zero);
-      const __m128i A2 = _mm_or_si128(A1, kMask);
-      const __m128i A3 = _mm_shufflelo_epi16(A2, _MM_SHUFFLE(2, 3, 3, 3));
-      const __m128i A4 = _mm_shufflehi_epi16(A3, _MM_SHUFFLE(2, 3, 3, 3));
-      // here, A4 = [ff a0 a0 a0][ff a1 a1 a1]
-      const __m128i A5 = _mm_mullo_epi16(A4, A1);
-      const __m128i A6 = _mm_add_epi16(A5, k128);
-      const __m128i A7 = _mm_mulhi_epu16(A6, kMult);
-      const __m128i A10 = _mm_packus_epi16(A7, zero);
-      _mm_storel_epi64((__m128i*)&ptr[x], A10);
-    }
-  }
-  width -= x;
-  if (width > 0) WebPMultARGBRow_C(ptr + x, width, inverse);
-}
-
-static void MultRow_SSE2(uint8_t* const ptr, const uint8_t* const alpha,
-                         int width, int inverse) {
-  int x = 0;
-  if (!inverse) {
-    const __m128i zero = _mm_setzero_si128();
-    const __m128i k128 = _mm_set1_epi16(128);
-    const __m128i kMult = _mm_set1_epi16(0x0101);
-    for (x = 0; x + 8 <= width; x += 8) {
-      const __m128i v0 = _mm_loadl_epi64((__m128i*)&ptr[x]);
-      const __m128i a0 = _mm_loadl_epi64((const __m128i*)&alpha[x]);
-      const __m128i v1 = _mm_unpacklo_epi8(v0, zero);
-      const __m128i a1 = _mm_unpacklo_epi8(a0, zero);
-      const __m128i v2 = _mm_mullo_epi16(v1, a1);
-      const __m128i v3 = _mm_add_epi16(v2, k128);
-      const __m128i v4 = _mm_mulhi_epu16(v3, kMult);
-      const __m128i v5 = _mm_packus_epi16(v4, zero);
-      _mm_storel_epi64((__m128i*)&ptr[x], v5);
-    }
-  }
-  width -= x;
-  if (width > 0) WebPMultRow_C(ptr + x, alpha + x, width, inverse);
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitAlphaProcessingSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingSSE2(void) {
-  WebPMultARGBRow = MultARGBRow_SSE2;
-  WebPMultRow = MultRow_SSE2;
-  WebPApplyAlphaMultiply = ApplyAlphaMultiply_SSE2;
-  WebPDispatchAlpha = DispatchAlpha_SSE2;
-  WebPDispatchAlphaToGreen = DispatchAlphaToGreen_SSE2;
-  WebPExtractAlpha = ExtractAlpha_SSE2;
-
-  WebPHasAlpha8b = HasAlpha8b_SSE2;
-  WebPHasAlpha32b = HasAlpha32b_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(WebPInitAlphaProcessingSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/alpha_processing_sse41.c b/ios/Pods/libwebp/src/dsp/alpha_processing_sse41.c
deleted file mode 100644
index 56040f9..0000000
--- a/ios/Pods/libwebp/src/dsp/alpha_processing_sse41.c
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Utilities for processing transparent channel, SSE4.1 variant.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE41)
-
-#include <smmintrin.h>
-
-//------------------------------------------------------------------------------
-
-static int ExtractAlpha_SSE41(const uint8_t* argb, int argb_stride,
-                              int width, int height,
-                              uint8_t* alpha, int alpha_stride) {
-  // alpha_and stores an 'and' operation of all the alpha[] values. The final
-  // value is not 0xff if any of the alpha[] is not equal to 0xff.
-  uint32_t alpha_and = 0xff;
-  int i, j;
-  const __m128i all_0xff = _mm_set1_epi32(~0u);
-  __m128i all_alphas = all_0xff;
-
-  // We must be able to access 3 extra bytes after the last written byte
-  // 'src[4 * width - 4]', because we don't know if alpha is the first or the
-  // last byte of the quadruplet.
-  const int limit = (width - 1) & ~15;
-  const __m128i kCstAlpha0 = _mm_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1,
-                                          -1, -1, -1, -1, 12, 8, 4, 0);
-  const __m128i kCstAlpha1 = _mm_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1,
-                                          12, 8, 4, 0, -1, -1, -1, -1);
-  const __m128i kCstAlpha2 = _mm_set_epi8(-1, -1, -1, -1, 12, 8, 4, 0,
-                                          -1, -1, -1, -1, -1, -1, -1, -1);
-  const __m128i kCstAlpha3 = _mm_set_epi8(12, 8, 4, 0, -1, -1, -1, -1,
-                                          -1, -1, -1, -1, -1, -1, -1, -1);
-  for (j = 0; j < height; ++j) {
-    const __m128i* src = (const __m128i*)argb;
-    for (i = 0; i < limit; i += 16) {
-      // load 64 argb bytes
-      const __m128i a0 = _mm_loadu_si128(src + 0);
-      const __m128i a1 = _mm_loadu_si128(src + 1);
-      const __m128i a2 = _mm_loadu_si128(src + 2);
-      const __m128i a3 = _mm_loadu_si128(src + 3);
-      const __m128i b0 = _mm_shuffle_epi8(a0, kCstAlpha0);
-      const __m128i b1 = _mm_shuffle_epi8(a1, kCstAlpha1);
-      const __m128i b2 = _mm_shuffle_epi8(a2, kCstAlpha2);
-      const __m128i b3 = _mm_shuffle_epi8(a3, kCstAlpha3);
-      const __m128i c0 = _mm_or_si128(b0, b1);
-      const __m128i c1 = _mm_or_si128(b2, b3);
-      const __m128i d0 = _mm_or_si128(c0, c1);
-      // store
-      _mm_storeu_si128((__m128i*)&alpha[i], d0);
-      // accumulate sixteen alpha 'and' in parallel
-      all_alphas = _mm_and_si128(all_alphas, d0);
-      src += 4;
-    }
-    for (; i < width; ++i) {
-      const uint32_t alpha_value = argb[4 * i];
-      alpha[i] = alpha_value;
-      alpha_and &= alpha_value;
-    }
-    argb += argb_stride;
-    alpha += alpha_stride;
-  }
-  // Combine the sixteen alpha 'and' into an 8-bit mask.
-  alpha_and |= 0xff00u;  // pretend the upper bits [8..15] were tested ok.
-  alpha_and &= _mm_movemask_epi8(_mm_cmpeq_epi8(all_alphas, all_0xff));
-  return (alpha_and == 0xffffu);
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitAlphaProcessingSSE41(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingSSE41(void) {
-  WebPExtractAlpha = ExtractAlpha_SSE41;
-}
-
-#else  // !WEBP_USE_SSE41
-
-WEBP_DSP_INIT_STUB(WebPInitAlphaProcessingSSE41)
-
-#endif  // WEBP_USE_SSE41
diff --git a/ios/Pods/libwebp/src/dsp/common_sse2.h b/ios/Pods/libwebp/src/dsp/common_sse2.h
deleted file mode 100644
index e9f1ebf..0000000
--- a/ios/Pods/libwebp/src/dsp/common_sse2.h
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 code common to several files.
-//
-// Author: Vincent Rabaud (vrabaud@google.com)
-
-#ifndef WEBP_DSP_COMMON_SSE2_H_
-#define WEBP_DSP_COMMON_SSE2_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(WEBP_USE_SSE2)
-
-#include <emmintrin.h>
-
-//------------------------------------------------------------------------------
-// Quite useful macro for debugging. Left here for convenience.
-
-#if 0
-#include <stdio.h>
-static WEBP_INLINE void PrintReg(const __m128i r, const char* const name,
-                                 int size) {
-  int n;
-  union {
-    __m128i r;
-    uint8_t i8[16];
-    uint16_t i16[8];
-    uint32_t i32[4];
-    uint64_t i64[2];
-  } tmp;
-  tmp.r = r;
-  fprintf(stderr, "%s\t: ", name);
-  if (size == 8) {
-    for (n = 0; n < 16; ++n) fprintf(stderr, "%.2x ", tmp.i8[n]);
-  } else if (size == 16) {
-    for (n = 0; n < 8; ++n) fprintf(stderr, "%.4x ", tmp.i16[n]);
-  } else if (size == 32) {
-    for (n = 0; n < 4; ++n) fprintf(stderr, "%.8x ", tmp.i32[n]);
-  } else {
-    for (n = 0; n < 2; ++n) fprintf(stderr, "%.16lx ", tmp.i64[n]);
-  }
-  fprintf(stderr, "\n");
-}
-#endif
-
-//------------------------------------------------------------------------------
-// Math functions.
-
-// Return the sum of all the 8b in the register.
-static WEBP_INLINE int VP8HorizontalAdd8b(const __m128i* const a) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i sad8x2 = _mm_sad_epu8(*a, zero);
-  // sum the two sads: sad8x2[0:1] + sad8x2[8:9]
-  const __m128i sum = _mm_add_epi32(sad8x2, _mm_shuffle_epi32(sad8x2, 2));
-  return _mm_cvtsi128_si32(sum);
-}
-
-// Transpose two 4x4 16b matrices horizontally stored in registers.
-static WEBP_INLINE void VP8Transpose_2_4x4_16b(
-    const __m128i* const in0, const __m128i* const in1,
-    const __m128i* const in2, const __m128i* const in3, __m128i* const out0,
-    __m128i* const out1, __m128i* const out2, __m128i* const out3) {
-  // Transpose the two 4x4.
-  // a00 a01 a02 a03   b00 b01 b02 b03
-  // a10 a11 a12 a13   b10 b11 b12 b13
-  // a20 a21 a22 a23   b20 b21 b22 b23
-  // a30 a31 a32 a33   b30 b31 b32 b33
-  const __m128i transpose0_0 = _mm_unpacklo_epi16(*in0, *in1);
-  const __m128i transpose0_1 = _mm_unpacklo_epi16(*in2, *in3);
-  const __m128i transpose0_2 = _mm_unpackhi_epi16(*in0, *in1);
-  const __m128i transpose0_3 = _mm_unpackhi_epi16(*in2, *in3);
-  // a00 a10 a01 a11   a02 a12 a03 a13
-  // a20 a30 a21 a31   a22 a32 a23 a33
-  // b00 b10 b01 b11   b02 b12 b03 b13
-  // b20 b30 b21 b31   b22 b32 b23 b33
-  const __m128i transpose1_0 = _mm_unpacklo_epi32(transpose0_0, transpose0_1);
-  const __m128i transpose1_1 = _mm_unpacklo_epi32(transpose0_2, transpose0_3);
-  const __m128i transpose1_2 = _mm_unpackhi_epi32(transpose0_0, transpose0_1);
-  const __m128i transpose1_3 = _mm_unpackhi_epi32(transpose0_2, transpose0_3);
-  // a00 a10 a20 a30 a01 a11 a21 a31
-  // b00 b10 b20 b30 b01 b11 b21 b31
-  // a02 a12 a22 a32 a03 a13 a23 a33
-  // b02 b12 a22 b32 b03 b13 b23 b33
-  *out0 = _mm_unpacklo_epi64(transpose1_0, transpose1_1);
-  *out1 = _mm_unpackhi_epi64(transpose1_0, transpose1_1);
-  *out2 = _mm_unpacklo_epi64(transpose1_2, transpose1_3);
-  *out3 = _mm_unpackhi_epi64(transpose1_2, transpose1_3);
-  // a00 a10 a20 a30   b00 b10 b20 b30
-  // a01 a11 a21 a31   b01 b11 b21 b31
-  // a02 a12 a22 a32   b02 b12 b22 b32
-  // a03 a13 a23 a33   b03 b13 b23 b33
-}
-
-//------------------------------------------------------------------------------
-// Channel mixing.
-
-// Function used several times in VP8PlanarTo24b.
-// It samples the in buffer as follows: one every two unsigned char is stored
-// at the beginning of the buffer, while the other half is stored at the end.
-#define VP8PlanarTo24bHelper(IN, OUT)                            \
-  do {                                                           \
-    const __m128i v_mask = _mm_set1_epi16(0x00ff);               \
-    /* Take one every two upper 8b values.*/                     \
-    (OUT##0) = _mm_packus_epi16(_mm_and_si128((IN##0), v_mask),  \
-                                _mm_and_si128((IN##1), v_mask)); \
-    (OUT##1) = _mm_packus_epi16(_mm_and_si128((IN##2), v_mask),  \
-                                _mm_and_si128((IN##3), v_mask)); \
-    (OUT##2) = _mm_packus_epi16(_mm_and_si128((IN##4), v_mask),  \
-                                _mm_and_si128((IN##5), v_mask)); \
-    /* Take one every two lower 8b values.*/                     \
-    (OUT##3) = _mm_packus_epi16(_mm_srli_epi16((IN##0), 8),      \
-                                _mm_srli_epi16((IN##1), 8));     \
-    (OUT##4) = _mm_packus_epi16(_mm_srli_epi16((IN##2), 8),      \
-                                _mm_srli_epi16((IN##3), 8));     \
-    (OUT##5) = _mm_packus_epi16(_mm_srli_epi16((IN##4), 8),      \
-                                _mm_srli_epi16((IN##5), 8));     \
-  } while (0)
-
-// Pack the planar buffers
-// rrrr... rrrr... gggg... gggg... bbbb... bbbb....
-// triplet by triplet in the output buffer rgb as rgbrgbrgbrgb ...
-static WEBP_INLINE void VP8PlanarTo24b_SSE2(
-    __m128i* const in0, __m128i* const in1, __m128i* const in2,
-    __m128i* const in3, __m128i* const in4, __m128i* const in5) {
-  // The input is 6 registers of sixteen 8b but for the sake of explanation,
-  // let's take 6 registers of four 8b values.
-  // To pack, we will keep taking one every two 8b integer and move it
-  // around as follows:
-  // Input:
-  //   r0r1r2r3 | r4r5r6r7 | g0g1g2g3 | g4g5g6g7 | b0b1b2b3 | b4b5b6b7
-  // Split the 6 registers in two sets of 3 registers: the first set as the even
-  // 8b bytes, the second the odd ones:
-  //   r0r2r4r6 | g0g2g4g6 | b0b2b4b6 | r1r3r5r7 | g1g3g5g7 | b1b3b5b7
-  // Repeat the same permutations twice more:
-  //   r0r4g0g4 | b0b4r1r5 | g1g5b1b5 | r2r6g2g6 | b2b6r3r7 | g3g7b3b7
-  //   r0g0b0r1 | g1b1r2g2 | b2r3g3b3 | r4g4b4r5 | g5b5r6g6 | b6r7g7b7
-  __m128i tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  VP8PlanarTo24bHelper(*in, tmp);
-  VP8PlanarTo24bHelper(tmp, *in);
-  VP8PlanarTo24bHelper(*in, tmp);
-  // We need to do it two more times than the example as we have sixteen bytes.
-  {
-    __m128i out0, out1, out2, out3, out4, out5;
-    VP8PlanarTo24bHelper(tmp, out);
-    VP8PlanarTo24bHelper(out, *in);
-  }
-}
-
-#undef VP8PlanarTo24bHelper
-
-// Convert four packed four-channel buffers like argbargbargbargb... into the
-// split channels aaaaa ... rrrr ... gggg .... bbbbb ......
-static WEBP_INLINE void VP8L32bToPlanar_SSE2(__m128i* const in0,
-                                             __m128i* const in1,
-                                             __m128i* const in2,
-                                             __m128i* const in3) {
-  // Column-wise transpose.
-  const __m128i A0 = _mm_unpacklo_epi8(*in0, *in1);
-  const __m128i A1 = _mm_unpackhi_epi8(*in0, *in1);
-  const __m128i A2 = _mm_unpacklo_epi8(*in2, *in3);
-  const __m128i A3 = _mm_unpackhi_epi8(*in2, *in3);
-  const __m128i B0 = _mm_unpacklo_epi8(A0, A1);
-  const __m128i B1 = _mm_unpackhi_epi8(A0, A1);
-  const __m128i B2 = _mm_unpacklo_epi8(A2, A3);
-  const __m128i B3 = _mm_unpackhi_epi8(A2, A3);
-  // C0 = g7 g6 ... g1 g0 | b7 b6 ... b1 b0
-  // C1 = a7 a6 ... a1 a0 | r7 r6 ... r1 r0
-  const __m128i C0 = _mm_unpacklo_epi8(B0, B1);
-  const __m128i C1 = _mm_unpackhi_epi8(B0, B1);
-  const __m128i C2 = _mm_unpacklo_epi8(B2, B3);
-  const __m128i C3 = _mm_unpackhi_epi8(B2, B3);
-  // Gather the channels.
-  *in0 = _mm_unpackhi_epi64(C1, C3);
-  *in1 = _mm_unpacklo_epi64(C1, C3);
-  *in2 = _mm_unpackhi_epi64(C0, C2);
-  *in3 = _mm_unpacklo_epi64(C0, C2);
-}
-
-#endif  // WEBP_USE_SSE2
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif  // WEBP_DSP_COMMON_SSE2_H_
diff --git a/ios/Pods/libwebp/src/dsp/common_sse41.h b/ios/Pods/libwebp/src/dsp/common_sse41.h
deleted file mode 100644
index 2f173c0..0000000
--- a/ios/Pods/libwebp/src/dsp/common_sse41.h
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE4 code common to several files.
-//
-// Author: Vincent Rabaud (vrabaud@google.com)
-
-#ifndef WEBP_DSP_COMMON_SSE41_H_
-#define WEBP_DSP_COMMON_SSE41_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(WEBP_USE_SSE41)
-#include <smmintrin.h>
-
-//------------------------------------------------------------------------------
-// Channel mixing.
-// Shuffles the input buffer as A0 0 0 A1 0 0 A2 ...
-#define WEBP_SSE41_SHUFF(OUT, IN0, IN1)    \
-  OUT##0 = _mm_shuffle_epi8(*IN0, shuff0); \
-  OUT##1 = _mm_shuffle_epi8(*IN0, shuff1); \
-  OUT##2 = _mm_shuffle_epi8(*IN0, shuff2); \
-  OUT##3 = _mm_shuffle_epi8(*IN1, shuff0); \
-  OUT##4 = _mm_shuffle_epi8(*IN1, shuff1); \
-  OUT##5 = _mm_shuffle_epi8(*IN1, shuff2);
-
-// Pack the planar buffers
-// rrrr... rrrr... gggg... gggg... bbbb... bbbb....
-// triplet by triplet in the output buffer rgb as rgbrgbrgbrgb ...
-static WEBP_INLINE void VP8PlanarTo24b_SSE41(
-    __m128i* const in0, __m128i* const in1, __m128i* const in2,
-    __m128i* const in3, __m128i* const in4, __m128i* const in5) {
-  __m128i R0, R1, R2, R3, R4, R5;
-  __m128i G0, G1, G2, G3, G4, G5;
-  __m128i B0, B1, B2, B3, B4, B5;
-
-  // Process R.
-  {
-    const __m128i shuff0 = _mm_set_epi8(
-        5, -1, -1, 4, -1, -1, 3, -1, -1, 2, -1, -1, 1, -1, -1, 0);
-    const __m128i shuff1 = _mm_set_epi8(
-        -1, 10, -1, -1, 9, -1, -1, 8, -1, -1, 7, -1, -1, 6, -1, -1);
-    const __m128i shuff2 = _mm_set_epi8(
-     -1, -1, 15, -1, -1, 14, -1, -1, 13, -1, -1, 12, -1, -1, 11, -1);
-    WEBP_SSE41_SHUFF(R, in0, in1)
-  }
-
-  // Process G.
-  {
-    // Same as before, just shifted to the left by one and including the right
-    // padding.
-    const __m128i shuff0 = _mm_set_epi8(
-        -1, -1, 4, -1, -1, 3, -1, -1, 2, -1, -1, 1, -1, -1, 0, -1);
-    const __m128i shuff1 = _mm_set_epi8(
-        10, -1, -1, 9, -1, -1, 8, -1, -1, 7, -1, -1, 6, -1, -1, 5);
-    const __m128i shuff2 = _mm_set_epi8(
-     -1, 15, -1, -1, 14, -1, -1, 13, -1, -1, 12, -1, -1, 11, -1, -1);
-    WEBP_SSE41_SHUFF(G, in2, in3)
-  }
-
-  // Process B.
-  {
-    const __m128i shuff0 = _mm_set_epi8(
-        -1, 4, -1, -1, 3, -1, -1, 2, -1, -1, 1, -1, -1, 0, -1, -1);
-    const __m128i shuff1 = _mm_set_epi8(
-        -1, -1, 9, -1, -1, 8, -1, -1, 7, -1, -1, 6, -1, -1, 5, -1);
-    const __m128i shuff2 = _mm_set_epi8(
-      15, -1, -1, 14, -1, -1, 13, -1, -1, 12, -1, -1, 11, -1, -1, 10);
-    WEBP_SSE41_SHUFF(B, in4, in5)
-  }
-
-  // OR the different channels.
-  {
-    const __m128i RG0 = _mm_or_si128(R0, G0);
-    const __m128i RG1 = _mm_or_si128(R1, G1);
-    const __m128i RG2 = _mm_or_si128(R2, G2);
-    const __m128i RG3 = _mm_or_si128(R3, G3);
-    const __m128i RG4 = _mm_or_si128(R4, G4);
-    const __m128i RG5 = _mm_or_si128(R5, G5);
-    *in0 = _mm_or_si128(RG0, B0);
-    *in1 = _mm_or_si128(RG1, B1);
-    *in2 = _mm_or_si128(RG2, B2);
-    *in3 = _mm_or_si128(RG3, B3);
-    *in4 = _mm_or_si128(RG4, B4);
-    *in5 = _mm_or_si128(RG5, B5);
-  }
-}
-
-#undef WEBP_SSE41_SHUFF
-
-// Convert four packed four-channel buffers like argbargbargbargb... into the
-// split channels aaaaa ... rrrr ... gggg .... bbbbb ......
-static WEBP_INLINE void VP8L32bToPlanar_SSE41(__m128i* const in0,
-                                              __m128i* const in1,
-                                              __m128i* const in2,
-                                              __m128i* const in3) {
-  // aaaarrrrggggbbbb
-  const __m128i shuff0 =
-      _mm_set_epi8(15, 11, 7, 3, 14, 10, 6, 2, 13, 9, 5, 1, 12, 8, 4, 0);
-  const __m128i A0 = _mm_shuffle_epi8(*in0, shuff0);
-  const __m128i A1 = _mm_shuffle_epi8(*in1, shuff0);
-  const __m128i A2 = _mm_shuffle_epi8(*in2, shuff0);
-  const __m128i A3 = _mm_shuffle_epi8(*in3, shuff0);
-  // A0A1R0R1
-  // G0G1B0B1
-  // A2A3R2R3
-  // G0G1B0B1
-  const __m128i B0 = _mm_unpacklo_epi32(A0, A1);
-  const __m128i B1 = _mm_unpackhi_epi32(A0, A1);
-  const __m128i B2 = _mm_unpacklo_epi32(A2, A3);
-  const __m128i B3 = _mm_unpackhi_epi32(A2, A3);
-  *in3 = _mm_unpacklo_epi64(B0, B2);
-  *in2 = _mm_unpackhi_epi64(B0, B2);
-  *in1 = _mm_unpacklo_epi64(B1, B3);
-  *in0 = _mm_unpackhi_epi64(B1, B3);
-}
-
-#endif  // WEBP_USE_SSE41
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif  // WEBP_DSP_COMMON_SSE41_H_
diff --git a/ios/Pods/libwebp/src/dsp/cost.c b/ios/Pods/libwebp/src/dsp/cost.c
deleted file mode 100644
index cc681cd..0000000
--- a/ios/Pods/libwebp/src/dsp/cost.c
+++ /dev/null
@@ -1,411 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-#include "src/enc/cost_enc.h"
-
-//------------------------------------------------------------------------------
-// Boolean-cost cost table
-
-const uint16_t VP8EntropyCost[256] = {
-  1792, 1792, 1792, 1536, 1536, 1408, 1366, 1280, 1280, 1216,
-  1178, 1152, 1110, 1076, 1061, 1024, 1024,  992,  968,  951,
-   939,  911,  896,  878,  871,  854,  838,  820,  811,  794,
-   786,  768,  768,  752,  740,  732,  720,  709,  704,  690,
-   683,  672,  666,  655,  647,  640,  631,  622,  615,  607,
-   598,  592,  586,  576,  572,  564,  559,  555,  547,  541,
-   534,  528,  522,  512,  512,  504,  500,  494,  488,  483,
-   477,  473,  467,  461,  458,  452,  448,  443,  438,  434,
-   427,  424,  419,  415,  410,  406,  403,  399,  394,  390,
-   384,  384,  377,  374,  370,  366,  362,  359,  355,  351,
-   347,  342,  342,  336,  333,  330,  326,  323,  320,  316,
-   312,  308,  305,  302,  299,  296,  293,  288,  287,  283,
-   280,  277,  274,  272,  268,  266,  262,  256,  256,  256,
-   251,  248,  245,  242,  240,  237,  234,  232,  228,  226,
-   223,  221,  218,  216,  214,  211,  208,  205,  203,  201,
-   198,  196,  192,  191,  188,  187,  183,  181,  179,  176,
-   175,  171,  171,  168,  165,  163,  160,  159,  156,  154,
-   152,  150,  148,  146,  144,  142,  139,  138,  135,  133,
-   131,  128,  128,  125,  123,  121,  119,  117,  115,  113,
-   111,  110,  107,  105,  103,  102,  100,   98,   96,   94,
-    92,   91,   89,   86,   86,   83,   82,   80,   77,   76,
-    74,   73,   71,   69,   67,   66,   64,   63,   61,   59,
-    57,   55,   54,   52,   51,   49,   47,   46,   44,   43,
-    41,   40,   38,   36,   35,   33,   32,   30,   29,   27,
-    25,   24,   22,   21,   19,   18,   16,   15,   13,   12,
-    10,    9,    7,    6,    4,    3
-};
-
-//------------------------------------------------------------------------------
-// Level cost tables
-
-// fixed costs for coding levels, deduce from the coding tree.
-// This is only the part that doesn't depend on the probability state.
-const uint16_t VP8LevelFixedCosts[MAX_LEVEL + 1] = {
-     0,  256,  256,  256,  256,  432,  618,  630,
-   731,  640,  640,  828,  901,  948, 1021, 1101,
-  1174, 1221, 1294, 1042, 1085, 1115, 1158, 1202,
-  1245, 1275, 1318, 1337, 1380, 1410, 1453, 1497,
-  1540, 1570, 1613, 1280, 1295, 1317, 1332, 1358,
-  1373, 1395, 1410, 1454, 1469, 1491, 1506, 1532,
-  1547, 1569, 1584, 1601, 1616, 1638, 1653, 1679,
-  1694, 1716, 1731, 1775, 1790, 1812, 1827, 1853,
-  1868, 1890, 1905, 1727, 1733, 1742, 1748, 1759,
-  1765, 1774, 1780, 1800, 1806, 1815, 1821, 1832,
-  1838, 1847, 1853, 1878, 1884, 1893, 1899, 1910,
-  1916, 1925, 1931, 1951, 1957, 1966, 1972, 1983,
-  1989, 1998, 2004, 2027, 2033, 2042, 2048, 2059,
-  2065, 2074, 2080, 2100, 2106, 2115, 2121, 2132,
-  2138, 2147, 2153, 2178, 2184, 2193, 2199, 2210,
-  2216, 2225, 2231, 2251, 2257, 2266, 2272, 2283,
-  2289, 2298, 2304, 2168, 2174, 2183, 2189, 2200,
-  2206, 2215, 2221, 2241, 2247, 2256, 2262, 2273,
-  2279, 2288, 2294, 2319, 2325, 2334, 2340, 2351,
-  2357, 2366, 2372, 2392, 2398, 2407, 2413, 2424,
-  2430, 2439, 2445, 2468, 2474, 2483, 2489, 2500,
-  2506, 2515, 2521, 2541, 2547, 2556, 2562, 2573,
-  2579, 2588, 2594, 2619, 2625, 2634, 2640, 2651,
-  2657, 2666, 2672, 2692, 2698, 2707, 2713, 2724,
-  2730, 2739, 2745, 2540, 2546, 2555, 2561, 2572,
-  2578, 2587, 2593, 2613, 2619, 2628, 2634, 2645,
-  2651, 2660, 2666, 2691, 2697, 2706, 2712, 2723,
-  2729, 2738, 2744, 2764, 2770, 2779, 2785, 2796,
-  2802, 2811, 2817, 2840, 2846, 2855, 2861, 2872,
-  2878, 2887, 2893, 2913, 2919, 2928, 2934, 2945,
-  2951, 2960, 2966, 2991, 2997, 3006, 3012, 3023,
-  3029, 3038, 3044, 3064, 3070, 3079, 3085, 3096,
-  3102, 3111, 3117, 2981, 2987, 2996, 3002, 3013,
-  3019, 3028, 3034, 3054, 3060, 3069, 3075, 3086,
-  3092, 3101, 3107, 3132, 3138, 3147, 3153, 3164,
-  3170, 3179, 3185, 3205, 3211, 3220, 3226, 3237,
-  3243, 3252, 3258, 3281, 3287, 3296, 3302, 3313,
-  3319, 3328, 3334, 3354, 3360, 3369, 3375, 3386,
-  3392, 3401, 3407, 3432, 3438, 3447, 3453, 3464,
-  3470, 3479, 3485, 3505, 3511, 3520, 3526, 3537,
-  3543, 3552, 3558, 2816, 2822, 2831, 2837, 2848,
-  2854, 2863, 2869, 2889, 2895, 2904, 2910, 2921,
-  2927, 2936, 2942, 2967, 2973, 2982, 2988, 2999,
-  3005, 3014, 3020, 3040, 3046, 3055, 3061, 3072,
-  3078, 3087, 3093, 3116, 3122, 3131, 3137, 3148,
-  3154, 3163, 3169, 3189, 3195, 3204, 3210, 3221,
-  3227, 3236, 3242, 3267, 3273, 3282, 3288, 3299,
-  3305, 3314, 3320, 3340, 3346, 3355, 3361, 3372,
-  3378, 3387, 3393, 3257, 3263, 3272, 3278, 3289,
-  3295, 3304, 3310, 3330, 3336, 3345, 3351, 3362,
-  3368, 3377, 3383, 3408, 3414, 3423, 3429, 3440,
-  3446, 3455, 3461, 3481, 3487, 3496, 3502, 3513,
-  3519, 3528, 3534, 3557, 3563, 3572, 3578, 3589,
-  3595, 3604, 3610, 3630, 3636, 3645, 3651, 3662,
-  3668, 3677, 3683, 3708, 3714, 3723, 3729, 3740,
-  3746, 3755, 3761, 3781, 3787, 3796, 3802, 3813,
-  3819, 3828, 3834, 3629, 3635, 3644, 3650, 3661,
-  3667, 3676, 3682, 3702, 3708, 3717, 3723, 3734,
-  3740, 3749, 3755, 3780, 3786, 3795, 3801, 3812,
-  3818, 3827, 3833, 3853, 3859, 3868, 3874, 3885,
-  3891, 3900, 3906, 3929, 3935, 3944, 3950, 3961,
-  3967, 3976, 3982, 4002, 4008, 4017, 4023, 4034,
-  4040, 4049, 4055, 4080, 4086, 4095, 4101, 4112,
-  4118, 4127, 4133, 4153, 4159, 4168, 4174, 4185,
-  4191, 4200, 4206, 4070, 4076, 4085, 4091, 4102,
-  4108, 4117, 4123, 4143, 4149, 4158, 4164, 4175,
-  4181, 4190, 4196, 4221, 4227, 4236, 4242, 4253,
-  4259, 4268, 4274, 4294, 4300, 4309, 4315, 4326,
-  4332, 4341, 4347, 4370, 4376, 4385, 4391, 4402,
-  4408, 4417, 4423, 4443, 4449, 4458, 4464, 4475,
-  4481, 4490, 4496, 4521, 4527, 4536, 4542, 4553,
-  4559, 4568, 4574, 4594, 4600, 4609, 4615, 4626,
-  4632, 4641, 4647, 3515, 3521, 3530, 3536, 3547,
-  3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
-  3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
-  3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
-  3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
-  3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
-  3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
-  4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
-  4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
-  3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
-  4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
-  4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
-  4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
-  4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
-  4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
-  4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
-  4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
-  4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
-  4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
-  4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
-  4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
-  4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
-  4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
-  4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
-  4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
-  4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
-  4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
-  4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
-  5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
-  5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
-  5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
-  5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
-  5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
-  4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
-  4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
-  4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
-  4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
-  4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
-  5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
-  5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
-  5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
-  5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
-  5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
-  5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
-  5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
-  5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
-  5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
-  5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
-  5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
-  5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
-  5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
-  5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
-  5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
-  5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
-  5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
-  5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
-  5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
-  5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
-  5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
-  6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
-  6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
-  6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
-  6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
-  6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
-  6420, 6429, 6435, 3515, 3521, 3530, 3536, 3547,
-  3553, 3562, 3568, 3588, 3594, 3603, 3609, 3620,
-  3626, 3635, 3641, 3666, 3672, 3681, 3687, 3698,
-  3704, 3713, 3719, 3739, 3745, 3754, 3760, 3771,
-  3777, 3786, 3792, 3815, 3821, 3830, 3836, 3847,
-  3853, 3862, 3868, 3888, 3894, 3903, 3909, 3920,
-  3926, 3935, 3941, 3966, 3972, 3981, 3987, 3998,
-  4004, 4013, 4019, 4039, 4045, 4054, 4060, 4071,
-  4077, 4086, 4092, 3956, 3962, 3971, 3977, 3988,
-  3994, 4003, 4009, 4029, 4035, 4044, 4050, 4061,
-  4067, 4076, 4082, 4107, 4113, 4122, 4128, 4139,
-  4145, 4154, 4160, 4180, 4186, 4195, 4201, 4212,
-  4218, 4227, 4233, 4256, 4262, 4271, 4277, 4288,
-  4294, 4303, 4309, 4329, 4335, 4344, 4350, 4361,
-  4367, 4376, 4382, 4407, 4413, 4422, 4428, 4439,
-  4445, 4454, 4460, 4480, 4486, 4495, 4501, 4512,
-  4518, 4527, 4533, 4328, 4334, 4343, 4349, 4360,
-  4366, 4375, 4381, 4401, 4407, 4416, 4422, 4433,
-  4439, 4448, 4454, 4479, 4485, 4494, 4500, 4511,
-  4517, 4526, 4532, 4552, 4558, 4567, 4573, 4584,
-  4590, 4599, 4605, 4628, 4634, 4643, 4649, 4660,
-  4666, 4675, 4681, 4701, 4707, 4716, 4722, 4733,
-  4739, 4748, 4754, 4779, 4785, 4794, 4800, 4811,
-  4817, 4826, 4832, 4852, 4858, 4867, 4873, 4884,
-  4890, 4899, 4905, 4769, 4775, 4784, 4790, 4801,
-  4807, 4816, 4822, 4842, 4848, 4857, 4863, 4874,
-  4880, 4889, 4895, 4920, 4926, 4935, 4941, 4952,
-  4958, 4967, 4973, 4993, 4999, 5008, 5014, 5025,
-  5031, 5040, 5046, 5069, 5075, 5084, 5090, 5101,
-  5107, 5116, 5122, 5142, 5148, 5157, 5163, 5174,
-  5180, 5189, 5195, 5220, 5226, 5235, 5241, 5252,
-  5258, 5267, 5273, 5293, 5299, 5308, 5314, 5325,
-  5331, 5340, 5346, 4604, 4610, 4619, 4625, 4636,
-  4642, 4651, 4657, 4677, 4683, 4692, 4698, 4709,
-  4715, 4724, 4730, 4755, 4761, 4770, 4776, 4787,
-  4793, 4802, 4808, 4828, 4834, 4843, 4849, 4860,
-  4866, 4875, 4881, 4904, 4910, 4919, 4925, 4936,
-  4942, 4951, 4957, 4977, 4983, 4992, 4998, 5009,
-  5015, 5024, 5030, 5055, 5061, 5070, 5076, 5087,
-  5093, 5102, 5108, 5128, 5134, 5143, 5149, 5160,
-  5166, 5175, 5181, 5045, 5051, 5060, 5066, 5077,
-  5083, 5092, 5098, 5118, 5124, 5133, 5139, 5150,
-  5156, 5165, 5171, 5196, 5202, 5211, 5217, 5228,
-  5234, 5243, 5249, 5269, 5275, 5284, 5290, 5301,
-  5307, 5316, 5322, 5345, 5351, 5360, 5366, 5377,
-  5383, 5392, 5398, 5418, 5424, 5433, 5439, 5450,
-  5456, 5465, 5471, 5496, 5502, 5511, 5517, 5528,
-  5534, 5543, 5549, 5569, 5575, 5584, 5590, 5601,
-  5607, 5616, 5622, 5417, 5423, 5432, 5438, 5449,
-  5455, 5464, 5470, 5490, 5496, 5505, 5511, 5522,
-  5528, 5537, 5543, 5568, 5574, 5583, 5589, 5600,
-  5606, 5615, 5621, 5641, 5647, 5656, 5662, 5673,
-  5679, 5688, 5694, 5717, 5723, 5732, 5738, 5749,
-  5755, 5764, 5770, 5790, 5796, 5805, 5811, 5822,
-  5828, 5837, 5843, 5868, 5874, 5883, 5889, 5900,
-  5906, 5915, 5921, 5941, 5947, 5956, 5962, 5973,
-  5979, 5988, 5994, 5858, 5864, 5873, 5879, 5890,
-  5896, 5905, 5911, 5931, 5937, 5946, 5952, 5963,
-  5969, 5978, 5984, 6009, 6015, 6024, 6030, 6041,
-  6047, 6056, 6062, 6082, 6088, 6097, 6103, 6114,
-  6120, 6129, 6135, 6158, 6164, 6173, 6179, 6190,
-  6196, 6205, 6211, 6231, 6237, 6246, 6252, 6263,
-  6269, 6278, 6284, 6309, 6315, 6324, 6330, 6341,
-  6347, 6356, 6362, 6382, 6388, 6397, 6403, 6414,
-  6420, 6429, 6435, 5303, 5309, 5318, 5324, 5335,
-  5341, 5350, 5356, 5376, 5382, 5391, 5397, 5408,
-  5414, 5423, 5429, 5454, 5460, 5469, 5475, 5486,
-  5492, 5501, 5507, 5527, 5533, 5542, 5548, 5559,
-  5565, 5574, 5580, 5603, 5609, 5618, 5624, 5635,
-  5641, 5650, 5656, 5676, 5682, 5691, 5697, 5708,
-  5714, 5723, 5729, 5754, 5760, 5769, 5775, 5786,
-  5792, 5801, 5807, 5827, 5833, 5842, 5848, 5859,
-  5865, 5874, 5880, 5744, 5750, 5759, 5765, 5776,
-  5782, 5791, 5797, 5817, 5823, 5832, 5838, 5849,
-  5855, 5864, 5870, 5895, 5901, 5910, 5916, 5927,
-  5933, 5942, 5948, 5968, 5974, 5983, 5989, 6000,
-  6006, 6015, 6021, 6044, 6050, 6059, 6065, 6076,
-  6082, 6091, 6097, 6117, 6123, 6132, 6138, 6149,
-  6155, 6164, 6170, 6195, 6201, 6210, 6216, 6227,
-  6233, 6242, 6248, 6268, 6274, 6283, 6289, 6300,
-  6306, 6315, 6321, 6116, 6122, 6131, 6137, 6148,
-  6154, 6163, 6169, 6189, 6195, 6204, 6210, 6221,
-  6227, 6236, 6242, 6267, 6273, 6282, 6288, 6299,
-  6305, 6314, 6320, 6340, 6346, 6355, 6361, 6372,
-  6378, 6387, 6393, 6416, 6422, 6431, 6437, 6448,
-  6454, 6463, 6469, 6489, 6495, 6504, 6510, 6521,
-  6527, 6536, 6542, 6567, 6573, 6582, 6588, 6599,
-  6605, 6614, 6620, 6640, 6646, 6655, 6661, 6672,
-  6678, 6687, 6693, 6557, 6563, 6572, 6578, 6589,
-  6595, 6604, 6610, 6630, 6636, 6645, 6651, 6662,
-  6668, 6677, 6683, 6708, 6714, 6723, 6729, 6740,
-  6746, 6755, 6761, 6781, 6787, 6796, 6802, 6813,
-  6819, 6828, 6834, 6857, 6863, 6872, 6878, 6889,
-  6895, 6904, 6910, 6930, 6936, 6945, 6951, 6962,
-  6968, 6977, 6983, 7008, 7014, 7023, 7029, 7040,
-  7046, 7055, 7061, 7081, 7087, 7096, 7102, 7113,
-  7119, 7128, 7134, 6392, 6398, 6407, 6413, 6424,
-  6430, 6439, 6445, 6465, 6471, 6480, 6486, 6497,
-  6503, 6512, 6518, 6543, 6549, 6558, 6564, 6575,
-  6581, 6590, 6596, 6616, 6622, 6631, 6637, 6648,
-  6654, 6663, 6669, 6692, 6698, 6707, 6713, 6724,
-  6730, 6739, 6745, 6765, 6771, 6780, 6786, 6797,
-  6803, 6812, 6818, 6843, 6849, 6858, 6864, 6875,
-  6881, 6890, 6896, 6916, 6922, 6931, 6937, 6948,
-  6954, 6963, 6969, 6833, 6839, 6848, 6854, 6865,
-  6871, 6880, 6886, 6906, 6912, 6921, 6927, 6938,
-  6944, 6953, 6959, 6984, 6990, 6999, 7005, 7016,
-  7022, 7031, 7037, 7057, 7063, 7072, 7078, 7089,
-  7095, 7104, 7110, 7133, 7139, 7148, 7154, 7165,
-  7171, 7180, 7186, 7206, 7212, 7221, 7227, 7238,
-  7244, 7253, 7259, 7284, 7290, 7299, 7305, 7316,
-  7322, 7331, 7337, 7357, 7363, 7372, 7378, 7389,
-  7395, 7404, 7410, 7205, 7211, 7220, 7226, 7237,
-  7243, 7252, 7258, 7278, 7284, 7293, 7299, 7310,
-  7316, 7325, 7331, 7356, 7362, 7371, 7377, 7388,
-  7394, 7403, 7409, 7429, 7435, 7444, 7450, 7461,
-  7467, 7476, 7482, 7505, 7511, 7520, 7526, 7537,
-  7543, 7552, 7558, 7578, 7584, 7593, 7599, 7610,
-  7616, 7625, 7631, 7656, 7662, 7671, 7677, 7688,
-  7694, 7703, 7709, 7729, 7735, 7744, 7750, 7761
-};
-
-//------------------------------------------------------------------------------
-// Tables for level coding
-
-const uint8_t VP8EncBands[16 + 1] = {
-  0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7,
-  0  // sentinel
-};
-
-//------------------------------------------------------------------------------
-// Mode costs
-
-static int GetResidualCost_C(int ctx0, const VP8Residual* const res) {
-  int n = res->first;
-  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
-  const int p0 = res->prob[n][ctx0][0];
-  CostArrayPtr const costs = res->costs;
-  const uint16_t* t = costs[n][ctx0];
-  // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0
-  // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll
-  // be missing during the loop.
-  int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
-
-  if (res->last < 0) {
-    return VP8BitCost(0, p0);
-  }
-  for (; n < res->last; ++n) {
-    const int v = abs(res->coeffs[n]);
-    const int ctx = (v >= 2) ? 2 : v;
-    cost += VP8LevelCost(t, v);
-    t = costs[n + 1][ctx];
-  }
-  // Last coefficient is always non-zero
-  {
-    const int v = abs(res->coeffs[n]);
-    assert(v != 0);
-    cost += VP8LevelCost(t, v);
-    if (n < 15) {
-      const int b = VP8EncBands[n + 1];
-      const int ctx = (v == 1) ? 1 : 2;
-      const int last_p0 = res->prob[b][ctx][0];
-      cost += VP8BitCost(0, last_p0);
-    }
-  }
-  return cost;
-}
-
-static void SetResidualCoeffs_C(const int16_t* const coeffs,
-                                VP8Residual* const res) {
-  int n;
-  res->last = -1;
-  assert(res->first == 0 || coeffs[0] == 0);
-  for (n = 15; n >= 0; --n) {
-    if (coeffs[n]) {
-      res->last = n;
-      break;
-    }
-  }
-  res->coeffs = coeffs;
-}
-
-//------------------------------------------------------------------------------
-// init function
-
-VP8GetResidualCostFunc VP8GetResidualCost;
-VP8SetResidualCoeffsFunc VP8SetResidualCoeffs;
-
-extern void VP8EncDspCostInitMIPS32(void);
-extern void VP8EncDspCostInitMIPSdspR2(void);
-extern void VP8EncDspCostInitSSE2(void);
-extern void VP8EncDspCostInitNEON(void);
-
-WEBP_DSP_INIT_FUNC(VP8EncDspCostInit) {
-  VP8GetResidualCost = GetResidualCost_C;
-  VP8SetResidualCoeffs = SetResidualCoeffs_C;
-
-  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_MIPS32)
-    if (VP8GetCPUInfo(kMIPS32)) {
-      VP8EncDspCostInitMIPS32();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      VP8EncDspCostInitMIPSdspR2();
-    }
-#endif
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      VP8EncDspCostInitSSE2();
-    }
-#endif
-#if defined(WEBP_USE_NEON)
-    if (VP8GetCPUInfo(kNEON)) {
-      VP8EncDspCostInitNEON();
-    }
-#endif
-  }
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dsp/cost_mips32.c b/ios/Pods/libwebp/src/dsp/cost_mips32.c
deleted file mode 100644
index 0500f88..0000000
--- a/ios/Pods/libwebp/src/dsp/cost_mips32.c
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Djordje Pesut (djordje.pesut@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS32)
-
-#include "src/enc/cost_enc.h"
-
-static int GetResidualCost_MIPS32(int ctx0, const VP8Residual* const res) {
-  int temp0, temp1;
-  int v_reg, ctx_reg;
-  int n = res->first;
-  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
-  int p0 = res->prob[n][ctx0][0];
-  CostArrayPtr const costs = res->costs;
-  const uint16_t* t = costs[n][ctx0];
-  // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0
-  // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll
-  // be missing during the loop.
-  int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
-  const int16_t* res_coeffs = res->coeffs;
-  const int res_last = res->last;
-  const int const_max_level = MAX_VARIABLE_LEVEL;
-  const int const_2 = 2;
-  const uint16_t** p_costs = &costs[n][0];
-  const size_t inc_p_costs = NUM_CTX * sizeof(*p_costs);
-
-  if (res->last < 0) {
-    return VP8BitCost(0, p0);
-  }
-
-  __asm__ volatile (
-    ".set      push                                                        \n\t"
-    ".set      noreorder                                                   \n\t"
-    "subu      %[temp1],        %[res_last],        %[n]                   \n\t"
-    "sll       %[temp0],        %[n],               1                      \n\t"
-    "blez      %[temp1],        2f                                         \n\t"
-    " addu     %[res_coeffs],   %[res_coeffs],      %[temp0]               \n\t"
-  "1:                                                                      \n\t"
-    "lh        %[v_reg],        0(%[res_coeffs])                           \n\t"
-    "addiu     %[n],            %[n],               1                      \n\t"
-    "negu      %[temp0],        %[v_reg]                                   \n\t"
-    "slti      %[temp1],        %[v_reg],           0                      \n\t"
-    "movn      %[v_reg],        %[temp0],           %[temp1]               \n\t"
-    "sltiu     %[temp0],        %[v_reg],           2                      \n\t"
-    "move      %[ctx_reg],      %[v_reg]                                   \n\t"
-    "movz      %[ctx_reg],      %[const_2],         %[temp0]               \n\t"
-    "sll       %[temp1],        %[v_reg],           1                      \n\t"
-    "addu      %[temp1],        %[temp1],           %[VP8LevelFixedCosts]  \n\t"
-    "lhu       %[temp1],        0(%[temp1])                                \n\t"
-    "slt       %[temp0],        %[v_reg],           %[const_max_level]     \n\t"
-    "movz      %[v_reg],        %[const_max_level], %[temp0]               \n\t"
-    "addu      %[cost],         %[cost],            %[temp1]               \n\t"
-    "sll       %[v_reg],        %[v_reg],           1                      \n\t"
-    "sll       %[ctx_reg],      %[ctx_reg],         2                      \n\t"
-    "addu      %[v_reg],        %[v_reg],           %[t]                   \n\t"
-    "lhu       %[temp0],        0(%[v_reg])                                \n\t"
-    "addu      %[p_costs],      %[p_costs],         %[inc_p_costs]         \n\t"
-    "addu      %[t],            %[p_costs],         %[ctx_reg]             \n\t"
-    "addu      %[cost],         %[cost],            %[temp0]               \n\t"
-    "addiu     %[res_coeffs],   %[res_coeffs],      2                      \n\t"
-    "bne       %[n],            %[res_last],        1b                     \n\t"
-    " lw       %[t],            0(%[t])                                    \n\t"
-  "2:                                                                      \n\t"
-    ".set      pop                                                         \n\t"
-    : [cost]"+&r"(cost), [t]"+&r"(t), [n]"+&r"(n), [v_reg]"=&r"(v_reg),
-      [ctx_reg]"=&r"(ctx_reg), [p_costs]"+&r"(p_costs), [temp0]"=&r"(temp0),
-      [temp1]"=&r"(temp1), [res_coeffs]"+&r"(res_coeffs)
-    : [const_2]"r"(const_2), [const_max_level]"r"(const_max_level),
-      [VP8LevelFixedCosts]"r"(VP8LevelFixedCosts), [res_last]"r"(res_last),
-      [inc_p_costs]"r"(inc_p_costs)
-    : "memory"
-  );
-
-  // Last coefficient is always non-zero
-  {
-    const int v = abs(res->coeffs[n]);
-    assert(v != 0);
-    cost += VP8LevelCost(t, v);
-    if (n < 15) {
-      const int b = VP8EncBands[n + 1];
-      const int ctx = (v == 1) ? 1 : 2;
-      const int last_p0 = res->prob[b][ctx][0];
-      cost += VP8BitCost(0, last_p0);
-    }
-  }
-  return cost;
-}
-
-static void SetResidualCoeffs_MIPS32(const int16_t* const coeffs,
-                                     VP8Residual* const res) {
-  const int16_t* p_coeffs = (int16_t*)coeffs;
-  int temp0, temp1, temp2, n, n1;
-  assert(res->first == 0 || coeffs[0] == 0);
-
-  __asm__ volatile (
-    ".set     push                                      \n\t"
-    ".set     noreorder                                 \n\t"
-    "addiu    %[p_coeffs],   %[p_coeffs],    28         \n\t"
-    "li       %[n],          15                         \n\t"
-    "li       %[temp2],      -1                         \n\t"
-  "0:                                                   \n\t"
-    "ulw      %[temp0],      0(%[p_coeffs])             \n\t"
-    "beqz     %[temp0],      1f                         \n\t"
-#if defined(WORDS_BIGENDIAN)
-    " sll     %[temp1],      %[temp0],       16         \n\t"
-#else
-    " srl     %[temp1],      %[temp0],       16         \n\t"
-#endif
-    "addiu    %[n1],         %[n],           -1         \n\t"
-    "movz     %[temp0],      %[n1],          %[temp1]   \n\t"
-    "movn     %[temp0],      %[n],           %[temp1]   \n\t"
-    "j        2f                                        \n\t"
-    " addiu   %[temp2],      %[temp0],       0          \n\t"
-  "1:                                                   \n\t"
-    "addiu    %[n],          %[n],           -2         \n\t"
-    "bgtz     %[n],          0b                         \n\t"
-    " addiu   %[p_coeffs],   %[p_coeffs],    -4         \n\t"
-  "2:                                                   \n\t"
-    ".set     pop                                       \n\t"
-    : [p_coeffs]"+&r"(p_coeffs), [temp0]"=&r"(temp0),
-      [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [n]"=&r"(n), [n1]"=&r"(n1)
-    :
-    : "memory"
-  );
-  res->last = temp2;
-  res->coeffs = coeffs;
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspCostInitMIPS32(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspCostInitMIPS32(void) {
-  VP8GetResidualCost = GetResidualCost_MIPS32;
-  VP8SetResidualCoeffs = SetResidualCoeffs_MIPS32;
-}
-
-#else  // !WEBP_USE_MIPS32
-
-WEBP_DSP_INIT_STUB(VP8EncDspCostInitMIPS32)
-
-#endif  // WEBP_USE_MIPS32
diff --git a/ios/Pods/libwebp/src/dsp/cost_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/cost_mips_dsp_r2.c
deleted file mode 100644
index 51248de..0000000
--- a/ios/Pods/libwebp/src/dsp/cost_mips_dsp_r2.c
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Djordje Pesut (djordje.pesut@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-#include "src/enc/cost_enc.h"
-
-static int GetResidualCost_MIPSdspR2(int ctx0, const VP8Residual* const res) {
-  int temp0, temp1;
-  int v_reg, ctx_reg;
-  int n = res->first;
-  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
-  int p0 = res->prob[n][ctx0][0];
-  CostArrayPtr const costs = res->costs;
-  const uint16_t* t = costs[n][ctx0];
-  // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0
-  // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll
-  // be missing during the loop.
-  int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
-  const int16_t* res_coeffs = res->coeffs;
-  const int res_last = res->last;
-  const int const_max_level = MAX_VARIABLE_LEVEL;
-  const int const_2 = 2;
-  const uint16_t** p_costs = &costs[n][0];
-  const size_t inc_p_costs = NUM_CTX * sizeof(*p_costs);
-
-  if (res->last < 0) {
-    return VP8BitCost(0, p0);
-  }
-
-  __asm__ volatile (
-    ".set      push                                                     \n\t"
-    ".set      noreorder                                                \n\t"
-    "subu      %[temp1],        %[res_last],        %[n]                \n\t"
-    "blez      %[temp1],        2f                                      \n\t"
-    " nop                                                               \n\t"
-  "1:                                                                   \n\t"
-    "sll       %[temp0],        %[n],               1                   \n\t"
-    "lhx       %[v_reg],        %[temp0](%[res_coeffs])                 \n\t"
-    "addiu     %[n],            %[n],               1                   \n\t"
-    "absq_s.w  %[v_reg],        %[v_reg]                                \n\t"
-    "sltiu     %[temp0],        %[v_reg],           2                   \n\t"
-    "move      %[ctx_reg],      %[v_reg]                                \n\t"
-    "movz      %[ctx_reg],      %[const_2],         %[temp0]            \n\t"
-    "sll       %[temp1],        %[v_reg],           1                   \n\t"
-    "lhx       %[temp1],        %[temp1](%[VP8LevelFixedCosts])         \n\t"
-    "slt       %[temp0],        %[v_reg],           %[const_max_level]  \n\t"
-    "movz      %[v_reg],        %[const_max_level], %[temp0]            \n\t"
-    "addu      %[cost],         %[cost],            %[temp1]            \n\t"
-    "sll       %[v_reg],        %[v_reg],           1                   \n\t"
-    "sll       %[ctx_reg],      %[ctx_reg],         2                   \n\t"
-    "lhx       %[temp0],        %[v_reg](%[t])                          \n\t"
-    "addu      %[p_costs],      %[p_costs],         %[inc_p_costs]      \n\t"
-    "addu      %[t],            %[p_costs],         %[ctx_reg]          \n\t"
-    "addu      %[cost],         %[cost],            %[temp0]            \n\t"
-    "bne       %[n],            %[res_last],        1b                  \n\t"
-    " lw       %[t],            0(%[t])                                 \n\t"
-  "2:                                                                   \n\t"
-    ".set      pop                                                      \n\t"
-    : [cost]"+&r"(cost), [t]"+&r"(t), [n]"+&r"(n), [v_reg]"=&r"(v_reg),
-      [ctx_reg]"=&r"(ctx_reg), [p_costs]"+&r"(p_costs), [temp0]"=&r"(temp0),
-      [temp1]"=&r"(temp1)
-    : [const_2]"r"(const_2), [const_max_level]"r"(const_max_level),
-      [VP8LevelFixedCosts]"r"(VP8LevelFixedCosts), [res_last]"r"(res_last),
-      [res_coeffs]"r"(res_coeffs), [inc_p_costs]"r"(inc_p_costs)
-    : "memory"
-  );
-
-  // Last coefficient is always non-zero
-  {
-    const int v = abs(res->coeffs[n]);
-    assert(v != 0);
-    cost += VP8LevelCost(t, v);
-    if (n < 15) {
-      const int b = VP8EncBands[n + 1];
-      const int ctx = (v == 1) ? 1 : 2;
-      const int last_p0 = res->prob[b][ctx][0];
-      cost += VP8BitCost(0, last_p0);
-    }
-  }
-  return cost;
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspCostInitMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspCostInitMIPSdspR2(void) {
-  VP8GetResidualCost = GetResidualCost_MIPSdspR2;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(VP8EncDspCostInitMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/cost_neon.c b/ios/Pods/libwebp/src/dsp/cost_neon.c
deleted file mode 100644
index 8cc8ce5..0000000
--- a/ios/Pods/libwebp/src/dsp/cost_neon.c
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2018 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// ARM NEON version of cost functions
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include "src/dsp/neon.h"
-#include "src/enc/cost_enc.h"
-
-static const uint8_t position[16] = { 1, 2,  3,  4,  5,  6,  7,  8,
-                                      9, 10, 11, 12, 13, 14, 15, 16 };
-
-static void SetResidualCoeffs_NEON(const int16_t* const coeffs,
-                                   VP8Residual* const res) {
-  const int16x8_t minus_one = vdupq_n_s16(-1);
-  const int16x8_t coeffs_0 = vld1q_s16(coeffs);
-  const int16x8_t coeffs_1 = vld1q_s16(coeffs + 8);
-  const uint16x8_t eob_0 = vtstq_s16(coeffs_0, minus_one);
-  const uint16x8_t eob_1 = vtstq_s16(coeffs_1, minus_one);
-  const uint8x16_t eob = vcombine_u8(vqmovn_u16(eob_0), vqmovn_u16(eob_1));
-  const uint8x16_t masked = vandq_u8(eob, vld1q_u8(position));
-
-#ifdef __aarch64__
-  res->last = vmaxvq_u8(masked) - 1;
-#else
-  const uint8x8_t eob_8x8 = vmax_u8(vget_low_u8(masked), vget_high_u8(masked));
-  const uint16x8_t eob_16x8 = vmovl_u8(eob_8x8);
-  const uint16x4_t eob_16x4 =
-      vmax_u16(vget_low_u16(eob_16x8), vget_high_u16(eob_16x8));
-  const uint32x4_t eob_32x4 = vmovl_u16(eob_16x4);
-  uint32x2_t eob_32x2 =
-      vmax_u32(vget_low_u32(eob_32x4), vget_high_u32(eob_32x4));
-  eob_32x2 = vpmax_u32(eob_32x2, eob_32x2);
-
-  vst1_lane_s32(&res->last, vreinterpret_s32_u32(eob_32x2), 0);
-  --res->last;
-#endif  // __aarch64__
-
-  res->coeffs = coeffs;
-}
-
-static int GetResidualCost_NEON(int ctx0, const VP8Residual* const res) {
-  uint8_t levels[16], ctxs[16];
-  uint16_t abs_levels[16];
-  int n = res->first;
-  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
-  const int p0 = res->prob[n][ctx0][0];
-  CostArrayPtr const costs = res->costs;
-  const uint16_t* t = costs[n][ctx0];
-  // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0
-  // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll
-  // be missing during the loop.
-  int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
-
-  if (res->last < 0) {
-    return VP8BitCost(0, p0);
-  }
-
-  {   // precompute clamped levels and contexts, packed to 8b.
-    const uint8x16_t kCst2 = vdupq_n_u8(2);
-    const uint8x16_t kCst67 = vdupq_n_u8(MAX_VARIABLE_LEVEL);
-    const int16x8_t c0 = vld1q_s16(res->coeffs);
-    const int16x8_t c1 = vld1q_s16(res->coeffs + 8);
-    const uint16x8_t E0 = vreinterpretq_u16_s16(vabsq_s16(c0));
-    const uint16x8_t E1 = vreinterpretq_u16_s16(vabsq_s16(c1));
-    const uint8x16_t F = vcombine_u8(vqmovn_u16(E0), vqmovn_u16(E1));
-    const uint8x16_t G = vminq_u8(F, kCst2);   // context = 0,1,2
-    const uint8x16_t H = vminq_u8(F, kCst67);  // clamp_level in [0..67]
-
-    vst1q_u8(ctxs, G);
-    vst1q_u8(levels, H);
-
-    vst1q_u16(abs_levels, E0);
-    vst1q_u16(abs_levels + 8, E1);
-  }
-  for (; n < res->last; ++n) {
-    const int ctx = ctxs[n];
-    const int level = levels[n];
-    const int flevel = abs_levels[n];   // full level
-    cost += VP8LevelFixedCosts[flevel] + t[level];  // simplified VP8LevelCost()
-    t = costs[n + 1][ctx];
-  }
-  // Last coefficient is always non-zero
-  {
-    const int level = levels[n];
-    const int flevel = abs_levels[n];
-    assert(flevel != 0);
-    cost += VP8LevelFixedCosts[flevel] + t[level];
-    if (n < 15) {
-      const int b = VP8EncBands[n + 1];
-      const int ctx = ctxs[n];
-      const int last_p0 = res->prob[b][ctx][0];
-      cost += VP8BitCost(0, last_p0);
-    }
-  }
-  return cost;
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspCostInitNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspCostInitNEON(void) {
-  VP8SetResidualCoeffs = SetResidualCoeffs_NEON;
-  VP8GetResidualCost = GetResidualCost_NEON;
-}
-
-#else  // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(VP8EncDspCostInitNEON)
-
-#endif  // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/cost_sse2.c b/ios/Pods/libwebp/src/dsp/cost_sse2.c
deleted file mode 100644
index 487a079..0000000
--- a/ios/Pods/libwebp/src/dsp/cost_sse2.c
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 version of cost functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-#include <emmintrin.h>
-
-#include "src/enc/cost_enc.h"
-#include "src/enc/vp8i_enc.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-
-static void SetResidualCoeffs_SSE2(const int16_t* const coeffs,
-                                   VP8Residual* const res) {
-  const __m128i c0 = _mm_loadu_si128((const __m128i*)(coeffs + 0));
-  const __m128i c1 = _mm_loadu_si128((const __m128i*)(coeffs + 8));
-  // Use SSE2 to compare 16 values with a single instruction.
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i m0 = _mm_packs_epi16(c0, c1);
-  const __m128i m1 = _mm_cmpeq_epi8(m0, zero);
-  // Get the comparison results as a bitmask into 16bits. Negate the mask to get
-  // the position of entries that are not equal to zero. We don't need to mask
-  // out least significant bits according to res->first, since coeffs[0] is 0
-  // if res->first > 0.
-  const uint32_t mask = 0x0000ffffu ^ (uint32_t)_mm_movemask_epi8(m1);
-  // The position of the most significant non-zero bit indicates the position of
-  // the last non-zero value.
-  assert(res->first == 0 || coeffs[0] == 0);
-  res->last = mask ? BitsLog2Floor(mask) : -1;
-  res->coeffs = coeffs;
-}
-
-static int GetResidualCost_SSE2(int ctx0, const VP8Residual* const res) {
-  uint8_t levels[16], ctxs[16];
-  uint16_t abs_levels[16];
-  int n = res->first;
-  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
-  const int p0 = res->prob[n][ctx0][0];
-  CostArrayPtr const costs = res->costs;
-  const uint16_t* t = costs[n][ctx0];
-  // bit_cost(1, p0) is already incorporated in t[] tables, but only if ctx != 0
-  // (as required by the syntax). For ctx0 == 0, we need to add it here or it'll
-  // be missing during the loop.
-  int cost = (ctx0 == 0) ? VP8BitCost(1, p0) : 0;
-
-  if (res->last < 0) {
-    return VP8BitCost(0, p0);
-  }
-
-  {   // precompute clamped levels and contexts, packed to 8b.
-    const __m128i zero = _mm_setzero_si128();
-    const __m128i kCst2 = _mm_set1_epi8(2);
-    const __m128i kCst67 = _mm_set1_epi8(MAX_VARIABLE_LEVEL);
-    const __m128i c0 = _mm_loadu_si128((const __m128i*)&res->coeffs[0]);
-    const __m128i c1 = _mm_loadu_si128((const __m128i*)&res->coeffs[8]);
-    const __m128i D0 = _mm_sub_epi16(zero, c0);
-    const __m128i D1 = _mm_sub_epi16(zero, c1);
-    const __m128i E0 = _mm_max_epi16(c0, D0);   // abs(v), 16b
-    const __m128i E1 = _mm_max_epi16(c1, D1);
-    const __m128i F = _mm_packs_epi16(E0, E1);
-    const __m128i G = _mm_min_epu8(F, kCst2);    // context = 0,1,2
-    const __m128i H = _mm_min_epu8(F, kCst67);   // clamp_level in [0..67]
-
-    _mm_storeu_si128((__m128i*)&ctxs[0], G);
-    _mm_storeu_si128((__m128i*)&levels[0], H);
-
-    _mm_storeu_si128((__m128i*)&abs_levels[0], E0);
-    _mm_storeu_si128((__m128i*)&abs_levels[8], E1);
-  }
-  for (; n < res->last; ++n) {
-    const int ctx = ctxs[n];
-    const int level = levels[n];
-    const int flevel = abs_levels[n];   // full level
-    cost += VP8LevelFixedCosts[flevel] + t[level];  // simplified VP8LevelCost()
-    t = costs[n + 1][ctx];
-  }
-  // Last coefficient is always non-zero
-  {
-    const int level = levels[n];
-    const int flevel = abs_levels[n];
-    assert(flevel != 0);
-    cost += VP8LevelFixedCosts[flevel] + t[level];
-    if (n < 15) {
-      const int b = VP8EncBands[n + 1];
-      const int ctx = ctxs[n];
-      const int last_p0 = res->prob[b][ctx][0];
-      cost += VP8BitCost(0, last_p0);
-    }
-  }
-  return cost;
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspCostInitSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspCostInitSSE2(void) {
-  VP8SetResidualCoeffs = SetResidualCoeffs_SSE2;
-  VP8GetResidualCost = GetResidualCost_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(VP8EncDspCostInitSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/cpu.c b/ios/Pods/libwebp/src/dsp/cpu.c
deleted file mode 100644
index 8b40fee..0000000
--- a/ios/Pods/libwebp/src/dsp/cpu.c
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// CPU detection
-//
-// Author: Christian Duvivier (cduvivier@google.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_HAVE_NEON_RTCD)
-#include <stdio.h>
-#include <string.h>
-#endif
-
-#if defined(WEBP_ANDROID_NEON)
-#include <cpu-features.h>
-#endif
-
-//------------------------------------------------------------------------------
-// SSE2 detection.
-//
-
-// apple/darwin gcc-4.0.1 defines __PIC__, but not __pic__ with -fPIC.
-#if (defined(__pic__) || defined(__PIC__)) && defined(__i386__)
-static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) {
-  __asm__ volatile (
-    "mov %%ebx, %%edi\n"
-    "cpuid\n"
-    "xchg %%edi, %%ebx\n"
-    : "=a"(cpu_info[0]), "=D"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3])
-    : "a"(info_type), "c"(0));
-}
-#elif defined(__x86_64__) && \
-      (defined(__code_model_medium__) || defined(__code_model_large__)) && \
-      defined(__PIC__)
-static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) {
-  __asm__ volatile (
-    "xchg{q}\t{%%rbx}, %q1\n"
-    "cpuid\n"
-    "xchg{q}\t{%%rbx}, %q1\n"
-    : "=a"(cpu_info[0]), "=&r"(cpu_info[1]), "=c"(cpu_info[2]),
-      "=d"(cpu_info[3])
-    : "a"(info_type), "c"(0));
-}
-#elif defined(__i386__) || defined(__x86_64__)
-static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) {
-  __asm__ volatile (
-    "cpuid\n"
-    : "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3])
-    : "a"(info_type), "c"(0));
-}
-#elif (defined(_M_X64) || defined(_M_IX86)) && \
-      defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 150030729  // >= VS2008 SP1
-#include <intrin.h>
-#define GetCPUInfo(info, type) __cpuidex(info, type, 0)  // set ecx=0
-#elif defined(WEBP_MSC_SSE2)
-#define GetCPUInfo __cpuid
-#endif
-
-// NaCl has no support for xgetbv or the raw opcode.
-#if !defined(__native_client__) && (defined(__i386__) || defined(__x86_64__))
-static WEBP_INLINE uint64_t xgetbv(void) {
-  const uint32_t ecx = 0;
-  uint32_t eax, edx;
-  // Use the raw opcode for xgetbv for compatibility with older toolchains.
-  __asm__ volatile (
-    ".byte 0x0f, 0x01, 0xd0\n"
-    : "=a"(eax), "=d"(edx) : "c" (ecx));
-  return ((uint64_t)edx << 32) | eax;
-}
-#elif (defined(_M_X64) || defined(_M_IX86)) && \
-      defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 160040219  // >= VS2010 SP1
-#include <immintrin.h>
-#define xgetbv() _xgetbv(0)
-#elif defined(_MSC_VER) && defined(_M_IX86)
-static WEBP_INLINE uint64_t xgetbv(void) {
-  uint32_t eax_, edx_;
-  __asm {
-    xor ecx, ecx  // ecx = 0
-    // Use the raw opcode for xgetbv for compatibility with older toolchains.
-    __asm _emit 0x0f __asm _emit 0x01 __asm _emit 0xd0
-    mov eax_, eax
-    mov edx_, edx
-  }
-  return ((uint64_t)edx_ << 32) | eax_;
-}
-#else
-#define xgetbv() 0U  // no AVX for older x64 or unrecognized toolchains.
-#endif
-
-#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_MSC_SSE2)
-
-// helper function for run-time detection of slow SSSE3 platforms
-static int CheckSlowModel(int info) {
-  // Table listing display models with longer latencies for the bsr instruction
-  // (ie 2 cycles vs 10/16 cycles) and some SSSE3 instructions like pshufb.
-  // Refer to Intel 64 and IA-32 Architectures Optimization Reference Manual.
-  static const uint8_t kSlowModels[] = {
-    0x37, 0x4a, 0x4d,  // Silvermont Microarchitecture
-    0x1c, 0x26, 0x27   // Atom Microarchitecture
-  };
-  const uint32_t model = ((info & 0xf0000) >> 12) | ((info >> 4) & 0xf);
-  const uint32_t family = (info >> 8) & 0xf;
-  if (family == 0x06) {
-    size_t i;
-    for (i = 0; i < sizeof(kSlowModels) / sizeof(kSlowModels[0]); ++i) {
-      if (model == kSlowModels[i]) return 1;
-    }
-  }
-  return 0;
-}
-
-static int x86CPUInfo(CPUFeature feature) {
-  int max_cpuid_value;
-  int cpu_info[4];
-  int is_intel = 0;
-
-  // get the highest feature value cpuid supports
-  GetCPUInfo(cpu_info, 0);
-  max_cpuid_value = cpu_info[0];
-  if (max_cpuid_value < 1) {
-    return 0;
-  } else {
-    const int VENDOR_ID_INTEL_EBX = 0x756e6547;  // uneG
-    const int VENDOR_ID_INTEL_EDX = 0x49656e69;  // Ieni
-    const int VENDOR_ID_INTEL_ECX = 0x6c65746e;  // letn
-    is_intel = (cpu_info[1] == VENDOR_ID_INTEL_EBX &&
-                cpu_info[2] == VENDOR_ID_INTEL_ECX &&
-                cpu_info[3] == VENDOR_ID_INTEL_EDX);    // genuine Intel?
-  }
-
-  GetCPUInfo(cpu_info, 1);
-  if (feature == kSSE2) {
-    return !!(cpu_info[3] & (1 << 26));
-  }
-  if (feature == kSSE3) {
-    return !!(cpu_info[2] & (1 << 0));
-  }
-  if (feature == kSlowSSSE3) {
-    if (is_intel && (cpu_info[2] & (1 << 9))) {   // SSSE3?
-      return CheckSlowModel(cpu_info[0]);
-    }
-    return 0;
-  }
-
-  if (feature == kSSE4_1) {
-    return !!(cpu_info[2] & (1 << 19));
-  }
-  if (feature == kAVX) {
-    // bits 27 (OSXSAVE) & 28 (256-bit AVX)
-    if ((cpu_info[2] & 0x18000000) == 0x18000000) {
-      // XMM state and YMM state enabled by the OS.
-      return (xgetbv() & 0x6) == 0x6;
-    }
-  }
-  if (feature == kAVX2) {
-    if (x86CPUInfo(kAVX) && max_cpuid_value >= 7) {
-      GetCPUInfo(cpu_info, 7);
-      return !!(cpu_info[1] & (1 << 5));
-    }
-  }
-  return 0;
-}
-VP8CPUInfo VP8GetCPUInfo = x86CPUInfo;
-#elif defined(WEBP_ANDROID_NEON)  // NB: needs to be before generic NEON test.
-static int AndroidCPUInfo(CPUFeature feature) {
-  const AndroidCpuFamily cpu_family = android_getCpuFamily();
-  const uint64_t cpu_features = android_getCpuFeatures();
-  if (feature == kNEON) {
-    return (cpu_family == ANDROID_CPU_FAMILY_ARM &&
-            0 != (cpu_features & ANDROID_CPU_ARM_FEATURE_NEON));
-  }
-  return 0;
-}
-VP8CPUInfo VP8GetCPUInfo = AndroidCPUInfo;
-#elif defined(WEBP_USE_NEON)
-// define a dummy function to enable turning off NEON at runtime by setting
-// VP8DecGetCPUInfo = NULL
-static int armCPUInfo(CPUFeature feature) {
-  if (feature != kNEON) return 0;
-#if defined(__linux__) && defined(WEBP_HAVE_NEON_RTCD)
-  {
-    int has_neon = 0;
-    char line[200];
-    FILE* const cpuinfo = fopen("/proc/cpuinfo", "r");
-    if (cpuinfo == NULL) return 0;
-    while (fgets(line, sizeof(line), cpuinfo)) {
-      if (!strncmp(line, "Features", 8)) {
-        if (strstr(line, " neon ") != NULL) {
-          has_neon = 1;
-          break;
-        }
-      }
-    }
-    fclose(cpuinfo);
-    return has_neon;
-  }
-#else
-  return 1;
-#endif
-}
-VP8CPUInfo VP8GetCPUInfo = armCPUInfo;
-#elif defined(WEBP_USE_MIPS32) || defined(WEBP_USE_MIPS_DSP_R2) || \
-      defined(WEBP_USE_MSA)
-static int mipsCPUInfo(CPUFeature feature) {
-  if ((feature == kMIPS32) || (feature == kMIPSdspR2) || (feature == kMSA)) {
-    return 1;
-  } else {
-    return 0;
-  }
-
-}
-VP8CPUInfo VP8GetCPUInfo = mipsCPUInfo;
-#else
-VP8CPUInfo VP8GetCPUInfo = NULL;
-#endif
diff --git a/ios/Pods/libwebp/src/dsp/dec.c b/ios/Pods/libwebp/src/dsp/dec.c
deleted file mode 100644
index 1119842..0000000
--- a/ios/Pods/libwebp/src/dsp/dec.c
+++ /dev/null
@@ -1,887 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Speed-critical decoding functions, default plain-C implementations.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-
-#include "src/dsp/dsp.h"
-#include "src/dec/vp8i_dec.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-
-static WEBP_INLINE uint8_t clip_8b(int v) {
-  return (!(v & ~0xff)) ? v : (v < 0) ? 0 : 255;
-}
-
-//------------------------------------------------------------------------------
-// Transforms (Paragraph 14.4)
-
-#define STORE(x, y, v) \
-  dst[(x) + (y) * BPS] = clip_8b(dst[(x) + (y) * BPS] + ((v) >> 3))
-
-#define STORE2(y, dc, d, c) do {    \
-  const int DC = (dc);              \
-  STORE(0, y, DC + (d));            \
-  STORE(1, y, DC + (c));            \
-  STORE(2, y, DC - (c));            \
-  STORE(3, y, DC - (d));            \
-} while (0)
-
-#define MUL1(a) ((((a) * 20091) >> 16) + (a))
-#define MUL2(a) (((a) * 35468) >> 16)
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void TransformOne_C(const int16_t* in, uint8_t* dst) {
-  int C[4 * 4], *tmp;
-  int i;
-  tmp = C;
-  for (i = 0; i < 4; ++i) {    // vertical pass
-    const int a = in[0] + in[8];    // [-4096, 4094]
-    const int b = in[0] - in[8];    // [-4095, 4095]
-    const int c = MUL2(in[4]) - MUL1(in[12]);   // [-3783, 3783]
-    const int d = MUL1(in[4]) + MUL2(in[12]);   // [-3785, 3781]
-    tmp[0] = a + d;   // [-7881, 7875]
-    tmp[1] = b + c;   // [-7878, 7878]
-    tmp[2] = b - c;   // [-7878, 7878]
-    tmp[3] = a - d;   // [-7877, 7879]
-    tmp += 4;
-    in++;
-  }
-  // Each pass is expanding the dynamic range by ~3.85 (upper bound).
-  // The exact value is (2. + (20091 + 35468) / 65536).
-  // After the second pass, maximum interval is [-3794, 3794], assuming
-  // an input in [-2048, 2047] interval. We then need to add a dst value
-  // in the [0, 255] range.
-  // In the worst case scenario, the input to clip_8b() can be as large as
-  // [-60713, 60968].
-  tmp = C;
-  for (i = 0; i < 4; ++i) {    // horizontal pass
-    const int dc = tmp[0] + 4;
-    const int a =  dc +  tmp[8];
-    const int b =  dc -  tmp[8];
-    const int c = MUL2(tmp[4]) - MUL1(tmp[12]);
-    const int d = MUL1(tmp[4]) + MUL2(tmp[12]);
-    STORE(0, 0, a + d);
-    STORE(1, 0, b + c);
-    STORE(2, 0, b - c);
-    STORE(3, 0, a - d);
-    tmp++;
-    dst += BPS;
-  }
-}
-
-// Simplified transform when only in[0], in[1] and in[4] are non-zero
-static void TransformAC3_C(const int16_t* in, uint8_t* dst) {
-  const int a = in[0] + 4;
-  const int c4 = MUL2(in[4]);
-  const int d4 = MUL1(in[4]);
-  const int c1 = MUL2(in[1]);
-  const int d1 = MUL1(in[1]);
-  STORE2(0, a + d4, d1, c1);
-  STORE2(1, a + c4, d1, c1);
-  STORE2(2, a - c4, d1, c1);
-  STORE2(3, a - d4, d1, c1);
-}
-#undef MUL1
-#undef MUL2
-#undef STORE2
-
-static void TransformTwo_C(const int16_t* in, uint8_t* dst, int do_two) {
-  TransformOne_C(in, dst);
-  if (do_two) {
-    TransformOne_C(in + 16, dst + 4);
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-static void TransformUV_C(const int16_t* in, uint8_t* dst) {
-  VP8Transform(in + 0 * 16, dst, 1);
-  VP8Transform(in + 2 * 16, dst + 4 * BPS, 1);
-}
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void TransformDC_C(const int16_t* in, uint8_t* dst) {
-  const int DC = in[0] + 4;
-  int i, j;
-  for (j = 0; j < 4; ++j) {
-    for (i = 0; i < 4; ++i) {
-      STORE(i, j, DC);
-    }
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-static void TransformDCUV_C(const int16_t* in, uint8_t* dst) {
-  if (in[0 * 16]) VP8TransformDC(in + 0 * 16, dst);
-  if (in[1 * 16]) VP8TransformDC(in + 1 * 16, dst + 4);
-  if (in[2 * 16]) VP8TransformDC(in + 2 * 16, dst + 4 * BPS);
-  if (in[3 * 16]) VP8TransformDC(in + 3 * 16, dst + 4 * BPS + 4);
-}
-
-#undef STORE
-
-//------------------------------------------------------------------------------
-// Paragraph 14.3
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void TransformWHT_C(const int16_t* in, int16_t* out) {
-  int tmp[16];
-  int i;
-  for (i = 0; i < 4; ++i) {
-    const int a0 = in[0 + i] + in[12 + i];
-    const int a1 = in[4 + i] + in[ 8 + i];
-    const int a2 = in[4 + i] - in[ 8 + i];
-    const int a3 = in[0 + i] - in[12 + i];
-    tmp[0  + i] = a0 + a1;
-    tmp[8  + i] = a0 - a1;
-    tmp[4  + i] = a3 + a2;
-    tmp[12 + i] = a3 - a2;
-  }
-  for (i = 0; i < 4; ++i) {
-    const int dc = tmp[0 + i * 4] + 3;    // w/ rounder
-    const int a0 = dc             + tmp[3 + i * 4];
-    const int a1 = tmp[1 + i * 4] + tmp[2 + i * 4];
-    const int a2 = tmp[1 + i * 4] - tmp[2 + i * 4];
-    const int a3 = dc             - tmp[3 + i * 4];
-    out[ 0] = (a0 + a1) >> 3;
-    out[16] = (a3 + a2) >> 3;
-    out[32] = (a0 - a1) >> 3;
-    out[48] = (a3 - a2) >> 3;
-    out += 64;
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-void (*VP8TransformWHT)(const int16_t* in, int16_t* out);
-
-//------------------------------------------------------------------------------
-// Intra predictions
-
-#define DST(x, y) dst[(x) + (y) * BPS]
-
-#if !WEBP_NEON_OMIT_C_CODE
-static WEBP_INLINE void TrueMotion(uint8_t* dst, int size) {
-  const uint8_t* top = dst - BPS;
-  const uint8_t* const clip0 = VP8kclip1 - top[-1];
-  int y;
-  for (y = 0; y < size; ++y) {
-    const uint8_t* const clip = clip0 + dst[-1];
-    int x;
-    for (x = 0; x < size; ++x) {
-      dst[x] = clip[top[x]];
-    }
-    dst += BPS;
-  }
-}
-static void TM4_C(uint8_t* dst)   { TrueMotion(dst, 4); }
-static void TM8uv_C(uint8_t* dst) { TrueMotion(dst, 8); }
-static void TM16_C(uint8_t* dst)  { TrueMotion(dst, 16); }
-
-//------------------------------------------------------------------------------
-// 16x16
-
-static void VE16_C(uint8_t* dst) {     // vertical
-  int j;
-  for (j = 0; j < 16; ++j) {
-    memcpy(dst + j * BPS, dst - BPS, 16);
-  }
-}
-
-static void HE16_C(uint8_t* dst) {     // horizontal
-  int j;
-  for (j = 16; j > 0; --j) {
-    memset(dst, dst[-1], 16);
-    dst += BPS;
-  }
-}
-
-static WEBP_INLINE void Put16(int v, uint8_t* dst) {
-  int j;
-  for (j = 0; j < 16; ++j) {
-    memset(dst + j * BPS, v, 16);
-  }
-}
-
-static void DC16_C(uint8_t* dst) {    // DC
-  int DC = 16;
-  int j;
-  for (j = 0; j < 16; ++j) {
-    DC += dst[-1 + j * BPS] + dst[j - BPS];
-  }
-  Put16(DC >> 5, dst);
-}
-
-static void DC16NoTop_C(uint8_t* dst) {   // DC with top samples not available
-  int DC = 8;
-  int j;
-  for (j = 0; j < 16; ++j) {
-    DC += dst[-1 + j * BPS];
-  }
-  Put16(DC >> 4, dst);
-}
-
-static void DC16NoLeft_C(uint8_t* dst) {  // DC with left samples not available
-  int DC = 8;
-  int i;
-  for (i = 0; i < 16; ++i) {
-    DC += dst[i - BPS];
-  }
-  Put16(DC >> 4, dst);
-}
-
-static void DC16NoTopLeft_C(uint8_t* dst) {  // DC with no top and left samples
-  Put16(0x80, dst);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-VP8PredFunc VP8PredLuma16[NUM_B_DC_MODES];
-
-//------------------------------------------------------------------------------
-// 4x4
-
-#define AVG3(a, b, c) ((uint8_t)(((a) + 2 * (b) + (c) + 2) >> 2))
-#define AVG2(a, b) (((a) + (b) + 1) >> 1)
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void VE4_C(uint8_t* dst) {    // vertical
-  const uint8_t* top = dst - BPS;
-  const uint8_t vals[4] = {
-    AVG3(top[-1], top[0], top[1]),
-    AVG3(top[ 0], top[1], top[2]),
-    AVG3(top[ 1], top[2], top[3]),
-    AVG3(top[ 2], top[3], top[4])
-  };
-  int i;
-  for (i = 0; i < 4; ++i) {
-    memcpy(dst + i * BPS, vals, sizeof(vals));
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-static void HE4_C(uint8_t* dst) {    // horizontal
-  const int A = dst[-1 - BPS];
-  const int B = dst[-1];
-  const int C = dst[-1 + BPS];
-  const int D = dst[-1 + 2 * BPS];
-  const int E = dst[-1 + 3 * BPS];
-  WebPUint32ToMem(dst + 0 * BPS, 0x01010101U * AVG3(A, B, C));
-  WebPUint32ToMem(dst + 1 * BPS, 0x01010101U * AVG3(B, C, D));
-  WebPUint32ToMem(dst + 2 * BPS, 0x01010101U * AVG3(C, D, E));
-  WebPUint32ToMem(dst + 3 * BPS, 0x01010101U * AVG3(D, E, E));
-}
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void DC4_C(uint8_t* dst) {   // DC
-  uint32_t dc = 4;
-  int i;
-  for (i = 0; i < 4; ++i) dc += dst[i - BPS] + dst[-1 + i * BPS];
-  dc >>= 3;
-  for (i = 0; i < 4; ++i) memset(dst + i * BPS, dc, 4);
-}
-
-static void RD4_C(uint8_t* dst) {   // Down-right
-  const int I = dst[-1 + 0 * BPS];
-  const int J = dst[-1 + 1 * BPS];
-  const int K = dst[-1 + 2 * BPS];
-  const int L = dst[-1 + 3 * BPS];
-  const int X = dst[-1 - BPS];
-  const int A = dst[0 - BPS];
-  const int B = dst[1 - BPS];
-  const int C = dst[2 - BPS];
-  const int D = dst[3 - BPS];
-  DST(0, 3)                                     = AVG3(J, K, L);
-  DST(1, 3) = DST(0, 2)                         = AVG3(I, J, K);
-  DST(2, 3) = DST(1, 2) = DST(0, 1)             = AVG3(X, I, J);
-  DST(3, 3) = DST(2, 2) = DST(1, 1) = DST(0, 0) = AVG3(A, X, I);
-              DST(3, 2) = DST(2, 1) = DST(1, 0) = AVG3(B, A, X);
-                          DST(3, 1) = DST(2, 0) = AVG3(C, B, A);
-                                      DST(3, 0) = AVG3(D, C, B);
-}
-
-static void LD4_C(uint8_t* dst) {   // Down-Left
-  const int A = dst[0 - BPS];
-  const int B = dst[1 - BPS];
-  const int C = dst[2 - BPS];
-  const int D = dst[3 - BPS];
-  const int E = dst[4 - BPS];
-  const int F = dst[5 - BPS];
-  const int G = dst[6 - BPS];
-  const int H = dst[7 - BPS];
-  DST(0, 0)                                     = AVG3(A, B, C);
-  DST(1, 0) = DST(0, 1)                         = AVG3(B, C, D);
-  DST(2, 0) = DST(1, 1) = DST(0, 2)             = AVG3(C, D, E);
-  DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F);
-              DST(3, 1) = DST(2, 2) = DST(1, 3) = AVG3(E, F, G);
-                          DST(3, 2) = DST(2, 3) = AVG3(F, G, H);
-                                      DST(3, 3) = AVG3(G, H, H);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-static void VR4_C(uint8_t* dst) {   // Vertical-Right
-  const int I = dst[-1 + 0 * BPS];
-  const int J = dst[-1 + 1 * BPS];
-  const int K = dst[-1 + 2 * BPS];
-  const int X = dst[-1 - BPS];
-  const int A = dst[0 - BPS];
-  const int B = dst[1 - BPS];
-  const int C = dst[2 - BPS];
-  const int D = dst[3 - BPS];
-  DST(0, 0) = DST(1, 2) = AVG2(X, A);
-  DST(1, 0) = DST(2, 2) = AVG2(A, B);
-  DST(2, 0) = DST(3, 2) = AVG2(B, C);
-  DST(3, 0)             = AVG2(C, D);
-
-  DST(0, 3) =             AVG3(K, J, I);
-  DST(0, 2) =             AVG3(J, I, X);
-  DST(0, 1) = DST(1, 3) = AVG3(I, X, A);
-  DST(1, 1) = DST(2, 3) = AVG3(X, A, B);
-  DST(2, 1) = DST(3, 3) = AVG3(A, B, C);
-  DST(3, 1) =             AVG3(B, C, D);
-}
-
-static void VL4_C(uint8_t* dst) {   // Vertical-Left
-  const int A = dst[0 - BPS];
-  const int B = dst[1 - BPS];
-  const int C = dst[2 - BPS];
-  const int D = dst[3 - BPS];
-  const int E = dst[4 - BPS];
-  const int F = dst[5 - BPS];
-  const int G = dst[6 - BPS];
-  const int H = dst[7 - BPS];
-  DST(0, 0) =             AVG2(A, B);
-  DST(1, 0) = DST(0, 2) = AVG2(B, C);
-  DST(2, 0) = DST(1, 2) = AVG2(C, D);
-  DST(3, 0) = DST(2, 2) = AVG2(D, E);
-
-  DST(0, 1) =             AVG3(A, B, C);
-  DST(1, 1) = DST(0, 3) = AVG3(B, C, D);
-  DST(2, 1) = DST(1, 3) = AVG3(C, D, E);
-  DST(3, 1) = DST(2, 3) = AVG3(D, E, F);
-              DST(3, 2) = AVG3(E, F, G);
-              DST(3, 3) = AVG3(F, G, H);
-}
-
-static void HU4_C(uint8_t* dst) {   // Horizontal-Up
-  const int I = dst[-1 + 0 * BPS];
-  const int J = dst[-1 + 1 * BPS];
-  const int K = dst[-1 + 2 * BPS];
-  const int L = dst[-1 + 3 * BPS];
-  DST(0, 0) =             AVG2(I, J);
-  DST(2, 0) = DST(0, 1) = AVG2(J, K);
-  DST(2, 1) = DST(0, 2) = AVG2(K, L);
-  DST(1, 0) =             AVG3(I, J, K);
-  DST(3, 0) = DST(1, 1) = AVG3(J, K, L);
-  DST(3, 1) = DST(1, 2) = AVG3(K, L, L);
-  DST(3, 2) = DST(2, 2) =
-    DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L;
-}
-
-static void HD4_C(uint8_t* dst) {  // Horizontal-Down
-  const int I = dst[-1 + 0 * BPS];
-  const int J = dst[-1 + 1 * BPS];
-  const int K = dst[-1 + 2 * BPS];
-  const int L = dst[-1 + 3 * BPS];
-  const int X = dst[-1 - BPS];
-  const int A = dst[0 - BPS];
-  const int B = dst[1 - BPS];
-  const int C = dst[2 - BPS];
-
-  DST(0, 0) = DST(2, 1) = AVG2(I, X);
-  DST(0, 1) = DST(2, 2) = AVG2(J, I);
-  DST(0, 2) = DST(2, 3) = AVG2(K, J);
-  DST(0, 3)             = AVG2(L, K);
-
-  DST(3, 0)             = AVG3(A, B, C);
-  DST(2, 0)             = AVG3(X, A, B);
-  DST(1, 0) = DST(3, 1) = AVG3(I, X, A);
-  DST(1, 1) = DST(3, 2) = AVG3(J, I, X);
-  DST(1, 2) = DST(3, 3) = AVG3(K, J, I);
-  DST(1, 3)             = AVG3(L, K, J);
-}
-
-#undef DST
-#undef AVG3
-#undef AVG2
-
-VP8PredFunc VP8PredLuma4[NUM_BMODES];
-
-//------------------------------------------------------------------------------
-// Chroma
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void VE8uv_C(uint8_t* dst) {    // vertical
-  int j;
-  for (j = 0; j < 8; ++j) {
-    memcpy(dst + j * BPS, dst - BPS, 8);
-  }
-}
-
-static void HE8uv_C(uint8_t* dst) {    // horizontal
-  int j;
-  for (j = 0; j < 8; ++j) {
-    memset(dst, dst[-1], 8);
-    dst += BPS;
-  }
-}
-
-// helper for chroma-DC predictions
-static WEBP_INLINE void Put8x8uv(uint8_t value, uint8_t* dst) {
-  int j;
-  for (j = 0; j < 8; ++j) {
-    memset(dst + j * BPS, value, 8);
-  }
-}
-
-static void DC8uv_C(uint8_t* dst) {     // DC
-  int dc0 = 8;
-  int i;
-  for (i = 0; i < 8; ++i) {
-    dc0 += dst[i - BPS] + dst[-1 + i * BPS];
-  }
-  Put8x8uv(dc0 >> 4, dst);
-}
-
-static void DC8uvNoLeft_C(uint8_t* dst) {   // DC with no left samples
-  int dc0 = 4;
-  int i;
-  for (i = 0; i < 8; ++i) {
-    dc0 += dst[i - BPS];
-  }
-  Put8x8uv(dc0 >> 3, dst);
-}
-
-static void DC8uvNoTop_C(uint8_t* dst) {  // DC with no top samples
-  int dc0 = 4;
-  int i;
-  for (i = 0; i < 8; ++i) {
-    dc0 += dst[-1 + i * BPS];
-  }
-  Put8x8uv(dc0 >> 3, dst);
-}
-
-static void DC8uvNoTopLeft_C(uint8_t* dst) {    // DC with nothing
-  Put8x8uv(0x80, dst);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-VP8PredFunc VP8PredChroma8[NUM_B_DC_MODES];
-
-//------------------------------------------------------------------------------
-// Edge filtering functions
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-// 4 pixels in, 2 pixels out
-static WEBP_INLINE void DoFilter2_C(uint8_t* p, int step) {
-  const int p1 = p[-2*step], p0 = p[-step], q0 = p[0], q1 = p[step];
-  const int a = 3 * (q0 - p0) + VP8ksclip1[p1 - q1];  // in [-893,892]
-  const int a1 = VP8ksclip2[(a + 4) >> 3];            // in [-16,15]
-  const int a2 = VP8ksclip2[(a + 3) >> 3];
-  p[-step] = VP8kclip1[p0 + a2];
-  p[    0] = VP8kclip1[q0 - a1];
-}
-
-// 4 pixels in, 4 pixels out
-static WEBP_INLINE void DoFilter4_C(uint8_t* p, int step) {
-  const int p1 = p[-2*step], p0 = p[-step], q0 = p[0], q1 = p[step];
-  const int a = 3 * (q0 - p0);
-  const int a1 = VP8ksclip2[(a + 4) >> 3];
-  const int a2 = VP8ksclip2[(a + 3) >> 3];
-  const int a3 = (a1 + 1) >> 1;
-  p[-2*step] = VP8kclip1[p1 + a3];
-  p[-  step] = VP8kclip1[p0 + a2];
-  p[      0] = VP8kclip1[q0 - a1];
-  p[   step] = VP8kclip1[q1 - a3];
-}
-
-// 6 pixels in, 6 pixels out
-static WEBP_INLINE void DoFilter6_C(uint8_t* p, int step) {
-  const int p2 = p[-3*step], p1 = p[-2*step], p0 = p[-step];
-  const int q0 = p[0], q1 = p[step], q2 = p[2*step];
-  const int a = VP8ksclip1[3 * (q0 - p0) + VP8ksclip1[p1 - q1]];
-  // a is in [-128,127], a1 in [-27,27], a2 in [-18,18] and a3 in [-9,9]
-  const int a1 = (27 * a + 63) >> 7;  // eq. to ((3 * a + 7) * 9) >> 7
-  const int a2 = (18 * a + 63) >> 7;  // eq. to ((2 * a + 7) * 9) >> 7
-  const int a3 = (9  * a + 63) >> 7;  // eq. to ((1 * a + 7) * 9) >> 7
-  p[-3*step] = VP8kclip1[p2 + a3];
-  p[-2*step] = VP8kclip1[p1 + a2];
-  p[-  step] = VP8kclip1[p0 + a1];
-  p[      0] = VP8kclip1[q0 - a1];
-  p[   step] = VP8kclip1[q1 - a2];
-  p[ 2*step] = VP8kclip1[q2 - a3];
-}
-
-static WEBP_INLINE int Hev(const uint8_t* p, int step, int thresh) {
-  const int p1 = p[-2*step], p0 = p[-step], q0 = p[0], q1 = p[step];
-  return (VP8kabs0[p1 - p0] > thresh) || (VP8kabs0[q1 - q0] > thresh);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-
-#if !WEBP_NEON_OMIT_C_CODE
-static WEBP_INLINE int NeedsFilter_C(const uint8_t* p, int step, int t) {
-  const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step];
-  return ((4 * VP8kabs0[p0 - q0] + VP8kabs0[p1 - q1]) <= t);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-static WEBP_INLINE int NeedsFilter2_C(const uint8_t* p,
-                                      int step, int t, int it) {
-  const int p3 = p[-4 * step], p2 = p[-3 * step], p1 = p[-2 * step];
-  const int p0 = p[-step], q0 = p[0];
-  const int q1 = p[step], q2 = p[2 * step], q3 = p[3 * step];
-  if ((4 * VP8kabs0[p0 - q0] + VP8kabs0[p1 - q1]) > t) return 0;
-  return VP8kabs0[p3 - p2] <= it && VP8kabs0[p2 - p1] <= it &&
-         VP8kabs0[p1 - p0] <= it && VP8kabs0[q3 - q2] <= it &&
-         VP8kabs0[q2 - q1] <= it && VP8kabs0[q1 - q0] <= it;
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-
-//------------------------------------------------------------------------------
-// Simple In-loop filtering (Paragraph 15.2)
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void SimpleVFilter16_C(uint8_t* p, int stride, int thresh) {
-  int i;
-  const int thresh2 = 2 * thresh + 1;
-  for (i = 0; i < 16; ++i) {
-    if (NeedsFilter_C(p + i, stride, thresh2)) {
-      DoFilter2_C(p + i, stride);
-    }
-  }
-}
-
-static void SimpleHFilter16_C(uint8_t* p, int stride, int thresh) {
-  int i;
-  const int thresh2 = 2 * thresh + 1;
-  for (i = 0; i < 16; ++i) {
-    if (NeedsFilter_C(p + i * stride, 1, thresh2)) {
-      DoFilter2_C(p + i * stride, 1);
-    }
-  }
-}
-
-static void SimpleVFilter16i_C(uint8_t* p, int stride, int thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4 * stride;
-    SimpleVFilter16_C(p, stride, thresh);
-  }
-}
-
-static void SimpleHFilter16i_C(uint8_t* p, int stride, int thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4;
-    SimpleHFilter16_C(p, stride, thresh);
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-//------------------------------------------------------------------------------
-// Complex In-loop filtering (Paragraph 15.3)
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-static WEBP_INLINE void FilterLoop26_C(uint8_t* p,
-                                       int hstride, int vstride, int size,
-                                       int thresh, int ithresh,
-                                       int hev_thresh) {
-  const int thresh2 = 2 * thresh + 1;
-  while (size-- > 0) {
-    if (NeedsFilter2_C(p, hstride, thresh2, ithresh)) {
-      if (Hev(p, hstride, hev_thresh)) {
-        DoFilter2_C(p, hstride);
-      } else {
-        DoFilter6_C(p, hstride);
-      }
-    }
-    p += vstride;
-  }
-}
-
-static WEBP_INLINE void FilterLoop24_C(uint8_t* p,
-                                       int hstride, int vstride, int size,
-                                       int thresh, int ithresh,
-                                       int hev_thresh) {
-  const int thresh2 = 2 * thresh + 1;
-  while (size-- > 0) {
-    if (NeedsFilter2_C(p, hstride, thresh2, ithresh)) {
-      if (Hev(p, hstride, hev_thresh)) {
-        DoFilter2_C(p, hstride);
-      } else {
-        DoFilter4_C(p, hstride);
-      }
-    }
-    p += vstride;
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-
-#if !WEBP_NEON_OMIT_C_CODE
-// on macroblock edges
-static void VFilter16_C(uint8_t* p, int stride,
-                        int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26_C(p, stride, 1, 16, thresh, ithresh, hev_thresh);
-}
-
-static void HFilter16_C(uint8_t* p, int stride,
-                        int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26_C(p, 1, stride, 16, thresh, ithresh, hev_thresh);
-}
-
-// on three inner edges
-static void VFilter16i_C(uint8_t* p, int stride,
-                         int thresh, int ithresh, int hev_thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4 * stride;
-    FilterLoop24_C(p, stride, 1, 16, thresh, ithresh, hev_thresh);
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-static void HFilter16i_C(uint8_t* p, int stride,
-                         int thresh, int ithresh, int hev_thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4;
-    FilterLoop24_C(p, 1, stride, 16, thresh, ithresh, hev_thresh);
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-
-#if !WEBP_NEON_OMIT_C_CODE
-// 8-pixels wide variant, for chroma filtering
-static void VFilter8_C(uint8_t* u, uint8_t* v, int stride,
-                       int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26_C(u, stride, 1, 8, thresh, ithresh, hev_thresh);
-  FilterLoop26_C(v, stride, 1, 8, thresh, ithresh, hev_thresh);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-static void HFilter8_C(uint8_t* u, uint8_t* v, int stride,
-                       int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26_C(u, 1, stride, 8, thresh, ithresh, hev_thresh);
-  FilterLoop26_C(v, 1, stride, 8, thresh, ithresh, hev_thresh);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void VFilter8i_C(uint8_t* u, uint8_t* v, int stride,
-                        int thresh, int ithresh, int hev_thresh) {
-  FilterLoop24_C(u + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh);
-  FilterLoop24_C(v + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-static void HFilter8i_C(uint8_t* u, uint8_t* v, int stride,
-                        int thresh, int ithresh, int hev_thresh) {
-  FilterLoop24_C(u + 4, 1, stride, 8, thresh, ithresh, hev_thresh);
-  FilterLoop24_C(v + 4, 1, stride, 8, thresh, ithresh, hev_thresh);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-
-//------------------------------------------------------------------------------
-
-static void DitherCombine8x8_C(const uint8_t* dither, uint8_t* dst,
-                               int dst_stride) {
-  int i, j;
-  for (j = 0; j < 8; ++j) {
-    for (i = 0; i < 8; ++i) {
-      const int delta0 = dither[i] - VP8_DITHER_AMP_CENTER;
-      const int delta1 =
-          (delta0 + VP8_DITHER_DESCALE_ROUNDER) >> VP8_DITHER_DESCALE;
-      dst[i] = clip_8b((int)dst[i] + delta1);
-    }
-    dst += dst_stride;
-    dither += 8;
-  }
-}
-
-//------------------------------------------------------------------------------
-
-VP8DecIdct2 VP8Transform;
-VP8DecIdct VP8TransformAC3;
-VP8DecIdct VP8TransformUV;
-VP8DecIdct VP8TransformDC;
-VP8DecIdct VP8TransformDCUV;
-
-VP8LumaFilterFunc VP8VFilter16;
-VP8LumaFilterFunc VP8HFilter16;
-VP8ChromaFilterFunc VP8VFilter8;
-VP8ChromaFilterFunc VP8HFilter8;
-VP8LumaFilterFunc VP8VFilter16i;
-VP8LumaFilterFunc VP8HFilter16i;
-VP8ChromaFilterFunc VP8VFilter8i;
-VP8ChromaFilterFunc VP8HFilter8i;
-VP8SimpleFilterFunc VP8SimpleVFilter16;
-VP8SimpleFilterFunc VP8SimpleHFilter16;
-VP8SimpleFilterFunc VP8SimpleVFilter16i;
-VP8SimpleFilterFunc VP8SimpleHFilter16i;
-
-void (*VP8DitherCombine8x8)(const uint8_t* dither, uint8_t* dst,
-                            int dst_stride);
-
-extern void VP8DspInitSSE2(void);
-extern void VP8DspInitSSE41(void);
-extern void VP8DspInitNEON(void);
-extern void VP8DspInitMIPS32(void);
-extern void VP8DspInitMIPSdspR2(void);
-extern void VP8DspInitMSA(void);
-
-WEBP_DSP_INIT_FUNC(VP8DspInit) {
-  VP8InitClipTables();
-
-#if !WEBP_NEON_OMIT_C_CODE
-  VP8TransformWHT = TransformWHT_C;
-  VP8Transform = TransformTwo_C;
-  VP8TransformDC = TransformDC_C;
-  VP8TransformAC3 = TransformAC3_C;
-#endif
-  VP8TransformUV = TransformUV_C;
-  VP8TransformDCUV = TransformDCUV_C;
-
-#if !WEBP_NEON_OMIT_C_CODE
-  VP8VFilter16 = VFilter16_C;
-  VP8VFilter16i = VFilter16i_C;
-  VP8HFilter16 = HFilter16_C;
-  VP8VFilter8 = VFilter8_C;
-  VP8VFilter8i = VFilter8i_C;
-  VP8SimpleVFilter16 = SimpleVFilter16_C;
-  VP8SimpleHFilter16 = SimpleHFilter16_C;
-  VP8SimpleVFilter16i = SimpleVFilter16i_C;
-  VP8SimpleHFilter16i = SimpleHFilter16i_C;
-#endif
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-  VP8HFilter16i = HFilter16i_C;
-  VP8HFilter8 = HFilter8_C;
-  VP8HFilter8i = HFilter8i_C;
-#endif
-
-#if !WEBP_NEON_OMIT_C_CODE
-  VP8PredLuma4[0] = DC4_C;
-  VP8PredLuma4[1] = TM4_C;
-  VP8PredLuma4[2] = VE4_C;
-  VP8PredLuma4[4] = RD4_C;
-  VP8PredLuma4[6] = LD4_C;
-#endif
-
-  VP8PredLuma4[3] = HE4_C;
-  VP8PredLuma4[5] = VR4_C;
-  VP8PredLuma4[7] = VL4_C;
-  VP8PredLuma4[8] = HD4_C;
-  VP8PredLuma4[9] = HU4_C;
-
-#if !WEBP_NEON_OMIT_C_CODE
-  VP8PredLuma16[0] = DC16_C;
-  VP8PredLuma16[1] = TM16_C;
-  VP8PredLuma16[2] = VE16_C;
-  VP8PredLuma16[3] = HE16_C;
-  VP8PredLuma16[4] = DC16NoTop_C;
-  VP8PredLuma16[5] = DC16NoLeft_C;
-  VP8PredLuma16[6] = DC16NoTopLeft_C;
-
-  VP8PredChroma8[0] = DC8uv_C;
-  VP8PredChroma8[1] = TM8uv_C;
-  VP8PredChroma8[2] = VE8uv_C;
-  VP8PredChroma8[3] = HE8uv_C;
-  VP8PredChroma8[4] = DC8uvNoTop_C;
-  VP8PredChroma8[5] = DC8uvNoLeft_C;
-  VP8PredChroma8[6] = DC8uvNoTopLeft_C;
-#endif
-
-  VP8DitherCombine8x8 = DitherCombine8x8_C;
-
-  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      VP8DspInitSSE2();
-#if defined(WEBP_USE_SSE41)
-      if (VP8GetCPUInfo(kSSE4_1)) {
-        VP8DspInitSSE41();
-      }
-#endif
-    }
-#endif
-#if defined(WEBP_USE_MIPS32)
-    if (VP8GetCPUInfo(kMIPS32)) {
-      VP8DspInitMIPS32();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      VP8DspInitMIPSdspR2();
-    }
-#endif
-#if defined(WEBP_USE_MSA)
-    if (VP8GetCPUInfo(kMSA)) {
-      VP8DspInitMSA();
-    }
-#endif
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    VP8DspInitNEON();
-  }
-#endif
-
-  assert(VP8TransformWHT != NULL);
-  assert(VP8Transform != NULL);
-  assert(VP8TransformDC != NULL);
-  assert(VP8TransformAC3 != NULL);
-  assert(VP8TransformUV != NULL);
-  assert(VP8TransformDCUV != NULL);
-  assert(VP8VFilter16 != NULL);
-  assert(VP8HFilter16 != NULL);
-  assert(VP8VFilter8 != NULL);
-  assert(VP8HFilter8 != NULL);
-  assert(VP8VFilter16i != NULL);
-  assert(VP8HFilter16i != NULL);
-  assert(VP8VFilter8i != NULL);
-  assert(VP8HFilter8i != NULL);
-  assert(VP8SimpleVFilter16 != NULL);
-  assert(VP8SimpleHFilter16 != NULL);
-  assert(VP8SimpleVFilter16i != NULL);
-  assert(VP8SimpleHFilter16i != NULL);
-  assert(VP8PredLuma4[0] != NULL);
-  assert(VP8PredLuma4[1] != NULL);
-  assert(VP8PredLuma4[2] != NULL);
-  assert(VP8PredLuma4[3] != NULL);
-  assert(VP8PredLuma4[4] != NULL);
-  assert(VP8PredLuma4[5] != NULL);
-  assert(VP8PredLuma4[6] != NULL);
-  assert(VP8PredLuma4[7] != NULL);
-  assert(VP8PredLuma4[8] != NULL);
-  assert(VP8PredLuma4[9] != NULL);
-  assert(VP8PredLuma16[0] != NULL);
-  assert(VP8PredLuma16[1] != NULL);
-  assert(VP8PredLuma16[2] != NULL);
-  assert(VP8PredLuma16[3] != NULL);
-  assert(VP8PredLuma16[4] != NULL);
-  assert(VP8PredLuma16[5] != NULL);
-  assert(VP8PredLuma16[6] != NULL);
-  assert(VP8PredChroma8[0] != NULL);
-  assert(VP8PredChroma8[1] != NULL);
-  assert(VP8PredChroma8[2] != NULL);
-  assert(VP8PredChroma8[3] != NULL);
-  assert(VP8PredChroma8[4] != NULL);
-  assert(VP8PredChroma8[5] != NULL);
-  assert(VP8PredChroma8[6] != NULL);
-  assert(VP8DitherCombine8x8 != NULL);
-}
diff --git a/ios/Pods/libwebp/src/dsp/dec_clip_tables.c b/ios/Pods/libwebp/src/dsp/dec_clip_tables.c
deleted file mode 100644
index 427b74f..0000000
--- a/ios/Pods/libwebp/src/dsp/dec_clip_tables.c
+++ /dev/null
@@ -1,369 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Clipping tables for filtering
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-// define to 0 to have run-time table initialization
-#if !defined(USE_STATIC_TABLES)
-#define USE_STATIC_TABLES 1   // ALTERNATE_CODE
-#endif
-
-#if (USE_STATIC_TABLES == 1)
-
-static const uint8_t abs0[255 + 255 + 1] = {
-  0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4,
-  0xf3, 0xf2, 0xf1, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe8,
-  0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xdf, 0xde, 0xdd, 0xdc,
-  0xdb, 0xda, 0xd9, 0xd8, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0,
-  0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc8, 0xc7, 0xc6, 0xc5, 0xc4,
-  0xc3, 0xc2, 0xc1, 0xc0, 0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8,
-  0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, 0xaf, 0xae, 0xad, 0xac,
-  0xab, 0xaa, 0xa9, 0xa8, 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0,
-  0x9f, 0x9e, 0x9d, 0x9c, 0x9b, 0x9a, 0x99, 0x98, 0x97, 0x96, 0x95, 0x94,
-  0x93, 0x92, 0x91, 0x90, 0x8f, 0x8e, 0x8d, 0x8c, 0x8b, 0x8a, 0x89, 0x88,
-  0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, 0x7f, 0x7e, 0x7d, 0x7c,
-  0x7b, 0x7a, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70,
-  0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64,
-  0x63, 0x62, 0x61, 0x60, 0x5f, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x58,
-  0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x4f, 0x4e, 0x4d, 0x4c,
-  0x4b, 0x4a, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40,
-  0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34,
-  0x33, 0x32, 0x31, 0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28,
-  0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1f, 0x1e, 0x1d, 0x1c,
-  0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
-  0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04,
-  0x03, 0x02, 0x01, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
-  0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
-  0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
-  0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c,
-  0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
-  0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44,
-  0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
-  0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c,
-  0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-  0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74,
-  0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
-  0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c,
-  0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
-  0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4,
-  0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
-  0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc,
-  0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
-  0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
-  0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec,
-  0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-  0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
-};
-
-static const uint8_t sclip1[1020 + 1020 + 1] = {
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-  0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-  0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93,
-  0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
-  0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab,
-  0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3,
-  0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
-  0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3,
-  0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
-  0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
-  0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
-  0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
-  0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
-  0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
-  0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53,
-  0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
-  0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
-  0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
-  0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
-  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f
-};
-
-static const uint8_t sclip2[112 + 112 + 1] = {
-  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
-  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
-  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
-  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
-  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
-  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
-  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
-  0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb,
-  0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
-  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
-  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
-  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
-  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
-  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
-  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
-  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
-  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f
-};
-
-static const uint8_t clip1[255 + 511 + 1] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
-  0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
-  0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
-  0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c,
-  0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
-  0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44,
-  0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
-  0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c,
-  0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-  0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74,
-  0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
-  0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c,
-  0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
-  0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4,
-  0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
-  0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc,
-  0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
-  0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
-  0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec,
-  0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-  0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-};
-
-#else
-
-// uninitialized tables
-static uint8_t abs0[255 + 255 + 1];
-static int8_t sclip1[1020 + 1020 + 1];
-static int8_t sclip2[112 + 112 + 1];
-static uint8_t clip1[255 + 511 + 1];
-
-// We declare this variable 'volatile' to prevent instruction reordering
-// and make sure it's set to true _last_ (so as to be thread-safe)
-static volatile int tables_ok = 0;
-
-#endif    // USE_STATIC_TABLES
-
-const int8_t* const VP8ksclip1 = (const int8_t*)&sclip1[1020];
-const int8_t* const VP8ksclip2 = (const int8_t*)&sclip2[112];
-const uint8_t* const VP8kclip1 = &clip1[255];
-const uint8_t* const VP8kabs0 = &abs0[255];
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8InitClipTables(void) {
-#if (USE_STATIC_TABLES == 0)
-  int i;
-  if (!tables_ok) {
-    for (i = -255; i <= 255; ++i) {
-      abs0[255 + i] = (i < 0) ? -i : i;
-    }
-    for (i = -1020; i <= 1020; ++i) {
-      sclip1[1020 + i] = (i < -128) ? -128 : (i > 127) ? 127 : i;
-    }
-    for (i = -112; i <= 112; ++i) {
-      sclip2[112 + i] = (i < -16) ? -16 : (i > 15) ? 15 : i;
-    }
-    for (i = -255; i <= 255 + 255; ++i) {
-      clip1[255 + i] = (i < 0) ? 0 : (i > 255) ? 255 : i;
-    }
-    tables_ok = 1;
-  }
-#endif    // USE_STATIC_TABLES
-}
diff --git a/ios/Pods/libwebp/src/dsp/dec_mips32.c b/ios/Pods/libwebp/src/dsp/dec_mips32.c
deleted file mode 100644
index e4e7096..0000000
--- a/ios/Pods/libwebp/src/dsp/dec_mips32.c
+++ /dev/null
@@ -1,587 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS version of dsp functions
-//
-// Author(s):  Djordje Pesut    (djordje.pesut@imgtec.com)
-//             Jovan Zelincevic (jovan.zelincevic@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS32)
-
-#include "src/dsp/mips_macro.h"
-
-static const int kC1 = 20091 + (1 << 16);
-static const int kC2 = 35468;
-
-static WEBP_INLINE int abs_mips32(int x) {
-  const int sign = x >> 31;
-  return (x ^ sign) - sign;
-}
-
-// 4 pixels in, 2 pixels out
-static WEBP_INLINE void do_filter2(uint8_t* p, int step) {
-  const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step];
-  const int a = 3 * (q0 - p0) + VP8ksclip1[p1 - q1];
-  const int a1 = VP8ksclip2[(a + 4) >> 3];
-  const int a2 = VP8ksclip2[(a + 3) >> 3];
-  p[-step] = VP8kclip1[p0 + a2];
-  p[    0] = VP8kclip1[q0 - a1];
-}
-
-// 4 pixels in, 4 pixels out
-static WEBP_INLINE void do_filter4(uint8_t* p, int step) {
-  const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step];
-  const int a = 3 * (q0 - p0);
-  const int a1 = VP8ksclip2[(a + 4) >> 3];
-  const int a2 = VP8ksclip2[(a + 3) >> 3];
-  const int a3 = (a1 + 1) >> 1;
-  p[-2 * step] = VP8kclip1[p1 + a3];
-  p[-    step] = VP8kclip1[p0 + a2];
-  p[        0] = VP8kclip1[q0 - a1];
-  p[     step] = VP8kclip1[q1 - a3];
-}
-
-// 6 pixels in, 6 pixels out
-static WEBP_INLINE void do_filter6(uint8_t* p, int step) {
-  const int p2 = p[-3 * step], p1 = p[-2 * step], p0 = p[-step];
-  const int q0 = p[0], q1 = p[step], q2 = p[2 * step];
-  const int a = VP8ksclip1[3 * (q0 - p0) + VP8ksclip1[p1 - q1]];
-  // a is in [-128,127], a1 in [-27,27], a2 in [-18,18] and a3 in [-9,9]
-  const int a1 = (27 * a + 63) >> 7;  // eq. to ((3 * a + 7) * 9) >> 7
-  const int a2 = (18 * a + 63) >> 7;  // eq. to ((2 * a + 7) * 9) >> 7
-  const int a3 = (9  * a + 63) >> 7;  // eq. to ((1 * a + 7) * 9) >> 7
-  p[-3 * step] = VP8kclip1[p2 + a3];
-  p[-2 * step] = VP8kclip1[p1 + a2];
-  p[-    step] = VP8kclip1[p0 + a1];
-  p[        0] = VP8kclip1[q0 - a1];
-  p[     step] = VP8kclip1[q1 - a2];
-  p[ 2 * step] = VP8kclip1[q2 - a3];
-}
-
-static WEBP_INLINE int hev(const uint8_t* p, int step, int thresh) {
-  const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step];
-  return (abs_mips32(p1 - p0) > thresh) || (abs_mips32(q1 - q0) > thresh);
-}
-
-static WEBP_INLINE int needs_filter(const uint8_t* p, int step, int t) {
-  const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step];
-  return ((4 * abs_mips32(p0 - q0) + abs_mips32(p1 - q1)) <= t);
-}
-
-static WEBP_INLINE int needs_filter2(const uint8_t* p,
-                                     int step, int t, int it) {
-  const int p3 = p[-4 * step], p2 = p[-3 * step];
-  const int p1 = p[-2 * step], p0 = p[-step];
-  const int q0 = p[0], q1 = p[step], q2 = p[2 * step], q3 = p[3 * step];
-  if ((4 * abs_mips32(p0 - q0) + abs_mips32(p1 - q1)) > t) {
-    return 0;
-  }
-  return abs_mips32(p3 - p2) <= it && abs_mips32(p2 - p1) <= it &&
-         abs_mips32(p1 - p0) <= it && abs_mips32(q3 - q2) <= it &&
-         abs_mips32(q2 - q1) <= it && abs_mips32(q1 - q0) <= it;
-}
-
-static WEBP_INLINE void FilterLoop26(uint8_t* p,
-                                     int hstride, int vstride, int size,
-                                     int thresh, int ithresh, int hev_thresh) {
-  const int thresh2 = 2 * thresh + 1;
-  while (size-- > 0) {
-    if (needs_filter2(p, hstride, thresh2, ithresh)) {
-      if (hev(p, hstride, hev_thresh)) {
-        do_filter2(p, hstride);
-      } else {
-        do_filter6(p, hstride);
-      }
-    }
-    p += vstride;
-  }
-}
-
-static WEBP_INLINE void FilterLoop24(uint8_t* p,
-                                     int hstride, int vstride, int size,
-                                     int thresh, int ithresh, int hev_thresh) {
-  const int thresh2 = 2 * thresh + 1;
-  while (size-- > 0) {
-    if (needs_filter2(p, hstride, thresh2, ithresh)) {
-      if (hev(p, hstride, hev_thresh)) {
-        do_filter2(p, hstride);
-      } else {
-        do_filter4(p, hstride);
-      }
-    }
-    p += vstride;
-  }
-}
-
-// on macroblock edges
-static void VFilter16(uint8_t* p, int stride,
-                      int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26(p, stride, 1, 16, thresh, ithresh, hev_thresh);
-}
-
-static void HFilter16(uint8_t* p, int stride,
-                      int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26(p, 1, stride, 16, thresh, ithresh, hev_thresh);
-}
-
-// 8-pixels wide variant, for chroma filtering
-static void VFilter8(uint8_t* u, uint8_t* v, int stride,
-                     int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26(u, stride, 1, 8, thresh, ithresh, hev_thresh);
-  FilterLoop26(v, stride, 1, 8, thresh, ithresh, hev_thresh);
-}
-
-static void HFilter8(uint8_t* u, uint8_t* v, int stride,
-                     int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26(u, 1, stride, 8, thresh, ithresh, hev_thresh);
-  FilterLoop26(v, 1, stride, 8, thresh, ithresh, hev_thresh);
-}
-
-static void VFilter8i(uint8_t* u, uint8_t* v, int stride,
-                      int thresh, int ithresh, int hev_thresh) {
-  FilterLoop24(u + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh);
-  FilterLoop24(v + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh);
-}
-
-static void HFilter8i(uint8_t* u, uint8_t* v, int stride,
-                      int thresh, int ithresh, int hev_thresh) {
-  FilterLoop24(u + 4, 1, stride, 8, thresh, ithresh, hev_thresh);
-  FilterLoop24(v + 4, 1, stride, 8, thresh, ithresh, hev_thresh);
-}
-
-// on three inner edges
-static void VFilter16i(uint8_t* p, int stride,
-                       int thresh, int ithresh, int hev_thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4 * stride;
-    FilterLoop24(p, stride, 1, 16, thresh, ithresh, hev_thresh);
-  }
-}
-
-static void HFilter16i(uint8_t* p, int stride,
-                       int thresh, int ithresh, int hev_thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4;
-    FilterLoop24(p, 1, stride, 16, thresh, ithresh, hev_thresh);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Simple In-loop filtering (Paragraph 15.2)
-
-static void SimpleVFilter16(uint8_t* p, int stride, int thresh) {
-  int i;
-  const int thresh2 = 2 * thresh + 1;
-  for (i = 0; i < 16; ++i) {
-    if (needs_filter(p + i, stride, thresh2)) {
-      do_filter2(p + i, stride);
-    }
-  }
-}
-
-static void SimpleHFilter16(uint8_t* p, int stride, int thresh) {
-  int i;
-  const int thresh2 = 2 * thresh + 1;
-  for (i = 0; i < 16; ++i) {
-    if (needs_filter(p + i * stride, 1, thresh2)) {
-      do_filter2(p + i * stride, 1);
-    }
-  }
-}
-
-static void SimpleVFilter16i(uint8_t* p, int stride, int thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4 * stride;
-    SimpleVFilter16(p, stride, thresh);
-  }
-}
-
-static void SimpleHFilter16i(uint8_t* p, int stride, int thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4;
-    SimpleHFilter16(p, stride, thresh);
-  }
-}
-
-static void TransformOne(const int16_t* in, uint8_t* dst) {
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8, temp9;
-  int temp10, temp11, temp12, temp13, temp14;
-  int temp15, temp16, temp17, temp18;
-  int16_t* p_in = (int16_t*)in;
-
-  // loops unrolled and merged to avoid usage of tmp buffer
-  // and to reduce number of stalls. MUL macro is written
-  // in assembler and inlined
-  __asm__ volatile(
-    "lh       %[temp0],  0(%[in])                      \n\t"
-    "lh       %[temp8],  16(%[in])                     \n\t"
-    "lh       %[temp4],  8(%[in])                      \n\t"
-    "lh       %[temp12], 24(%[in])                     \n\t"
-    "addu     %[temp16], %[temp0],  %[temp8]           \n\t"
-    "subu     %[temp0],  %[temp0],  %[temp8]           \n\t"
-    "mul      %[temp8],  %[temp4],  %[kC2]             \n\t"
-    "mul      %[temp17], %[temp12], %[kC1]             \n\t"
-    "mul      %[temp4],  %[temp4],  %[kC1]             \n\t"
-    "mul      %[temp12], %[temp12], %[kC2]             \n\t"
-    "lh       %[temp1],  2(%[in])                      \n\t"
-    "lh       %[temp5],  10(%[in])                     \n\t"
-    "lh       %[temp9],  18(%[in])                     \n\t"
-    "lh       %[temp13], 26(%[in])                     \n\t"
-    "sra      %[temp8],  %[temp8],  16                 \n\t"
-    "sra      %[temp17], %[temp17], 16                 \n\t"
-    "sra      %[temp4],  %[temp4],  16                 \n\t"
-    "sra      %[temp12], %[temp12], 16                 \n\t"
-    "lh       %[temp2],  4(%[in])                      \n\t"
-    "lh       %[temp6],  12(%[in])                     \n\t"
-    "lh       %[temp10], 20(%[in])                     \n\t"
-    "lh       %[temp14], 28(%[in])                     \n\t"
-    "subu     %[temp17], %[temp8],  %[temp17]          \n\t"
-    "addu     %[temp4],  %[temp4],  %[temp12]          \n\t"
-    "addu     %[temp8],  %[temp16], %[temp4]           \n\t"
-    "subu     %[temp4],  %[temp16], %[temp4]           \n\t"
-    "addu     %[temp16], %[temp1],  %[temp9]           \n\t"
-    "subu     %[temp1],  %[temp1],  %[temp9]           \n\t"
-    "lh       %[temp3],  6(%[in])                      \n\t"
-    "lh       %[temp7],  14(%[in])                     \n\t"
-    "lh       %[temp11], 22(%[in])                     \n\t"
-    "lh       %[temp15], 30(%[in])                     \n\t"
-    "addu     %[temp12], %[temp0],  %[temp17]          \n\t"
-    "subu     %[temp0],  %[temp0],  %[temp17]          \n\t"
-    "mul      %[temp9],  %[temp5],  %[kC2]             \n\t"
-    "mul      %[temp17], %[temp13], %[kC1]             \n\t"
-    "mul      %[temp5],  %[temp5],  %[kC1]             \n\t"
-    "mul      %[temp13], %[temp13], %[kC2]             \n\t"
-    "sra      %[temp9],  %[temp9],  16                 \n\t"
-    "sra      %[temp17], %[temp17], 16                 \n\t"
-    "subu     %[temp17], %[temp9],  %[temp17]          \n\t"
-    "sra      %[temp5],  %[temp5],  16                 \n\t"
-    "sra      %[temp13], %[temp13], 16                 \n\t"
-    "addu     %[temp5],  %[temp5],  %[temp13]          \n\t"
-    "addu     %[temp13], %[temp1],  %[temp17]          \n\t"
-    "subu     %[temp1],  %[temp1],  %[temp17]          \n\t"
-    "mul      %[temp17], %[temp14], %[kC1]             \n\t"
-    "mul      %[temp14], %[temp14], %[kC2]             \n\t"
-    "addu     %[temp9],  %[temp16], %[temp5]           \n\t"
-    "subu     %[temp5],  %[temp16], %[temp5]           \n\t"
-    "addu     %[temp16], %[temp2],  %[temp10]          \n\t"
-    "subu     %[temp2],  %[temp2],  %[temp10]          \n\t"
-    "mul      %[temp10], %[temp6],  %[kC2]             \n\t"
-    "mul      %[temp6],  %[temp6],  %[kC1]             \n\t"
-    "sra      %[temp17], %[temp17], 16                 \n\t"
-    "sra      %[temp14], %[temp14], 16                 \n\t"
-    "sra      %[temp10], %[temp10], 16                 \n\t"
-    "sra      %[temp6],  %[temp6],  16                 \n\t"
-    "subu     %[temp17], %[temp10], %[temp17]          \n\t"
-    "addu     %[temp6],  %[temp6],  %[temp14]          \n\t"
-    "addu     %[temp10], %[temp16], %[temp6]           \n\t"
-    "subu     %[temp6],  %[temp16], %[temp6]           \n\t"
-    "addu     %[temp14], %[temp2],  %[temp17]          \n\t"
-    "subu     %[temp2],  %[temp2],  %[temp17]          \n\t"
-    "mul      %[temp17], %[temp15], %[kC1]             \n\t"
-    "mul      %[temp15], %[temp15], %[kC2]             \n\t"
-    "addu     %[temp16], %[temp3],  %[temp11]          \n\t"
-    "subu     %[temp3],  %[temp3],  %[temp11]          \n\t"
-    "mul      %[temp11], %[temp7],  %[kC2]             \n\t"
-    "mul      %[temp7],  %[temp7],  %[kC1]             \n\t"
-    "addiu    %[temp8],  %[temp8],  4                  \n\t"
-    "addiu    %[temp12], %[temp12], 4                  \n\t"
-    "addiu    %[temp0],  %[temp0],  4                  \n\t"
-    "addiu    %[temp4],  %[temp4],  4                  \n\t"
-    "sra      %[temp17], %[temp17], 16                 \n\t"
-    "sra      %[temp15], %[temp15], 16                 \n\t"
-    "sra      %[temp11], %[temp11], 16                 \n\t"
-    "sra      %[temp7],  %[temp7],  16                 \n\t"
-    "subu     %[temp17], %[temp11], %[temp17]          \n\t"
-    "addu     %[temp7],  %[temp7],  %[temp15]          \n\t"
-    "addu     %[temp15], %[temp3],  %[temp17]          \n\t"
-    "subu     %[temp3],  %[temp3],  %[temp17]          \n\t"
-    "addu     %[temp11], %[temp16], %[temp7]           \n\t"
-    "subu     %[temp7],  %[temp16], %[temp7]           \n\t"
-    "addu     %[temp16], %[temp8],  %[temp10]          \n\t"
-    "subu     %[temp8],  %[temp8],  %[temp10]          \n\t"
-    "mul      %[temp10], %[temp9],  %[kC2]             \n\t"
-    "mul      %[temp17], %[temp11], %[kC1]             \n\t"
-    "mul      %[temp9],  %[temp9],  %[kC1]             \n\t"
-    "mul      %[temp11], %[temp11], %[kC2]             \n\t"
-    "sra      %[temp10], %[temp10], 16                 \n\t"
-    "sra      %[temp17], %[temp17], 16                 \n\t"
-    "sra      %[temp9],  %[temp9],  16                 \n\t"
-    "sra      %[temp11], %[temp11], 16                 \n\t"
-    "subu     %[temp17], %[temp10], %[temp17]          \n\t"
-    "addu     %[temp11], %[temp9],  %[temp11]          \n\t"
-    "addu     %[temp10], %[temp12], %[temp14]          \n\t"
-    "subu     %[temp12], %[temp12], %[temp14]          \n\t"
-    "mul      %[temp14], %[temp13], %[kC2]             \n\t"
-    "mul      %[temp9],  %[temp15], %[kC1]             \n\t"
-    "mul      %[temp13], %[temp13], %[kC1]             \n\t"
-    "mul      %[temp15], %[temp15], %[kC2]             \n\t"
-    "sra      %[temp14], %[temp14], 16                 \n\t"
-    "sra      %[temp9],  %[temp9],  16                 \n\t"
-    "sra      %[temp13], %[temp13], 16                 \n\t"
-    "sra      %[temp15], %[temp15], 16                 \n\t"
-    "subu     %[temp9],  %[temp14], %[temp9]           \n\t"
-    "addu     %[temp15], %[temp13], %[temp15]          \n\t"
-    "addu     %[temp14], %[temp0],  %[temp2]           \n\t"
-    "subu     %[temp0],  %[temp0],  %[temp2]           \n\t"
-    "mul      %[temp2],  %[temp1],  %[kC2]             \n\t"
-    "mul      %[temp13], %[temp3],  %[kC1]             \n\t"
-    "mul      %[temp1],  %[temp1],  %[kC1]             \n\t"
-    "mul      %[temp3],  %[temp3],  %[kC2]             \n\t"
-    "sra      %[temp2],  %[temp2],  16                 \n\t"
-    "sra      %[temp13], %[temp13], 16                 \n\t"
-    "sra      %[temp1],  %[temp1],  16                 \n\t"
-    "sra      %[temp3],  %[temp3],  16                 \n\t"
-    "subu     %[temp13], %[temp2],  %[temp13]          \n\t"
-    "addu     %[temp3],  %[temp1],  %[temp3]           \n\t"
-    "addu     %[temp2],  %[temp4],  %[temp6]           \n\t"
-    "subu     %[temp4],  %[temp4],  %[temp6]           \n\t"
-    "mul      %[temp6],  %[temp5],  %[kC2]             \n\t"
-    "mul      %[temp1],  %[temp7],  %[kC1]             \n\t"
-    "mul      %[temp5],  %[temp5],  %[kC1]             \n\t"
-    "mul      %[temp7],  %[temp7],  %[kC2]             \n\t"
-    "sra      %[temp6],  %[temp6],  16                 \n\t"
-    "sra      %[temp1],  %[temp1],  16                 \n\t"
-    "sra      %[temp5],  %[temp5],  16                 \n\t"
-    "sra      %[temp7],  %[temp7],  16                 \n\t"
-    "subu     %[temp1],  %[temp6],  %[temp1]           \n\t"
-    "addu     %[temp7],  %[temp5],  %[temp7]           \n\t"
-    "addu     %[temp5],  %[temp16], %[temp11]          \n\t"
-    "subu     %[temp16], %[temp16], %[temp11]          \n\t"
-    "addu     %[temp11], %[temp8],  %[temp17]          \n\t"
-    "subu     %[temp8],  %[temp8],  %[temp17]          \n\t"
-    "sra      %[temp5],  %[temp5],  3                  \n\t"
-    "sra      %[temp16], %[temp16], 3                  \n\t"
-    "sra      %[temp11], %[temp11], 3                  \n\t"
-    "sra      %[temp8],  %[temp8],  3                  \n\t"
-    "addu     %[temp17], %[temp10], %[temp15]          \n\t"
-    "subu     %[temp10], %[temp10], %[temp15]          \n\t"
-    "addu     %[temp15], %[temp12], %[temp9]           \n\t"
-    "subu     %[temp12], %[temp12], %[temp9]           \n\t"
-    "sra      %[temp17], %[temp17], 3                  \n\t"
-    "sra      %[temp10], %[temp10], 3                  \n\t"
-    "sra      %[temp15], %[temp15], 3                  \n\t"
-    "sra      %[temp12], %[temp12], 3                  \n\t"
-    "addu     %[temp9],  %[temp14], %[temp3]           \n\t"
-    "subu     %[temp14], %[temp14], %[temp3]           \n\t"
-    "addu     %[temp3],  %[temp0],  %[temp13]          \n\t"
-    "subu     %[temp0],  %[temp0],  %[temp13]          \n\t"
-    "sra      %[temp9],  %[temp9],  3                  \n\t"
-    "sra      %[temp14], %[temp14], 3                  \n\t"
-    "sra      %[temp3],  %[temp3],  3                  \n\t"
-    "sra      %[temp0],  %[temp0],  3                  \n\t"
-    "addu     %[temp13], %[temp2],  %[temp7]           \n\t"
-    "subu     %[temp2],  %[temp2],  %[temp7]           \n\t"
-    "addu     %[temp7],  %[temp4],  %[temp1]           \n\t"
-    "subu     %[temp4],  %[temp4],  %[temp1]           \n\t"
-    "sra      %[temp13], %[temp13], 3                  \n\t"
-    "sra      %[temp2],  %[temp2],  3                  \n\t"
-    "sra      %[temp7],  %[temp7],  3                  \n\t"
-    "sra      %[temp4],  %[temp4],  3                  \n\t"
-    "addiu    %[temp6],  $zero,     255                \n\t"
-    "lbu      %[temp1],  0+0*" XSTR(BPS) "(%[dst])     \n\t"
-    "addu     %[temp1],  %[temp1],  %[temp5]           \n\t"
-    "sra      %[temp5],  %[temp1],  8                  \n\t"
-    "sra      %[temp18], %[temp1],  31                 \n\t"
-    "beqz     %[temp5],  1f                            \n\t"
-    "xor      %[temp1],  %[temp1],  %[temp1]           \n\t"
-    "movz     %[temp1],  %[temp6],  %[temp18]          \n\t"
-  "1:                                                  \n\t"
-    "lbu      %[temp18], 1+0*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp1],  0+0*" XSTR(BPS) "(%[dst])     \n\t"
-    "addu     %[temp18], %[temp18], %[temp11]          \n\t"
-    "sra      %[temp11], %[temp18], 8                  \n\t"
-    "sra      %[temp1],  %[temp18], 31                 \n\t"
-    "beqz     %[temp11], 2f                            \n\t"
-    "xor      %[temp18], %[temp18], %[temp18]          \n\t"
-    "movz     %[temp18], %[temp6],  %[temp1]           \n\t"
-  "2:                                                  \n\t"
-    "lbu      %[temp1],  2+0*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp18], 1+0*" XSTR(BPS) "(%[dst])     \n\t"
-    "addu     %[temp1],  %[temp1],  %[temp8]           \n\t"
-    "sra      %[temp8],  %[temp1],  8                  \n\t"
-    "sra      %[temp18], %[temp1],  31                 \n\t"
-    "beqz     %[temp8],  3f                            \n\t"
-    "xor      %[temp1],  %[temp1],  %[temp1]           \n\t"
-    "movz     %[temp1],  %[temp6],  %[temp18]          \n\t"
-  "3:                                                  \n\t"
-    "lbu      %[temp18], 3+0*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp1],  2+0*" XSTR(BPS) "(%[dst])     \n\t"
-    "addu     %[temp18], %[temp18], %[temp16]          \n\t"
-    "sra      %[temp16], %[temp18], 8                  \n\t"
-    "sra      %[temp1],  %[temp18], 31                 \n\t"
-    "beqz     %[temp16], 4f                            \n\t"
-    "xor      %[temp18], %[temp18], %[temp18]          \n\t"
-    "movz     %[temp18], %[temp6],  %[temp1]           \n\t"
-  "4:                                                  \n\t"
-    "sb       %[temp18], 3+0*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp5],  0+1*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp8],  1+1*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp11], 2+1*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp16], 3+1*" XSTR(BPS) "(%[dst])     \n\t"
-    "addu     %[temp5],  %[temp5],  %[temp17]          \n\t"
-    "addu     %[temp8],  %[temp8],  %[temp15]          \n\t"
-    "addu     %[temp11], %[temp11], %[temp12]          \n\t"
-    "addu     %[temp16], %[temp16], %[temp10]          \n\t"
-    "sra      %[temp18], %[temp5],  8                  \n\t"
-    "sra      %[temp1],  %[temp5],  31                 \n\t"
-    "beqz     %[temp18], 5f                            \n\t"
-    "xor      %[temp5],  %[temp5],  %[temp5]           \n\t"
-    "movz     %[temp5],  %[temp6],  %[temp1]           \n\t"
-  "5:                                                  \n\t"
-    "sra      %[temp18], %[temp8],  8                  \n\t"
-    "sra      %[temp1],  %[temp8],  31                 \n\t"
-    "beqz     %[temp18], 6f                            \n\t"
-    "xor      %[temp8],  %[temp8],  %[temp8]           \n\t"
-    "movz     %[temp8],  %[temp6],  %[temp1]           \n\t"
-  "6:                                                  \n\t"
-    "sra      %[temp18], %[temp11], 8                  \n\t"
-    "sra      %[temp1],  %[temp11], 31                 \n\t"
-    "sra      %[temp17], %[temp16], 8                  \n\t"
-    "sra      %[temp15], %[temp16], 31                 \n\t"
-    "beqz     %[temp18], 7f                            \n\t"
-    "xor      %[temp11], %[temp11], %[temp11]          \n\t"
-    "movz     %[temp11], %[temp6],  %[temp1]           \n\t"
-  "7:                                                  \n\t"
-    "beqz     %[temp17], 8f                            \n\t"
-    "xor      %[temp16], %[temp16], %[temp16]          \n\t"
-    "movz     %[temp16], %[temp6],  %[temp15]          \n\t"
-  "8:                                                  \n\t"
-    "sb       %[temp5],  0+1*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp8],  1+1*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp11], 2+1*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp16], 3+1*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp5],  0+2*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp8],  1+2*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp11], 2+2*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp16], 3+2*" XSTR(BPS) "(%[dst])     \n\t"
-    "addu     %[temp5],  %[temp5],  %[temp9]           \n\t"
-    "addu     %[temp8],  %[temp8],  %[temp3]           \n\t"
-    "addu     %[temp11], %[temp11], %[temp0]           \n\t"
-    "addu     %[temp16], %[temp16], %[temp14]          \n\t"
-    "sra      %[temp18], %[temp5],  8                  \n\t"
-    "sra      %[temp1],  %[temp5],  31                 \n\t"
-    "sra      %[temp17], %[temp8],  8                  \n\t"
-    "sra      %[temp15], %[temp8],  31                 \n\t"
-    "sra      %[temp12], %[temp11], 8                  \n\t"
-    "sra      %[temp10], %[temp11], 31                 \n\t"
-    "sra      %[temp9],  %[temp16], 8                  \n\t"
-    "sra      %[temp3],  %[temp16], 31                 \n\t"
-    "beqz     %[temp18], 9f                            \n\t"
-    "xor      %[temp5],  %[temp5],  %[temp5]           \n\t"
-    "movz     %[temp5],  %[temp6],  %[temp1]           \n\t"
-  "9:                                                  \n\t"
-    "beqz     %[temp17], 10f                           \n\t"
-    "xor      %[temp8],  %[temp8],  %[temp8]           \n\t"
-    "movz     %[temp8],  %[temp6],  %[temp15]          \n\t"
-  "10:                                                 \n\t"
-    "beqz     %[temp12], 11f                           \n\t"
-    "xor      %[temp11], %[temp11], %[temp11]          \n\t"
-    "movz     %[temp11], %[temp6],  %[temp10]          \n\t"
-  "11:                                                 \n\t"
-    "beqz     %[temp9],  12f                           \n\t"
-    "xor      %[temp16], %[temp16], %[temp16]          \n\t"
-    "movz     %[temp16], %[temp6],  %[temp3]           \n\t"
-  "12:                                                 \n\t"
-    "sb       %[temp5],  0+2*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp8],  1+2*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp11], 2+2*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp16], 3+2*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp5],  0+3*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp8],  1+3*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp11], 2+3*" XSTR(BPS) "(%[dst])     \n\t"
-    "lbu      %[temp16], 3+3*" XSTR(BPS) "(%[dst])     \n\t"
-    "addu     %[temp5],  %[temp5],  %[temp13]          \n\t"
-    "addu     %[temp8],  %[temp8],  %[temp7]           \n\t"
-    "addu     %[temp11], %[temp11], %[temp4]           \n\t"
-    "addu     %[temp16], %[temp16], %[temp2]           \n\t"
-    "sra      %[temp18], %[temp5],  8                  \n\t"
-    "sra      %[temp1],  %[temp5],  31                 \n\t"
-    "sra      %[temp17], %[temp8],  8                  \n\t"
-    "sra      %[temp15], %[temp8],  31                 \n\t"
-    "sra      %[temp12], %[temp11], 8                  \n\t"
-    "sra      %[temp10], %[temp11], 31                 \n\t"
-    "sra      %[temp9],  %[temp16], 8                  \n\t"
-    "sra      %[temp3],  %[temp16], 31                 \n\t"
-    "beqz     %[temp18], 13f                           \n\t"
-    "xor      %[temp5],  %[temp5],  %[temp5]           \n\t"
-    "movz     %[temp5],  %[temp6],  %[temp1]           \n\t"
-  "13:                                                 \n\t"
-    "beqz     %[temp17], 14f                           \n\t"
-    "xor      %[temp8],  %[temp8],  %[temp8]           \n\t"
-    "movz     %[temp8],  %[temp6],  %[temp15]          \n\t"
-  "14:                                                 \n\t"
-    "beqz     %[temp12], 15f                           \n\t"
-    "xor      %[temp11], %[temp11], %[temp11]          \n\t"
-    "movz     %[temp11], %[temp6],  %[temp10]          \n\t"
-  "15:                                                 \n\t"
-    "beqz     %[temp9],  16f                           \n\t"
-    "xor      %[temp16], %[temp16], %[temp16]          \n\t"
-    "movz     %[temp16], %[temp6],  %[temp3]           \n\t"
-  "16:                                                 \n\t"
-    "sb       %[temp5],  0+3*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp8],  1+3*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp11], 2+3*" XSTR(BPS) "(%[dst])     \n\t"
-    "sb       %[temp16], 3+3*" XSTR(BPS) "(%[dst])     \n\t"
-
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11),
-      [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), [temp14]"=&r"(temp14),
-      [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), [temp17]"=&r"(temp17),
-      [temp18]"=&r"(temp18)
-    : [in]"r"(p_in), [kC1]"r"(kC1), [kC2]"r"(kC2), [dst]"r"(dst)
-    : "memory", "hi", "lo"
-  );
-}
-
-static void TransformTwo(const int16_t* in, uint8_t* dst, int do_two) {
-  TransformOne(in, dst);
-  if (do_two) {
-    TransformOne(in + 16, dst + 4);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8DspInitMIPS32(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitMIPS32(void) {
-  VP8InitClipTables();
-
-  VP8Transform = TransformTwo;
-
-  VP8VFilter16 = VFilter16;
-  VP8HFilter16 = HFilter16;
-  VP8VFilter8 = VFilter8;
-  VP8HFilter8 = HFilter8;
-  VP8VFilter16i = VFilter16i;
-  VP8HFilter16i = HFilter16i;
-  VP8VFilter8i = VFilter8i;
-  VP8HFilter8i = HFilter8i;
-
-  VP8SimpleVFilter16 = SimpleVFilter16;
-  VP8SimpleHFilter16 = SimpleHFilter16;
-  VP8SimpleVFilter16i = SimpleVFilter16i;
-  VP8SimpleHFilter16i = SimpleHFilter16i;
-}
-
-#else  // !WEBP_USE_MIPS32
-
-WEBP_DSP_INIT_STUB(VP8DspInitMIPS32)
-
-#endif  // WEBP_USE_MIPS32
diff --git a/ios/Pods/libwebp/src/dsp/dec_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/dec_mips_dsp_r2.c
deleted file mode 100644
index b0936bc..0000000
--- a/ios/Pods/libwebp/src/dsp/dec_mips_dsp_r2.c
+++ /dev/null
@@ -1,994 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS version of dsp functions
-//
-// Author(s):  Djordje Pesut    (djordje.pesut@imgtec.com)
-//             Jovan Zelincevic (jovan.zelincevic@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-#include "src/dsp/mips_macro.h"
-
-static const int kC1 = 20091 + (1 << 16);
-static const int kC2 = 35468;
-
-#define MUL(a, b) (((a) * (b)) >> 16)
-
-static void TransformDC(const int16_t* in, uint8_t* dst) {
-  int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10;
-
-  __asm__ volatile (
-    LOAD_WITH_OFFSET_X4(temp1, temp2, temp3, temp4, dst,
-                        0, 0, 0, 0,
-                        0, 1, 2, 3,
-                        BPS)
-    "lh               %[temp5],  0(%[in])               \n\t"
-    "addiu            %[temp5],  %[temp5],  4           \n\t"
-    "ins              %[temp5],  %[temp5],  16, 16      \n\t"
-    "shra.ph          %[temp5],  %[temp5],  3           \n\t"
-    CONVERT_2_BYTES_TO_HALF(temp6, temp7, temp8, temp9, temp10, temp1, temp2,
-                            temp3, temp1, temp2, temp3, temp4)
-    STORE_SAT_SUM_X2(temp6, temp7, temp8, temp9, temp10, temp1, temp2, temp3,
-                     temp5, temp5, temp5, temp5, temp5, temp5, temp5, temp5,
-                     dst, 0, 1, 2, 3, BPS)
-
-    OUTPUT_EARLY_CLOBBER_REGS_10()
-    : [in]"r"(in), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void TransformAC3(const int16_t* in, uint8_t* dst) {
-  const int a = in[0] + 4;
-  int c4 = MUL(in[4], kC2);
-  const int d4 = MUL(in[4], kC1);
-  const int c1 = MUL(in[1], kC2);
-  const int d1 = MUL(in[1], kC1);
-  int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9;
-  int temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18;
-
-  __asm__ volatile (
-    "ins              %[c4],      %[d4],     16,       16    \n\t"
-    "replv.ph         %[temp1],   %[a]                       \n\t"
-    "replv.ph         %[temp4],   %[d1]                      \n\t"
-    ADD_SUB_HALVES(temp2, temp3, temp1, c4)
-    "replv.ph         %[temp5],   %[c1]                      \n\t"
-    SHIFT_R_SUM_X2(temp1, temp6, temp7, temp8, temp2, temp9, temp10, temp4,
-                   temp2, temp2, temp3, temp3, temp4, temp5, temp4, temp5)
-    LOAD_WITH_OFFSET_X4(temp3, temp5, temp11, temp12, dst,
-                        0, 0, 0, 0,
-                        0, 1, 2, 3,
-                        BPS)
-    CONVERT_2_BYTES_TO_HALF(temp13, temp14, temp3, temp15, temp5, temp16,
-                            temp11, temp17, temp3, temp5, temp11, temp12)
-    PACK_2_HALVES_TO_WORD(temp12, temp18, temp7, temp6, temp1, temp8, temp2,
-                          temp4, temp7, temp6, temp10, temp9)
-    STORE_SAT_SUM_X2(temp13, temp14, temp3, temp15, temp5, temp16, temp11,
-                     temp17, temp12, temp18, temp1, temp8, temp2, temp4,
-                     temp7, temp6, dst, 0, 1, 2, 3, BPS)
-
-    OUTPUT_EARLY_CLOBBER_REGS_18(),
-      [c4]"+&r"(c4)
-    : [dst]"r"(dst), [a]"r"(a), [d1]"r"(d1), [d4]"r"(d4), [c1]"r"(c1)
-    : "memory"
-  );
-}
-
-static void TransformOne(const int16_t* in, uint8_t* dst) {
-  int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9;
-  int temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18;
-
-  __asm__ volatile (
-    "ulw              %[temp1],   0(%[in])                 \n\t"
-    "ulw              %[temp2],   16(%[in])                \n\t"
-    LOAD_IN_X2(temp5, temp6, 24, 26)
-    ADD_SUB_HALVES(temp3, temp4, temp1, temp2)
-    LOAD_IN_X2(temp1, temp2, 8, 10)
-    MUL_SHIFT_SUM(temp7, temp8, temp9, temp10, temp11, temp12, temp13, temp14,
-                  temp10, temp8, temp9, temp7, temp1, temp2, temp5, temp6,
-                  temp13, temp11, temp14, temp12)
-    INSERT_HALF_X2(temp8, temp7, temp10, temp9)
-    "ulw              %[temp17],  4(%[in])                 \n\t"
-    "ulw              %[temp18],  20(%[in])                \n\t"
-    ADD_SUB_HALVES(temp1, temp2, temp3, temp8)
-    ADD_SUB_HALVES(temp5, temp6, temp4, temp7)
-    ADD_SUB_HALVES(temp7, temp8, temp17, temp18)
-    LOAD_IN_X2(temp17, temp18, 12, 14)
-    LOAD_IN_X2(temp9, temp10, 28, 30)
-    MUL_SHIFT_SUM(temp11, temp12, temp13, temp14, temp15, temp16, temp4, temp17,
-                  temp12, temp14, temp11, temp13, temp17, temp18, temp9, temp10,
-                  temp15, temp4, temp16, temp17)
-    INSERT_HALF_X2(temp11, temp12, temp13, temp14)
-    ADD_SUB_HALVES(temp17, temp8, temp8, temp11)
-    ADD_SUB_HALVES(temp3, temp4, temp7, temp12)
-
-    // horizontal
-    SRA_16(temp9, temp10, temp11, temp12, temp1, temp2, temp5, temp6)
-    INSERT_HALF_X2(temp1, temp6, temp5, temp2)
-    SRA_16(temp13, temp14, temp15, temp16, temp3, temp4, temp17, temp8)
-    "repl.ph          %[temp2],   0x4                      \n\t"
-    INSERT_HALF_X2(temp3, temp8, temp17, temp4)
-    "addq.ph          %[temp1],   %[temp1],  %[temp2]      \n\t"
-    "addq.ph          %[temp6],   %[temp6],  %[temp2]      \n\t"
-    ADD_SUB_HALVES(temp2, temp4, temp1, temp3)
-    ADD_SUB_HALVES(temp5, temp7, temp6, temp8)
-    MUL_SHIFT_SUM(temp1, temp3, temp6, temp8, temp9, temp13, temp17, temp18,
-                  temp3, temp13, temp1, temp9, temp9, temp13, temp11, temp15,
-                  temp6, temp17, temp8, temp18)
-    MUL_SHIFT_SUM(temp6, temp8, temp18, temp17, temp11, temp15, temp12, temp16,
-                  temp8, temp15, temp6, temp11, temp12, temp16, temp10, temp14,
-                  temp18, temp12, temp17, temp16)
-    INSERT_HALF_X2(temp1, temp3, temp9, temp13)
-    INSERT_HALF_X2(temp6, temp8, temp11, temp15)
-    SHIFT_R_SUM_X2(temp9, temp10, temp11, temp12, temp13, temp14, temp15,
-                   temp16, temp2, temp4, temp5, temp7, temp3, temp1, temp8,
-                   temp6)
-    PACK_2_HALVES_TO_WORD(temp1, temp2, temp3, temp4, temp9, temp12, temp13,
-                          temp16, temp11, temp10, temp15, temp14)
-    LOAD_WITH_OFFSET_X4(temp10, temp11, temp14, temp15, dst,
-                        0, 0, 0, 0,
-                        0, 1, 2, 3,
-                        BPS)
-    CONVERT_2_BYTES_TO_HALF(temp5, temp6, temp7, temp8, temp17, temp18, temp10,
-                            temp11, temp10, temp11, temp14, temp15)
-    STORE_SAT_SUM_X2(temp5, temp6, temp7, temp8, temp17, temp18, temp10, temp11,
-                     temp9, temp12, temp1, temp2, temp13, temp16, temp3, temp4,
-                     dst, 0, 1, 2, 3, BPS)
-
-    OUTPUT_EARLY_CLOBBER_REGS_18()
-    : [dst]"r"(dst), [in]"r"(in), [kC1]"r"(kC1), [kC2]"r"(kC2)
-    : "memory", "hi", "lo"
-  );
-}
-
-static void TransformTwo(const int16_t* in, uint8_t* dst, int do_two) {
-  TransformOne(in, dst);
-  if (do_two) {
-    TransformOne(in + 16, dst + 4);
-  }
-}
-
-static WEBP_INLINE void FilterLoop26(uint8_t* p,
-                                     int hstride, int vstride, int size,
-                                     int thresh, int ithresh, int hev_thresh) {
-  const int thresh2 = 2 * thresh + 1;
-  int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9;
-  int temp10, temp11, temp12, temp13, temp14, temp15;
-
-  __asm__ volatile (
-    ".set      push                                      \n\t"
-    ".set      noreorder                                 \n\t"
-  "1:                                                    \n\t"
-    "negu      %[temp1],  %[hstride]                     \n\t"
-    "addiu     %[size],   %[size],        -1             \n\t"
-    "sll       %[temp2],  %[hstride],     1              \n\t"
-    "sll       %[temp3],  %[temp1],       1              \n\t"
-    "addu      %[temp4],  %[temp2],       %[hstride]     \n\t"
-    "addu      %[temp5],  %[temp3],       %[temp1]       \n\t"
-    "lbu       %[temp7],  0(%[p])                        \n\t"
-    "sll       %[temp6],  %[temp3],       1              \n\t"
-    "lbux      %[temp8],  %[temp5](%[p])                 \n\t"
-    "lbux      %[temp9],  %[temp3](%[p])                 \n\t"
-    "lbux      %[temp10], %[temp1](%[p])                 \n\t"
-    "lbux      %[temp11], %[temp6](%[p])                 \n\t"
-    "lbux      %[temp12], %[hstride](%[p])               \n\t"
-    "lbux      %[temp13], %[temp2](%[p])                 \n\t"
-    "lbux      %[temp14], %[temp4](%[p])                 \n\t"
-    "subu      %[temp1],  %[temp10],      %[temp7]       \n\t"
-    "subu      %[temp2],  %[temp9],       %[temp12]      \n\t"
-    "absq_s.w  %[temp3],  %[temp1]                       \n\t"
-    "absq_s.w  %[temp4],  %[temp2]                       \n\t"
-    "negu      %[temp1],  %[temp1]                       \n\t"
-    "sll       %[temp3],  %[temp3],       2              \n\t"
-    "addu      %[temp15], %[temp3],       %[temp4]       \n\t"
-    "subu      %[temp3],  %[temp15],      %[thresh2]     \n\t"
-    "sll       %[temp6],  %[temp1],       1              \n\t"
-    "bgtz      %[temp3],  3f                             \n\t"
-    " subu     %[temp4],  %[temp11],      %[temp8]       \n\t"
-    "absq_s.w  %[temp4],  %[temp4]                       \n\t"
-    "shll_s.w  %[temp2],  %[temp2],       24             \n\t"
-    "subu      %[temp4],  %[temp4],       %[ithresh]     \n\t"
-    "bgtz      %[temp4],  3f                             \n\t"
-    " subu     %[temp3],  %[temp8],       %[temp9]       \n\t"
-    "absq_s.w  %[temp3],  %[temp3]                       \n\t"
-    "subu      %[temp3],  %[temp3],       %[ithresh]     \n\t"
-    "bgtz      %[temp3],  3f                             \n\t"
-    " subu     %[temp5],  %[temp9],       %[temp10]      \n\t"
-    "absq_s.w  %[temp3],  %[temp5]                       \n\t"
-    "absq_s.w  %[temp5],  %[temp5]                       \n\t"
-    "subu      %[temp3],  %[temp3],       %[ithresh]     \n\t"
-    "bgtz      %[temp3],  3f                             \n\t"
-    " subu     %[temp3],  %[temp14],      %[temp13]      \n\t"
-    "absq_s.w  %[temp3],  %[temp3]                       \n\t"
-    "slt       %[temp5],  %[hev_thresh],  %[temp5]       \n\t"
-    "subu      %[temp3],  %[temp3],       %[ithresh]     \n\t"
-    "bgtz      %[temp3],  3f                             \n\t"
-    " subu     %[temp3],  %[temp13],      %[temp12]      \n\t"
-    "absq_s.w  %[temp3],  %[temp3]                       \n\t"
-    "sra       %[temp4],  %[temp2],       24             \n\t"
-    "subu      %[temp3],  %[temp3],       %[ithresh]     \n\t"
-    "bgtz      %[temp3],  3f                             \n\t"
-    " subu     %[temp15], %[temp12],      %[temp7]       \n\t"
-    "absq_s.w  %[temp3],  %[temp15]                      \n\t"
-    "absq_s.w  %[temp15], %[temp15]                      \n\t"
-    "subu      %[temp3],  %[temp3],       %[ithresh]     \n\t"
-    "bgtz      %[temp3],  3f                             \n\t"
-    " slt      %[temp15], %[hev_thresh],  %[temp15]      \n\t"
-    "addu      %[temp3],  %[temp6],       %[temp1]       \n\t"
-    "or        %[temp2],  %[temp5],       %[temp15]      \n\t"
-    "addu      %[temp5],  %[temp4],       %[temp3]       \n\t"
-    "beqz      %[temp2],  4f                             \n\t"
-    " shra_r.w %[temp1],  %[temp5],       3              \n\t"
-    "addiu     %[temp2],  %[temp5],       3              \n\t"
-    "sra       %[temp2],  %[temp2],       3              \n\t"
-    "shll_s.w  %[temp1],  %[temp1],       27             \n\t"
-    "shll_s.w  %[temp2],  %[temp2],       27             \n\t"
-    "subu      %[temp3],  %[p],           %[hstride]     \n\t"
-    "sra       %[temp1],  %[temp1],       27             \n\t"
-    "sra       %[temp2],  %[temp2],       27             \n\t"
-    "subu      %[temp1],  %[temp7],       %[temp1]       \n\t"
-    "addu      %[temp2],  %[temp10],      %[temp2]       \n\t"
-    "lbux      %[temp2],  %[temp2](%[VP8kclip1])         \n\t"
-    "lbux      %[temp1],  %[temp1](%[VP8kclip1])         \n\t"
-    "sb        %[temp2],  0(%[temp3])                    \n\t"
-    "j         3f                                        \n\t"
-    " sb       %[temp1],  0(%[p])                        \n\t"
-  "4:                                                    \n\t"
-    "shll_s.w  %[temp5],  %[temp5],       24             \n\t"
-    "subu      %[temp14], %[p],           %[hstride]     \n\t"
-    "subu      %[temp11], %[temp14],      %[hstride]     \n\t"
-    "sra       %[temp6],  %[temp5],       24             \n\t"
-    "sll       %[temp1],  %[temp6],       3              \n\t"
-    "subu      %[temp15], %[temp11],      %[hstride]     \n\t"
-    "addu      %[temp2],  %[temp6],       %[temp1]       \n\t"
-    "sll       %[temp3],  %[temp2],       1              \n\t"
-    "addu      %[temp4],  %[temp3],       %[temp2]       \n\t"
-    "addiu     %[temp2],  %[temp2],       63             \n\t"
-    "addiu     %[temp3],  %[temp3],       63             \n\t"
-    "addiu     %[temp4],  %[temp4],       63             \n\t"
-    "sra       %[temp2],  %[temp2],       7              \n\t"
-    "sra       %[temp3],  %[temp3],       7              \n\t"
-    "sra       %[temp4],  %[temp4],       7              \n\t"
-    "addu      %[temp1],  %[temp8],       %[temp2]       \n\t"
-    "addu      %[temp5],  %[temp9],       %[temp3]       \n\t"
-    "addu      %[temp6],  %[temp10],      %[temp4]       \n\t"
-    "subu      %[temp8],  %[temp7],       %[temp4]       \n\t"
-    "subu      %[temp7],  %[temp12],      %[temp3]       \n\t"
-    "addu      %[temp10], %[p],           %[hstride]     \n\t"
-    "subu      %[temp9],  %[temp13],      %[temp2]       \n\t"
-    "addu      %[temp12], %[temp10],      %[hstride]     \n\t"
-    "lbux      %[temp2],  %[temp1](%[VP8kclip1])         \n\t"
-    "lbux      %[temp3],  %[temp5](%[VP8kclip1])         \n\t"
-    "lbux      %[temp4],  %[temp6](%[VP8kclip1])         \n\t"
-    "lbux      %[temp5],  %[temp8](%[VP8kclip1])         \n\t"
-    "lbux      %[temp6],  %[temp7](%[VP8kclip1])         \n\t"
-    "lbux      %[temp8],  %[temp9](%[VP8kclip1])         \n\t"
-    "sb        %[temp2],  0(%[temp15])                   \n\t"
-    "sb        %[temp3],  0(%[temp11])                   \n\t"
-    "sb        %[temp4],  0(%[temp14])                   \n\t"
-    "sb        %[temp5],  0(%[p])                        \n\t"
-    "sb        %[temp6],  0(%[temp10])                   \n\t"
-    "sb        %[temp8],  0(%[temp12])                   \n\t"
-  "3:                                                    \n\t"
-    "bgtz      %[size],   1b                             \n\t"
-    " addu     %[p],      %[p],           %[vstride]     \n\t"
-    ".set      pop                                       \n\t"
-    : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),[temp3]"=&r"(temp3),
-      [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp6]"=&r"(temp6),
-      [temp7]"=&r"(temp7),[temp8]"=&r"(temp8),[temp9]"=&r"(temp9),
-      [temp10]"=&r"(temp10),[temp11]"=&r"(temp11),[temp12]"=&r"(temp12),
-      [temp13]"=&r"(temp13),[temp14]"=&r"(temp14),[temp15]"=&r"(temp15),
-      [size]"+&r"(size), [p]"+&r"(p)
-    : [hstride]"r"(hstride), [thresh2]"r"(thresh2),
-      [ithresh]"r"(ithresh),[vstride]"r"(vstride), [hev_thresh]"r"(hev_thresh),
-      [VP8kclip1]"r"(VP8kclip1)
-    : "memory"
-  );
-}
-
-static WEBP_INLINE void FilterLoop24(uint8_t* p,
-                                     int hstride, int vstride, int size,
-                                     int thresh, int ithresh, int hev_thresh) {
-  int p0, q0, p1, q1, p2, q2, p3, q3;
-  int step1, step2, temp1, temp2, temp3, temp4;
-  uint8_t* pTemp0;
-  uint8_t* pTemp1;
-  const int thresh2 = 2 * thresh + 1;
-
-  __asm__ volatile (
-    ".set      push                                   \n\t"
-    ".set      noreorder                              \n\t"
-    "bltz      %[size],    3f                         \n\t"
-    " nop                                             \n\t"
-  "2:                                                 \n\t"
-    "negu      %[step1],   %[hstride]                 \n\t"
-    "lbu       %[q0],      0(%[p])                    \n\t"
-    "lbux      %[p0],      %[step1](%[p])             \n\t"
-    "subu      %[step1],   %[step1],      %[hstride]  \n\t"
-    "lbux      %[q1],      %[hstride](%[p])           \n\t"
-    "subu      %[temp1],   %[p0],         %[q0]       \n\t"
-    "lbux      %[p1],      %[step1](%[p])             \n\t"
-    "addu      %[step2],   %[hstride],    %[hstride]  \n\t"
-    "absq_s.w  %[temp2],   %[temp1]                   \n\t"
-    "subu      %[temp3],   %[p1],         %[q1]       \n\t"
-    "absq_s.w  %[temp4],   %[temp3]                   \n\t"
-    "sll       %[temp2],   %[temp2],      2           \n\t"
-    "addu      %[temp2],   %[temp2],      %[temp4]    \n\t"
-    "subu      %[temp4],   %[temp2],      %[thresh2]  \n\t"
-    "subu      %[step1],   %[step1],      %[hstride]  \n\t"
-    "bgtz      %[temp4],   0f                         \n\t"
-    " lbux     %[p2],      %[step1](%[p])             \n\t"
-    "subu      %[step1],   %[step1],      %[hstride]  \n\t"
-    "lbux      %[q2],      %[step2](%[p])             \n\t"
-    "lbux      %[p3],      %[step1](%[p])             \n\t"
-    "subu      %[temp4],   %[p2],         %[p1]       \n\t"
-    "addu      %[step2],   %[step2],      %[hstride]  \n\t"
-    "subu      %[temp2],   %[p3],         %[p2]       \n\t"
-    "absq_s.w  %[temp4],   %[temp4]                   \n\t"
-    "absq_s.w  %[temp2],   %[temp2]                   \n\t"
-    "lbux      %[q3],      %[step2](%[p])             \n\t"
-    "subu      %[temp4],   %[temp4],      %[ithresh]  \n\t"
-    "negu      %[temp1],   %[temp1]                   \n\t"
-    "bgtz      %[temp4],   0f                         \n\t"
-    " subu     %[temp2],   %[temp2],      %[ithresh]  \n\t"
-    "subu      %[p3],      %[p1],         %[p0]       \n\t"
-    "bgtz      %[temp2],   0f                         \n\t"
-    " absq_s.w %[p3],      %[p3]                      \n\t"
-    "subu      %[temp4],   %[q3],         %[q2]       \n\t"
-    "subu      %[pTemp0],  %[p],          %[hstride]  \n\t"
-    "absq_s.w  %[temp4],   %[temp4]                   \n\t"
-    "subu      %[temp2],   %[p3],         %[ithresh]  \n\t"
-    "sll       %[step1],   %[temp1],      1           \n\t"
-    "bgtz      %[temp2],   0f                         \n\t"
-    " subu     %[temp4],   %[temp4],      %[ithresh]  \n\t"
-    "subu      %[temp2],   %[q2],         %[q1]       \n\t"
-    "bgtz      %[temp4],   0f                         \n\t"
-    " absq_s.w %[temp2],   %[temp2]                   \n\t"
-    "subu      %[q3],      %[q1],         %[q0]       \n\t"
-    "absq_s.w  %[q3],      %[q3]                      \n\t"
-    "subu      %[temp2],   %[temp2],      %[ithresh]  \n\t"
-    "addu      %[temp1],   %[temp1],      %[step1]    \n\t"
-    "bgtz      %[temp2],   0f                         \n\t"
-    " subu     %[temp4],   %[q3],         %[ithresh]  \n\t"
-    "slt       %[p3],      %[hev_thresh], %[p3]       \n\t"
-    "bgtz      %[temp4],   0f                         \n\t"
-    " slt      %[q3],      %[hev_thresh], %[q3]       \n\t"
-    "or        %[q3],      %[q3],         %[p3]       \n\t"
-    "bgtz      %[q3],      1f                         \n\t"
-    " shra_r.w %[temp2],   %[temp1],      3           \n\t"
-    "addiu     %[temp1],   %[temp1],      3           \n\t"
-    "sra       %[temp1],   %[temp1],      3           \n\t"
-    "shll_s.w  %[temp2],   %[temp2],      27          \n\t"
-    "shll_s.w  %[temp1],   %[temp1],      27          \n\t"
-    "addu      %[pTemp1],  %[p],          %[hstride]  \n\t"
-    "sra       %[temp2],   %[temp2],      27          \n\t"
-    "sra       %[temp1],   %[temp1],      27          \n\t"
-    "addiu     %[step1],   %[temp2],      1           \n\t"
-    "sra       %[step1],   %[step1],      1           \n\t"
-    "addu      %[p0],      %[p0],         %[temp1]    \n\t"
-    "addu      %[p1],      %[p1],         %[step1]    \n\t"
-    "subu      %[q0],      %[q0],         %[temp2]    \n\t"
-    "subu      %[q1],      %[q1],         %[step1]    \n\t"
-    "lbux      %[temp2],   %[p0](%[VP8kclip1])        \n\t"
-    "lbux      %[temp3],   %[q0](%[VP8kclip1])        \n\t"
-    "lbux      %[temp4],   %[q1](%[VP8kclip1])        \n\t"
-    "sb        %[temp2],   0(%[pTemp0])               \n\t"
-    "lbux      %[temp1],   %[p1](%[VP8kclip1])        \n\t"
-    "subu      %[pTemp0],  %[pTemp0],    %[hstride]   \n\t"
-    "sb        %[temp3],   0(%[p])                    \n\t"
-    "sb        %[temp4],   0(%[pTemp1])               \n\t"
-    "j         0f                                     \n\t"
-    " sb       %[temp1],   0(%[pTemp0])               \n\t"
-  "1:                                                 \n\t"
-    "shll_s.w  %[temp3],   %[temp3],      24          \n\t"
-    "sra       %[temp3],   %[temp3],      24          \n\t"
-    "addu      %[temp1],   %[temp1],      %[temp3]    \n\t"
-    "shra_r.w  %[temp2],   %[temp1],      3           \n\t"
-    "addiu     %[temp1],   %[temp1],      3           \n\t"
-    "shll_s.w  %[temp2],   %[temp2],      27          \n\t"
-    "sra       %[temp1],   %[temp1],      3           \n\t"
-    "shll_s.w  %[temp1],   %[temp1],      27          \n\t"
-    "sra       %[temp2],   %[temp2],      27          \n\t"
-    "sra       %[temp1],   %[temp1],      27          \n\t"
-    "addu      %[p0],      %[p0],         %[temp1]    \n\t"
-    "subu      %[q0],      %[q0],         %[temp2]    \n\t"
-    "lbux      %[temp1],   %[p0](%[VP8kclip1])        \n\t"
-    "lbux      %[temp2],   %[q0](%[VP8kclip1])        \n\t"
-    "sb        %[temp2],   0(%[p])                    \n\t"
-    "sb        %[temp1],   0(%[pTemp0])               \n\t"
-  "0:                                                 \n\t"
-    "subu      %[size],    %[size],       1           \n\t"
-    "bgtz      %[size],    2b                         \n\t"
-    " addu     %[p],       %[p],          %[vstride]  \n\t"
-  "3:                                                 \n\t"
-    ".set      pop                                    \n\t"
-    : [p0]"=&r"(p0), [q0]"=&r"(q0), [p1]"=&r"(p1), [q1]"=&r"(q1),
-      [p2]"=&r"(p2), [q2]"=&r"(q2), [p3]"=&r"(p3), [q3]"=&r"(q3),
-      [step2]"=&r"(step2), [step1]"=&r"(step1), [temp1]"=&r"(temp1),
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [temp4]"=&r"(temp4),
-      [pTemp0]"=&r"(pTemp0), [pTemp1]"=&r"(pTemp1), [p]"+&r"(p),
-      [size]"+&r"(size)
-    : [vstride]"r"(vstride), [ithresh]"r"(ithresh),
-      [hev_thresh]"r"(hev_thresh), [hstride]"r"(hstride),
-      [VP8kclip1]"r"(VP8kclip1), [thresh2]"r"(thresh2)
-    : "memory"
-  );
-}
-
-// on macroblock edges
-static void VFilter16(uint8_t* p, int stride,
-                      int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26(p, stride, 1, 16, thresh, ithresh, hev_thresh);
-}
-
-static void HFilter16(uint8_t* p, int stride,
-                      int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26(p, 1, stride, 16, thresh, ithresh, hev_thresh);
-}
-
-// 8-pixels wide variant, for chroma filtering
-static void VFilter8(uint8_t* u, uint8_t* v, int stride,
-                     int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26(u, stride, 1, 8, thresh, ithresh, hev_thresh);
-  FilterLoop26(v, stride, 1, 8, thresh, ithresh, hev_thresh);
-}
-
-static void HFilter8(uint8_t* u, uint8_t* v, int stride,
-                     int thresh, int ithresh, int hev_thresh) {
-  FilterLoop26(u, 1, stride, 8, thresh, ithresh, hev_thresh);
-  FilterLoop26(v, 1, stride, 8, thresh, ithresh, hev_thresh);
-}
-
-// on three inner edges
-static void VFilter16i(uint8_t* p, int stride,
-                       int thresh, int ithresh, int hev_thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4 * stride;
-    FilterLoop24(p, stride, 1, 16, thresh, ithresh, hev_thresh);
-  }
-}
-
-static void HFilter16i(uint8_t* p, int stride,
-                       int thresh, int ithresh, int hev_thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4;
-    FilterLoop24(p, 1, stride, 16, thresh, ithresh, hev_thresh);
-  }
-}
-
-static void VFilter8i(uint8_t* u, uint8_t* v, int stride,
-                      int thresh, int ithresh, int hev_thresh) {
-  FilterLoop24(u + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh);
-  FilterLoop24(v + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh);
-}
-
-static void HFilter8i(uint8_t* u, uint8_t* v, int stride,
-                      int thresh, int ithresh, int hev_thresh) {
-  FilterLoop24(u + 4, 1, stride, 8, thresh, ithresh, hev_thresh);
-  FilterLoop24(v + 4, 1, stride, 8, thresh, ithresh, hev_thresh);
-}
-
-#undef MUL
-
-//------------------------------------------------------------------------------
-// Simple In-loop filtering (Paragraph 15.2)
-
-static void SimpleVFilter16(uint8_t* p, int stride, int thresh) {
-  int i;
-  const int thresh2 = 2 * thresh + 1;
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
-  uint8_t* p1 = p - stride;
-  __asm__ volatile (
-    ".set      push                                      \n\t"
-    ".set      noreorder                                 \n\t"
-    "li        %[i],        16                           \n\t"
-  "0:                                                    \n\t"
-    "negu      %[temp4],    %[stride]                    \n\t"
-    "sll       %[temp5],    %[temp4],       1            \n\t"
-    "lbu       %[temp2],    0(%[p])                      \n\t"
-    "lbux      %[temp3],    %[stride](%[p])              \n\t"
-    "lbux      %[temp1],    %[temp4](%[p])               \n\t"
-    "lbux      %[temp0],    %[temp5](%[p])               \n\t"
-    "subu      %[temp7],    %[temp1],       %[temp2]     \n\t"
-    "subu      %[temp6],    %[temp0],       %[temp3]     \n\t"
-    "absq_s.w  %[temp4],    %[temp7]                     \n\t"
-    "absq_s.w  %[temp5],    %[temp6]                     \n\t"
-    "sll       %[temp4],    %[temp4],       2            \n\t"
-    "subu      %[temp5],    %[temp5],       %[thresh2]   \n\t"
-    "addu      %[temp5],    %[temp4],       %[temp5]     \n\t"
-    "negu      %[temp8],    %[temp7]                     \n\t"
-    "bgtz      %[temp5],    1f                           \n\t"
-    " addiu    %[i],        %[i],           -1           \n\t"
-    "sll       %[temp4],    %[temp8],       1            \n\t"
-    "shll_s.w  %[temp5],    %[temp6],       24           \n\t"
-    "addu      %[temp3],    %[temp4],       %[temp8]     \n\t"
-    "sra       %[temp5],    %[temp5],       24           \n\t"
-    "addu      %[temp3],    %[temp3],       %[temp5]     \n\t"
-    "addiu     %[temp7],    %[temp3],       3            \n\t"
-    "sra       %[temp7],    %[temp7],       3            \n\t"
-    "shra_r.w  %[temp8],    %[temp3],       3            \n\t"
-    "shll_s.w  %[temp0],    %[temp7],       27           \n\t"
-    "shll_s.w  %[temp4],    %[temp8],       27           \n\t"
-    "sra       %[temp0],    %[temp0],       27           \n\t"
-    "sra       %[temp4],    %[temp4],       27           \n\t"
-    "addu      %[temp7],    %[temp1],       %[temp0]     \n\t"
-    "subu      %[temp2],    %[temp2],       %[temp4]     \n\t"
-    "lbux      %[temp3],    %[temp7](%[VP8kclip1])       \n\t"
-    "lbux      %[temp4],    %[temp2](%[VP8kclip1])       \n\t"
-    "sb        %[temp3],    0(%[p1])                     \n\t"
-    "sb        %[temp4],    0(%[p])                      \n\t"
-  "1:                                                    \n\t"
-    "addiu     %[p1],       %[p1],          1            \n\t"
-    "bgtz      %[i],        0b                           \n\t"
-    " addiu    %[p],        %[p],           1            \n\t"
-    " .set     pop                                       \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [p]"+&r"(p), [i]"=&r"(i), [p1]"+&r"(p1)
-    : [stride]"r"(stride), [VP8kclip1]"r"(VP8kclip1), [thresh2]"r"(thresh2)
-    : "memory"
-  );
-}
-
-// TEMP0 = SRC[A + A1 * BPS]
-// TEMP1 = SRC[B + B1 * BPS]
-// TEMP2 = SRC[C + C1 * BPS]
-// TEMP3 = SRC[D + D1 * BPS]
-#define LOAD_4_BYTES(TEMP0, TEMP1, TEMP2, TEMP3,                               \
-                     A, A1, B, B1, C, C1, D, D1, SRC)                          \
-  "lbu      %[" #TEMP0 "],   " #A "+" #A1 "*" XSTR(BPS) "(%[" #SRC "]) \n\t"   \
-  "lbu      %[" #TEMP1 "],   " #B "+" #B1 "*" XSTR(BPS) "(%[" #SRC "]) \n\t"   \
-  "lbu      %[" #TEMP2 "],   " #C "+" #C1 "*" XSTR(BPS) "(%[" #SRC "]) \n\t"   \
-  "lbu      %[" #TEMP3 "],   " #D "+" #D1 "*" XSTR(BPS) "(%[" #SRC "]) \n\t"   \
-
-static void SimpleHFilter16(uint8_t* p, int stride, int thresh) {
-  int i;
-  const int thresh2 = 2 * thresh + 1;
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
-  __asm__ volatile (
-    ".set      push                                     \n\t"
-    ".set      noreorder                                \n\t"
-    "li        %[i],       16                           \n\t"
-  "0:                                                   \n\t"
-    LOAD_4_BYTES(temp0, temp1, temp2, temp3, -2, 0, -1, 0, 0, 0, 1, 0, p)
-    "subu      %[temp7],    %[temp1],       %[temp2]    \n\t"
-    "subu      %[temp6],    %[temp0],       %[temp3]    \n\t"
-    "absq_s.w  %[temp4],    %[temp7]                    \n\t"
-    "absq_s.w  %[temp5],    %[temp6]                    \n\t"
-    "sll       %[temp4],    %[temp4],       2           \n\t"
-    "addu      %[temp5],    %[temp4],       %[temp5]    \n\t"
-    "subu      %[temp5],    %[temp5],       %[thresh2]  \n\t"
-    "negu      %[temp8],    %[temp7]                    \n\t"
-    "bgtz      %[temp5],    1f                          \n\t"
-    " addiu    %[i],        %[i],           -1          \n\t"
-    "sll       %[temp4],    %[temp8],       1           \n\t"
-    "shll_s.w  %[temp5],    %[temp6],       24          \n\t"
-    "addu      %[temp3],    %[temp4],       %[temp8]    \n\t"
-    "sra       %[temp5],    %[temp5],       24          \n\t"
-    "addu      %[temp3],    %[temp3],       %[temp5]    \n\t"
-    "addiu     %[temp7],    %[temp3],       3           \n\t"
-    "sra       %[temp7],    %[temp7],       3           \n\t"
-    "shra_r.w  %[temp8],    %[temp3],       3           \n\t"
-    "shll_s.w  %[temp0],    %[temp7],       27          \n\t"
-    "shll_s.w  %[temp4],    %[temp8],       27          \n\t"
-    "sra       %[temp0],    %[temp0],       27          \n\t"
-    "sra       %[temp4],    %[temp4],       27          \n\t"
-    "addu      %[temp7],    %[temp1],       %[temp0]    \n\t"
-    "subu      %[temp2],    %[temp2],       %[temp4]    \n\t"
-    "lbux      %[temp3],    %[temp7](%[VP8kclip1])      \n\t"
-    "lbux      %[temp4],    %[temp2](%[VP8kclip1])      \n\t"
-    "sb        %[temp3],    -1(%[p])                    \n\t"
-    "sb        %[temp4],    0(%[p])                     \n\t"
-  "1:                                                   \n\t"
-    "bgtz      %[i],        0b                          \n\t"
-    " addu     %[p],        %[p],           %[stride]   \n\t"
-    ".set      pop                                      \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [p]"+&r"(p), [i]"=&r"(i)
-    : [stride]"r"(stride), [VP8kclip1]"r"(VP8kclip1), [thresh2]"r"(thresh2)
-    : "memory"
-  );
-}
-
-static void SimpleVFilter16i(uint8_t* p, int stride, int thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4 * stride;
-    SimpleVFilter16(p, stride, thresh);
-  }
-}
-
-static void SimpleHFilter16i(uint8_t* p, int stride, int thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4;
-    SimpleHFilter16(p, stride, thresh);
-  }
-}
-
-// DST[A * BPS]     = TEMP0
-// DST[B + C * BPS] = TEMP1
-#define STORE_8_BYTES(TEMP0, TEMP1, A, B, C, DST)                              \
-  "usw    %[" #TEMP0 "],   " #A "*" XSTR(BPS) "(%[" #DST "])         \n\t"     \
-  "usw    %[" #TEMP1 "],   " #B "+" #C "*" XSTR(BPS) "(%[" #DST "])  \n\t"
-
-static void VE4(uint8_t* dst) {    // vertical
-  const uint8_t* top = dst - BPS;
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6;
-  __asm__ volatile (
-    "ulw             %[temp0],   -1(%[top])              \n\t"
-    "ulh             %[temp1],   3(%[top])               \n\t"
-    "preceu.ph.qbr   %[temp2],   %[temp0]                \n\t"
-    "preceu.ph.qbl   %[temp3],   %[temp0]                \n\t"
-    "preceu.ph.qbr   %[temp4],   %[temp1]                \n\t"
-    "packrl.ph       %[temp5],   %[temp3],    %[temp2]   \n\t"
-    "packrl.ph       %[temp6],   %[temp4],    %[temp3]   \n\t"
-    "shll.ph         %[temp5],   %[temp5],    1          \n\t"
-    "shll.ph         %[temp6],   %[temp6],    1          \n\t"
-    "addq.ph         %[temp2],   %[temp5],    %[temp2]   \n\t"
-    "addq.ph         %[temp6],   %[temp6],    %[temp4]   \n\t"
-    "addq.ph         %[temp2],   %[temp2],    %[temp3]   \n\t"
-    "addq.ph         %[temp6],   %[temp6],    %[temp3]   \n\t"
-    "shra_r.ph       %[temp2],   %[temp2],    2          \n\t"
-    "shra_r.ph       %[temp6],   %[temp6],    2          \n\t"
-    "precr.qb.ph     %[temp4],   %[temp6],    %[temp2]   \n\t"
-    STORE_8_BYTES(temp4, temp4, 0, 0, 1, dst)
-    STORE_8_BYTES(temp4, temp4, 2, 0, 3, dst)
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void DC4(uint8_t* dst) {   // DC
-  int temp0, temp1, temp2, temp3, temp4;
-  __asm__ volatile (
-    "ulw          %[temp0],   -1*" XSTR(BPS) "(%[dst]) \n\t"
-    LOAD_4_BYTES(temp1, temp2, temp3, temp4, -1, 0, -1, 1, -1, 2, -1, 3, dst)
-    "ins          %[temp1],   %[temp2],    8,     8    \n\t"
-    "ins          %[temp1],   %[temp3],    16,    8    \n\t"
-    "ins          %[temp1],   %[temp4],    24,    8    \n\t"
-    "raddu.w.qb   %[temp0],   %[temp0]                 \n\t"
-    "raddu.w.qb   %[temp1],   %[temp1]                 \n\t"
-    "addu         %[temp0],   %[temp0],    %[temp1]    \n\t"
-    "shra_r.w     %[temp0],   %[temp0],    3           \n\t"
-    "replv.qb     %[temp0],   %[temp0]                 \n\t"
-    STORE_8_BYTES(temp0, temp0, 0, 0, 1, dst)
-    STORE_8_BYTES(temp0, temp0, 2, 0, 3, dst)
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4)
-    : [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void RD4(uint8_t* dst) {   // Down-right
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8;
-  __asm__ volatile (
-    LOAD_4_BYTES(temp0, temp1, temp2, temp3, -1, 0, -1, 1, -1, 2, -1, 3, dst)
-    "ulw            %[temp7],   -1-" XSTR(BPS) "(%[dst])       \n\t"
-    "ins            %[temp1],   %[temp0], 16, 16               \n\t"
-    "preceu.ph.qbr  %[temp5],   %[temp7]                       \n\t"
-    "ins            %[temp2],   %[temp1], 16, 16               \n\t"
-    "preceu.ph.qbl  %[temp4],   %[temp7]                       \n\t"
-    "ins            %[temp3],   %[temp2], 16, 16               \n\t"
-    "shll.ph        %[temp2],   %[temp2], 1                    \n\t"
-    "addq.ph        %[temp3],   %[temp3], %[temp1]             \n\t"
-    "packrl.ph      %[temp6],   %[temp5], %[temp1]             \n\t"
-    "addq.ph        %[temp3],   %[temp3], %[temp2]             \n\t"
-    "addq.ph        %[temp1],   %[temp1], %[temp5]             \n\t"
-    "shll.ph        %[temp6],   %[temp6], 1                    \n\t"
-    "addq.ph        %[temp1],   %[temp1], %[temp6]             \n\t"
-    "packrl.ph      %[temp0],   %[temp4], %[temp5]             \n\t"
-    "addq.ph        %[temp8],   %[temp5], %[temp4]             \n\t"
-    "shra_r.ph      %[temp3],   %[temp3], 2                    \n\t"
-    "shll.ph        %[temp0],   %[temp0], 1                    \n\t"
-    "shra_r.ph      %[temp1],   %[temp1], 2                    \n\t"
-    "addq.ph        %[temp8],   %[temp0], %[temp8]             \n\t"
-    "lbu            %[temp5],   3-" XSTR(BPS) "(%[dst])        \n\t"
-    "precrq.ph.w    %[temp7],   %[temp7], %[temp7]             \n\t"
-    "shra_r.ph      %[temp8],   %[temp8], 2                    \n\t"
-    "ins            %[temp7],   %[temp5], 0,  8                \n\t"
-    "precr.qb.ph    %[temp2],   %[temp1], %[temp3]             \n\t"
-    "raddu.w.qb     %[temp4],   %[temp7]                       \n\t"
-    "precr.qb.ph    %[temp6],   %[temp8], %[temp1]             \n\t"
-    "shra_r.w       %[temp4],   %[temp4], 2                    \n\t"
-    STORE_8_BYTES(temp2, temp6, 3, 0, 1, dst)
-    "prepend        %[temp2],   %[temp8], 8                    \n\t"
-    "prepend        %[temp6],   %[temp4], 8                    \n\t"
-    STORE_8_BYTES(temp2, temp6, 2, 0, 0, dst)
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8)
-    : [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-// TEMP0 = SRC[A * BPS]
-// TEMP1 = SRC[B + C * BPS]
-#define LOAD_8_BYTES(TEMP0, TEMP1, A, B, C, SRC)                               \
-  "ulw    %[" #TEMP0 "],   " #A "*" XSTR(BPS) "(%[" #SRC "])         \n\t"     \
-  "ulw    %[" #TEMP1 "],   " #B "+" #C "*" XSTR(BPS) "(%[" #SRC "])  \n\t"
-
-static void LD4(uint8_t* dst) {   // Down-Left
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8, temp9;
-  __asm__ volatile (
-    LOAD_8_BYTES(temp0, temp1, -1, 4, -1, dst)
-    "preceu.ph.qbl   %[temp2],    %[temp0]                     \n\t"
-    "preceu.ph.qbr   %[temp3],    %[temp0]                     \n\t"
-    "preceu.ph.qbr   %[temp4],    %[temp1]                     \n\t"
-    "preceu.ph.qbl   %[temp5],    %[temp1]                     \n\t"
-    "packrl.ph       %[temp6],    %[temp2],    %[temp3]        \n\t"
-    "packrl.ph       %[temp7],    %[temp4],    %[temp2]        \n\t"
-    "packrl.ph       %[temp8],    %[temp5],    %[temp4]        \n\t"
-    "shll.ph         %[temp6],    %[temp6],    1               \n\t"
-    "addq.ph         %[temp9],    %[temp2],    %[temp6]        \n\t"
-    "shll.ph         %[temp7],    %[temp7],    1               \n\t"
-    "addq.ph         %[temp9],    %[temp9],    %[temp3]        \n\t"
-    "shll.ph         %[temp8],    %[temp8],    1               \n\t"
-    "shra_r.ph       %[temp9],    %[temp9],    2               \n\t"
-    "addq.ph         %[temp3],    %[temp4],    %[temp7]        \n\t"
-    "addq.ph         %[temp0],    %[temp5],    %[temp8]        \n\t"
-    "addq.ph         %[temp3],    %[temp3],    %[temp2]        \n\t"
-    "addq.ph         %[temp0],    %[temp0],    %[temp4]        \n\t"
-    "shra_r.ph       %[temp3],    %[temp3],    2               \n\t"
-    "shra_r.ph       %[temp0],    %[temp0],    2               \n\t"
-    "srl             %[temp1],    %[temp1],    24              \n\t"
-    "sll             %[temp1],    %[temp1],    1               \n\t"
-    "raddu.w.qb      %[temp5],    %[temp5]                     \n\t"
-    "precr.qb.ph     %[temp9],    %[temp3],    %[temp9]        \n\t"
-    "precr.qb.ph     %[temp3],    %[temp0],    %[temp3]        \n\t"
-    "addu            %[temp1],    %[temp1],    %[temp5]        \n\t"
-    "shra_r.w        %[temp1],    %[temp1],    2               \n\t"
-    STORE_8_BYTES(temp9, temp3, 0, 0, 2, dst)
-    "prepend         %[temp9],    %[temp0],    8               \n\t"
-    "prepend         %[temp3],    %[temp1],    8               \n\t"
-    STORE_8_BYTES(temp9, temp3, 1, 0, 3, dst)
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9)
-    : [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-//------------------------------------------------------------------------------
-// Chroma
-
-static void DC8uv(uint8_t* dst) {     // DC
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8, temp9;
-  __asm__ volatile (
-    LOAD_8_BYTES(temp0, temp1, -1, 4, -1, dst)
-    LOAD_4_BYTES(temp2, temp3, temp4, temp5, -1, 0, -1, 1, -1, 2, -1, 3, dst)
-    LOAD_4_BYTES(temp6, temp7, temp8, temp9, -1, 4, -1, 5, -1, 6, -1, 7, dst)
-    "raddu.w.qb   %[temp0],   %[temp0]                   \n\t"
-    "raddu.w.qb   %[temp1],   %[temp1]                   \n\t"
-    "addu         %[temp2],   %[temp2],    %[temp3]      \n\t"
-    "addu         %[temp4],   %[temp4],    %[temp5]      \n\t"
-    "addu         %[temp6],   %[temp6],    %[temp7]      \n\t"
-    "addu         %[temp8],   %[temp8],    %[temp9]      \n\t"
-    "addu         %[temp0],   %[temp0],    %[temp1]      \n\t"
-    "addu         %[temp2],   %[temp2],    %[temp4]      \n\t"
-    "addu         %[temp6],   %[temp6],    %[temp8]      \n\t"
-    "addu         %[temp0],   %[temp0],    %[temp2]      \n\t"
-    "addu         %[temp0],   %[temp0],    %[temp6]      \n\t"
-    "shra_r.w     %[temp0],   %[temp0],    4             \n\t"
-    "replv.qb     %[temp0],   %[temp0]                   \n\t"
-    STORE_8_BYTES(temp0, temp0, 0, 4, 0, dst)
-    STORE_8_BYTES(temp0, temp0, 1, 4, 1, dst)
-    STORE_8_BYTES(temp0, temp0, 2, 4, 2, dst)
-    STORE_8_BYTES(temp0, temp0, 3, 4, 3, dst)
-    STORE_8_BYTES(temp0, temp0, 4, 4, 4, dst)
-    STORE_8_BYTES(temp0, temp0, 5, 4, 5, dst)
-    STORE_8_BYTES(temp0, temp0, 6, 4, 6, dst)
-    STORE_8_BYTES(temp0, temp0, 7, 4, 7, dst)
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9)
-    : [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void DC8uvNoLeft(uint8_t* dst) {   // DC with no left samples
-  int temp0, temp1;
-  __asm__ volatile (
-    LOAD_8_BYTES(temp0, temp1, -1, 4, -1, dst)
-    "raddu.w.qb   %[temp0],   %[temp0]                   \n\t"
-    "raddu.w.qb   %[temp1],   %[temp1]                   \n\t"
-    "addu         %[temp0],   %[temp0],    %[temp1]      \n\t"
-    "shra_r.w     %[temp0],   %[temp0],    3             \n\t"
-    "replv.qb     %[temp0],   %[temp0]                   \n\t"
-    STORE_8_BYTES(temp0, temp0, 0, 4, 0, dst)
-    STORE_8_BYTES(temp0, temp0, 1, 4, 1, dst)
-    STORE_8_BYTES(temp0, temp0, 2, 4, 2, dst)
-    STORE_8_BYTES(temp0, temp0, 3, 4, 3, dst)
-    STORE_8_BYTES(temp0, temp0, 4, 4, 4, dst)
-    STORE_8_BYTES(temp0, temp0, 5, 4, 5, dst)
-    STORE_8_BYTES(temp0, temp0, 6, 4, 6, dst)
-    STORE_8_BYTES(temp0, temp0, 7, 4, 7, dst)
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1)
-    : [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void DC8uvNoTop(uint8_t* dst) {  // DC with no top samples
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8;
-  __asm__ volatile (
-    LOAD_4_BYTES(temp2, temp3, temp4, temp5, -1, 0, -1, 1, -1, 2, -1, 3, dst)
-    LOAD_4_BYTES(temp6, temp7, temp8, temp1, -1, 4, -1, 5, -1, 6, -1, 7, dst)
-    "addu         %[temp2],   %[temp2],    %[temp3]      \n\t"
-    "addu         %[temp4],   %[temp4],    %[temp5]      \n\t"
-    "addu         %[temp6],   %[temp6],    %[temp7]      \n\t"
-    "addu         %[temp8],   %[temp8],    %[temp1]      \n\t"
-    "addu         %[temp2],   %[temp2],    %[temp4]      \n\t"
-    "addu         %[temp6],   %[temp6],    %[temp8]      \n\t"
-    "addu         %[temp0],   %[temp6],    %[temp2]      \n\t"
-    "shra_r.w     %[temp0],   %[temp0],    3             \n\t"
-    "replv.qb     %[temp0],   %[temp0]                   \n\t"
-    STORE_8_BYTES(temp0, temp0, 0, 4, 0, dst)
-    STORE_8_BYTES(temp0, temp0, 1, 4, 1, dst)
-    STORE_8_BYTES(temp0, temp0, 2, 4, 2, dst)
-    STORE_8_BYTES(temp0, temp0, 3, 4, 3, dst)
-    STORE_8_BYTES(temp0, temp0, 4, 4, 4, dst)
-    STORE_8_BYTES(temp0, temp0, 5, 4, 5, dst)
-    STORE_8_BYTES(temp0, temp0, 6, 4, 6, dst)
-    STORE_8_BYTES(temp0, temp0, 7, 4, 7, dst)
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8)
-    : [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-#undef LOAD_8_BYTES
-#undef STORE_8_BYTES
-#undef LOAD_4_BYTES
-
-#define CLIPPING(SIZE)                                                         \
-  "preceu.ph.qbl   %[temp2],   %[temp0]                  \n\t"                 \
-  "preceu.ph.qbr   %[temp0],   %[temp0]                  \n\t"                 \
-".if " #SIZE " == 8                                      \n\t"                 \
-  "preceu.ph.qbl   %[temp3],   %[temp1]                  \n\t"                 \
-  "preceu.ph.qbr   %[temp1],   %[temp1]                  \n\t"                 \
-".endif                                                  \n\t"                 \
-  "addu.ph         %[temp2],   %[temp2],   %[dst_1]      \n\t"                 \
-  "addu.ph         %[temp0],   %[temp0],   %[dst_1]      \n\t"                 \
-".if " #SIZE " == 8                                      \n\t"                 \
-  "addu.ph         %[temp3],   %[temp3],   %[dst_1]      \n\t"                 \
-  "addu.ph         %[temp1],   %[temp1],   %[dst_1]      \n\t"                 \
-".endif                                                  \n\t"                 \
-  "shll_s.ph       %[temp2],   %[temp2],   7             \n\t"                 \
-  "shll_s.ph       %[temp0],   %[temp0],   7             \n\t"                 \
-".if " #SIZE " == 8                                      \n\t"                 \
-  "shll_s.ph       %[temp3],   %[temp3],   7             \n\t"                 \
-  "shll_s.ph       %[temp1],   %[temp1],   7             \n\t"                 \
-".endif                                                  \n\t"                 \
-  "precrqu_s.qb.ph %[temp0],   %[temp2],   %[temp0]      \n\t"                 \
-".if " #SIZE " == 8                                      \n\t"                 \
-  "precrqu_s.qb.ph %[temp1],   %[temp3],   %[temp1]      \n\t"                 \
-".endif                                                  \n\t"
-
-
-#define CLIP_8B_TO_DST(DST, TOP, SIZE) do {                                    \
-  int dst_1 = ((int)(DST)[-1] << 16) + (DST)[-1];                              \
-  int temp0, temp1, temp2, temp3;                                              \
-  __asm__ volatile (                                                           \
-  ".if " #SIZE " < 8                                     \n\t"                 \
-    "ulw             %[temp0],   0(%[top])               \n\t"                 \
-    "subu.ph         %[dst_1],   %[dst_1],    %[top_1]   \n\t"                 \
-    CLIPPING(4)                                                                \
-    "usw             %[temp0],   0(%[dst])               \n\t"                 \
-  ".else                                                 \n\t"                 \
-    "ulw             %[temp0],   0(%[top])               \n\t"                 \
-    "ulw             %[temp1],   4(%[top])               \n\t"                 \
-    "subu.ph         %[dst_1],   %[dst_1],    %[top_1]   \n\t"                 \
-    CLIPPING(8)                                                                \
-    "usw             %[temp0],   0(%[dst])               \n\t"                 \
-    "usw             %[temp1],   4(%[dst])               \n\t"                 \
-  ".if " #SIZE " == 16                                   \n\t"                 \
-    "ulw             %[temp0],   8(%[top])               \n\t"                 \
-    "ulw             %[temp1],   12(%[top])              \n\t"                 \
-    CLIPPING(8)                                                                \
-    "usw             %[temp0],   8(%[dst])               \n\t"                 \
-    "usw             %[temp1],   12(%[dst])              \n\t"                 \
-  ".endif                                                \n\t"                 \
-  ".endif                                                \n\t"                 \
-    : [dst_1]"+&r"(dst_1), [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),           \
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3)                                 \
-    : [top_1]"r"(top_1), [top]"r"((TOP)), [dst]"r"((DST))                      \
-    : "memory"                                                                 \
-  );                                                                           \
-} while (0)
-
-#define CLIP_TO_DST(DST, SIZE) do {                                            \
-  int y;                                                                       \
-  const uint8_t* top = (DST) - BPS;                                            \
-  const int top_1 = ((int)top[-1] << 16) + top[-1];                            \
-  for (y = 0; y < (SIZE); ++y) {                                               \
-    CLIP_8B_TO_DST((DST), top, (SIZE));                                        \
-    (DST) += BPS;                                                              \
-  }                                                                            \
-} while (0)
-
-#define TRUE_MOTION(DST, SIZE)                                                 \
-static void TrueMotion##SIZE(uint8_t* (DST)) {                                 \
-  CLIP_TO_DST((DST), (SIZE));                                                  \
-}
-
-TRUE_MOTION(dst, 4)
-TRUE_MOTION(dst, 8)
-TRUE_MOTION(dst, 16)
-
-#undef TRUE_MOTION
-#undef CLIP_TO_DST
-#undef CLIP_8B_TO_DST
-#undef CLIPPING
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8DspInitMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitMIPSdspR2(void) {
-  VP8TransformDC = TransformDC;
-  VP8TransformAC3 = TransformAC3;
-  VP8Transform = TransformTwo;
-
-  VP8VFilter16 = VFilter16;
-  VP8HFilter16 = HFilter16;
-  VP8VFilter8 = VFilter8;
-  VP8HFilter8 = HFilter8;
-  VP8VFilter16i = VFilter16i;
-  VP8HFilter16i = HFilter16i;
-  VP8VFilter8i = VFilter8i;
-  VP8HFilter8i = HFilter8i;
-  VP8SimpleVFilter16 = SimpleVFilter16;
-  VP8SimpleHFilter16 = SimpleHFilter16;
-  VP8SimpleVFilter16i = SimpleVFilter16i;
-  VP8SimpleHFilter16i = SimpleHFilter16i;
-
-  VP8PredLuma4[0] = DC4;
-  VP8PredLuma4[1] = TrueMotion4;
-  VP8PredLuma4[2] = VE4;
-  VP8PredLuma4[4] = RD4;
-  VP8PredLuma4[6] = LD4;
-
-  VP8PredChroma8[0] = DC8uv;
-  VP8PredChroma8[1] = TrueMotion8;
-  VP8PredChroma8[4] = DC8uvNoTop;
-  VP8PredChroma8[5] = DC8uvNoLeft;
-
-  VP8PredLuma16[1] = TrueMotion16;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(VP8DspInitMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/dec_msa.c b/ios/Pods/libwebp/src/dsp/dec_msa.c
deleted file mode 100644
index 8090622..0000000
--- a/ios/Pods/libwebp/src/dsp/dec_msa.c
+++ /dev/null
@@ -1,1020 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MSA version of dsp functions
-//
-// Author(s):  Prashant Patil   (prashant.patil@imgtec.com)
-
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MSA)
-
-#include "src/dsp/msa_macro.h"
-
-//------------------------------------------------------------------------------
-// Transforms
-
-#define IDCT_1D_W(in0, in1, in2, in3, out0, out1, out2, out3) {  \
-  v4i32 a1_m, b1_m, c1_m, d1_m;                                  \
-  v4i32 c_tmp1_m, c_tmp2_m, d_tmp1_m, d_tmp2_m;                  \
-  const v4i32 cospi8sqrt2minus1 = __msa_fill_w(20091);           \
-  const v4i32 sinpi8sqrt2 = __msa_fill_w(35468);                 \
-                                                                 \
-  a1_m = in0 + in2;                                              \
-  b1_m = in0 - in2;                                              \
-  c_tmp1_m = (in1 * sinpi8sqrt2) >> 16;                          \
-  c_tmp2_m = in3 + ((in3 * cospi8sqrt2minus1) >> 16);            \
-  c1_m = c_tmp1_m - c_tmp2_m;                                    \
-  d_tmp1_m = in1 + ((in1 * cospi8sqrt2minus1) >> 16);            \
-  d_tmp2_m = (in3 * sinpi8sqrt2) >> 16;                          \
-  d1_m = d_tmp1_m + d_tmp2_m;                                    \
-  BUTTERFLY_4(a1_m, b1_m, c1_m, d1_m, out0, out1, out2, out3);   \
-}
-#define MULT1(a) ((((a) * 20091) >> 16) + (a))
-#define MULT2(a) (((a) * 35468) >> 16)
-
-static void TransformOne(const int16_t* in, uint8_t* dst) {
-  v8i16 input0, input1;
-  v4i32 in0, in1, in2, in3, hz0, hz1, hz2, hz3, vt0, vt1, vt2, vt3;
-  v4i32 res0, res1, res2, res3;
-  const v16i8 zero = { 0 };
-  v16i8 dest0, dest1, dest2, dest3;
-
-  LD_SH2(in, 8, input0, input1);
-  UNPCK_SH_SW(input0, in0, in1);
-  UNPCK_SH_SW(input1, in2, in3);
-  IDCT_1D_W(in0, in1, in2, in3, hz0, hz1, hz2, hz3);
-  TRANSPOSE4x4_SW_SW(hz0, hz1, hz2, hz3, hz0, hz1, hz2, hz3);
-  IDCT_1D_W(hz0, hz1, hz2, hz3, vt0, vt1, vt2, vt3);
-  SRARI_W4_SW(vt0, vt1, vt2, vt3, 3);
-  TRANSPOSE4x4_SW_SW(vt0, vt1, vt2, vt3, vt0, vt1, vt2, vt3);
-  LD_SB4(dst, BPS, dest0, dest1, dest2, dest3);
-  ILVR_B4_SW(zero, dest0, zero, dest1, zero, dest2, zero, dest3,
-             res0, res1, res2, res3);
-  ILVR_H4_SW(zero, res0, zero, res1, zero, res2, zero, res3,
-             res0, res1, res2, res3);
-  ADD4(res0, vt0, res1, vt1, res2, vt2, res3, vt3, res0, res1, res2, res3);
-  CLIP_SW4_0_255(res0, res1, res2, res3);
-  PCKEV_B2_SW(res0, res1, res2, res3, vt0, vt1);
-  res0 = (v4i32)__msa_pckev_b((v16i8)vt0, (v16i8)vt1);
-  ST4x4_UB(res0, res0, 3, 2, 1, 0, dst, BPS);
-}
-
-static void TransformTwo(const int16_t* in, uint8_t* dst, int do_two) {
-  TransformOne(in, dst);
-  if (do_two) {
-    TransformOne(in + 16, dst + 4);
-  }
-}
-
-static void TransformWHT(const int16_t* in, int16_t* out) {
-  v8i16 input0, input1;
-  const v8i16 mask0 = { 0, 1, 2, 3, 8, 9, 10, 11 };
-  const v8i16 mask1 = { 4, 5, 6, 7, 12, 13, 14, 15 };
-  const v8i16 mask2 = { 0, 4, 8, 12, 1, 5, 9, 13 };
-  const v8i16 mask3 = { 3, 7, 11, 15, 2, 6, 10, 14 };
-  v8i16 tmp0, tmp1, tmp2, tmp3;
-  v8i16 out0, out1;
-
-  LD_SH2(in, 8, input0, input1);
-  input1 = SLDI_SH(input1, input1, 8);
-  tmp0 = input0 + input1;
-  tmp1 = input0 - input1;
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3);
-  out0 = tmp2 + tmp3;
-  out1 = tmp2 - tmp3;
-  VSHF_H2_SH(out0, out1, out0, out1, mask2, mask3, input0, input1);
-  tmp0 = input0 + input1;
-  tmp1 = input0 - input1;
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3);
-  tmp0 = tmp2 + tmp3;
-  tmp1 = tmp2 - tmp3;
-  ADDVI_H2_SH(tmp0, 3, tmp1, 3, out0, out1);
-  SRAI_H2_SH(out0, out1, 3);
-  out[0] = __msa_copy_s_h(out0, 0);
-  out[16] = __msa_copy_s_h(out0, 4);
-  out[32] = __msa_copy_s_h(out1, 0);
-  out[48] = __msa_copy_s_h(out1, 4);
-  out[64] = __msa_copy_s_h(out0, 1);
-  out[80] = __msa_copy_s_h(out0, 5);
-  out[96] = __msa_copy_s_h(out1, 1);
-  out[112] = __msa_copy_s_h(out1, 5);
-  out[128] = __msa_copy_s_h(out0, 2);
-  out[144] = __msa_copy_s_h(out0, 6);
-  out[160] = __msa_copy_s_h(out1, 2);
-  out[176] = __msa_copy_s_h(out1, 6);
-  out[192] = __msa_copy_s_h(out0, 3);
-  out[208] = __msa_copy_s_h(out0, 7);
-  out[224] = __msa_copy_s_h(out1, 3);
-  out[240] = __msa_copy_s_h(out1, 7);
-}
-
-static void TransformDC(const int16_t* in, uint8_t* dst) {
-  const int DC = (in[0] + 4) >> 3;
-  const v8i16 tmp0 = __msa_fill_h(DC);
-  ADDBLK_ST4x4_UB(tmp0, tmp0, tmp0, tmp0, dst, BPS);
-}
-
-static void TransformAC3(const int16_t* in, uint8_t* dst) {
-  const int a = in[0] + 4;
-  const int c4 = MULT2(in[4]);
-  const int d4 = MULT1(in[4]);
-  const int in2 = MULT2(in[1]);
-  const int in3 = MULT1(in[1]);
-  v4i32 tmp0 = { 0 };
-  v4i32 out0 = __msa_fill_w(a + d4);
-  v4i32 out1 = __msa_fill_w(a + c4);
-  v4i32 out2 = __msa_fill_w(a - c4);
-  v4i32 out3 = __msa_fill_w(a - d4);
-  v4i32 res0, res1, res2, res3;
-  const v4i32 zero = { 0 };
-  v16u8 dest0, dest1, dest2, dest3;
-
-  INSERT_W4_SW(in3, in2, -in2, -in3, tmp0);
-  ADD4(out0, tmp0, out1, tmp0, out2, tmp0, out3, tmp0,
-       out0, out1, out2, out3);
-  SRAI_W4_SW(out0, out1, out2, out3, 3);
-  LD_UB4(dst, BPS, dest0, dest1, dest2, dest3);
-  ILVR_B4_SW(zero, dest0, zero, dest1, zero, dest2, zero, dest3,
-             res0, res1, res2, res3);
-  ILVR_H4_SW(zero, res0, zero, res1, zero, res2, zero, res3,
-             res0, res1, res2, res3);
-  ADD4(res0, out0, res1, out1, res2, out2, res3, out3, res0, res1, res2, res3);
-  CLIP_SW4_0_255(res0, res1, res2, res3);
-  PCKEV_B2_SW(res0, res1, res2, res3, out0, out1);
-  res0 = (v4i32)__msa_pckev_b((v16i8)out0, (v16i8)out1);
-  ST4x4_UB(res0, res0, 3, 2, 1, 0, dst, BPS);
-}
-
-//------------------------------------------------------------------------------
-// Edge filtering functions
-
-#define FLIP_SIGN2(in0, in1, out0, out1) {  \
-  out0 = (v16i8)__msa_xori_b(in0, 0x80);    \
-  out1 = (v16i8)__msa_xori_b(in1, 0x80);    \
-}
-
-#define FLIP_SIGN4(in0, in1, in2, in3, out0, out1, out2, out3) {  \
-  FLIP_SIGN2(in0, in1, out0, out1);                               \
-  FLIP_SIGN2(in2, in3, out2, out3);                               \
-}
-
-#define FILT_VAL(q0_m, p0_m, mask, filt) do {  \
-  v16i8 q0_sub_p0;                             \
-  q0_sub_p0 = __msa_subs_s_b(q0_m, p0_m);      \
-  filt = __msa_adds_s_b(filt, q0_sub_p0);      \
-  filt = __msa_adds_s_b(filt, q0_sub_p0);      \
-  filt = __msa_adds_s_b(filt, q0_sub_p0);      \
-  filt = filt & mask;                          \
-} while (0)
-
-#define FILT2(q_m, p_m, q, p) do {            \
-  u_r = SRAI_H(temp1, 7);                     \
-  u_r = __msa_sat_s_h(u_r, 7);                \
-  u_l = SRAI_H(temp3, 7);                     \
-  u_l = __msa_sat_s_h(u_l, 7);                \
-  u = __msa_pckev_b((v16i8)u_l, (v16i8)u_r);  \
-  q_m = __msa_subs_s_b(q_m, u);               \
-  p_m = __msa_adds_s_b(p_m, u);               \
-  q = __msa_xori_b((v16u8)q_m, 0x80);         \
-  p = __msa_xori_b((v16u8)p_m, 0x80);         \
-} while (0)
-
-#define LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev) do {  \
-  v16i8 p1_m, p0_m, q0_m, q1_m;                         \
-  v16i8 filt, t1, t2;                                   \
-  const v16i8 cnst4b = __msa_ldi_b(4);                  \
-  const v16i8 cnst3b = __msa_ldi_b(3);                  \
-                                                        \
-  FLIP_SIGN4(p1, p0, q0, q1, p1_m, p0_m, q0_m, q1_m);   \
-  filt = __msa_subs_s_b(p1_m, q1_m);                    \
-  filt = filt & hev;                                    \
-  FILT_VAL(q0_m, p0_m, mask, filt);                     \
-  t1 = __msa_adds_s_b(filt, cnst4b);                    \
-  t1 = SRAI_B(t1, 3);                                   \
-  t2 = __msa_adds_s_b(filt, cnst3b);                    \
-  t2 = SRAI_B(t2, 3);                                   \
-  q0_m = __msa_subs_s_b(q0_m, t1);                      \
-  q0 = __msa_xori_b((v16u8)q0_m, 0x80);                 \
-  p0_m = __msa_adds_s_b(p0_m, t2);                      \
-  p0 = __msa_xori_b((v16u8)p0_m, 0x80);                 \
-  filt = __msa_srari_b(t1, 1);                          \
-  hev = __msa_xori_b(hev, 0xff);                        \
-  filt = filt & hev;                                    \
-  q1_m = __msa_subs_s_b(q1_m, filt);                    \
-  q1 = __msa_xori_b((v16u8)q1_m, 0x80);                 \
-  p1_m = __msa_adds_s_b(p1_m, filt);                    \
-  p1 = __msa_xori_b((v16u8)p1_m, 0x80);                 \
-} while (0)
-
-#define LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev) do {  \
-  v16i8 p2_m, p1_m, p0_m, q2_m, q1_m, q0_m;                   \
-  v16i8 u, filt, t1, t2, filt_sign;                           \
-  v8i16 filt_r, filt_l, u_r, u_l;                             \
-  v8i16 temp0, temp1, temp2, temp3;                           \
-  const v16i8 cnst4b = __msa_ldi_b(4);                        \
-  const v16i8 cnst3b = __msa_ldi_b(3);                        \
-  const v8i16 cnst9h = __msa_ldi_h(9);                        \
-  const v8i16 cnst63h = __msa_ldi_h(63);                      \
-                                                              \
-  FLIP_SIGN4(p1, p0, q0, q1, p1_m, p0_m, q0_m, q1_m);         \
-  filt = __msa_subs_s_b(p1_m, q1_m);                          \
-  FILT_VAL(q0_m, p0_m, mask, filt);                           \
-  FLIP_SIGN2(p2, q2, p2_m, q2_m);                             \
-  t2 = filt & hev;                                            \
-  /* filt_val &= ~hev */                                      \
-  hev = __msa_xori_b(hev, 0xff);                              \
-  filt = filt & hev;                                          \
-  t1 = __msa_adds_s_b(t2, cnst4b);                            \
-  t1 = SRAI_B(t1, 3);                                         \
-  t2 = __msa_adds_s_b(t2, cnst3b);                            \
-  t2 = SRAI_B(t2, 3);                                         \
-  q0_m = __msa_subs_s_b(q0_m, t1);                            \
-  p0_m = __msa_adds_s_b(p0_m, t2);                            \
-  filt_sign = __msa_clti_s_b(filt, 0);                        \
-  ILVRL_B2_SH(filt_sign, filt, filt_r, filt_l);               \
-  /* update q2/p2 */                                          \
-  temp0 = filt_r * cnst9h;                                    \
-  temp1 = temp0 + cnst63h;                                    \
-  temp2 = filt_l * cnst9h;                                    \
-  temp3 = temp2 + cnst63h;                                    \
-  FILT2(q2_m, p2_m, q2, p2);                                  \
-  /* update q1/p1 */                                          \
-  temp1 = temp1 + temp0;                                      \
-  temp3 = temp3 + temp2;                                      \
-  FILT2(q1_m, p1_m, q1, p1);                                  \
-  /* update q0/p0 */                                          \
-  temp1 = temp1 + temp0;                                      \
-  temp3 = temp3 + temp2;                                      \
-  FILT2(q0_m, p0_m, q0, p0);                                  \
-} while (0)
-
-#define LPF_MASK_HEV(p3_in, p2_in, p1_in, p0_in,                 \
-                     q0_in, q1_in, q2_in, q3_in,                 \
-                     limit_in, b_limit_in, thresh_in,            \
-                     hev_out, mask_out) do {                     \
-  v16u8 p3_asub_p2_m, p2_asub_p1_m, p1_asub_p0_m, q1_asub_q0_m;  \
-  v16u8 p1_asub_q1_m, p0_asub_q0_m, q3_asub_q2_m, q2_asub_q1_m;  \
-  v16u8 flat_out;                                                \
-                                                                 \
-  /* absolute subtraction of pixel values */                     \
-  p3_asub_p2_m = __msa_asub_u_b(p3_in, p2_in);                   \
-  p2_asub_p1_m = __msa_asub_u_b(p2_in, p1_in);                   \
-  p1_asub_p0_m = __msa_asub_u_b(p1_in, p0_in);                   \
-  q1_asub_q0_m = __msa_asub_u_b(q1_in, q0_in);                   \
-  q2_asub_q1_m = __msa_asub_u_b(q2_in, q1_in);                   \
-  q3_asub_q2_m = __msa_asub_u_b(q3_in, q2_in);                   \
-  p0_asub_q0_m = __msa_asub_u_b(p0_in, q0_in);                   \
-  p1_asub_q1_m = __msa_asub_u_b(p1_in, q1_in);                   \
-  /* calculation of hev */                                       \
-  flat_out = __msa_max_u_b(p1_asub_p0_m, q1_asub_q0_m);          \
-  hev_out = (thresh_in < flat_out);                              \
-  /* calculation of mask */                                      \
-  p0_asub_q0_m = __msa_adds_u_b(p0_asub_q0_m, p0_asub_q0_m);     \
-  p1_asub_q1_m = SRAI_B(p1_asub_q1_m, 1);                        \
-  p0_asub_q0_m = __msa_adds_u_b(p0_asub_q0_m, p1_asub_q1_m);     \
-  mask_out = (b_limit_in < p0_asub_q0_m);                        \
-  mask_out = __msa_max_u_b(flat_out, mask_out);                  \
-  p3_asub_p2_m = __msa_max_u_b(p3_asub_p2_m, p2_asub_p1_m);      \
-  mask_out = __msa_max_u_b(p3_asub_p2_m, mask_out);              \
-  q2_asub_q1_m = __msa_max_u_b(q2_asub_q1_m, q3_asub_q2_m);      \
-  mask_out = __msa_max_u_b(q2_asub_q1_m, mask_out);              \
-  mask_out = (limit_in < mask_out);                              \
-  mask_out = __msa_xori_b(mask_out, 0xff);                       \
-} while (0)
-
-#define ST6x1_UB(in0, in0_idx, in1, in1_idx, pdst, stride) do { \
-  const uint16_t tmp0_h = __msa_copy_s_h((v8i16)in1, in1_idx);  \
-  const uint32_t tmp0_w = __msa_copy_s_w((v4i32)in0, in0_idx);  \
-  SW(tmp0_w, pdst);                                             \
-  SH(tmp0_h, pdst + stride);                                    \
-} while (0)
-
-#define ST6x4_UB(in0, start_in0_idx, in1, start_in1_idx, pdst, stride) do { \
-  uint8_t* ptmp1 = (uint8_t*)pdst;                                          \
-  ST6x1_UB(in0, start_in0_idx, in1, start_in1_idx, ptmp1, 4);               \
-  ptmp1 += stride;                                                          \
-  ST6x1_UB(in0, start_in0_idx + 1, in1, start_in1_idx + 1, ptmp1, 4);       \
-  ptmp1 += stride;                                                          \
-  ST6x1_UB(in0, start_in0_idx + 2, in1, start_in1_idx + 2, ptmp1, 4);       \
-  ptmp1 += stride;                                                          \
-  ST6x1_UB(in0, start_in0_idx + 3, in1, start_in1_idx + 3, ptmp1, 4);       \
-} while (0)
-
-#define LPF_SIMPLE_FILT(p1_in, p0_in, q0_in, q1_in, mask) do {       \
-    v16i8 p1_m, p0_m, q0_m, q1_m, filt, filt1, filt2;                \
-    const v16i8 cnst4b = __msa_ldi_b(4);                             \
-    const v16i8 cnst3b =  __msa_ldi_b(3);                            \
-                                                                     \
-    FLIP_SIGN4(p1_in, p0_in, q0_in, q1_in, p1_m, p0_m, q0_m, q1_m);  \
-    filt = __msa_subs_s_b(p1_m, q1_m);                               \
-    FILT_VAL(q0_m, p0_m, mask, filt);                                \
-    filt1 = __msa_adds_s_b(filt, cnst4b);                            \
-    filt1 = SRAI_B(filt1, 3);                                        \
-    filt2 = __msa_adds_s_b(filt, cnst3b);                            \
-    filt2 = SRAI_B(filt2, 3);                                        \
-    q0_m = __msa_subs_s_b(q0_m, filt1);                              \
-    p0_m = __msa_adds_s_b(p0_m, filt2);                              \
-    q0_in = __msa_xori_b((v16u8)q0_m, 0x80);                         \
-    p0_in = __msa_xori_b((v16u8)p0_m, 0x80);                         \
-} while (0)
-
-#define LPF_SIMPLE_MASK(p1, p0, q0, q1, b_limit, mask) do {    \
-    v16u8 p1_a_sub_q1, p0_a_sub_q0;                            \
-                                                               \
-    p0_a_sub_q0 = __msa_asub_u_b(p0, q0);                      \
-    p1_a_sub_q1 = __msa_asub_u_b(p1, q1);                      \
-    p1_a_sub_q1 = (v16u8)__msa_srli_b((v16i8)p1_a_sub_q1, 1);  \
-    p0_a_sub_q0 = __msa_adds_u_b(p0_a_sub_q0, p0_a_sub_q0);    \
-    mask = __msa_adds_u_b(p0_a_sub_q0, p1_a_sub_q1);           \
-    mask = (mask <= b_limit);                                  \
-} while (0)
-
-static void VFilter16(uint8_t* src, int stride,
-                      int b_limit_in, int limit_in, int thresh_in) {
-  uint8_t* ptemp = src - 4 * stride;
-  v16u8 p3, p2, p1, p0, q3, q2, q1, q0;
-  v16u8 mask, hev;
-  const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in);
-  const v16u8 limit = (v16u8)__msa_fill_b(limit_in);
-  const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in);
-
-  LD_UB8(ptemp, stride, p3, p2, p1, p0, q0, q1, q2, q3);
-  LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh,
-               hev, mask);
-  LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev);
-  ptemp = src - 3 * stride;
-  ST_UB4(p2, p1, p0, q0, ptemp, stride);
-  ptemp += (4 * stride);
-  ST_UB2(q1, q2, ptemp, stride);
-}
-
-static void HFilter16(uint8_t* src, int stride,
-                      int b_limit_in, int limit_in, int thresh_in) {
-  uint8_t* ptmp  = src - 4;
-  v16u8 p3, p2, p1, p0, q3, q2, q1, q0;
-  v16u8 mask, hev;
-  v16u8 row0, row1, row2, row3, row4, row5, row6, row7, row8;
-  v16u8 row9, row10, row11, row12, row13, row14, row15;
-  v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in);
-  const v16u8 limit = (v16u8)__msa_fill_b(limit_in);
-  const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in);
-
-  LD_UB8(ptmp, stride, row0, row1, row2, row3, row4, row5, row6, row7);
-  ptmp += (8 * stride);
-  LD_UB8(ptmp, stride, row8, row9, row10, row11, row12, row13, row14, row15);
-  TRANSPOSE16x8_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7,
-                      row8, row9, row10, row11, row12, row13, row14, row15,
-                      p3, p2, p1, p0, q0, q1, q2, q3);
-  LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh,
-               hev, mask);
-  LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev);
-  ILVR_B2_SH(p1, p2, q0, p0, tmp0, tmp1);
-  ILVRL_H2_SH(tmp1, tmp0, tmp3, tmp4);
-  ILVL_B2_SH(p1, p2, q0, p0, tmp0, tmp1);
-  ILVRL_H2_SH(tmp1, tmp0, tmp6, tmp7);
-  ILVRL_B2_SH(q2, q1, tmp2, tmp5);
-  ptmp = src - 3;
-  ST6x1_UB(tmp3, 0, tmp2, 0, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp3, 1, tmp2, 1, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp3, 2, tmp2, 2, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp3, 3, tmp2, 3, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp4, 0, tmp2, 4, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp4, 1, tmp2, 5, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp4, 2, tmp2, 6, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp4, 3, tmp2, 7, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp6, 0, tmp5, 0, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp6, 1, tmp5, 1, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp6, 2, tmp5, 2, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp6, 3, tmp5, 3, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp7, 0, tmp5, 4, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp7, 1, tmp5, 5, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp7, 2, tmp5, 6, ptmp, 4);
-  ptmp += stride;
-  ST6x1_UB(tmp7, 3, tmp5, 7, ptmp, 4);
-}
-
-// on three inner edges
-static void VFilterHorEdge16i(uint8_t* src, int stride,
-                              int b_limit, int limit, int thresh) {
-  v16u8 mask, hev;
-  v16u8 p3, p2, p1, p0, q3, q2, q1, q0;
-  const v16u8 thresh0 = (v16u8)__msa_fill_b(thresh);
-  const v16u8 b_limit0 = (v16u8)__msa_fill_b(b_limit);
-  const v16u8 limit0 = (v16u8)__msa_fill_b(limit);
-
-  LD_UB8((src - 4 * stride), stride, p3, p2, p1, p0, q0, q1, q2, q3);
-  LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit0, b_limit0, thresh0,
-               hev, mask);
-  LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev);
-  ST_UB4(p1, p0, q0, q1, (src - 2 * stride), stride);
-}
-
-static void VFilter16i(uint8_t* src_y, int stride,
-                       int b_limit, int limit, int thresh) {
-  VFilterHorEdge16i(src_y +  4 * stride, stride, b_limit, limit, thresh);
-  VFilterHorEdge16i(src_y +  8 * stride, stride, b_limit, limit, thresh);
-  VFilterHorEdge16i(src_y + 12 * stride, stride, b_limit, limit, thresh);
-}
-
-static void HFilterVertEdge16i(uint8_t* src, int stride,
-                               int b_limit, int limit, int thresh) {
-  v16u8 mask, hev;
-  v16u8 p3, p2, p1, p0, q3, q2, q1, q0;
-  v16u8 row0, row1, row2, row3, row4, row5, row6, row7;
-  v16u8 row8, row9, row10, row11, row12, row13, row14, row15;
-  v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  const v16u8 thresh0 = (v16u8)__msa_fill_b(thresh);
-  const v16u8 b_limit0 = (v16u8)__msa_fill_b(b_limit);
-  const v16u8 limit0 = (v16u8)__msa_fill_b(limit);
-
-  LD_UB8(src - 4, stride, row0, row1, row2, row3, row4, row5, row6, row7);
-  LD_UB8(src - 4 + (8 * stride), stride,
-         row8, row9, row10, row11, row12, row13, row14, row15);
-  TRANSPOSE16x8_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7,
-                      row8, row9, row10, row11, row12, row13, row14, row15,
-                      p3, p2, p1, p0, q0, q1, q2, q3);
-  LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit0, b_limit0, thresh0,
-               hev, mask);
-  LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev);
-  ILVR_B2_SH(p0, p1, q1, q0, tmp0, tmp1);
-  ILVRL_H2_SH(tmp1, tmp0, tmp2, tmp3);
-  ILVL_B2_SH(p0, p1, q1, q0, tmp0, tmp1);
-  ILVRL_H2_SH(tmp1, tmp0, tmp4, tmp5);
-  src -= 2;
-  ST4x8_UB(tmp2, tmp3, src, stride);
-  src += (8 * stride);
-  ST4x8_UB(tmp4, tmp5, src, stride);
-}
-
-static void HFilter16i(uint8_t* src_y, int stride,
-                       int b_limit, int limit, int thresh) {
-  HFilterVertEdge16i(src_y +  4, stride, b_limit, limit, thresh);
-  HFilterVertEdge16i(src_y +  8, stride, b_limit, limit, thresh);
-  HFilterVertEdge16i(src_y + 12, stride, b_limit, limit, thresh);
-}
-
-// 8-pixels wide variants, for chroma filtering
-static void VFilter8(uint8_t* src_u, uint8_t* src_v, int stride,
-                     int b_limit_in, int limit_in, int thresh_in) {
-  uint8_t* ptmp_src_u = src_u - 4 * stride;
-  uint8_t* ptmp_src_v = src_v - 4 * stride;
-  uint64_t p2_d, p1_d, p0_d, q0_d, q1_d, q2_d;
-  v16u8 p3, p2, p1, p0, q3, q2, q1, q0, mask, hev;
-  v16u8 p3_u, p2_u, p1_u, p0_u, q3_u, q2_u, q1_u, q0_u;
-  v16u8 p3_v, p2_v, p1_v, p0_v, q3_v, q2_v, q1_v, q0_v;
-  const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in);
-  const v16u8 limit = (v16u8)__msa_fill_b(limit_in);
-  const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in);
-
-  LD_UB8(ptmp_src_u, stride, p3_u, p2_u, p1_u, p0_u, q0_u, q1_u, q2_u, q3_u);
-  LD_UB8(ptmp_src_v, stride, p3_v, p2_v, p1_v, p0_v, q0_v, q1_v, q2_v, q3_v);
-  ILVR_D4_UB(p3_v, p3_u, p2_v, p2_u, p1_v, p1_u, p0_v, p0_u, p3, p2, p1, p0);
-  ILVR_D4_UB(q0_v, q0_u, q1_v, q1_u, q2_v, q2_u, q3_v, q3_u, q0, q1, q2, q3);
-  LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh,
-               hev, mask);
-  LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev);
-  p2_d = __msa_copy_s_d((v2i64)p2, 0);
-  p1_d = __msa_copy_s_d((v2i64)p1, 0);
-  p0_d = __msa_copy_s_d((v2i64)p0, 0);
-  q0_d = __msa_copy_s_d((v2i64)q0, 0);
-  q1_d = __msa_copy_s_d((v2i64)q1, 0);
-  q2_d = __msa_copy_s_d((v2i64)q2, 0);
-  ptmp_src_u += stride;
-  SD4(p2_d, p1_d, p0_d, q0_d, ptmp_src_u, stride);
-  ptmp_src_u += (4 * stride);
-  SD(q1_d, ptmp_src_u);
-  ptmp_src_u += stride;
-  SD(q2_d, ptmp_src_u);
-  p2_d = __msa_copy_s_d((v2i64)p2, 1);
-  p1_d = __msa_copy_s_d((v2i64)p1, 1);
-  p0_d = __msa_copy_s_d((v2i64)p0, 1);
-  q0_d = __msa_copy_s_d((v2i64)q0, 1);
-  q1_d = __msa_copy_s_d((v2i64)q1, 1);
-  q2_d = __msa_copy_s_d((v2i64)q2, 1);
-  ptmp_src_v += stride;
-  SD4(p2_d, p1_d, p0_d, q0_d, ptmp_src_v, stride);
-  ptmp_src_v += (4 * stride);
-  SD(q1_d, ptmp_src_v);
-  ptmp_src_v += stride;
-  SD(q2_d, ptmp_src_v);
-}
-
-static void HFilter8(uint8_t* src_u, uint8_t* src_v, int stride,
-                     int b_limit_in, int limit_in, int thresh_in) {
-  uint8_t* ptmp_src_u = src_u - 4;
-  uint8_t* ptmp_src_v = src_v - 4;
-  v16u8 p3, p2, p1, p0, q3, q2, q1, q0, mask, hev;
-  v16u8 row0, row1, row2, row3, row4, row5, row6, row7, row8;
-  v16u8 row9, row10, row11, row12, row13, row14, row15;
-  v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in);
-  const v16u8 limit = (v16u8)__msa_fill_b(limit_in);
-  const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in);
-
-  LD_UB8(ptmp_src_u, stride, row0, row1, row2, row3, row4, row5, row6, row7);
-  LD_UB8(ptmp_src_v, stride,
-         row8, row9, row10, row11, row12, row13, row14, row15);
-  TRANSPOSE16x8_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7,
-                      row8, row9, row10, row11, row12, row13, row14, row15,
-                      p3, p2, p1, p0, q0, q1, q2, q3);
-  LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh,
-               hev, mask);
-  LPF_MBFILTER(p2, p1, p0, q0, q1, q2, mask, hev);
-  ILVR_B2_SH(p1, p2, q0, p0, tmp0, tmp1);
-  ILVRL_H2_SH(tmp1, tmp0, tmp3, tmp4);
-  ILVL_B2_SH(p1, p2, q0, p0, tmp0, tmp1);
-  ILVRL_H2_SH(tmp1, tmp0, tmp6, tmp7);
-  ILVRL_B2_SH(q2, q1, tmp2, tmp5);
-  ptmp_src_u += 1;
-  ST6x4_UB(tmp3, 0, tmp2, 0, ptmp_src_u, stride);
-  ptmp_src_u += 4 * stride;
-  ST6x4_UB(tmp4, 0, tmp2, 4, ptmp_src_u, stride);
-  ptmp_src_v += 1;
-  ST6x4_UB(tmp6, 0, tmp5, 0, ptmp_src_v, stride);
-  ptmp_src_v += 4 * stride;
-  ST6x4_UB(tmp7, 0, tmp5, 4, ptmp_src_v, stride);
-}
-
-static void VFilter8i(uint8_t* src_u, uint8_t* src_v, int stride,
-                      int b_limit_in, int limit_in, int thresh_in) {
-  uint64_t p1_d, p0_d, q0_d, q1_d;
-  v16u8 p3, p2, p1, p0, q3, q2, q1, q0, mask, hev;
-  v16u8 p3_u, p2_u, p1_u, p0_u, q3_u, q2_u, q1_u, q0_u;
-  v16u8 p3_v, p2_v, p1_v, p0_v, q3_v, q2_v, q1_v, q0_v;
-  const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in);
-  const v16u8 limit = (v16u8)__msa_fill_b(limit_in);
-  const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in);
-
-  LD_UB8(src_u, stride, p3_u, p2_u, p1_u, p0_u, q0_u, q1_u, q2_u, q3_u);
-  src_u += (5 * stride);
-  LD_UB8(src_v, stride, p3_v, p2_v, p1_v, p0_v, q0_v, q1_v, q2_v, q3_v);
-  src_v += (5 * stride);
-  ILVR_D4_UB(p3_v, p3_u, p2_v, p2_u, p1_v, p1_u, p0_v, p0_u, p3, p2, p1, p0);
-  ILVR_D4_UB(q0_v, q0_u, q1_v, q1_u, q2_v, q2_u, q3_v, q3_u, q0, q1, q2, q3);
-  LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh,
-               hev, mask);
-  LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev);
-  p1_d = __msa_copy_s_d((v2i64)p1, 0);
-  p0_d = __msa_copy_s_d((v2i64)p0, 0);
-  q0_d = __msa_copy_s_d((v2i64)q0, 0);
-  q1_d = __msa_copy_s_d((v2i64)q1, 0);
-  SD4(q1_d, q0_d, p0_d, p1_d, src_u, -stride);
-  p1_d = __msa_copy_s_d((v2i64)p1, 1);
-  p0_d = __msa_copy_s_d((v2i64)p0, 1);
-  q0_d = __msa_copy_s_d((v2i64)q0, 1);
-  q1_d = __msa_copy_s_d((v2i64)q1, 1);
-  SD4(q1_d, q0_d, p0_d, p1_d, src_v, -stride);
-}
-
-static void HFilter8i(uint8_t* src_u, uint8_t* src_v, int stride,
-                      int b_limit_in, int limit_in, int thresh_in) {
-  v16u8 p3, p2, p1, p0, q3, q2, q1, q0, mask, hev;
-  v16u8 row0, row1, row2, row3, row4, row5, row6, row7, row8;
-  v16u8 row9, row10, row11, row12, row13, row14, row15;
-  v4i32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  const v16u8 thresh = (v16u8)__msa_fill_b(thresh_in);
-  const v16u8 limit = (v16u8)__msa_fill_b(limit_in);
-  const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in);
-
-  LD_UB8(src_u, stride, row0, row1, row2, row3, row4, row5, row6, row7);
-  LD_UB8(src_v, stride,
-         row8, row9, row10, row11, row12, row13, row14, row15);
-  TRANSPOSE16x8_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7,
-                      row8, row9, row10, row11, row12, row13, row14, row15,
-                      p3, p2, p1, p0, q0, q1, q2, q3);
-  LPF_MASK_HEV(p3, p2, p1, p0, q0, q1, q2, q3, limit, b_limit, thresh,
-               hev, mask);
-  LPF_FILTER4_4W(p1, p0, q0, q1, mask, hev);
-  ILVR_B2_SW(p0, p1, q1, q0, tmp0, tmp1);
-  ILVRL_H2_SW(tmp1, tmp0, tmp2, tmp3);
-  ILVL_B2_SW(p0, p1, q1, q0, tmp0, tmp1);
-  ILVRL_H2_SW(tmp1, tmp0, tmp4, tmp5);
-  src_u += 2;
-  ST4x4_UB(tmp2, tmp2, 0, 1, 2, 3, src_u, stride);
-  src_u += 4 * stride;
-  ST4x4_UB(tmp3, tmp3, 0, 1, 2, 3, src_u, stride);
-  src_v += 2;
-  ST4x4_UB(tmp4, tmp4, 0, 1, 2, 3, src_v, stride);
-  src_v += 4 * stride;
-  ST4x4_UB(tmp5, tmp5, 0, 1, 2, 3, src_v, stride);
-}
-
-static void SimpleVFilter16(uint8_t* src, int stride, int b_limit_in) {
-  v16u8 p1, p0, q1, q0, mask;
-  const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in);
-
-  LD_UB4(src - 2 * stride, stride, p1, p0, q0, q1);
-  LPF_SIMPLE_MASK(p1, p0, q0, q1, b_limit, mask);
-  LPF_SIMPLE_FILT(p1, p0, q0, q1, mask);
-  ST_UB2(p0, q0, src - stride, stride);
-}
-
-static void SimpleHFilter16(uint8_t* src, int stride, int b_limit_in) {
-  v16u8 p1, p0, q1, q0, mask, row0, row1, row2, row3, row4, row5, row6, row7;
-  v16u8 row8, row9, row10, row11, row12, row13, row14, row15;
-  v8i16 tmp0, tmp1;
-  const v16u8 b_limit = (v16u8)__msa_fill_b(b_limit_in);
-  uint8_t* ptemp_src = src - 2;
-
-  LD_UB8(ptemp_src, stride, row0, row1, row2, row3, row4, row5, row6, row7);
-  LD_UB8(ptemp_src + 8 * stride, stride,
-         row8, row9, row10, row11, row12, row13, row14, row15);
-  TRANSPOSE16x4_UB_UB(row0, row1, row2, row3, row4, row5, row6, row7,
-                      row8, row9, row10, row11, row12, row13, row14, row15,
-                      p1, p0, q0, q1);
-  LPF_SIMPLE_MASK(p1, p0, q0, q1, b_limit, mask);
-  LPF_SIMPLE_FILT(p1, p0, q0, q1, mask);
-  ILVRL_B2_SH(q0, p0, tmp1, tmp0);
-  ptemp_src += 1;
-  ST2x4_UB(tmp1, 0, ptemp_src, stride);
-  ptemp_src += 4 * stride;
-  ST2x4_UB(tmp1, 4, ptemp_src, stride);
-  ptemp_src += 4 * stride;
-  ST2x4_UB(tmp0, 0, ptemp_src, stride);
-  ptemp_src += 4 * stride;
-  ST2x4_UB(tmp0, 4, ptemp_src, stride);
-  ptemp_src += 4 * stride;
-}
-
-static void SimpleVFilter16i(uint8_t* src_y, int stride, int b_limit_in) {
-  SimpleVFilter16(src_y +  4 * stride, stride, b_limit_in);
-  SimpleVFilter16(src_y +  8 * stride, stride, b_limit_in);
-  SimpleVFilter16(src_y + 12 * stride, stride, b_limit_in);
-}
-
-static void SimpleHFilter16i(uint8_t* src_y, int stride, int b_limit_in) {
-  SimpleHFilter16(src_y +  4, stride, b_limit_in);
-  SimpleHFilter16(src_y +  8, stride, b_limit_in);
-  SimpleHFilter16(src_y + 12, stride, b_limit_in);
-}
-
-//------------------------------------------------------------------------------
-// Intra predictions
-//------------------------------------------------------------------------------
-
-// 4x4
-
-static void DC4(uint8_t* dst) {   // DC
-  uint32_t dc = 4;
-  int i;
-  for (i = 0; i < 4; ++i) dc += dst[i - BPS] + dst[-1 + i * BPS];
-  dc >>= 3;
-  dc = dc | (dc << 8) | (dc << 16) | (dc << 24);
-  SW4(dc, dc, dc, dc, dst, BPS);
-}
-
-static void TM4(uint8_t* dst) {
-  const uint8_t* const ptemp = dst - BPS - 1;
-  v8i16 T, d, r0, r1, r2, r3;
-  const v16i8 zero = { 0 };
-  const v8i16 TL = (v8i16)__msa_fill_h(ptemp[0 * BPS]);
-  const v8i16 L0 = (v8i16)__msa_fill_h(ptemp[1 * BPS]);
-  const v8i16 L1 = (v8i16)__msa_fill_h(ptemp[2 * BPS]);
-  const v8i16 L2 = (v8i16)__msa_fill_h(ptemp[3 * BPS]);
-  const v8i16 L3 = (v8i16)__msa_fill_h(ptemp[4 * BPS]);
-  const v16u8 T1 = LD_UB(ptemp + 1);
-
-  T  = (v8i16)__msa_ilvr_b(zero, (v16i8)T1);
-  d = T - TL;
-  ADD4(d, L0, d, L1, d, L2, d, L3, r0, r1, r2, r3);
-  CLIP_SH4_0_255(r0, r1, r2, r3);
-  PCKEV_ST4x4_UB(r0, r1, r2, r3, dst, BPS);
-}
-
-static void VE4(uint8_t* dst) {    // vertical
-  const uint8_t* const ptop = dst - BPS - 1;
-  const uint32_t val0 = LW(ptop + 0);
-  const uint32_t val1 = LW(ptop + 4);
-  uint32_t out;
-  v16u8 A = { 0 }, B, C, AC, B2, R;
-
-  INSERT_W2_UB(val0, val1, A);
-  B = SLDI_UB(A, A, 1);
-  C = SLDI_UB(A, A, 2);
-  AC = __msa_ave_u_b(A, C);
-  B2 = __msa_ave_u_b(B, B);
-  R = __msa_aver_u_b(AC, B2);
-  out = __msa_copy_s_w((v4i32)R, 0);
-  SW4(out, out, out, out, dst, BPS);
-}
-
-static void RD4(uint8_t* dst) {   // Down-right
-  const uint8_t* const ptop = dst - 1 - BPS;
-  uint32_t val0 = LW(ptop + 0);
-  uint32_t val1 = LW(ptop + 4);
-  uint32_t val2, val3;
-  v16u8 A, B, C, AC, B2, R, A1 = { 0 };
-
-  INSERT_W2_UB(val0, val1, A1);
-  A = SLDI_UB(A1, A1, 12);
-  A = (v16u8)__msa_insert_b((v16i8)A, 3, ptop[1 * BPS]);
-  A = (v16u8)__msa_insert_b((v16i8)A, 2, ptop[2 * BPS]);
-  A = (v16u8)__msa_insert_b((v16i8)A, 1, ptop[3 * BPS]);
-  A = (v16u8)__msa_insert_b((v16i8)A, 0, ptop[4 * BPS]);
-  B = SLDI_UB(A, A, 1);
-  C = SLDI_UB(A, A, 2);
-  AC = __msa_ave_u_b(A, C);
-  B2 = __msa_ave_u_b(B, B);
-  R = __msa_aver_u_b(AC, B2);
-  val3 = __msa_copy_s_w((v4i32)R, 0);
-  R = SLDI_UB(R, R, 1);
-  val2 = __msa_copy_s_w((v4i32)R, 0);
-  R = SLDI_UB(R, R, 1);
-  val1 = __msa_copy_s_w((v4i32)R, 0);
-  R = SLDI_UB(R, R, 1);
-  val0 = __msa_copy_s_w((v4i32)R, 0);
-  SW4(val0, val1, val2, val3, dst, BPS);
-}
-
-static void LD4(uint8_t* dst) {   // Down-Left
-  const uint8_t* const ptop = dst - BPS;
-  uint32_t val0 = LW(ptop + 0);
-  uint32_t val1 = LW(ptop + 4);
-  uint32_t val2, val3;
-  v16u8 A = { 0 }, B, C, AC, B2, R;
-
-  INSERT_W2_UB(val0, val1, A);
-  B = SLDI_UB(A, A, 1);
-  C = SLDI_UB(A, A, 2);
-  C = (v16u8)__msa_insert_b((v16i8)C, 6, ptop[7]);
-  AC = __msa_ave_u_b(A, C);
-  B2 = __msa_ave_u_b(B, B);
-  R = __msa_aver_u_b(AC, B2);
-  val0 = __msa_copy_s_w((v4i32)R, 0);
-  R = SLDI_UB(R, R, 1);
-  val1 = __msa_copy_s_w((v4i32)R, 0);
-  R = SLDI_UB(R, R, 1);
-  val2 = __msa_copy_s_w((v4i32)R, 0);
-  R = SLDI_UB(R, R, 1);
-  val3 = __msa_copy_s_w((v4i32)R, 0);
-  SW4(val0, val1, val2, val3, dst, BPS);
-}
-
-// 16x16
-
-static void DC16(uint8_t* dst) {   // DC
-  uint32_t dc = 16;
-  int i;
-  const v16u8 rtop = LD_UB(dst - BPS);
-  const v8u16 dctop = __msa_hadd_u_h(rtop, rtop);
-  v16u8 out;
-
-  for (i = 0; i < 16; ++i) {
-    dc += dst[-1 + i * BPS];
-  }
-  dc += HADD_UH_U32(dctop);
-  out = (v16u8)__msa_fill_b(dc >> 5);
-  ST_UB8(out, out, out, out, out, out, out, out, dst, BPS);
-  ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS);
-}
-
-static void TM16(uint8_t* dst) {
-  int j;
-  v8i16 d1, d2;
-  const v16i8 zero = { 0 };
-  const v8i16 TL = (v8i16)__msa_fill_h(dst[-1 - BPS]);
-  const v16i8 T = LD_SB(dst - BPS);
-
-  ILVRL_B2_SH(zero, T, d1, d2);
-  SUB2(d1, TL, d2, TL, d1, d2);
-  for (j = 0; j < 16; j += 4) {
-    v16i8 t0, t1, t2, t3;
-    v8i16 r0, r1, r2, r3, r4, r5, r6, r7;
-    const v8i16 L0 = (v8i16)__msa_fill_h(dst[-1 + 0 * BPS]);
-    const v8i16 L1 = (v8i16)__msa_fill_h(dst[-1 + 1 * BPS]);
-    const v8i16 L2 = (v8i16)__msa_fill_h(dst[-1 + 2 * BPS]);
-    const v8i16 L3 = (v8i16)__msa_fill_h(dst[-1 + 3 * BPS]);
-    ADD4(d1, L0, d1, L1, d1, L2, d1, L3, r0, r1, r2, r3);
-    ADD4(d2, L0, d2, L1, d2, L2, d2, L3, r4, r5, r6, r7);
-    CLIP_SH4_0_255(r0, r1, r2, r3);
-    CLIP_SH4_0_255(r4, r5, r6, r7);
-    PCKEV_B4_SB(r4, r0, r5, r1, r6, r2, r7, r3, t0, t1, t2, t3);
-    ST_SB4(t0, t1, t2, t3, dst, BPS);
-    dst += 4 * BPS;
-  }
-}
-
-static void VE16(uint8_t* dst) {   // vertical
-  const v16u8 rtop = LD_UB(dst - BPS);
-  ST_UB8(rtop, rtop, rtop, rtop, rtop, rtop, rtop, rtop, dst, BPS);
-  ST_UB8(rtop, rtop, rtop, rtop, rtop, rtop, rtop, rtop, dst + 8 * BPS, BPS);
-}
-
-static void HE16(uint8_t* dst) {   // horizontal
-  int j;
-  for (j = 16; j > 0; j -= 4) {
-    const v16u8 L0 = (v16u8)__msa_fill_b(dst[-1 + 0 * BPS]);
-    const v16u8 L1 = (v16u8)__msa_fill_b(dst[-1 + 1 * BPS]);
-    const v16u8 L2 = (v16u8)__msa_fill_b(dst[-1 + 2 * BPS]);
-    const v16u8 L3 = (v16u8)__msa_fill_b(dst[-1 + 3 * BPS]);
-    ST_UB4(L0, L1, L2, L3, dst, BPS);
-    dst += 4 * BPS;
-  }
-}
-
-static void DC16NoTop(uint8_t* dst) {   // DC with top samples not available
-  int j;
-  uint32_t dc = 8;
-  v16u8 out;
-
-  for (j = 0; j < 16; ++j) {
-    dc += dst[-1 + j * BPS];
-  }
-  out = (v16u8)__msa_fill_b(dc >> 4);
-  ST_UB8(out, out, out, out, out, out, out, out, dst, BPS);
-  ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS);
-}
-
-static void DC16NoLeft(uint8_t* dst) {   // DC with left samples not available
-  uint32_t dc = 8;
-  const v16u8 rtop = LD_UB(dst - BPS);
-  const v8u16 dctop = __msa_hadd_u_h(rtop, rtop);
-  v16u8 out;
-
-  dc += HADD_UH_U32(dctop);
-  out = (v16u8)__msa_fill_b(dc >> 4);
-  ST_UB8(out, out, out, out, out, out, out, out, dst, BPS);
-  ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS);
-}
-
-static void DC16NoTopLeft(uint8_t* dst) {   // DC with nothing
-  const v16u8 out = (v16u8)__msa_fill_b(0x80);
-  ST_UB8(out, out, out, out, out, out, out, out, dst, BPS);
-  ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS);
-}
-
-// Chroma
-
-#define STORE8x8(out, dst) do {                 \
-  SD4(out, out, out, out, dst + 0 * BPS, BPS);  \
-  SD4(out, out, out, out, dst + 4 * BPS, BPS);  \
-} while (0)
-
-static void DC8uv(uint8_t* dst) {   // DC
-  uint32_t dc = 8;
-  int i;
-  uint64_t out;
-  const v16u8 rtop = LD_UB(dst - BPS);
-  const v8u16 temp0 = __msa_hadd_u_h(rtop, rtop);
-  const v4u32 temp1 = __msa_hadd_u_w(temp0, temp0);
-  const v2u64 temp2 = __msa_hadd_u_d(temp1, temp1);
-  v16u8 dctemp;
-
-  for (i = 0; i < 8; ++i) {
-    dc += dst[-1 + i * BPS];
-  }
-  dc += __msa_copy_s_w((v4i32)temp2, 0);
-  dctemp = (v16u8)__msa_fill_b(dc >> 4);
-  out = __msa_copy_s_d((v2i64)dctemp, 0);
-  STORE8x8(out, dst);
-}
-
-static void TM8uv(uint8_t* dst) {
-  int j;
-  const v16i8 T1 = LD_SB(dst - BPS);
-  const v16i8 zero = { 0 };
-  const v8i16 T  = (v8i16)__msa_ilvr_b(zero, T1);
-  const v8i16 TL = (v8i16)__msa_fill_h(dst[-1 - BPS]);
-  const v8i16 d = T - TL;
-
-  for (j = 0; j < 8; j += 4) {
-    v16i8 t0, t1;
-    v8i16 r0 = (v8i16)__msa_fill_h(dst[-1 + 0 * BPS]);
-    v8i16 r1 = (v8i16)__msa_fill_h(dst[-1 + 1 * BPS]);
-    v8i16 r2 = (v8i16)__msa_fill_h(dst[-1 + 2 * BPS]);
-    v8i16 r3 = (v8i16)__msa_fill_h(dst[-1 + 3 * BPS]);
-    ADD4(d, r0, d, r1, d, r2, d, r3, r0, r1, r2, r3);
-    CLIP_SH4_0_255(r0, r1, r2, r3);
-    PCKEV_B2_SB(r1, r0, r3, r2, t0, t1);
-    ST4x4_UB(t0, t1, 0, 2, 0, 2, dst, BPS);
-    ST4x4_UB(t0, t1, 1, 3, 1, 3, dst + 4, BPS);
-    dst += 4 * BPS;
-  }
-}
-
-static void VE8uv(uint8_t* dst) {   // vertical
-  const v16u8 rtop = LD_UB(dst - BPS);
-  const uint64_t out = __msa_copy_s_d((v2i64)rtop, 0);
-  STORE8x8(out, dst);
-}
-
-static void HE8uv(uint8_t* dst) {   // horizontal
-  int j;
-  for (j = 0; j < 8; j += 4) {
-    const v16u8 L0 = (v16u8)__msa_fill_b(dst[-1 + 0 * BPS]);
-    const v16u8 L1 = (v16u8)__msa_fill_b(dst[-1 + 1 * BPS]);
-    const v16u8 L2 = (v16u8)__msa_fill_b(dst[-1 + 2 * BPS]);
-    const v16u8 L3 = (v16u8)__msa_fill_b(dst[-1 + 3 * BPS]);
-    const uint64_t out0 = __msa_copy_s_d((v2i64)L0, 0);
-    const uint64_t out1 = __msa_copy_s_d((v2i64)L1, 0);
-    const uint64_t out2 = __msa_copy_s_d((v2i64)L2, 0);
-    const uint64_t out3 = __msa_copy_s_d((v2i64)L3, 0);
-    SD4(out0, out1, out2, out3, dst, BPS);
-    dst += 4 * BPS;
-  }
-}
-
-static void DC8uvNoLeft(uint8_t* dst) {   // DC with no left samples
-  const uint32_t dc = 4;
-  const v16u8 rtop = LD_UB(dst - BPS);
-  const v8u16 temp0 = __msa_hadd_u_h(rtop, rtop);
-  const v4u32 temp1 = __msa_hadd_u_w(temp0, temp0);
-  const v2u64 temp2 = __msa_hadd_u_d(temp1, temp1);
-  const uint32_t sum_m = __msa_copy_s_w((v4i32)temp2, 0);
-  const v16u8 dcval = (v16u8)__msa_fill_b((dc + sum_m) >> 3);
-  const uint64_t out = __msa_copy_s_d((v2i64)dcval, 0);
-  STORE8x8(out, dst);
-}
-
-static void DC8uvNoTop(uint8_t* dst) {   // DC with no top samples
-  uint32_t dc = 4;
-  int i;
-  uint64_t out;
-  v16u8 dctemp;
-
-  for (i = 0; i < 8; ++i) {
-    dc += dst[-1 + i * BPS];
-  }
-  dctemp = (v16u8)__msa_fill_b(dc >> 3);
-  out = __msa_copy_s_d((v2i64)dctemp, 0);
-  STORE8x8(out, dst);
-}
-
-static void DC8uvNoTopLeft(uint8_t* dst) {   // DC with nothing
-  const uint64_t out = 0x8080808080808080ULL;
-  STORE8x8(out, dst);
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8DspInitMSA(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitMSA(void) {
-  VP8TransformWHT = TransformWHT;
-  VP8Transform = TransformTwo;
-  VP8TransformDC = TransformDC;
-  VP8TransformAC3 = TransformAC3;
-
-  VP8VFilter16  = VFilter16;
-  VP8HFilter16  = HFilter16;
-  VP8VFilter16i = VFilter16i;
-  VP8HFilter16i = HFilter16i;
-  VP8VFilter8  = VFilter8;
-  VP8HFilter8  = HFilter8;
-  VP8VFilter8i = VFilter8i;
-  VP8HFilter8i = HFilter8i;
-  VP8SimpleVFilter16  = SimpleVFilter16;
-  VP8SimpleHFilter16  = SimpleHFilter16;
-  VP8SimpleVFilter16i = SimpleVFilter16i;
-  VP8SimpleHFilter16i = SimpleHFilter16i;
-
-  VP8PredLuma4[0] = DC4;
-  VP8PredLuma4[1] = TM4;
-  VP8PredLuma4[2] = VE4;
-  VP8PredLuma4[4] = RD4;
-  VP8PredLuma4[6] = LD4;
-  VP8PredLuma16[0] = DC16;
-  VP8PredLuma16[1] = TM16;
-  VP8PredLuma16[2] = VE16;
-  VP8PredLuma16[3] = HE16;
-  VP8PredLuma16[4] = DC16NoTop;
-  VP8PredLuma16[5] = DC16NoLeft;
-  VP8PredLuma16[6] = DC16NoTopLeft;
-  VP8PredChroma8[0] = DC8uv;
-  VP8PredChroma8[1] = TM8uv;
-  VP8PredChroma8[2] = VE8uv;
-  VP8PredChroma8[3] = HE8uv;
-  VP8PredChroma8[4] = DC8uvNoTop;
-  VP8PredChroma8[5] = DC8uvNoLeft;
-  VP8PredChroma8[6] = DC8uvNoTopLeft;
-}
-
-#else  // !WEBP_USE_MSA
-
-WEBP_DSP_INIT_STUB(VP8DspInitMSA)
-
-#endif  // WEBP_USE_MSA
diff --git a/ios/Pods/libwebp/src/dsp/dec_neon.c b/ios/Pods/libwebp/src/dsp/dec_neon.c
deleted file mode 100644
index ffa697f..0000000
--- a/ios/Pods/libwebp/src/dsp/dec_neon.c
+++ /dev/null
@@ -1,1652 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// ARM NEON version of dsp functions and loop filtering.
-//
-// Authors: Somnath Banerjee (somnath@google.com)
-//          Johann Koenig (johannkoenig@google.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include "src/dsp/neon.h"
-#include "src/dec/vp8i_dec.h"
-
-//------------------------------------------------------------------------------
-// NxM Loading functions
-
-#if !defined(WORK_AROUND_GCC)
-
-// This intrinsics version makes gcc-4.6.3 crash during Load4x??() compilation
-// (register alloc, probably). The variants somewhat mitigate the problem, but
-// not quite. HFilter16i() remains problematic.
-static WEBP_INLINE uint8x8x4_t Load4x8_NEON(const uint8_t* const src,
-                                            int stride) {
-  const uint8x8_t zero = vdup_n_u8(0);
-  uint8x8x4_t out;
-  INIT_VECTOR4(out, zero, zero, zero, zero);
-  out = vld4_lane_u8(src + 0 * stride, out, 0);
-  out = vld4_lane_u8(src + 1 * stride, out, 1);
-  out = vld4_lane_u8(src + 2 * stride, out, 2);
-  out = vld4_lane_u8(src + 3 * stride, out, 3);
-  out = vld4_lane_u8(src + 4 * stride, out, 4);
-  out = vld4_lane_u8(src + 5 * stride, out, 5);
-  out = vld4_lane_u8(src + 6 * stride, out, 6);
-  out = vld4_lane_u8(src + 7 * stride, out, 7);
-  return out;
-}
-
-static WEBP_INLINE void Load4x16_NEON(const uint8_t* const src, int stride,
-                                      uint8x16_t* const p1,
-                                      uint8x16_t* const p0,
-                                      uint8x16_t* const q0,
-                                      uint8x16_t* const q1) {
-  // row0 = p1[0..7]|p0[0..7]|q0[0..7]|q1[0..7]
-  // row8 = p1[8..15]|p0[8..15]|q0[8..15]|q1[8..15]
-  const uint8x8x4_t row0 = Load4x8_NEON(src - 2 + 0 * stride, stride);
-  const uint8x8x4_t row8 = Load4x8_NEON(src - 2 + 8 * stride, stride);
-  *p1 = vcombine_u8(row0.val[0], row8.val[0]);
-  *p0 = vcombine_u8(row0.val[1], row8.val[1]);
-  *q0 = vcombine_u8(row0.val[2], row8.val[2]);
-  *q1 = vcombine_u8(row0.val[3], row8.val[3]);
-}
-
-#else  // WORK_AROUND_GCC
-
-#define LOADQ_LANE_32b(VALUE, LANE) do {                             \
-  (VALUE) = vld1q_lane_u32((const uint32_t*)src, (VALUE), (LANE));   \
-  src += stride;                                                     \
-} while (0)
-
-static WEBP_INLINE void Load4x16_NEON(const uint8_t* src, int stride,
-                                      uint8x16_t* const p1,
-                                      uint8x16_t* const p0,
-                                      uint8x16_t* const q0,
-                                      uint8x16_t* const q1) {
-  const uint32x4_t zero = vdupq_n_u32(0);
-  uint32x4x4_t in;
-  INIT_VECTOR4(in, zero, zero, zero, zero);
-  src -= 2;
-  LOADQ_LANE_32b(in.val[0], 0);
-  LOADQ_LANE_32b(in.val[1], 0);
-  LOADQ_LANE_32b(in.val[2], 0);
-  LOADQ_LANE_32b(in.val[3], 0);
-  LOADQ_LANE_32b(in.val[0], 1);
-  LOADQ_LANE_32b(in.val[1], 1);
-  LOADQ_LANE_32b(in.val[2], 1);
-  LOADQ_LANE_32b(in.val[3], 1);
-  LOADQ_LANE_32b(in.val[0], 2);
-  LOADQ_LANE_32b(in.val[1], 2);
-  LOADQ_LANE_32b(in.val[2], 2);
-  LOADQ_LANE_32b(in.val[3], 2);
-  LOADQ_LANE_32b(in.val[0], 3);
-  LOADQ_LANE_32b(in.val[1], 3);
-  LOADQ_LANE_32b(in.val[2], 3);
-  LOADQ_LANE_32b(in.val[3], 3);
-  // Transpose four 4x4 parts:
-  {
-    const uint8x16x2_t row01 = vtrnq_u8(vreinterpretq_u8_u32(in.val[0]),
-                                        vreinterpretq_u8_u32(in.val[1]));
-    const uint8x16x2_t row23 = vtrnq_u8(vreinterpretq_u8_u32(in.val[2]),
-                                        vreinterpretq_u8_u32(in.val[3]));
-    const uint16x8x2_t row02 = vtrnq_u16(vreinterpretq_u16_u8(row01.val[0]),
-                                         vreinterpretq_u16_u8(row23.val[0]));
-    const uint16x8x2_t row13 = vtrnq_u16(vreinterpretq_u16_u8(row01.val[1]),
-                                         vreinterpretq_u16_u8(row23.val[1]));
-    *p1 = vreinterpretq_u8_u16(row02.val[0]);
-    *p0 = vreinterpretq_u8_u16(row13.val[0]);
-    *q0 = vreinterpretq_u8_u16(row02.val[1]);
-    *q1 = vreinterpretq_u8_u16(row13.val[1]);
-  }
-}
-#undef LOADQ_LANE_32b
-
-#endif  // !WORK_AROUND_GCC
-
-static WEBP_INLINE void Load8x16_NEON(
-    const uint8_t* const src, int stride,
-    uint8x16_t* const p3, uint8x16_t* const p2, uint8x16_t* const p1,
-    uint8x16_t* const p0, uint8x16_t* const q0, uint8x16_t* const q1,
-    uint8x16_t* const q2, uint8x16_t* const q3) {
-  Load4x16_NEON(src - 2, stride, p3, p2, p1, p0);
-  Load4x16_NEON(src + 2, stride, q0, q1, q2, q3);
-}
-
-static WEBP_INLINE void Load16x4_NEON(const uint8_t* const src, int stride,
-                                      uint8x16_t* const p1,
-                                      uint8x16_t* const p0,
-                                      uint8x16_t* const q0,
-                                      uint8x16_t* const q1) {
-  *p1 = vld1q_u8(src - 2 * stride);
-  *p0 = vld1q_u8(src - 1 * stride);
-  *q0 = vld1q_u8(src + 0 * stride);
-  *q1 = vld1q_u8(src + 1 * stride);
-}
-
-static WEBP_INLINE void Load16x8_NEON(
-    const uint8_t* const src, int stride,
-    uint8x16_t* const p3, uint8x16_t* const p2, uint8x16_t* const p1,
-    uint8x16_t* const p0, uint8x16_t* const q0, uint8x16_t* const q1,
-    uint8x16_t* const q2, uint8x16_t* const q3) {
-  Load16x4_NEON(src - 2  * stride, stride, p3, p2, p1, p0);
-  Load16x4_NEON(src + 2  * stride, stride, q0, q1, q2, q3);
-}
-
-static WEBP_INLINE void Load8x8x2_NEON(
-    const uint8_t* const u, const uint8_t* const v, int stride,
-    uint8x16_t* const p3, uint8x16_t* const p2, uint8x16_t* const p1,
-    uint8x16_t* const p0, uint8x16_t* const q0, uint8x16_t* const q1,
-    uint8x16_t* const q2, uint8x16_t* const q3) {
-  // We pack the 8x8 u-samples in the lower half of the uint8x16_t destination
-  // and the v-samples on the higher half.
-  *p3 = vcombine_u8(vld1_u8(u - 4 * stride), vld1_u8(v - 4 * stride));
-  *p2 = vcombine_u8(vld1_u8(u - 3 * stride), vld1_u8(v - 3 * stride));
-  *p1 = vcombine_u8(vld1_u8(u - 2 * stride), vld1_u8(v - 2 * stride));
-  *p0 = vcombine_u8(vld1_u8(u - 1 * stride), vld1_u8(v - 1 * stride));
-  *q0 = vcombine_u8(vld1_u8(u + 0 * stride), vld1_u8(v + 0 * stride));
-  *q1 = vcombine_u8(vld1_u8(u + 1 * stride), vld1_u8(v + 1 * stride));
-  *q2 = vcombine_u8(vld1_u8(u + 2 * stride), vld1_u8(v + 2 * stride));
-  *q3 = vcombine_u8(vld1_u8(u + 3 * stride), vld1_u8(v + 3 * stride));
-}
-
-#if !defined(WORK_AROUND_GCC)
-
-#define LOAD_UV_8(ROW) \
-  vcombine_u8(vld1_u8(u - 4 + (ROW) * stride), vld1_u8(v - 4 + (ROW) * stride))
-
-static WEBP_INLINE void Load8x8x2T_NEON(
-    const uint8_t* const u, const uint8_t* const v, int stride,
-    uint8x16_t* const p3, uint8x16_t* const p2, uint8x16_t* const p1,
-    uint8x16_t* const p0, uint8x16_t* const q0, uint8x16_t* const q1,
-    uint8x16_t* const q2, uint8x16_t* const q3) {
-  // We pack the 8x8 u-samples in the lower half of the uint8x16_t destination
-  // and the v-samples on the higher half.
-  const uint8x16_t row0 = LOAD_UV_8(0);
-  const uint8x16_t row1 = LOAD_UV_8(1);
-  const uint8x16_t row2 = LOAD_UV_8(2);
-  const uint8x16_t row3 = LOAD_UV_8(3);
-  const uint8x16_t row4 = LOAD_UV_8(4);
-  const uint8x16_t row5 = LOAD_UV_8(5);
-  const uint8x16_t row6 = LOAD_UV_8(6);
-  const uint8x16_t row7 = LOAD_UV_8(7);
-  // Perform two side-by-side 8x8 transposes
-  // u00 u01 u02 u03 u04 u05 u06 u07 | v00 v01 v02 v03 v04 v05 v06 v07
-  // u10 u11 u12 u13 u14 u15 u16 u17 | v10 v11 v12 ...
-  // u20 u21 u22 u23 u24 u25 u26 u27 | v20 v21 ...
-  // u30 u31 u32 u33 u34 u35 u36 u37 | ...
-  // u40 u41 u42 u43 u44 u45 u46 u47 | ...
-  // u50 u51 u52 u53 u54 u55 u56 u57 | ...
-  // u60 u61 u62 u63 u64 u65 u66 u67 | v60 ...
-  // u70 u71 u72 u73 u74 u75 u76 u77 | v70 v71 v72 ...
-  const uint8x16x2_t row01 = vtrnq_u8(row0, row1);  // u00 u10 u02 u12 ...
-                                                    // u01 u11 u03 u13 ...
-  const uint8x16x2_t row23 = vtrnq_u8(row2, row3);  // u20 u30 u22 u32 ...
-                                                    // u21 u31 u23 u33 ...
-  const uint8x16x2_t row45 = vtrnq_u8(row4, row5);  // ...
-  const uint8x16x2_t row67 = vtrnq_u8(row6, row7);  // ...
-  const uint16x8x2_t row02 = vtrnq_u16(vreinterpretq_u16_u8(row01.val[0]),
-                                       vreinterpretq_u16_u8(row23.val[0]));
-  const uint16x8x2_t row13 = vtrnq_u16(vreinterpretq_u16_u8(row01.val[1]),
-                                       vreinterpretq_u16_u8(row23.val[1]));
-  const uint16x8x2_t row46 = vtrnq_u16(vreinterpretq_u16_u8(row45.val[0]),
-                                       vreinterpretq_u16_u8(row67.val[0]));
-  const uint16x8x2_t row57 = vtrnq_u16(vreinterpretq_u16_u8(row45.val[1]),
-                                       vreinterpretq_u16_u8(row67.val[1]));
-  const uint32x4x2_t row04 = vtrnq_u32(vreinterpretq_u32_u16(row02.val[0]),
-                                       vreinterpretq_u32_u16(row46.val[0]));
-  const uint32x4x2_t row26 = vtrnq_u32(vreinterpretq_u32_u16(row02.val[1]),
-                                       vreinterpretq_u32_u16(row46.val[1]));
-  const uint32x4x2_t row15 = vtrnq_u32(vreinterpretq_u32_u16(row13.val[0]),
-                                       vreinterpretq_u32_u16(row57.val[0]));
-  const uint32x4x2_t row37 = vtrnq_u32(vreinterpretq_u32_u16(row13.val[1]),
-                                       vreinterpretq_u32_u16(row57.val[1]));
-  *p3 = vreinterpretq_u8_u32(row04.val[0]);
-  *p2 = vreinterpretq_u8_u32(row15.val[0]);
-  *p1 = vreinterpretq_u8_u32(row26.val[0]);
-  *p0 = vreinterpretq_u8_u32(row37.val[0]);
-  *q0 = vreinterpretq_u8_u32(row04.val[1]);
-  *q1 = vreinterpretq_u8_u32(row15.val[1]);
-  *q2 = vreinterpretq_u8_u32(row26.val[1]);
-  *q3 = vreinterpretq_u8_u32(row37.val[1]);
-}
-#undef LOAD_UV_8
-
-#endif  // !WORK_AROUND_GCC
-
-static WEBP_INLINE void Store2x8_NEON(const uint8x8x2_t v,
-                                      uint8_t* const dst, int stride) {
-  vst2_lane_u8(dst + 0 * stride, v, 0);
-  vst2_lane_u8(dst + 1 * stride, v, 1);
-  vst2_lane_u8(dst + 2 * stride, v, 2);
-  vst2_lane_u8(dst + 3 * stride, v, 3);
-  vst2_lane_u8(dst + 4 * stride, v, 4);
-  vst2_lane_u8(dst + 5 * stride, v, 5);
-  vst2_lane_u8(dst + 6 * stride, v, 6);
-  vst2_lane_u8(dst + 7 * stride, v, 7);
-}
-
-static WEBP_INLINE void Store2x16_NEON(const uint8x16_t p0, const uint8x16_t q0,
-                                       uint8_t* const dst, int stride) {
-  uint8x8x2_t lo, hi;
-  lo.val[0] = vget_low_u8(p0);
-  lo.val[1] = vget_low_u8(q0);
-  hi.val[0] = vget_high_u8(p0);
-  hi.val[1] = vget_high_u8(q0);
-  Store2x8_NEON(lo, dst - 1 + 0 * stride, stride);
-  Store2x8_NEON(hi, dst - 1 + 8 * stride, stride);
-}
-
-#if !defined(WORK_AROUND_GCC)
-static WEBP_INLINE void Store4x8_NEON(const uint8x8x4_t v,
-                                      uint8_t* const dst, int stride) {
-  vst4_lane_u8(dst + 0 * stride, v, 0);
-  vst4_lane_u8(dst + 1 * stride, v, 1);
-  vst4_lane_u8(dst + 2 * stride, v, 2);
-  vst4_lane_u8(dst + 3 * stride, v, 3);
-  vst4_lane_u8(dst + 4 * stride, v, 4);
-  vst4_lane_u8(dst + 5 * stride, v, 5);
-  vst4_lane_u8(dst + 6 * stride, v, 6);
-  vst4_lane_u8(dst + 7 * stride, v, 7);
-}
-
-static WEBP_INLINE void Store4x16_NEON(const uint8x16_t p1, const uint8x16_t p0,
-                                       const uint8x16_t q0, const uint8x16_t q1,
-                                       uint8_t* const dst, int stride) {
-  uint8x8x4_t lo, hi;
-  INIT_VECTOR4(lo,
-               vget_low_u8(p1), vget_low_u8(p0),
-               vget_low_u8(q0), vget_low_u8(q1));
-  INIT_VECTOR4(hi,
-               vget_high_u8(p1), vget_high_u8(p0),
-               vget_high_u8(q0), vget_high_u8(q1));
-  Store4x8_NEON(lo, dst - 2 + 0 * stride, stride);
-  Store4x8_NEON(hi, dst - 2 + 8 * stride, stride);
-}
-#endif  // !WORK_AROUND_GCC
-
-static WEBP_INLINE void Store16x2_NEON(const uint8x16_t p0, const uint8x16_t q0,
-                                       uint8_t* const dst, int stride) {
-  vst1q_u8(dst - stride, p0);
-  vst1q_u8(dst, q0);
-}
-
-static WEBP_INLINE void Store16x4_NEON(const uint8x16_t p1, const uint8x16_t p0,
-                                       const uint8x16_t q0, const uint8x16_t q1,
-                                       uint8_t* const dst, int stride) {
-  Store16x2_NEON(p1, p0, dst - stride, stride);
-  Store16x2_NEON(q0, q1, dst + stride, stride);
-}
-
-static WEBP_INLINE void Store8x2x2_NEON(const uint8x16_t p0,
-                                        const uint8x16_t q0,
-                                        uint8_t* const u, uint8_t* const v,
-                                        int stride) {
-  // p0 and q0 contain the u+v samples packed in low/high halves.
-  vst1_u8(u - stride, vget_low_u8(p0));
-  vst1_u8(u,          vget_low_u8(q0));
-  vst1_u8(v - stride, vget_high_u8(p0));
-  vst1_u8(v,          vget_high_u8(q0));
-}
-
-static WEBP_INLINE void Store8x4x2_NEON(const uint8x16_t p1,
-                                        const uint8x16_t p0,
-                                        const uint8x16_t q0,
-                                        const uint8x16_t q1,
-                                        uint8_t* const u, uint8_t* const v,
-                                        int stride) {
-  // The p1...q1 registers contain the u+v samples packed in low/high halves.
-  Store8x2x2_NEON(p1, p0, u - stride, v - stride, stride);
-  Store8x2x2_NEON(q0, q1, u + stride, v + stride, stride);
-}
-
-#if !defined(WORK_AROUND_GCC)
-
-#define STORE6_LANE(DST, VAL0, VAL1, LANE) do {   \
-  vst3_lane_u8((DST) - 3, (VAL0), (LANE));        \
-  vst3_lane_u8((DST) + 0, (VAL1), (LANE));        \
-  (DST) += stride;                                \
-} while (0)
-
-static WEBP_INLINE void Store6x8x2_NEON(
-    const uint8x16_t p2, const uint8x16_t p1, const uint8x16_t p0,
-    const uint8x16_t q0, const uint8x16_t q1, const uint8x16_t q2,
-    uint8_t* u, uint8_t* v, int stride) {
-  uint8x8x3_t u0, u1, v0, v1;
-  INIT_VECTOR3(u0, vget_low_u8(p2), vget_low_u8(p1), vget_low_u8(p0));
-  INIT_VECTOR3(u1, vget_low_u8(q0), vget_low_u8(q1), vget_low_u8(q2));
-  INIT_VECTOR3(v0, vget_high_u8(p2), vget_high_u8(p1), vget_high_u8(p0));
-  INIT_VECTOR3(v1, vget_high_u8(q0), vget_high_u8(q1), vget_high_u8(q2));
-  STORE6_LANE(u, u0, u1, 0);
-  STORE6_LANE(u, u0, u1, 1);
-  STORE6_LANE(u, u0, u1, 2);
-  STORE6_LANE(u, u0, u1, 3);
-  STORE6_LANE(u, u0, u1, 4);
-  STORE6_LANE(u, u0, u1, 5);
-  STORE6_LANE(u, u0, u1, 6);
-  STORE6_LANE(u, u0, u1, 7);
-  STORE6_LANE(v, v0, v1, 0);
-  STORE6_LANE(v, v0, v1, 1);
-  STORE6_LANE(v, v0, v1, 2);
-  STORE6_LANE(v, v0, v1, 3);
-  STORE6_LANE(v, v0, v1, 4);
-  STORE6_LANE(v, v0, v1, 5);
-  STORE6_LANE(v, v0, v1, 6);
-  STORE6_LANE(v, v0, v1, 7);
-}
-#undef STORE6_LANE
-
-static WEBP_INLINE void Store4x8x2_NEON(const uint8x16_t p1,
-                                        const uint8x16_t p0,
-                                        const uint8x16_t q0,
-                                        const uint8x16_t q1,
-                                        uint8_t* const u, uint8_t* const v,
-                                        int stride) {
-  uint8x8x4_t u0, v0;
-  INIT_VECTOR4(u0,
-               vget_low_u8(p1), vget_low_u8(p0),
-               vget_low_u8(q0), vget_low_u8(q1));
-  INIT_VECTOR4(v0,
-               vget_high_u8(p1), vget_high_u8(p0),
-               vget_high_u8(q0), vget_high_u8(q1));
-  vst4_lane_u8(u - 2 + 0 * stride, u0, 0);
-  vst4_lane_u8(u - 2 + 1 * stride, u0, 1);
-  vst4_lane_u8(u - 2 + 2 * stride, u0, 2);
-  vst4_lane_u8(u - 2 + 3 * stride, u0, 3);
-  vst4_lane_u8(u - 2 + 4 * stride, u0, 4);
-  vst4_lane_u8(u - 2 + 5 * stride, u0, 5);
-  vst4_lane_u8(u - 2 + 6 * stride, u0, 6);
-  vst4_lane_u8(u - 2 + 7 * stride, u0, 7);
-  vst4_lane_u8(v - 2 + 0 * stride, v0, 0);
-  vst4_lane_u8(v - 2 + 1 * stride, v0, 1);
-  vst4_lane_u8(v - 2 + 2 * stride, v0, 2);
-  vst4_lane_u8(v - 2 + 3 * stride, v0, 3);
-  vst4_lane_u8(v - 2 + 4 * stride, v0, 4);
-  vst4_lane_u8(v - 2 + 5 * stride, v0, 5);
-  vst4_lane_u8(v - 2 + 6 * stride, v0, 6);
-  vst4_lane_u8(v - 2 + 7 * stride, v0, 7);
-}
-
-#endif  // !WORK_AROUND_GCC
-
-// Zero extend 'v' to an int16x8_t.
-static WEBP_INLINE int16x8_t ConvertU8ToS16_NEON(uint8x8_t v) {
-  return vreinterpretq_s16_u16(vmovl_u8(v));
-}
-
-// Performs unsigned 8b saturation on 'dst01' and 'dst23' storing the result
-// to the corresponding rows of 'dst'.
-static WEBP_INLINE void SaturateAndStore4x4_NEON(uint8_t* const dst,
-                                                 const int16x8_t dst01,
-                                                 const int16x8_t dst23) {
-  // Unsigned saturate to 8b.
-  const uint8x8_t dst01_u8 = vqmovun_s16(dst01);
-  const uint8x8_t dst23_u8 = vqmovun_s16(dst23);
-
-  // Store the results.
-  vst1_lane_u32((uint32_t*)(dst + 0 * BPS), vreinterpret_u32_u8(dst01_u8), 0);
-  vst1_lane_u32((uint32_t*)(dst + 1 * BPS), vreinterpret_u32_u8(dst01_u8), 1);
-  vst1_lane_u32((uint32_t*)(dst + 2 * BPS), vreinterpret_u32_u8(dst23_u8), 0);
-  vst1_lane_u32((uint32_t*)(dst + 3 * BPS), vreinterpret_u32_u8(dst23_u8), 1);
-}
-
-static WEBP_INLINE void Add4x4_NEON(const int16x8_t row01,
-                                    const int16x8_t row23,
-                                    uint8_t* const dst) {
-  uint32x2_t dst01 = vdup_n_u32(0);
-  uint32x2_t dst23 = vdup_n_u32(0);
-
-  // Load the source pixels.
-  dst01 = vld1_lane_u32((uint32_t*)(dst + 0 * BPS), dst01, 0);
-  dst23 = vld1_lane_u32((uint32_t*)(dst + 2 * BPS), dst23, 0);
-  dst01 = vld1_lane_u32((uint32_t*)(dst + 1 * BPS), dst01, 1);
-  dst23 = vld1_lane_u32((uint32_t*)(dst + 3 * BPS), dst23, 1);
-
-  {
-    // Convert to 16b.
-    const int16x8_t dst01_s16 = ConvertU8ToS16_NEON(vreinterpret_u8_u32(dst01));
-    const int16x8_t dst23_s16 = ConvertU8ToS16_NEON(vreinterpret_u8_u32(dst23));
-
-    // Descale with rounding.
-    const int16x8_t out01 = vrsraq_n_s16(dst01_s16, row01, 3);
-    const int16x8_t out23 = vrsraq_n_s16(dst23_s16, row23, 3);
-    // Add the inverse transform.
-    SaturateAndStore4x4_NEON(dst, out01, out23);
-  }
-}
-
-//-----------------------------------------------------------------------------
-// Simple In-loop filtering (Paragraph 15.2)
-
-static uint8x16_t NeedsFilter_NEON(const uint8x16_t p1, const uint8x16_t p0,
-                                   const uint8x16_t q0, const uint8x16_t q1,
-                                   int thresh) {
-  const uint8x16_t thresh_v = vdupq_n_u8((uint8_t)thresh);
-  const uint8x16_t a_p0_q0 = vabdq_u8(p0, q0);               // abs(p0-q0)
-  const uint8x16_t a_p1_q1 = vabdq_u8(p1, q1);               // abs(p1-q1)
-  const uint8x16_t a_p0_q0_2 = vqaddq_u8(a_p0_q0, a_p0_q0);  // 2 * abs(p0-q0)
-  const uint8x16_t a_p1_q1_2 = vshrq_n_u8(a_p1_q1, 1);       // abs(p1-q1) / 2
-  const uint8x16_t sum = vqaddq_u8(a_p0_q0_2, a_p1_q1_2);
-  const uint8x16_t mask = vcgeq_u8(thresh_v, sum);
-  return mask;
-}
-
-static int8x16_t FlipSign_NEON(const uint8x16_t v) {
-  const uint8x16_t sign_bit = vdupq_n_u8(0x80);
-  return vreinterpretq_s8_u8(veorq_u8(v, sign_bit));
-}
-
-static uint8x16_t FlipSignBack_NEON(const int8x16_t v) {
-  const int8x16_t sign_bit = vdupq_n_s8(0x80);
-  return vreinterpretq_u8_s8(veorq_s8(v, sign_bit));
-}
-
-static int8x16_t GetBaseDelta_NEON(const int8x16_t p1, const int8x16_t p0,
-                                   const int8x16_t q0, const int8x16_t q1) {
-  const int8x16_t q0_p0 = vqsubq_s8(q0, p0);      // (q0-p0)
-  const int8x16_t p1_q1 = vqsubq_s8(p1, q1);      // (p1-q1)
-  const int8x16_t s1 = vqaddq_s8(p1_q1, q0_p0);   // (p1-q1) + 1 * (q0 - p0)
-  const int8x16_t s2 = vqaddq_s8(q0_p0, s1);      // (p1-q1) + 2 * (q0 - p0)
-  const int8x16_t s3 = vqaddq_s8(q0_p0, s2);      // (p1-q1) + 3 * (q0 - p0)
-  return s3;
-}
-
-static int8x16_t GetBaseDelta0_NEON(const int8x16_t p0, const int8x16_t q0) {
-  const int8x16_t q0_p0 = vqsubq_s8(q0, p0);      // (q0-p0)
-  const int8x16_t s1 = vqaddq_s8(q0_p0, q0_p0);   // 2 * (q0 - p0)
-  const int8x16_t s2 = vqaddq_s8(q0_p0, s1);      // 3 * (q0 - p0)
-  return s2;
-}
-
-//------------------------------------------------------------------------------
-
-static void ApplyFilter2NoFlip_NEON(const int8x16_t p0s, const int8x16_t q0s,
-                                    const int8x16_t delta,
-                                    int8x16_t* const op0,
-                                    int8x16_t* const oq0) {
-  const int8x16_t kCst3 = vdupq_n_s8(0x03);
-  const int8x16_t kCst4 = vdupq_n_s8(0x04);
-  const int8x16_t delta_p3 = vqaddq_s8(delta, kCst3);
-  const int8x16_t delta_p4 = vqaddq_s8(delta, kCst4);
-  const int8x16_t delta3 = vshrq_n_s8(delta_p3, 3);
-  const int8x16_t delta4 = vshrq_n_s8(delta_p4, 3);
-  *op0 = vqaddq_s8(p0s, delta3);
-  *oq0 = vqsubq_s8(q0s, delta4);
-}
-
-#if defined(WEBP_USE_INTRINSICS)
-
-static void ApplyFilter2_NEON(const int8x16_t p0s, const int8x16_t q0s,
-                              const int8x16_t delta,
-                              uint8x16_t* const op0, uint8x16_t* const oq0) {
-  const int8x16_t kCst3 = vdupq_n_s8(0x03);
-  const int8x16_t kCst4 = vdupq_n_s8(0x04);
-  const int8x16_t delta_p3 = vqaddq_s8(delta, kCst3);
-  const int8x16_t delta_p4 = vqaddq_s8(delta, kCst4);
-  const int8x16_t delta3 = vshrq_n_s8(delta_p3, 3);
-  const int8x16_t delta4 = vshrq_n_s8(delta_p4, 3);
-  const int8x16_t sp0 = vqaddq_s8(p0s, delta3);
-  const int8x16_t sq0 = vqsubq_s8(q0s, delta4);
-  *op0 = FlipSignBack_NEON(sp0);
-  *oq0 = FlipSignBack_NEON(sq0);
-}
-
-static void DoFilter2_NEON(const uint8x16_t p1, const uint8x16_t p0,
-                           const uint8x16_t q0, const uint8x16_t q1,
-                           const uint8x16_t mask,
-                           uint8x16_t* const op0, uint8x16_t* const oq0) {
-  const int8x16_t p1s = FlipSign_NEON(p1);
-  const int8x16_t p0s = FlipSign_NEON(p0);
-  const int8x16_t q0s = FlipSign_NEON(q0);
-  const int8x16_t q1s = FlipSign_NEON(q1);
-  const int8x16_t delta0 = GetBaseDelta_NEON(p1s, p0s, q0s, q1s);
-  const int8x16_t delta1 = vandq_s8(delta0, vreinterpretq_s8_u8(mask));
-  ApplyFilter2_NEON(p0s, q0s, delta1, op0, oq0);
-}
-
-static void SimpleVFilter16_NEON(uint8_t* p, int stride, int thresh) {
-  uint8x16_t p1, p0, q0, q1, op0, oq0;
-  Load16x4_NEON(p, stride, &p1, &p0, &q0, &q1);
-  {
-    const uint8x16_t mask = NeedsFilter_NEON(p1, p0, q0, q1, thresh);
-    DoFilter2_NEON(p1, p0, q0, q1, mask, &op0, &oq0);
-  }
-  Store16x2_NEON(op0, oq0, p, stride);
-}
-
-static void SimpleHFilter16_NEON(uint8_t* p, int stride, int thresh) {
-  uint8x16_t p1, p0, q0, q1, oq0, op0;
-  Load4x16_NEON(p, stride, &p1, &p0, &q0, &q1);
-  {
-    const uint8x16_t mask = NeedsFilter_NEON(p1, p0, q0, q1, thresh);
-    DoFilter2_NEON(p1, p0, q0, q1, mask, &op0, &oq0);
-  }
-  Store2x16_NEON(op0, oq0, p, stride);
-}
-
-#else
-
-// Load/Store vertical edge
-#define LOAD8x4(c1, c2, c3, c4, b1, b2, stride)                                \
-  "vld4.8 {" #c1 "[0]," #c2 "[0]," #c3 "[0]," #c4 "[0]}," #b1 "," #stride "\n" \
-  "vld4.8 {" #c1 "[1]," #c2 "[1]," #c3 "[1]," #c4 "[1]}," #b2 "," #stride "\n" \
-  "vld4.8 {" #c1 "[2]," #c2 "[2]," #c3 "[2]," #c4 "[2]}," #b1 "," #stride "\n" \
-  "vld4.8 {" #c1 "[3]," #c2 "[3]," #c3 "[3]," #c4 "[3]}," #b2 "," #stride "\n" \
-  "vld4.8 {" #c1 "[4]," #c2 "[4]," #c3 "[4]," #c4 "[4]}," #b1 "," #stride "\n" \
-  "vld4.8 {" #c1 "[5]," #c2 "[5]," #c3 "[5]," #c4 "[5]}," #b2 "," #stride "\n" \
-  "vld4.8 {" #c1 "[6]," #c2 "[6]," #c3 "[6]," #c4 "[6]}," #b1 "," #stride "\n" \
-  "vld4.8 {" #c1 "[7]," #c2 "[7]," #c3 "[7]," #c4 "[7]}," #b2 "," #stride "\n"
-
-#define STORE8x2(c1, c2, p, stride)                                            \
-  "vst2.8   {" #c1 "[0], " #c2 "[0]}," #p "," #stride " \n"                    \
-  "vst2.8   {" #c1 "[1], " #c2 "[1]}," #p "," #stride " \n"                    \
-  "vst2.8   {" #c1 "[2], " #c2 "[2]}," #p "," #stride " \n"                    \
-  "vst2.8   {" #c1 "[3], " #c2 "[3]}," #p "," #stride " \n"                    \
-  "vst2.8   {" #c1 "[4], " #c2 "[4]}," #p "," #stride " \n"                    \
-  "vst2.8   {" #c1 "[5], " #c2 "[5]}," #p "," #stride " \n"                    \
-  "vst2.8   {" #c1 "[6], " #c2 "[6]}," #p "," #stride " \n"                    \
-  "vst2.8   {" #c1 "[7], " #c2 "[7]}," #p "," #stride " \n"
-
-#define QRegs "q0", "q1", "q2", "q3",                                          \
-              "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
-
-#define FLIP_SIGN_BIT2(a, b, s)                                                \
-  "veor     " #a "," #a "," #s "               \n"                             \
-  "veor     " #b "," #b "," #s "               \n"                             \
-
-#define FLIP_SIGN_BIT4(a, b, c, d, s)                                          \
-  FLIP_SIGN_BIT2(a, b, s)                                                      \
-  FLIP_SIGN_BIT2(c, d, s)                                                      \
-
-#define NEEDS_FILTER(p1, p0, q0, q1, thresh, mask)                             \
-  "vabd.u8    q15," #p0 "," #q0 "         \n"  /* abs(p0 - q0) */              \
-  "vabd.u8    q14," #p1 "," #q1 "         \n"  /* abs(p1 - q1) */              \
-  "vqadd.u8   q15, q15, q15               \n"  /* abs(p0 - q0) * 2 */          \
-  "vshr.u8    q14, q14, #1                \n"  /* abs(p1 - q1) / 2 */          \
-  "vqadd.u8   q15, q15, q14     \n"  /* abs(p0 - q0) * 2 + abs(p1 - q1) / 2 */ \
-  "vdup.8     q14, " #thresh "            \n"                                  \
-  "vcge.u8   " #mask ", q14, q15          \n"  /* mask <= thresh */
-
-#define GET_BASE_DELTA(p1, p0, q0, q1, o)                                      \
-  "vqsub.s8   q15," #q0 "," #p0 "         \n"  /* (q0 - p0) */                 \
-  "vqsub.s8  " #o "," #p1 "," #q1 "       \n"  /* (p1 - q1) */                 \
-  "vqadd.s8  " #o "," #o ", q15           \n"  /* (p1 - q1) + 1 * (p0 - q0) */ \
-  "vqadd.s8  " #o "," #o ", q15           \n"  /* (p1 - q1) + 2 * (p0 - q0) */ \
-  "vqadd.s8  " #o "," #o ", q15           \n"  /* (p1 - q1) + 3 * (p0 - q0) */
-
-#define DO_SIMPLE_FILTER(p0, q0, fl)                                           \
-  "vmov.i8    q15, #0x03                  \n"                                  \
-  "vqadd.s8   q15, q15, " #fl "           \n"  /* filter1 = filter + 3 */      \
-  "vshr.s8    q15, q15, #3                \n"  /* filter1 >> 3 */              \
-  "vqadd.s8  " #p0 "," #p0 ", q15         \n"  /* p0 += filter1 */             \
-                                                                               \
-  "vmov.i8    q15, #0x04                  \n"                                  \
-  "vqadd.s8   q15, q15, " #fl "           \n"  /* filter1 = filter + 4 */      \
-  "vshr.s8    q15, q15, #3                \n"  /* filter2 >> 3 */              \
-  "vqsub.s8  " #q0 "," #q0 ", q15         \n"  /* q0 -= filter2 */
-
-// Applies filter on 2 pixels (p0 and q0)
-#define DO_FILTER2(p1, p0, q0, q1, thresh)                                     \
-  NEEDS_FILTER(p1, p0, q0, q1, thresh, q9)     /* filter mask in q9 */         \
-  "vmov.i8    q10, #0x80                  \n"  /* sign bit */                  \
-  FLIP_SIGN_BIT4(p1, p0, q0, q1, q10)          /* convert to signed value */   \
-  GET_BASE_DELTA(p1, p0, q0, q1, q11)          /* get filter level  */         \
-  "vand       q9, q9, q11                 \n"  /* apply filter mask */         \
-  DO_SIMPLE_FILTER(p0, q0, q9)                 /* apply filter */              \
-  FLIP_SIGN_BIT2(p0, q0, q10)
-
-static void SimpleVFilter16_NEON(uint8_t* p, int stride, int thresh) {
-  __asm__ volatile (
-    "sub        %[p], %[p], %[stride], lsl #1  \n"  // p -= 2 * stride
-
-    "vld1.u8    {q1}, [%[p]], %[stride]        \n"  // p1
-    "vld1.u8    {q2}, [%[p]], %[stride]        \n"  // p0
-    "vld1.u8    {q3}, [%[p]], %[stride]        \n"  // q0
-    "vld1.u8    {q12}, [%[p]]                  \n"  // q1
-
-    DO_FILTER2(q1, q2, q3, q12, %[thresh])
-
-    "sub        %[p], %[p], %[stride], lsl #1  \n"  // p -= 2 * stride
-
-    "vst1.u8    {q2}, [%[p]], %[stride]        \n"  // store op0
-    "vst1.u8    {q3}, [%[p]]                   \n"  // store oq0
-    : [p] "+r"(p)
-    : [stride] "r"(stride), [thresh] "r"(thresh)
-    : "memory", QRegs
-  );
-}
-
-static void SimpleHFilter16_NEON(uint8_t* p, int stride, int thresh) {
-  __asm__ volatile (
-    "sub        r4, %[p], #2                   \n"  // base1 = p - 2
-    "lsl        r6, %[stride], #1              \n"  // r6 = 2 * stride
-    "add        r5, r4, %[stride]              \n"  // base2 = base1 + stride
-
-    LOAD8x4(d2, d3, d4, d5, [r4], [r5], r6)
-    LOAD8x4(d24, d25, d26, d27, [r4], [r5], r6)
-    "vswp       d3, d24                        \n"  // p1:q1 p0:q3
-    "vswp       d5, d26                        \n"  // q0:q2 q1:q4
-    "vswp       q2, q12                        \n"  // p1:q1 p0:q2 q0:q3 q1:q4
-
-    DO_FILTER2(q1, q2, q12, q13, %[thresh])
-
-    "sub        %[p], %[p], #1                 \n"  // p - 1
-
-    "vswp        d5, d24                       \n"
-    STORE8x2(d4, d5, [%[p]], %[stride])
-    STORE8x2(d24, d25, [%[p]], %[stride])
-
-    : [p] "+r"(p)
-    : [stride] "r"(stride), [thresh] "r"(thresh)
-    : "memory", "r4", "r5", "r6", QRegs
-  );
-}
-
-#undef LOAD8x4
-#undef STORE8x2
-
-#endif    // WEBP_USE_INTRINSICS
-
-static void SimpleVFilter16i_NEON(uint8_t* p, int stride, int thresh) {
-  uint32_t k;
-  for (k = 3; k != 0; --k) {
-    p += 4 * stride;
-    SimpleVFilter16_NEON(p, stride, thresh);
-  }
-}
-
-static void SimpleHFilter16i_NEON(uint8_t* p, int stride, int thresh) {
-  uint32_t k;
-  for (k = 3; k != 0; --k) {
-    p += 4;
-    SimpleHFilter16_NEON(p, stride, thresh);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Complex In-loop filtering (Paragraph 15.3)
-
-static uint8x16_t NeedsHev_NEON(const uint8x16_t p1, const uint8x16_t p0,
-                                const uint8x16_t q0, const uint8x16_t q1,
-                                int hev_thresh) {
-  const uint8x16_t hev_thresh_v = vdupq_n_u8((uint8_t)hev_thresh);
-  const uint8x16_t a_p1_p0 = vabdq_u8(p1, p0);  // abs(p1 - p0)
-  const uint8x16_t a_q1_q0 = vabdq_u8(q1, q0);  // abs(q1 - q0)
-  const uint8x16_t a_max = vmaxq_u8(a_p1_p0, a_q1_q0);
-  const uint8x16_t mask = vcgtq_u8(a_max, hev_thresh_v);
-  return mask;
-}
-
-static uint8x16_t NeedsFilter2_NEON(const uint8x16_t p3, const uint8x16_t p2,
-                                    const uint8x16_t p1, const uint8x16_t p0,
-                                    const uint8x16_t q0, const uint8x16_t q1,
-                                    const uint8x16_t q2, const uint8x16_t q3,
-                                    int ithresh, int thresh) {
-  const uint8x16_t ithresh_v = vdupq_n_u8((uint8_t)ithresh);
-  const uint8x16_t a_p3_p2 = vabdq_u8(p3, p2);  // abs(p3 - p2)
-  const uint8x16_t a_p2_p1 = vabdq_u8(p2, p1);  // abs(p2 - p1)
-  const uint8x16_t a_p1_p0 = vabdq_u8(p1, p0);  // abs(p1 - p0)
-  const uint8x16_t a_q3_q2 = vabdq_u8(q3, q2);  // abs(q3 - q2)
-  const uint8x16_t a_q2_q1 = vabdq_u8(q2, q1);  // abs(q2 - q1)
-  const uint8x16_t a_q1_q0 = vabdq_u8(q1, q0);  // abs(q1 - q0)
-  const uint8x16_t max1 = vmaxq_u8(a_p3_p2, a_p2_p1);
-  const uint8x16_t max2 = vmaxq_u8(a_p1_p0, a_q3_q2);
-  const uint8x16_t max3 = vmaxq_u8(a_q2_q1, a_q1_q0);
-  const uint8x16_t max12 = vmaxq_u8(max1, max2);
-  const uint8x16_t max123 = vmaxq_u8(max12, max3);
-  const uint8x16_t mask2 = vcgeq_u8(ithresh_v, max123);
-  const uint8x16_t mask1 = NeedsFilter_NEON(p1, p0, q0, q1, thresh);
-  const uint8x16_t mask = vandq_u8(mask1, mask2);
-  return mask;
-}
-
-//  4-points filter
-
-static void ApplyFilter4_NEON(
-    const int8x16_t p1, const int8x16_t p0,
-    const int8x16_t q0, const int8x16_t q1,
-    const int8x16_t delta0,
-    uint8x16_t* const op1, uint8x16_t* const op0,
-    uint8x16_t* const oq0, uint8x16_t* const oq1) {
-  const int8x16_t kCst3 = vdupq_n_s8(0x03);
-  const int8x16_t kCst4 = vdupq_n_s8(0x04);
-  const int8x16_t delta1 = vqaddq_s8(delta0, kCst4);
-  const int8x16_t delta2 = vqaddq_s8(delta0, kCst3);
-  const int8x16_t a1 = vshrq_n_s8(delta1, 3);
-  const int8x16_t a2 = vshrq_n_s8(delta2, 3);
-  const int8x16_t a3 = vrshrq_n_s8(a1, 1);   // a3 = (a1 + 1) >> 1
-  *op0 = FlipSignBack_NEON(vqaddq_s8(p0, a2));  // clip(p0 + a2)
-  *oq0 = FlipSignBack_NEON(vqsubq_s8(q0, a1));  // clip(q0 - a1)
-  *op1 = FlipSignBack_NEON(vqaddq_s8(p1, a3));  // clip(p1 + a3)
-  *oq1 = FlipSignBack_NEON(vqsubq_s8(q1, a3));  // clip(q1 - a3)
-}
-
-static void DoFilter4_NEON(
-    const uint8x16_t p1, const uint8x16_t p0,
-    const uint8x16_t q0, const uint8x16_t q1,
-    const uint8x16_t mask, const uint8x16_t hev_mask,
-    uint8x16_t* const op1, uint8x16_t* const op0,
-    uint8x16_t* const oq0, uint8x16_t* const oq1) {
-  // This is a fused version of DoFilter2() calling ApplyFilter2 directly
-  const int8x16_t p1s = FlipSign_NEON(p1);
-  int8x16_t p0s = FlipSign_NEON(p0);
-  int8x16_t q0s = FlipSign_NEON(q0);
-  const int8x16_t q1s = FlipSign_NEON(q1);
-  const uint8x16_t simple_lf_mask = vandq_u8(mask, hev_mask);
-
-  // do_filter2 part (simple loopfilter on pixels with hev)
-  {
-    const int8x16_t delta = GetBaseDelta_NEON(p1s, p0s, q0s, q1s);
-    const int8x16_t simple_lf_delta =
-        vandq_s8(delta, vreinterpretq_s8_u8(simple_lf_mask));
-    ApplyFilter2NoFlip_NEON(p0s, q0s, simple_lf_delta, &p0s, &q0s);
-  }
-
-  // do_filter4 part (complex loopfilter on pixels without hev)
-  {
-    const int8x16_t delta0 = GetBaseDelta0_NEON(p0s, q0s);
-    // we use: (mask & hev_mask) ^ mask = mask & !hev_mask
-    const uint8x16_t complex_lf_mask = veorq_u8(simple_lf_mask, mask);
-    const int8x16_t complex_lf_delta =
-        vandq_s8(delta0, vreinterpretq_s8_u8(complex_lf_mask));
-    ApplyFilter4_NEON(p1s, p0s, q0s, q1s, complex_lf_delta, op1, op0, oq0, oq1);
-  }
-}
-
-//  6-points filter
-
-static void ApplyFilter6_NEON(
-    const int8x16_t p2, const int8x16_t p1, const int8x16_t p0,
-    const int8x16_t q0, const int8x16_t q1, const int8x16_t q2,
-    const int8x16_t delta,
-    uint8x16_t* const op2, uint8x16_t* const op1, uint8x16_t* const op0,
-    uint8x16_t* const oq0, uint8x16_t* const oq1, uint8x16_t* const oq2) {
-  // We have to compute: X = (9*a+63) >> 7, Y = (18*a+63)>>7, Z = (27*a+63) >> 7
-  // Turns out, there's a common sub-expression S=9 * a - 1 that can be used
-  // with the special vqrshrn_n_s16 rounding-shift-and-narrow instruction:
-  //   X = (S + 64) >> 7, Y = (S + 32) >> 6, Z = (18 * a + S + 64) >> 7
-  const int8x8_t delta_lo = vget_low_s8(delta);
-  const int8x8_t delta_hi = vget_high_s8(delta);
-  const int8x8_t kCst9 = vdup_n_s8(9);
-  const int16x8_t kCstm1 = vdupq_n_s16(-1);
-  const int8x8_t kCst18 = vdup_n_s8(18);
-  const int16x8_t S_lo = vmlal_s8(kCstm1, kCst9, delta_lo);  // S = 9 * a - 1
-  const int16x8_t S_hi = vmlal_s8(kCstm1, kCst9, delta_hi);
-  const int16x8_t Z_lo = vmlal_s8(S_lo, kCst18, delta_lo);   // S + 18 * a
-  const int16x8_t Z_hi = vmlal_s8(S_hi, kCst18, delta_hi);
-  const int8x8_t a3_lo = vqrshrn_n_s16(S_lo, 7);   // (9 * a + 63) >> 7
-  const int8x8_t a3_hi = vqrshrn_n_s16(S_hi, 7);
-  const int8x8_t a2_lo = vqrshrn_n_s16(S_lo, 6);   // (9 * a + 31) >> 6
-  const int8x8_t a2_hi = vqrshrn_n_s16(S_hi, 6);
-  const int8x8_t a1_lo = vqrshrn_n_s16(Z_lo, 7);   // (27 * a + 63) >> 7
-  const int8x8_t a1_hi = vqrshrn_n_s16(Z_hi, 7);
-  const int8x16_t a1 = vcombine_s8(a1_lo, a1_hi);
-  const int8x16_t a2 = vcombine_s8(a2_lo, a2_hi);
-  const int8x16_t a3 = vcombine_s8(a3_lo, a3_hi);
-
-  *op0 = FlipSignBack_NEON(vqaddq_s8(p0, a1));  // clip(p0 + a1)
-  *oq0 = FlipSignBack_NEON(vqsubq_s8(q0, a1));  // clip(q0 - q1)
-  *oq1 = FlipSignBack_NEON(vqsubq_s8(q1, a2));  // clip(q1 - a2)
-  *op1 = FlipSignBack_NEON(vqaddq_s8(p1, a2));  // clip(p1 + a2)
-  *oq2 = FlipSignBack_NEON(vqsubq_s8(q2, a3));  // clip(q2 - a3)
-  *op2 = FlipSignBack_NEON(vqaddq_s8(p2, a3));  // clip(p2 + a3)
-}
-
-static void DoFilter6_NEON(
-    const uint8x16_t p2, const uint8x16_t p1, const uint8x16_t p0,
-    const uint8x16_t q0, const uint8x16_t q1, const uint8x16_t q2,
-    const uint8x16_t mask, const uint8x16_t hev_mask,
-    uint8x16_t* const op2, uint8x16_t* const op1, uint8x16_t* const op0,
-    uint8x16_t* const oq0, uint8x16_t* const oq1, uint8x16_t* const oq2) {
-  // This is a fused version of DoFilter2() calling ApplyFilter2 directly
-  const int8x16_t p2s = FlipSign_NEON(p2);
-  const int8x16_t p1s = FlipSign_NEON(p1);
-  int8x16_t p0s = FlipSign_NEON(p0);
-  int8x16_t q0s = FlipSign_NEON(q0);
-  const int8x16_t q1s = FlipSign_NEON(q1);
-  const int8x16_t q2s = FlipSign_NEON(q2);
-  const uint8x16_t simple_lf_mask = vandq_u8(mask, hev_mask);
-  const int8x16_t delta0 = GetBaseDelta_NEON(p1s, p0s, q0s, q1s);
-
-  // do_filter2 part (simple loopfilter on pixels with hev)
-  {
-    const int8x16_t simple_lf_delta =
-        vandq_s8(delta0, vreinterpretq_s8_u8(simple_lf_mask));
-    ApplyFilter2NoFlip_NEON(p0s, q0s, simple_lf_delta, &p0s, &q0s);
-  }
-
-  // do_filter6 part (complex loopfilter on pixels without hev)
-  {
-    // we use: (mask & hev_mask) ^ mask = mask & !hev_mask
-    const uint8x16_t complex_lf_mask = veorq_u8(simple_lf_mask, mask);
-    const int8x16_t complex_lf_delta =
-        vandq_s8(delta0, vreinterpretq_s8_u8(complex_lf_mask));
-    ApplyFilter6_NEON(p2s, p1s, p0s, q0s, q1s, q2s, complex_lf_delta,
-                      op2, op1, op0, oq0, oq1, oq2);
-  }
-}
-
-// on macroblock edges
-
-static void VFilter16_NEON(uint8_t* p, int stride,
-                           int thresh, int ithresh, int hev_thresh) {
-  uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3;
-  Load16x8_NEON(p, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3);
-  {
-    const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3,
-                                              ithresh, thresh);
-    const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh);
-    uint8x16_t op2, op1, op0, oq0, oq1, oq2;
-    DoFilter6_NEON(p2, p1, p0, q0, q1, q2, mask, hev_mask,
-                   &op2, &op1, &op0, &oq0, &oq1, &oq2);
-    Store16x2_NEON(op2, op1, p - 2 * stride, stride);
-    Store16x2_NEON(op0, oq0, p + 0 * stride, stride);
-    Store16x2_NEON(oq1, oq2, p + 2 * stride, stride);
-  }
-}
-
-static void HFilter16_NEON(uint8_t* p, int stride,
-                           int thresh, int ithresh, int hev_thresh) {
-  uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3;
-  Load8x16_NEON(p, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3);
-  {
-    const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3,
-                                              ithresh, thresh);
-    const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh);
-    uint8x16_t op2, op1, op0, oq0, oq1, oq2;
-    DoFilter6_NEON(p2, p1, p0, q0, q1, q2, mask, hev_mask,
-                   &op2, &op1, &op0, &oq0, &oq1, &oq2);
-    Store2x16_NEON(op2, op1, p - 2, stride);
-    Store2x16_NEON(op0, oq0, p + 0, stride);
-    Store2x16_NEON(oq1, oq2, p + 2, stride);
-  }
-}
-
-// on three inner edges
-static void VFilter16i_NEON(uint8_t* p, int stride,
-                            int thresh, int ithresh, int hev_thresh) {
-  uint32_t k;
-  uint8x16_t p3, p2, p1, p0;
-  Load16x4_NEON(p + 2  * stride, stride, &p3, &p2, &p1, &p0);
-  for (k = 3; k != 0; --k) {
-    uint8x16_t q0, q1, q2, q3;
-    p += 4 * stride;
-    Load16x4_NEON(p + 2  * stride, stride, &q0, &q1, &q2, &q3);
-    {
-      const uint8x16_t mask =
-          NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, ithresh, thresh);
-      const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh);
-      // p3 and p2 are not just temporary variables here: they will be
-      // re-used for next span. And q2/q3 will become p1/p0 accordingly.
-      DoFilter4_NEON(p1, p0, q0, q1, mask, hev_mask, &p1, &p0, &p3, &p2);
-      Store16x4_NEON(p1, p0, p3, p2, p, stride);
-      p1 = q2;
-      p0 = q3;
-    }
-  }
-}
-
-#if !defined(WORK_AROUND_GCC)
-static void HFilter16i_NEON(uint8_t* p, int stride,
-                            int thresh, int ithresh, int hev_thresh) {
-  uint32_t k;
-  uint8x16_t p3, p2, p1, p0;
-  Load4x16_NEON(p + 2, stride, &p3, &p2, &p1, &p0);
-  for (k = 3; k != 0; --k) {
-    uint8x16_t q0, q1, q2, q3;
-    p += 4;
-    Load4x16_NEON(p + 2, stride, &q0, &q1, &q2, &q3);
-    {
-      const uint8x16_t mask =
-          NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3, ithresh, thresh);
-      const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh);
-      DoFilter4_NEON(p1, p0, q0, q1, mask, hev_mask, &p1, &p0, &p3, &p2);
-      Store4x16_NEON(p1, p0, p3, p2, p, stride);
-      p1 = q2;
-      p0 = q3;
-    }
-  }
-}
-#endif  // !WORK_AROUND_GCC
-
-// 8-pixels wide variant, for chroma filtering
-static void VFilter8_NEON(uint8_t* u, uint8_t* v, int stride,
-                          int thresh, int ithresh, int hev_thresh) {
-  uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3;
-  Load8x8x2_NEON(u, v, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3);
-  {
-    const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3,
-                                              ithresh, thresh);
-    const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh);
-    uint8x16_t op2, op1, op0, oq0, oq1, oq2;
-    DoFilter6_NEON(p2, p1, p0, q0, q1, q2, mask, hev_mask,
-                   &op2, &op1, &op0, &oq0, &oq1, &oq2);
-    Store8x2x2_NEON(op2, op1, u - 2 * stride, v - 2 * stride, stride);
-    Store8x2x2_NEON(op0, oq0, u + 0 * stride, v + 0 * stride, stride);
-    Store8x2x2_NEON(oq1, oq2, u + 2 * stride, v + 2 * stride, stride);
-  }
-}
-static void VFilter8i_NEON(uint8_t* u, uint8_t* v, int stride,
-                           int thresh, int ithresh, int hev_thresh) {
-  uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3;
-  u += 4 * stride;
-  v += 4 * stride;
-  Load8x8x2_NEON(u, v, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3);
-  {
-    const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3,
-                                              ithresh, thresh);
-    const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh);
-    uint8x16_t op1, op0, oq0, oq1;
-    DoFilter4_NEON(p1, p0, q0, q1, mask, hev_mask, &op1, &op0, &oq0, &oq1);
-    Store8x4x2_NEON(op1, op0, oq0, oq1, u, v, stride);
-  }
-}
-
-#if !defined(WORK_AROUND_GCC)
-static void HFilter8_NEON(uint8_t* u, uint8_t* v, int stride,
-                          int thresh, int ithresh, int hev_thresh) {
-  uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3;
-  Load8x8x2T_NEON(u, v, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3);
-  {
-    const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3,
-                                              ithresh, thresh);
-    const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh);
-    uint8x16_t op2, op1, op0, oq0, oq1, oq2;
-    DoFilter6_NEON(p2, p1, p0, q0, q1, q2, mask, hev_mask,
-                   &op2, &op1, &op0, &oq0, &oq1, &oq2);
-    Store6x8x2_NEON(op2, op1, op0, oq0, oq1, oq2, u, v, stride);
-  }
-}
-
-static void HFilter8i_NEON(uint8_t* u, uint8_t* v, int stride,
-                           int thresh, int ithresh, int hev_thresh) {
-  uint8x16_t p3, p2, p1, p0, q0, q1, q2, q3;
-  u += 4;
-  v += 4;
-  Load8x8x2T_NEON(u, v, stride, &p3, &p2, &p1, &p0, &q0, &q1, &q2, &q3);
-  {
-    const uint8x16_t mask = NeedsFilter2_NEON(p3, p2, p1, p0, q0, q1, q2, q3,
-                                              ithresh, thresh);
-    const uint8x16_t hev_mask = NeedsHev_NEON(p1, p0, q0, q1, hev_thresh);
-    uint8x16_t op1, op0, oq0, oq1;
-    DoFilter4_NEON(p1, p0, q0, q1, mask, hev_mask, &op1, &op0, &oq0, &oq1);
-    Store4x8x2_NEON(op1, op0, oq0, oq1, u, v, stride);
-  }
-}
-#endif  // !WORK_AROUND_GCC
-
-//-----------------------------------------------------------------------------
-// Inverse transforms (Paragraph 14.4)
-
-// Technically these are unsigned but vqdmulh is only available in signed.
-// vqdmulh returns high half (effectively >> 16) but also doubles the value,
-// changing the >> 16 to >> 15 and requiring an additional >> 1.
-// We use this to our advantage with kC2. The canonical value is 35468.
-// However, the high bit is set so treating it as signed will give incorrect
-// results. We avoid this by down shifting by 1 here to clear the highest bit.
-// Combined with the doubling effect of vqdmulh we get >> 16.
-// This can not be applied to kC1 because the lowest bit is set. Down shifting
-// the constant would reduce precision.
-
-// libwebp uses a trick to avoid some extra addition that libvpx does.
-// Instead of:
-// temp2 = ip[12] + ((ip[12] * cospi8sqrt2minus1) >> 16);
-// libwebp adds 1 << 16 to cospi8sqrt2minus1 (kC1). However, this causes the
-// same issue with kC1 and vqdmulh that we work around by down shifting kC2
-
-static const int16_t kC1 = 20091;
-static const int16_t kC2 = 17734;  // half of kC2, actually. See comment above.
-
-#if defined(WEBP_USE_INTRINSICS)
-static WEBP_INLINE void Transpose8x2_NEON(const int16x8_t in0,
-                                          const int16x8_t in1,
-                                          int16x8x2_t* const out) {
-  // a0 a1 a2 a3 | b0 b1 b2 b3   => a0 b0 c0 d0 | a1 b1 c1 d1
-  // c0 c1 c2 c3 | d0 d1 d2 d3      a2 b2 c2 d2 | a3 b3 c3 d3
-  const int16x8x2_t tmp0 = vzipq_s16(in0, in1);   // a0 c0 a1 c1 a2 c2 ...
-                                                  // b0 d0 b1 d1 b2 d2 ...
-  *out = vzipq_s16(tmp0.val[0], tmp0.val[1]);
-}
-
-static WEBP_INLINE void TransformPass_NEON(int16x8x2_t* const rows) {
-  // {rows} = in0 | in4
-  //          in8 | in12
-  // B1 = in4 | in12
-  const int16x8_t B1 =
-      vcombine_s16(vget_high_s16(rows->val[0]), vget_high_s16(rows->val[1]));
-  // C0 = kC1 * in4 | kC1 * in12
-  // C1 = kC2 * in4 | kC2 * in12
-  const int16x8_t C0 = vsraq_n_s16(B1, vqdmulhq_n_s16(B1, kC1), 1);
-  const int16x8_t C1 = vqdmulhq_n_s16(B1, kC2);
-  const int16x4_t a = vqadd_s16(vget_low_s16(rows->val[0]),
-                                vget_low_s16(rows->val[1]));   // in0 + in8
-  const int16x4_t b = vqsub_s16(vget_low_s16(rows->val[0]),
-                                vget_low_s16(rows->val[1]));   // in0 - in8
-  // c = kC2 * in4 - kC1 * in12
-  // d = kC1 * in4 + kC2 * in12
-  const int16x4_t c = vqsub_s16(vget_low_s16(C1), vget_high_s16(C0));
-  const int16x4_t d = vqadd_s16(vget_low_s16(C0), vget_high_s16(C1));
-  const int16x8_t D0 = vcombine_s16(a, b);      // D0 = a | b
-  const int16x8_t D1 = vcombine_s16(d, c);      // D1 = d | c
-  const int16x8_t E0 = vqaddq_s16(D0, D1);      // a+d | b+c
-  const int16x8_t E_tmp = vqsubq_s16(D0, D1);   // a-d | b-c
-  const int16x8_t E1 = vcombine_s16(vget_high_s16(E_tmp), vget_low_s16(E_tmp));
-  Transpose8x2_NEON(E0, E1, rows);
-}
-
-static void TransformOne_NEON(const int16_t* in, uint8_t* dst) {
-  int16x8x2_t rows;
-  INIT_VECTOR2(rows, vld1q_s16(in + 0), vld1q_s16(in + 8));
-  TransformPass_NEON(&rows);
-  TransformPass_NEON(&rows);
-  Add4x4_NEON(rows.val[0], rows.val[1], dst);
-}
-
-#else
-
-static void TransformOne_NEON(const int16_t* in, uint8_t* dst) {
-  const int kBPS = BPS;
-  // kC1, kC2. Padded because vld1.16 loads 8 bytes
-  const int16_t constants[4] = { kC1, kC2, 0, 0 };
-  /* Adapted from libvpx: vp8/common/arm/neon/shortidct4x4llm_neon.asm */
-  __asm__ volatile (
-    "vld1.16         {q1, q2}, [%[in]]           \n"
-    "vld1.16         {d0}, [%[constants]]        \n"
-
-    /* d2: in[0]
-     * d3: in[8]
-     * d4: in[4]
-     * d5: in[12]
-     */
-    "vswp            d3, d4                      \n"
-
-    /* q8 = {in[4], in[12]} * kC1 * 2 >> 16
-     * q9 = {in[4], in[12]} * kC2 >> 16
-     */
-    "vqdmulh.s16     q8, q2, d0[0]               \n"
-    "vqdmulh.s16     q9, q2, d0[1]               \n"
-
-    /* d22 = a = in[0] + in[8]
-     * d23 = b = in[0] - in[8]
-     */
-    "vqadd.s16       d22, d2, d3                 \n"
-    "vqsub.s16       d23, d2, d3                 \n"
-
-    /* The multiplication should be x * kC1 >> 16
-     * However, with vqdmulh we get x * kC1 * 2 >> 16
-     * (multiply, double, return high half)
-     * We avoided this in kC2 by pre-shifting the constant.
-     * q8 = in[4]/[12] * kC1 >> 16
-     */
-    "vshr.s16        q8, q8, #1                  \n"
-
-    /* Add {in[4], in[12]} back after the multiplication. This is handled by
-     * adding 1 << 16 to kC1 in the libwebp C code.
-     */
-    "vqadd.s16       q8, q2, q8                  \n"
-
-    /* d20 = c = in[4]*kC2 - in[12]*kC1
-     * d21 = d = in[4]*kC1 + in[12]*kC2
-     */
-    "vqsub.s16       d20, d18, d17               \n"
-    "vqadd.s16       d21, d19, d16               \n"
-
-    /* d2 = tmp[0] = a + d
-     * d3 = tmp[1] = b + c
-     * d4 = tmp[2] = b - c
-     * d5 = tmp[3] = a - d
-     */
-    "vqadd.s16       d2, d22, d21                \n"
-    "vqadd.s16       d3, d23, d20                \n"
-    "vqsub.s16       d4, d23, d20                \n"
-    "vqsub.s16       d5, d22, d21                \n"
-
-    "vzip.16         q1, q2                      \n"
-    "vzip.16         q1, q2                      \n"
-
-    "vswp            d3, d4                      \n"
-
-    /* q8 = {tmp[4], tmp[12]} * kC1 * 2 >> 16
-     * q9 = {tmp[4], tmp[12]} * kC2 >> 16
-     */
-    "vqdmulh.s16     q8, q2, d0[0]               \n"
-    "vqdmulh.s16     q9, q2, d0[1]               \n"
-
-    /* d22 = a = tmp[0] + tmp[8]
-     * d23 = b = tmp[0] - tmp[8]
-     */
-    "vqadd.s16       d22, d2, d3                 \n"
-    "vqsub.s16       d23, d2, d3                 \n"
-
-    /* See long winded explanations prior */
-    "vshr.s16        q8, q8, #1                  \n"
-    "vqadd.s16       q8, q2, q8                  \n"
-
-    /* d20 = c = in[4]*kC2 - in[12]*kC1
-     * d21 = d = in[4]*kC1 + in[12]*kC2
-     */
-    "vqsub.s16       d20, d18, d17               \n"
-    "vqadd.s16       d21, d19, d16               \n"
-
-    /* d2 = tmp[0] = a + d
-     * d3 = tmp[1] = b + c
-     * d4 = tmp[2] = b - c
-     * d5 = tmp[3] = a - d
-     */
-    "vqadd.s16       d2, d22, d21                \n"
-    "vqadd.s16       d3, d23, d20                \n"
-    "vqsub.s16       d4, d23, d20                \n"
-    "vqsub.s16       d5, d22, d21                \n"
-
-    "vld1.32         d6[0], [%[dst]], %[kBPS]    \n"
-    "vld1.32         d6[1], [%[dst]], %[kBPS]    \n"
-    "vld1.32         d7[0], [%[dst]], %[kBPS]    \n"
-    "vld1.32         d7[1], [%[dst]], %[kBPS]    \n"
-
-    "sub         %[dst], %[dst], %[kBPS], lsl #2 \n"
-
-    /* (val) + 4 >> 3 */
-    "vrshr.s16       d2, d2, #3                  \n"
-    "vrshr.s16       d3, d3, #3                  \n"
-    "vrshr.s16       d4, d4, #3                  \n"
-    "vrshr.s16       d5, d5, #3                  \n"
-
-    "vzip.16         q1, q2                      \n"
-    "vzip.16         q1, q2                      \n"
-
-    /* Must accumulate before saturating */
-    "vmovl.u8        q8, d6                      \n"
-    "vmovl.u8        q9, d7                      \n"
-
-    "vqadd.s16       q1, q1, q8                  \n"
-    "vqadd.s16       q2, q2, q9                  \n"
-
-    "vqmovun.s16     d0, q1                      \n"
-    "vqmovun.s16     d1, q2                      \n"
-
-    "vst1.32         d0[0], [%[dst]], %[kBPS]    \n"
-    "vst1.32         d0[1], [%[dst]], %[kBPS]    \n"
-    "vst1.32         d1[0], [%[dst]], %[kBPS]    \n"
-    "vst1.32         d1[1], [%[dst]]             \n"
-
-    : [in] "+r"(in), [dst] "+r"(dst)  /* modified registers */
-    : [kBPS] "r"(kBPS), [constants] "r"(constants)  /* constants */
-    : "memory", "q0", "q1", "q2", "q8", "q9", "q10", "q11"  /* clobbered */
-  );
-}
-
-#endif    // WEBP_USE_INTRINSICS
-
-static void TransformTwo_NEON(const int16_t* in, uint8_t* dst, int do_two) {
-  TransformOne_NEON(in, dst);
-  if (do_two) {
-    TransformOne_NEON(in + 16, dst + 4);
-  }
-}
-
-static void TransformDC_NEON(const int16_t* in, uint8_t* dst) {
-  const int16x8_t DC = vdupq_n_s16(in[0]);
-  Add4x4_NEON(DC, DC, dst);
-}
-
-//------------------------------------------------------------------------------
-
-#define STORE_WHT(dst, col, rows) do {                  \
-  *dst = vgetq_lane_s32(rows.val[0], col); (dst) += 16; \
-  *dst = vgetq_lane_s32(rows.val[1], col); (dst) += 16; \
-  *dst = vgetq_lane_s32(rows.val[2], col); (dst) += 16; \
-  *dst = vgetq_lane_s32(rows.val[3], col); (dst) += 16; \
-} while (0)
-
-static void TransformWHT_NEON(const int16_t* in, int16_t* out) {
-  int32x4x4_t tmp;
-
-  {
-    // Load the source.
-    const int16x4_t in00_03 = vld1_s16(in + 0);
-    const int16x4_t in04_07 = vld1_s16(in + 4);
-    const int16x4_t in08_11 = vld1_s16(in + 8);
-    const int16x4_t in12_15 = vld1_s16(in + 12);
-    const int32x4_t a0 = vaddl_s16(in00_03, in12_15);  // in[0..3] + in[12..15]
-    const int32x4_t a1 = vaddl_s16(in04_07, in08_11);  // in[4..7] + in[8..11]
-    const int32x4_t a2 = vsubl_s16(in04_07, in08_11);  // in[4..7] - in[8..11]
-    const int32x4_t a3 = vsubl_s16(in00_03, in12_15);  // in[0..3] - in[12..15]
-    tmp.val[0] = vaddq_s32(a0, a1);
-    tmp.val[1] = vaddq_s32(a3, a2);
-    tmp.val[2] = vsubq_s32(a0, a1);
-    tmp.val[3] = vsubq_s32(a3, a2);
-    // Arrange the temporary results column-wise.
-    tmp = Transpose4x4_NEON(tmp);
-  }
-
-  {
-    const int32x4_t kCst3 = vdupq_n_s32(3);
-    const int32x4_t dc = vaddq_s32(tmp.val[0], kCst3);  // add rounder
-    const int32x4_t a0 = vaddq_s32(dc, tmp.val[3]);
-    const int32x4_t a1 = vaddq_s32(tmp.val[1], tmp.val[2]);
-    const int32x4_t a2 = vsubq_s32(tmp.val[1], tmp.val[2]);
-    const int32x4_t a3 = vsubq_s32(dc, tmp.val[3]);
-
-    tmp.val[0] = vaddq_s32(a0, a1);
-    tmp.val[1] = vaddq_s32(a3, a2);
-    tmp.val[2] = vsubq_s32(a0, a1);
-    tmp.val[3] = vsubq_s32(a3, a2);
-
-    // right shift the results by 3.
-    tmp.val[0] = vshrq_n_s32(tmp.val[0], 3);
-    tmp.val[1] = vshrq_n_s32(tmp.val[1], 3);
-    tmp.val[2] = vshrq_n_s32(tmp.val[2], 3);
-    tmp.val[3] = vshrq_n_s32(tmp.val[3], 3);
-
-    STORE_WHT(out, 0, tmp);
-    STORE_WHT(out, 1, tmp);
-    STORE_WHT(out, 2, tmp);
-    STORE_WHT(out, 3, tmp);
-  }
-}
-
-#undef STORE_WHT
-
-//------------------------------------------------------------------------------
-
-#define MUL(a, b) (((a) * (b)) >> 16)
-static void TransformAC3_NEON(const int16_t* in, uint8_t* dst) {
-  static const int kC1_full = 20091 + (1 << 16);
-  static const int kC2_full = 35468;
-  const int16x4_t A = vld1_dup_s16(in);
-  const int16x4_t c4 = vdup_n_s16(MUL(in[4], kC2_full));
-  const int16x4_t d4 = vdup_n_s16(MUL(in[4], kC1_full));
-  const int c1 = MUL(in[1], kC2_full);
-  const int d1 = MUL(in[1], kC1_full);
-  const uint64_t cd = (uint64_t)( d1 & 0xffff) <<  0 |
-                      (uint64_t)( c1 & 0xffff) << 16 |
-                      (uint64_t)(-c1 & 0xffff) << 32 |
-                      (uint64_t)(-d1 & 0xffff) << 48;
-  const int16x4_t CD = vcreate_s16(cd);
-  const int16x4_t B = vqadd_s16(A, CD);
-  const int16x8_t m0_m1 = vcombine_s16(vqadd_s16(B, d4), vqadd_s16(B, c4));
-  const int16x8_t m2_m3 = vcombine_s16(vqsub_s16(B, c4), vqsub_s16(B, d4));
-  Add4x4_NEON(m0_m1, m2_m3, dst);
-}
-#undef MUL
-
-//------------------------------------------------------------------------------
-// 4x4
-
-static void DC4_NEON(uint8_t* dst) {    // DC
-  const uint8x8_t A = vld1_u8(dst - BPS);  // top row
-  const uint16x4_t p0 = vpaddl_u8(A);  // cascading summation of the top
-  const uint16x4_t p1 = vpadd_u16(p0, p0);
-  const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1));
-  const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1));
-  const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1));
-  const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1));
-  const uint16x8_t s0 = vaddq_u16(L0, L1);
-  const uint16x8_t s1 = vaddq_u16(L2, L3);
-  const uint16x8_t s01 = vaddq_u16(s0, s1);
-  const uint16x8_t sum = vaddq_u16(s01, vcombine_u16(p1, p1));
-  const uint8x8_t dc0 = vrshrn_n_u16(sum, 3);  // (sum + 4) >> 3
-  const uint8x8_t dc = vdup_lane_u8(dc0, 0);
-  int i;
-  for (i = 0; i < 4; ++i) {
-    vst1_lane_u32((uint32_t*)(dst + i * BPS), vreinterpret_u32_u8(dc), 0);
-  }
-}
-
-// TrueMotion (4x4 + 8x8)
-static WEBP_INLINE void TrueMotion_NEON(uint8_t* dst, int size) {
-  const uint8x8_t TL = vld1_dup_u8(dst - BPS - 1);  // top-left pixel 'A[-1]'
-  const uint8x8_t T = vld1_u8(dst - BPS);  // top row 'A[0..3]'
-  const int16x8_t d = vreinterpretq_s16_u16(vsubl_u8(T, TL));  // A[c] - A[-1]
-  int y;
-  for (y = 0; y < size; y += 4) {
-    // left edge
-    const int16x8_t L0 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 0 * BPS - 1));
-    const int16x8_t L1 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 1 * BPS - 1));
-    const int16x8_t L2 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 2 * BPS - 1));
-    const int16x8_t L3 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 3 * BPS - 1));
-    const int16x8_t r0 = vaddq_s16(L0, d);  // L[r] + A[c] - A[-1]
-    const int16x8_t r1 = vaddq_s16(L1, d);
-    const int16x8_t r2 = vaddq_s16(L2, d);
-    const int16x8_t r3 = vaddq_s16(L3, d);
-    // Saturate and store the result.
-    const uint32x2_t r0_u32 = vreinterpret_u32_u8(vqmovun_s16(r0));
-    const uint32x2_t r1_u32 = vreinterpret_u32_u8(vqmovun_s16(r1));
-    const uint32x2_t r2_u32 = vreinterpret_u32_u8(vqmovun_s16(r2));
-    const uint32x2_t r3_u32 = vreinterpret_u32_u8(vqmovun_s16(r3));
-    if (size == 4) {
-      vst1_lane_u32((uint32_t*)(dst + 0 * BPS), r0_u32, 0);
-      vst1_lane_u32((uint32_t*)(dst + 1 * BPS), r1_u32, 0);
-      vst1_lane_u32((uint32_t*)(dst + 2 * BPS), r2_u32, 0);
-      vst1_lane_u32((uint32_t*)(dst + 3 * BPS), r3_u32, 0);
-    } else {
-      vst1_u32((uint32_t*)(dst + 0 * BPS), r0_u32);
-      vst1_u32((uint32_t*)(dst + 1 * BPS), r1_u32);
-      vst1_u32((uint32_t*)(dst + 2 * BPS), r2_u32);
-      vst1_u32((uint32_t*)(dst + 3 * BPS), r3_u32);
-    }
-    dst += 4 * BPS;
-  }
-}
-
-static void TM4_NEON(uint8_t* dst) { TrueMotion_NEON(dst, 4); }
-
-static void VE4_NEON(uint8_t* dst) {    // vertical
-  // NB: avoid vld1_u64 here as an alignment hint may be added -> SIGBUS.
-  const uint64x1_t A0 = vreinterpret_u64_u8(vld1_u8(dst - BPS - 1));  // top row
-  const uint64x1_t A1 = vshr_n_u64(A0, 8);
-  const uint64x1_t A2 = vshr_n_u64(A0, 16);
-  const uint8x8_t ABCDEFGH = vreinterpret_u8_u64(A0);
-  const uint8x8_t BCDEFGH0 = vreinterpret_u8_u64(A1);
-  const uint8x8_t CDEFGH00 = vreinterpret_u8_u64(A2);
-  const uint8x8_t b = vhadd_u8(ABCDEFGH, CDEFGH00);
-  const uint8x8_t avg = vrhadd_u8(b, BCDEFGH0);
-  int i;
-  for (i = 0; i < 4; ++i) {
-    vst1_lane_u32((uint32_t*)(dst + i * BPS), vreinterpret_u32_u8(avg), 0);
-  }
-}
-
-static void RD4_NEON(uint8_t* dst) {   // Down-right
-  const uint8x8_t XABCD_u8 = vld1_u8(dst - BPS - 1);
-  const uint64x1_t XABCD = vreinterpret_u64_u8(XABCD_u8);
-  const uint64x1_t ____XABC = vshl_n_u64(XABCD, 32);
-  const uint32_t I = dst[-1 + 0 * BPS];
-  const uint32_t J = dst[-1 + 1 * BPS];
-  const uint32_t K = dst[-1 + 2 * BPS];
-  const uint32_t L = dst[-1 + 3 * BPS];
-  const uint64x1_t LKJI____ = vcreate_u64(L | (K << 8) | (J << 16) | (I << 24));
-  const uint64x1_t LKJIXABC = vorr_u64(LKJI____, ____XABC);
-  const uint8x8_t KJIXABC_ = vreinterpret_u8_u64(vshr_n_u64(LKJIXABC, 8));
-  const uint8x8_t JIXABC__ = vreinterpret_u8_u64(vshr_n_u64(LKJIXABC, 16));
-  const uint8_t D = vget_lane_u8(XABCD_u8, 4);
-  const uint8x8_t JIXABCD_ = vset_lane_u8(D, JIXABC__, 6);
-  const uint8x8_t LKJIXABC_u8 = vreinterpret_u8_u64(LKJIXABC);
-  const uint8x8_t avg1 = vhadd_u8(JIXABCD_, LKJIXABC_u8);
-  const uint8x8_t avg2 = vrhadd_u8(avg1, KJIXABC_);
-  const uint64x1_t avg2_u64 = vreinterpret_u64_u8(avg2);
-  const uint32x2_t r3 = vreinterpret_u32_u8(avg2);
-  const uint32x2_t r2 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 8));
-  const uint32x2_t r1 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 16));
-  const uint32x2_t r0 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 24));
-  vst1_lane_u32((uint32_t*)(dst + 0 * BPS), r0, 0);
-  vst1_lane_u32((uint32_t*)(dst + 1 * BPS), r1, 0);
-  vst1_lane_u32((uint32_t*)(dst + 2 * BPS), r2, 0);
-  vst1_lane_u32((uint32_t*)(dst + 3 * BPS), r3, 0);
-}
-
-static void LD4_NEON(uint8_t* dst) {    // Down-left
-  // Note using the same shift trick as VE4() is slower here.
-  const uint8x8_t ABCDEFGH = vld1_u8(dst - BPS + 0);
-  const uint8x8_t BCDEFGH0 = vld1_u8(dst - BPS + 1);
-  const uint8x8_t CDEFGH00 = vld1_u8(dst - BPS + 2);
-  const uint8x8_t CDEFGHH0 = vset_lane_u8(dst[-BPS + 7], CDEFGH00, 6);
-  const uint8x8_t avg1 = vhadd_u8(ABCDEFGH, CDEFGHH0);
-  const uint8x8_t avg2 = vrhadd_u8(avg1, BCDEFGH0);
-  const uint64x1_t avg2_u64 = vreinterpret_u64_u8(avg2);
-  const uint32x2_t r0 = vreinterpret_u32_u8(avg2);
-  const uint32x2_t r1 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 8));
-  const uint32x2_t r2 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 16));
-  const uint32x2_t r3 = vreinterpret_u32_u64(vshr_n_u64(avg2_u64, 24));
-  vst1_lane_u32((uint32_t*)(dst + 0 * BPS), r0, 0);
-  vst1_lane_u32((uint32_t*)(dst + 1 * BPS), r1, 0);
-  vst1_lane_u32((uint32_t*)(dst + 2 * BPS), r2, 0);
-  vst1_lane_u32((uint32_t*)(dst + 3 * BPS), r3, 0);
-}
-
-//------------------------------------------------------------------------------
-// Chroma
-
-static void VE8uv_NEON(uint8_t* dst) {    // vertical
-  const uint8x8_t top = vld1_u8(dst - BPS);
-  int j;
-  for (j = 0; j < 8; ++j) {
-    vst1_u8(dst + j * BPS, top);
-  }
-}
-
-static void HE8uv_NEON(uint8_t* dst) {    // horizontal
-  int j;
-  for (j = 0; j < 8; ++j) {
-    const uint8x8_t left = vld1_dup_u8(dst - 1);
-    vst1_u8(dst, left);
-    dst += BPS;
-  }
-}
-
-static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) {
-  uint16x8_t sum_top;
-  uint16x8_t sum_left;
-  uint8x8_t dc0;
-
-  if (do_top) {
-    const uint8x8_t A = vld1_u8(dst - BPS);  // top row
-    const uint16x4_t p0 = vpaddl_u8(A);  // cascading summation of the top
-    const uint16x4_t p1 = vpadd_u16(p0, p0);
-    const uint16x4_t p2 = vpadd_u16(p1, p1);
-    sum_top = vcombine_u16(p2, p2);
-  }
-
-  if (do_left) {
-    const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1));
-    const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1));
-    const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1));
-    const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1));
-    const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + 4 * BPS - 1));
-    const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + 5 * BPS - 1));
-    const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + 6 * BPS - 1));
-    const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + 7 * BPS - 1));
-    const uint16x8_t s0 = vaddq_u16(L0, L1);
-    const uint16x8_t s1 = vaddq_u16(L2, L3);
-    const uint16x8_t s2 = vaddq_u16(L4, L5);
-    const uint16x8_t s3 = vaddq_u16(L6, L7);
-    const uint16x8_t s01 = vaddq_u16(s0, s1);
-    const uint16x8_t s23 = vaddq_u16(s2, s3);
-    sum_left = vaddq_u16(s01, s23);
-  }
-
-  if (do_top && do_left) {
-    const uint16x8_t sum = vaddq_u16(sum_left, sum_top);
-    dc0 = vrshrn_n_u16(sum, 4);
-  } else if (do_top) {
-    dc0 = vrshrn_n_u16(sum_top, 3);
-  } else if (do_left) {
-    dc0 = vrshrn_n_u16(sum_left, 3);
-  } else {
-    dc0 = vdup_n_u8(0x80);
-  }
-
-  {
-    const uint8x8_t dc = vdup_lane_u8(dc0, 0);
-    int i;
-    for (i = 0; i < 8; ++i) {
-      vst1_u32((uint32_t*)(dst + i * BPS), vreinterpret_u32_u8(dc));
-    }
-  }
-}
-
-static void DC8uv_NEON(uint8_t* dst) { DC8_NEON(dst, 1, 1); }
-static void DC8uvNoTop_NEON(uint8_t* dst) { DC8_NEON(dst, 0, 1); }
-static void DC8uvNoLeft_NEON(uint8_t* dst) { DC8_NEON(dst, 1, 0); }
-static void DC8uvNoTopLeft_NEON(uint8_t* dst) { DC8_NEON(dst, 0, 0); }
-
-static void TM8uv_NEON(uint8_t* dst) { TrueMotion_NEON(dst, 8); }
-
-//------------------------------------------------------------------------------
-// 16x16
-
-static void VE16_NEON(uint8_t* dst) {     // vertical
-  const uint8x16_t top = vld1q_u8(dst - BPS);
-  int j;
-  for (j = 0; j < 16; ++j) {
-    vst1q_u8(dst + j * BPS, top);
-  }
-}
-
-static void HE16_NEON(uint8_t* dst) {     // horizontal
-  int j;
-  for (j = 0; j < 16; ++j) {
-    const uint8x16_t left = vld1q_dup_u8(dst - 1);
-    vst1q_u8(dst, left);
-    dst += BPS;
-  }
-}
-
-static WEBP_INLINE void DC16_NEON(uint8_t* dst, int do_top, int do_left) {
-  uint16x8_t sum_top;
-  uint16x8_t sum_left;
-  uint8x8_t dc0;
-
-  if (do_top) {
-    const uint8x16_t A = vld1q_u8(dst - BPS);  // top row
-    const uint16x8_t p0 = vpaddlq_u8(A);  // cascading summation of the top
-    const uint16x4_t p1 = vadd_u16(vget_low_u16(p0), vget_high_u16(p0));
-    const uint16x4_t p2 = vpadd_u16(p1, p1);
-    const uint16x4_t p3 = vpadd_u16(p2, p2);
-    sum_top = vcombine_u16(p3, p3);
-  }
-
-  if (do_left) {
-    int i;
-    sum_left = vdupq_n_u16(0);
-    for (i = 0; i < 16; i += 8) {
-      const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + (i + 0) * BPS - 1));
-      const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + (i + 1) * BPS - 1));
-      const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + (i + 2) * BPS - 1));
-      const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + (i + 3) * BPS - 1));
-      const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + (i + 4) * BPS - 1));
-      const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + (i + 5) * BPS - 1));
-      const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + (i + 6) * BPS - 1));
-      const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + (i + 7) * BPS - 1));
-      const uint16x8_t s0 = vaddq_u16(L0, L1);
-      const uint16x8_t s1 = vaddq_u16(L2, L3);
-      const uint16x8_t s2 = vaddq_u16(L4, L5);
-      const uint16x8_t s3 = vaddq_u16(L6, L7);
-      const uint16x8_t s01 = vaddq_u16(s0, s1);
-      const uint16x8_t s23 = vaddq_u16(s2, s3);
-      const uint16x8_t sum = vaddq_u16(s01, s23);
-      sum_left = vaddq_u16(sum_left, sum);
-    }
-  }
-
-  if (do_top && do_left) {
-    const uint16x8_t sum = vaddq_u16(sum_left, sum_top);
-    dc0 = vrshrn_n_u16(sum, 5);
-  } else if (do_top) {
-    dc0 = vrshrn_n_u16(sum_top, 4);
-  } else if (do_left) {
-    dc0 = vrshrn_n_u16(sum_left, 4);
-  } else {
-    dc0 = vdup_n_u8(0x80);
-  }
-
-  {
-    const uint8x16_t dc = vdupq_lane_u8(dc0, 0);
-    int i;
-    for (i = 0; i < 16; ++i) {
-      vst1q_u8(dst + i * BPS, dc);
-    }
-  }
-}
-
-static void DC16TopLeft_NEON(uint8_t* dst) { DC16_NEON(dst, 1, 1); }
-static void DC16NoTop_NEON(uint8_t* dst) { DC16_NEON(dst, 0, 1); }
-static void DC16NoLeft_NEON(uint8_t* dst) { DC16_NEON(dst, 1, 0); }
-static void DC16NoTopLeft_NEON(uint8_t* dst) { DC16_NEON(dst, 0, 0); }
-
-static void TM16_NEON(uint8_t* dst) {
-  const uint8x8_t TL = vld1_dup_u8(dst - BPS - 1);  // top-left pixel 'A[-1]'
-  const uint8x16_t T = vld1q_u8(dst - BPS);  // top row 'A[0..15]'
-  // A[c] - A[-1]
-  const int16x8_t d_lo = vreinterpretq_s16_u16(vsubl_u8(vget_low_u8(T), TL));
-  const int16x8_t d_hi = vreinterpretq_s16_u16(vsubl_u8(vget_high_u8(T), TL));
-  int y;
-  for (y = 0; y < 16; y += 4) {
-    // left edge
-    const int16x8_t L0 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 0 * BPS - 1));
-    const int16x8_t L1 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 1 * BPS - 1));
-    const int16x8_t L2 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 2 * BPS - 1));
-    const int16x8_t L3 = ConvertU8ToS16_NEON(vld1_dup_u8(dst + 3 * BPS - 1));
-    const int16x8_t r0_lo = vaddq_s16(L0, d_lo);  // L[r] + A[c] - A[-1]
-    const int16x8_t r1_lo = vaddq_s16(L1, d_lo);
-    const int16x8_t r2_lo = vaddq_s16(L2, d_lo);
-    const int16x8_t r3_lo = vaddq_s16(L3, d_lo);
-    const int16x8_t r0_hi = vaddq_s16(L0, d_hi);
-    const int16x8_t r1_hi = vaddq_s16(L1, d_hi);
-    const int16x8_t r2_hi = vaddq_s16(L2, d_hi);
-    const int16x8_t r3_hi = vaddq_s16(L3, d_hi);
-    // Saturate and store the result.
-    const uint8x16_t row0 = vcombine_u8(vqmovun_s16(r0_lo), vqmovun_s16(r0_hi));
-    const uint8x16_t row1 = vcombine_u8(vqmovun_s16(r1_lo), vqmovun_s16(r1_hi));
-    const uint8x16_t row2 = vcombine_u8(vqmovun_s16(r2_lo), vqmovun_s16(r2_hi));
-    const uint8x16_t row3 = vcombine_u8(vqmovun_s16(r3_lo), vqmovun_s16(r3_hi));
-    vst1q_u8(dst + 0 * BPS, row0);
-    vst1q_u8(dst + 1 * BPS, row1);
-    vst1q_u8(dst + 2 * BPS, row2);
-    vst1q_u8(dst + 3 * BPS, row3);
-    dst += 4 * BPS;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8DspInitNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitNEON(void) {
-  VP8Transform = TransformTwo_NEON;
-  VP8TransformAC3 = TransformAC3_NEON;
-  VP8TransformDC = TransformDC_NEON;
-  VP8TransformWHT = TransformWHT_NEON;
-
-  VP8VFilter16 = VFilter16_NEON;
-  VP8VFilter16i = VFilter16i_NEON;
-  VP8HFilter16 = HFilter16_NEON;
-#if !defined(WORK_AROUND_GCC)
-  VP8HFilter16i = HFilter16i_NEON;
-#endif
-  VP8VFilter8 = VFilter8_NEON;
-  VP8VFilter8i = VFilter8i_NEON;
-#if !defined(WORK_AROUND_GCC)
-  VP8HFilter8 = HFilter8_NEON;
-  VP8HFilter8i = HFilter8i_NEON;
-#endif
-  VP8SimpleVFilter16 = SimpleVFilter16_NEON;
-  VP8SimpleHFilter16 = SimpleHFilter16_NEON;
-  VP8SimpleVFilter16i = SimpleVFilter16i_NEON;
-  VP8SimpleHFilter16i = SimpleHFilter16i_NEON;
-
-  VP8PredLuma4[0] = DC4_NEON;
-  VP8PredLuma4[1] = TM4_NEON;
-  VP8PredLuma4[2] = VE4_NEON;
-  VP8PredLuma4[4] = RD4_NEON;
-  VP8PredLuma4[6] = LD4_NEON;
-
-  VP8PredLuma16[0] = DC16TopLeft_NEON;
-  VP8PredLuma16[1] = TM16_NEON;
-  VP8PredLuma16[2] = VE16_NEON;
-  VP8PredLuma16[3] = HE16_NEON;
-  VP8PredLuma16[4] = DC16NoTop_NEON;
-  VP8PredLuma16[5] = DC16NoLeft_NEON;
-  VP8PredLuma16[6] = DC16NoTopLeft_NEON;
-
-  VP8PredChroma8[0] = DC8uv_NEON;
-  VP8PredChroma8[1] = TM8uv_NEON;
-  VP8PredChroma8[2] = VE8uv_NEON;
-  VP8PredChroma8[3] = HE8uv_NEON;
-  VP8PredChroma8[4] = DC8uvNoTop_NEON;
-  VP8PredChroma8[5] = DC8uvNoLeft_NEON;
-  VP8PredChroma8[6] = DC8uvNoTopLeft_NEON;
-}
-
-#else  // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(VP8DspInitNEON)
-
-#endif  // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/dec_sse2.c b/ios/Pods/libwebp/src/dsp/dec_sse2.c
deleted file mode 100644
index b3840fa..0000000
--- a/ios/Pods/libwebp/src/dsp/dec_sse2.c
+++ /dev/null
@@ -1,1227 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 version of some decoding functions (idct, loop filtering).
-//
-// Author: somnath@google.com (Somnath Banerjee)
-//         cduvivier@google.com (Christian Duvivier)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-
-// The 3-coeff sparse transform in SSE2 is not really faster than the plain-C
-// one it seems => disable it by default. Uncomment the following to enable:
-#if !defined(USE_TRANSFORM_AC3)
-#define USE_TRANSFORM_AC3 0   // ALTERNATE_CODE
-#endif
-
-#include <emmintrin.h>
-#include "src/dsp/common_sse2.h"
-#include "src/dec/vp8i_dec.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// Transforms (Paragraph 14.4)
-
-static void Transform_SSE2(const int16_t* in, uint8_t* dst, int do_two) {
-  // This implementation makes use of 16-bit fixed point versions of two
-  // multiply constants:
-  //    K1 = sqrt(2) * cos (pi/8) ~= 85627 / 2^16
-  //    K2 = sqrt(2) * sin (pi/8) ~= 35468 / 2^16
-  //
-  // To be able to use signed 16-bit integers, we use the following trick to
-  // have constants within range:
-  // - Associated constants are obtained by subtracting the 16-bit fixed point
-  //   version of one:
-  //      k = K - (1 << 16)  =>  K = k + (1 << 16)
-  //      K1 = 85267  =>  k1 =  20091
-  //      K2 = 35468  =>  k2 = -30068
-  // - The multiplication of a variable by a constant become the sum of the
-  //   variable and the multiplication of that variable by the associated
-  //   constant:
-  //      (x * K) >> 16 = (x * (k + (1 << 16))) >> 16 = ((x * k ) >> 16) + x
-  const __m128i k1 = _mm_set1_epi16(20091);
-  const __m128i k2 = _mm_set1_epi16(-30068);
-  __m128i T0, T1, T2, T3;
-
-  // Load and concatenate the transform coefficients (we'll do two transforms
-  // in parallel). In the case of only one transform, the second half of the
-  // vectors will just contain random value we'll never use nor store.
-  __m128i in0, in1, in2, in3;
-  {
-    in0 = _mm_loadl_epi64((const __m128i*)&in[0]);
-    in1 = _mm_loadl_epi64((const __m128i*)&in[4]);
-    in2 = _mm_loadl_epi64((const __m128i*)&in[8]);
-    in3 = _mm_loadl_epi64((const __m128i*)&in[12]);
-    // a00 a10 a20 a30   x x x x
-    // a01 a11 a21 a31   x x x x
-    // a02 a12 a22 a32   x x x x
-    // a03 a13 a23 a33   x x x x
-    if (do_two) {
-      const __m128i inB0 = _mm_loadl_epi64((const __m128i*)&in[16]);
-      const __m128i inB1 = _mm_loadl_epi64((const __m128i*)&in[20]);
-      const __m128i inB2 = _mm_loadl_epi64((const __m128i*)&in[24]);
-      const __m128i inB3 = _mm_loadl_epi64((const __m128i*)&in[28]);
-      in0 = _mm_unpacklo_epi64(in0, inB0);
-      in1 = _mm_unpacklo_epi64(in1, inB1);
-      in2 = _mm_unpacklo_epi64(in2, inB2);
-      in3 = _mm_unpacklo_epi64(in3, inB3);
-      // a00 a10 a20 a30   b00 b10 b20 b30
-      // a01 a11 a21 a31   b01 b11 b21 b31
-      // a02 a12 a22 a32   b02 b12 b22 b32
-      // a03 a13 a23 a33   b03 b13 b23 b33
-    }
-  }
-
-  // Vertical pass and subsequent transpose.
-  {
-    // First pass, c and d calculations are longer because of the "trick"
-    // multiplications.
-    const __m128i a = _mm_add_epi16(in0, in2);
-    const __m128i b = _mm_sub_epi16(in0, in2);
-    // c = MUL(in1, K2) - MUL(in3, K1) = MUL(in1, k2) - MUL(in3, k1) + in1 - in3
-    const __m128i c1 = _mm_mulhi_epi16(in1, k2);
-    const __m128i c2 = _mm_mulhi_epi16(in3, k1);
-    const __m128i c3 = _mm_sub_epi16(in1, in3);
-    const __m128i c4 = _mm_sub_epi16(c1, c2);
-    const __m128i c = _mm_add_epi16(c3, c4);
-    // d = MUL(in1, K1) + MUL(in3, K2) = MUL(in1, k1) + MUL(in3, k2) + in1 + in3
-    const __m128i d1 = _mm_mulhi_epi16(in1, k1);
-    const __m128i d2 = _mm_mulhi_epi16(in3, k2);
-    const __m128i d3 = _mm_add_epi16(in1, in3);
-    const __m128i d4 = _mm_add_epi16(d1, d2);
-    const __m128i d = _mm_add_epi16(d3, d4);
-
-    // Second pass.
-    const __m128i tmp0 = _mm_add_epi16(a, d);
-    const __m128i tmp1 = _mm_add_epi16(b, c);
-    const __m128i tmp2 = _mm_sub_epi16(b, c);
-    const __m128i tmp3 = _mm_sub_epi16(a, d);
-
-    // Transpose the two 4x4.
-    VP8Transpose_2_4x4_16b(&tmp0, &tmp1, &tmp2, &tmp3, &T0, &T1, &T2, &T3);
-  }
-
-  // Horizontal pass and subsequent transpose.
-  {
-    // First pass, c and d calculations are longer because of the "trick"
-    // multiplications.
-    const __m128i four = _mm_set1_epi16(4);
-    const __m128i dc = _mm_add_epi16(T0, four);
-    const __m128i a =  _mm_add_epi16(dc, T2);
-    const __m128i b =  _mm_sub_epi16(dc, T2);
-    // c = MUL(T1, K2) - MUL(T3, K1) = MUL(T1, k2) - MUL(T3, k1) + T1 - T3
-    const __m128i c1 = _mm_mulhi_epi16(T1, k2);
-    const __m128i c2 = _mm_mulhi_epi16(T3, k1);
-    const __m128i c3 = _mm_sub_epi16(T1, T3);
-    const __m128i c4 = _mm_sub_epi16(c1, c2);
-    const __m128i c = _mm_add_epi16(c3, c4);
-    // d = MUL(T1, K1) + MUL(T3, K2) = MUL(T1, k1) + MUL(T3, k2) + T1 + T3
-    const __m128i d1 = _mm_mulhi_epi16(T1, k1);
-    const __m128i d2 = _mm_mulhi_epi16(T3, k2);
-    const __m128i d3 = _mm_add_epi16(T1, T3);
-    const __m128i d4 = _mm_add_epi16(d1, d2);
-    const __m128i d = _mm_add_epi16(d3, d4);
-
-    // Second pass.
-    const __m128i tmp0 = _mm_add_epi16(a, d);
-    const __m128i tmp1 = _mm_add_epi16(b, c);
-    const __m128i tmp2 = _mm_sub_epi16(b, c);
-    const __m128i tmp3 = _mm_sub_epi16(a, d);
-    const __m128i shifted0 = _mm_srai_epi16(tmp0, 3);
-    const __m128i shifted1 = _mm_srai_epi16(tmp1, 3);
-    const __m128i shifted2 = _mm_srai_epi16(tmp2, 3);
-    const __m128i shifted3 = _mm_srai_epi16(tmp3, 3);
-
-    // Transpose the two 4x4.
-    VP8Transpose_2_4x4_16b(&shifted0, &shifted1, &shifted2, &shifted3, &T0, &T1,
-                           &T2, &T3);
-  }
-
-  // Add inverse transform to 'dst' and store.
-  {
-    const __m128i zero = _mm_setzero_si128();
-    // Load the reference(s).
-    __m128i dst0, dst1, dst2, dst3;
-    if (do_two) {
-      // Load eight bytes/pixels per line.
-      dst0 = _mm_loadl_epi64((__m128i*)(dst + 0 * BPS));
-      dst1 = _mm_loadl_epi64((__m128i*)(dst + 1 * BPS));
-      dst2 = _mm_loadl_epi64((__m128i*)(dst + 2 * BPS));
-      dst3 = _mm_loadl_epi64((__m128i*)(dst + 3 * BPS));
-    } else {
-      // Load four bytes/pixels per line.
-      dst0 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 0 * BPS));
-      dst1 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 1 * BPS));
-      dst2 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 2 * BPS));
-      dst3 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 3 * BPS));
-    }
-    // Convert to 16b.
-    dst0 = _mm_unpacklo_epi8(dst0, zero);
-    dst1 = _mm_unpacklo_epi8(dst1, zero);
-    dst2 = _mm_unpacklo_epi8(dst2, zero);
-    dst3 = _mm_unpacklo_epi8(dst3, zero);
-    // Add the inverse transform(s).
-    dst0 = _mm_add_epi16(dst0, T0);
-    dst1 = _mm_add_epi16(dst1, T1);
-    dst2 = _mm_add_epi16(dst2, T2);
-    dst3 = _mm_add_epi16(dst3, T3);
-    // Unsigned saturate to 8b.
-    dst0 = _mm_packus_epi16(dst0, dst0);
-    dst1 = _mm_packus_epi16(dst1, dst1);
-    dst2 = _mm_packus_epi16(dst2, dst2);
-    dst3 = _mm_packus_epi16(dst3, dst3);
-    // Store the results.
-    if (do_two) {
-      // Store eight bytes/pixels per line.
-      _mm_storel_epi64((__m128i*)(dst + 0 * BPS), dst0);
-      _mm_storel_epi64((__m128i*)(dst + 1 * BPS), dst1);
-      _mm_storel_epi64((__m128i*)(dst + 2 * BPS), dst2);
-      _mm_storel_epi64((__m128i*)(dst + 3 * BPS), dst3);
-    } else {
-      // Store four bytes/pixels per line.
-      WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(dst0));
-      WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(dst1));
-      WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(dst2));
-      WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(dst3));
-    }
-  }
-}
-
-#if (USE_TRANSFORM_AC3 == 1)
-#define MUL(a, b) (((a) * (b)) >> 16)
-static void TransformAC3(const int16_t* in, uint8_t* dst) {
-  static const int kC1 = 20091 + (1 << 16);
-  static const int kC2 = 35468;
-  const __m128i A = _mm_set1_epi16(in[0] + 4);
-  const __m128i c4 = _mm_set1_epi16(MUL(in[4], kC2));
-  const __m128i d4 = _mm_set1_epi16(MUL(in[4], kC1));
-  const int c1 = MUL(in[1], kC2);
-  const int d1 = MUL(in[1], kC1);
-  const __m128i CD = _mm_set_epi16(0, 0, 0, 0, -d1, -c1, c1, d1);
-  const __m128i B = _mm_adds_epi16(A, CD);
-  const __m128i m0 = _mm_adds_epi16(B, d4);
-  const __m128i m1 = _mm_adds_epi16(B, c4);
-  const __m128i m2 = _mm_subs_epi16(B, c4);
-  const __m128i m3 = _mm_subs_epi16(B, d4);
-  const __m128i zero = _mm_setzero_si128();
-  // Load the source pixels.
-  __m128i dst0 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 0 * BPS));
-  __m128i dst1 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 1 * BPS));
-  __m128i dst2 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 2 * BPS));
-  __m128i dst3 = _mm_cvtsi32_si128(WebPMemToUint32(dst + 3 * BPS));
-  // Convert to 16b.
-  dst0 = _mm_unpacklo_epi8(dst0, zero);
-  dst1 = _mm_unpacklo_epi8(dst1, zero);
-  dst2 = _mm_unpacklo_epi8(dst2, zero);
-  dst3 = _mm_unpacklo_epi8(dst3, zero);
-  // Add the inverse transform.
-  dst0 = _mm_adds_epi16(dst0, _mm_srai_epi16(m0, 3));
-  dst1 = _mm_adds_epi16(dst1, _mm_srai_epi16(m1, 3));
-  dst2 = _mm_adds_epi16(dst2, _mm_srai_epi16(m2, 3));
-  dst3 = _mm_adds_epi16(dst3, _mm_srai_epi16(m3, 3));
-  // Unsigned saturate to 8b.
-  dst0 = _mm_packus_epi16(dst0, dst0);
-  dst1 = _mm_packus_epi16(dst1, dst1);
-  dst2 = _mm_packus_epi16(dst2, dst2);
-  dst3 = _mm_packus_epi16(dst3, dst3);
-  // Store the results.
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(dst0));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(dst1));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(dst2));
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(dst3));
-}
-#undef MUL
-#endif   // USE_TRANSFORM_AC3
-
-//------------------------------------------------------------------------------
-// Loop Filter (Paragraph 15)
-
-// Compute abs(p - q) = subs(p - q) OR subs(q - p)
-#define MM_ABS(p, q)  _mm_or_si128(                                            \
-    _mm_subs_epu8((q), (p)),                                                   \
-    _mm_subs_epu8((p), (q)))
-
-// Shift each byte of "x" by 3 bits while preserving by the sign bit.
-static WEBP_INLINE void SignedShift8b_SSE2(__m128i* const x) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i lo_0 = _mm_unpacklo_epi8(zero, *x);
-  const __m128i hi_0 = _mm_unpackhi_epi8(zero, *x);
-  const __m128i lo_1 = _mm_srai_epi16(lo_0, 3 + 8);
-  const __m128i hi_1 = _mm_srai_epi16(hi_0, 3 + 8);
-  *x = _mm_packs_epi16(lo_1, hi_1);
-}
-
-#define FLIP_SIGN_BIT2(a, b) {                                                 \
-  (a) = _mm_xor_si128(a, sign_bit);                                            \
-  (b) = _mm_xor_si128(b, sign_bit);                                            \
-}
-
-#define FLIP_SIGN_BIT4(a, b, c, d) {                                           \
-  FLIP_SIGN_BIT2(a, b);                                                        \
-  FLIP_SIGN_BIT2(c, d);                                                        \
-}
-
-// input/output is uint8_t
-static WEBP_INLINE void GetNotHEV_SSE2(const __m128i* const p1,
-                                       const __m128i* const p0,
-                                       const __m128i* const q0,
-                                       const __m128i* const q1,
-                                       int hev_thresh, __m128i* const not_hev) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i t_1 = MM_ABS(*p1, *p0);
-  const __m128i t_2 = MM_ABS(*q1, *q0);
-
-  const __m128i h = _mm_set1_epi8(hev_thresh);
-  const __m128i t_max = _mm_max_epu8(t_1, t_2);
-
-  const __m128i t_max_h = _mm_subs_epu8(t_max, h);
-  *not_hev = _mm_cmpeq_epi8(t_max_h, zero);  // not_hev <= t1 && not_hev <= t2
-}
-
-// input pixels are int8_t
-static WEBP_INLINE void GetBaseDelta_SSE2(const __m128i* const p1,
-                                          const __m128i* const p0,
-                                          const __m128i* const q0,
-                                          const __m128i* const q1,
-                                          __m128i* const delta) {
-  // beware of addition order, for saturation!
-  const __m128i p1_q1 = _mm_subs_epi8(*p1, *q1);   // p1 - q1
-  const __m128i q0_p0 = _mm_subs_epi8(*q0, *p0);   // q0 - p0
-  const __m128i s1 = _mm_adds_epi8(p1_q1, q0_p0);  // p1 - q1 + 1 * (q0 - p0)
-  const __m128i s2 = _mm_adds_epi8(q0_p0, s1);     // p1 - q1 + 2 * (q0 - p0)
-  const __m128i s3 = _mm_adds_epi8(q0_p0, s2);     // p1 - q1 + 3 * (q0 - p0)
-  *delta = s3;
-}
-
-// input and output are int8_t
-static WEBP_INLINE void DoSimpleFilter_SSE2(__m128i* const p0,
-                                            __m128i* const q0,
-                                            const __m128i* const fl) {
-  const __m128i k3 = _mm_set1_epi8(3);
-  const __m128i k4 = _mm_set1_epi8(4);
-  __m128i v3 = _mm_adds_epi8(*fl, k3);
-  __m128i v4 = _mm_adds_epi8(*fl, k4);
-
-  SignedShift8b_SSE2(&v4);             // v4 >> 3
-  SignedShift8b_SSE2(&v3);             // v3 >> 3
-  *q0 = _mm_subs_epi8(*q0, v4);        // q0 -= v4
-  *p0 = _mm_adds_epi8(*p0, v3);        // p0 += v3
-}
-
-// Updates values of 2 pixels at MB edge during complex filtering.
-// Update operations:
-// q = q - delta and p = p + delta; where delta = [(a_hi >> 7), (a_lo >> 7)]
-// Pixels 'pi' and 'qi' are int8_t on input, uint8_t on output (sign flip).
-static WEBP_INLINE void Update2Pixels_SSE2(__m128i* const pi, __m128i* const qi,
-                                           const __m128i* const a0_lo,
-                                           const __m128i* const a0_hi) {
-  const __m128i a1_lo = _mm_srai_epi16(*a0_lo, 7);
-  const __m128i a1_hi = _mm_srai_epi16(*a0_hi, 7);
-  const __m128i delta = _mm_packs_epi16(a1_lo, a1_hi);
-  const __m128i sign_bit = _mm_set1_epi8(0x80);
-  *pi = _mm_adds_epi8(*pi, delta);
-  *qi = _mm_subs_epi8(*qi, delta);
-  FLIP_SIGN_BIT2(*pi, *qi);
-}
-
-// input pixels are uint8_t
-static WEBP_INLINE void NeedsFilter_SSE2(const __m128i* const p1,
-                                         const __m128i* const p0,
-                                         const __m128i* const q0,
-                                         const __m128i* const q1,
-                                         int thresh, __m128i* const mask) {
-  const __m128i m_thresh = _mm_set1_epi8(thresh);
-  const __m128i t1 = MM_ABS(*p1, *q1);        // abs(p1 - q1)
-  const __m128i kFE = _mm_set1_epi8(0xFE);
-  const __m128i t2 = _mm_and_si128(t1, kFE);  // set lsb of each byte to zero
-  const __m128i t3 = _mm_srli_epi16(t2, 1);   // abs(p1 - q1) / 2
-
-  const __m128i t4 = MM_ABS(*p0, *q0);        // abs(p0 - q0)
-  const __m128i t5 = _mm_adds_epu8(t4, t4);   // abs(p0 - q0) * 2
-  const __m128i t6 = _mm_adds_epu8(t5, t3);   // abs(p0-q0)*2 + abs(p1-q1)/2
-
-  const __m128i t7 = _mm_subs_epu8(t6, m_thresh);  // mask <= m_thresh
-  *mask = _mm_cmpeq_epi8(t7, _mm_setzero_si128());
-}
-
-//------------------------------------------------------------------------------
-// Edge filtering functions
-
-// Applies filter on 2 pixels (p0 and q0)
-static WEBP_INLINE void DoFilter2_SSE2(__m128i* const p1, __m128i* const p0,
-                                       __m128i* const q0, __m128i* const q1,
-                                       int thresh) {
-  __m128i a, mask;
-  const __m128i sign_bit = _mm_set1_epi8(0x80);
-  // convert p1/q1 to int8_t (for GetBaseDelta_SSE2)
-  const __m128i p1s = _mm_xor_si128(*p1, sign_bit);
-  const __m128i q1s = _mm_xor_si128(*q1, sign_bit);
-
-  NeedsFilter_SSE2(p1, p0, q0, q1, thresh, &mask);
-
-  FLIP_SIGN_BIT2(*p0, *q0);
-  GetBaseDelta_SSE2(&p1s, p0, q0, &q1s, &a);
-  a = _mm_and_si128(a, mask);     // mask filter values we don't care about
-  DoSimpleFilter_SSE2(p0, q0, &a);
-  FLIP_SIGN_BIT2(*p0, *q0);
-}
-
-// Applies filter on 4 pixels (p1, p0, q0 and q1)
-static WEBP_INLINE void DoFilter4_SSE2(__m128i* const p1, __m128i* const p0,
-                                       __m128i* const q0, __m128i* const q1,
-                                       const __m128i* const mask,
-                                       int hev_thresh) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i sign_bit = _mm_set1_epi8(0x80);
-  const __m128i k64 = _mm_set1_epi8(64);
-  const __m128i k3 = _mm_set1_epi8(3);
-  const __m128i k4 = _mm_set1_epi8(4);
-  __m128i not_hev;
-  __m128i t1, t2, t3;
-
-  // compute hev mask
-  GetNotHEV_SSE2(p1, p0, q0, q1, hev_thresh, &not_hev);
-
-  // convert to signed values
-  FLIP_SIGN_BIT4(*p1, *p0, *q0, *q1);
-
-  t1 = _mm_subs_epi8(*p1, *q1);        // p1 - q1
-  t1 = _mm_andnot_si128(not_hev, t1);  // hev(p1 - q1)
-  t2 = _mm_subs_epi8(*q0, *p0);        // q0 - p0
-  t1 = _mm_adds_epi8(t1, t2);          // hev(p1 - q1) + 1 * (q0 - p0)
-  t1 = _mm_adds_epi8(t1, t2);          // hev(p1 - q1) + 2 * (q0 - p0)
-  t1 = _mm_adds_epi8(t1, t2);          // hev(p1 - q1) + 3 * (q0 - p0)
-  t1 = _mm_and_si128(t1, *mask);       // mask filter values we don't care about
-
-  t2 = _mm_adds_epi8(t1, k3);        // 3 * (q0 - p0) + hev(p1 - q1) + 3
-  t3 = _mm_adds_epi8(t1, k4);        // 3 * (q0 - p0) + hev(p1 - q1) + 4
-  SignedShift8b_SSE2(&t2);           // (3 * (q0 - p0) + hev(p1 - q1) + 3) >> 3
-  SignedShift8b_SSE2(&t3);           // (3 * (q0 - p0) + hev(p1 - q1) + 4) >> 3
-  *p0 = _mm_adds_epi8(*p0, t2);      // p0 += t2
-  *q0 = _mm_subs_epi8(*q0, t3);      // q0 -= t3
-  FLIP_SIGN_BIT2(*p0, *q0);
-
-  // this is equivalent to signed (a + 1) >> 1 calculation
-  t2 = _mm_add_epi8(t3, sign_bit);
-  t3 = _mm_avg_epu8(t2, zero);
-  t3 = _mm_sub_epi8(t3, k64);
-
-  t3 = _mm_and_si128(not_hev, t3);   // if !hev
-  *q1 = _mm_subs_epi8(*q1, t3);      // q1 -= t3
-  *p1 = _mm_adds_epi8(*p1, t3);      // p1 += t3
-  FLIP_SIGN_BIT2(*p1, *q1);
-}
-
-// Applies filter on 6 pixels (p2, p1, p0, q0, q1 and q2)
-static WEBP_INLINE void DoFilter6_SSE2(__m128i* const p2, __m128i* const p1,
-                                       __m128i* const p0, __m128i* const q0,
-                                       __m128i* const q1, __m128i* const q2,
-                                       const __m128i* const mask,
-                                       int hev_thresh) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i sign_bit = _mm_set1_epi8(0x80);
-  __m128i a, not_hev;
-
-  // compute hev mask
-  GetNotHEV_SSE2(p1, p0, q0, q1, hev_thresh, &not_hev);
-
-  FLIP_SIGN_BIT4(*p1, *p0, *q0, *q1);
-  FLIP_SIGN_BIT2(*p2, *q2);
-  GetBaseDelta_SSE2(p1, p0, q0, q1, &a);
-
-  { // do simple filter on pixels with hev
-    const __m128i m = _mm_andnot_si128(not_hev, *mask);
-    const __m128i f = _mm_and_si128(a, m);
-    DoSimpleFilter_SSE2(p0, q0, &f);
-  }
-
-  { // do strong filter on pixels with not hev
-    const __m128i k9 = _mm_set1_epi16(0x0900);
-    const __m128i k63 = _mm_set1_epi16(63);
-
-    const __m128i m = _mm_and_si128(not_hev, *mask);
-    const __m128i f = _mm_and_si128(a, m);
-
-    const __m128i f_lo = _mm_unpacklo_epi8(zero, f);
-    const __m128i f_hi = _mm_unpackhi_epi8(zero, f);
-
-    const __m128i f9_lo = _mm_mulhi_epi16(f_lo, k9);    // Filter (lo) * 9
-    const __m128i f9_hi = _mm_mulhi_epi16(f_hi, k9);    // Filter (hi) * 9
-
-    const __m128i a2_lo = _mm_add_epi16(f9_lo, k63);    // Filter * 9 + 63
-    const __m128i a2_hi = _mm_add_epi16(f9_hi, k63);    // Filter * 9 + 63
-
-    const __m128i a1_lo = _mm_add_epi16(a2_lo, f9_lo);  // Filter * 18 + 63
-    const __m128i a1_hi = _mm_add_epi16(a2_hi, f9_hi);  // Filter * 18 + 63
-
-    const __m128i a0_lo = _mm_add_epi16(a1_lo, f9_lo);  // Filter * 27 + 63
-    const __m128i a0_hi = _mm_add_epi16(a1_hi, f9_hi);  // Filter * 27 + 63
-
-    Update2Pixels_SSE2(p2, q2, &a2_lo, &a2_hi);
-    Update2Pixels_SSE2(p1, q1, &a1_lo, &a1_hi);
-    Update2Pixels_SSE2(p0, q0, &a0_lo, &a0_hi);
-  }
-}
-
-// reads 8 rows across a vertical edge.
-static WEBP_INLINE void Load8x4_SSE2(const uint8_t* const b, int stride,
-                                     __m128i* const p, __m128i* const q) {
-  // A0 = 63 62 61 60 23 22 21 20 43 42 41 40 03 02 01 00
-  // A1 = 73 72 71 70 33 32 31 30 53 52 51 50 13 12 11 10
-  const __m128i A0 = _mm_set_epi32(
-      WebPMemToUint32(&b[6 * stride]), WebPMemToUint32(&b[2 * stride]),
-      WebPMemToUint32(&b[4 * stride]), WebPMemToUint32(&b[0 * stride]));
-  const __m128i A1 = _mm_set_epi32(
-      WebPMemToUint32(&b[7 * stride]), WebPMemToUint32(&b[3 * stride]),
-      WebPMemToUint32(&b[5 * stride]), WebPMemToUint32(&b[1 * stride]));
-
-  // B0 = 53 43 52 42 51 41 50 40 13 03 12 02 11 01 10 00
-  // B1 = 73 63 72 62 71 61 70 60 33 23 32 22 31 21 30 20
-  const __m128i B0 = _mm_unpacklo_epi8(A0, A1);
-  const __m128i B1 = _mm_unpackhi_epi8(A0, A1);
-
-  // C0 = 33 23 13 03 32 22 12 02 31 21 11 01 30 20 10 00
-  // C1 = 73 63 53 43 72 62 52 42 71 61 51 41 70 60 50 40
-  const __m128i C0 = _mm_unpacklo_epi16(B0, B1);
-  const __m128i C1 = _mm_unpackhi_epi16(B0, B1);
-
-  // *p = 71 61 51 41 31 21 11 01 70 60 50 40 30 20 10 00
-  // *q = 73 63 53 43 33 23 13 03 72 62 52 42 32 22 12 02
-  *p = _mm_unpacklo_epi32(C0, C1);
-  *q = _mm_unpackhi_epi32(C0, C1);
-}
-
-static WEBP_INLINE void Load16x4_SSE2(const uint8_t* const r0,
-                                      const uint8_t* const r8,
-                                      int stride,
-                                      __m128i* const p1, __m128i* const p0,
-                                      __m128i* const q0, __m128i* const q1) {
-  // Assume the pixels around the edge (|) are numbered as follows
-  //                00 01 | 02 03
-  //                10 11 | 12 13
-  //                 ...  |  ...
-  //                e0 e1 | e2 e3
-  //                f0 f1 | f2 f3
-  //
-  // r0 is pointing to the 0th row (00)
-  // r8 is pointing to the 8th row (80)
-
-  // Load
-  // p1 = 71 61 51 41 31 21 11 01 70 60 50 40 30 20 10 00
-  // q0 = 73 63 53 43 33 23 13 03 72 62 52 42 32 22 12 02
-  // p0 = f1 e1 d1 c1 b1 a1 91 81 f0 e0 d0 c0 b0 a0 90 80
-  // q1 = f3 e3 d3 c3 b3 a3 93 83 f2 e2 d2 c2 b2 a2 92 82
-  Load8x4_SSE2(r0, stride, p1, q0);
-  Load8x4_SSE2(r8, stride, p0, q1);
-
-  {
-    // p1 = f0 e0 d0 c0 b0 a0 90 80 70 60 50 40 30 20 10 00
-    // p0 = f1 e1 d1 c1 b1 a1 91 81 71 61 51 41 31 21 11 01
-    // q0 = f2 e2 d2 c2 b2 a2 92 82 72 62 52 42 32 22 12 02
-    // q1 = f3 e3 d3 c3 b3 a3 93 83 73 63 53 43 33 23 13 03
-    const __m128i t1 = *p1;
-    const __m128i t2 = *q0;
-    *p1 = _mm_unpacklo_epi64(t1, *p0);
-    *p0 = _mm_unpackhi_epi64(t1, *p0);
-    *q0 = _mm_unpacklo_epi64(t2, *q1);
-    *q1 = _mm_unpackhi_epi64(t2, *q1);
-  }
-}
-
-static WEBP_INLINE void Store4x4_SSE2(__m128i* const x,
-                                      uint8_t* dst, int stride) {
-  int i;
-  for (i = 0; i < 4; ++i, dst += stride) {
-    WebPUint32ToMem(dst, _mm_cvtsi128_si32(*x));
-    *x = _mm_srli_si128(*x, 4);
-  }
-}
-
-// Transpose back and store
-static WEBP_INLINE void Store16x4_SSE2(const __m128i* const p1,
-                                       const __m128i* const p0,
-                                       const __m128i* const q0,
-                                       const __m128i* const q1,
-                                       uint8_t* r0, uint8_t* r8,
-                                       int stride) {
-  __m128i t1, p1_s, p0_s, q0_s, q1_s;
-
-  // p0 = 71 70 61 60 51 50 41 40 31 30 21 20 11 10 01 00
-  // p1 = f1 f0 e1 e0 d1 d0 c1 c0 b1 b0 a1 a0 91 90 81 80
-  t1 = *p0;
-  p0_s = _mm_unpacklo_epi8(*p1, t1);
-  p1_s = _mm_unpackhi_epi8(*p1, t1);
-
-  // q0 = 73 72 63 62 53 52 43 42 33 32 23 22 13 12 03 02
-  // q1 = f3 f2 e3 e2 d3 d2 c3 c2 b3 b2 a3 a2 93 92 83 82
-  t1 = *q0;
-  q0_s = _mm_unpacklo_epi8(t1, *q1);
-  q1_s = _mm_unpackhi_epi8(t1, *q1);
-
-  // p0 = 33 32 31 30 23 22 21 20 13 12 11 10 03 02 01 00
-  // q0 = 73 72 71 70 63 62 61 60 53 52 51 50 43 42 41 40
-  t1 = p0_s;
-  p0_s = _mm_unpacklo_epi16(t1, q0_s);
-  q0_s = _mm_unpackhi_epi16(t1, q0_s);
-
-  // p1 = b3 b2 b1 b0 a3 a2 a1 a0 93 92 91 90 83 82 81 80
-  // q1 = f3 f2 f1 f0 e3 e2 e1 e0 d3 d2 d1 d0 c3 c2 c1 c0
-  t1 = p1_s;
-  p1_s = _mm_unpacklo_epi16(t1, q1_s);
-  q1_s = _mm_unpackhi_epi16(t1, q1_s);
-
-  Store4x4_SSE2(&p0_s, r0, stride);
-  r0 += 4 * stride;
-  Store4x4_SSE2(&q0_s, r0, stride);
-
-  Store4x4_SSE2(&p1_s, r8, stride);
-  r8 += 4 * stride;
-  Store4x4_SSE2(&q1_s, r8, stride);
-}
-
-//------------------------------------------------------------------------------
-// Simple In-loop filtering (Paragraph 15.2)
-
-static void SimpleVFilter16_SSE2(uint8_t* p, int stride, int thresh) {
-  // Load
-  __m128i p1 = _mm_loadu_si128((__m128i*)&p[-2 * stride]);
-  __m128i p0 = _mm_loadu_si128((__m128i*)&p[-stride]);
-  __m128i q0 = _mm_loadu_si128((__m128i*)&p[0]);
-  __m128i q1 = _mm_loadu_si128((__m128i*)&p[stride]);
-
-  DoFilter2_SSE2(&p1, &p0, &q0, &q1, thresh);
-
-  // Store
-  _mm_storeu_si128((__m128i*)&p[-stride], p0);
-  _mm_storeu_si128((__m128i*)&p[0], q0);
-}
-
-static void SimpleHFilter16_SSE2(uint8_t* p, int stride, int thresh) {
-  __m128i p1, p0, q0, q1;
-
-  p -= 2;  // beginning of p1
-
-  Load16x4_SSE2(p, p + 8 * stride, stride, &p1, &p0, &q0, &q1);
-  DoFilter2_SSE2(&p1, &p0, &q0, &q1, thresh);
-  Store16x4_SSE2(&p1, &p0, &q0, &q1, p, p + 8 * stride, stride);
-}
-
-static void SimpleVFilter16i_SSE2(uint8_t* p, int stride, int thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4 * stride;
-    SimpleVFilter16_SSE2(p, stride, thresh);
-  }
-}
-
-static void SimpleHFilter16i_SSE2(uint8_t* p, int stride, int thresh) {
-  int k;
-  for (k = 3; k > 0; --k) {
-    p += 4;
-    SimpleHFilter16_SSE2(p, stride, thresh);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Complex In-loop filtering (Paragraph 15.3)
-
-#define MAX_DIFF1(p3, p2, p1, p0, m) do {                                      \
-  (m) = MM_ABS(p1, p0);                                                        \
-  (m) = _mm_max_epu8(m, MM_ABS(p3, p2));                                       \
-  (m) = _mm_max_epu8(m, MM_ABS(p2, p1));                                       \
-} while (0)
-
-#define MAX_DIFF2(p3, p2, p1, p0, m) do {                                      \
-  (m) = _mm_max_epu8(m, MM_ABS(p1, p0));                                       \
-  (m) = _mm_max_epu8(m, MM_ABS(p3, p2));                                       \
-  (m) = _mm_max_epu8(m, MM_ABS(p2, p1));                                       \
-} while (0)
-
-#define LOAD_H_EDGES4(p, stride, e1, e2, e3, e4) {                             \
-  (e1) = _mm_loadu_si128((__m128i*)&(p)[0 * (stride)]);                        \
-  (e2) = _mm_loadu_si128((__m128i*)&(p)[1 * (stride)]);                        \
-  (e3) = _mm_loadu_si128((__m128i*)&(p)[2 * (stride)]);                        \
-  (e4) = _mm_loadu_si128((__m128i*)&(p)[3 * (stride)]);                        \
-}
-
-#define LOADUV_H_EDGE(p, u, v, stride) do {                                    \
-  const __m128i U = _mm_loadl_epi64((__m128i*)&(u)[(stride)]);                 \
-  const __m128i V = _mm_loadl_epi64((__m128i*)&(v)[(stride)]);                 \
-  (p) = _mm_unpacklo_epi64(U, V);                                              \
-} while (0)
-
-#define LOADUV_H_EDGES4(u, v, stride, e1, e2, e3, e4) {                        \
-  LOADUV_H_EDGE(e1, u, v, 0 * (stride));                                       \
-  LOADUV_H_EDGE(e2, u, v, 1 * (stride));                                       \
-  LOADUV_H_EDGE(e3, u, v, 2 * (stride));                                       \
-  LOADUV_H_EDGE(e4, u, v, 3 * (stride));                                       \
-}
-
-#define STOREUV(p, u, v, stride) {                                             \
-  _mm_storel_epi64((__m128i*)&(u)[(stride)], p);                               \
-  (p) = _mm_srli_si128(p, 8);                                                  \
-  _mm_storel_epi64((__m128i*)&(v)[(stride)], p);                               \
-}
-
-static WEBP_INLINE void ComplexMask_SSE2(const __m128i* const p1,
-                                         const __m128i* const p0,
-                                         const __m128i* const q0,
-                                         const __m128i* const q1,
-                                         int thresh, int ithresh,
-                                         __m128i* const mask) {
-  const __m128i it = _mm_set1_epi8(ithresh);
-  const __m128i diff = _mm_subs_epu8(*mask, it);
-  const __m128i thresh_mask = _mm_cmpeq_epi8(diff, _mm_setzero_si128());
-  __m128i filter_mask;
-  NeedsFilter_SSE2(p1, p0, q0, q1, thresh, &filter_mask);
-  *mask = _mm_and_si128(thresh_mask, filter_mask);
-}
-
-// on macroblock edges
-static void VFilter16_SSE2(uint8_t* p, int stride,
-                           int thresh, int ithresh, int hev_thresh) {
-  __m128i t1;
-  __m128i mask;
-  __m128i p2, p1, p0, q0, q1, q2;
-
-  // Load p3, p2, p1, p0
-  LOAD_H_EDGES4(p - 4 * stride, stride, t1, p2, p1, p0);
-  MAX_DIFF1(t1, p2, p1, p0, mask);
-
-  // Load q0, q1, q2, q3
-  LOAD_H_EDGES4(p, stride, q0, q1, q2, t1);
-  MAX_DIFF2(t1, q2, q1, q0, mask);
-
-  ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask);
-  DoFilter6_SSE2(&p2, &p1, &p0, &q0, &q1, &q2, &mask, hev_thresh);
-
-  // Store
-  _mm_storeu_si128((__m128i*)&p[-3 * stride], p2);
-  _mm_storeu_si128((__m128i*)&p[-2 * stride], p1);
-  _mm_storeu_si128((__m128i*)&p[-1 * stride], p0);
-  _mm_storeu_si128((__m128i*)&p[+0 * stride], q0);
-  _mm_storeu_si128((__m128i*)&p[+1 * stride], q1);
-  _mm_storeu_si128((__m128i*)&p[+2 * stride], q2);
-}
-
-static void HFilter16_SSE2(uint8_t* p, int stride,
-                           int thresh, int ithresh, int hev_thresh) {
-  __m128i mask;
-  __m128i p3, p2, p1, p0, q0, q1, q2, q3;
-
-  uint8_t* const b = p - 4;
-  Load16x4_SSE2(b, b + 8 * stride, stride, &p3, &p2, &p1, &p0);
-  MAX_DIFF1(p3, p2, p1, p0, mask);
-
-  Load16x4_SSE2(p, p + 8 * stride, stride, &q0, &q1, &q2, &q3);
-  MAX_DIFF2(q3, q2, q1, q0, mask);
-
-  ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask);
-  DoFilter6_SSE2(&p2, &p1, &p0, &q0, &q1, &q2, &mask, hev_thresh);
-
-  Store16x4_SSE2(&p3, &p2, &p1, &p0, b, b + 8 * stride, stride);
-  Store16x4_SSE2(&q0, &q1, &q2, &q3, p, p + 8 * stride, stride);
-}
-
-// on three inner edges
-static void VFilter16i_SSE2(uint8_t* p, int stride,
-                            int thresh, int ithresh, int hev_thresh) {
-  int k;
-  __m128i p3, p2, p1, p0;   // loop invariants
-
-  LOAD_H_EDGES4(p, stride, p3, p2, p1, p0);  // prologue
-
-  for (k = 3; k > 0; --k) {
-    __m128i mask, tmp1, tmp2;
-    uint8_t* const b = p + 2 * stride;   // beginning of p1
-    p += 4 * stride;
-
-    MAX_DIFF1(p3, p2, p1, p0, mask);   // compute partial mask
-    LOAD_H_EDGES4(p, stride, p3, p2, tmp1, tmp2);
-    MAX_DIFF2(p3, p2, tmp1, tmp2, mask);
-
-    // p3 and p2 are not just temporary variables here: they will be
-    // re-used for next span. And q2/q3 will become p1/p0 accordingly.
-    ComplexMask_SSE2(&p1, &p0, &p3, &p2, thresh, ithresh, &mask);
-    DoFilter4_SSE2(&p1, &p0, &p3, &p2, &mask, hev_thresh);
-
-    // Store
-    _mm_storeu_si128((__m128i*)&b[0 * stride], p1);
-    _mm_storeu_si128((__m128i*)&b[1 * stride], p0);
-    _mm_storeu_si128((__m128i*)&b[2 * stride], p3);
-    _mm_storeu_si128((__m128i*)&b[3 * stride], p2);
-
-    // rotate samples
-    p1 = tmp1;
-    p0 = tmp2;
-  }
-}
-
-static void HFilter16i_SSE2(uint8_t* p, int stride,
-                            int thresh, int ithresh, int hev_thresh) {
-  int k;
-  __m128i p3, p2, p1, p0;   // loop invariants
-
-  Load16x4_SSE2(p, p + 8 * stride, stride, &p3, &p2, &p1, &p0);  // prologue
-
-  for (k = 3; k > 0; --k) {
-    __m128i mask, tmp1, tmp2;
-    uint8_t* const b = p + 2;   // beginning of p1
-
-    p += 4;  // beginning of q0 (and next span)
-
-    MAX_DIFF1(p3, p2, p1, p0, mask);   // compute partial mask
-    Load16x4_SSE2(p, p + 8 * stride, stride, &p3, &p2, &tmp1, &tmp2);
-    MAX_DIFF2(p3, p2, tmp1, tmp2, mask);
-
-    ComplexMask_SSE2(&p1, &p0, &p3, &p2, thresh, ithresh, &mask);
-    DoFilter4_SSE2(&p1, &p0, &p3, &p2, &mask, hev_thresh);
-
-    Store16x4_SSE2(&p1, &p0, &p3, &p2, b, b + 8 * stride, stride);
-
-    // rotate samples
-    p1 = tmp1;
-    p0 = tmp2;
-  }
-}
-
-// 8-pixels wide variant, for chroma filtering
-static void VFilter8_SSE2(uint8_t* u, uint8_t* v, int stride,
-                          int thresh, int ithresh, int hev_thresh) {
-  __m128i mask;
-  __m128i t1, p2, p1, p0, q0, q1, q2;
-
-  // Load p3, p2, p1, p0
-  LOADUV_H_EDGES4(u - 4 * stride, v - 4 * stride, stride, t1, p2, p1, p0);
-  MAX_DIFF1(t1, p2, p1, p0, mask);
-
-  // Load q0, q1, q2, q3
-  LOADUV_H_EDGES4(u, v, stride, q0, q1, q2, t1);
-  MAX_DIFF2(t1, q2, q1, q0, mask);
-
-  ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask);
-  DoFilter6_SSE2(&p2, &p1, &p0, &q0, &q1, &q2, &mask, hev_thresh);
-
-  // Store
-  STOREUV(p2, u, v, -3 * stride);
-  STOREUV(p1, u, v, -2 * stride);
-  STOREUV(p0, u, v, -1 * stride);
-  STOREUV(q0, u, v, 0 * stride);
-  STOREUV(q1, u, v, 1 * stride);
-  STOREUV(q2, u, v, 2 * stride);
-}
-
-static void HFilter8_SSE2(uint8_t* u, uint8_t* v, int stride,
-                          int thresh, int ithresh, int hev_thresh) {
-  __m128i mask;
-  __m128i p3, p2, p1, p0, q0, q1, q2, q3;
-
-  uint8_t* const tu = u - 4;
-  uint8_t* const tv = v - 4;
-  Load16x4_SSE2(tu, tv, stride, &p3, &p2, &p1, &p0);
-  MAX_DIFF1(p3, p2, p1, p0, mask);
-
-  Load16x4_SSE2(u, v, stride, &q0, &q1, &q2, &q3);
-  MAX_DIFF2(q3, q2, q1, q0, mask);
-
-  ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask);
-  DoFilter6_SSE2(&p2, &p1, &p0, &q0, &q1, &q2, &mask, hev_thresh);
-
-  Store16x4_SSE2(&p3, &p2, &p1, &p0, tu, tv, stride);
-  Store16x4_SSE2(&q0, &q1, &q2, &q3, u, v, stride);
-}
-
-static void VFilter8i_SSE2(uint8_t* u, uint8_t* v, int stride,
-                           int thresh, int ithresh, int hev_thresh) {
-  __m128i mask;
-  __m128i t1, t2, p1, p0, q0, q1;
-
-  // Load p3, p2, p1, p0
-  LOADUV_H_EDGES4(u, v, stride, t2, t1, p1, p0);
-  MAX_DIFF1(t2, t1, p1, p0, mask);
-
-  u += 4 * stride;
-  v += 4 * stride;
-
-  // Load q0, q1, q2, q3
-  LOADUV_H_EDGES4(u, v, stride, q0, q1, t1, t2);
-  MAX_DIFF2(t2, t1, q1, q0, mask);
-
-  ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask);
-  DoFilter4_SSE2(&p1, &p0, &q0, &q1, &mask, hev_thresh);
-
-  // Store
-  STOREUV(p1, u, v, -2 * stride);
-  STOREUV(p0, u, v, -1 * stride);
-  STOREUV(q0, u, v, 0 * stride);
-  STOREUV(q1, u, v, 1 * stride);
-}
-
-static void HFilter8i_SSE2(uint8_t* u, uint8_t* v, int stride,
-                           int thresh, int ithresh, int hev_thresh) {
-  __m128i mask;
-  __m128i t1, t2, p1, p0, q0, q1;
-  Load16x4_SSE2(u, v, stride, &t2, &t1, &p1, &p0);   // p3, p2, p1, p0
-  MAX_DIFF1(t2, t1, p1, p0, mask);
-
-  u += 4;  // beginning of q0
-  v += 4;
-  Load16x4_SSE2(u, v, stride, &q0, &q1, &t1, &t2);  // q0, q1, q2, q3
-  MAX_DIFF2(t2, t1, q1, q0, mask);
-
-  ComplexMask_SSE2(&p1, &p0, &q0, &q1, thresh, ithresh, &mask);
-  DoFilter4_SSE2(&p1, &p0, &q0, &q1, &mask, hev_thresh);
-
-  u -= 2;  // beginning of p1
-  v -= 2;
-  Store16x4_SSE2(&p1, &p0, &q0, &q1, u, v, stride);
-}
-
-//------------------------------------------------------------------------------
-// 4x4 predictions
-
-#define DST(x, y) dst[(x) + (y) * BPS]
-#define AVG3(a, b, c) (((a) + 2 * (b) + (c) + 2) >> 2)
-
-// We use the following 8b-arithmetic tricks:
-//     (a + 2 * b + c + 2) >> 2 = (AC + b + 1) >> 1
-//   where: AC = (a + c) >> 1 = [(a + c + 1) >> 1] - [(a^c) & 1]
-// and:
-//     (a + 2 * b + c + 2) >> 2 = (AB + BC + 1) >> 1 - (ab|bc)&lsb
-//   where: AC = (a + b + 1) >> 1,   BC = (b + c + 1) >> 1
-//   and ab = a ^ b, bc = b ^ c, lsb = (AC^BC)&1
-
-static void VE4_SSE2(uint8_t* dst) {    // vertical
-  const __m128i one = _mm_set1_epi8(1);
-  const __m128i ABCDEFGH = _mm_loadl_epi64((__m128i*)(dst - BPS - 1));
-  const __m128i BCDEFGH0 = _mm_srli_si128(ABCDEFGH, 1);
-  const __m128i CDEFGH00 = _mm_srli_si128(ABCDEFGH, 2);
-  const __m128i a = _mm_avg_epu8(ABCDEFGH, CDEFGH00);
-  const __m128i lsb = _mm_and_si128(_mm_xor_si128(ABCDEFGH, CDEFGH00), one);
-  const __m128i b = _mm_subs_epu8(a, lsb);
-  const __m128i avg = _mm_avg_epu8(b, BCDEFGH0);
-  const uint32_t vals = _mm_cvtsi128_si32(avg);
-  int i;
-  for (i = 0; i < 4; ++i) {
-    WebPUint32ToMem(dst + i * BPS, vals);
-  }
-}
-
-static void LD4_SSE2(uint8_t* dst) {   // Down-Left
-  const __m128i one = _mm_set1_epi8(1);
-  const __m128i ABCDEFGH = _mm_loadl_epi64((__m128i*)(dst - BPS));
-  const __m128i BCDEFGH0 = _mm_srli_si128(ABCDEFGH, 1);
-  const __m128i CDEFGH00 = _mm_srli_si128(ABCDEFGH, 2);
-  const __m128i CDEFGHH0 = _mm_insert_epi16(CDEFGH00, dst[-BPS + 7], 3);
-  const __m128i avg1 = _mm_avg_epu8(ABCDEFGH, CDEFGHH0);
-  const __m128i lsb = _mm_and_si128(_mm_xor_si128(ABCDEFGH, CDEFGHH0), one);
-  const __m128i avg2 = _mm_subs_epu8(avg1, lsb);
-  const __m128i abcdefg = _mm_avg_epu8(avg2, BCDEFGH0);
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(               abcdefg    ));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 1)));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 2)));
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 3)));
-}
-
-static void VR4_SSE2(uint8_t* dst) {   // Vertical-Right
-  const __m128i one = _mm_set1_epi8(1);
-  const int I = dst[-1 + 0 * BPS];
-  const int J = dst[-1 + 1 * BPS];
-  const int K = dst[-1 + 2 * BPS];
-  const int X = dst[-1 - BPS];
-  const __m128i XABCD = _mm_loadl_epi64((__m128i*)(dst - BPS - 1));
-  const __m128i ABCD0 = _mm_srli_si128(XABCD, 1);
-  const __m128i abcd = _mm_avg_epu8(XABCD, ABCD0);
-  const __m128i _XABCD = _mm_slli_si128(XABCD, 1);
-  const __m128i IXABCD = _mm_insert_epi16(_XABCD, I | (X << 8), 0);
-  const __m128i avg1 = _mm_avg_epu8(IXABCD, ABCD0);
-  const __m128i lsb = _mm_and_si128(_mm_xor_si128(IXABCD, ABCD0), one);
-  const __m128i avg2 = _mm_subs_epu8(avg1, lsb);
-  const __m128i efgh = _mm_avg_epu8(avg2, XABCD);
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(               abcd    ));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(               efgh    ));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_slli_si128(abcd, 1)));
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_slli_si128(efgh, 1)));
-
-  // these two are hard to implement in SSE2, so we keep the C-version:
-  DST(0, 2) = AVG3(J, I, X);
-  DST(0, 3) = AVG3(K, J, I);
-}
-
-static void VL4_SSE2(uint8_t* dst) {   // Vertical-Left
-  const __m128i one = _mm_set1_epi8(1);
-  const __m128i ABCDEFGH = _mm_loadl_epi64((__m128i*)(dst - BPS));
-  const __m128i BCDEFGH_ = _mm_srli_si128(ABCDEFGH, 1);
-  const __m128i CDEFGH__ = _mm_srli_si128(ABCDEFGH, 2);
-  const __m128i avg1 = _mm_avg_epu8(ABCDEFGH, BCDEFGH_);
-  const __m128i avg2 = _mm_avg_epu8(CDEFGH__, BCDEFGH_);
-  const __m128i avg3 = _mm_avg_epu8(avg1, avg2);
-  const __m128i lsb1 = _mm_and_si128(_mm_xor_si128(avg1, avg2), one);
-  const __m128i ab = _mm_xor_si128(ABCDEFGH, BCDEFGH_);
-  const __m128i bc = _mm_xor_si128(CDEFGH__, BCDEFGH_);
-  const __m128i abbc = _mm_or_si128(ab, bc);
-  const __m128i lsb2 = _mm_and_si128(abbc, lsb1);
-  const __m128i avg4 = _mm_subs_epu8(avg3, lsb2);
-  const uint32_t extra_out = _mm_cvtsi128_si32(_mm_srli_si128(avg4, 4));
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(               avg1    ));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(               avg4    ));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(avg1, 1)));
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(avg4, 1)));
-
-  // these two are hard to get and irregular
-  DST(3, 2) = (extra_out >> 0) & 0xff;
-  DST(3, 3) = (extra_out >> 8) & 0xff;
-}
-
-static void RD4_SSE2(uint8_t* dst) {   // Down-right
-  const __m128i one = _mm_set1_epi8(1);
-  const __m128i XABCD = _mm_loadl_epi64((__m128i*)(dst - BPS - 1));
-  const __m128i ____XABCD = _mm_slli_si128(XABCD, 4);
-  const uint32_t I = dst[-1 + 0 * BPS];
-  const uint32_t J = dst[-1 + 1 * BPS];
-  const uint32_t K = dst[-1 + 2 * BPS];
-  const uint32_t L = dst[-1 + 3 * BPS];
-  const __m128i LKJI_____ =
-      _mm_cvtsi32_si128(L | (K << 8) | (J << 16) | (I << 24));
-  const __m128i LKJIXABCD = _mm_or_si128(LKJI_____, ____XABCD);
-  const __m128i KJIXABCD_ = _mm_srli_si128(LKJIXABCD, 1);
-  const __m128i JIXABCD__ = _mm_srli_si128(LKJIXABCD, 2);
-  const __m128i avg1 = _mm_avg_epu8(JIXABCD__, LKJIXABCD);
-  const __m128i lsb = _mm_and_si128(_mm_xor_si128(JIXABCD__, LKJIXABCD), one);
-  const __m128i avg2 = _mm_subs_epu8(avg1, lsb);
-  const __m128i abcdefg = _mm_avg_epu8(avg2, KJIXABCD_);
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(               abcdefg    ));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 1)));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 2)));
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 3)));
-}
-
-#undef DST
-#undef AVG3
-
-//------------------------------------------------------------------------------
-// Luma 16x16
-
-static WEBP_INLINE void TrueMotion_SSE2(uint8_t* dst, int size) {
-  const uint8_t* top = dst - BPS;
-  const __m128i zero = _mm_setzero_si128();
-  int y;
-  if (size == 4) {
-    const __m128i top_values = _mm_cvtsi32_si128(WebPMemToUint32(top));
-    const __m128i top_base = _mm_unpacklo_epi8(top_values, zero);
-    for (y = 0; y < 4; ++y, dst += BPS) {
-      const int val = dst[-1] - top[-1];
-      const __m128i base = _mm_set1_epi16(val);
-      const __m128i out = _mm_packus_epi16(_mm_add_epi16(base, top_base), zero);
-      WebPUint32ToMem(dst, _mm_cvtsi128_si32(out));
-    }
-  } else if (size == 8) {
-    const __m128i top_values = _mm_loadl_epi64((const __m128i*)top);
-    const __m128i top_base = _mm_unpacklo_epi8(top_values, zero);
-    for (y = 0; y < 8; ++y, dst += BPS) {
-      const int val = dst[-1] - top[-1];
-      const __m128i base = _mm_set1_epi16(val);
-      const __m128i out = _mm_packus_epi16(_mm_add_epi16(base, top_base), zero);
-      _mm_storel_epi64((__m128i*)dst, out);
-    }
-  } else {
-    const __m128i top_values = _mm_loadu_si128((const __m128i*)top);
-    const __m128i top_base_0 = _mm_unpacklo_epi8(top_values, zero);
-    const __m128i top_base_1 = _mm_unpackhi_epi8(top_values, zero);
-    for (y = 0; y < 16; ++y, dst += BPS) {
-      const int val = dst[-1] - top[-1];
-      const __m128i base = _mm_set1_epi16(val);
-      const __m128i out_0 = _mm_add_epi16(base, top_base_0);
-      const __m128i out_1 = _mm_add_epi16(base, top_base_1);
-      const __m128i out = _mm_packus_epi16(out_0, out_1);
-      _mm_storeu_si128((__m128i*)dst, out);
-    }
-  }
-}
-
-static void TM4_SSE2(uint8_t* dst)   { TrueMotion_SSE2(dst, 4); }
-static void TM8uv_SSE2(uint8_t* dst) { TrueMotion_SSE2(dst, 8); }
-static void TM16_SSE2(uint8_t* dst)  { TrueMotion_SSE2(dst, 16); }
-
-static void VE16_SSE2(uint8_t* dst) {
-  const __m128i top = _mm_loadu_si128((const __m128i*)(dst - BPS));
-  int j;
-  for (j = 0; j < 16; ++j) {
-    _mm_storeu_si128((__m128i*)(dst + j * BPS), top);
-  }
-}
-
-static void HE16_SSE2(uint8_t* dst) {     // horizontal
-  int j;
-  for (j = 16; j > 0; --j) {
-    const __m128i values = _mm_set1_epi8(dst[-1]);
-    _mm_storeu_si128((__m128i*)dst, values);
-    dst += BPS;
-  }
-}
-
-static WEBP_INLINE void Put16_SSE2(uint8_t v, uint8_t* dst) {
-  int j;
-  const __m128i values = _mm_set1_epi8(v);
-  for (j = 0; j < 16; ++j) {
-    _mm_storeu_si128((__m128i*)(dst + j * BPS), values);
-  }
-}
-
-static void DC16_SSE2(uint8_t* dst) {  // DC
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i top = _mm_loadu_si128((const __m128i*)(dst - BPS));
-  const __m128i sad8x2 = _mm_sad_epu8(top, zero);
-  // sum the two sads: sad8x2[0:1] + sad8x2[8:9]
-  const __m128i sum = _mm_add_epi16(sad8x2, _mm_shuffle_epi32(sad8x2, 2));
-  int left = 0;
-  int j;
-  for (j = 0; j < 16; ++j) {
-    left += dst[-1 + j * BPS];
-  }
-  {
-    const int DC = _mm_cvtsi128_si32(sum) + left + 16;
-    Put16_SSE2(DC >> 5, dst);
-  }
-}
-
-static void DC16NoTop_SSE2(uint8_t* dst) {  // DC with top samples unavailable
-  int DC = 8;
-  int j;
-  for (j = 0; j < 16; ++j) {
-    DC += dst[-1 + j * BPS];
-  }
-  Put16_SSE2(DC >> 4, dst);
-}
-
-static void DC16NoLeft_SSE2(uint8_t* dst) {  // DC with left samples unavailable
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i top = _mm_loadu_si128((const __m128i*)(dst - BPS));
-  const __m128i sad8x2 = _mm_sad_epu8(top, zero);
-  // sum the two sads: sad8x2[0:1] + sad8x2[8:9]
-  const __m128i sum = _mm_add_epi16(sad8x2, _mm_shuffle_epi32(sad8x2, 2));
-  const int DC = _mm_cvtsi128_si32(sum) + 8;
-  Put16_SSE2(DC >> 4, dst);
-}
-
-static void DC16NoTopLeft_SSE2(uint8_t* dst) {  // DC with no top & left samples
-  Put16_SSE2(0x80, dst);
-}
-
-//------------------------------------------------------------------------------
-// Chroma
-
-static void VE8uv_SSE2(uint8_t* dst) {    // vertical
-  int j;
-  const __m128i top = _mm_loadl_epi64((const __m128i*)(dst - BPS));
-  for (j = 0; j < 8; ++j) {
-    _mm_storel_epi64((__m128i*)(dst + j * BPS), top);
-  }
-}
-
-// helper for chroma-DC predictions
-static WEBP_INLINE void Put8x8uv_SSE2(uint8_t v, uint8_t* dst) {
-  int j;
-  const __m128i values = _mm_set1_epi8(v);
-  for (j = 0; j < 8; ++j) {
-    _mm_storel_epi64((__m128i*)(dst + j * BPS), values);
-  }
-}
-
-static void DC8uv_SSE2(uint8_t* dst) {     // DC
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i top = _mm_loadl_epi64((const __m128i*)(dst - BPS));
-  const __m128i sum = _mm_sad_epu8(top, zero);
-  int left = 0;
-  int j;
-  for (j = 0; j < 8; ++j) {
-    left += dst[-1 + j * BPS];
-  }
-  {
-    const int DC = _mm_cvtsi128_si32(sum) + left + 8;
-    Put8x8uv_SSE2(DC >> 4, dst);
-  }
-}
-
-static void DC8uvNoLeft_SSE2(uint8_t* dst) {   // DC with no left samples
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i top = _mm_loadl_epi64((const __m128i*)(dst - BPS));
-  const __m128i sum = _mm_sad_epu8(top, zero);
-  const int DC = _mm_cvtsi128_si32(sum) + 4;
-  Put8x8uv_SSE2(DC >> 3, dst);
-}
-
-static void DC8uvNoTop_SSE2(uint8_t* dst) {  // DC with no top samples
-  int dc0 = 4;
-  int i;
-  for (i = 0; i < 8; ++i) {
-    dc0 += dst[-1 + i * BPS];
-  }
-  Put8x8uv_SSE2(dc0 >> 3, dst);
-}
-
-static void DC8uvNoTopLeft_SSE2(uint8_t* dst) {    // DC with nothing
-  Put8x8uv_SSE2(0x80, dst);
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8DspInitSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitSSE2(void) {
-  VP8Transform = Transform_SSE2;
-#if (USE_TRANSFORM_AC3 == 1)
-  VP8TransformAC3 = TransformAC3_SSE2;
-#endif
-
-  VP8VFilter16 = VFilter16_SSE2;
-  VP8HFilter16 = HFilter16_SSE2;
-  VP8VFilter8 = VFilter8_SSE2;
-  VP8HFilter8 = HFilter8_SSE2;
-  VP8VFilter16i = VFilter16i_SSE2;
-  VP8HFilter16i = HFilter16i_SSE2;
-  VP8VFilter8i = VFilter8i_SSE2;
-  VP8HFilter8i = HFilter8i_SSE2;
-
-  VP8SimpleVFilter16 = SimpleVFilter16_SSE2;
-  VP8SimpleHFilter16 = SimpleHFilter16_SSE2;
-  VP8SimpleVFilter16i = SimpleVFilter16i_SSE2;
-  VP8SimpleHFilter16i = SimpleHFilter16i_SSE2;
-
-  VP8PredLuma4[1] = TM4_SSE2;
-  VP8PredLuma4[2] = VE4_SSE2;
-  VP8PredLuma4[4] = RD4_SSE2;
-  VP8PredLuma4[5] = VR4_SSE2;
-  VP8PredLuma4[6] = LD4_SSE2;
-  VP8PredLuma4[7] = VL4_SSE2;
-
-  VP8PredLuma16[0] = DC16_SSE2;
-  VP8PredLuma16[1] = TM16_SSE2;
-  VP8PredLuma16[2] = VE16_SSE2;
-  VP8PredLuma16[3] = HE16_SSE2;
-  VP8PredLuma16[4] = DC16NoTop_SSE2;
-  VP8PredLuma16[5] = DC16NoLeft_SSE2;
-  VP8PredLuma16[6] = DC16NoTopLeft_SSE2;
-
-  VP8PredChroma8[0] = DC8uv_SSE2;
-  VP8PredChroma8[1] = TM8uv_SSE2;
-  VP8PredChroma8[2] = VE8uv_SSE2;
-  VP8PredChroma8[4] = DC8uvNoTop_SSE2;
-  VP8PredChroma8[5] = DC8uvNoLeft_SSE2;
-  VP8PredChroma8[6] = DC8uvNoTopLeft_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(VP8DspInitSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/dec_sse41.c b/ios/Pods/libwebp/src/dsp/dec_sse41.c
deleted file mode 100644
index 8f18506..0000000
--- a/ios/Pods/libwebp/src/dsp/dec_sse41.c
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE4 version of some decoding functions.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE41)
-
-#include <smmintrin.h>
-#include "src/dec/vp8i_dec.h"
-#include "src/utils/utils.h"
-
-static void HE16_SSE41(uint8_t* dst) {     // horizontal
-  int j;
-  const __m128i kShuffle3 = _mm_set1_epi8(3);
-  for (j = 16; j > 0; --j) {
-    const __m128i in = _mm_cvtsi32_si128(WebPMemToUint32(dst - 4));
-    const __m128i values = _mm_shuffle_epi8(in, kShuffle3);
-    _mm_storeu_si128((__m128i*)dst, values);
-    dst += BPS;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8DspInitSSE41(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8DspInitSSE41(void) {
-  VP8PredLuma16[3] = HE16_SSE41;
-}
-
-#else  // !WEBP_USE_SSE41
-
-WEBP_DSP_INIT_STUB(VP8DspInitSSE41)
-
-#endif  // WEBP_USE_SSE41
diff --git a/ios/Pods/libwebp/src/dsp/dsp.h b/ios/Pods/libwebp/src/dsp/dsp.h
deleted file mode 100644
index fafc2d0..0000000
--- a/ios/Pods/libwebp/src/dsp/dsp.h
+++ /dev/null
@@ -1,678 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//   Speed-critical functions.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_DSP_DSP_H_
-#define WEBP_DSP_DSP_H_
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define BPS 32   // this is the common stride for enc/dec
-
-//------------------------------------------------------------------------------
-// CPU detection
-
-#if defined(__GNUC__)
-# define LOCAL_GCC_VERSION ((__GNUC__ << 8) | __GNUC_MINOR__)
-# define LOCAL_GCC_PREREQ(maj, min) \
-    (LOCAL_GCC_VERSION >= (((maj) << 8) | (min)))
-#else
-# define LOCAL_GCC_VERSION 0
-# define LOCAL_GCC_PREREQ(maj, min) 0
-#endif
-
-#if defined(__clang__)
-# define LOCAL_CLANG_VERSION ((__clang_major__ << 8) | __clang_minor__)
-# define LOCAL_CLANG_PREREQ(maj, min) \
-    (LOCAL_CLANG_VERSION >= (((maj) << 8) | (min)))
-#else
-# define LOCAL_CLANG_VERSION 0
-# define LOCAL_CLANG_PREREQ(maj, min) 0
-#endif
-
-#ifndef __has_builtin
-# define __has_builtin(x) 0
-#endif
-
-// for now, none of the optimizations below are available in emscripten
-#if !defined(EMSCRIPTEN)
-
-#if defined(_MSC_VER) && _MSC_VER > 1310 && \
-    (defined(_M_X64) || defined(_M_IX86))
-#define WEBP_MSC_SSE2  // Visual C++ SSE2 targets
-#endif
-
-#if defined(_MSC_VER) && _MSC_VER >= 1500 && \
-    (defined(_M_X64) || defined(_M_IX86))
-#define WEBP_MSC_SSE41  // Visual C++ SSE4.1 targets
-#endif
-
-// WEBP_HAVE_* are used to indicate the presence of the instruction set in dsp
-// files without intrinsics, allowing the corresponding Init() to be called.
-// Files containing intrinsics will need to be built targeting the instruction
-// set so should succeed on one of the earlier tests.
-#if defined(__SSE2__) || defined(WEBP_MSC_SSE2) || defined(WEBP_HAVE_SSE2)
-#define WEBP_USE_SSE2
-#endif
-
-#if defined(__SSE4_1__) || defined(WEBP_MSC_SSE41) || defined(WEBP_HAVE_SSE41)
-#define WEBP_USE_SSE41
-#endif
-
-// The intrinsics currently cause compiler errors with arm-nacl-gcc and the
-// inline assembly would need to be modified for use with Native Client.
-#if (defined(__ARM_NEON__) || \
-     defined(__aarch64__) || defined(WEBP_HAVE_NEON)) && \
-    !defined(__native_client__)
-#define WEBP_USE_NEON
-#endif
-
-#if !defined(WEBP_USE_NEON) && defined(__ANDROID__) && \
-    defined(__ARM_ARCH_7A__) && defined(HAVE_CPU_FEATURES_H)
-#define WEBP_ANDROID_NEON  // Android targets that may have NEON
-#define WEBP_USE_NEON
-#endif
-
-#if defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_M_ARM)
-#define WEBP_USE_NEON
-#define WEBP_USE_INTRINSICS
-#endif
-
-#if defined(__mips__) && !defined(__mips64) && \
-    defined(__mips_isa_rev) && (__mips_isa_rev >= 1) && (__mips_isa_rev < 6)
-#define WEBP_USE_MIPS32
-#if (__mips_isa_rev >= 2)
-#define WEBP_USE_MIPS32_R2
-#if defined(__mips_dspr2) || (defined(__mips_dsp_rev) && __mips_dsp_rev >= 2)
-#define WEBP_USE_MIPS_DSP_R2
-#endif
-#endif
-#endif
-
-#if defined(__mips_msa) && defined(__mips_isa_rev) && (__mips_isa_rev >= 5)
-#define WEBP_USE_MSA
-#endif
-
-#endif  /* EMSCRIPTEN */
-
-#ifndef WEBP_DSP_OMIT_C_CODE
-#define WEBP_DSP_OMIT_C_CODE 1
-#endif
-
-#if (defined(__aarch64__) || defined(__ARM_NEON__)) && WEBP_DSP_OMIT_C_CODE
-#define WEBP_NEON_OMIT_C_CODE 1
-#else
-#define WEBP_NEON_OMIT_C_CODE 0
-#endif
-
-#if !(LOCAL_CLANG_PREREQ(3,8) || LOCAL_GCC_PREREQ(4,8) || defined(__aarch64__))
-#define WEBP_NEON_WORK_AROUND_GCC 1
-#else
-#define WEBP_NEON_WORK_AROUND_GCC 0
-#endif
-
-// This macro prevents thread_sanitizer from reporting known concurrent writes.
-#define WEBP_TSAN_IGNORE_FUNCTION
-#if defined(__has_feature)
-#if __has_feature(thread_sanitizer)
-#undef WEBP_TSAN_IGNORE_FUNCTION
-#define WEBP_TSAN_IGNORE_FUNCTION __attribute__((no_sanitize_thread))
-#endif
-#endif
-
-#if defined(WEBP_USE_THREAD) && !defined(_WIN32)
-#include <pthread.h>  // NOLINT
-
-#define WEBP_DSP_INIT(func) do {                                    \
-  static volatile VP8CPUInfo func ## _last_cpuinfo_used =           \
-      (VP8CPUInfo)&func ## _last_cpuinfo_used;                      \
-  static pthread_mutex_t func ## _lock = PTHREAD_MUTEX_INITIALIZER; \
-  if (pthread_mutex_lock(&func ## _lock)) break;                    \
-  if (func ## _last_cpuinfo_used != VP8GetCPUInfo) func();          \
-  func ## _last_cpuinfo_used = VP8GetCPUInfo;                       \
-  (void)pthread_mutex_unlock(&func ## _lock);                       \
-} while (0)
-#else  // !(defined(WEBP_USE_THREAD) && !defined(_WIN32))
-#define WEBP_DSP_INIT(func) do {                                    \
-  static volatile VP8CPUInfo func ## _last_cpuinfo_used =           \
-      (VP8CPUInfo)&func ## _last_cpuinfo_used;                      \
-  if (func ## _last_cpuinfo_used == VP8GetCPUInfo) break;           \
-  func();                                                           \
-  func ## _last_cpuinfo_used = VP8GetCPUInfo;                       \
-} while (0)
-#endif  // defined(WEBP_USE_THREAD) && !defined(_WIN32)
-
-// Defines an Init + helper function that control multiple initialization of
-// function pointers / tables.
-/* Usage:
-   WEBP_DSP_INIT_FUNC(InitFunc) {
-     ...function body
-   }
-*/
-#define WEBP_DSP_INIT_FUNC(name)                             \
-  static WEBP_TSAN_IGNORE_FUNCTION void name ## _body(void); \
-  WEBP_TSAN_IGNORE_FUNCTION void name(void) {                \
-    WEBP_DSP_INIT(name ## _body);                            \
-  }                                                          \
-  static WEBP_TSAN_IGNORE_FUNCTION void name ## _body(void)
-
-#define WEBP_UBSAN_IGNORE_UNDEF
-#define WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW
-#if defined(__clang__) && defined(__has_attribute)
-#if __has_attribute(no_sanitize)
-// This macro prevents the undefined behavior sanitizer from reporting
-// failures. This is only meant to silence unaligned loads on platforms that
-// are known to support them.
-#undef WEBP_UBSAN_IGNORE_UNDEF
-#define WEBP_UBSAN_IGNORE_UNDEF \
-  __attribute__((no_sanitize("undefined")))
-
-// This macro prevents the undefined behavior sanitizer from reporting
-// failures related to unsigned integer overflows. This is only meant to
-// silence cases where this well defined behavior is expected.
-#undef WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW
-#define WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW \
-  __attribute__((no_sanitize("unsigned-integer-overflow")))
-#endif
-#endif
-
-// Regularize the definition of WEBP_SWAP_16BIT_CSP (backward compatibility)
-#if !defined(WEBP_SWAP_16BIT_CSP)
-#define WEBP_SWAP_16BIT_CSP 0
-#endif
-
-// some endian fix (e.g.: mips-gcc doesn't define __BIG_ENDIAN__)
-#if !defined(WORDS_BIGENDIAN) && \
-    (defined(__BIG_ENDIAN__) || defined(_M_PPC) || \
-     (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)))
-#define WORDS_BIGENDIAN
-#endif
-
-typedef enum {
-  kSSE2,
-  kSSE3,
-  kSlowSSSE3,  // special feature for slow SSSE3 architectures
-  kSSE4_1,
-  kAVX,
-  kAVX2,
-  kNEON,
-  kMIPS32,
-  kMIPSdspR2,
-  kMSA
-} CPUFeature;
-// returns true if the CPU supports the feature.
-typedef int (*VP8CPUInfo)(CPUFeature feature);
-WEBP_EXTERN VP8CPUInfo VP8GetCPUInfo;
-
-//------------------------------------------------------------------------------
-// Init stub generator
-
-// Defines an init function stub to ensure each module exposes a symbol,
-// avoiding a compiler warning.
-#define WEBP_DSP_INIT_STUB(func) \
-  extern void func(void); \
-  void func(void) {}
-
-//------------------------------------------------------------------------------
-// Encoding
-
-// Transforms
-// VP8Idct: Does one of two inverse transforms. If do_two is set, the transforms
-//          will be done for (ref, in, dst) and (ref + 4, in + 16, dst + 4).
-typedef void (*VP8Idct)(const uint8_t* ref, const int16_t* in, uint8_t* dst,
-                        int do_two);
-typedef void (*VP8Fdct)(const uint8_t* src, const uint8_t* ref, int16_t* out);
-typedef void (*VP8WHT)(const int16_t* in, int16_t* out);
-extern VP8Idct VP8ITransform;
-extern VP8Fdct VP8FTransform;
-extern VP8Fdct VP8FTransform2;   // performs two transforms at a time
-extern VP8WHT VP8FTransformWHT;
-// Predictions
-// *dst is the destination block. *top and *left can be NULL.
-typedef void (*VP8IntraPreds)(uint8_t *dst, const uint8_t* left,
-                              const uint8_t* top);
-typedef void (*VP8Intra4Preds)(uint8_t *dst, const uint8_t* top);
-extern VP8Intra4Preds VP8EncPredLuma4;
-extern VP8IntraPreds VP8EncPredLuma16;
-extern VP8IntraPreds VP8EncPredChroma8;
-
-typedef int (*VP8Metric)(const uint8_t* pix, const uint8_t* ref);
-extern VP8Metric VP8SSE16x16, VP8SSE16x8, VP8SSE8x8, VP8SSE4x4;
-typedef int (*VP8WMetric)(const uint8_t* pix, const uint8_t* ref,
-                          const uint16_t* const weights);
-// The weights for VP8TDisto4x4 and VP8TDisto16x16 contain a row-major
-// 4 by 4 symmetric matrix.
-extern VP8WMetric VP8TDisto4x4, VP8TDisto16x16;
-
-// Compute the average (DC) of four 4x4 blocks.
-// Each sub-4x4 block #i sum is stored in dc[i].
-typedef void (*VP8MeanMetric)(const uint8_t* ref, uint32_t dc[4]);
-extern VP8MeanMetric VP8Mean16x4;
-
-typedef void (*VP8BlockCopy)(const uint8_t* src, uint8_t* dst);
-extern VP8BlockCopy VP8Copy4x4;
-extern VP8BlockCopy VP8Copy16x8;
-// Quantization
-struct VP8Matrix;   // forward declaration
-typedef int (*VP8QuantizeBlock)(int16_t in[16], int16_t out[16],
-                                const struct VP8Matrix* const mtx);
-// Same as VP8QuantizeBlock, but quantizes two consecutive blocks.
-typedef int (*VP8Quantize2Blocks)(int16_t in[32], int16_t out[32],
-                                  const struct VP8Matrix* const mtx);
-
-extern VP8QuantizeBlock VP8EncQuantizeBlock;
-extern VP8Quantize2Blocks VP8EncQuantize2Blocks;
-
-// specific to 2nd transform:
-typedef int (*VP8QuantizeBlockWHT)(int16_t in[16], int16_t out[16],
-                                   const struct VP8Matrix* const mtx);
-extern VP8QuantizeBlockWHT VP8EncQuantizeBlockWHT;
-
-extern const int VP8DspScan[16 + 4 + 4];
-
-// Collect histogram for susceptibility calculation.
-#define MAX_COEFF_THRESH   31   // size of histogram used by CollectHistogram.
-typedef struct {
-  // We only need to store max_value and last_non_zero, not the distribution.
-  int max_value;
-  int last_non_zero;
-} VP8Histogram;
-typedef void (*VP8CHisto)(const uint8_t* ref, const uint8_t* pred,
-                          int start_block, int end_block,
-                          VP8Histogram* const histo);
-extern VP8CHisto VP8CollectHistogram;
-// General-purpose util function to help VP8CollectHistogram().
-void VP8SetHistogramData(const int distribution[MAX_COEFF_THRESH + 1],
-                         VP8Histogram* const histo);
-
-// must be called before using any of the above
-void VP8EncDspInit(void);
-
-//------------------------------------------------------------------------------
-// cost functions (encoding)
-
-extern const uint16_t VP8EntropyCost[256];        // 8bit fixed-point log(p)
-// approximate cost per level:
-extern const uint16_t VP8LevelFixedCosts[2047 /*MAX_LEVEL*/ + 1];
-extern const uint8_t VP8EncBands[16 + 1];
-
-struct VP8Residual;
-typedef void (*VP8SetResidualCoeffsFunc)(const int16_t* const coeffs,
-                                         struct VP8Residual* const res);
-extern VP8SetResidualCoeffsFunc VP8SetResidualCoeffs;
-
-// Cost calculation function.
-typedef int (*VP8GetResidualCostFunc)(int ctx0,
-                                      const struct VP8Residual* const res);
-extern VP8GetResidualCostFunc VP8GetResidualCost;
-
-// must be called before anything using the above
-void VP8EncDspCostInit(void);
-
-//------------------------------------------------------------------------------
-// SSIM / PSNR utils
-
-// struct for accumulating statistical moments
-typedef struct {
-  uint32_t w;              // sum(w_i) : sum of weights
-  uint32_t xm, ym;         // sum(w_i * x_i), sum(w_i * y_i)
-  uint32_t xxm, xym, yym;  // sum(w_i * x_i * x_i), etc.
-} VP8DistoStats;
-
-// Compute the final SSIM value
-// The non-clipped version assumes stats->w = (2 * VP8_SSIM_KERNEL + 1)^2.
-double VP8SSIMFromStats(const VP8DistoStats* const stats);
-double VP8SSIMFromStatsClipped(const VP8DistoStats* const stats);
-
-#define VP8_SSIM_KERNEL 3   // total size of the kernel: 2 * VP8_SSIM_KERNEL + 1
-typedef double (*VP8SSIMGetClippedFunc)(const uint8_t* src1, int stride1,
-                                        const uint8_t* src2, int stride2,
-                                        int xo, int yo,  // center position
-                                        int W, int H);   // plane dimension
-
-#if !defined(WEBP_REDUCE_SIZE)
-// This version is called with the guarantee that you can load 8 bytes and
-// 8 rows at offset src1 and src2
-typedef double (*VP8SSIMGetFunc)(const uint8_t* src1, int stride1,
-                                 const uint8_t* src2, int stride2);
-
-extern VP8SSIMGetFunc VP8SSIMGet;         // unclipped / unchecked
-extern VP8SSIMGetClippedFunc VP8SSIMGetClipped;   // with clipping
-#endif
-
-#if !defined(WEBP_DISABLE_STATS)
-typedef uint32_t (*VP8AccumulateSSEFunc)(const uint8_t* src1,
-                                         const uint8_t* src2, int len);
-extern VP8AccumulateSSEFunc VP8AccumulateSSE;
-#endif
-
-// must be called before using any of the above directly
-void VP8SSIMDspInit(void);
-
-//------------------------------------------------------------------------------
-// Decoding
-
-typedef void (*VP8DecIdct)(const int16_t* coeffs, uint8_t* dst);
-// when doing two transforms, coeffs is actually int16_t[2][16].
-typedef void (*VP8DecIdct2)(const int16_t* coeffs, uint8_t* dst, int do_two);
-extern VP8DecIdct2 VP8Transform;
-extern VP8DecIdct VP8TransformAC3;
-extern VP8DecIdct VP8TransformUV;
-extern VP8DecIdct VP8TransformDC;
-extern VP8DecIdct VP8TransformDCUV;
-extern VP8WHT VP8TransformWHT;
-
-// *dst is the destination block, with stride BPS. Boundary samples are
-// assumed accessible when needed.
-typedef void (*VP8PredFunc)(uint8_t* dst);
-extern VP8PredFunc VP8PredLuma16[/* NUM_B_DC_MODES */];
-extern VP8PredFunc VP8PredChroma8[/* NUM_B_DC_MODES */];
-extern VP8PredFunc VP8PredLuma4[/* NUM_BMODES */];
-
-// clipping tables (for filtering)
-extern const int8_t* const VP8ksclip1;  // clips [-1020, 1020] to [-128, 127]
-extern const int8_t* const VP8ksclip2;  // clips [-112, 112] to [-16, 15]
-extern const uint8_t* const VP8kclip1;  // clips [-255,511] to [0,255]
-extern const uint8_t* const VP8kabs0;   // abs(x) for x in [-255,255]
-// must be called first
-void VP8InitClipTables(void);
-
-// simple filter (only for luma)
-typedef void (*VP8SimpleFilterFunc)(uint8_t* p, int stride, int thresh);
-extern VP8SimpleFilterFunc VP8SimpleVFilter16;
-extern VP8SimpleFilterFunc VP8SimpleHFilter16;
-extern VP8SimpleFilterFunc VP8SimpleVFilter16i;  // filter 3 inner edges
-extern VP8SimpleFilterFunc VP8SimpleHFilter16i;
-
-// regular filter (on both macroblock edges and inner edges)
-typedef void (*VP8LumaFilterFunc)(uint8_t* luma, int stride,
-                                  int thresh, int ithresh, int hev_t);
-typedef void (*VP8ChromaFilterFunc)(uint8_t* u, uint8_t* v, int stride,
-                                    int thresh, int ithresh, int hev_t);
-// on outer edge
-extern VP8LumaFilterFunc VP8VFilter16;
-extern VP8LumaFilterFunc VP8HFilter16;
-extern VP8ChromaFilterFunc VP8VFilter8;
-extern VP8ChromaFilterFunc VP8HFilter8;
-
-// on inner edge
-extern VP8LumaFilterFunc VP8VFilter16i;   // filtering 3 inner edges altogether
-extern VP8LumaFilterFunc VP8HFilter16i;
-extern VP8ChromaFilterFunc VP8VFilter8i;  // filtering u and v altogether
-extern VP8ChromaFilterFunc VP8HFilter8i;
-
-// Dithering. Combines dithering values (centered around 128) with dst[],
-// according to: dst[] = clip(dst[] + (((dither[]-128) + 8) >> 4)
-#define VP8_DITHER_DESCALE 4
-#define VP8_DITHER_DESCALE_ROUNDER (1 << (VP8_DITHER_DESCALE - 1))
-#define VP8_DITHER_AMP_BITS 7
-#define VP8_DITHER_AMP_CENTER (1 << VP8_DITHER_AMP_BITS)
-extern void (*VP8DitherCombine8x8)(const uint8_t* dither, uint8_t* dst,
-                                   int dst_stride);
-
-// must be called before anything using the above
-void VP8DspInit(void);
-
-//------------------------------------------------------------------------------
-// WebP I/O
-
-#define FANCY_UPSAMPLING   // undefined to remove fancy upsampling support
-
-// Convert a pair of y/u/v lines together to the output rgb/a colorspace.
-// bottom_y can be NULL if only one line of output is needed (at top/bottom).
-typedef void (*WebPUpsampleLinePairFunc)(
-    const uint8_t* top_y, const uint8_t* bottom_y,
-    const uint8_t* top_u, const uint8_t* top_v,
-    const uint8_t* cur_u, const uint8_t* cur_v,
-    uint8_t* top_dst, uint8_t* bottom_dst, int len);
-
-#ifdef FANCY_UPSAMPLING
-
-// Fancy upsampling functions to convert YUV to RGB(A) modes
-extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */];
-
-#endif    // FANCY_UPSAMPLING
-
-// Per-row point-sampling methods.
-typedef void (*WebPSamplerRowFunc)(const uint8_t* y,
-                                   const uint8_t* u, const uint8_t* v,
-                                   uint8_t* dst, int len);
-// Generic function to apply 'WebPSamplerRowFunc' to the whole plane:
-void WebPSamplerProcessPlane(const uint8_t* y, int y_stride,
-                             const uint8_t* u, const uint8_t* v, int uv_stride,
-                             uint8_t* dst, int dst_stride,
-                             int width, int height, WebPSamplerRowFunc func);
-
-// Sampling functions to convert rows of YUV to RGB(A)
-extern WebPSamplerRowFunc WebPSamplers[/* MODE_LAST */];
-
-// General function for converting two lines of ARGB or RGBA.
-// 'alpha_is_last' should be true if 0xff000000 is stored in memory as
-// as 0x00, 0x00, 0x00, 0xff (little endian).
-WebPUpsampleLinePairFunc WebPGetLinePairConverter(int alpha_is_last);
-
-// YUV444->RGB converters
-typedef void (*WebPYUV444Converter)(const uint8_t* y,
-                                    const uint8_t* u, const uint8_t* v,
-                                    uint8_t* dst, int len);
-
-extern WebPYUV444Converter WebPYUV444Converters[/* MODE_LAST */];
-
-// Must be called before using the WebPUpsamplers[] (and for premultiplied
-// colorspaces like rgbA, rgbA4444, etc)
-void WebPInitUpsamplers(void);
-// Must be called before using WebPSamplers[]
-void WebPInitSamplers(void);
-// Must be called before using WebPYUV444Converters[]
-void WebPInitYUV444Converters(void);
-
-//------------------------------------------------------------------------------
-// ARGB -> YUV converters
-
-// Convert ARGB samples to luma Y.
-extern void (*WebPConvertARGBToY)(const uint32_t* argb, uint8_t* y, int width);
-// Convert ARGB samples to U/V with downsampling. do_store should be '1' for
-// even lines and '0' for odd ones. 'src_width' is the original width, not
-// the U/V one.
-extern void (*WebPConvertARGBToUV)(const uint32_t* argb, uint8_t* u, uint8_t* v,
-                                   int src_width, int do_store);
-
-// Convert a row of accumulated (four-values) of rgba32 toward U/V
-extern void (*WebPConvertRGBA32ToUV)(const uint16_t* rgb,
-                                     uint8_t* u, uint8_t* v, int width);
-
-// Convert RGB or BGR to Y
-extern void (*WebPConvertRGB24ToY)(const uint8_t* rgb, uint8_t* y, int width);
-extern void (*WebPConvertBGR24ToY)(const uint8_t* bgr, uint8_t* y, int width);
-
-// used for plain-C fallback.
-extern void WebPConvertARGBToUV_C(const uint32_t* argb, uint8_t* u, uint8_t* v,
-                                  int src_width, int do_store);
-extern void WebPConvertRGBA32ToUV_C(const uint16_t* rgb,
-                                    uint8_t* u, uint8_t* v, int width);
-
-// utilities for accurate RGB->YUV conversion
-extern uint64_t (*WebPSharpYUVUpdateY)(const uint16_t* src, const uint16_t* ref,
-                                       uint16_t* dst, int len);
-extern void (*WebPSharpYUVUpdateRGB)(const int16_t* src, const int16_t* ref,
-                                     int16_t* dst, int len);
-extern void (*WebPSharpYUVFilterRow)(const int16_t* A, const int16_t* B,
-                                     int len,
-                                     const uint16_t* best_y, uint16_t* out);
-
-// Must be called before using the above.
-void WebPInitConvertARGBToYUV(void);
-
-//------------------------------------------------------------------------------
-// Rescaler
-
-struct WebPRescaler;
-
-// Import a row of data and save its contribution in the rescaler.
-// 'channel' denotes the channel number to be imported. 'Expand' corresponds to
-// the wrk->x_expand case. Otherwise, 'Shrink' is to be used.
-typedef void (*WebPRescalerImportRowFunc)(struct WebPRescaler* const wrk,
-                                          const uint8_t* src);
-
-extern WebPRescalerImportRowFunc WebPRescalerImportRowExpand;
-extern WebPRescalerImportRowFunc WebPRescalerImportRowShrink;
-
-// Export one row (starting at x_out position) from rescaler.
-// 'Expand' corresponds to the wrk->y_expand case.
-// Otherwise 'Shrink' is to be used
-typedef void (*WebPRescalerExportRowFunc)(struct WebPRescaler* const wrk);
-extern WebPRescalerExportRowFunc WebPRescalerExportRowExpand;
-extern WebPRescalerExportRowFunc WebPRescalerExportRowShrink;
-
-// Plain-C implementation, as fall-back.
-extern void WebPRescalerImportRowExpand_C(struct WebPRescaler* const wrk,
-                                          const uint8_t* src);
-extern void WebPRescalerImportRowShrink_C(struct WebPRescaler* const wrk,
-                                          const uint8_t* src);
-extern void WebPRescalerExportRowExpand_C(struct WebPRescaler* const wrk);
-extern void WebPRescalerExportRowShrink_C(struct WebPRescaler* const wrk);
-
-// Main entry calls:
-extern void WebPRescalerImportRow(struct WebPRescaler* const wrk,
-                                  const uint8_t* src);
-// Export one row (starting at x_out position) from rescaler.
-extern void WebPRescalerExportRow(struct WebPRescaler* const wrk);
-
-// Must be called first before using the above.
-void WebPRescalerDspInit(void);
-
-//------------------------------------------------------------------------------
-// Utilities for processing transparent channel.
-
-// Apply alpha pre-multiply on an rgba, bgra or argb plane of size w * h.
-// alpha_first should be 0 for argb, 1 for rgba or bgra (where alpha is last).
-extern void (*WebPApplyAlphaMultiply)(
-    uint8_t* rgba, int alpha_first, int w, int h, int stride);
-
-// Same, buf specifically for RGBA4444 format
-extern void (*WebPApplyAlphaMultiply4444)(
-    uint8_t* rgba4444, int w, int h, int stride);
-
-// Dispatch the values from alpha[] plane to the ARGB destination 'dst'.
-// Returns true if alpha[] plane has non-trivial values different from 0xff.
-extern int (*WebPDispatchAlpha)(const uint8_t* alpha, int alpha_stride,
-                                int width, int height,
-                                uint8_t* dst, int dst_stride);
-
-// Transfer packed 8b alpha[] values to green channel in dst[], zero'ing the
-// A/R/B values. 'dst_stride' is the stride for dst[] in uint32_t units.
-extern void (*WebPDispatchAlphaToGreen)(const uint8_t* alpha, int alpha_stride,
-                                        int width, int height,
-                                        uint32_t* dst, int dst_stride);
-
-// Extract the alpha values from 32b values in argb[] and pack them into alpha[]
-// (this is the opposite of WebPDispatchAlpha).
-// Returns true if there's only trivial 0xff alpha values.
-extern int (*WebPExtractAlpha)(const uint8_t* argb, int argb_stride,
-                               int width, int height,
-                               uint8_t* alpha, int alpha_stride);
-
-// Extract the green values from 32b values in argb[] and pack them into alpha[]
-// (this is the opposite of WebPDispatchAlphaToGreen).
-extern void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size);
-
-// Pre-Multiply operation transforms x into x * A / 255  (where x=Y,R,G or B).
-// Un-Multiply operation transforms x into x * 255 / A.
-
-// Pre-Multiply or Un-Multiply (if 'inverse' is true) argb values in a row.
-extern void (*WebPMultARGBRow)(uint32_t* const ptr, int width, int inverse);
-
-// Same a WebPMultARGBRow(), but for several rows.
-void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows,
-                      int inverse);
-
-// Same for a row of single values, with side alpha values.
-extern void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha,
-                           int width, int inverse);
-
-// Same a WebPMultRow(), but for several 'num_rows' rows.
-void WebPMultRows(uint8_t* ptr, int stride,
-                  const uint8_t* alpha, int alpha_stride,
-                  int width, int num_rows, int inverse);
-
-// Plain-C versions, used as fallback by some implementations.
-void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha,
-                   int width, int inverse);
-void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse);
-
-#ifdef WORDS_BIGENDIAN
-// ARGB packing function: a/r/g/b input is rgba or bgra order.
-extern void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r,
-                            const uint8_t* g, const uint8_t* b, int len,
-                            uint32_t* out);
-#endif
-
-// RGB packing function. 'step' can be 3 or 4. r/g/b input is rgb or bgr order.
-extern void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b,
-                           int len, int step, uint32_t* out);
-
-// This function returns true if src[i] contains a value different from 0xff.
-extern int (*WebPHasAlpha8b)(const uint8_t* src, int length);
-// This function returns true if src[4*i] contains a value different from 0xff.
-extern int (*WebPHasAlpha32b)(const uint8_t* src, int length);
-
-// To be called first before using the above.
-void WebPInitAlphaProcessing(void);
-
-//------------------------------------------------------------------------------
-// Filter functions
-
-typedef enum {     // Filter types.
-  WEBP_FILTER_NONE = 0,
-  WEBP_FILTER_HORIZONTAL,
-  WEBP_FILTER_VERTICAL,
-  WEBP_FILTER_GRADIENT,
-  WEBP_FILTER_LAST = WEBP_FILTER_GRADIENT + 1,  // end marker
-  WEBP_FILTER_BEST,    // meta-types
-  WEBP_FILTER_FAST
-} WEBP_FILTER_TYPE;
-
-typedef void (*WebPFilterFunc)(const uint8_t* in, int width, int height,
-                               int stride, uint8_t* out);
-// In-place un-filtering.
-// Warning! 'prev_line' pointer can be equal to 'cur_line' or 'preds'.
-typedef void (*WebPUnfilterFunc)(const uint8_t* prev_line, const uint8_t* preds,
-                                 uint8_t* cur_line, int width);
-
-// Filter the given data using the given predictor.
-// 'in' corresponds to a 2-dimensional pixel array of size (stride * height)
-// in raster order.
-// 'stride' is number of bytes per scan line (with possible padding).
-// 'out' should be pre-allocated.
-extern WebPFilterFunc WebPFilters[WEBP_FILTER_LAST];
-
-// In-place reconstruct the original data from the given filtered data.
-// The reconstruction will be done for 'num_rows' rows starting from 'row'
-// (assuming rows upto 'row - 1' are already reconstructed).
-extern WebPUnfilterFunc WebPUnfilters[WEBP_FILTER_LAST];
-
-// To be called first before using the above.
-void VP8FiltersInit(void);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DSP_DSP_H_
diff --git a/ios/Pods/libwebp/src/dsp/enc.c b/ios/Pods/libwebp/src/dsp/enc.c
deleted file mode 100644
index 2fddbc4..0000000
--- a/ios/Pods/libwebp/src/dsp/enc.c
+++ /dev/null
@@ -1,830 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Speed-critical encoding functions.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>  // for abs()
-
-#include "src/dsp/dsp.h"
-#include "src/enc/vp8i_enc.h"
-
-static WEBP_INLINE uint8_t clip_8b(int v) {
-  return (!(v & ~0xff)) ? v : (v < 0) ? 0 : 255;
-}
-
-#if !WEBP_NEON_OMIT_C_CODE
-static WEBP_INLINE int clip_max(int v, int max) {
-  return (v > max) ? max : v;
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-//------------------------------------------------------------------------------
-// Compute susceptibility based on DCT-coeff histograms:
-// the higher, the "easier" the macroblock is to compress.
-
-const int VP8DspScan[16 + 4 + 4] = {
-  // Luma
-  0 +  0 * BPS,  4 +  0 * BPS, 8 +  0 * BPS, 12 +  0 * BPS,
-  0 +  4 * BPS,  4 +  4 * BPS, 8 +  4 * BPS, 12 +  4 * BPS,
-  0 +  8 * BPS,  4 +  8 * BPS, 8 +  8 * BPS, 12 +  8 * BPS,
-  0 + 12 * BPS,  4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS,
-
-  0 + 0 * BPS,   4 + 0 * BPS, 0 + 4 * BPS,  4 + 4 * BPS,    // U
-  8 + 0 * BPS,  12 + 0 * BPS, 8 + 4 * BPS, 12 + 4 * BPS     // V
-};
-
-// general-purpose util function
-void VP8SetHistogramData(const int distribution[MAX_COEFF_THRESH + 1],
-                         VP8Histogram* const histo) {
-  int max_value = 0, last_non_zero = 1;
-  int k;
-  for (k = 0; k <= MAX_COEFF_THRESH; ++k) {
-    const int value = distribution[k];
-    if (value > 0) {
-      if (value > max_value) max_value = value;
-      last_non_zero = k;
-    }
-  }
-  histo->max_value = max_value;
-  histo->last_non_zero = last_non_zero;
-}
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void CollectHistogram_C(const uint8_t* ref, const uint8_t* pred,
-                               int start_block, int end_block,
-                               VP8Histogram* const histo) {
-  int j;
-  int distribution[MAX_COEFF_THRESH + 1] = { 0 };
-  for (j = start_block; j < end_block; ++j) {
-    int k;
-    int16_t out[16];
-
-    VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out);
-
-    // Convert coefficients to bin.
-    for (k = 0; k < 16; ++k) {
-      const int v = abs(out[k]) >> 3;
-      const int clipped_value = clip_max(v, MAX_COEFF_THRESH);
-      ++distribution[clipped_value];
-    }
-  }
-  VP8SetHistogramData(distribution, histo);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-//------------------------------------------------------------------------------
-// run-time tables (~4k)
-
-static uint8_t clip1[255 + 510 + 1];    // clips [-255,510] to [0,255]
-
-// We declare this variable 'volatile' to prevent instruction reordering
-// and make sure it's set to true _last_ (so as to be thread-safe)
-static volatile int tables_ok = 0;
-
-static WEBP_TSAN_IGNORE_FUNCTION void InitTables(void) {
-  if (!tables_ok) {
-    int i;
-    for (i = -255; i <= 255 + 255; ++i) {
-      clip1[255 + i] = clip_8b(i);
-    }
-    tables_ok = 1;
-  }
-}
-
-
-//------------------------------------------------------------------------------
-// Transforms (Paragraph 14.4)
-
-#if !WEBP_NEON_OMIT_C_CODE
-
-#define STORE(x, y, v) \
-  dst[(x) + (y) * BPS] = clip_8b(ref[(x) + (y) * BPS] + ((v) >> 3))
-
-static const int kC1 = 20091 + (1 << 16);
-static const int kC2 = 35468;
-#define MUL(a, b) (((a) * (b)) >> 16)
-
-static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in,
-                                      uint8_t* dst) {
-  int C[4 * 4], *tmp;
-  int i;
-  tmp = C;
-  for (i = 0; i < 4; ++i) {    // vertical pass
-    const int a = in[0] + in[8];
-    const int b = in[0] - in[8];
-    const int c = MUL(in[4], kC2) - MUL(in[12], kC1);
-    const int d = MUL(in[4], kC1) + MUL(in[12], kC2);
-    tmp[0] = a + d;
-    tmp[1] = b + c;
-    tmp[2] = b - c;
-    tmp[3] = a - d;
-    tmp += 4;
-    in++;
-  }
-
-  tmp = C;
-  for (i = 0; i < 4; ++i) {    // horizontal pass
-    const int dc = tmp[0] + 4;
-    const int a =  dc +  tmp[8];
-    const int b =  dc -  tmp[8];
-    const int c = MUL(tmp[4], kC2) - MUL(tmp[12], kC1);
-    const int d = MUL(tmp[4], kC1) + MUL(tmp[12], kC2);
-    STORE(0, i, a + d);
-    STORE(1, i, b + c);
-    STORE(2, i, b - c);
-    STORE(3, i, a - d);
-    tmp++;
-  }
-}
-
-static void ITransform_C(const uint8_t* ref, const int16_t* in, uint8_t* dst,
-                         int do_two) {
-  ITransformOne(ref, in, dst);
-  if (do_two) {
-    ITransformOne(ref + 4, in + 16, dst + 4);
-  }
-}
-
-static void FTransform_C(const uint8_t* src, const uint8_t* ref, int16_t* out) {
-  int i;
-  int tmp[16];
-  for (i = 0; i < 4; ++i, src += BPS, ref += BPS) {
-    const int d0 = src[0] - ref[0];   // 9bit dynamic range ([-255,255])
-    const int d1 = src[1] - ref[1];
-    const int d2 = src[2] - ref[2];
-    const int d3 = src[3] - ref[3];
-    const int a0 = (d0 + d3);         // 10b                      [-510,510]
-    const int a1 = (d1 + d2);
-    const int a2 = (d1 - d2);
-    const int a3 = (d0 - d3);
-    tmp[0 + i * 4] = (a0 + a1) * 8;   // 14b                      [-8160,8160]
-    tmp[1 + i * 4] = (a2 * 2217 + a3 * 5352 + 1812) >> 9;      // [-7536,7542]
-    tmp[2 + i * 4] = (a0 - a1) * 8;
-    tmp[3 + i * 4] = (a3 * 2217 - a2 * 5352 +  937) >> 9;
-  }
-  for (i = 0; i < 4; ++i) {
-    const int a0 = (tmp[0 + i] + tmp[12 + i]);  // 15b
-    const int a1 = (tmp[4 + i] + tmp[ 8 + i]);
-    const int a2 = (tmp[4 + i] - tmp[ 8 + i]);
-    const int a3 = (tmp[0 + i] - tmp[12 + i]);
-    out[0 + i] = (a0 + a1 + 7) >> 4;            // 12b
-    out[4 + i] = ((a2 * 2217 + a3 * 5352 + 12000) >> 16) + (a3 != 0);
-    out[8 + i] = (a0 - a1 + 7) >> 4;
-    out[12+ i] = ((a3 * 2217 - a2 * 5352 + 51000) >> 16);
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-static void FTransform2_C(const uint8_t* src, const uint8_t* ref,
-                          int16_t* out) {
-  VP8FTransform(src, ref, out);
-  VP8FTransform(src + 4, ref + 4, out + 16);
-}
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void FTransformWHT_C(const int16_t* in, int16_t* out) {
-  // input is 12b signed
-  int32_t tmp[16];
-  int i;
-  for (i = 0; i < 4; ++i, in += 64) {
-    const int a0 = (in[0 * 16] + in[2 * 16]);  // 13b
-    const int a1 = (in[1 * 16] + in[3 * 16]);
-    const int a2 = (in[1 * 16] - in[3 * 16]);
-    const int a3 = (in[0 * 16] - in[2 * 16]);
-    tmp[0 + i * 4] = a0 + a1;   // 14b
-    tmp[1 + i * 4] = a3 + a2;
-    tmp[2 + i * 4] = a3 - a2;
-    tmp[3 + i * 4] = a0 - a1;
-  }
-  for (i = 0; i < 4; ++i) {
-    const int a0 = (tmp[0 + i] + tmp[8 + i]);  // 15b
-    const int a1 = (tmp[4 + i] + tmp[12+ i]);
-    const int a2 = (tmp[4 + i] - tmp[12+ i]);
-    const int a3 = (tmp[0 + i] - tmp[8 + i]);
-    const int b0 = a0 + a1;    // 16b
-    const int b1 = a3 + a2;
-    const int b2 = a3 - a2;
-    const int b3 = a0 - a1;
-    out[ 0 + i] = b0 >> 1;     // 15b
-    out[ 4 + i] = b1 >> 1;
-    out[ 8 + i] = b2 >> 1;
-    out[12 + i] = b3 >> 1;
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-#undef MUL
-#undef STORE
-
-//------------------------------------------------------------------------------
-// Intra predictions
-
-static WEBP_INLINE void Fill(uint8_t* dst, int value, int size) {
-  int j;
-  for (j = 0; j < size; ++j) {
-    memset(dst + j * BPS, value, size);
-  }
-}
-
-static WEBP_INLINE void VerticalPred(uint8_t* dst,
-                                     const uint8_t* top, int size) {
-  int j;
-  if (top != NULL) {
-    for (j = 0; j < size; ++j) memcpy(dst + j * BPS, top, size);
-  } else {
-    Fill(dst, 127, size);
-  }
-}
-
-static WEBP_INLINE void HorizontalPred(uint8_t* dst,
-                                       const uint8_t* left, int size) {
-  if (left != NULL) {
-    int j;
-    for (j = 0; j < size; ++j) {
-      memset(dst + j * BPS, left[j], size);
-    }
-  } else {
-    Fill(dst, 129, size);
-  }
-}
-
-static WEBP_INLINE void TrueMotion(uint8_t* dst, const uint8_t* left,
-                                   const uint8_t* top, int size) {
-  int y;
-  if (left != NULL) {
-    if (top != NULL) {
-      const uint8_t* const clip = clip1 + 255 - left[-1];
-      for (y = 0; y < size; ++y) {
-        const uint8_t* const clip_table = clip + left[y];
-        int x;
-        for (x = 0; x < size; ++x) {
-          dst[x] = clip_table[top[x]];
-        }
-        dst += BPS;
-      }
-    } else {
-      HorizontalPred(dst, left, size);
-    }
-  } else {
-    // true motion without left samples (hence: with default 129 value)
-    // is equivalent to VE prediction where you just copy the top samples.
-    // Note that if top samples are not available, the default value is
-    // then 129, and not 127 as in the VerticalPred case.
-    if (top != NULL) {
-      VerticalPred(dst, top, size);
-    } else {
-      Fill(dst, 129, size);
-    }
-  }
-}
-
-static WEBP_INLINE void DCMode(uint8_t* dst, const uint8_t* left,
-                               const uint8_t* top,
-                               int size, int round, int shift) {
-  int DC = 0;
-  int j;
-  if (top != NULL) {
-    for (j = 0; j < size; ++j) DC += top[j];
-    if (left != NULL) {   // top and left present
-      for (j = 0; j < size; ++j) DC += left[j];
-    } else {      // top, but no left
-      DC += DC;
-    }
-    DC = (DC + round) >> shift;
-  } else if (left != NULL) {   // left but no top
-    for (j = 0; j < size; ++j) DC += left[j];
-    DC += DC;
-    DC = (DC + round) >> shift;
-  } else {   // no top, no left, nothing.
-    DC = 0x80;
-  }
-  Fill(dst, DC, size);
-}
-
-//------------------------------------------------------------------------------
-// Chroma 8x8 prediction (paragraph 12.2)
-
-static void IntraChromaPreds_C(uint8_t* dst, const uint8_t* left,
-                               const uint8_t* top) {
-  // U block
-  DCMode(C8DC8 + dst, left, top, 8, 8, 4);
-  VerticalPred(C8VE8 + dst, top, 8);
-  HorizontalPred(C8HE8 + dst, left, 8);
-  TrueMotion(C8TM8 + dst, left, top, 8);
-  // V block
-  dst += 8;
-  if (top != NULL) top += 8;
-  if (left != NULL) left += 16;
-  DCMode(C8DC8 + dst, left, top, 8, 8, 4);
-  VerticalPred(C8VE8 + dst, top, 8);
-  HorizontalPred(C8HE8 + dst, left, 8);
-  TrueMotion(C8TM8 + dst, left, top, 8);
-}
-
-//------------------------------------------------------------------------------
-// luma 16x16 prediction (paragraph 12.3)
-
-static void Intra16Preds_C(uint8_t* dst,
-                           const uint8_t* left, const uint8_t* top) {
-  DCMode(I16DC16 + dst, left, top, 16, 16, 5);
-  VerticalPred(I16VE16 + dst, top, 16);
-  HorizontalPred(I16HE16 + dst, left, 16);
-  TrueMotion(I16TM16 + dst, left, top, 16);
-}
-
-//------------------------------------------------------------------------------
-// luma 4x4 prediction
-
-#define DST(x, y) dst[(x) + (y) * BPS]
-#define AVG3(a, b, c) ((uint8_t)(((a) + 2 * (b) + (c) + 2) >> 2))
-#define AVG2(a, b) (((a) + (b) + 1) >> 1)
-
-static void VE4(uint8_t* dst, const uint8_t* top) {    // vertical
-  const uint8_t vals[4] = {
-    AVG3(top[-1], top[0], top[1]),
-    AVG3(top[ 0], top[1], top[2]),
-    AVG3(top[ 1], top[2], top[3]),
-    AVG3(top[ 2], top[3], top[4])
-  };
-  int i;
-  for (i = 0; i < 4; ++i) {
-    memcpy(dst + i * BPS, vals, 4);
-  }
-}
-
-static void HE4(uint8_t* dst, const uint8_t* top) {    // horizontal
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  WebPUint32ToMem(dst + 0 * BPS, 0x01010101U * AVG3(X, I, J));
-  WebPUint32ToMem(dst + 1 * BPS, 0x01010101U * AVG3(I, J, K));
-  WebPUint32ToMem(dst + 2 * BPS, 0x01010101U * AVG3(J, K, L));
-  WebPUint32ToMem(dst + 3 * BPS, 0x01010101U * AVG3(K, L, L));
-}
-
-static void DC4(uint8_t* dst, const uint8_t* top) {
-  uint32_t dc = 4;
-  int i;
-  for (i = 0; i < 4; ++i) dc += top[i] + top[-5 + i];
-  Fill(dst, dc >> 3, 4);
-}
-
-static void RD4(uint8_t* dst, const uint8_t* top) {
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-  const int D = top[3];
-  DST(0, 3)                                     = AVG3(J, K, L);
-  DST(0, 2) = DST(1, 3)                         = AVG3(I, J, K);
-  DST(0, 1) = DST(1, 2) = DST(2, 3)             = AVG3(X, I, J);
-  DST(0, 0) = DST(1, 1) = DST(2, 2) = DST(3, 3) = AVG3(A, X, I);
-  DST(1, 0) = DST(2, 1) = DST(3, 2)             = AVG3(B, A, X);
-  DST(2, 0) = DST(3, 1)                         = AVG3(C, B, A);
-  DST(3, 0)                                     = AVG3(D, C, B);
-}
-
-static void LD4(uint8_t* dst, const uint8_t* top) {
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-  const int D = top[3];
-  const int E = top[4];
-  const int F = top[5];
-  const int G = top[6];
-  const int H = top[7];
-  DST(0, 0)                                     = AVG3(A, B, C);
-  DST(1, 0) = DST(0, 1)                         = AVG3(B, C, D);
-  DST(2, 0) = DST(1, 1) = DST(0, 2)             = AVG3(C, D, E);
-  DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F);
-  DST(3, 1) = DST(2, 2) = DST(1, 3)             = AVG3(E, F, G);
-  DST(3, 2) = DST(2, 3)                         = AVG3(F, G, H);
-  DST(3, 3)                                     = AVG3(G, H, H);
-}
-
-static void VR4(uint8_t* dst, const uint8_t* top) {
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-  const int D = top[3];
-  DST(0, 0) = DST(1, 2) = AVG2(X, A);
-  DST(1, 0) = DST(2, 2) = AVG2(A, B);
-  DST(2, 0) = DST(3, 2) = AVG2(B, C);
-  DST(3, 0)             = AVG2(C, D);
-
-  DST(0, 3) =             AVG3(K, J, I);
-  DST(0, 2) =             AVG3(J, I, X);
-  DST(0, 1) = DST(1, 3) = AVG3(I, X, A);
-  DST(1, 1) = DST(2, 3) = AVG3(X, A, B);
-  DST(2, 1) = DST(3, 3) = AVG3(A, B, C);
-  DST(3, 1) =             AVG3(B, C, D);
-}
-
-static void VL4(uint8_t* dst, const uint8_t* top) {
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-  const int D = top[3];
-  const int E = top[4];
-  const int F = top[5];
-  const int G = top[6];
-  const int H = top[7];
-  DST(0, 0) =             AVG2(A, B);
-  DST(1, 0) = DST(0, 2) = AVG2(B, C);
-  DST(2, 0) = DST(1, 2) = AVG2(C, D);
-  DST(3, 0) = DST(2, 2) = AVG2(D, E);
-
-  DST(0, 1) =             AVG3(A, B, C);
-  DST(1, 1) = DST(0, 3) = AVG3(B, C, D);
-  DST(2, 1) = DST(1, 3) = AVG3(C, D, E);
-  DST(3, 1) = DST(2, 3) = AVG3(D, E, F);
-              DST(3, 2) = AVG3(E, F, G);
-              DST(3, 3) = AVG3(F, G, H);
-}
-
-static void HU4(uint8_t* dst, const uint8_t* top) {
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  DST(0, 0) =             AVG2(I, J);
-  DST(2, 0) = DST(0, 1) = AVG2(J, K);
-  DST(2, 1) = DST(0, 2) = AVG2(K, L);
-  DST(1, 0) =             AVG3(I, J, K);
-  DST(3, 0) = DST(1, 1) = AVG3(J, K, L);
-  DST(3, 1) = DST(1, 2) = AVG3(K, L, L);
-  DST(3, 2) = DST(2, 2) =
-  DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L;
-}
-
-static void HD4(uint8_t* dst, const uint8_t* top) {
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-
-  DST(0, 0) = DST(2, 1) = AVG2(I, X);
-  DST(0, 1) = DST(2, 2) = AVG2(J, I);
-  DST(0, 2) = DST(2, 3) = AVG2(K, J);
-  DST(0, 3)             = AVG2(L, K);
-
-  DST(3, 0)             = AVG3(A, B, C);
-  DST(2, 0)             = AVG3(X, A, B);
-  DST(1, 0) = DST(3, 1) = AVG3(I, X, A);
-  DST(1, 1) = DST(3, 2) = AVG3(J, I, X);
-  DST(1, 2) = DST(3, 3) = AVG3(K, J, I);
-  DST(1, 3)             = AVG3(L, K, J);
-}
-
-static void TM4(uint8_t* dst, const uint8_t* top) {
-  int x, y;
-  const uint8_t* const clip = clip1 + 255 - top[-1];
-  for (y = 0; y < 4; ++y) {
-    const uint8_t* const clip_table = clip + top[-2 - y];
-    for (x = 0; x < 4; ++x) {
-      dst[x] = clip_table[top[x]];
-    }
-    dst += BPS;
-  }
-}
-
-#undef DST
-#undef AVG3
-#undef AVG2
-
-// Left samples are top[-5 .. -2], top_left is top[-1], top are
-// located at top[0..3], and top right is top[4..7]
-static void Intra4Preds_C(uint8_t* dst, const uint8_t* top) {
-  DC4(I4DC4 + dst, top);
-  TM4(I4TM4 + dst, top);
-  VE4(I4VE4 + dst, top);
-  HE4(I4HE4 + dst, top);
-  RD4(I4RD4 + dst, top);
-  VR4(I4VR4 + dst, top);
-  LD4(I4LD4 + dst, top);
-  VL4(I4VL4 + dst, top);
-  HD4(I4HD4 + dst, top);
-  HU4(I4HU4 + dst, top);
-}
-
-//------------------------------------------------------------------------------
-// Metric
-
-#if !WEBP_NEON_OMIT_C_CODE
-static WEBP_INLINE int GetSSE(const uint8_t* a, const uint8_t* b,
-                              int w, int h) {
-  int count = 0;
-  int y, x;
-  for (y = 0; y < h; ++y) {
-    for (x = 0; x < w; ++x) {
-      const int diff = (int)a[x] - b[x];
-      count += diff * diff;
-    }
-    a += BPS;
-    b += BPS;
-  }
-  return count;
-}
-
-static int SSE16x16_C(const uint8_t* a, const uint8_t* b) {
-  return GetSSE(a, b, 16, 16);
-}
-static int SSE16x8_C(const uint8_t* a, const uint8_t* b) {
-  return GetSSE(a, b, 16, 8);
-}
-static int SSE8x8_C(const uint8_t* a, const uint8_t* b) {
-  return GetSSE(a, b, 8, 8);
-}
-static int SSE4x4_C(const uint8_t* a, const uint8_t* b) {
-  return GetSSE(a, b, 4, 4);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-static void Mean16x4_C(const uint8_t* ref, uint32_t dc[4]) {
-  int k, x, y;
-  for (k = 0; k < 4; ++k) {
-    uint32_t avg = 0;
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 4; ++x) {
-        avg += ref[x + y * BPS];
-      }
-    }
-    dc[k] = avg;
-    ref += 4;   // go to next 4x4 block.
-  }
-}
-
-//------------------------------------------------------------------------------
-// Texture distortion
-//
-// We try to match the spectral content (weighted) between source and
-// reconstructed samples.
-
-#if !WEBP_NEON_OMIT_C_CODE
-// Hadamard transform
-// Returns the weighted sum of the absolute value of transformed coefficients.
-// w[] contains a row-major 4 by 4 symmetric matrix.
-static int TTransform(const uint8_t* in, const uint16_t* w) {
-  int sum = 0;
-  int tmp[16];
-  int i;
-  // horizontal pass
-  for (i = 0; i < 4; ++i, in += BPS) {
-    const int a0 = in[0] + in[2];
-    const int a1 = in[1] + in[3];
-    const int a2 = in[1] - in[3];
-    const int a3 = in[0] - in[2];
-    tmp[0 + i * 4] = a0 + a1;
-    tmp[1 + i * 4] = a3 + a2;
-    tmp[2 + i * 4] = a3 - a2;
-    tmp[3 + i * 4] = a0 - a1;
-  }
-  // vertical pass
-  for (i = 0; i < 4; ++i, ++w) {
-    const int a0 = tmp[0 + i] + tmp[8 + i];
-    const int a1 = tmp[4 + i] + tmp[12+ i];
-    const int a2 = tmp[4 + i] - tmp[12+ i];
-    const int a3 = tmp[0 + i] - tmp[8 + i];
-    const int b0 = a0 + a1;
-    const int b1 = a3 + a2;
-    const int b2 = a3 - a2;
-    const int b3 = a0 - a1;
-
-    sum += w[ 0] * abs(b0);
-    sum += w[ 4] * abs(b1);
-    sum += w[ 8] * abs(b2);
-    sum += w[12] * abs(b3);
-  }
-  return sum;
-}
-
-static int Disto4x4_C(const uint8_t* const a, const uint8_t* const b,
-                      const uint16_t* const w) {
-  const int sum1 = TTransform(a, w);
-  const int sum2 = TTransform(b, w);
-  return abs(sum2 - sum1) >> 5;
-}
-
-static int Disto16x16_C(const uint8_t* const a, const uint8_t* const b,
-                        const uint16_t* const w) {
-  int D = 0;
-  int x, y;
-  for (y = 0; y < 16 * BPS; y += 4 * BPS) {
-    for (x = 0; x < 16; x += 4) {
-      D += Disto4x4_C(a + x + y, b + x + y, w);
-    }
-  }
-  return D;
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-//------------------------------------------------------------------------------
-// Quantization
-//
-
-static const uint8_t kZigzag[16] = {
-  0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15
-};
-
-// Simple quantization
-static int QuantizeBlock_C(int16_t in[16], int16_t out[16],
-                           const VP8Matrix* const mtx) {
-  int last = -1;
-  int n;
-  for (n = 0; n < 16; ++n) {
-    const int j = kZigzag[n];
-    const int sign = (in[j] < 0);
-    const uint32_t coeff = (sign ? -in[j] : in[j]) + mtx->sharpen_[j];
-    if (coeff > mtx->zthresh_[j]) {
-      const uint32_t Q = mtx->q_[j];
-      const uint32_t iQ = mtx->iq_[j];
-      const uint32_t B = mtx->bias_[j];
-      int level = QUANTDIV(coeff, iQ, B);
-      if (level > MAX_LEVEL) level = MAX_LEVEL;
-      if (sign) level = -level;
-      in[j] = level * (int)Q;
-      out[n] = level;
-      if (level) last = n;
-    } else {
-      out[n] = 0;
-      in[j] = 0;
-    }
-  }
-  return (last >= 0);
-}
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-static int Quantize2Blocks_C(int16_t in[32], int16_t out[32],
-                             const VP8Matrix* const mtx) {
-  int nz;
-  nz  = VP8EncQuantizeBlock(in + 0 * 16, out + 0 * 16, mtx) << 0;
-  nz |= VP8EncQuantizeBlock(in + 1 * 16, out + 1 * 16, mtx) << 1;
-  return nz;
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-
-//------------------------------------------------------------------------------
-// Block copy
-
-static WEBP_INLINE void Copy(const uint8_t* src, uint8_t* dst, int w, int h) {
-  int y;
-  for (y = 0; y < h; ++y) {
-    memcpy(dst, src, w);
-    src += BPS;
-    dst += BPS;
-  }
-}
-
-static void Copy4x4_C(const uint8_t* src, uint8_t* dst) {
-  Copy(src, dst, 4, 4);
-}
-
-static void Copy16x8_C(const uint8_t* src, uint8_t* dst) {
-  Copy(src, dst, 16, 8);
-}
-
-//------------------------------------------------------------------------------
-// Initialization
-
-// Speed-critical function pointers. We have to initialize them to the default
-// implementations within VP8EncDspInit().
-VP8CHisto VP8CollectHistogram;
-VP8Idct VP8ITransform;
-VP8Fdct VP8FTransform;
-VP8Fdct VP8FTransform2;
-VP8WHT VP8FTransformWHT;
-VP8Intra4Preds VP8EncPredLuma4;
-VP8IntraPreds VP8EncPredLuma16;
-VP8IntraPreds VP8EncPredChroma8;
-VP8Metric VP8SSE16x16;
-VP8Metric VP8SSE8x8;
-VP8Metric VP8SSE16x8;
-VP8Metric VP8SSE4x4;
-VP8WMetric VP8TDisto4x4;
-VP8WMetric VP8TDisto16x16;
-VP8MeanMetric VP8Mean16x4;
-VP8QuantizeBlock VP8EncQuantizeBlock;
-VP8Quantize2Blocks VP8EncQuantize2Blocks;
-VP8QuantizeBlockWHT VP8EncQuantizeBlockWHT;
-VP8BlockCopy VP8Copy4x4;
-VP8BlockCopy VP8Copy16x8;
-
-extern void VP8EncDspInitSSE2(void);
-extern void VP8EncDspInitSSE41(void);
-extern void VP8EncDspInitNEON(void);
-extern void VP8EncDspInitMIPS32(void);
-extern void VP8EncDspInitMIPSdspR2(void);
-extern void VP8EncDspInitMSA(void);
-
-WEBP_DSP_INIT_FUNC(VP8EncDspInit) {
-  VP8DspInit();  // common inverse transforms
-  InitTables();
-
-  // default C implementations
-#if !WEBP_NEON_OMIT_C_CODE
-  VP8ITransform = ITransform_C;
-  VP8FTransform = FTransform_C;
-  VP8FTransformWHT = FTransformWHT_C;
-  VP8TDisto4x4 = Disto4x4_C;
-  VP8TDisto16x16 = Disto16x16_C;
-  VP8CollectHistogram = CollectHistogram_C;
-  VP8SSE16x16 = SSE16x16_C;
-  VP8SSE16x8 = SSE16x8_C;
-  VP8SSE8x8 = SSE8x8_C;
-  VP8SSE4x4 = SSE4x4_C;
-#endif
-
-#if !WEBP_NEON_OMIT_C_CODE || WEBP_NEON_WORK_AROUND_GCC
-  VP8EncQuantizeBlock = QuantizeBlock_C;
-  VP8EncQuantize2Blocks = Quantize2Blocks_C;
-#endif
-
-  VP8FTransform2 = FTransform2_C;
-  VP8EncPredLuma4 = Intra4Preds_C;
-  VP8EncPredLuma16 = Intra16Preds_C;
-  VP8EncPredChroma8 = IntraChromaPreds_C;
-  VP8Mean16x4 = Mean16x4_C;
-  VP8EncQuantizeBlockWHT = QuantizeBlock_C;
-  VP8Copy4x4 = Copy4x4_C;
-  VP8Copy16x8 = Copy16x8_C;
-
-  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      VP8EncDspInitSSE2();
-#if defined(WEBP_USE_SSE41)
-      if (VP8GetCPUInfo(kSSE4_1)) {
-        VP8EncDspInitSSE41();
-      }
-#endif
-    }
-#endif
-#if defined(WEBP_USE_MIPS32)
-    if (VP8GetCPUInfo(kMIPS32)) {
-      VP8EncDspInitMIPS32();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      VP8EncDspInitMIPSdspR2();
-    }
-#endif
-#if defined(WEBP_USE_MSA)
-    if (VP8GetCPUInfo(kMSA)) {
-      VP8EncDspInitMSA();
-    }
-#endif
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    VP8EncDspInitNEON();
-  }
-#endif
-
-  assert(VP8ITransform != NULL);
-  assert(VP8FTransform != NULL);
-  assert(VP8FTransformWHT != NULL);
-  assert(VP8TDisto4x4 != NULL);
-  assert(VP8TDisto16x16 != NULL);
-  assert(VP8CollectHistogram != NULL);
-  assert(VP8SSE16x16 != NULL);
-  assert(VP8SSE16x8 != NULL);
-  assert(VP8SSE8x8 != NULL);
-  assert(VP8SSE4x4 != NULL);
-  assert(VP8EncQuantizeBlock != NULL);
-  assert(VP8EncQuantize2Blocks != NULL);
-  assert(VP8FTransform2 != NULL);
-  assert(VP8EncPredLuma4 != NULL);
-  assert(VP8EncPredLuma16 != NULL);
-  assert(VP8EncPredChroma8 != NULL);
-  assert(VP8Mean16x4 != NULL);
-  assert(VP8EncQuantizeBlockWHT != NULL);
-  assert(VP8Copy4x4 != NULL);
-  assert(VP8Copy16x8 != NULL);
-}
diff --git a/ios/Pods/libwebp/src/dsp/enc_mips32.c b/ios/Pods/libwebp/src/dsp/enc_mips32.c
deleted file mode 100644
index 618f0fc..0000000
--- a/ios/Pods/libwebp/src/dsp/enc_mips32.c
+++ /dev/null
@@ -1,677 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS version of speed-critical encoding functions.
-//
-// Author(s): Djordje Pesut    (djordje.pesut@imgtec.com)
-//            Jovan Zelincevic (jovan.zelincevic@imgtec.com)
-//            Slobodan Prijic  (slobodan.prijic@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS32)
-
-#include "src/dsp/mips_macro.h"
-#include "src/enc/vp8i_enc.h"
-#include "src/enc/cost_enc.h"
-
-static const int kC1 = 20091 + (1 << 16);
-static const int kC2 = 35468;
-
-// macro for one vertical pass in ITransformOne
-// MUL macro inlined
-// temp0..temp15 holds tmp[0]..tmp[15]
-// A..D - offsets in bytes to load from in buffer
-// TEMP0..TEMP3 - registers for corresponding tmp elements
-// TEMP4..TEMP5 - temporary registers
-#define VERTICAL_PASS(A, B, C, D, TEMP4, TEMP0, TEMP1, TEMP2, TEMP3)        \
-  "lh      %[temp16],      " #A "(%[temp20])                 \n\t"          \
-  "lh      %[temp18],      " #B "(%[temp20])                 \n\t"          \
-  "lh      %[temp17],      " #C "(%[temp20])                 \n\t"          \
-  "lh      %[temp19],      " #D "(%[temp20])                 \n\t"          \
-  "addu    %[" #TEMP4 "],    %[temp16],      %[temp18]       \n\t"          \
-  "subu    %[temp16],      %[temp16],      %[temp18]         \n\t"          \
-  "mul     %[" #TEMP0 "],    %[temp17],      %[kC2]          \n\t"          \
-  "mul     %[temp18],      %[temp19],      %[kC1]            \n\t"          \
-  "mul     %[temp17],      %[temp17],      %[kC1]            \n\t"          \
-  "mul     %[temp19],      %[temp19],      %[kC2]            \n\t"          \
-  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    16            \n\n"          \
-  "sra     %[temp18],      %[temp18],      16                \n\n"          \
-  "sra     %[temp17],      %[temp17],      16                \n\n"          \
-  "sra     %[temp19],      %[temp19],      16                \n\n"          \
-  "subu    %[" #TEMP2 "],    %[" #TEMP0 "],    %[temp18]     \n\t"          \
-  "addu    %[" #TEMP3 "],    %[temp17],      %[temp19]       \n\t"          \
-  "addu    %[" #TEMP0 "],    %[" #TEMP4 "],    %[" #TEMP3 "] \n\t"          \
-  "addu    %[" #TEMP1 "],    %[temp16],      %[" #TEMP2 "]   \n\t"          \
-  "subu    %[" #TEMP2 "],    %[temp16],      %[" #TEMP2 "]   \n\t"          \
-  "subu    %[" #TEMP3 "],    %[" #TEMP4 "],    %[" #TEMP3 "] \n\t"
-
-// macro for one horizontal pass in ITransformOne
-// MUL and STORE macros inlined
-// a = clip_8b(a) is replaced with: a = max(a, 0); a = min(a, 255)
-// temp0..temp15 holds tmp[0]..tmp[15]
-// A - offset in bytes to load from ref and store to dst buffer
-// TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements
-#define HORIZONTAL_PASS(A, TEMP0, TEMP4, TEMP8, TEMP12)                       \
-  "addiu   %[" #TEMP0 "],    %[" #TEMP0 "],    4               \n\t"          \
-  "addu    %[temp16],      %[" #TEMP0 "],    %[" #TEMP8 "]     \n\t"          \
-  "subu    %[temp17],      %[" #TEMP0 "],    %[" #TEMP8 "]     \n\t"          \
-  "mul     %[" #TEMP0 "],    %[" #TEMP4 "],    %[kC2]          \n\t"          \
-  "mul     %[" #TEMP8 "],    %[" #TEMP12 "],   %[kC1]          \n\t"          \
-  "mul     %[" #TEMP4 "],    %[" #TEMP4 "],    %[kC1]          \n\t"          \
-  "mul     %[" #TEMP12 "],   %[" #TEMP12 "],   %[kC2]          \n\t"          \
-  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    16              \n\t"          \
-  "sra     %[" #TEMP8 "],    %[" #TEMP8 "],    16              \n\t"          \
-  "sra     %[" #TEMP4 "],    %[" #TEMP4 "],    16              \n\t"          \
-  "sra     %[" #TEMP12 "],   %[" #TEMP12 "],   16              \n\t"          \
-  "subu    %[temp18],      %[" #TEMP0 "],    %[" #TEMP8 "]     \n\t"          \
-  "addu    %[temp19],      %[" #TEMP4 "],    %[" #TEMP12 "]    \n\t"          \
-  "addu    %[" #TEMP0 "],    %[temp16],      %[temp19]         \n\t"          \
-  "addu    %[" #TEMP4 "],    %[temp17],      %[temp18]         \n\t"          \
-  "subu    %[" #TEMP8 "],    %[temp17],      %[temp18]         \n\t"          \
-  "subu    %[" #TEMP12 "],   %[temp16],      %[temp19]         \n\t"          \
-  "lw      %[temp20],      0(%[args])                          \n\t"          \
-  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    3               \n\t"          \
-  "sra     %[" #TEMP4 "],    %[" #TEMP4 "],    3               \n\t"          \
-  "sra     %[" #TEMP8 "],    %[" #TEMP8 "],    3               \n\t"          \
-  "sra     %[" #TEMP12 "],   %[" #TEMP12 "],   3               \n\t"          \
-  "lbu     %[temp16],      0+" XSTR(BPS) "*" #A "(%[temp20])   \n\t"          \
-  "lbu     %[temp17],      1+" XSTR(BPS) "*" #A "(%[temp20])   \n\t"          \
-  "lbu     %[temp18],      2+" XSTR(BPS) "*" #A "(%[temp20])   \n\t"          \
-  "lbu     %[temp19],      3+" XSTR(BPS) "*" #A "(%[temp20])   \n\t"          \
-  "addu    %[" #TEMP0 "],    %[temp16],      %[" #TEMP0 "]     \n\t"          \
-  "addu    %[" #TEMP4 "],    %[temp17],      %[" #TEMP4 "]     \n\t"          \
-  "addu    %[" #TEMP8 "],    %[temp18],      %[" #TEMP8 "]     \n\t"          \
-  "addu    %[" #TEMP12 "],   %[temp19],      %[" #TEMP12 "]    \n\t"          \
-  "slt     %[temp16],      %[" #TEMP0 "],    $zero             \n\t"          \
-  "slt     %[temp17],      %[" #TEMP4 "],    $zero             \n\t"          \
-  "slt     %[temp18],      %[" #TEMP8 "],    $zero             \n\t"          \
-  "slt     %[temp19],      %[" #TEMP12 "],   $zero             \n\t"          \
-  "movn    %[" #TEMP0 "],    $zero,          %[temp16]         \n\t"          \
-  "movn    %[" #TEMP4 "],    $zero,          %[temp17]         \n\t"          \
-  "movn    %[" #TEMP8 "],    $zero,          %[temp18]         \n\t"          \
-  "movn    %[" #TEMP12 "],   $zero,          %[temp19]         \n\t"          \
-  "addiu   %[temp20],      $zero,          255                 \n\t"          \
-  "slt     %[temp16],      %[" #TEMP0 "],    %[temp20]         \n\t"          \
-  "slt     %[temp17],      %[" #TEMP4 "],    %[temp20]         \n\t"          \
-  "slt     %[temp18],      %[" #TEMP8 "],    %[temp20]         \n\t"          \
-  "slt     %[temp19],      %[" #TEMP12 "],   %[temp20]         \n\t"          \
-  "movz    %[" #TEMP0 "],    %[temp20],      %[temp16]         \n\t"          \
-  "movz    %[" #TEMP4 "],    %[temp20],      %[temp17]         \n\t"          \
-  "lw      %[temp16],      8(%[args])                          \n\t"          \
-  "movz    %[" #TEMP8 "],    %[temp20],      %[temp18]         \n\t"          \
-  "movz    %[" #TEMP12 "],   %[temp20],      %[temp19]         \n\t"          \
-  "sb      %[" #TEMP0 "],    0+" XSTR(BPS) "*" #A "(%[temp16]) \n\t"          \
-  "sb      %[" #TEMP4 "],    1+" XSTR(BPS) "*" #A "(%[temp16]) \n\t"          \
-  "sb      %[" #TEMP8 "],    2+" XSTR(BPS) "*" #A "(%[temp16]) \n\t"          \
-  "sb      %[" #TEMP12 "],   3+" XSTR(BPS) "*" #A "(%[temp16]) \n\t"
-
-// Does one or two inverse transforms.
-static WEBP_INLINE void ITransformOne_MIPS32(const uint8_t* ref,
-                                             const int16_t* in,
-                                             uint8_t* dst) {
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6;
-  int temp7, temp8, temp9, temp10, temp11, temp12, temp13;
-  int temp14, temp15, temp16, temp17, temp18, temp19, temp20;
-  const int* args[3] = {(const int*)ref, (const int*)in, (const int*)dst};
-
-  __asm__ volatile(
-    "lw      %[temp20],      4(%[args])                      \n\t"
-    VERTICAL_PASS(0, 16,  8, 24, temp4,  temp0,  temp1,  temp2,  temp3)
-    VERTICAL_PASS(2, 18, 10, 26, temp8,  temp4,  temp5,  temp6,  temp7)
-    VERTICAL_PASS(4, 20, 12, 28, temp12, temp8,  temp9,  temp10, temp11)
-    VERTICAL_PASS(6, 22, 14, 30, temp20, temp12, temp13, temp14, temp15)
-
-    HORIZONTAL_PASS(0, temp0, temp4, temp8,  temp12)
-    HORIZONTAL_PASS(1, temp1, temp5, temp9,  temp13)
-    HORIZONTAL_PASS(2, temp2, temp6, temp10, temp14)
-    HORIZONTAL_PASS(3, temp3, temp7, temp11, temp15)
-
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11),
-      [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), [temp14]"=&r"(temp14),
-      [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), [temp17]"=&r"(temp17),
-      [temp18]"=&r"(temp18), [temp19]"=&r"(temp19), [temp20]"=&r"(temp20)
-    : [args]"r"(args), [kC1]"r"(kC1), [kC2]"r"(kC2)
-    : "memory", "hi", "lo"
-  );
-}
-
-static void ITransform_MIPS32(const uint8_t* ref, const int16_t* in,
-                              uint8_t* dst, int do_two) {
-  ITransformOne_MIPS32(ref, in, dst);
-  if (do_two) {
-    ITransformOne_MIPS32(ref + 4, in + 16, dst + 4);
-  }
-}
-
-#undef VERTICAL_PASS
-#undef HORIZONTAL_PASS
-
-// macro for one pass through for loop in QuantizeBlock
-// QUANTDIV macro inlined
-// J - offset in bytes (kZigzag[n] * 2)
-// K - offset in bytes (kZigzag[n] * 4)
-// N - offset in bytes (n * 2)
-#define QUANTIZE_ONE(J, K, N)                                               \
-  "lh           %[temp0],       " #J "(%[ppin])                     \n\t"   \
-  "lhu          %[temp1],       " #J "(%[ppsharpen])                \n\t"   \
-  "lw           %[temp2],       " #K "(%[ppzthresh])                \n\t"   \
-  "sra          %[sign],        %[temp0],           15              \n\t"   \
-  "xor          %[coeff],       %[temp0],           %[sign]         \n\t"   \
-  "subu         %[coeff],       %[coeff],           %[sign]         \n\t"   \
-  "addu         %[coeff],       %[coeff],           %[temp1]        \n\t"   \
-  "slt          %[temp4],       %[temp2],           %[coeff]        \n\t"   \
-  "addiu        %[temp5],       $zero,              0               \n\t"   \
-  "addiu        %[level],       $zero,              0               \n\t"   \
-  "beqz         %[temp4],       2f                                  \n\t"   \
-  "lhu          %[temp1],       " #J "(%[ppiq])                     \n\t"   \
-  "lw           %[temp2],       " #K "(%[ppbias])                   \n\t"   \
-  "lhu          %[temp3],       " #J "(%[ppq])                      \n\t"   \
-  "mul          %[level],       %[coeff],           %[temp1]        \n\t"   \
-  "addu         %[level],       %[level],           %[temp2]        \n\t"   \
-  "sra          %[level],       %[level],           17              \n\t"   \
-  "slt          %[temp4],       %[max_level],       %[level]        \n\t"   \
-  "movn         %[level],       %[max_level],       %[temp4]        \n\t"   \
-  "xor          %[level],       %[level],           %[sign]         \n\t"   \
-  "subu         %[level],       %[level],           %[sign]         \n\t"   \
-  "mul          %[temp5],       %[level],           %[temp3]        \n\t"   \
-"2:                                                                 \n\t"   \
-  "sh           %[temp5],       " #J "(%[ppin])                     \n\t"   \
-  "sh           %[level],       " #N "(%[pout])                     \n\t"
-
-static int QuantizeBlock_MIPS32(int16_t in[16], int16_t out[16],
-                                const VP8Matrix* const mtx) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  int sign, coeff, level, i;
-  int max_level = MAX_LEVEL;
-
-  int16_t* ppin             = &in[0];
-  int16_t* pout             = &out[0];
-  const uint16_t* ppsharpen = &mtx->sharpen_[0];
-  const uint32_t* ppzthresh = &mtx->zthresh_[0];
-  const uint16_t* ppq       = &mtx->q_[0];
-  const uint16_t* ppiq      = &mtx->iq_[0];
-  const uint32_t* ppbias    = &mtx->bias_[0];
-
-  __asm__ volatile(
-    QUANTIZE_ONE( 0,  0,  0)
-    QUANTIZE_ONE( 2,  4,  2)
-    QUANTIZE_ONE( 8, 16,  4)
-    QUANTIZE_ONE(16, 32,  6)
-    QUANTIZE_ONE(10, 20,  8)
-    QUANTIZE_ONE( 4,  8, 10)
-    QUANTIZE_ONE( 6, 12, 12)
-    QUANTIZE_ONE(12, 24, 14)
-    QUANTIZE_ONE(18, 36, 16)
-    QUANTIZE_ONE(24, 48, 18)
-    QUANTIZE_ONE(26, 52, 20)
-    QUANTIZE_ONE(20, 40, 22)
-    QUANTIZE_ONE(14, 28, 24)
-    QUANTIZE_ONE(22, 44, 26)
-    QUANTIZE_ONE(28, 56, 28)
-    QUANTIZE_ONE(30, 60, 30)
-
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),
-      [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [sign]"=&r"(sign), [coeff]"=&r"(coeff),
-      [level]"=&r"(level)
-    : [pout]"r"(pout), [ppin]"r"(ppin),
-      [ppiq]"r"(ppiq), [max_level]"r"(max_level),
-      [ppbias]"r"(ppbias), [ppzthresh]"r"(ppzthresh),
-      [ppsharpen]"r"(ppsharpen), [ppq]"r"(ppq)
-    : "memory", "hi", "lo"
-  );
-
-  // moved out from macro to increase possibility for earlier breaking
-  for (i = 15; i >= 0; i--) {
-    if (out[i]) return 1;
-  }
-  return 0;
-}
-
-static int Quantize2Blocks_MIPS32(int16_t in[32], int16_t out[32],
-                                  const VP8Matrix* const mtx) {
-  int nz;
-  nz  = QuantizeBlock_MIPS32(in + 0 * 16, out + 0 * 16, mtx) << 0;
-  nz |= QuantizeBlock_MIPS32(in + 1 * 16, out + 1 * 16, mtx) << 1;
-  return nz;
-}
-
-#undef QUANTIZE_ONE
-
-// macro for one horizontal pass in Disto4x4 (TTransform)
-// two calls of function TTransform are merged into single one
-// A - offset in bytes to load from a and b buffers
-// E..H - offsets in bytes to store first results to tmp buffer
-// E1..H1 - offsets in bytes to store second results to tmp buffer
-#define HORIZONTAL_PASS(A, E, F, G, H, E1, F1, G1, H1)                  \
-  "lbu    %[temp0],  0+" XSTR(BPS) "*" #A "(%[a])  \n\t"                \
-  "lbu    %[temp1],  1+" XSTR(BPS) "*" #A "(%[a])  \n\t"                \
-  "lbu    %[temp2],  2+" XSTR(BPS) "*" #A "(%[a])  \n\t"                \
-  "lbu    %[temp3],  3+" XSTR(BPS) "*" #A "(%[a])  \n\t"                \
-  "lbu    %[temp4],  0+" XSTR(BPS) "*" #A "(%[b])  \n\t"                \
-  "lbu    %[temp5],  1+" XSTR(BPS) "*" #A "(%[b])  \n\t"                \
-  "lbu    %[temp6],  2+" XSTR(BPS) "*" #A "(%[b])  \n\t"                \
-  "lbu    %[temp7],  3+" XSTR(BPS) "*" #A "(%[b])  \n\t"                \
-  "addu   %[temp8],  %[temp0],    %[temp2]         \n\t"                \
-  "subu   %[temp0],  %[temp0],    %[temp2]         \n\t"                \
-  "addu   %[temp2],  %[temp1],    %[temp3]         \n\t"                \
-  "subu   %[temp1],  %[temp1],    %[temp3]         \n\t"                \
-  "addu   %[temp3],  %[temp4],    %[temp6]         \n\t"                \
-  "subu   %[temp4],  %[temp4],    %[temp6]         \n\t"                \
-  "addu   %[temp6],  %[temp5],    %[temp7]         \n\t"                \
-  "subu   %[temp5],  %[temp5],    %[temp7]         \n\t"                \
-  "addu   %[temp7],  %[temp8],    %[temp2]         \n\t"                \
-  "subu   %[temp2],  %[temp8],    %[temp2]         \n\t"                \
-  "addu   %[temp8],  %[temp0],    %[temp1]         \n\t"                \
-  "subu   %[temp0],  %[temp0],    %[temp1]         \n\t"                \
-  "addu   %[temp1],  %[temp3],    %[temp6]         \n\t"                \
-  "subu   %[temp3],  %[temp3],    %[temp6]         \n\t"                \
-  "addu   %[temp6],  %[temp4],    %[temp5]         \n\t"                \
-  "subu   %[temp4],  %[temp4],    %[temp5]         \n\t"                \
-  "sw     %[temp7],  " #E "(%[tmp])                \n\t"                \
-  "sw     %[temp2],  " #H "(%[tmp])                \n\t"                \
-  "sw     %[temp8],  " #F "(%[tmp])                \n\t"                \
-  "sw     %[temp0],  " #G "(%[tmp])                \n\t"                \
-  "sw     %[temp1],  " #E1 "(%[tmp])               \n\t"                \
-  "sw     %[temp3],  " #H1 "(%[tmp])               \n\t"                \
-  "sw     %[temp6],  " #F1 "(%[tmp])               \n\t"                \
-  "sw     %[temp4],  " #G1 "(%[tmp])               \n\t"
-
-// macro for one vertical pass in Disto4x4 (TTransform)
-// two calls of function TTransform are merged into single one
-// since only one accu is available in mips32r1 instruction set
-//   first is done second call of function TTransform and after
-//   that first one.
-//   const int sum1 = TTransform(a, w);
-//   const int sum2 = TTransform(b, w);
-//   return abs(sum2 - sum1) >> 5;
-//   (sum2 - sum1) is calculated with madds (sub2) and msubs (sub1)
-// A..D - offsets in bytes to load first results from tmp buffer
-// A1..D1 - offsets in bytes to load second results from tmp buffer
-// E..H - offsets in bytes to load from w buffer
-#define VERTICAL_PASS(A, B, C, D, A1, B1, C1, D1, E, F, G, H)     \
-  "lw     %[temp0],  " #A1 "(%[tmp])         \n\t"                \
-  "lw     %[temp1],  " #C1 "(%[tmp])         \n\t"                \
-  "lw     %[temp2],  " #B1 "(%[tmp])         \n\t"                \
-  "lw     %[temp3],  " #D1 "(%[tmp])         \n\t"                \
-  "addu   %[temp8],  %[temp0],    %[temp1]   \n\t"                \
-  "subu   %[temp0],  %[temp0],    %[temp1]   \n\t"                \
-  "addu   %[temp1],  %[temp2],    %[temp3]   \n\t"                \
-  "subu   %[temp2],  %[temp2],    %[temp3]   \n\t"                \
-  "addu   %[temp3],  %[temp8],    %[temp1]   \n\t"                \
-  "subu   %[temp8],  %[temp8],    %[temp1]   \n\t"                \
-  "addu   %[temp1],  %[temp0],    %[temp2]   \n\t"                \
-  "subu   %[temp0],  %[temp0],    %[temp2]   \n\t"                \
-  "sra    %[temp4],  %[temp3],    31         \n\t"                \
-  "sra    %[temp5],  %[temp1],    31         \n\t"                \
-  "sra    %[temp6],  %[temp0],    31         \n\t"                \
-  "sra    %[temp7],  %[temp8],    31         \n\t"                \
-  "xor    %[temp3],  %[temp3],    %[temp4]   \n\t"                \
-  "xor    %[temp1],  %[temp1],    %[temp5]   \n\t"                \
-  "xor    %[temp0],  %[temp0],    %[temp6]   \n\t"                \
-  "xor    %[temp8],  %[temp8],    %[temp7]   \n\t"                \
-  "subu   %[temp3],  %[temp3],    %[temp4]   \n\t"                \
-  "subu   %[temp1],  %[temp1],    %[temp5]   \n\t"                \
-  "subu   %[temp0],  %[temp0],    %[temp6]   \n\t"                \
-  "subu   %[temp8],  %[temp8],    %[temp7]   \n\t"                \
-  "lhu    %[temp4],  " #E "(%[w])            \n\t"                \
-  "lhu    %[temp5],  " #F "(%[w])            \n\t"                \
-  "lhu    %[temp6],  " #G "(%[w])            \n\t"                \
-  "lhu    %[temp7],  " #H "(%[w])            \n\t"                \
-  "madd   %[temp4],  %[temp3]                \n\t"                \
-  "madd   %[temp5],  %[temp1]                \n\t"                \
-  "madd   %[temp6],  %[temp0]                \n\t"                \
-  "madd   %[temp7],  %[temp8]                \n\t"                \
-  "lw     %[temp0],  " #A "(%[tmp])          \n\t"                \
-  "lw     %[temp1],  " #C "(%[tmp])          \n\t"                \
-  "lw     %[temp2],  " #B "(%[tmp])          \n\t"                \
-  "lw     %[temp3],  " #D "(%[tmp])          \n\t"                \
-  "addu   %[temp8],  %[temp0],    %[temp1]   \n\t"                \
-  "subu   %[temp0],  %[temp0],    %[temp1]   \n\t"                \
-  "addu   %[temp1],  %[temp2],    %[temp3]   \n\t"                \
-  "subu   %[temp2],  %[temp2],    %[temp3]   \n\t"                \
-  "addu   %[temp3],  %[temp8],    %[temp1]   \n\t"                \
-  "subu   %[temp1],  %[temp8],    %[temp1]   \n\t"                \
-  "addu   %[temp8],  %[temp0],    %[temp2]   \n\t"                \
-  "subu   %[temp0],  %[temp0],    %[temp2]   \n\t"                \
-  "sra    %[temp2],  %[temp3],    31         \n\t"                \
-  "xor    %[temp3],  %[temp3],    %[temp2]   \n\t"                \
-  "subu   %[temp3],  %[temp3],    %[temp2]   \n\t"                \
-  "msub   %[temp4],  %[temp3]                \n\t"                \
-  "sra    %[temp2],  %[temp8],    31         \n\t"                \
-  "sra    %[temp3],  %[temp0],    31         \n\t"                \
-  "sra    %[temp4],  %[temp1],    31         \n\t"                \
-  "xor    %[temp8],  %[temp8],    %[temp2]   \n\t"                \
-  "xor    %[temp0],  %[temp0],    %[temp3]   \n\t"                \
-  "xor    %[temp1],  %[temp1],    %[temp4]   \n\t"                \
-  "subu   %[temp8],  %[temp8],    %[temp2]   \n\t"                \
-  "subu   %[temp0],  %[temp0],    %[temp3]   \n\t"                \
-  "subu   %[temp1],  %[temp1],    %[temp4]   \n\t"                \
-  "msub   %[temp5],  %[temp8]                \n\t"                \
-  "msub   %[temp6],  %[temp0]                \n\t"                \
-  "msub   %[temp7],  %[temp1]                \n\t"
-
-static int Disto4x4_MIPS32(const uint8_t* const a, const uint8_t* const b,
-                           const uint16_t* const w) {
-  int tmp[32];
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
-
-  __asm__ volatile(
-    HORIZONTAL_PASS(0,   0,  4,  8, 12,    64,  68,  72,  76)
-    HORIZONTAL_PASS(1,  16, 20, 24, 28,    80,  84,  88,  92)
-    HORIZONTAL_PASS(2,  32, 36, 40, 44,    96, 100, 104, 108)
-    HORIZONTAL_PASS(3,  48, 52, 56, 60,   112, 116, 120, 124)
-    "mthi   $zero                             \n\t"
-    "mtlo   $zero                             \n\t"
-    VERTICAL_PASS( 0, 16, 32, 48,     64, 80,  96, 112,   0,  8, 16, 24)
-    VERTICAL_PASS( 4, 20, 36, 52,     68, 84, 100, 116,   2, 10, 18, 26)
-    VERTICAL_PASS( 8, 24, 40, 56,     72, 88, 104, 120,   4, 12, 20, 28)
-    VERTICAL_PASS(12, 28, 44, 60,     76, 92, 108, 124,   6, 14, 22, 30)
-    "mflo   %[temp0]                          \n\t"
-    "sra    %[temp1],  %[temp0],  31          \n\t"
-    "xor    %[temp0],  %[temp0],  %[temp1]    \n\t"
-    "subu   %[temp0],  %[temp0],  %[temp1]    \n\t"
-    "sra    %[temp0],  %[temp0],  5           \n\t"
-
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8)
-    : [a]"r"(a), [b]"r"(b), [w]"r"(w), [tmp]"r"(tmp)
-    : "memory", "hi", "lo"
-  );
-
-  return temp0;
-}
-
-#undef VERTICAL_PASS
-#undef HORIZONTAL_PASS
-
-static int Disto16x16_MIPS32(const uint8_t* const a, const uint8_t* const b,
-                             const uint16_t* const w) {
-  int D = 0;
-  int x, y;
-  for (y = 0; y < 16 * BPS; y += 4 * BPS) {
-    for (x = 0; x < 16; x += 4) {
-      D += Disto4x4_MIPS32(a + x + y, b + x + y, w);
-    }
-  }
-  return D;
-}
-
-// macro for one horizontal pass in FTransform
-// temp0..temp15 holds tmp[0]..tmp[15]
-// A - offset in bytes to load from src and ref buffers
-// TEMP0..TEMP3 - registers for corresponding tmp elements
-#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3)                  \
-  "lw     %[" #TEMP1 "],  0(%[args])                           \n\t"    \
-  "lw     %[" #TEMP2 "],  4(%[args])                           \n\t"    \
-  "lbu    %[temp16],    0+" XSTR(BPS) "*" #A "(%[" #TEMP1 "])  \n\t"    \
-  "lbu    %[temp17],    0+" XSTR(BPS) "*" #A "(%[" #TEMP2 "])  \n\t"    \
-  "lbu    %[temp18],    1+" XSTR(BPS) "*" #A "(%[" #TEMP1 "])  \n\t"    \
-  "lbu    %[temp19],    1+" XSTR(BPS) "*" #A "(%[" #TEMP2 "])  \n\t"    \
-  "subu   %[temp20],    %[temp16],    %[temp17]                \n\t"    \
-  "lbu    %[temp16],    2+" XSTR(BPS) "*" #A "(%[" #TEMP1 "])  \n\t"    \
-  "lbu    %[temp17],    2+" XSTR(BPS) "*" #A "(%[" #TEMP2 "])  \n\t"    \
-  "subu   %[" #TEMP0 "],  %[temp18],    %[temp19]              \n\t"    \
-  "lbu    %[temp18],    3+" XSTR(BPS) "*" #A "(%[" #TEMP1 "])  \n\t"    \
-  "lbu    %[temp19],    3+" XSTR(BPS) "*" #A "(%[" #TEMP2 "])  \n\t"    \
-  "subu   %[" #TEMP1 "],  %[temp16],    %[temp17]              \n\t"    \
-  "subu   %[" #TEMP2 "],  %[temp18],    %[temp19]              \n\t"    \
-  "addu   %[" #TEMP3 "],  %[temp20],    %[" #TEMP2 "]          \n\t"    \
-  "subu   %[" #TEMP2 "],  %[temp20],    %[" #TEMP2 "]          \n\t"    \
-  "addu   %[temp20],    %[" #TEMP0 "],  %[" #TEMP1 "]          \n\t"    \
-  "subu   %[" #TEMP0 "],  %[" #TEMP0 "],  %[" #TEMP1 "]        \n\t"    \
-  "mul    %[temp16],    %[" #TEMP2 "],  %[c5352]               \n\t"    \
-  "mul    %[temp17],    %[" #TEMP2 "],  %[c2217]               \n\t"    \
-  "mul    %[temp18],    %[" #TEMP0 "],  %[c5352]               \n\t"    \
-  "mul    %[temp19],    %[" #TEMP0 "],  %[c2217]               \n\t"    \
-  "addu   %[" #TEMP1 "],  %[" #TEMP3 "],  %[temp20]            \n\t"    \
-  "subu   %[temp20],    %[" #TEMP3 "],  %[temp20]              \n\t"    \
-  "sll    %[" #TEMP0 "],  %[" #TEMP1 "],  3                    \n\t"    \
-  "sll    %[" #TEMP2 "],  %[temp20],    3                      \n\t"    \
-  "addiu  %[temp16],    %[temp16],    1812                     \n\t"    \
-  "addiu  %[temp17],    %[temp17],    937                      \n\t"    \
-  "addu   %[temp16],    %[temp16],    %[temp19]                \n\t"    \
-  "subu   %[temp17],    %[temp17],    %[temp18]                \n\t"    \
-  "sra    %[" #TEMP1 "],  %[temp16],    9                      \n\t"    \
-  "sra    %[" #TEMP3 "],  %[temp17],    9                      \n\t"
-
-// macro for one vertical pass in FTransform
-// temp0..temp15 holds tmp[0]..tmp[15]
-// A..D - offsets in bytes to store to out buffer
-// TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements
-#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12)    \
-  "addu   %[temp16],    %[" #TEMP0 "],  %[" #TEMP12 "]   \n\t"    \
-  "subu   %[temp19],    %[" #TEMP0 "],  %[" #TEMP12 "]   \n\t"    \
-  "addu   %[temp17],    %[" #TEMP4 "],  %[" #TEMP8 "]    \n\t"    \
-  "subu   %[temp18],    %[" #TEMP4 "],  %[" #TEMP8 "]    \n\t"    \
-  "mul    %[" #TEMP8 "],  %[temp19],    %[c2217]         \n\t"    \
-  "mul    %[" #TEMP12 "], %[temp18],    %[c2217]         \n\t"    \
-  "mul    %[" #TEMP4 "],  %[temp19],    %[c5352]         \n\t"    \
-  "mul    %[temp18],    %[temp18],    %[c5352]           \n\t"    \
-  "addiu  %[temp16],    %[temp16],    7                  \n\t"    \
-  "addu   %[" #TEMP0 "],  %[temp16],    %[temp17]        \n\t"    \
-  "sra    %[" #TEMP0 "],  %[" #TEMP0 "],  4              \n\t"    \
-  "addu   %[" #TEMP12 "], %[" #TEMP12 "], %[" #TEMP4 "]  \n\t"    \
-  "subu   %[" #TEMP4 "],  %[temp16],    %[temp17]        \n\t"    \
-  "sra    %[" #TEMP4 "],  %[" #TEMP4 "],  4              \n\t"    \
-  "addiu  %[" #TEMP8 "],  %[" #TEMP8 "],  30000          \n\t"    \
-  "addiu  %[" #TEMP12 "], %[" #TEMP12 "], 12000          \n\t"    \
-  "addiu  %[" #TEMP8 "],  %[" #TEMP8 "],  21000          \n\t"    \
-  "subu   %[" #TEMP8 "],  %[" #TEMP8 "],  %[temp18]      \n\t"    \
-  "sra    %[" #TEMP12 "], %[" #TEMP12 "], 16             \n\t"    \
-  "sra    %[" #TEMP8 "],  %[" #TEMP8 "],  16             \n\t"    \
-  "addiu  %[temp16],    %[" #TEMP12 "], 1                \n\t"    \
-  "movn   %[" #TEMP12 "], %[temp16],    %[temp19]        \n\t"    \
-  "sh     %[" #TEMP0 "],  " #A "(%[temp20])              \n\t"    \
-  "sh     %[" #TEMP4 "],  " #C "(%[temp20])              \n\t"    \
-  "sh     %[" #TEMP8 "],  " #D "(%[temp20])              \n\t"    \
-  "sh     %[" #TEMP12 "], " #B "(%[temp20])              \n\t"
-
-static void FTransform_MIPS32(const uint8_t* src, const uint8_t* ref,
-                              int16_t* out) {
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
-  int temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16;
-  int temp17, temp18, temp19, temp20;
-  const int c2217 = 2217;
-  const int c5352 = 5352;
-  const int* const args[3] =
-      { (const int*)src, (const int*)ref, (const int*)out };
-
-  __asm__ volatile(
-    HORIZONTAL_PASS(0, temp0,  temp1,  temp2,  temp3)
-    HORIZONTAL_PASS(1, temp4,  temp5,  temp6,  temp7)
-    HORIZONTAL_PASS(2, temp8,  temp9,  temp10, temp11)
-    HORIZONTAL_PASS(3, temp12, temp13, temp14, temp15)
-    "lw   %[temp20],    8(%[args])                     \n\t"
-    VERTICAL_PASS(0,  8, 16, 24, temp0, temp4, temp8,  temp12)
-    VERTICAL_PASS(2, 10, 18, 26, temp1, temp5, temp9,  temp13)
-    VERTICAL_PASS(4, 12, 20, 28, temp2, temp6, temp10, temp14)
-    VERTICAL_PASS(6, 14, 22, 30, temp3, temp7, temp11, temp15)
-
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11),
-      [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), [temp14]"=&r"(temp14),
-      [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), [temp17]"=&r"(temp17),
-      [temp18]"=&r"(temp18), [temp19]"=&r"(temp19), [temp20]"=&r"(temp20)
-    : [args]"r"(args), [c2217]"r"(c2217), [c5352]"r"(c5352)
-    : "memory", "hi", "lo"
-  );
-}
-
-#undef VERTICAL_PASS
-#undef HORIZONTAL_PASS
-
-#if !defined(WORK_AROUND_GCC)
-
-#define GET_SSE_INNER(A, B, C, D)                               \
-  "lbu     %[temp0],    " #A "(%[a])                 \n\t"      \
-  "lbu     %[temp1],    " #A "(%[b])                 \n\t"      \
-  "lbu     %[temp2],    " #B "(%[a])                 \n\t"      \
-  "lbu     %[temp3],    " #B "(%[b])                 \n\t"      \
-  "lbu     %[temp4],    " #C "(%[a])                 \n\t"      \
-  "lbu     %[temp5],    " #C "(%[b])                 \n\t"      \
-  "lbu     %[temp6],    " #D "(%[a])                 \n\t"      \
-  "lbu     %[temp7],    " #D "(%[b])                 \n\t"      \
-  "subu    %[temp0],    %[temp0],     %[temp1]       \n\t"      \
-  "subu    %[temp2],    %[temp2],     %[temp3]       \n\t"      \
-  "subu    %[temp4],    %[temp4],     %[temp5]       \n\t"      \
-  "subu    %[temp6],    %[temp6],     %[temp7]       \n\t"      \
-  "madd    %[temp0],    %[temp0]                     \n\t"      \
-  "madd    %[temp2],    %[temp2]                     \n\t"      \
-  "madd    %[temp4],    %[temp4]                     \n\t"      \
-  "madd    %[temp6],    %[temp6]                     \n\t"
-
-#define GET_SSE(A, B, C, D)               \
-  GET_SSE_INNER(A, A + 1, A + 2, A + 3)   \
-  GET_SSE_INNER(B, B + 1, B + 2, B + 3)   \
-  GET_SSE_INNER(C, C + 1, C + 2, C + 3)   \
-  GET_SSE_INNER(D, D + 1, D + 2, D + 3)
-
-static int SSE16x16_MIPS32(const uint8_t* a, const uint8_t* b) {
-  int count;
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-
-  __asm__ volatile(
-     "mult   $zero,    $zero                            \n\t"
-
-     GET_SSE( 0 * BPS, 4 +  0 * BPS, 8 +  0 * BPS, 12 +  0 * BPS)
-     GET_SSE( 1 * BPS, 4 +  1 * BPS, 8 +  1 * BPS, 12 +  1 * BPS)
-     GET_SSE( 2 * BPS, 4 +  2 * BPS, 8 +  2 * BPS, 12 +  2 * BPS)
-     GET_SSE( 3 * BPS, 4 +  3 * BPS, 8 +  3 * BPS, 12 +  3 * BPS)
-     GET_SSE( 4 * BPS, 4 +  4 * BPS, 8 +  4 * BPS, 12 +  4 * BPS)
-     GET_SSE( 5 * BPS, 4 +  5 * BPS, 8 +  5 * BPS, 12 +  5 * BPS)
-     GET_SSE( 6 * BPS, 4 +  6 * BPS, 8 +  6 * BPS, 12 +  6 * BPS)
-     GET_SSE( 7 * BPS, 4 +  7 * BPS, 8 +  7 * BPS, 12 +  7 * BPS)
-     GET_SSE( 8 * BPS, 4 +  8 * BPS, 8 +  8 * BPS, 12 +  8 * BPS)
-     GET_SSE( 9 * BPS, 4 +  9 * BPS, 8 +  9 * BPS, 12 +  9 * BPS)
-     GET_SSE(10 * BPS, 4 + 10 * BPS, 8 + 10 * BPS, 12 + 10 * BPS)
-     GET_SSE(11 * BPS, 4 + 11 * BPS, 8 + 11 * BPS, 12 + 11 * BPS)
-     GET_SSE(12 * BPS, 4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS)
-     GET_SSE(13 * BPS, 4 + 13 * BPS, 8 + 13 * BPS, 12 + 13 * BPS)
-     GET_SSE(14 * BPS, 4 + 14 * BPS, 8 + 14 * BPS, 12 + 14 * BPS)
-     GET_SSE(15 * BPS, 4 + 15 * BPS, 8 + 15 * BPS, 12 + 15 * BPS)
-
-    "mflo    %[count]                                   \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [count]"=&r"(count)
-    : [a]"r"(a), [b]"r"(b)
-    : "memory", "hi", "lo"
-  );
-  return count;
-}
-
-static int SSE16x8_MIPS32(const uint8_t* a, const uint8_t* b) {
-  int count;
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-
-  __asm__ volatile(
-     "mult   $zero,    $zero                            \n\t"
-
-     GET_SSE( 0 * BPS, 4 +  0 * BPS, 8 +  0 * BPS, 12 +  0 * BPS)
-     GET_SSE( 1 * BPS, 4 +  1 * BPS, 8 +  1 * BPS, 12 +  1 * BPS)
-     GET_SSE( 2 * BPS, 4 +  2 * BPS, 8 +  2 * BPS, 12 +  2 * BPS)
-     GET_SSE( 3 * BPS, 4 +  3 * BPS, 8 +  3 * BPS, 12 +  3 * BPS)
-     GET_SSE( 4 * BPS, 4 +  4 * BPS, 8 +  4 * BPS, 12 +  4 * BPS)
-     GET_SSE( 5 * BPS, 4 +  5 * BPS, 8 +  5 * BPS, 12 +  5 * BPS)
-     GET_SSE( 6 * BPS, 4 +  6 * BPS, 8 +  6 * BPS, 12 +  6 * BPS)
-     GET_SSE( 7 * BPS, 4 +  7 * BPS, 8 +  7 * BPS, 12 +  7 * BPS)
-
-    "mflo    %[count]                                   \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [count]"=&r"(count)
-    : [a]"r"(a), [b]"r"(b)
-    : "memory", "hi", "lo"
-  );
-  return count;
-}
-
-static int SSE8x8_MIPS32(const uint8_t* a, const uint8_t* b) {
-  int count;
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-
-  __asm__ volatile(
-     "mult   $zero,    $zero                            \n\t"
-
-     GET_SSE(0 * BPS, 4 + 0 * BPS, 1 * BPS, 4 + 1 * BPS)
-     GET_SSE(2 * BPS, 4 + 2 * BPS, 3 * BPS, 4 + 3 * BPS)
-     GET_SSE(4 * BPS, 4 + 4 * BPS, 5 * BPS, 4 + 5 * BPS)
-     GET_SSE(6 * BPS, 4 + 6 * BPS, 7 * BPS, 4 + 7 * BPS)
-
-    "mflo    %[count]                                   \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [count]"=&r"(count)
-    : [a]"r"(a), [b]"r"(b)
-    : "memory", "hi", "lo"
-  );
-  return count;
-}
-
-static int SSE4x4_MIPS32(const uint8_t* a, const uint8_t* b) {
-  int count;
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-
-  __asm__ volatile(
-     "mult   $zero,    $zero                            \n\t"
-
-     GET_SSE(0 * BPS, 1 * BPS, 2 * BPS, 3 * BPS)
-
-    "mflo    %[count]                                   \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [count]"=&r"(count)
-    : [a]"r"(a), [b]"r"(b)
-    : "memory", "hi", "lo"
-  );
-  return count;
-}
-
-#undef GET_SSE
-#undef GET_SSE_INNER
-
-#endif  // !WORK_AROUND_GCC
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspInitMIPS32(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitMIPS32(void) {
-  VP8ITransform = ITransform_MIPS32;
-  VP8FTransform = FTransform_MIPS32;
-
-  VP8EncQuantizeBlock = QuantizeBlock_MIPS32;
-  VP8EncQuantize2Blocks = Quantize2Blocks_MIPS32;
-
-  VP8TDisto4x4 = Disto4x4_MIPS32;
-  VP8TDisto16x16 = Disto16x16_MIPS32;
-
-#if !defined(WORK_AROUND_GCC)
-  VP8SSE16x16 = SSE16x16_MIPS32;
-  VP8SSE8x8 = SSE8x8_MIPS32;
-  VP8SSE16x8 = SSE16x8_MIPS32;
-  VP8SSE4x4 = SSE4x4_MIPS32;
-#endif
-}
-
-#else  // !WEBP_USE_MIPS32
-
-WEBP_DSP_INIT_STUB(VP8EncDspInitMIPS32)
-
-#endif  // WEBP_USE_MIPS32
diff --git a/ios/Pods/libwebp/src/dsp/enc_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/enc_mips_dsp_r2.c
deleted file mode 100644
index 9ddd895..0000000
--- a/ios/Pods/libwebp/src/dsp/enc_mips_dsp_r2.c
+++ /dev/null
@@ -1,1517 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS version of speed-critical encoding functions.
-//
-// Author(s): Darko Laus (darko.laus@imgtec.com)
-//            Mirko Raus (mirko.raus@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-#include "src/dsp/mips_macro.h"
-#include "src/enc/cost_enc.h"
-#include "src/enc/vp8i_enc.h"
-
-static const int kC1 = 20091 + (1 << 16);
-static const int kC2 = 35468;
-
-// O - output
-// I - input (macro doesn't change it)
-#define ADD_SUB_HALVES_X4(O0, O1, O2, O3, O4, O5, O6, O7,                      \
-                          I0, I1, I2, I3, I4, I5, I6, I7)                      \
-  "addq.ph          %[" #O0 "],   %[" #I0 "],  %[" #I1 "]     \n\t"            \
-  "subq.ph          %[" #O1 "],   %[" #I0 "],  %[" #I1 "]     \n\t"            \
-  "addq.ph          %[" #O2 "],   %[" #I2 "],  %[" #I3 "]     \n\t"            \
-  "subq.ph          %[" #O3 "],   %[" #I2 "],  %[" #I3 "]     \n\t"            \
-  "addq.ph          %[" #O4 "],   %[" #I4 "],  %[" #I5 "]     \n\t"            \
-  "subq.ph          %[" #O5 "],   %[" #I4 "],  %[" #I5 "]     \n\t"            \
-  "addq.ph          %[" #O6 "],   %[" #I6 "],  %[" #I7 "]     \n\t"            \
-  "subq.ph          %[" #O7 "],   %[" #I6 "],  %[" #I7 "]     \n\t"
-
-// IO - input/output
-#define ABS_X8(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7)                         \
-  "absq_s.ph        %[" #IO0 "],   %[" #IO0 "]                \n\t"            \
-  "absq_s.ph        %[" #IO1 "],   %[" #IO1 "]                \n\t"            \
-  "absq_s.ph        %[" #IO2 "],   %[" #IO2 "]                \n\t"            \
-  "absq_s.ph        %[" #IO3 "],   %[" #IO3 "]                \n\t"            \
-  "absq_s.ph        %[" #IO4 "],   %[" #IO4 "]                \n\t"            \
-  "absq_s.ph        %[" #IO5 "],   %[" #IO5 "]                \n\t"            \
-  "absq_s.ph        %[" #IO6 "],   %[" #IO6 "]                \n\t"            \
-  "absq_s.ph        %[" #IO7 "],   %[" #IO7 "]                \n\t"
-
-// dpa.w.ph $ac0 temp0 ,temp1
-//  $ac += temp0[31..16] * temp1[31..16] + temp0[15..0] * temp1[15..0]
-// dpax.w.ph $ac0 temp0 ,temp1
-//  $ac += temp0[31..16] * temp1[15..0] + temp0[15..0] * temp1[31..16]
-// O - output
-// I - input (macro doesn't change it)
-#define MUL_HALF(O0, I0, I1, I2, I3, I4, I5, I6, I7,                           \
-                 I8, I9, I10, I11, I12, I13, I14, I15)                         \
-    "mult            $ac0,      $zero,     $zero              \n\t"            \
-    "dpa.w.ph        $ac0,      %[" #I2 "],  %[" #I0 "]       \n\t"            \
-    "dpax.w.ph       $ac0,      %[" #I5 "],  %[" #I6 "]       \n\t"            \
-    "dpa.w.ph        $ac0,      %[" #I8 "],  %[" #I9 "]       \n\t"            \
-    "dpax.w.ph       $ac0,      %[" #I11 "], %[" #I4 "]       \n\t"            \
-    "dpa.w.ph        $ac0,      %[" #I12 "], %[" #I7 "]       \n\t"            \
-    "dpax.w.ph       $ac0,      %[" #I13 "], %[" #I1 "]       \n\t"            \
-    "dpa.w.ph        $ac0,      %[" #I14 "], %[" #I3 "]       \n\t"            \
-    "dpax.w.ph       $ac0,      %[" #I15 "], %[" #I10 "]      \n\t"            \
-    "mflo            %[" #O0 "],  $ac0                        \n\t"
-
-#define OUTPUT_EARLY_CLOBBER_REGS_17()                                         \
-  OUTPUT_EARLY_CLOBBER_REGS_10(),                                              \
-  [temp11]"=&r"(temp11), [temp12]"=&r"(temp12), [temp13]"=&r"(temp13),         \
-  [temp14]"=&r"(temp14), [temp15]"=&r"(temp15), [temp16]"=&r"(temp16),         \
-  [temp17]"=&r"(temp17)
-
-// macro for one horizontal pass in FTransform
-// temp0..temp15 holds tmp[0]..tmp[15]
-// A - offset in bytes to load from src and ref buffers
-// TEMP0..TEMP3 - registers for corresponding tmp elements
-#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3)                         \
-  "lw              %[" #TEMP0 "],   0(%[args])                          \n\t"  \
-  "lw              %[" #TEMP1 "],   4(%[args])                          \n\t"  \
-  "lw              %[" #TEMP2 "],   " XSTR(BPS) "*" #A "(%[" #TEMP0 "]) \n\t"  \
-  "lw              %[" #TEMP3 "],   " XSTR(BPS) "*" #A "(%[" #TEMP1 "]) \n\t"  \
-  "preceu.ph.qbl   %[" #TEMP0 "],   %[" #TEMP2 "]                       \n\t"  \
-  "preceu.ph.qbl   %[" #TEMP1 "],   %[" #TEMP3 "]                       \n\t"  \
-  "preceu.ph.qbr   %[" #TEMP2 "],   %[" #TEMP2 "]                       \n\t"  \
-  "preceu.ph.qbr   %[" #TEMP3 "],   %[" #TEMP3 "]                       \n\t"  \
-  "subq.ph         %[" #TEMP0 "],   %[" #TEMP0 "],   %[" #TEMP1 "]      \n\t"  \
-  "subq.ph         %[" #TEMP2 "],   %[" #TEMP2 "],   %[" #TEMP3 "]      \n\t"  \
-  "rotr            %[" #TEMP0 "],   %[" #TEMP0 "],   16                 \n\t"  \
-  "addq.ph         %[" #TEMP1 "],   %[" #TEMP2 "],   %[" #TEMP0 "]      \n\t"  \
-  "subq.ph         %[" #TEMP3 "],   %[" #TEMP2 "],   %[" #TEMP0 "]      \n\t"  \
-  "seh             %[" #TEMP0 "],   %[" #TEMP1 "]                       \n\t"  \
-  "sra             %[temp16],     %[" #TEMP1 "],   16                   \n\t"  \
-  "seh             %[temp19],     %[" #TEMP3 "]                         \n\t"  \
-  "sra             %[" #TEMP3 "],   %[" #TEMP3 "],   16                 \n\t"  \
-  "subu            %[" #TEMP2 "],   %[" #TEMP0 "],   %[temp16]          \n\t"  \
-  "addu            %[" #TEMP0 "],   %[" #TEMP0 "],   %[temp16]          \n\t"  \
-  "mul             %[temp17],     %[temp19],     %[c2217]               \n\t"  \
-  "mul             %[temp18],     %[" #TEMP3 "],   %[c5352]             \n\t"  \
-  "mul             %[" #TEMP1 "],   %[temp19],     %[c5352]             \n\t"  \
-  "mul             %[temp16],     %[" #TEMP3 "],   %[c2217]             \n\t"  \
-  "sll             %[" #TEMP2 "],   %[" #TEMP2 "],   3                  \n\t"  \
-  "sll             %[" #TEMP0 "],   %[" #TEMP0 "],   3                  \n\t"  \
-  "subu            %[" #TEMP3 "],   %[temp17],     %[temp18]            \n\t"  \
-  "addu            %[" #TEMP1 "],   %[temp16],     %[" #TEMP1 "]        \n\t"  \
-  "addiu           %[" #TEMP3 "],   %[" #TEMP3 "],   937                \n\t"  \
-  "addiu           %[" #TEMP1 "],   %[" #TEMP1 "],   1812               \n\t"  \
-  "sra             %[" #TEMP3 "],   %[" #TEMP3 "],   9                  \n\t"  \
-  "sra             %[" #TEMP1 "],   %[" #TEMP1 "],   9                  \n\t"
-
-// macro for one vertical pass in FTransform
-// temp0..temp15 holds tmp[0]..tmp[15]
-// A..D - offsets in bytes to store to out buffer
-// TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements
-#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12)                 \
-  "addu            %[temp16],     %[" #TEMP0 "],   %[" #TEMP12 "]   \n\t"      \
-  "subu            %[temp19],     %[" #TEMP0 "],   %[" #TEMP12 "]   \n\t"      \
-  "addu            %[temp17],     %[" #TEMP4 "],   %[" #TEMP8 "]    \n\t"      \
-  "subu            %[temp18],     %[" #TEMP4 "],   %[" #TEMP8 "]    \n\t"      \
-  "mul             %[" #TEMP8 "],   %[temp19],     %[c2217]         \n\t"      \
-  "mul             %[" #TEMP12 "],  %[temp18],     %[c2217]         \n\t"      \
-  "mul             %[" #TEMP4 "],   %[temp19],     %[c5352]         \n\t"      \
-  "mul             %[temp18],     %[temp18],     %[c5352]           \n\t"      \
-  "addiu           %[temp16],     %[temp16],     7                  \n\t"      \
-  "addu            %[" #TEMP0 "],   %[temp16],     %[temp17]        \n\t"      \
-  "sra             %[" #TEMP0 "],   %[" #TEMP0 "],   4              \n\t"      \
-  "addu            %[" #TEMP12 "],  %[" #TEMP12 "],  %[" #TEMP4 "]  \n\t"      \
-  "subu            %[" #TEMP4 "],   %[temp16],     %[temp17]        \n\t"      \
-  "sra             %[" #TEMP4 "],   %[" #TEMP4 "],   4              \n\t"      \
-  "addiu           %[" #TEMP8 "],   %[" #TEMP8 "],   30000          \n\t"      \
-  "addiu           %[" #TEMP12 "],  %[" #TEMP12 "],  12000          \n\t"      \
-  "addiu           %[" #TEMP8 "],   %[" #TEMP8 "],   21000          \n\t"      \
-  "subu            %[" #TEMP8 "],   %[" #TEMP8 "],   %[temp18]      \n\t"      \
-  "sra             %[" #TEMP12 "],  %[" #TEMP12 "],  16             \n\t"      \
-  "sra             %[" #TEMP8 "],   %[" #TEMP8 "],   16             \n\t"      \
-  "addiu           %[temp16],     %[" #TEMP12 "],  1                \n\t"      \
-  "movn            %[" #TEMP12 "],  %[temp16],     %[temp19]        \n\t"      \
-  "sh              %[" #TEMP0 "],   " #A "(%[temp20])               \n\t"      \
-  "sh              %[" #TEMP4 "],   " #C "(%[temp20])               \n\t"      \
-  "sh              %[" #TEMP8 "],   " #D "(%[temp20])               \n\t"      \
-  "sh              %[" #TEMP12 "],  " #B "(%[temp20])               \n\t"
-
-static void FTransform_MIPSdspR2(const uint8_t* src, const uint8_t* ref,
-                                 int16_t* out) {
-  const int c2217 = 2217;
-  const int c5352 = 5352;
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
-  int temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16;
-  int temp17, temp18, temp19, temp20;
-  const int* const args[3] =
-      { (const int*)src, (const int*)ref, (const int*)out };
-
-  __asm__ volatile (
-    HORIZONTAL_PASS(0, temp0,  temp1,  temp2,  temp3)
-    HORIZONTAL_PASS(1, temp4,  temp5,  temp6,  temp7)
-    HORIZONTAL_PASS(2, temp8,  temp9,  temp10, temp11)
-    HORIZONTAL_PASS(3, temp12, temp13, temp14, temp15)
-    "lw            %[temp20],     8(%[args])                  \n\t"
-    VERTICAL_PASS(0,  8, 16, 24, temp0, temp4, temp8,  temp12)
-    VERTICAL_PASS(2, 10, 18, 26, temp1, temp5, temp9,  temp13)
-    VERTICAL_PASS(4, 12, 20, 28, temp2, temp6, temp10, temp14)
-    VERTICAL_PASS(6, 14, 22, 30, temp3, temp7, temp11, temp15)
-    OUTPUT_EARLY_CLOBBER_REGS_18(),
-      [temp0]"=&r"(temp0), [temp19]"=&r"(temp19), [temp20]"=&r"(temp20)
-    : [args]"r"(args), [c2217]"r"(c2217), [c5352]"r"(c5352)
-    : "memory", "hi", "lo"
-  );
-}
-
-#undef VERTICAL_PASS
-#undef HORIZONTAL_PASS
-
-static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in,
-                                      uint8_t* dst) {
-  int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9;
-  int temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18;
-
-  __asm__ volatile (
-    "ulw              %[temp1],   0(%[in])                 \n\t"
-    "ulw              %[temp2],   16(%[in])                \n\t"
-    LOAD_IN_X2(temp5, temp6, 24, 26)
-    ADD_SUB_HALVES(temp3, temp4, temp1, temp2)
-    LOAD_IN_X2(temp1, temp2, 8, 10)
-    MUL_SHIFT_SUM(temp7, temp8, temp9, temp10, temp11, temp12, temp13, temp14,
-                  temp10, temp8, temp9, temp7, temp1, temp2, temp5, temp6,
-                  temp13, temp11, temp14, temp12)
-    INSERT_HALF_X2(temp8, temp7, temp10, temp9)
-    "ulw              %[temp17],  4(%[in])                 \n\t"
-    "ulw              %[temp18],  20(%[in])                \n\t"
-    ADD_SUB_HALVES(temp1, temp2, temp3, temp8)
-    ADD_SUB_HALVES(temp5, temp6, temp4, temp7)
-    ADD_SUB_HALVES(temp7, temp8, temp17, temp18)
-    LOAD_IN_X2(temp17, temp18, 12, 14)
-    LOAD_IN_X2(temp9, temp10, 28, 30)
-    MUL_SHIFT_SUM(temp11, temp12, temp13, temp14, temp15, temp16, temp4, temp17,
-                  temp12, temp14, temp11, temp13, temp17, temp18, temp9, temp10,
-                  temp15, temp4, temp16, temp17)
-    INSERT_HALF_X2(temp11, temp12, temp13, temp14)
-    ADD_SUB_HALVES(temp17, temp8, temp8, temp11)
-    ADD_SUB_HALVES(temp3, temp4, temp7, temp12)
-
-    // horizontal
-    SRA_16(temp9, temp10, temp11, temp12, temp1, temp2, temp5, temp6)
-    INSERT_HALF_X2(temp1, temp6, temp5, temp2)
-    SRA_16(temp13, temp14, temp15, temp16, temp3, temp4, temp17, temp8)
-    "repl.ph          %[temp2],   0x4                      \n\t"
-    INSERT_HALF_X2(temp3, temp8, temp17, temp4)
-    "addq.ph          %[temp1],   %[temp1],  %[temp2]      \n\t"
-    "addq.ph          %[temp6],   %[temp6],  %[temp2]      \n\t"
-    ADD_SUB_HALVES(temp2, temp4, temp1, temp3)
-    ADD_SUB_HALVES(temp5, temp7, temp6, temp8)
-    MUL_SHIFT_SUM(temp1, temp3, temp6, temp8, temp9, temp13, temp17, temp18,
-                  temp3, temp13, temp1, temp9, temp9, temp13, temp11, temp15,
-                  temp6, temp17, temp8, temp18)
-    MUL_SHIFT_SUM(temp6, temp8, temp18, temp17, temp11, temp15, temp12, temp16,
-                  temp8, temp15, temp6, temp11, temp12, temp16, temp10, temp14,
-                  temp18, temp12, temp17, temp16)
-    INSERT_HALF_X2(temp1, temp3, temp9, temp13)
-    INSERT_HALF_X2(temp6, temp8, temp11, temp15)
-    SHIFT_R_SUM_X2(temp9, temp10, temp11, temp12, temp13, temp14, temp15,
-                   temp16, temp2, temp4, temp5, temp7, temp3, temp1, temp8,
-                   temp6)
-    PACK_2_HALVES_TO_WORD(temp1, temp2, temp3, temp4, temp9, temp12, temp13,
-                          temp16, temp11, temp10, temp15, temp14)
-    LOAD_WITH_OFFSET_X4(temp10, temp11, temp14, temp15, ref,
-                        0, 0, 0, 0,
-                        0, 1, 2, 3,
-                        BPS)
-    CONVERT_2_BYTES_TO_HALF(temp5, temp6, temp7, temp8, temp17, temp18, temp10,
-                            temp11, temp10, temp11, temp14, temp15)
-    STORE_SAT_SUM_X2(temp5, temp6, temp7, temp8, temp17, temp18, temp10, temp11,
-                     temp9, temp12, temp1, temp2, temp13, temp16, temp3, temp4,
-                     dst, 0, 1, 2, 3, BPS)
-
-    OUTPUT_EARLY_CLOBBER_REGS_18()
-    : [dst]"r"(dst), [in]"r"(in), [kC1]"r"(kC1), [kC2]"r"(kC2), [ref]"r"(ref)
-    : "memory", "hi", "lo"
-  );
-}
-
-static void ITransform_MIPSdspR2(const uint8_t* ref, const int16_t* in,
-                                 uint8_t* dst, int do_two) {
-  ITransformOne(ref, in, dst);
-  if (do_two) {
-    ITransformOne(ref + 4, in + 16, dst + 4);
-  }
-}
-
-static int Disto4x4_MIPSdspR2(const uint8_t* const a, const uint8_t* const b,
-                              const uint16_t* const w) {
-  int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9;
-  int temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17;
-
-  __asm__ volatile (
-    LOAD_WITH_OFFSET_X4(temp1, temp2, temp3, temp4, a,
-                        0, 0, 0, 0,
-                        0, 1, 2, 3,
-                        BPS)
-    CONVERT_2_BYTES_TO_HALF(temp5, temp6, temp7, temp8, temp9,temp10, temp11,
-                            temp12, temp1, temp2, temp3, temp4)
-    ADD_SUB_HALVES_X4(temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8,
-                      temp5, temp6, temp7, temp8, temp9, temp10, temp11, temp12)
-    PACK_2_HALVES_TO_WORD(temp9, temp10, temp11, temp12, temp1, temp3, temp5,
-                          temp7, temp2, temp4, temp6, temp8)
-    ADD_SUB_HALVES_X4(temp2, temp4, temp6, temp8, temp9, temp1, temp3, temp10,
-                      temp1, temp9, temp3, temp10, temp5, temp11, temp7, temp12)
-    ADD_SUB_HALVES_X4(temp5, temp11, temp7, temp2, temp9, temp3, temp6, temp12,
-                      temp2, temp9, temp6, temp3, temp4, temp1, temp8, temp10)
-    ADD_SUB_HALVES_X4(temp1, temp4, temp10, temp8, temp7, temp11, temp5, temp2,
-                      temp5, temp7, temp11, temp2, temp9, temp6, temp3, temp12)
-    ABS_X8(temp1, temp4, temp10, temp8, temp7, temp11, temp5, temp2)
-    LOAD_WITH_OFFSET_X4(temp3, temp6, temp9, temp12, w,
-                        0, 4, 8, 12,
-                        0, 0, 0, 0,
-                        0)
-    LOAD_WITH_OFFSET_X4(temp13, temp14, temp15, temp16, w,
-                        0, 4, 8, 12,
-                        1, 1, 1, 1,
-                        16)
-    MUL_HALF(temp17, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8,
-             temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16)
-    LOAD_WITH_OFFSET_X4(temp1, temp2, temp3, temp4, b,
-                        0, 0, 0, 0,
-                        0, 1, 2, 3,
-                        BPS)
-    CONVERT_2_BYTES_TO_HALF(temp5,temp6, temp7, temp8, temp9,temp10, temp11,
-                            temp12, temp1, temp2, temp3, temp4)
-    ADD_SUB_HALVES_X4(temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8,
-                      temp5, temp6, temp7, temp8, temp9, temp10, temp11, temp12)
-    PACK_2_HALVES_TO_WORD(temp9, temp10, temp11, temp12, temp1, temp3, temp5,
-                          temp7, temp2, temp4, temp6, temp8)
-    ADD_SUB_HALVES_X4(temp2, temp4, temp6, temp8, temp9, temp1, temp3, temp10,
-                      temp1, temp9, temp3, temp10, temp5, temp11, temp7, temp12)
-    ADD_SUB_HALVES_X4(temp5, temp11, temp7, temp2, temp9, temp3, temp6, temp12,
-                      temp2, temp9, temp6, temp3, temp4, temp1, temp8, temp10)
-    ADD_SUB_HALVES_X4(temp1, temp4, temp10, temp8, temp7, temp11, temp5, temp2,
-                      temp5, temp7, temp11, temp2, temp9, temp6, temp3, temp12)
-    ABS_X8(temp1, temp4, temp10, temp8, temp7, temp11, temp5, temp2)
-    LOAD_WITH_OFFSET_X4(temp3, temp6, temp9, temp12, w,
-                        0, 4, 8, 12,
-                        0, 0, 0, 0,
-                        0)
-    LOAD_WITH_OFFSET_X4(temp13, temp14, temp15, temp16, w,
-                        0, 4, 8, 12,
-                        1, 1, 1, 1,
-                        16)
-    MUL_HALF(temp3, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8,
-             temp9, temp10, temp11, temp12, temp13, temp14, temp15, temp16)
-    OUTPUT_EARLY_CLOBBER_REGS_17()
-    : [a]"r"(a), [b]"r"(b), [w]"r"(w)
-    : "memory", "hi", "lo"
-  );
-  return abs(temp3 - temp17) >> 5;
-}
-
-static int Disto16x16_MIPSdspR2(const uint8_t* const a,
-                                const uint8_t* const b,
-                                const uint16_t* const w) {
-  int D = 0;
-  int x, y;
-  for (y = 0; y < 16 * BPS; y += 4 * BPS) {
-    for (x = 0; x < 16; x += 4) {
-      D += Disto4x4_MIPSdspR2(a + x + y, b + x + y, w);
-    }
-  }
-  return D;
-}
-
-//------------------------------------------------------------------------------
-// Intra predictions
-
-#define FILL_PART(J, SIZE)                                            \
-    "usw        %[value],  0+" #J "*" XSTR(BPS) "(%[dst])  \n\t"      \
-    "usw        %[value],  4+" #J "*" XSTR(BPS) "(%[dst])  \n\t"      \
-  ".if " #SIZE " == 16                                     \n\t"      \
-    "usw        %[value],  8+" #J "*" XSTR(BPS) "(%[dst])  \n\t"      \
-    "usw        %[value], 12+" #J "*" XSTR(BPS) "(%[dst])  \n\t"      \
-  ".endif                                                  \n\t"
-
-#define FILL_8_OR_16(DST, VALUE, SIZE) do {                         \
-  int value = (VALUE);                                              \
-  __asm__ volatile (                                                \
-    "replv.qb   %[value],  %[value]                      \n\t"      \
-    FILL_PART( 0, SIZE)                                             \
-    FILL_PART( 1, SIZE)                                             \
-    FILL_PART( 2, SIZE)                                             \
-    FILL_PART( 3, SIZE)                                             \
-    FILL_PART( 4, SIZE)                                             \
-    FILL_PART( 5, SIZE)                                             \
-    FILL_PART( 6, SIZE)                                             \
-    FILL_PART( 7, SIZE)                                             \
-  ".if " #SIZE " == 16                                   \n\t"      \
-    FILL_PART( 8, 16)                                               \
-    FILL_PART( 9, 16)                                               \
-    FILL_PART(10, 16)                                               \
-    FILL_PART(11, 16)                                               \
-    FILL_PART(12, 16)                                               \
-    FILL_PART(13, 16)                                               \
-    FILL_PART(14, 16)                                               \
-    FILL_PART(15, 16)                                               \
-  ".endif                                                \n\t"      \
-    : [value]"+&r"(value)                                           \
-    : [dst]"r"((DST))                                               \
-    : "memory"                                                      \
-  );                                                                \
-} while (0)
-
-#define VERTICAL_PRED(DST, TOP, SIZE)                                          \
-static WEBP_INLINE void VerticalPred##SIZE(uint8_t* (DST),                     \
-                                           const uint8_t* (TOP)) {             \
-  int j;                                                                       \
-  if ((TOP)) {                                                                 \
-    for (j = 0; j < (SIZE); ++j) memcpy((DST) + j * BPS, (TOP), (SIZE));       \
-  } else {                                                                     \
-    FILL_8_OR_16((DST), 127, (SIZE));                                          \
-  }                                                                            \
-}
-
-VERTICAL_PRED(dst, top, 8)
-VERTICAL_PRED(dst, top, 16)
-
-#undef VERTICAL_PRED
-
-#define HORIZONTAL_PRED(DST, LEFT, SIZE)                                       \
-static WEBP_INLINE void HorizontalPred##SIZE(uint8_t* (DST),                   \
-                                             const uint8_t* (LEFT)) {          \
-  if (LEFT) {                                                                  \
-    int j;                                                                     \
-    for (j = 0; j < (SIZE); ++j) {                                             \
-      memset((DST) + j * BPS, (LEFT)[j], (SIZE));                              \
-    }                                                                          \
-  } else {                                                                     \
-    FILL_8_OR_16((DST), 129, (SIZE));                                          \
-  }                                                                            \
-}
-
-HORIZONTAL_PRED(dst, left, 8)
-HORIZONTAL_PRED(dst, left, 16)
-
-#undef HORIZONTAL_PRED
-
-#define CLIPPING()                                                             \
-  "preceu.ph.qbl   %[temp2],   %[temp0]                  \n\t"                 \
-  "preceu.ph.qbr   %[temp0],   %[temp0]                  \n\t"                 \
-  "preceu.ph.qbl   %[temp3],   %[temp1]                  \n\t"                 \
-  "preceu.ph.qbr   %[temp1],   %[temp1]                  \n\t"                 \
-  "addu.ph         %[temp2],   %[temp2],   %[leftY_1]    \n\t"                 \
-  "addu.ph         %[temp0],   %[temp0],   %[leftY_1]    \n\t"                 \
-  "addu.ph         %[temp3],   %[temp3],   %[leftY_1]    \n\t"                 \
-  "addu.ph         %[temp1],   %[temp1],   %[leftY_1]    \n\t"                 \
-  "shll_s.ph       %[temp2],   %[temp2],   7             \n\t"                 \
-  "shll_s.ph       %[temp0],   %[temp0],   7             \n\t"                 \
-  "shll_s.ph       %[temp3],   %[temp3],   7             \n\t"                 \
-  "shll_s.ph       %[temp1],   %[temp1],   7             \n\t"                 \
-  "precrqu_s.qb.ph %[temp0],   %[temp2],   %[temp0]      \n\t"                 \
-  "precrqu_s.qb.ph %[temp1],   %[temp3],   %[temp1]      \n\t"
-
-#define CLIP_8B_TO_DST(DST, LEFT, TOP, SIZE) do {                              \
-  int leftY_1 = ((int)(LEFT)[y] << 16) + (LEFT)[y];                            \
-  int temp0, temp1, temp2, temp3;                                              \
-  __asm__ volatile (                                                           \
-    "replv.ph        %[leftY_1], %[leftY_1]              \n\t"                 \
-    "ulw             %[temp0],   0(%[top])               \n\t"                 \
-    "ulw             %[temp1],   4(%[top])               \n\t"                 \
-    "subu.ph         %[leftY_1], %[leftY_1], %[left_1]   \n\t"                 \
-    CLIPPING()                                                                 \
-    "usw             %[temp0],   0(%[dst])               \n\t"                 \
-    "usw             %[temp1],   4(%[dst])               \n\t"                 \
-  ".if " #SIZE " == 16                                   \n\t"                 \
-    "ulw             %[temp0],   8(%[top])               \n\t"                 \
-    "ulw             %[temp1],   12(%[top])              \n\t"                 \
-    CLIPPING()                                                                 \
-    "usw             %[temp0],   8(%[dst])               \n\t"                 \
-    "usw             %[temp1],   12(%[dst])              \n\t"                 \
-  ".endif                                                \n\t"                 \
-    : [leftY_1]"+&r"(leftY_1), [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),       \
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3)                                 \
-    : [left_1]"r"(left_1), [top]"r"((TOP)), [dst]"r"((DST))                    \
-    : "memory"                                                                 \
-  );                                                                           \
-} while (0)
-
-#define CLIP_TO_DST(DST, LEFT, TOP, SIZE) do {                                 \
-  int y;                                                                       \
-  const int left_1 = ((int)(LEFT)[-1] << 16) + (LEFT)[-1];                     \
-  for (y = 0; y < (SIZE); ++y) {                                               \
-    CLIP_8B_TO_DST((DST), (LEFT), (TOP), (SIZE));                              \
-    (DST) += BPS;                                                              \
-  }                                                                            \
-} while (0)
-
-#define TRUE_MOTION(DST, LEFT, TOP, SIZE)                                      \
-static WEBP_INLINE void TrueMotion##SIZE(uint8_t* (DST), const uint8_t* (LEFT),\
-                                         const uint8_t* (TOP)) {               \
-  if ((LEFT) != NULL) {                                                        \
-    if ((TOP) != NULL) {                                                       \
-      CLIP_TO_DST((DST), (LEFT), (TOP), (SIZE));                               \
-    } else {                                                                   \
-      HorizontalPred##SIZE((DST), (LEFT));                                     \
-    }                                                                          \
-  } else {                                                                     \
-    /* true motion without left samples (hence: with default 129 value)    */  \
-    /* is equivalent to VE prediction where you just copy the top samples. */  \
-    /* Note that if top samples are not available, the default value is    */  \
-    /* then 129, and not 127 as in the VerticalPred case.                  */  \
-    if ((TOP) != NULL) {                                                       \
-      VerticalPred##SIZE((DST), (TOP));                                        \
-    } else {                                                                   \
-      FILL_8_OR_16((DST), 129, (SIZE));                                        \
-    }                                                                          \
-  }                                                                            \
-}
-
-TRUE_MOTION(dst, left, top, 8)
-TRUE_MOTION(dst, left, top, 16)
-
-#undef TRUE_MOTION
-#undef CLIP_TO_DST
-#undef CLIP_8B_TO_DST
-#undef CLIPPING
-
-static WEBP_INLINE void DCMode16(uint8_t* dst, const uint8_t* left,
-                                 const uint8_t* top) {
-  int DC, DC1;
-  int temp0, temp1, temp2, temp3;
-
-  __asm__ volatile(
-    "beqz        %[top],   2f                  \n\t"
-    LOAD_WITH_OFFSET_X4(temp0, temp1, temp2, temp3, top,
-                        0, 4, 8, 12,
-                        0, 0, 0, 0,
-                        0)
-    "raddu.w.qb  %[temp0], %[temp0]            \n\t"
-    "raddu.w.qb  %[temp1], %[temp1]            \n\t"
-    "raddu.w.qb  %[temp2], %[temp2]            \n\t"
-    "raddu.w.qb  %[temp3], %[temp3]            \n\t"
-    "addu        %[temp0], %[temp0], %[temp1]  \n\t"
-    "addu        %[temp2], %[temp2], %[temp3]  \n\t"
-    "addu        %[DC],    %[temp0], %[temp2]  \n\t"
-    "move        %[DC1],   %[DC]               \n\t"
-    "beqz        %[left],  1f                  \n\t"
-    LOAD_WITH_OFFSET_X4(temp0, temp1, temp2, temp3, left,
-                        0, 4, 8, 12,
-                        0, 0, 0, 0,
-                        0)
-    "raddu.w.qb  %[temp0], %[temp0]            \n\t"
-    "raddu.w.qb  %[temp1], %[temp1]            \n\t"
-    "raddu.w.qb  %[temp2], %[temp2]            \n\t"
-    "raddu.w.qb  %[temp3], %[temp3]            \n\t"
-    "addu        %[temp0], %[temp0], %[temp1]  \n\t"
-    "addu        %[temp2], %[temp2], %[temp3]  \n\t"
-    "addu        %[DC1],   %[temp0], %[temp2]  \n\t"
-  "1:                                          \n\t"
-    "addu        %[DC],   %[DC],     %[DC1]    \n\t"
-    "j           3f                            \n\t"
-  "2:                                          \n\t"
-    "beqz        %[left],  4f                  \n\t"
-    LOAD_WITH_OFFSET_X4(temp0, temp1, temp2, temp3, left,
-                        0, 4, 8, 12,
-                        0, 0, 0, 0,
-                        0)
-    "raddu.w.qb  %[temp0], %[temp0]            \n\t"
-    "raddu.w.qb  %[temp1], %[temp1]            \n\t"
-    "raddu.w.qb  %[temp2], %[temp2]            \n\t"
-    "raddu.w.qb  %[temp3], %[temp3]            \n\t"
-    "addu        %[temp0], %[temp0], %[temp1]  \n\t"
-    "addu        %[temp2], %[temp2], %[temp3]  \n\t"
-    "addu        %[DC],    %[temp0], %[temp2]  \n\t"
-    "addu        %[DC],    %[DC],    %[DC]     \n\t"
-  "3:                                          \n\t"
-    "shra_r.w    %[DC],    %[DC],    5         \n\t"
-    "j           5f                            \n\t"
-  "4:                                          \n\t"
-    "li          %[DC],    0x80                \n\t"
-  "5:                                          \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [DC]"=&r"(DC),
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [DC1]"=&r"(DC1)
-    : [left]"r"(left), [top]"r"(top)
-    : "memory"
-  );
-
-  FILL_8_OR_16(dst, DC, 16);
-}
-
-static WEBP_INLINE void DCMode8(uint8_t* dst, const uint8_t* left,
-                                const uint8_t* top) {
-  int DC, DC1;
-  int temp0, temp1, temp2, temp3;
-
-  __asm__ volatile(
-    "beqz        %[top],   2f                  \n\t"
-    "ulw         %[temp0], 0(%[top])           \n\t"
-    "ulw         %[temp1], 4(%[top])           \n\t"
-    "raddu.w.qb  %[temp0], %[temp0]            \n\t"
-    "raddu.w.qb  %[temp1], %[temp1]            \n\t"
-    "addu        %[DC],    %[temp0], %[temp1]  \n\t"
-    "move        %[DC1],   %[DC]               \n\t"
-    "beqz        %[left],  1f                  \n\t"
-    "ulw         %[temp2], 0(%[left])          \n\t"
-    "ulw         %[temp3], 4(%[left])          \n\t"
-    "raddu.w.qb  %[temp2], %[temp2]            \n\t"
-    "raddu.w.qb  %[temp3], %[temp3]            \n\t"
-    "addu        %[DC1],   %[temp2], %[temp3]  \n\t"
-  "1:                                          \n\t"
-    "addu        %[DC],    %[DC],    %[DC1]    \n\t"
-    "j           3f                            \n\t"
-  "2:                                          \n\t"
-    "beqz        %[left],  4f                  \n\t"
-    "ulw         %[temp2], 0(%[left])          \n\t"
-    "ulw         %[temp3], 4(%[left])          \n\t"
-    "raddu.w.qb  %[temp2], %[temp2]            \n\t"
-    "raddu.w.qb  %[temp3], %[temp3]            \n\t"
-    "addu        %[DC],    %[temp2], %[temp3]  \n\t"
-    "addu        %[DC],    %[DC],    %[DC]     \n\t"
-  "3:                                          \n\t"
-    "shra_r.w    %[DC], %[DC], 4               \n\t"
-    "j           5f                            \n\t"
-  "4:                                          \n\t"
-    "li          %[DC], 0x80                   \n\t"
-  "5:                                          \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [DC]"=&r"(DC),
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [DC1]"=&r"(DC1)
-    : [left]"r"(left), [top]"r"(top)
-    : "memory"
-  );
-
-  FILL_8_OR_16(dst, DC, 8);
-}
-
-static void DC4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1;
-  __asm__ volatile(
-    "ulw          %[temp0],   0(%[top])               \n\t"
-    "ulw          %[temp1],   -5(%[top])              \n\t"
-    "raddu.w.qb   %[temp0],   %[temp0]                \n\t"
-    "raddu.w.qb   %[temp1],   %[temp1]                \n\t"
-    "addu         %[temp0],   %[temp0],    %[temp1]   \n\t"
-    "addiu        %[temp0],   %[temp0],    4          \n\t"
-    "srl          %[temp0],   %[temp0],    3          \n\t"
-    "replv.qb     %[temp0],   %[temp0]                \n\t"
-    "usw          %[temp0],   0*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw          %[temp0],   1*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw          %[temp0],   2*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw          %[temp0],   3*" XSTR(BPS) "(%[dst]) \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void TM4(uint8_t* dst, const uint8_t* top) {
-  int a10, a32, temp0, temp1, temp2, temp3, temp4, temp5;
-  const int c35 = 0xff00ff;
-  __asm__ volatile (
-    "lbu              %[temp1],  0(%[top])                     \n\t"
-    "lbu              %[a10],    1(%[top])                     \n\t"
-    "lbu              %[temp2],  2(%[top])                     \n\t"
-    "lbu              %[a32],    3(%[top])                     \n\t"
-    "ulw              %[temp0],  -5(%[top])                    \n\t"
-    "lbu              %[temp4],  -1(%[top])                    \n\t"
-    "append           %[a10],    %[temp1],   16                \n\t"
-    "append           %[a32],    %[temp2],   16                \n\t"
-    "replv.ph         %[temp4],  %[temp4]                      \n\t"
-    "shrl.ph          %[temp1],  %[temp0],   8                 \n\t"
-    "and              %[temp0],  %[temp0],   %[c35]            \n\t"
-    "subu.ph          %[temp1],  %[temp1],   %[temp4]          \n\t"
-    "subu.ph          %[temp0],  %[temp0],   %[temp4]          \n\t"
-    "srl              %[temp2],  %[temp1],   16                \n\t"
-    "srl              %[temp3],  %[temp0],   16                \n\t"
-    "replv.ph         %[temp2],  %[temp2]                      \n\t"
-    "replv.ph         %[temp3],  %[temp3]                      \n\t"
-    "replv.ph         %[temp4],  %[temp1]                      \n\t"
-    "replv.ph         %[temp5],  %[temp0]                      \n\t"
-    "addu.ph          %[temp0],  %[temp3],   %[a10]            \n\t"
-    "addu.ph          %[temp1],  %[temp3],   %[a32]            \n\t"
-    "addu.ph          %[temp3],  %[temp2],   %[a10]            \n\t"
-    "addu.ph          %[temp2],  %[temp2],   %[a32]            \n\t"
-    "shll_s.ph        %[temp0],  %[temp0],   7                 \n\t"
-    "shll_s.ph        %[temp1],  %[temp1],   7                 \n\t"
-    "shll_s.ph        %[temp3],  %[temp3],   7                 \n\t"
-    "shll_s.ph        %[temp2],  %[temp2],   7                 \n\t"
-    "precrqu_s.qb.ph  %[temp0],  %[temp1],   %[temp0]          \n\t"
-    "precrqu_s.qb.ph  %[temp1],  %[temp2],   %[temp3]          \n\t"
-    "addu.ph          %[temp2],  %[temp5],   %[a10]            \n\t"
-    "addu.ph          %[temp3],  %[temp5],   %[a32]            \n\t"
-    "addu.ph          %[temp5],  %[temp4],   %[a10]            \n\t"
-    "addu.ph          %[temp4],  %[temp4],   %[a32]            \n\t"
-    "shll_s.ph        %[temp2],  %[temp2],   7                 \n\t"
-    "shll_s.ph        %[temp3],  %[temp3],   7                 \n\t"
-    "shll_s.ph        %[temp4],  %[temp4],   7                 \n\t"
-    "shll_s.ph        %[temp5],  %[temp5],   7                 \n\t"
-    "precrqu_s.qb.ph  %[temp2],  %[temp3],   %[temp2]          \n\t"
-    "precrqu_s.qb.ph  %[temp3],  %[temp4],   %[temp5]          \n\t"
-    "usw              %[temp1],  0*" XSTR(BPS) "(%[dst])       \n\t"
-    "usw              %[temp0],  1*" XSTR(BPS) "(%[dst])       \n\t"
-    "usw              %[temp3],  2*" XSTR(BPS) "(%[dst])       \n\t"
-    "usw              %[temp2],  3*" XSTR(BPS) "(%[dst])       \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [a10]"=&r"(a10), [a32]"=&r"(a32)
-    : [c35]"r"(c35), [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void VE4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6;
-  __asm__ volatile(
-    "ulw             %[temp0],   -1(%[top])              \n\t"
-    "ulh             %[temp1],   3(%[top])               \n\t"
-    "preceu.ph.qbr   %[temp2],   %[temp0]                \n\t"
-    "preceu.ph.qbl   %[temp3],   %[temp0]                \n\t"
-    "preceu.ph.qbr   %[temp4],   %[temp1]                \n\t"
-    "packrl.ph       %[temp5],   %[temp3],    %[temp2]   \n\t"
-    "packrl.ph       %[temp6],   %[temp4],    %[temp3]   \n\t"
-    "shll.ph         %[temp5],   %[temp5],    1          \n\t"
-    "shll.ph         %[temp6],   %[temp6],    1          \n\t"
-    "addq.ph         %[temp2],   %[temp5],    %[temp2]   \n\t"
-    "addq.ph         %[temp6],   %[temp6],    %[temp4]   \n\t"
-    "addq.ph         %[temp2],   %[temp2],    %[temp3]   \n\t"
-    "addq.ph         %[temp6],   %[temp6],    %[temp3]   \n\t"
-    "shra_r.ph       %[temp2],   %[temp2],    2          \n\t"
-    "shra_r.ph       %[temp6],   %[temp6],    2          \n\t"
-    "precr.qb.ph     %[temp4],   %[temp6],    %[temp2]   \n\t"
-    "usw             %[temp4],   0*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp4],   1*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp4],   2*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp4],   3*" XSTR(BPS) "(%[dst]) \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void HE4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6;
-  __asm__ volatile(
-    "ulw             %[temp0],   -4(%[top])              \n\t"
-    "lbu             %[temp1],   -5(%[top])              \n\t"
-    "preceu.ph.qbr   %[temp2],   %[temp0]                \n\t"
-    "preceu.ph.qbl   %[temp3],   %[temp0]                \n\t"
-    "replv.ph        %[temp4],   %[temp1]                \n\t"
-    "packrl.ph       %[temp5],   %[temp3],    %[temp2]   \n\t"
-    "packrl.ph       %[temp6],   %[temp2],    %[temp4]   \n\t"
-    "shll.ph         %[temp5],   %[temp5],    1          \n\t"
-    "shll.ph         %[temp6],   %[temp6],    1          \n\t"
-    "addq.ph         %[temp3],   %[temp3],    %[temp5]   \n\t"
-    "addq.ph         %[temp3],   %[temp3],    %[temp2]   \n\t"
-    "addq.ph         %[temp2],   %[temp2],    %[temp6]   \n\t"
-    "addq.ph         %[temp2],   %[temp2],    %[temp4]   \n\t"
-    "shra_r.ph       %[temp3],   %[temp3],    2          \n\t"
-    "shra_r.ph       %[temp2],   %[temp2],    2          \n\t"
-    "replv.qb        %[temp0],   %[temp3]                \n\t"
-    "replv.qb        %[temp1],   %[temp2]                \n\t"
-    "srl             %[temp3],   %[temp3],    16         \n\t"
-    "srl             %[temp2],   %[temp2],    16         \n\t"
-    "replv.qb        %[temp3],   %[temp3]                \n\t"
-    "replv.qb        %[temp2],   %[temp2]                \n\t"
-    "usw             %[temp3],   0*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp0],   1*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp2],   2*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp1],   3*" XSTR(BPS) "(%[dst]) \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void RD4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  int temp6, temp7, temp8, temp9, temp10, temp11;
-  __asm__ volatile(
-    "ulw             %[temp0],    -5(%[top])               \n\t"
-    "ulw             %[temp1],    -1(%[top])               \n\t"
-    "preceu.ph.qbl   %[temp2],    %[temp0]                 \n\t"
-    "preceu.ph.qbr   %[temp3],    %[temp0]                 \n\t"
-    "preceu.ph.qbr   %[temp4],    %[temp1]                 \n\t"
-    "preceu.ph.qbl   %[temp5],    %[temp1]                 \n\t"
-    "packrl.ph       %[temp6],    %[temp2],    %[temp3]    \n\t"
-    "packrl.ph       %[temp7],    %[temp4],    %[temp2]    \n\t"
-    "packrl.ph       %[temp8],    %[temp5],    %[temp4]    \n\t"
-    "shll.ph         %[temp6],    %[temp6],    1           \n\t"
-    "addq.ph         %[temp9],    %[temp2],    %[temp6]    \n\t"
-    "shll.ph         %[temp7],    %[temp7],    1           \n\t"
-    "addq.ph         %[temp9],    %[temp9],    %[temp3]    \n\t"
-    "shll.ph         %[temp8],    %[temp8],    1           \n\t"
-    "shra_r.ph       %[temp9],    %[temp9],    2           \n\t"
-    "addq.ph         %[temp10],   %[temp4],    %[temp7]    \n\t"
-    "addq.ph         %[temp11],   %[temp5],    %[temp8]    \n\t"
-    "addq.ph         %[temp10],   %[temp10],   %[temp2]    \n\t"
-    "addq.ph         %[temp11],   %[temp11],   %[temp4]    \n\t"
-    "shra_r.ph       %[temp10],   %[temp10],   2           \n\t"
-    "shra_r.ph       %[temp11],   %[temp11],   2           \n\t"
-    "lbu             %[temp0],    3(%[top])                \n\t"
-    "lbu             %[temp1],    2(%[top])                \n\t"
-    "lbu             %[temp2],    1(%[top])                \n\t"
-    "sll             %[temp1],    %[temp1],    1           \n\t"
-    "addu            %[temp0],    %[temp0],    %[temp1]    \n\t"
-    "addu            %[temp0],    %[temp0],    %[temp2]    \n\t"
-    "precr.qb.ph     %[temp9],    %[temp10],   %[temp9]    \n\t"
-    "shra_r.w        %[temp0],    %[temp0],    2           \n\t"
-    "precr.qb.ph     %[temp10],   %[temp11],   %[temp10]   \n\t"
-    "usw             %[temp9],    3*" XSTR(BPS) "(%[dst])  \n\t"
-    "usw             %[temp10],   1*" XSTR(BPS) "(%[dst])  \n\t"
-    "prepend         %[temp9],    %[temp11],   8           \n\t"
-    "prepend         %[temp10],   %[temp0],    8           \n\t"
-    "usw             %[temp9],    2*" XSTR(BPS) "(%[dst])  \n\t"
-    "usw             %[temp10],   0*" XSTR(BPS) "(%[dst])  \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void VR4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8, temp9;
-  __asm__ volatile (
-    "ulw              %[temp0],   -4(%[top])              \n\t"
-    "ulw              %[temp1],   0(%[top])               \n\t"
-    "preceu.ph.qbl    %[temp2],   %[temp0]                \n\t"
-    "preceu.ph.qbr    %[temp0],   %[temp0]                \n\t"
-    "preceu.ph.qbla   %[temp3],   %[temp1]                \n\t"
-    "preceu.ph.qbra   %[temp1],   %[temp1]                \n\t"
-    "packrl.ph        %[temp7],   %[temp3],    %[temp2]   \n\t"
-    "addqh_r.ph       %[temp4],   %[temp1],    %[temp3]   \n\t"
-    "move             %[temp6],   %[temp1]                \n\t"
-    "append           %[temp1],   %[temp2],    16         \n\t"
-    "shll.ph          %[temp9],   %[temp6],    1          \n\t"
-    "addqh_r.ph       %[temp5],   %[temp7],    %[temp6]   \n\t"
-    "shll.ph          %[temp8],   %[temp7],    1          \n\t"
-    "addu.ph          %[temp3],   %[temp7],    %[temp3]   \n\t"
-    "addu.ph          %[temp1],   %[temp1],    %[temp6]   \n\t"
-    "packrl.ph        %[temp7],   %[temp2],    %[temp0]   \n\t"
-    "addu.ph          %[temp6],   %[temp0],    %[temp2]   \n\t"
-    "addu.ph          %[temp3],   %[temp3],    %[temp9]   \n\t"
-    "addu.ph          %[temp1],   %[temp1],    %[temp8]   \n\t"
-    "shll.ph          %[temp7],   %[temp7],    1          \n\t"
-    "shra_r.ph        %[temp3],   %[temp3],    2          \n\t"
-    "shra_r.ph        %[temp1],   %[temp1],    2          \n\t"
-    "addu.ph          %[temp6],   %[temp6],    %[temp7]   \n\t"
-    "shra_r.ph        %[temp6],   %[temp6],    2          \n\t"
-    "precrq.ph.w      %[temp8],   %[temp4],    %[temp5]   \n\t"
-    "append           %[temp4],   %[temp5],    16         \n\t"
-    "precrq.ph.w      %[temp2],   %[temp3],    %[temp1]   \n\t"
-    "append           %[temp3],   %[temp1],    16         \n\t"
-    "precr.qb.ph      %[temp8],   %[temp8],    %[temp4]   \n\t"
-    "precr.qb.ph      %[temp3],   %[temp2],    %[temp3]   \n\t"
-    "usw              %[temp8],   0*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw              %[temp3],   1*" XSTR(BPS) "(%[dst]) \n\t"
-    "append           %[temp3],   %[temp6],    8          \n\t"
-    "srl              %[temp6],   %[temp6],    16         \n\t"
-    "append           %[temp8],   %[temp6],    8          \n\t"
-    "usw              %[temp3],   3*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw              %[temp8],   2*" XSTR(BPS) "(%[dst]) \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void LD4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  int temp6, temp7, temp8, temp9, temp10, temp11;
-  __asm__ volatile(
-    "ulw             %[temp0],    0(%[top])               \n\t"
-    "ulw             %[temp1],    4(%[top])               \n\t"
-    "preceu.ph.qbl   %[temp2],    %[temp0]                \n\t"
-    "preceu.ph.qbr   %[temp3],    %[temp0]                \n\t"
-    "preceu.ph.qbr   %[temp4],    %[temp1]                \n\t"
-    "preceu.ph.qbl   %[temp5],    %[temp1]                \n\t"
-    "packrl.ph       %[temp6],    %[temp2],    %[temp3]   \n\t"
-    "packrl.ph       %[temp7],    %[temp4],    %[temp2]   \n\t"
-    "packrl.ph       %[temp8],    %[temp5],    %[temp4]   \n\t"
-    "shll.ph         %[temp6],    %[temp6],    1          \n\t"
-    "addq.ph         %[temp9],    %[temp2],    %[temp6]   \n\t"
-    "shll.ph         %[temp7],    %[temp7],    1          \n\t"
-    "addq.ph         %[temp9],    %[temp9],    %[temp3]   \n\t"
-    "shll.ph         %[temp8],    %[temp8],    1          \n\t"
-    "shra_r.ph       %[temp9],    %[temp9],    2          \n\t"
-    "addq.ph         %[temp10],   %[temp4],    %[temp7]   \n\t"
-    "addq.ph         %[temp11],   %[temp5],    %[temp8]   \n\t"
-    "addq.ph         %[temp10],   %[temp10],   %[temp2]   \n\t"
-    "addq.ph         %[temp11],   %[temp11],   %[temp4]   \n\t"
-    "shra_r.ph       %[temp10],   %[temp10],   2          \n\t"
-    "shra_r.ph       %[temp11],   %[temp11],   2          \n\t"
-    "srl             %[temp1],    %[temp1],    24         \n\t"
-    "sll             %[temp1],    %[temp1],    1          \n\t"
-    "raddu.w.qb      %[temp5],    %[temp5]                \n\t"
-    "precr.qb.ph     %[temp9],    %[temp10],   %[temp9]   \n\t"
-    "precr.qb.ph     %[temp10],   %[temp11],   %[temp10]  \n\t"
-    "addu            %[temp1],    %[temp1],    %[temp5]   \n\t"
-    "shra_r.w        %[temp1],    %[temp1],    2          \n\t"
-    "usw             %[temp9],    0*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp10],   2*" XSTR(BPS) "(%[dst]) \n\t"
-    "prepend         %[temp9],    %[temp11],   8          \n\t"
-    "prepend         %[temp10],   %[temp1],    8          \n\t"
-    "usw             %[temp9],    1*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp10],   3*" XSTR(BPS) "(%[dst]) \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void VL4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8, temp9;
-  __asm__ volatile (
-    "ulw              %[temp0],   0(%[top])               \n\t"
-    "ulw              %[temp1],   4(%[top])               \n\t"
-    "preceu.ph.qbla   %[temp2],   %[temp0]                \n\t"
-    "preceu.ph.qbra   %[temp0],   %[temp0]                \n\t"
-    "preceu.ph.qbl    %[temp3],   %[temp1]                \n\t"
-    "preceu.ph.qbr    %[temp1],   %[temp1]                \n\t"
-    "addqh_r.ph       %[temp4],   %[temp0],    %[temp2]   \n\t"
-    "packrl.ph        %[temp7],   %[temp1],    %[temp0]   \n\t"
-    "precrq.ph.w      %[temp6],   %[temp1],    %[temp2]   \n\t"
-    "shll.ph          %[temp9],   %[temp2],    1          \n\t"
-    "addqh_r.ph       %[temp5],   %[temp7],    %[temp2]   \n\t"
-    "shll.ph          %[temp8],   %[temp7],    1          \n\t"
-    "addu.ph          %[temp2],   %[temp2],    %[temp6]   \n\t"
-    "addu.ph          %[temp0],   %[temp0],    %[temp7]   \n\t"
-    "packrl.ph        %[temp7],   %[temp3],    %[temp1]   \n\t"
-    "addu.ph          %[temp6],   %[temp1],    %[temp3]   \n\t"
-    "addu.ph          %[temp2],   %[temp2],    %[temp8]   \n\t"
-    "addu.ph          %[temp0],   %[temp0],    %[temp9]   \n\t"
-    "shll.ph          %[temp7],   %[temp7],    1          \n\t"
-    "shra_r.ph        %[temp2],   %[temp2],    2          \n\t"
-    "shra_r.ph        %[temp0],   %[temp0],    2          \n\t"
-    "addu.ph          %[temp6],   %[temp6],    %[temp7]   \n\t"
-    "shra_r.ph        %[temp6],   %[temp6],    2          \n\t"
-    "precrq.ph.w      %[temp8],   %[temp5],    %[temp4]   \n\t"
-    "append           %[temp5],   %[temp4],    16         \n\t"
-    "precrq.ph.w      %[temp3],   %[temp2],    %[temp0]   \n\t"
-    "append           %[temp2],   %[temp0],    16         \n\t"
-    "precr.qb.ph      %[temp8],   %[temp8],    %[temp5]   \n\t"
-    "precr.qb.ph      %[temp3],   %[temp3],    %[temp2]   \n\t"
-    "usw              %[temp8],   0*" XSTR(BPS) "(%[dst]) \n\t"
-    "prepend          %[temp8],   %[temp6],    8          \n\t"
-    "usw              %[temp3],   1*" XSTR(BPS) "(%[dst]) \n\t"
-    "srl              %[temp6],   %[temp6],    16         \n\t"
-    "prepend          %[temp3],   %[temp6],    8          \n\t"
-    "usw              %[temp8],   2*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw              %[temp3],   3*" XSTR(BPS) "(%[dst]) \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void HD4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8, temp9;
-  __asm__ volatile (
-    "ulw              %[temp0],   -5(%[top])              \n\t"
-    "ulw              %[temp1],   -1(%[top])              \n\t"
-    "preceu.ph.qbla   %[temp2],   %[temp0]                \n\t"
-    "preceu.ph.qbra   %[temp0],   %[temp0]                \n\t"
-    "preceu.ph.qbl    %[temp3],   %[temp1]                \n\t"
-    "preceu.ph.qbr    %[temp1],   %[temp1]                \n\t"
-    "addqh_r.ph       %[temp4],   %[temp0],    %[temp2]   \n\t"
-    "packrl.ph        %[temp7],   %[temp1],    %[temp0]   \n\t"
-    "precrq.ph.w      %[temp6],   %[temp1],    %[temp2]   \n\t"
-    "shll.ph          %[temp9],   %[temp2],    1          \n\t"
-    "addqh_r.ph       %[temp5],   %[temp7],    %[temp2]   \n\t"
-    "shll.ph          %[temp8],   %[temp7],    1          \n\t"
-    "addu.ph          %[temp2],   %[temp2],    %[temp6]   \n\t"
-    "addu.ph          %[temp0],   %[temp0],    %[temp7]   \n\t"
-    "packrl.ph        %[temp7],   %[temp3],    %[temp1]   \n\t"
-    "addu.ph          %[temp6],   %[temp1],    %[temp3]   \n\t"
-    "addu.ph          %[temp2],   %[temp2],    %[temp8]   \n\t"
-    "addu.ph          %[temp0],   %[temp0],    %[temp9]   \n\t"
-    "shll.ph          %[temp7],   %[temp7],    1          \n\t"
-    "shra_r.ph        %[temp2],   %[temp2],    2          \n\t"
-    "shra_r.ph        %[temp0],   %[temp0],    2          \n\t"
-    "addu.ph          %[temp6],   %[temp6],    %[temp7]   \n\t"
-    "shra_r.ph        %[temp6],   %[temp6],    2          \n\t"
-    "precrq.ph.w      %[temp1],   %[temp2],    %[temp5]   \n\t"
-    "precrq.ph.w      %[temp3],   %[temp0],    %[temp4]   \n\t"
-    "precr.qb.ph      %[temp7],   %[temp6],    %[temp1]   \n\t"
-    "precr.qb.ph      %[temp6],   %[temp1],    %[temp3]   \n\t"
-    "usw              %[temp7],   0*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw              %[temp6],   1*" XSTR(BPS) "(%[dst]) \n\t"
-    "append           %[temp2],   %[temp5],    16         \n\t"
-    "append           %[temp0],   %[temp4],    16         \n\t"
-    "precr.qb.ph      %[temp5],   %[temp3],    %[temp2]   \n\t"
-    "precr.qb.ph      %[temp4],   %[temp2],    %[temp0]   \n\t"
-    "usw              %[temp5],   2*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw              %[temp4],   3*" XSTR(BPS) "(%[dst]) \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-static void HU4(uint8_t* dst, const uint8_t* top) {
-  int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-  __asm__ volatile (
-    "ulw             %[temp0],   -5(%[top])              \n\t"
-    "preceu.ph.qbl   %[temp1],   %[temp0]                \n\t"
-    "preceu.ph.qbr   %[temp2],   %[temp0]                \n\t"
-    "packrl.ph       %[temp3],   %[temp1],    %[temp2]   \n\t"
-    "replv.qb        %[temp7],   %[temp2]                \n\t"
-    "addqh_r.ph      %[temp4],   %[temp1],    %[temp3]   \n\t"
-    "addqh_r.ph      %[temp5],   %[temp3],    %[temp2]   \n\t"
-    "shll.ph         %[temp6],   %[temp3],    1          \n\t"
-    "addu.ph         %[temp3],   %[temp2],    %[temp3]   \n\t"
-    "addu.ph         %[temp6],   %[temp1],    %[temp6]   \n\t"
-    "shll.ph         %[temp0],   %[temp2],    1          \n\t"
-    "addu.ph         %[temp6],   %[temp6],    %[temp2]   \n\t"
-    "addu.ph         %[temp0],   %[temp3],    %[temp0]   \n\t"
-    "shra_r.ph       %[temp6],   %[temp6],    2          \n\t"
-    "shra_r.ph       %[temp0],   %[temp0],    2          \n\t"
-    "packrl.ph       %[temp3],   %[temp6],    %[temp5]   \n\t"
-    "precrq.ph.w     %[temp2],   %[temp6],    %[temp4]   \n\t"
-    "append          %[temp0],   %[temp5],    16         \n\t"
-    "precr.qb.ph     %[temp3],   %[temp3],    %[temp2]   \n\t"
-    "usw             %[temp3],   0*" XSTR(BPS) "(%[dst]) \n\t"
-    "precr.qb.ph     %[temp1],   %[temp7],    %[temp0]   \n\t"
-    "usw             %[temp7],   3*" XSTR(BPS) "(%[dst]) \n\t"
-    "packrl.ph       %[temp2],   %[temp1],    %[temp3]   \n\t"
-    "usw             %[temp1],   2*" XSTR(BPS) "(%[dst]) \n\t"
-    "usw             %[temp2],   1*" XSTR(BPS) "(%[dst]) \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7)
-    : [top]"r"(top), [dst]"r"(dst)
-    : "memory"
-  );
-}
-
-//------------------------------------------------------------------------------
-// Chroma 8x8 prediction (paragraph 12.2)
-
-static void IntraChromaPreds_MIPSdspR2(uint8_t* dst, const uint8_t* left,
-                                       const uint8_t* top) {
-  // U block
-  DCMode8(C8DC8 + dst, left, top);
-  VerticalPred8(C8VE8 + dst, top);
-  HorizontalPred8(C8HE8 + dst, left);
-  TrueMotion8(C8TM8 + dst, left, top);
-  // V block
-  dst += 8;
-  if (top) top += 8;
-  if (left) left += 16;
-  DCMode8(C8DC8 + dst, left, top);
-  VerticalPred8(C8VE8 + dst, top);
-  HorizontalPred8(C8HE8 + dst, left);
-  TrueMotion8(C8TM8 + dst, left, top);
-}
-
-//------------------------------------------------------------------------------
-// luma 16x16 prediction (paragraph 12.3)
-
-static void Intra16Preds_MIPSdspR2(uint8_t* dst,
-                                   const uint8_t* left, const uint8_t* top) {
-  DCMode16(I16DC16 + dst, left, top);
-  VerticalPred16(I16VE16 + dst, top);
-  HorizontalPred16(I16HE16 + dst, left);
-  TrueMotion16(I16TM16 + dst, left, top);
-}
-
-// Left samples are top[-5 .. -2], top_left is top[-1], top are
-// located at top[0..3], and top right is top[4..7]
-static void Intra4Preds_MIPSdspR2(uint8_t* dst, const uint8_t* top) {
-  DC4(I4DC4 + dst, top);
-  TM4(I4TM4 + dst, top);
-  VE4(I4VE4 + dst, top);
-  HE4(I4HE4 + dst, top);
-  RD4(I4RD4 + dst, top);
-  VR4(I4VR4 + dst, top);
-  LD4(I4LD4 + dst, top);
-  VL4(I4VL4 + dst, top);
-  HD4(I4HD4 + dst, top);
-  HU4(I4HU4 + dst, top);
-}
-
-//------------------------------------------------------------------------------
-// Metric
-
-#if !defined(WORK_AROUND_GCC)
-
-#define GET_SSE_INNER(A)                                                  \
-  "lw               %[temp0],    " #A "(%[a])                  \n\t"      \
-  "lw               %[temp1],    " #A "(%[b])                  \n\t"      \
-  "preceu.ph.qbr    %[temp2],    %[temp0]                      \n\t"      \
-  "preceu.ph.qbl    %[temp0],    %[temp0]                      \n\t"      \
-  "preceu.ph.qbr    %[temp3],    %[temp1]                      \n\t"      \
-  "preceu.ph.qbl    %[temp1],    %[temp1]                      \n\t"      \
-  "subq.ph          %[temp2],    %[temp2],    %[temp3]         \n\t"      \
-  "subq.ph          %[temp0],    %[temp0],    %[temp1]         \n\t"      \
-  "dpa.w.ph         $ac0,        %[temp2],    %[temp2]         \n\t"      \
-  "dpa.w.ph         $ac0,        %[temp0],    %[temp0]         \n\t"
-
-#define GET_SSE(A, B, C, D)               \
-  GET_SSE_INNER(A)                        \
-  GET_SSE_INNER(B)                        \
-  GET_SSE_INNER(C)                        \
-  GET_SSE_INNER(D)
-
-static int SSE16x16_MIPSdspR2(const uint8_t* a, const uint8_t* b) {
-  int count;
-  int temp0, temp1, temp2, temp3;
-  __asm__ volatile (
-    "mult   $zero,    $zero                            \n\t"
-    GET_SSE( 0 * BPS, 4 +  0 * BPS, 8 +  0 * BPS, 12 +  0 * BPS)
-    GET_SSE( 1 * BPS, 4 +  1 * BPS, 8 +  1 * BPS, 12 +  1 * BPS)
-    GET_SSE( 2 * BPS, 4 +  2 * BPS, 8 +  2 * BPS, 12 +  2 * BPS)
-    GET_SSE( 3 * BPS, 4 +  3 * BPS, 8 +  3 * BPS, 12 +  3 * BPS)
-    GET_SSE( 4 * BPS, 4 +  4 * BPS, 8 +  4 * BPS, 12 +  4 * BPS)
-    GET_SSE( 5 * BPS, 4 +  5 * BPS, 8 +  5 * BPS, 12 +  5 * BPS)
-    GET_SSE( 6 * BPS, 4 +  6 * BPS, 8 +  6 * BPS, 12 +  6 * BPS)
-    GET_SSE( 7 * BPS, 4 +  7 * BPS, 8 +  7 * BPS, 12 +  7 * BPS)
-    GET_SSE( 8 * BPS, 4 +  8 * BPS, 8 +  8 * BPS, 12 +  8 * BPS)
-    GET_SSE( 9 * BPS, 4 +  9 * BPS, 8 +  9 * BPS, 12 +  9 * BPS)
-    GET_SSE(10 * BPS, 4 + 10 * BPS, 8 + 10 * BPS, 12 + 10 * BPS)
-    GET_SSE(11 * BPS, 4 + 11 * BPS, 8 + 11 * BPS, 12 + 11 * BPS)
-    GET_SSE(12 * BPS, 4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS)
-    GET_SSE(13 * BPS, 4 + 13 * BPS, 8 + 13 * BPS, 12 + 13 * BPS)
-    GET_SSE(14 * BPS, 4 + 14 * BPS, 8 + 14 * BPS, 12 + 14 * BPS)
-    GET_SSE(15 * BPS, 4 + 15 * BPS, 8 + 15 * BPS, 12 + 15 * BPS)
-    "mflo   %[count]                                   \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [count]"=&r"(count)
-    : [a]"r"(a), [b]"r"(b)
-    : "memory", "hi", "lo"
-  );
-  return count;
-}
-
-static int SSE16x8_MIPSdspR2(const uint8_t* a, const uint8_t* b) {
-  int count;
-  int temp0, temp1, temp2, temp3;
-  __asm__ volatile (
-    "mult   $zero,    $zero                            \n\t"
-    GET_SSE( 0 * BPS, 4 +  0 * BPS, 8 +  0 * BPS, 12 +  0 * BPS)
-    GET_SSE( 1 * BPS, 4 +  1 * BPS, 8 +  1 * BPS, 12 +  1 * BPS)
-    GET_SSE( 2 * BPS, 4 +  2 * BPS, 8 +  2 * BPS, 12 +  2 * BPS)
-    GET_SSE( 3 * BPS, 4 +  3 * BPS, 8 +  3 * BPS, 12 +  3 * BPS)
-    GET_SSE( 4 * BPS, 4 +  4 * BPS, 8 +  4 * BPS, 12 +  4 * BPS)
-    GET_SSE( 5 * BPS, 4 +  5 * BPS, 8 +  5 * BPS, 12 +  5 * BPS)
-    GET_SSE( 6 * BPS, 4 +  6 * BPS, 8 +  6 * BPS, 12 +  6 * BPS)
-    GET_SSE( 7 * BPS, 4 +  7 * BPS, 8 +  7 * BPS, 12 +  7 * BPS)
-    "mflo   %[count]                                   \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [count]"=&r"(count)
-    : [a]"r"(a), [b]"r"(b)
-    : "memory", "hi", "lo"
-  );
-  return count;
-}
-
-static int SSE8x8_MIPSdspR2(const uint8_t* a, const uint8_t* b) {
-  int count;
-  int temp0, temp1, temp2, temp3;
-  __asm__ volatile (
-    "mult   $zero,    $zero                            \n\t"
-    GET_SSE(0 * BPS, 4 + 0 * BPS, 1 * BPS, 4 + 1 * BPS)
-    GET_SSE(2 * BPS, 4 + 2 * BPS, 3 * BPS, 4 + 3 * BPS)
-    GET_SSE(4 * BPS, 4 + 4 * BPS, 5 * BPS, 4 + 5 * BPS)
-    GET_SSE(6 * BPS, 4 + 6 * BPS, 7 * BPS, 4 + 7 * BPS)
-    "mflo   %[count]                                   \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [count]"=&r"(count)
-    : [a]"r"(a), [b]"r"(b)
-    : "memory", "hi", "lo"
-  );
-  return count;
-}
-
-static int SSE4x4_MIPSdspR2(const uint8_t* a, const uint8_t* b) {
-  int count;
-  int temp0, temp1, temp2, temp3;
-  __asm__ volatile (
-    "mult   $zero,    $zero                            \n\t"
-    GET_SSE(0 * BPS, 1 * BPS, 2 * BPS, 3 * BPS)
-    "mflo   %[count]                                   \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [count]"=&r"(count)
-    : [a]"r"(a), [b]"r"(b)
-    : "memory", "hi", "lo"
-  );
-  return count;
-}
-
-#undef GET_SSE
-#undef GET_SSE_INNER
-
-#endif  // !WORK_AROUND_GCC
-
-#undef FILL_8_OR_16
-#undef FILL_PART
-#undef OUTPUT_EARLY_CLOBBER_REGS_17
-#undef MUL_HALF
-#undef ABS_X8
-#undef ADD_SUB_HALVES_X4
-
-//------------------------------------------------------------------------------
-// Quantization
-//
-
-// macro for one pass through for loop in QuantizeBlock reading 2 values at time
-// QUANTDIV macro inlined
-// J - offset in bytes (kZigzag[n] * 2)
-// K - offset in bytes (kZigzag[n] * 4)
-// N - offset in bytes (n * 2)
-// N1 - offset in bytes ((n + 1) * 2)
-#define QUANTIZE_ONE(J, K, N, N1)                                         \
-  "ulw         %[temp1],     " #J "(%[ppin])                 \n\t"        \
-  "ulw         %[temp2],     " #J "(%[ppsharpen])            \n\t"        \
-  "lhu         %[temp3],     " #K "(%[ppzthresh])            \n\t"        \
-  "lhu         %[temp6],     " #K "+4(%[ppzthresh])          \n\t"        \
-  "absq_s.ph   %[temp4],     %[temp1]                        \n\t"        \
-  "ins         %[temp3],     %[temp6],         16,       16  \n\t"        \
-  "addu.ph     %[coeff],     %[temp4],         %[temp2]      \n\t"        \
-  "shra.ph     %[sign],      %[temp1],         15            \n\t"        \
-  "li          %[level],     0x10001                         \n\t"        \
-  "cmp.lt.ph   %[temp3],     %[coeff]                        \n\t"        \
-  "lhu         %[temp1],     " #J "(%[ppiq])                 \n\t"        \
-  "pick.ph     %[temp5],     %[level],         $0            \n\t"        \
-  "lw          %[temp2],     " #K "(%[ppbias])               \n\t"        \
-  "beqz        %[temp5],     0f                              \n\t"        \
-  "lhu         %[temp3],     " #J "(%[ppq])                  \n\t"        \
-  "beq         %[temp5],     %[level],         1f            \n\t"        \
-  "andi        %[temp5],     %[temp5],         0x1           \n\t"        \
-  "andi        %[temp4],     %[coeff],         0xffff        \n\t"        \
-  "beqz        %[temp5],     2f                              \n\t"        \
-  "mul         %[level],     %[temp4],         %[temp1]      \n\t"        \
-  "sh          $0,           " #J "+2(%[ppin])               \n\t"        \
-  "sh          $0,           " #N1 "(%[pout])                \n\t"        \
-  "addu        %[level],     %[level],         %[temp2]      \n\t"        \
-  "sra         %[level],     %[level],         17            \n\t"        \
-  "slt         %[temp4],     %[max_level],     %[level]      \n\t"        \
-  "movn        %[level],     %[max_level],     %[temp4]      \n\t"        \
-  "andi        %[temp6],     %[sign],          0xffff        \n\t"        \
-  "xor         %[level],     %[level],         %[temp6]      \n\t"        \
-  "subu        %[level],     %[level],         %[temp6]      \n\t"        \
-  "mul         %[temp5],     %[level],         %[temp3]      \n\t"        \
-  "or          %[ret],       %[ret],           %[level]      \n\t"        \
-  "sh          %[level],     " #N "(%[pout])                 \n\t"        \
-  "sh          %[temp5],     " #J "(%[ppin])                 \n\t"        \
-  "j           3f                                            \n\t"        \
-"2:                                                          \n\t"        \
-  "lhu         %[temp1],     " #J "+2(%[ppiq])               \n\t"        \
-  "srl         %[temp5],     %[coeff],         16            \n\t"        \
-  "mul         %[level],     %[temp5],         %[temp1]      \n\t"        \
-  "lw          %[temp2],     " #K "+4(%[ppbias])             \n\t"        \
-  "lhu         %[temp3],     " #J "+2(%[ppq])                \n\t"        \
-  "addu        %[level],     %[level],         %[temp2]      \n\t"        \
-  "sra         %[level],     %[level],         17            \n\t"        \
-  "srl         %[temp6],     %[sign],          16            \n\t"        \
-  "slt         %[temp4],     %[max_level],     %[level]      \n\t"        \
-  "movn        %[level],     %[max_level],     %[temp4]      \n\t"        \
-  "xor         %[level],     %[level],         %[temp6]      \n\t"        \
-  "subu        %[level],     %[level],         %[temp6]      \n\t"        \
-  "mul         %[temp5],     %[level],         %[temp3]      \n\t"        \
-  "sh          $0,           " #J "(%[ppin])                 \n\t"        \
-  "sh          $0,           " #N "(%[pout])                 \n\t"        \
-  "or          %[ret],       %[ret],           %[level]      \n\t"        \
-  "sh          %[temp5],     " #J "+2(%[ppin])               \n\t"        \
-  "sh          %[level],     " #N1 "(%[pout])                \n\t"        \
-  "j           3f                                            \n\t"        \
-"1:                                                          \n\t"        \
-  "lhu         %[temp1],     " #J "(%[ppiq])                 \n\t"        \
-  "lw          %[temp2],     " #K "(%[ppbias])               \n\t"        \
-  "ulw         %[temp3],     " #J "(%[ppq])                  \n\t"        \
-  "andi        %[temp5],     %[coeff],         0xffff        \n\t"        \
-  "srl         %[temp0],     %[coeff],         16            \n\t"        \
-  "lhu         %[temp6],     " #J "+2(%[ppiq])               \n\t"        \
-  "lw          %[coeff],     " #K "+4(%[ppbias])             \n\t"        \
-  "mul         %[level],     %[temp5],         %[temp1]      \n\t"        \
-  "mul         %[temp4],     %[temp0],         %[temp6]      \n\t"        \
-  "addu        %[level],     %[level],         %[temp2]      \n\t"        \
-  "addu        %[temp4],     %[temp4],         %[coeff]      \n\t"        \
-  "precrq.ph.w %[level],     %[temp4],         %[level]      \n\t"        \
-  "shra.ph     %[level],     %[level],         1             \n\t"        \
-  "cmp.lt.ph   %[max_level1],%[level]                        \n\t"        \
-  "pick.ph     %[level],     %[max_level],     %[level]      \n\t"        \
-  "xor         %[level],     %[level],         %[sign]       \n\t"        \
-  "subu.ph     %[level],     %[level],         %[sign]       \n\t"        \
-  "mul.ph      %[temp3],     %[level],         %[temp3]      \n\t"        \
-  "or          %[ret],       %[ret],           %[level]      \n\t"        \
-  "sh          %[level],     " #N "(%[pout])                 \n\t"        \
-  "srl         %[level],     %[level],         16            \n\t"        \
-  "sh          %[level],     " #N1 "(%[pout])                \n\t"        \
-  "usw         %[temp3],     " #J "(%[ppin])                 \n\t"        \
-  "j           3f                                            \n\t"        \
-"0:                                                          \n\t"        \
-  "sh          $0,           " #N "(%[pout])                 \n\t"        \
-  "sh          $0,           " #N1 "(%[pout])                \n\t"        \
-  "usw         $0,           " #J "(%[ppin])                 \n\t"        \
-"3:                                                          \n\t"
-
-static int QuantizeBlock_MIPSdspR2(int16_t in[16], int16_t out[16],
-                                   const VP8Matrix* const mtx) {
-  int temp0, temp1, temp2, temp3, temp4, temp5,temp6;
-  int sign, coeff, level;
-  int max_level = MAX_LEVEL;
-  int max_level1 = max_level << 16 | max_level;
-  int ret = 0;
-
-  int16_t* ppin             = &in[0];
-  int16_t* pout             = &out[0];
-  const uint16_t* ppsharpen = &mtx->sharpen_[0];
-  const uint32_t* ppzthresh = &mtx->zthresh_[0];
-  const uint16_t* ppq       = &mtx->q_[0];
-  const uint16_t* ppiq      = &mtx->iq_[0];
-  const uint32_t* ppbias    = &mtx->bias_[0];
-
-  __asm__ volatile (
-    QUANTIZE_ONE( 0,  0,  0,  2)
-    QUANTIZE_ONE( 4,  8, 10, 12)
-    QUANTIZE_ONE( 8, 16,  4,  8)
-    QUANTIZE_ONE(12, 24, 14, 24)
-    QUANTIZE_ONE(16, 32,  6, 16)
-    QUANTIZE_ONE(20, 40, 22, 26)
-    QUANTIZE_ONE(24, 48, 18, 20)
-    QUANTIZE_ONE(28, 56, 28, 30)
-
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),
-      [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [sign]"=&r"(sign), [coeff]"=&r"(coeff),
-      [level]"=&r"(level), [temp6]"=&r"(temp6), [ret]"+&r"(ret)
-    : [ppin]"r"(ppin), [pout]"r"(pout), [max_level1]"r"(max_level1),
-      [ppiq]"r"(ppiq), [max_level]"r"(max_level),
-      [ppbias]"r"(ppbias), [ppzthresh]"r"(ppzthresh),
-      [ppsharpen]"r"(ppsharpen), [ppq]"r"(ppq)
-    : "memory", "hi", "lo"
-  );
-
-  return (ret != 0);
-}
-
-static int Quantize2Blocks_MIPSdspR2(int16_t in[32], int16_t out[32],
-                                     const VP8Matrix* const mtx) {
-  int nz;
-  nz  = QuantizeBlock_MIPSdspR2(in + 0 * 16, out + 0 * 16, mtx) << 0;
-  nz |= QuantizeBlock_MIPSdspR2(in + 1 * 16, out + 1 * 16, mtx) << 1;
-  return nz;
-}
-
-#undef QUANTIZE_ONE
-
-// macro for one horizontal pass in FTransformWHT
-// temp0..temp7 holds tmp[0]..tmp[15]
-// A, B, C, D - offset in bytes to load from in buffer
-// TEMP0, TEMP1 - registers for corresponding tmp elements
-#define HORIZONTAL_PASS_WHT(A, B, C, D, TEMP0, TEMP1)                          \
-  "lh              %[" #TEMP0 "],  " #A "(%[in])            \n\t"              \
-  "lh              %[" #TEMP1 "],  " #B "(%[in])            \n\t"              \
-  "lh              %[temp8],     " #C "(%[in])              \n\t"              \
-  "lh              %[temp9],     " #D "(%[in])              \n\t"              \
-  "ins             %[" #TEMP1 "],  %[" #TEMP0 "],  16,  16  \n\t"              \
-  "ins             %[temp9],     %[temp8],     16,  16      \n\t"              \
-  "subq.ph         %[temp8],     %[" #TEMP1 "],  %[temp9]   \n\t"              \
-  "addq.ph         %[temp9],     %[" #TEMP1 "],  %[temp9]   \n\t"              \
-  "precrq.ph.w     %[" #TEMP0 "],  %[temp8],     %[temp9]   \n\t"              \
-  "append          %[temp8],     %[temp9],     16           \n\t"              \
-  "subq.ph         %[" #TEMP1 "],  %[" #TEMP0 "],  %[temp8] \n\t"              \
-  "addq.ph         %[" #TEMP0 "],  %[" #TEMP0 "],  %[temp8] \n\t"              \
-  "rotr            %[" #TEMP1 "],  %[" #TEMP1 "],  16       \n\t"
-
-// macro for one vertical pass in FTransformWHT
-// temp0..temp7 holds tmp[0]..tmp[15]
-// A, B, C, D - offsets in bytes to store to out buffer
-// TEMP0, TEMP2, TEMP4 and TEMP6 - registers for corresponding tmp elements
-#define VERTICAL_PASS_WHT(A, B, C, D, TEMP0, TEMP2, TEMP4, TEMP6)              \
-  "addq.ph         %[temp8],     %[" #TEMP0 "],  %[" #TEMP4 "]    \n\t"        \
-  "addq.ph         %[temp9],     %[" #TEMP2 "],  %[" #TEMP6 "]    \n\t"        \
-  "subq.ph         %[" #TEMP2 "],  %[" #TEMP2 "],  %[" #TEMP6 "]  \n\t"        \
-  "subq.ph         %[" #TEMP6 "],  %[" #TEMP0 "],  %[" #TEMP4 "]  \n\t"        \
-  "addqh.ph        %[" #TEMP0 "],  %[temp8],     %[temp9]         \n\t"        \
-  "subqh.ph        %[" #TEMP4 "],  %[" #TEMP6 "],  %[" #TEMP2 "]  \n\t"        \
-  "addqh.ph        %[" #TEMP2 "],  %[" #TEMP2 "],  %[" #TEMP6 "]  \n\t"        \
-  "subqh.ph        %[" #TEMP6 "],  %[temp8],     %[temp9]         \n\t"        \
-  "usw             %[" #TEMP0 "],  " #A "(%[out])                 \n\t"        \
-  "usw             %[" #TEMP2 "],  " #B "(%[out])                 \n\t"        \
-  "usw             %[" #TEMP4 "],  " #C "(%[out])                 \n\t"        \
-  "usw             %[" #TEMP6 "],  " #D "(%[out])                 \n\t"
-
-static void FTransformWHT_MIPSdspR2(const int16_t* in, int16_t* out) {
-  int temp0, temp1, temp2, temp3, temp4;
-  int temp5, temp6, temp7, temp8, temp9;
-
-  __asm__ volatile (
-    HORIZONTAL_PASS_WHT(  0,  32,  64,  96, temp0, temp1)
-    HORIZONTAL_PASS_WHT(128, 160, 192, 224, temp2, temp3)
-    HORIZONTAL_PASS_WHT(256, 288, 320, 352, temp4, temp5)
-    HORIZONTAL_PASS_WHT(384, 416, 448, 480, temp6, temp7)
-    VERTICAL_PASS_WHT(0,  8, 16, 24, temp0, temp2, temp4, temp6)
-    VERTICAL_PASS_WHT(4, 12, 20, 28, temp1, temp3, temp5, temp7)
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8),
-      [temp9]"=&r"(temp9)
-    : [in]"r"(in), [out]"r"(out)
-    : "memory"
-  );
-}
-
-#undef VERTICAL_PASS_WHT
-#undef HORIZONTAL_PASS_WHT
-
-// macro for converting coefficients to bin
-// convert 8 coeffs at time
-// A, B, C, D - offsets in bytes to load from out buffer
-#define CONVERT_COEFFS_TO_BIN(A, B, C, D)                                      \
-  "ulw        %[temp0],  " #A "(%[out])                \n\t"                   \
-  "ulw        %[temp1],  " #B "(%[out])                \n\t"                   \
-  "ulw        %[temp2],  " #C "(%[out])                \n\t"                   \
-  "ulw        %[temp3],  " #D "(%[out])                \n\t"                   \
-  "absq_s.ph  %[temp0],  %[temp0]                      \n\t"                   \
-  "absq_s.ph  %[temp1],  %[temp1]                      \n\t"                   \
-  "absq_s.ph  %[temp2],  %[temp2]                      \n\t"                   \
-  "absq_s.ph  %[temp3],  %[temp3]                      \n\t"                   \
-  "shra.ph    %[temp0],  %[temp0],    3                \n\t"                   \
-  "shra.ph    %[temp1],  %[temp1],    3                \n\t"                   \
-  "shra.ph    %[temp2],  %[temp2],    3                \n\t"                   \
-  "shra.ph    %[temp3],  %[temp3],    3                \n\t"                   \
-  "shll_s.ph  %[temp0],  %[temp0],    10               \n\t"                   \
-  "shll_s.ph  %[temp1],  %[temp1],    10               \n\t"                   \
-  "shll_s.ph  %[temp2],  %[temp2],    10               \n\t"                   \
-  "shll_s.ph  %[temp3],  %[temp3],    10               \n\t"                   \
-  "shrl.ph    %[temp0],  %[temp0],    10               \n\t"                   \
-  "shrl.ph    %[temp1],  %[temp1],    10               \n\t"                   \
-  "shrl.ph    %[temp2],  %[temp2],    10               \n\t"                   \
-  "shrl.ph    %[temp3],  %[temp3],    10               \n\t"                   \
-  "shll.ph    %[temp0],  %[temp0],    2                \n\t"                   \
-  "shll.ph    %[temp1],  %[temp1],    2                \n\t"                   \
-  "shll.ph    %[temp2],  %[temp2],    2                \n\t"                   \
-  "shll.ph    %[temp3],  %[temp3],    2                \n\t"                   \
-  "ext        %[temp4],  %[temp0],    0,       16      \n\t"                   \
-  "ext        %[temp0],  %[temp0],    16,      16      \n\t"                   \
-  "addu       %[temp4],  %[temp4],    %[dist]          \n\t"                   \
-  "addu       %[temp0],  %[temp0],    %[dist]          \n\t"                   \
-  "ext        %[temp5],  %[temp1],    0,       16      \n\t"                   \
-  "lw         %[temp8],  0(%[temp4])                   \n\t"                   \
-  "ext        %[temp1],  %[temp1],    16,      16      \n\t"                   \
-  "addu       %[temp5],  %[temp5],    %[dist]          \n\t"                   \
-  "addiu      %[temp8],  %[temp8],    1                \n\t"                   \
-  "sw         %[temp8],  0(%[temp4])                   \n\t"                   \
-  "lw         %[temp8],  0(%[temp0])                   \n\t"                   \
-  "addu       %[temp1],  %[temp1],    %[dist]          \n\t"                   \
-  "ext        %[temp6],  %[temp2],    0,       16      \n\t"                   \
-  "addiu      %[temp8],  %[temp8],    1                \n\t"                   \
-  "sw         %[temp8],  0(%[temp0])                   \n\t"                   \
-  "lw         %[temp8],  0(%[temp5])                   \n\t"                   \
-  "ext        %[temp2],  %[temp2],    16,      16      \n\t"                   \
-  "addu       %[temp6],  %[temp6],    %[dist]          \n\t"                   \
-  "addiu      %[temp8],  %[temp8],    1                \n\t"                   \
-  "sw         %[temp8],  0(%[temp5])                   \n\t"                   \
-  "lw         %[temp8],  0(%[temp1])                   \n\t"                   \
-  "addu       %[temp2],  %[temp2],    %[dist]          \n\t"                   \
-  "ext        %[temp7],  %[temp3],    0,       16      \n\t"                   \
-  "addiu      %[temp8],  %[temp8],    1                \n\t"                   \
-  "sw         %[temp8],  0(%[temp1])                   \n\t"                   \
-  "lw         %[temp8],  0(%[temp6])                   \n\t"                   \
-  "ext        %[temp3],  %[temp3],    16,      16      \n\t"                   \
-  "addu       %[temp7],  %[temp7],    %[dist]          \n\t"                   \
-  "addiu      %[temp8],  %[temp8],    1                \n\t"                   \
-  "sw         %[temp8],  0(%[temp6])                   \n\t"                   \
-  "lw         %[temp8],  0(%[temp2])                   \n\t"                   \
-  "addu       %[temp3],  %[temp3],    %[dist]          \n\t"                   \
-  "addiu      %[temp8],  %[temp8],    1                \n\t"                   \
-  "sw         %[temp8],  0(%[temp2])                   \n\t"                   \
-  "lw         %[temp8],  0(%[temp7])                   \n\t"                   \
-  "addiu      %[temp8],  %[temp8],    1                \n\t"                   \
-  "sw         %[temp8],  0(%[temp7])                   \n\t"                   \
-  "lw         %[temp8],  0(%[temp3])                   \n\t"                   \
-  "addiu      %[temp8],  %[temp8],    1                \n\t"                   \
-  "sw         %[temp8],  0(%[temp3])                   \n\t"
-
-static void CollectHistogram_MIPSdspR2(const uint8_t* ref, const uint8_t* pred,
-                                       int start_block, int end_block,
-                                       VP8Histogram* const histo) {
-  int j;
-  int distribution[MAX_COEFF_THRESH + 1] = { 0 };
-  const int max_coeff = (MAX_COEFF_THRESH << 16) + MAX_COEFF_THRESH;
-  for (j = start_block; j < end_block; ++j) {
-    int16_t out[16];
-    int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;
-
-    VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out);
-
-    // Convert coefficients to bin.
-    __asm__ volatile (
-      CONVERT_COEFFS_TO_BIN( 0,  4,  8, 12)
-      CONVERT_COEFFS_TO_BIN(16, 20, 24, 28)
-      : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-        [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-        [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8)
-      : [dist]"r"(distribution), [out]"r"(out), [max_coeff]"r"(max_coeff)
-      : "memory"
-    );
-  }
-  VP8SetHistogramData(distribution, histo);
-}
-
-#undef CONVERT_COEFFS_TO_BIN
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspInitMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitMIPSdspR2(void) {
-  VP8FTransform = FTransform_MIPSdspR2;
-  VP8FTransformWHT = FTransformWHT_MIPSdspR2;
-  VP8ITransform = ITransform_MIPSdspR2;
-
-  VP8TDisto4x4 = Disto4x4_MIPSdspR2;
-  VP8TDisto16x16 = Disto16x16_MIPSdspR2;
-
-  VP8EncPredLuma16 = Intra16Preds_MIPSdspR2;
-  VP8EncPredChroma8 = IntraChromaPreds_MIPSdspR2;
-  VP8EncPredLuma4 = Intra4Preds_MIPSdspR2;
-
-#if !defined(WORK_AROUND_GCC)
-  VP8SSE16x16 = SSE16x16_MIPSdspR2;
-  VP8SSE8x8 = SSE8x8_MIPSdspR2;
-  VP8SSE16x8 = SSE16x8_MIPSdspR2;
-  VP8SSE4x4 = SSE4x4_MIPSdspR2;
-#endif
-
-  VP8EncQuantizeBlock = QuantizeBlock_MIPSdspR2;
-  VP8EncQuantize2Blocks = Quantize2Blocks_MIPSdspR2;
-
-  VP8CollectHistogram = CollectHistogram_MIPSdspR2;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(VP8EncDspInitMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/enc_msa.c b/ios/Pods/libwebp/src/dsp/enc_msa.c
deleted file mode 100644
index 6f85add..0000000
--- a/ios/Pods/libwebp/src/dsp/enc_msa.c
+++ /dev/null
@@ -1,896 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MSA version of encoder dsp functions.
-//
-// Author:  Prashant Patil   (prashant.patil@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MSA)
-
-#include <stdlib.h>
-#include "src/dsp/msa_macro.h"
-#include "src/enc/vp8i_enc.h"
-
-//------------------------------------------------------------------------------
-// Transforms
-
-#define IDCT_1D_W(in0, in1, in2, in3, out0, out1, out2, out3) do {  \
-  v4i32 a1_m, b1_m, c1_m, d1_m;                                     \
-  const v4i32 cospi8sqrt2minus1 = __msa_fill_w(20091);              \
-  const v4i32 sinpi8sqrt2 = __msa_fill_w(35468);                    \
-  v4i32 c_tmp1_m = in1 * sinpi8sqrt2;                               \
-  v4i32 c_tmp2_m = in3 * cospi8sqrt2minus1;                         \
-  v4i32 d_tmp1_m = in1 * cospi8sqrt2minus1;                         \
-  v4i32 d_tmp2_m = in3 * sinpi8sqrt2;                               \
-                                                                    \
-  ADDSUB2(in0, in2, a1_m, b1_m);                                    \
-  SRAI_W2_SW(c_tmp1_m, c_tmp2_m, 16);                               \
-  c_tmp2_m = c_tmp2_m + in3;                                        \
-  c1_m = c_tmp1_m - c_tmp2_m;                                       \
-  SRAI_W2_SW(d_tmp1_m, d_tmp2_m, 16);                               \
-  d_tmp1_m = d_tmp1_m + in1;                                        \
-  d1_m = d_tmp1_m + d_tmp2_m;                                       \
-  BUTTERFLY_4(a1_m, b1_m, c1_m, d1_m, out0, out1, out2, out3);      \
-} while (0)
-
-static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in,
-                                      uint8_t* dst) {
-  v8i16 input0, input1;
-  v4i32 in0, in1, in2, in3, hz0, hz1, hz2, hz3, vt0, vt1, vt2, vt3;
-  v4i32 res0, res1, res2, res3;
-  v16i8 dest0, dest1, dest2, dest3;
-  const v16i8 zero = { 0 };
-
-  LD_SH2(in, 8, input0, input1);
-  UNPCK_SH_SW(input0, in0, in1);
-  UNPCK_SH_SW(input1, in2, in3);
-  IDCT_1D_W(in0, in1, in2, in3, hz0, hz1, hz2, hz3);
-  TRANSPOSE4x4_SW_SW(hz0, hz1, hz2, hz3, hz0, hz1, hz2, hz3);
-  IDCT_1D_W(hz0, hz1, hz2, hz3, vt0, vt1, vt2, vt3);
-  SRARI_W4_SW(vt0, vt1, vt2, vt3, 3);
-  TRANSPOSE4x4_SW_SW(vt0, vt1, vt2, vt3, vt0, vt1, vt2, vt3);
-  LD_SB4(ref, BPS, dest0, dest1, dest2, dest3);
-  ILVR_B4_SW(zero, dest0, zero, dest1, zero, dest2, zero, dest3,
-             res0, res1, res2, res3);
-  ILVR_H4_SW(zero, res0, zero, res1, zero, res2, zero, res3,
-             res0, res1, res2, res3);
-  ADD4(res0, vt0, res1, vt1, res2, vt2, res3, vt3, res0, res1, res2, res3);
-  CLIP_SW4_0_255(res0, res1, res2, res3);
-  PCKEV_B2_SW(res0, res1, res2, res3, vt0, vt1);
-  res0 = (v4i32)__msa_pckev_b((v16i8)vt0, (v16i8)vt1);
-  ST4x4_UB(res0, res0, 3, 2, 1, 0, dst, BPS);
-}
-
-static void ITransform_MSA(const uint8_t* ref, const int16_t* in, uint8_t* dst,
-                           int do_two) {
-  ITransformOne(ref, in, dst);
-  if (do_two) {
-    ITransformOne(ref + 4, in + 16, dst + 4);
-  }
-}
-
-static void FTransform_MSA(const uint8_t* src, const uint8_t* ref,
-                           int16_t* out) {
-  uint64_t out0, out1, out2, out3;
-  uint32_t in0, in1, in2, in3;
-  v4i32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  v8i16 t0, t1, t2, t3;
-  v16u8 srcl0, srcl1, src0 = { 0 }, src1 = { 0 };
-  const v8i16 mask0 = { 0, 4, 8, 12, 1, 5, 9, 13 };
-  const v8i16 mask1 = { 3, 7, 11, 15, 2, 6, 10, 14 };
-  const v8i16 mask2 = { 4, 0, 5, 1, 6, 2, 7, 3 };
-  const v8i16 mask3 = { 0, 4, 1, 5, 2, 6, 3, 7 };
-  const v8i16 cnst0 = { 2217, -5352, 2217, -5352, 2217, -5352, 2217, -5352 };
-  const v8i16 cnst1 = { 5352, 2217, 5352, 2217, 5352, 2217, 5352, 2217 };
-
-  LW4(src, BPS, in0, in1, in2, in3);
-  INSERT_W4_UB(in0, in1, in2, in3, src0);
-  LW4(ref, BPS, in0, in1, in2, in3);
-  INSERT_W4_UB(in0, in1, in2, in3, src1);
-  ILVRL_B2_UB(src0, src1, srcl0, srcl1);
-  HSUB_UB2_SH(srcl0, srcl1, t0, t1);
-  VSHF_H2_SH(t0, t1, t0, t1, mask0, mask1, t2, t3);
-  ADDSUB2(t2, t3, t0, t1);
-  t0 = SRLI_H(t0, 3);
-  VSHF_H2_SH(t0, t0, t1, t1, mask2, mask3, t3, t2);
-  tmp0 = __msa_hadd_s_w(t3, t3);
-  tmp2 = __msa_hsub_s_w(t3, t3);
-  FILL_W2_SW(1812, 937, tmp1, tmp3);
-  DPADD_SH2_SW(t2, t2, cnst0, cnst1, tmp3, tmp1);
-  SRAI_W2_SW(tmp1, tmp3, 9);
-  PCKEV_H2_SH(tmp1, tmp0, tmp3, tmp2, t0, t1);
-  VSHF_H2_SH(t0, t1, t0, t1, mask0, mask1, t2, t3);
-  ADDSUB2(t2, t3, t0, t1);
-  VSHF_H2_SH(t0, t0, t1, t1, mask2, mask3, t3, t2);
-  tmp0 = __msa_hadd_s_w(t3, t3);
-  tmp2 = __msa_hsub_s_w(t3, t3);
-  ADDVI_W2_SW(tmp0, 7, tmp2, 7, tmp0, tmp2);
-  SRAI_W2_SW(tmp0, tmp2, 4);
-  FILL_W2_SW(12000, 51000, tmp1, tmp3);
-  DPADD_SH2_SW(t2, t2, cnst0, cnst1, tmp3, tmp1);
-  SRAI_W2_SW(tmp1, tmp3, 16);
-  UNPCK_R_SH_SW(t1, tmp4);
-  tmp5 = __msa_ceqi_w(tmp4, 0);
-  tmp4 = (v4i32)__msa_nor_v((v16u8)tmp5, (v16u8)tmp5);
-  tmp5 = __msa_fill_w(1);
-  tmp5 = (v4i32)__msa_and_v((v16u8)tmp5, (v16u8)tmp4);
-  tmp1 += tmp5;
-  PCKEV_H2_SH(tmp1, tmp0, tmp3, tmp2, t0, t1);
-  out0 = __msa_copy_s_d((v2i64)t0, 0);
-  out1 = __msa_copy_s_d((v2i64)t0, 1);
-  out2 = __msa_copy_s_d((v2i64)t1, 0);
-  out3 = __msa_copy_s_d((v2i64)t1, 1);
-  SD4(out0, out1, out2, out3, out, 8);
-}
-
-static void FTransformWHT_MSA(const int16_t* in, int16_t* out) {
-  v8i16 in0 = { 0 };
-  v8i16 in1 = { 0 };
-  v8i16 tmp0, tmp1, tmp2, tmp3;
-  v8i16 out0, out1;
-  const v8i16 mask0 = { 0, 1, 2, 3, 8, 9, 10, 11 };
-  const v8i16 mask1 = { 4, 5, 6, 7, 12, 13, 14, 15 };
-  const v8i16 mask2 = { 0, 4, 8, 12, 1, 5, 9, 13 };
-  const v8i16 mask3 = { 3, 7, 11, 15, 2, 6, 10, 14 };
-
-  in0 = __msa_insert_h(in0, 0, in[  0]);
-  in0 = __msa_insert_h(in0, 1, in[ 64]);
-  in0 = __msa_insert_h(in0, 2, in[128]);
-  in0 = __msa_insert_h(in0, 3, in[192]);
-  in0 = __msa_insert_h(in0, 4, in[ 16]);
-  in0 = __msa_insert_h(in0, 5, in[ 80]);
-  in0 = __msa_insert_h(in0, 6, in[144]);
-  in0 = __msa_insert_h(in0, 7, in[208]);
-  in1 = __msa_insert_h(in1, 0, in[ 48]);
-  in1 = __msa_insert_h(in1, 1, in[112]);
-  in1 = __msa_insert_h(in1, 2, in[176]);
-  in1 = __msa_insert_h(in1, 3, in[240]);
-  in1 = __msa_insert_h(in1, 4, in[ 32]);
-  in1 = __msa_insert_h(in1, 5, in[ 96]);
-  in1 = __msa_insert_h(in1, 6, in[160]);
-  in1 = __msa_insert_h(in1, 7, in[224]);
-  ADDSUB2(in0, in1, tmp0, tmp1);
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3);
-  ADDSUB2(tmp2, tmp3, tmp0, tmp1);
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask2, mask3, in0, in1);
-  ADDSUB2(in0, in1, tmp0, tmp1);
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3);
-  ADDSUB2(tmp2, tmp3, out0, out1);
-  SRAI_H2_SH(out0, out1, 1);
-  ST_SH2(out0, out1, out, 8);
-}
-
-static int TTransform_MSA(const uint8_t* in, const uint16_t* w) {
-  int sum;
-  uint32_t in0_m, in1_m, in2_m, in3_m;
-  v16i8 src0 = { 0 };
-  v8i16 in0, in1, tmp0, tmp1, tmp2, tmp3;
-  v4i32 dst0, dst1;
-  const v16i8 zero = { 0 };
-  const v8i16 mask0 = { 0, 1, 2, 3, 8, 9, 10, 11 };
-  const v8i16 mask1 = { 4, 5, 6, 7, 12, 13, 14, 15 };
-  const v8i16 mask2 = { 0, 4, 8, 12, 1, 5, 9, 13 };
-  const v8i16 mask3 = { 3, 7, 11, 15, 2, 6, 10, 14 };
-
-  LW4(in, BPS, in0_m, in1_m, in2_m, in3_m);
-  INSERT_W4_SB(in0_m, in1_m, in2_m, in3_m, src0);
-  ILVRL_B2_SH(zero, src0, tmp0, tmp1);
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask2, mask3, in0, in1);
-  ADDSUB2(in0, in1, tmp0, tmp1);
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3);
-  ADDSUB2(tmp2, tmp3, tmp0, tmp1);
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask2, mask3, in0, in1);
-  ADDSUB2(in0, in1, tmp0, tmp1);
-  VSHF_H2_SH(tmp0, tmp1, tmp0, tmp1, mask0, mask1, tmp2, tmp3);
-  ADDSUB2(tmp2, tmp3, tmp0, tmp1);
-  tmp0 = __msa_add_a_h(tmp0, (v8i16)zero);
-  tmp1 = __msa_add_a_h(tmp1, (v8i16)zero);
-  LD_SH2(w, 8, tmp2, tmp3);
-  DOTP_SH2_SW(tmp0, tmp1, tmp2, tmp3, dst0, dst1);
-  dst0 = dst0 + dst1;
-  sum = HADD_SW_S32(dst0);
-  return sum;
-}
-
-static int Disto4x4_MSA(const uint8_t* const a, const uint8_t* const b,
-                        const uint16_t* const w) {
-  const int sum1 = TTransform_MSA(a, w);
-  const int sum2 = TTransform_MSA(b, w);
-  return abs(sum2 - sum1) >> 5;
-}
-
-static int Disto16x16_MSA(const uint8_t* const a, const uint8_t* const b,
-                          const uint16_t* const w) {
-  int D = 0;
-  int x, y;
-  for (y = 0; y < 16 * BPS; y += 4 * BPS) {
-    for (x = 0; x < 16; x += 4) {
-      D += Disto4x4_MSA(a + x + y, b + x + y, w);
-    }
-  }
-  return D;
-}
-
-//------------------------------------------------------------------------------
-// Histogram
-
-static void CollectHistogram_MSA(const uint8_t* ref, const uint8_t* pred,
-                                 int start_block, int end_block,
-                                 VP8Histogram* const histo) {
-  int j;
-  int distribution[MAX_COEFF_THRESH + 1] = { 0 };
-  for (j = start_block; j < end_block; ++j) {
-    int16_t out[16];
-    VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out);
-    {
-      int k;
-      v8i16 coeff0, coeff1;
-      const v8i16 zero = { 0 };
-      const v8i16 max_coeff_thr = __msa_ldi_h(MAX_COEFF_THRESH);
-      LD_SH2(&out[0], 8, coeff0, coeff1);
-      coeff0 = __msa_add_a_h(coeff0, zero);
-      coeff1 = __msa_add_a_h(coeff1, zero);
-      SRAI_H2_SH(coeff0, coeff1, 3);
-      coeff0 = __msa_min_s_h(coeff0, max_coeff_thr);
-      coeff1 = __msa_min_s_h(coeff1, max_coeff_thr);
-      ST_SH2(coeff0, coeff1, &out[0], 8);
-      for (k = 0; k < 16; ++k) {
-        ++distribution[out[k]];
-      }
-    }
-  }
-  VP8SetHistogramData(distribution, histo);
-}
-
-//------------------------------------------------------------------------------
-// Intra predictions
-
-// luma 4x4 prediction
-
-#define DST(x, y) dst[(x) + (y) * BPS]
-#define AVG3(a, b, c) (((a) + 2 * (b) + (c) + 2) >> 2)
-#define AVG2(a, b) (((a) + (b) + 1) >> 1)
-
-static WEBP_INLINE void VE4(uint8_t* dst, const uint8_t* top) {    // vertical
-  const v16u8 A1 = { 0 };
-  const uint64_t val_m = LD(top - 1);
-  const v16u8 A = (v16u8)__msa_insert_d((v2i64)A1, 0, val_m);
-  const v16u8 B = SLDI_UB(A, A, 1);
-  const v16u8 C = SLDI_UB(A, A, 2);
-  const v16u8 AC = __msa_ave_u_b(A, C);
-  const v16u8 B2 = __msa_ave_u_b(B, B);
-  const v16u8 R = __msa_aver_u_b(AC, B2);
-  const uint32_t out = __msa_copy_s_w((v4i32)R, 0);
-  SW4(out, out, out, out, dst, BPS);
-}
-
-static WEBP_INLINE void HE4(uint8_t* dst, const uint8_t* top) {    // horizontal
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  WebPUint32ToMem(dst + 0 * BPS, 0x01010101U * AVG3(X, I, J));
-  WebPUint32ToMem(dst + 1 * BPS, 0x01010101U * AVG3(I, J, K));
-  WebPUint32ToMem(dst + 2 * BPS, 0x01010101U * AVG3(J, K, L));
-  WebPUint32ToMem(dst + 3 * BPS, 0x01010101U * AVG3(K, L, L));
-}
-
-static WEBP_INLINE void DC4(uint8_t* dst, const uint8_t* top) {
-  uint32_t dc = 4;
-  int i;
-  for (i = 0; i < 4; ++i) dc += top[i] + top[-5 + i];
-  dc >>= 3;
-  dc = dc | (dc << 8) | (dc << 16) | (dc << 24);
-  SW4(dc, dc, dc, dc, dst, BPS);
-}
-
-static WEBP_INLINE void RD4(uint8_t* dst, const uint8_t* top) {
-  const v16u8 A2 = { 0 };
-  const uint64_t val_m = LD(top - 5);
-  const v16u8 A1 = (v16u8)__msa_insert_d((v2i64)A2, 0, val_m);
-  const v16u8 A = (v16u8)__msa_insert_b((v16i8)A1, 8, top[3]);
-  const v16u8 B = SLDI_UB(A, A, 1);
-  const v16u8 C = SLDI_UB(A, A, 2);
-  const v16u8 AC = __msa_ave_u_b(A, C);
-  const v16u8 B2 = __msa_ave_u_b(B, B);
-  const v16u8 R0 = __msa_aver_u_b(AC, B2);
-  const v16u8 R1 = SLDI_UB(R0, R0, 1);
-  const v16u8 R2 = SLDI_UB(R1, R1, 1);
-  const v16u8 R3 = SLDI_UB(R2, R2, 1);
-  const uint32_t val0 = __msa_copy_s_w((v4i32)R0, 0);
-  const uint32_t val1 = __msa_copy_s_w((v4i32)R1, 0);
-  const uint32_t val2 = __msa_copy_s_w((v4i32)R2, 0);
-  const uint32_t val3 = __msa_copy_s_w((v4i32)R3, 0);
-  SW4(val3, val2, val1, val0, dst, BPS);
-}
-
-static WEBP_INLINE void LD4(uint8_t* dst, const uint8_t* top) {
-  const v16u8 A1 = { 0 };
-  const uint64_t val_m = LD(top);
-  const v16u8 A = (v16u8)__msa_insert_d((v2i64)A1, 0, val_m);
-  const v16u8 B = SLDI_UB(A, A, 1);
-  const v16u8 C1 = SLDI_UB(A, A, 2);
-  const v16u8 C = (v16u8)__msa_insert_b((v16i8)C1, 6, top[7]);
-  const v16u8 AC = __msa_ave_u_b(A, C);
-  const v16u8 B2 = __msa_ave_u_b(B, B);
-  const v16u8 R0 = __msa_aver_u_b(AC, B2);
-  const v16u8 R1 = SLDI_UB(R0, R0, 1);
-  const v16u8 R2 = SLDI_UB(R1, R1, 1);
-  const v16u8 R3 = SLDI_UB(R2, R2, 1);
-  const uint32_t val0 = __msa_copy_s_w((v4i32)R0, 0);
-  const uint32_t val1 = __msa_copy_s_w((v4i32)R1, 0);
-  const uint32_t val2 = __msa_copy_s_w((v4i32)R2, 0);
-  const uint32_t val3 = __msa_copy_s_w((v4i32)R3, 0);
-  SW4(val0, val1, val2, val3, dst, BPS);
-}
-
-static WEBP_INLINE void VR4(uint8_t* dst, const uint8_t* top) {
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-  const int D = top[3];
-  DST(0, 0) = DST(1, 2) = AVG2(X, A);
-  DST(1, 0) = DST(2, 2) = AVG2(A, B);
-  DST(2, 0) = DST(3, 2) = AVG2(B, C);
-  DST(3, 0)             = AVG2(C, D);
-  DST(0, 3) =             AVG3(K, J, I);
-  DST(0, 2) =             AVG3(J, I, X);
-  DST(0, 1) = DST(1, 3) = AVG3(I, X, A);
-  DST(1, 1) = DST(2, 3) = AVG3(X, A, B);
-  DST(2, 1) = DST(3, 3) = AVG3(A, B, C);
-  DST(3, 1) =             AVG3(B, C, D);
-}
-
-static WEBP_INLINE void VL4(uint8_t* dst, const uint8_t* top) {
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-  const int D = top[3];
-  const int E = top[4];
-  const int F = top[5];
-  const int G = top[6];
-  const int H = top[7];
-  DST(0, 0) =             AVG2(A, B);
-  DST(1, 0) = DST(0, 2) = AVG2(B, C);
-  DST(2, 0) = DST(1, 2) = AVG2(C, D);
-  DST(3, 0) = DST(2, 2) = AVG2(D, E);
-  DST(0, 1) =             AVG3(A, B, C);
-  DST(1, 1) = DST(0, 3) = AVG3(B, C, D);
-  DST(2, 1) = DST(1, 3) = AVG3(C, D, E);
-  DST(3, 1) = DST(2, 3) = AVG3(D, E, F);
-              DST(3, 2) = AVG3(E, F, G);
-              DST(3, 3) = AVG3(F, G, H);
-}
-
-static WEBP_INLINE void HU4(uint8_t* dst, const uint8_t* top) {
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  DST(0, 0) =             AVG2(I, J);
-  DST(2, 0) = DST(0, 1) = AVG2(J, K);
-  DST(2, 1) = DST(0, 2) = AVG2(K, L);
-  DST(1, 0) =             AVG3(I, J, K);
-  DST(3, 0) = DST(1, 1) = AVG3(J, K, L);
-  DST(3, 1) = DST(1, 2) = AVG3(K, L, L);
-  DST(3, 2) = DST(2, 2) =
-  DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L;
-}
-
-static WEBP_INLINE void HD4(uint8_t* dst, const uint8_t* top) {
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-  DST(0, 0) = DST(2, 1) = AVG2(I, X);
-  DST(0, 1) = DST(2, 2) = AVG2(J, I);
-  DST(0, 2) = DST(2, 3) = AVG2(K, J);
-  DST(0, 3)             = AVG2(L, K);
-  DST(3, 0)             = AVG3(A, B, C);
-  DST(2, 0)             = AVG3(X, A, B);
-  DST(1, 0) = DST(3, 1) = AVG3(I, X, A);
-  DST(1, 1) = DST(3, 2) = AVG3(J, I, X);
-  DST(1, 2) = DST(3, 3) = AVG3(K, J, I);
-  DST(1, 3)             = AVG3(L, K, J);
-}
-
-static WEBP_INLINE void TM4(uint8_t* dst, const uint8_t* top) {
-  const v16i8 zero = { 0 };
-  const v8i16 TL = (v8i16)__msa_fill_h(top[-1]);
-  const v8i16 L0 = (v8i16)__msa_fill_h(top[-2]);
-  const v8i16 L1 = (v8i16)__msa_fill_h(top[-3]);
-  const v8i16 L2 = (v8i16)__msa_fill_h(top[-4]);
-  const v8i16 L3 = (v8i16)__msa_fill_h(top[-5]);
-  const v16u8 T1 = LD_UB(top);
-  const v8i16 T  = (v8i16)__msa_ilvr_b(zero, (v16i8)T1);
-  const v8i16 d = T - TL;
-  v8i16 r0, r1, r2, r3;
-  ADD4(d, L0, d, L1, d, L2, d, L3, r0, r1, r2, r3);
-  CLIP_SH4_0_255(r0, r1, r2, r3);
-  PCKEV_ST4x4_UB(r0, r1, r2, r3, dst, BPS);
-}
-
-#undef DST
-#undef AVG3
-#undef AVG2
-
-static void Intra4Preds_MSA(uint8_t* dst, const uint8_t* top) {
-  DC4(I4DC4 + dst, top);
-  TM4(I4TM4 + dst, top);
-  VE4(I4VE4 + dst, top);
-  HE4(I4HE4 + dst, top);
-  RD4(I4RD4 + dst, top);
-  VR4(I4VR4 + dst, top);
-  LD4(I4LD4 + dst, top);
-  VL4(I4VL4 + dst, top);
-  HD4(I4HD4 + dst, top);
-  HU4(I4HU4 + dst, top);
-}
-
-// luma 16x16 prediction
-
-#define STORE16x16(out, dst) do {                                        \
-    ST_UB8(out, out, out, out, out, out, out, out, dst + 0 * BPS, BPS);  \
-    ST_UB8(out, out, out, out, out, out, out, out, dst + 8 * BPS, BPS);  \
-} while (0)
-
-static WEBP_INLINE void VerticalPred16x16(uint8_t* dst, const uint8_t* top) {
-  if (top != NULL) {
-    const v16u8 out = LD_UB(top);
-    STORE16x16(out, dst);
-  } else {
-    const v16u8 out = (v16u8)__msa_fill_b(0x7f);
-    STORE16x16(out, dst);
-  }
-}
-
-static WEBP_INLINE void HorizontalPred16x16(uint8_t* dst,
-                                            const uint8_t* left) {
-  if (left != NULL) {
-    int j;
-    for (j = 0; j < 16; j += 4) {
-      const v16u8 L0 = (v16u8)__msa_fill_b(left[0]);
-      const v16u8 L1 = (v16u8)__msa_fill_b(left[1]);
-      const v16u8 L2 = (v16u8)__msa_fill_b(left[2]);
-      const v16u8 L3 = (v16u8)__msa_fill_b(left[3]);
-      ST_UB4(L0, L1, L2, L3, dst, BPS);
-      dst += 4 * BPS;
-      left += 4;
-    }
-  } else {
-    const v16u8 out = (v16u8)__msa_fill_b(0x81);
-    STORE16x16(out, dst);
-  }
-}
-
-static WEBP_INLINE void TrueMotion16x16(uint8_t* dst, const uint8_t* left,
-                                        const uint8_t* top) {
-  if (left != NULL) {
-    if (top != NULL) {
-      int j;
-      v8i16 d1, d2;
-      const v16i8 zero = { 0 };
-      const v8i16 TL = (v8i16)__msa_fill_h(left[-1]);
-      const v16u8 T = LD_UB(top);
-      ILVRL_B2_SH(zero, T, d1, d2);
-      SUB2(d1, TL, d2, TL, d1, d2);
-      for (j = 0; j < 16; j += 4) {
-        v16i8 t0, t1, t2, t3;
-        v8i16 r0, r1, r2, r3, r4, r5, r6, r7;
-        const v8i16 L0 = (v8i16)__msa_fill_h(left[j + 0]);
-        const v8i16 L1 = (v8i16)__msa_fill_h(left[j + 1]);
-        const v8i16 L2 = (v8i16)__msa_fill_h(left[j + 2]);
-        const v8i16 L3 = (v8i16)__msa_fill_h(left[j + 3]);
-        ADD4(d1, L0, d1, L1, d1, L2, d1, L3, r0, r1, r2, r3);
-        ADD4(d2, L0, d2, L1, d2, L2, d2, L3, r4, r5, r6, r7);
-        CLIP_SH4_0_255(r0, r1, r2, r3);
-        CLIP_SH4_0_255(r4, r5, r6, r7);
-        PCKEV_B4_SB(r4, r0, r5, r1, r6, r2, r7, r3, t0, t1, t2, t3);
-        ST_SB4(t0, t1, t2, t3, dst, BPS);
-        dst += 4 * BPS;
-      }
-    } else {
-      HorizontalPred16x16(dst, left);
-    }
-  } else {
-    if (top != NULL) {
-      VerticalPred16x16(dst, top);
-    } else {
-      const v16u8 out = (v16u8)__msa_fill_b(0x81);
-      STORE16x16(out, dst);
-    }
-  }
-}
-
-static WEBP_INLINE void DCMode16x16(uint8_t* dst, const uint8_t* left,
-                                    const uint8_t* top) {
-  int DC;
-  v16u8 out;
-  if (top != NULL && left != NULL) {
-    const v16u8 rtop = LD_UB(top);
-    const v8u16 dctop = __msa_hadd_u_h(rtop, rtop);
-    const v16u8 rleft = LD_UB(left);
-    const v8u16 dcleft = __msa_hadd_u_h(rleft, rleft);
-    const v8u16 dctemp = dctop + dcleft;
-    DC = HADD_UH_U32(dctemp);
-    DC = (DC + 16) >> 5;
-  } else if (left != NULL) {   // left but no top
-    const v16u8 rleft = LD_UB(left);
-    const v8u16 dcleft = __msa_hadd_u_h(rleft, rleft);
-    DC = HADD_UH_U32(dcleft);
-    DC = (DC + DC + 16) >> 5;
-  } else if (top != NULL) {   // top but no left
-    const v16u8 rtop = LD_UB(top);
-    const v8u16 dctop = __msa_hadd_u_h(rtop, rtop);
-    DC = HADD_UH_U32(dctop);
-    DC = (DC + DC + 16) >> 5;
-  } else {   // no top, no left, nothing.
-    DC = 0x80;
-  }
-  out = (v16u8)__msa_fill_b(DC);
-  STORE16x16(out, dst);
-}
-
-static void Intra16Preds_MSA(uint8_t* dst,
-                             const uint8_t* left, const uint8_t* top) {
-  DCMode16x16(I16DC16 + dst, left, top);
-  VerticalPred16x16(I16VE16 + dst, top);
-  HorizontalPred16x16(I16HE16 + dst, left);
-  TrueMotion16x16(I16TM16 + dst, left, top);
-}
-
-// Chroma 8x8 prediction
-
-#define CALC_DC8(in, out) do {                              \
-  const v8u16 temp0 = __msa_hadd_u_h(in, in);               \
-  const v4u32 temp1 = __msa_hadd_u_w(temp0, temp0);         \
-  const v2i64 temp2 = (v2i64)__msa_hadd_u_d(temp1, temp1);  \
-  const v2i64 temp3 = __msa_splati_d(temp2, 1);             \
-  const v2i64 temp4 = temp3 + temp2;                        \
-  const v16i8 temp5 = (v16i8)__msa_srari_d(temp4, 4);       \
-  const v2i64 temp6 = (v2i64)__msa_splati_b(temp5, 0);      \
-  out = __msa_copy_s_d(temp6, 0);                           \
-} while (0)
-
-#define STORE8x8(out, dst) do {                 \
-  SD4(out, out, out, out, dst + 0 * BPS, BPS);  \
-  SD4(out, out, out, out, dst + 4 * BPS, BPS);  \
-} while (0)
-
-static WEBP_INLINE void VerticalPred8x8(uint8_t* dst, const uint8_t* top) {
-  if (top != NULL) {
-    const uint64_t out = LD(top);
-    STORE8x8(out, dst);
-  } else {
-    const uint64_t out = 0x7f7f7f7f7f7f7f7fULL;
-    STORE8x8(out, dst);
-  }
-}
-
-static WEBP_INLINE void HorizontalPred8x8(uint8_t* dst, const uint8_t* left) {
-  if (left != NULL) {
-    int j;
-    for (j = 0; j < 8; j += 4) {
-      const v16u8 L0 = (v16u8)__msa_fill_b(left[0]);
-      const v16u8 L1 = (v16u8)__msa_fill_b(left[1]);
-      const v16u8 L2 = (v16u8)__msa_fill_b(left[2]);
-      const v16u8 L3 = (v16u8)__msa_fill_b(left[3]);
-      const uint64_t out0 = __msa_copy_s_d((v2i64)L0, 0);
-      const uint64_t out1 = __msa_copy_s_d((v2i64)L1, 0);
-      const uint64_t out2 = __msa_copy_s_d((v2i64)L2, 0);
-      const uint64_t out3 = __msa_copy_s_d((v2i64)L3, 0);
-      SD4(out0, out1, out2, out3, dst, BPS);
-      dst += 4 * BPS;
-      left += 4;
-    }
-  } else {
-    const uint64_t out = 0x8181818181818181ULL;
-    STORE8x8(out, dst);
-  }
-}
-
-static WEBP_INLINE void TrueMotion8x8(uint8_t* dst, const uint8_t* left,
-                                      const uint8_t* top) {
-  if (left != NULL) {
-    if (top != NULL) {
-      int j;
-      const v8i16 TL = (v8i16)__msa_fill_h(left[-1]);
-      const v16u8 T1 = LD_UB(top);
-      const v16i8 zero = { 0 };
-      const v8i16 T  = (v8i16)__msa_ilvr_b(zero, (v16i8)T1);
-      const v8i16 d = T - TL;
-      for (j = 0; j < 8; j += 4) {
-        uint64_t out0, out1, out2, out3;
-        v16i8 t0, t1;
-        v8i16 r0 = (v8i16)__msa_fill_h(left[j + 0]);
-        v8i16 r1 = (v8i16)__msa_fill_h(left[j + 1]);
-        v8i16 r2 = (v8i16)__msa_fill_h(left[j + 2]);
-        v8i16 r3 = (v8i16)__msa_fill_h(left[j + 3]);
-        ADD4(d, r0, d, r1, d, r2, d, r3, r0, r1, r2, r3);
-        CLIP_SH4_0_255(r0, r1, r2, r3);
-        PCKEV_B2_SB(r1, r0, r3, r2, t0, t1);
-        out0 = __msa_copy_s_d((v2i64)t0, 0);
-        out1 = __msa_copy_s_d((v2i64)t0, 1);
-        out2 = __msa_copy_s_d((v2i64)t1, 0);
-        out3 = __msa_copy_s_d((v2i64)t1, 1);
-        SD4(out0, out1, out2, out3, dst, BPS);
-        dst += 4 * BPS;
-      }
-    } else {
-      HorizontalPred8x8(dst, left);
-    }
-  } else {
-    if (top != NULL) {
-      VerticalPred8x8(dst, top);
-    } else {
-      const uint64_t out = 0x8181818181818181ULL;
-      STORE8x8(out, dst);
-    }
-  }
-}
-
-static WEBP_INLINE void DCMode8x8(uint8_t* dst, const uint8_t* left,
-                                  const uint8_t* top) {
-  uint64_t out;
-  v16u8 src = { 0 };
-  if (top != NULL && left != NULL) {
-    const uint64_t left_m = LD(left);
-    const uint64_t top_m = LD(top);
-    INSERT_D2_UB(left_m, top_m, src);
-    CALC_DC8(src, out);
-  } else if (left != NULL) {   // left but no top
-    const uint64_t left_m = LD(left);
-    INSERT_D2_UB(left_m, left_m, src);
-    CALC_DC8(src, out);
-  } else if (top != NULL) {   // top but no left
-    const uint64_t top_m = LD(top);
-    INSERT_D2_UB(top_m, top_m, src);
-    CALC_DC8(src, out);
-  } else {   // no top, no left, nothing.
-    src = (v16u8)__msa_fill_b(0x80);
-    out = __msa_copy_s_d((v2i64)src, 0);
-  }
-  STORE8x8(out, dst);
-}
-
-static void IntraChromaPreds_MSA(uint8_t* dst, const uint8_t* left,
-                                 const uint8_t* top) {
-  // U block
-  DCMode8x8(C8DC8 + dst, left, top);
-  VerticalPred8x8(C8VE8 + dst, top);
-  HorizontalPred8x8(C8HE8 + dst, left);
-  TrueMotion8x8(C8TM8 + dst, left, top);
-  // V block
-  dst += 8;
-  if (top != NULL) top += 8;
-  if (left != NULL) left += 16;
-  DCMode8x8(C8DC8 + dst, left, top);
-  VerticalPred8x8(C8VE8 + dst, top);
-  HorizontalPred8x8(C8HE8 + dst, left);
-  TrueMotion8x8(C8TM8 + dst, left, top);
-}
-
-//------------------------------------------------------------------------------
-// Metric
-
-#define PACK_DOTP_UB4_SW(in0, in1, in2, in3, out0, out1, out2, out3) do {  \
-  v16u8 tmp0, tmp1;                                                        \
-  v8i16 tmp2, tmp3;                                                        \
-  ILVRL_B2_UB(in0, in1, tmp0, tmp1);                                       \
-  HSUB_UB2_SH(tmp0, tmp1, tmp2, tmp3);                                     \
-  DOTP_SH2_SW(tmp2, tmp3, tmp2, tmp3, out0, out1);                         \
-  ILVRL_B2_UB(in2, in3, tmp0, tmp1);                                       \
-  HSUB_UB2_SH(tmp0, tmp1, tmp2, tmp3);                                     \
-  DOTP_SH2_SW(tmp2, tmp3, tmp2, tmp3, out2, out3);                         \
-} while (0)
-
-#define PACK_DPADD_UB4_SW(in0, in1, in2, in3, out0, out1, out2, out3) do {  \
-  v16u8 tmp0, tmp1;                                                         \
-  v8i16 tmp2, tmp3;                                                         \
-  ILVRL_B2_UB(in0, in1, tmp0, tmp1);                                        \
-  HSUB_UB2_SH(tmp0, tmp1, tmp2, tmp3);                                      \
-  DPADD_SH2_SW(tmp2, tmp3, tmp2, tmp3, out0, out1);                         \
-  ILVRL_B2_UB(in2, in3, tmp0, tmp1);                                        \
-  HSUB_UB2_SH(tmp0, tmp1, tmp2, tmp3);                                      \
-  DPADD_SH2_SW(tmp2, tmp3, tmp2, tmp3, out2, out3);                         \
-} while (0)
-
-static int SSE16x16_MSA(const uint8_t* a, const uint8_t* b) {
-  uint32_t sum;
-  v16u8 src0, src1, src2, src3, src4, src5, src6, src7;
-  v16u8 ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7;
-  v4i32 out0, out1, out2, out3;
-
-  LD_UB8(a, BPS, src0, src1, src2, src3, src4, src5, src6, src7);
-  LD_UB8(b, BPS, ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7);
-  PACK_DOTP_UB4_SW(src0, ref0, src1, ref1, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src2, ref2, src3, ref3, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src4, ref4, src5, ref5, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src6, ref6, src7, ref7, out0, out1, out2, out3);
-  a += 8 * BPS;
-  b += 8 * BPS;
-  LD_UB8(a, BPS, src0, src1, src2, src3, src4, src5, src6, src7);
-  LD_UB8(b, BPS, ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7);
-  PACK_DPADD_UB4_SW(src0, ref0, src1, ref1, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src2, ref2, src3, ref3, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src4, ref4, src5, ref5, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src6, ref6, src7, ref7, out0, out1, out2, out3);
-  out0 += out1;
-  out2 += out3;
-  out0 += out2;
-  sum = HADD_SW_S32(out0);
-  return sum;
-}
-
-static int SSE16x8_MSA(const uint8_t* a, const uint8_t* b) {
-  uint32_t sum;
-  v16u8 src0, src1, src2, src3, src4, src5, src6, src7;
-  v16u8 ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7;
-  v4i32 out0, out1, out2, out3;
-
-  LD_UB8(a, BPS, src0, src1, src2, src3, src4, src5, src6, src7);
-  LD_UB8(b, BPS, ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7);
-  PACK_DOTP_UB4_SW(src0, ref0, src1, ref1, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src2, ref2, src3, ref3, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src4, ref4, src5, ref5, out0, out1, out2, out3);
-  PACK_DPADD_UB4_SW(src6, ref6, src7, ref7, out0, out1, out2, out3);
-  out0 += out1;
-  out2 += out3;
-  out0 += out2;
-  sum = HADD_SW_S32(out0);
-  return sum;
-}
-
-static int SSE8x8_MSA(const uint8_t* a, const uint8_t* b) {
-  uint32_t sum;
-  v16u8 src0, src1, src2, src3, src4, src5, src6, src7;
-  v16u8 ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7;
-  v16u8 t0, t1, t2, t3;
-  v4i32 out0, out1, out2, out3;
-
-  LD_UB8(a, BPS, src0, src1, src2, src3, src4, src5, src6, src7);
-  LD_UB8(b, BPS, ref0, ref1, ref2, ref3, ref4, ref5, ref6, ref7);
-  ILVR_B4_UB(src0, src1, src2, src3, ref0, ref1, ref2, ref3, t0, t1, t2, t3);
-  PACK_DOTP_UB4_SW(t0, t2, t1, t3, out0, out1, out2, out3);
-  ILVR_B4_UB(src4, src5, src6, src7, ref4, ref5, ref6, ref7, t0, t1, t2, t3);
-  PACK_DPADD_UB4_SW(t0, t2, t1, t3, out0, out1, out2, out3);
-  out0 += out1;
-  out2 += out3;
-  out0 += out2;
-  sum = HADD_SW_S32(out0);
-  return sum;
-}
-
-static int SSE4x4_MSA(const uint8_t* a, const uint8_t* b) {
-  uint32_t sum = 0;
-  uint32_t src0, src1, src2, src3, ref0, ref1, ref2, ref3;
-  v16u8 src = { 0 }, ref = { 0 }, tmp0, tmp1;
-  v8i16 diff0, diff1;
-  v4i32 out0, out1;
-
-  LW4(a, BPS, src0, src1, src2, src3);
-  LW4(b, BPS, ref0, ref1, ref2, ref3);
-  INSERT_W4_UB(src0, src1, src2, src3, src);
-  INSERT_W4_UB(ref0, ref1, ref2, ref3, ref);
-  ILVRL_B2_UB(src, ref, tmp0, tmp1);
-  HSUB_UB2_SH(tmp0, tmp1, diff0, diff1);
-  DOTP_SH2_SW(diff0, diff1, diff0, diff1, out0, out1);
-  out0 += out1;
-  sum = HADD_SW_S32(out0);
-  return sum;
-}
-
-//------------------------------------------------------------------------------
-// Quantization
-
-static int QuantizeBlock_MSA(int16_t in[16], int16_t out[16],
-                             const VP8Matrix* const mtx) {
-  int sum;
-  v8i16 in0, in1, sh0, sh1, out0, out1;
-  v8i16 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, sign0, sign1;
-  v4i32 s0, s1, s2, s3, b0, b1, b2, b3, t0, t1, t2, t3;
-  const v8i16 zero = { 0 };
-  const v8i16 zigzag0 = { 0, 1, 4, 8, 5, 2, 3, 6 };
-  const v8i16 zigzag1 = { 9, 12, 13, 10, 7, 11, 14, 15 };
-  const v8i16 maxlevel = __msa_fill_h(MAX_LEVEL);
-
-  LD_SH2(&in[0], 8, in0, in1);
-  LD_SH2(&mtx->sharpen_[0], 8, sh0, sh1);
-  tmp4 = __msa_add_a_h(in0, zero);
-  tmp5 = __msa_add_a_h(in1, zero);
-  ILVRL_H2_SH(sh0, tmp4, tmp0, tmp1);
-  ILVRL_H2_SH(sh1, tmp5, tmp2, tmp3);
-  HADD_SH4_SW(tmp0, tmp1, tmp2, tmp3, s0, s1, s2, s3);
-  sign0 = (in0 < zero);
-  sign1 = (in1 < zero);                           // sign
-  LD_SH2(&mtx->iq_[0], 8, tmp0, tmp1);            // iq
-  ILVRL_H2_SW(zero, tmp0, t0, t1);
-  ILVRL_H2_SW(zero, tmp1, t2, t3);
-  LD_SW4(&mtx->bias_[0], 4, b0, b1, b2, b3);      // bias
-  MUL4(t0, s0, t1, s1, t2, s2, t3, s3, t0, t1, t2, t3);
-  ADD4(b0, t0, b1, t1, b2, t2, b3, t3, b0, b1, b2, b3);
-  SRAI_W4_SW(b0, b1, b2, b3, 17);
-  PCKEV_H2_SH(b1, b0, b3, b2, tmp2, tmp3);
-  tmp0 = (tmp2 > maxlevel);
-  tmp1 = (tmp3 > maxlevel);
-  tmp2 = (v8i16)__msa_bmnz_v((v16u8)tmp2, (v16u8)maxlevel, (v16u8)tmp0);
-  tmp3 = (v8i16)__msa_bmnz_v((v16u8)tmp3, (v16u8)maxlevel, (v16u8)tmp1);
-  SUB2(zero, tmp2, zero, tmp3, tmp0, tmp1);
-  tmp2 = (v8i16)__msa_bmnz_v((v16u8)tmp2, (v16u8)tmp0, (v16u8)sign0);
-  tmp3 = (v8i16)__msa_bmnz_v((v16u8)tmp3, (v16u8)tmp1, (v16u8)sign1);
-  LD_SW4(&mtx->zthresh_[0], 4, t0, t1, t2, t3);   // zthresh
-  t0 = (s0 > t0);
-  t1 = (s1 > t1);
-  t2 = (s2 > t2);
-  t3 = (s3 > t3);
-  PCKEV_H2_SH(t1, t0, t3, t2, tmp0, tmp1);
-  tmp4 = (v8i16)__msa_bmnz_v((v16u8)zero, (v16u8)tmp2, (v16u8)tmp0);
-  tmp5 = (v8i16)__msa_bmnz_v((v16u8)zero, (v16u8)tmp3, (v16u8)tmp1);
-  LD_SH2(&mtx->q_[0], 8, tmp0, tmp1);
-  MUL2(tmp4, tmp0, tmp5, tmp1, in0, in1);
-  VSHF_H2_SH(tmp4, tmp5, tmp4, tmp5, zigzag0, zigzag1, out0, out1);
-  ST_SH2(in0, in1, &in[0], 8);
-  ST_SH2(out0, out1, &out[0], 8);
-  out0 = __msa_add_a_h(out0, out1);
-  sum = HADD_SH_S32(out0);
-  return (sum > 0);
-}
-
-static int Quantize2Blocks_MSA(int16_t in[32], int16_t out[32],
-                               const VP8Matrix* const mtx) {
-  int nz;
-  nz  = VP8EncQuantizeBlock(in + 0 * 16, out + 0 * 16, mtx) << 0;
-  nz |= VP8EncQuantizeBlock(in + 1 * 16, out + 1 * 16, mtx) << 1;
-  return nz;
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspInitMSA(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitMSA(void) {
-  VP8ITransform = ITransform_MSA;
-  VP8FTransform = FTransform_MSA;
-  VP8FTransformWHT = FTransformWHT_MSA;
-
-  VP8TDisto4x4 = Disto4x4_MSA;
-  VP8TDisto16x16 = Disto16x16_MSA;
-  VP8CollectHistogram = CollectHistogram_MSA;
-
-  VP8EncPredLuma4 = Intra4Preds_MSA;
-  VP8EncPredLuma16 = Intra16Preds_MSA;
-  VP8EncPredChroma8 = IntraChromaPreds_MSA;
-
-  VP8SSE16x16 = SSE16x16_MSA;
-  VP8SSE16x8 = SSE16x8_MSA;
-  VP8SSE8x8 = SSE8x8_MSA;
-  VP8SSE4x4 = SSE4x4_MSA;
-
-  VP8EncQuantizeBlock = QuantizeBlock_MSA;
-  VP8EncQuantize2Blocks = Quantize2Blocks_MSA;
-  VP8EncQuantizeBlockWHT = QuantizeBlock_MSA;
-}
-
-#else  // !WEBP_USE_MSA
-
-WEBP_DSP_INIT_STUB(VP8EncDspInitMSA)
-
-#endif  // WEBP_USE_MSA
diff --git a/ios/Pods/libwebp/src/dsp/enc_neon.c b/ios/Pods/libwebp/src/dsp/enc_neon.c
deleted file mode 100644
index 43bf124..0000000
--- a/ios/Pods/libwebp/src/dsp/enc_neon.c
+++ /dev/null
@@ -1,938 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// ARM NEON version of speed-critical encoding functions.
-//
-// adapted from libvpx (http://www.webmproject.org/code/)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include <assert.h>
-
-#include "src/dsp/neon.h"
-#include "src/enc/vp8i_enc.h"
-
-//------------------------------------------------------------------------------
-// Transforms (Paragraph 14.4)
-
-// Inverse transform.
-// This code is pretty much the same as TransformOne in the dec_neon.c, except
-// for subtraction to *ref. See the comments there for algorithmic explanations.
-
-static const int16_t kC1 = 20091;
-static const int16_t kC2 = 17734;  // half of kC2, actually. See comment above.
-
-// This code works but is *slower* than the inlined-asm version below
-// (with gcc-4.6). So we disable it for now. Later, it'll be conditional to
-// WEBP_USE_INTRINSICS define.
-// With gcc-4.8, it's a little faster speed than inlined-assembly.
-#if defined(WEBP_USE_INTRINSICS)
-
-// Treats 'v' as an uint8x8_t and zero extends to an int16x8_t.
-static WEBP_INLINE int16x8_t ConvertU8ToS16_NEON(uint32x2_t v) {
-  return vreinterpretq_s16_u16(vmovl_u8(vreinterpret_u8_u32(v)));
-}
-
-// Performs unsigned 8b saturation on 'dst01' and 'dst23' storing the result
-// to the corresponding rows of 'dst'.
-static WEBP_INLINE void SaturateAndStore4x4_NEON(uint8_t* const dst,
-                                                 const int16x8_t dst01,
-                                                 const int16x8_t dst23) {
-  // Unsigned saturate to 8b.
-  const uint8x8_t dst01_u8 = vqmovun_s16(dst01);
-  const uint8x8_t dst23_u8 = vqmovun_s16(dst23);
-
-  // Store the results.
-  vst1_lane_u32((uint32_t*)(dst + 0 * BPS), vreinterpret_u32_u8(dst01_u8), 0);
-  vst1_lane_u32((uint32_t*)(dst + 1 * BPS), vreinterpret_u32_u8(dst01_u8), 1);
-  vst1_lane_u32((uint32_t*)(dst + 2 * BPS), vreinterpret_u32_u8(dst23_u8), 0);
-  vst1_lane_u32((uint32_t*)(dst + 3 * BPS), vreinterpret_u32_u8(dst23_u8), 1);
-}
-
-static WEBP_INLINE void Add4x4_NEON(const int16x8_t row01,
-                                    const int16x8_t row23,
-                                    const uint8_t* const ref,
-                                    uint8_t* const dst) {
-  uint32x2_t dst01 = vdup_n_u32(0);
-  uint32x2_t dst23 = vdup_n_u32(0);
-
-  // Load the source pixels.
-  dst01 = vld1_lane_u32((uint32_t*)(ref + 0 * BPS), dst01, 0);
-  dst23 = vld1_lane_u32((uint32_t*)(ref + 2 * BPS), dst23, 0);
-  dst01 = vld1_lane_u32((uint32_t*)(ref + 1 * BPS), dst01, 1);
-  dst23 = vld1_lane_u32((uint32_t*)(ref + 3 * BPS), dst23, 1);
-
-  {
-    // Convert to 16b.
-    const int16x8_t dst01_s16 = ConvertU8ToS16_NEON(dst01);
-    const int16x8_t dst23_s16 = ConvertU8ToS16_NEON(dst23);
-
-    // Descale with rounding.
-    const int16x8_t out01 = vrsraq_n_s16(dst01_s16, row01, 3);
-    const int16x8_t out23 = vrsraq_n_s16(dst23_s16, row23, 3);
-    // Add the inverse transform.
-    SaturateAndStore4x4_NEON(dst, out01, out23);
-  }
-}
-
-static WEBP_INLINE void Transpose8x2_NEON(const int16x8_t in0,
-                                          const int16x8_t in1,
-                                          int16x8x2_t* const out) {
-  // a0 a1 a2 a3 | b0 b1 b2 b3   => a0 b0 c0 d0 | a1 b1 c1 d1
-  // c0 c1 c2 c3 | d0 d1 d2 d3      a2 b2 c2 d2 | a3 b3 c3 d3
-  const int16x8x2_t tmp0 = vzipq_s16(in0, in1);   // a0 c0 a1 c1 a2 c2 ...
-                                                  // b0 d0 b1 d1 b2 d2 ...
-  *out = vzipq_s16(tmp0.val[0], tmp0.val[1]);
-}
-
-static WEBP_INLINE void TransformPass_NEON(int16x8x2_t* const rows) {
-  // {rows} = in0 | in4
-  //          in8 | in12
-  // B1 = in4 | in12
-  const int16x8_t B1 =
-      vcombine_s16(vget_high_s16(rows->val[0]), vget_high_s16(rows->val[1]));
-  // C0 = kC1 * in4 | kC1 * in12
-  // C1 = kC2 * in4 | kC2 * in12
-  const int16x8_t C0 = vsraq_n_s16(B1, vqdmulhq_n_s16(B1, kC1), 1);
-  const int16x8_t C1 = vqdmulhq_n_s16(B1, kC2);
-  const int16x4_t a = vqadd_s16(vget_low_s16(rows->val[0]),
-                                vget_low_s16(rows->val[1]));   // in0 + in8
-  const int16x4_t b = vqsub_s16(vget_low_s16(rows->val[0]),
-                                vget_low_s16(rows->val[1]));   // in0 - in8
-  // c = kC2 * in4 - kC1 * in12
-  // d = kC1 * in4 + kC2 * in12
-  const int16x4_t c = vqsub_s16(vget_low_s16(C1), vget_high_s16(C0));
-  const int16x4_t d = vqadd_s16(vget_low_s16(C0), vget_high_s16(C1));
-  const int16x8_t D0 = vcombine_s16(a, b);      // D0 = a | b
-  const int16x8_t D1 = vcombine_s16(d, c);      // D1 = d | c
-  const int16x8_t E0 = vqaddq_s16(D0, D1);      // a+d | b+c
-  const int16x8_t E_tmp = vqsubq_s16(D0, D1);   // a-d | b-c
-  const int16x8_t E1 = vcombine_s16(vget_high_s16(E_tmp), vget_low_s16(E_tmp));
-  Transpose8x2_NEON(E0, E1, rows);
-}
-
-static void ITransformOne_NEON(const uint8_t* ref,
-                               const int16_t* in, uint8_t* dst) {
-  int16x8x2_t rows;
-  INIT_VECTOR2(rows, vld1q_s16(in + 0), vld1q_s16(in + 8));
-  TransformPass_NEON(&rows);
-  TransformPass_NEON(&rows);
-  Add4x4_NEON(rows.val[0], rows.val[1], ref, dst);
-}
-
-#else
-
-static void ITransformOne_NEON(const uint8_t* ref,
-                               const int16_t* in, uint8_t* dst) {
-  const int kBPS = BPS;
-  const int16_t kC1C2[] = { kC1, kC2, 0, 0 };
-
-  __asm__ volatile (
-    "vld1.16         {q1, q2}, [%[in]]           \n"
-    "vld1.16         {d0}, [%[kC1C2]]            \n"
-
-    // d2: in[0]
-    // d3: in[8]
-    // d4: in[4]
-    // d5: in[12]
-    "vswp            d3, d4                      \n"
-
-    // q8 = {in[4], in[12]} * kC1 * 2 >> 16
-    // q9 = {in[4], in[12]} * kC2 >> 16
-    "vqdmulh.s16     q8, q2, d0[0]               \n"
-    "vqdmulh.s16     q9, q2, d0[1]               \n"
-
-    // d22 = a = in[0] + in[8]
-    // d23 = b = in[0] - in[8]
-    "vqadd.s16       d22, d2, d3                 \n"
-    "vqsub.s16       d23, d2, d3                 \n"
-
-    //  q8 = in[4]/[12] * kC1 >> 16
-    "vshr.s16        q8, q8, #1                  \n"
-
-    // Add {in[4], in[12]} back after the multiplication.
-    "vqadd.s16       q8, q2, q8                  \n"
-
-    // d20 = c = in[4]*kC2 - in[12]*kC1
-    // d21 = d = in[4]*kC1 + in[12]*kC2
-    "vqsub.s16       d20, d18, d17               \n"
-    "vqadd.s16       d21, d19, d16               \n"
-
-    // d2 = tmp[0] = a + d
-    // d3 = tmp[1] = b + c
-    // d4 = tmp[2] = b - c
-    // d5 = tmp[3] = a - d
-    "vqadd.s16       d2, d22, d21                \n"
-    "vqadd.s16       d3, d23, d20                \n"
-    "vqsub.s16       d4, d23, d20                \n"
-    "vqsub.s16       d5, d22, d21                \n"
-
-    "vzip.16         q1, q2                      \n"
-    "vzip.16         q1, q2                      \n"
-
-    "vswp            d3, d4                      \n"
-
-    // q8 = {tmp[4], tmp[12]} * kC1 * 2 >> 16
-    // q9 = {tmp[4], tmp[12]} * kC2 >> 16
-    "vqdmulh.s16     q8, q2, d0[0]               \n"
-    "vqdmulh.s16     q9, q2, d0[1]               \n"
-
-    // d22 = a = tmp[0] + tmp[8]
-    // d23 = b = tmp[0] - tmp[8]
-    "vqadd.s16       d22, d2, d3                 \n"
-    "vqsub.s16       d23, d2, d3                 \n"
-
-    "vshr.s16        q8, q8, #1                  \n"
-    "vqadd.s16       q8, q2, q8                  \n"
-
-    // d20 = c = in[4]*kC2 - in[12]*kC1
-    // d21 = d = in[4]*kC1 + in[12]*kC2
-    "vqsub.s16       d20, d18, d17               \n"
-    "vqadd.s16       d21, d19, d16               \n"
-
-    // d2 = tmp[0] = a + d
-    // d3 = tmp[1] = b + c
-    // d4 = tmp[2] = b - c
-    // d5 = tmp[3] = a - d
-    "vqadd.s16       d2, d22, d21                \n"
-    "vqadd.s16       d3, d23, d20                \n"
-    "vqsub.s16       d4, d23, d20                \n"
-    "vqsub.s16       d5, d22, d21                \n"
-
-    "vld1.32         d6[0], [%[ref]], %[kBPS]    \n"
-    "vld1.32         d6[1], [%[ref]], %[kBPS]    \n"
-    "vld1.32         d7[0], [%[ref]], %[kBPS]    \n"
-    "vld1.32         d7[1], [%[ref]], %[kBPS]    \n"
-
-    "sub         %[ref], %[ref], %[kBPS], lsl #2 \n"
-
-    // (val) + 4 >> 3
-    "vrshr.s16       d2, d2, #3                  \n"
-    "vrshr.s16       d3, d3, #3                  \n"
-    "vrshr.s16       d4, d4, #3                  \n"
-    "vrshr.s16       d5, d5, #3                  \n"
-
-    "vzip.16         q1, q2                      \n"
-    "vzip.16         q1, q2                      \n"
-
-    // Must accumulate before saturating
-    "vmovl.u8        q8, d6                      \n"
-    "vmovl.u8        q9, d7                      \n"
-
-    "vqadd.s16       q1, q1, q8                  \n"
-    "vqadd.s16       q2, q2, q9                  \n"
-
-    "vqmovun.s16     d0, q1                      \n"
-    "vqmovun.s16     d1, q2                      \n"
-
-    "vst1.32         d0[0], [%[dst]], %[kBPS]    \n"
-    "vst1.32         d0[1], [%[dst]], %[kBPS]    \n"
-    "vst1.32         d1[0], [%[dst]], %[kBPS]    \n"
-    "vst1.32         d1[1], [%[dst]]             \n"
-
-    : [in] "+r"(in), [dst] "+r"(dst)               // modified registers
-    : [kBPS] "r"(kBPS), [kC1C2] "r"(kC1C2), [ref] "r"(ref)  // constants
-    : "memory", "q0", "q1", "q2", "q8", "q9", "q10", "q11"  // clobbered
-  );
-}
-
-#endif    // WEBP_USE_INTRINSICS
-
-static void ITransform_NEON(const uint8_t* ref,
-                            const int16_t* in, uint8_t* dst, int do_two) {
-  ITransformOne_NEON(ref, in, dst);
-  if (do_two) {
-    ITransformOne_NEON(ref + 4, in + 16, dst + 4);
-  }
-}
-
-// Load all 4x4 pixels into a single uint8x16_t variable.
-static uint8x16_t Load4x4_NEON(const uint8_t* src) {
-  uint32x4_t out = vdupq_n_u32(0);
-  out = vld1q_lane_u32((const uint32_t*)(src + 0 * BPS), out, 0);
-  out = vld1q_lane_u32((const uint32_t*)(src + 1 * BPS), out, 1);
-  out = vld1q_lane_u32((const uint32_t*)(src + 2 * BPS), out, 2);
-  out = vld1q_lane_u32((const uint32_t*)(src + 3 * BPS), out, 3);
-  return vreinterpretq_u8_u32(out);
-}
-
-// Forward transform.
-
-#if defined(WEBP_USE_INTRINSICS)
-
-static WEBP_INLINE void Transpose4x4_S16_NEON(const int16x4_t A,
-                                              const int16x4_t B,
-                                              const int16x4_t C,
-                                              const int16x4_t D,
-                                              int16x8_t* const out01,
-                                              int16x8_t* const out32) {
-  const int16x4x2_t AB = vtrn_s16(A, B);
-  const int16x4x2_t CD = vtrn_s16(C, D);
-  const int32x2x2_t tmp02 = vtrn_s32(vreinterpret_s32_s16(AB.val[0]),
-                                     vreinterpret_s32_s16(CD.val[0]));
-  const int32x2x2_t tmp13 = vtrn_s32(vreinterpret_s32_s16(AB.val[1]),
-                                     vreinterpret_s32_s16(CD.val[1]));
-  *out01 = vreinterpretq_s16_s64(
-      vcombine_s64(vreinterpret_s64_s32(tmp02.val[0]),
-                   vreinterpret_s64_s32(tmp13.val[0])));
-  *out32 = vreinterpretq_s16_s64(
-      vcombine_s64(vreinterpret_s64_s32(tmp13.val[1]),
-                   vreinterpret_s64_s32(tmp02.val[1])));
-}
-
-static WEBP_INLINE int16x8_t DiffU8ToS16_NEON(const uint8x8_t a,
-                                              const uint8x8_t b) {
-  return vreinterpretq_s16_u16(vsubl_u8(a, b));
-}
-
-static void FTransform_NEON(const uint8_t* src, const uint8_t* ref,
-                            int16_t* out) {
-  int16x8_t d0d1, d3d2;   // working 4x4 int16 variables
-  {
-    const uint8x16_t S0 = Load4x4_NEON(src);
-    const uint8x16_t R0 = Load4x4_NEON(ref);
-    const int16x8_t D0D1 = DiffU8ToS16_NEON(vget_low_u8(S0), vget_low_u8(R0));
-    const int16x8_t D2D3 = DiffU8ToS16_NEON(vget_high_u8(S0), vget_high_u8(R0));
-    const int16x4_t D0 = vget_low_s16(D0D1);
-    const int16x4_t D1 = vget_high_s16(D0D1);
-    const int16x4_t D2 = vget_low_s16(D2D3);
-    const int16x4_t D3 = vget_high_s16(D2D3);
-    Transpose4x4_S16_NEON(D0, D1, D2, D3, &d0d1, &d3d2);
-  }
-  {    // 1rst pass
-    const int32x4_t kCst937 = vdupq_n_s32(937);
-    const int32x4_t kCst1812 = vdupq_n_s32(1812);
-    const int16x8_t a0a1 = vaddq_s16(d0d1, d3d2);   // d0+d3 | d1+d2   (=a0|a1)
-    const int16x8_t a3a2 = vsubq_s16(d0d1, d3d2);   // d0-d3 | d1-d2   (=a3|a2)
-    const int16x8_t a0a1_2 = vshlq_n_s16(a0a1, 3);
-    const int16x4_t tmp0 = vadd_s16(vget_low_s16(a0a1_2),
-                                    vget_high_s16(a0a1_2));
-    const int16x4_t tmp2 = vsub_s16(vget_low_s16(a0a1_2),
-                                    vget_high_s16(a0a1_2));
-    const int32x4_t a3_2217 = vmull_n_s16(vget_low_s16(a3a2), 2217);
-    const int32x4_t a2_2217 = vmull_n_s16(vget_high_s16(a3a2), 2217);
-    const int32x4_t a2_p_a3 = vmlal_n_s16(a2_2217, vget_low_s16(a3a2), 5352);
-    const int32x4_t a3_m_a2 = vmlsl_n_s16(a3_2217, vget_high_s16(a3a2), 5352);
-    const int16x4_t tmp1 = vshrn_n_s32(vaddq_s32(a2_p_a3, kCst1812), 9);
-    const int16x4_t tmp3 = vshrn_n_s32(vaddq_s32(a3_m_a2, kCst937), 9);
-    Transpose4x4_S16_NEON(tmp0, tmp1, tmp2, tmp3, &d0d1, &d3d2);
-  }
-  {    // 2nd pass
-    // the (1<<16) addition is for the replacement: a3!=0  <-> 1-(a3==0)
-    const int32x4_t kCst12000 = vdupq_n_s32(12000 + (1 << 16));
-    const int32x4_t kCst51000 = vdupq_n_s32(51000);
-    const int16x8_t a0a1 = vaddq_s16(d0d1, d3d2);   // d0+d3 | d1+d2   (=a0|a1)
-    const int16x8_t a3a2 = vsubq_s16(d0d1, d3d2);   // d0-d3 | d1-d2   (=a3|a2)
-    const int16x4_t a0_k7 = vadd_s16(vget_low_s16(a0a1), vdup_n_s16(7));
-    const int16x4_t out0 = vshr_n_s16(vadd_s16(a0_k7, vget_high_s16(a0a1)), 4);
-    const int16x4_t out2 = vshr_n_s16(vsub_s16(a0_k7, vget_high_s16(a0a1)), 4);
-    const int32x4_t a3_2217 = vmull_n_s16(vget_low_s16(a3a2), 2217);
-    const int32x4_t a2_2217 = vmull_n_s16(vget_high_s16(a3a2), 2217);
-    const int32x4_t a2_p_a3 = vmlal_n_s16(a2_2217, vget_low_s16(a3a2), 5352);
-    const int32x4_t a3_m_a2 = vmlsl_n_s16(a3_2217, vget_high_s16(a3a2), 5352);
-    const int16x4_t tmp1 = vaddhn_s32(a2_p_a3, kCst12000);
-    const int16x4_t out3 = vaddhn_s32(a3_m_a2, kCst51000);
-    const int16x4_t a3_eq_0 =
-        vreinterpret_s16_u16(vceq_s16(vget_low_s16(a3a2), vdup_n_s16(0)));
-    const int16x4_t out1 = vadd_s16(tmp1, a3_eq_0);
-    vst1_s16(out +  0, out0);
-    vst1_s16(out +  4, out1);
-    vst1_s16(out +  8, out2);
-    vst1_s16(out + 12, out3);
-  }
-}
-
-#else
-
-// adapted from vp8/encoder/arm/neon/shortfdct_neon.asm
-static const int16_t kCoeff16[] = {
-  5352,  5352,  5352, 5352, 2217,  2217,  2217, 2217
-};
-static const int32_t kCoeff32[] = {
-   1812,  1812,  1812,  1812,
-    937,   937,   937,   937,
-  12000, 12000, 12000, 12000,
-  51000, 51000, 51000, 51000
-};
-
-static void FTransform_NEON(const uint8_t* src, const uint8_t* ref,
-                            int16_t* out) {
-  const int kBPS = BPS;
-  const uint8_t* src_ptr = src;
-  const uint8_t* ref_ptr = ref;
-  const int16_t* coeff16 = kCoeff16;
-  const int32_t* coeff32 = kCoeff32;
-
-  __asm__ volatile (
-    // load src into q4, q5 in high half
-    "vld1.8 {d8},  [%[src_ptr]], %[kBPS]      \n"
-    "vld1.8 {d10}, [%[src_ptr]], %[kBPS]      \n"
-    "vld1.8 {d9},  [%[src_ptr]], %[kBPS]      \n"
-    "vld1.8 {d11}, [%[src_ptr]]               \n"
-
-    // load ref into q6, q7 in high half
-    "vld1.8 {d12}, [%[ref_ptr]], %[kBPS]      \n"
-    "vld1.8 {d14}, [%[ref_ptr]], %[kBPS]      \n"
-    "vld1.8 {d13}, [%[ref_ptr]], %[kBPS]      \n"
-    "vld1.8 {d15}, [%[ref_ptr]]               \n"
-
-    // Pack the high values in to q4 and q6
-    "vtrn.32     q4, q5                       \n"
-    "vtrn.32     q6, q7                       \n"
-
-    // d[0-3] = src - ref
-    "vsubl.u8    q0, d8, d12                  \n"
-    "vsubl.u8    q1, d9, d13                  \n"
-
-    // load coeff16 into q8(d16=5352, d17=2217)
-    "vld1.16     {q8}, [%[coeff16]]           \n"
-
-    // load coeff32 high half into q9 = 1812, q10 = 937
-    "vld1.32     {q9, q10}, [%[coeff32]]!     \n"
-
-    // load coeff32 low half into q11=12000, q12=51000
-    "vld1.32     {q11,q12}, [%[coeff32]]      \n"
-
-    // part 1
-    // Transpose. Register dN is the same as dN in C
-    "vtrn.32         d0, d2                   \n"
-    "vtrn.32         d1, d3                   \n"
-    "vtrn.16         d0, d1                   \n"
-    "vtrn.16         d2, d3                   \n"
-
-    "vadd.s16        d4, d0, d3               \n" // a0 = d0 + d3
-    "vadd.s16        d5, d1, d2               \n" // a1 = d1 + d2
-    "vsub.s16        d6, d1, d2               \n" // a2 = d1 - d2
-    "vsub.s16        d7, d0, d3               \n" // a3 = d0 - d3
-
-    "vadd.s16        d0, d4, d5               \n" // a0 + a1
-    "vshl.s16        d0, d0, #3               \n" // temp[0+i*4] = (a0+a1) << 3
-    "vsub.s16        d2, d4, d5               \n" // a0 - a1
-    "vshl.s16        d2, d2, #3               \n" // (temp[2+i*4] = (a0-a1) << 3
-
-    "vmlal.s16       q9, d7, d16              \n" // a3*5352 + 1812
-    "vmlal.s16       q10, d7, d17             \n" // a3*2217 + 937
-    "vmlal.s16       q9, d6, d17              \n" // a2*2217 + a3*5352 + 1812
-    "vmlsl.s16       q10, d6, d16             \n" // a3*2217 + 937 - a2*5352
-
-    // temp[1+i*4] = (d2*2217 + d3*5352 + 1812) >> 9
-    // temp[3+i*4] = (d3*2217 + 937 - d2*5352) >> 9
-    "vshrn.s32       d1, q9, #9               \n"
-    "vshrn.s32       d3, q10, #9              \n"
-
-    // part 2
-    // transpose d0=ip[0], d1=ip[4], d2=ip[8], d3=ip[12]
-    "vtrn.32         d0, d2                   \n"
-    "vtrn.32         d1, d3                   \n"
-    "vtrn.16         d0, d1                   \n"
-    "vtrn.16         d2, d3                   \n"
-
-    "vmov.s16        d26, #7                  \n"
-
-    "vadd.s16        d4, d0, d3               \n" // a1 = ip[0] + ip[12]
-    "vadd.s16        d5, d1, d2               \n" // b1 = ip[4] + ip[8]
-    "vsub.s16        d6, d1, d2               \n" // c1 = ip[4] - ip[8]
-    "vadd.s16        d4, d4, d26              \n" // a1 + 7
-    "vsub.s16        d7, d0, d3               \n" // d1 = ip[0] - ip[12]
-
-    "vadd.s16        d0, d4, d5               \n" // op[0] = a1 + b1 + 7
-    "vsub.s16        d2, d4, d5               \n" // op[8] = a1 - b1 + 7
-
-    "vmlal.s16       q11, d7, d16             \n" // d1*5352 + 12000
-    "vmlal.s16       q12, d7, d17             \n" // d1*2217 + 51000
-
-    "vceq.s16        d4, d7, #0               \n"
-
-    "vshr.s16        d0, d0, #4               \n"
-    "vshr.s16        d2, d2, #4               \n"
-
-    "vmlal.s16       q11, d6, d17             \n" // c1*2217 + d1*5352 + 12000
-    "vmlsl.s16       q12, d6, d16             \n" // d1*2217 - c1*5352 + 51000
-
-    "vmvn            d4, d4                   \n" // !(d1 == 0)
-    // op[4] = (c1*2217 + d1*5352 + 12000)>>16
-    "vshrn.s32       d1, q11, #16             \n"
-    // op[4] += (d1!=0)
-    "vsub.s16        d1, d1, d4               \n"
-    // op[12]= (d1*2217 - c1*5352 + 51000)>>16
-    "vshrn.s32       d3, q12, #16             \n"
-
-    // set result to out array
-    "vst1.16         {q0, q1}, [%[out]]   \n"
-    : [src_ptr] "+r"(src_ptr), [ref_ptr] "+r"(ref_ptr),
-      [coeff32] "+r"(coeff32)          // modified registers
-    : [kBPS] "r"(kBPS), [coeff16] "r"(coeff16),
-      [out] "r"(out)                   // constants
-    : "memory", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9",
-      "q10", "q11", "q12", "q13"       // clobbered
-  );
-}
-
-#endif
-
-#define LOAD_LANE_16b(VALUE, LANE) do {             \
-  (VALUE) = vld1_lane_s16(src, (VALUE), (LANE));    \
-  src += stride;                                    \
-} while (0)
-
-static void FTransformWHT_NEON(const int16_t* src, int16_t* out) {
-  const int stride = 16;
-  const int16x4_t zero = vdup_n_s16(0);
-  int32x4x4_t tmp0;
-  int16x4x4_t in;
-  INIT_VECTOR4(in, zero, zero, zero, zero);
-  LOAD_LANE_16b(in.val[0], 0);
-  LOAD_LANE_16b(in.val[1], 0);
-  LOAD_LANE_16b(in.val[2], 0);
-  LOAD_LANE_16b(in.val[3], 0);
-  LOAD_LANE_16b(in.val[0], 1);
-  LOAD_LANE_16b(in.val[1], 1);
-  LOAD_LANE_16b(in.val[2], 1);
-  LOAD_LANE_16b(in.val[3], 1);
-  LOAD_LANE_16b(in.val[0], 2);
-  LOAD_LANE_16b(in.val[1], 2);
-  LOAD_LANE_16b(in.val[2], 2);
-  LOAD_LANE_16b(in.val[3], 2);
-  LOAD_LANE_16b(in.val[0], 3);
-  LOAD_LANE_16b(in.val[1], 3);
-  LOAD_LANE_16b(in.val[2], 3);
-  LOAD_LANE_16b(in.val[3], 3);
-
-  {
-    // a0 = in[0 * 16] + in[2 * 16]
-    // a1 = in[1 * 16] + in[3 * 16]
-    // a2 = in[1 * 16] - in[3 * 16]
-    // a3 = in[0 * 16] - in[2 * 16]
-    const int32x4_t a0 = vaddl_s16(in.val[0], in.val[2]);
-    const int32x4_t a1 = vaddl_s16(in.val[1], in.val[3]);
-    const int32x4_t a2 = vsubl_s16(in.val[1], in.val[3]);
-    const int32x4_t a3 = vsubl_s16(in.val[0], in.val[2]);
-    tmp0.val[0] = vaddq_s32(a0, a1);
-    tmp0.val[1] = vaddq_s32(a3, a2);
-    tmp0.val[2] = vsubq_s32(a3, a2);
-    tmp0.val[3] = vsubq_s32(a0, a1);
-  }
-  {
-    const int32x4x4_t tmp1 = Transpose4x4_NEON(tmp0);
-    // a0 = tmp[0 + i] + tmp[ 8 + i]
-    // a1 = tmp[4 + i] + tmp[12 + i]
-    // a2 = tmp[4 + i] - tmp[12 + i]
-    // a3 = tmp[0 + i] - tmp[ 8 + i]
-    const int32x4_t a0 = vaddq_s32(tmp1.val[0], tmp1.val[2]);
-    const int32x4_t a1 = vaddq_s32(tmp1.val[1], tmp1.val[3]);
-    const int32x4_t a2 = vsubq_s32(tmp1.val[1], tmp1.val[3]);
-    const int32x4_t a3 = vsubq_s32(tmp1.val[0], tmp1.val[2]);
-    const int32x4_t b0 = vhaddq_s32(a0, a1);  // (a0 + a1) >> 1
-    const int32x4_t b1 = vhaddq_s32(a3, a2);  // (a3 + a2) >> 1
-    const int32x4_t b2 = vhsubq_s32(a3, a2);  // (a3 - a2) >> 1
-    const int32x4_t b3 = vhsubq_s32(a0, a1);  // (a0 - a1) >> 1
-    const int16x4_t out0 = vmovn_s32(b0);
-    const int16x4_t out1 = vmovn_s32(b1);
-    const int16x4_t out2 = vmovn_s32(b2);
-    const int16x4_t out3 = vmovn_s32(b3);
-
-    vst1_s16(out +  0, out0);
-    vst1_s16(out +  4, out1);
-    vst1_s16(out +  8, out2);
-    vst1_s16(out + 12, out3);
-  }
-}
-#undef LOAD_LANE_16b
-
-//------------------------------------------------------------------------------
-// Texture distortion
-//
-// We try to match the spectral content (weighted) between source and
-// reconstructed samples.
-
-// a 0123, b 0123
-// a 4567, b 4567
-// a 89ab, b 89ab
-// a cdef, b cdef
-//
-// transpose
-//
-// a 048c, b 048c
-// a 159d, b 159d
-// a 26ae, b 26ae
-// a 37bf, b 37bf
-//
-static WEBP_INLINE int16x8x4_t DistoTranspose4x4S16_NEON(int16x8x4_t q4_in) {
-  const int16x8x2_t q2_tmp0 = vtrnq_s16(q4_in.val[0], q4_in.val[1]);
-  const int16x8x2_t q2_tmp1 = vtrnq_s16(q4_in.val[2], q4_in.val[3]);
-  const int32x4x2_t q2_tmp2 = vtrnq_s32(vreinterpretq_s32_s16(q2_tmp0.val[0]),
-                                        vreinterpretq_s32_s16(q2_tmp1.val[0]));
-  const int32x4x2_t q2_tmp3 = vtrnq_s32(vreinterpretq_s32_s16(q2_tmp0.val[1]),
-                                        vreinterpretq_s32_s16(q2_tmp1.val[1]));
-  q4_in.val[0] = vreinterpretq_s16_s32(q2_tmp2.val[0]);
-  q4_in.val[2] = vreinterpretq_s16_s32(q2_tmp2.val[1]);
-  q4_in.val[1] = vreinterpretq_s16_s32(q2_tmp3.val[0]);
-  q4_in.val[3] = vreinterpretq_s16_s32(q2_tmp3.val[1]);
-  return q4_in;
-}
-
-static WEBP_INLINE int16x8x4_t DistoHorizontalPass_NEON(
-    const int16x8x4_t q4_in) {
-  // {a0, a1} = {in[0] + in[2], in[1] + in[3]}
-  // {a3, a2} = {in[0] - in[2], in[1] - in[3]}
-  const int16x8_t q_a0 = vaddq_s16(q4_in.val[0], q4_in.val[2]);
-  const int16x8_t q_a1 = vaddq_s16(q4_in.val[1], q4_in.val[3]);
-  const int16x8_t q_a3 = vsubq_s16(q4_in.val[0], q4_in.val[2]);
-  const int16x8_t q_a2 = vsubq_s16(q4_in.val[1], q4_in.val[3]);
-  int16x8x4_t q4_out;
-  // tmp[0] = a0 + a1
-  // tmp[1] = a3 + a2
-  // tmp[2] = a3 - a2
-  // tmp[3] = a0 - a1
-  INIT_VECTOR4(q4_out,
-               vabsq_s16(vaddq_s16(q_a0, q_a1)),
-               vabsq_s16(vaddq_s16(q_a3, q_a2)),
-               vabdq_s16(q_a3, q_a2), vabdq_s16(q_a0, q_a1));
-  return q4_out;
-}
-
-static WEBP_INLINE int16x8x4_t DistoVerticalPass_NEON(const uint8x8x4_t q4_in) {
-  const int16x8_t q_a0 = vreinterpretq_s16_u16(vaddl_u8(q4_in.val[0],
-                                                        q4_in.val[2]));
-  const int16x8_t q_a1 = vreinterpretq_s16_u16(vaddl_u8(q4_in.val[1],
-                                                        q4_in.val[3]));
-  const int16x8_t q_a2 = vreinterpretq_s16_u16(vsubl_u8(q4_in.val[1],
-                                                        q4_in.val[3]));
-  const int16x8_t q_a3 = vreinterpretq_s16_u16(vsubl_u8(q4_in.val[0],
-                                                        q4_in.val[2]));
-  int16x8x4_t q4_out;
-
-  INIT_VECTOR4(q4_out,
-               vaddq_s16(q_a0, q_a1), vaddq_s16(q_a3, q_a2),
-               vsubq_s16(q_a3, q_a2), vsubq_s16(q_a0, q_a1));
-  return q4_out;
-}
-
-static WEBP_INLINE int16x4x4_t DistoLoadW_NEON(const uint16_t* w) {
-  const uint16x8_t q_w07 = vld1q_u16(&w[0]);
-  const uint16x8_t q_w8f = vld1q_u16(&w[8]);
-  int16x4x4_t d4_w;
-  INIT_VECTOR4(d4_w,
-               vget_low_s16(vreinterpretq_s16_u16(q_w07)),
-               vget_high_s16(vreinterpretq_s16_u16(q_w07)),
-               vget_low_s16(vreinterpretq_s16_u16(q_w8f)),
-               vget_high_s16(vreinterpretq_s16_u16(q_w8f)));
-  return d4_w;
-}
-
-static WEBP_INLINE int32x2_t DistoSum_NEON(const int16x8x4_t q4_in,
-                                           const int16x4x4_t d4_w) {
-  int32x2_t d_sum;
-  // sum += w[ 0] * abs(b0);
-  // sum += w[ 4] * abs(b1);
-  // sum += w[ 8] * abs(b2);
-  // sum += w[12] * abs(b3);
-  int32x4_t q_sum0 = vmull_s16(d4_w.val[0], vget_low_s16(q4_in.val[0]));
-  int32x4_t q_sum1 = vmull_s16(d4_w.val[1], vget_low_s16(q4_in.val[1]));
-  int32x4_t q_sum2 = vmull_s16(d4_w.val[2], vget_low_s16(q4_in.val[2]));
-  int32x4_t q_sum3 = vmull_s16(d4_w.val[3], vget_low_s16(q4_in.val[3]));
-  q_sum0 = vmlsl_s16(q_sum0, d4_w.val[0], vget_high_s16(q4_in.val[0]));
-  q_sum1 = vmlsl_s16(q_sum1, d4_w.val[1], vget_high_s16(q4_in.val[1]));
-  q_sum2 = vmlsl_s16(q_sum2, d4_w.val[2], vget_high_s16(q4_in.val[2]));
-  q_sum3 = vmlsl_s16(q_sum3, d4_w.val[3], vget_high_s16(q4_in.val[3]));
-
-  q_sum0 = vaddq_s32(q_sum0, q_sum1);
-  q_sum2 = vaddq_s32(q_sum2, q_sum3);
-  q_sum2 = vaddq_s32(q_sum0, q_sum2);
-  d_sum = vpadd_s32(vget_low_s32(q_sum2), vget_high_s32(q_sum2));
-  d_sum = vpadd_s32(d_sum, d_sum);
-  return d_sum;
-}
-
-#define LOAD_LANE_32b(src, VALUE, LANE) \
-    (VALUE) = vld1_lane_u32((const uint32_t*)(src), (VALUE), (LANE))
-
-// Hadamard transform
-// Returns the weighted sum of the absolute value of transformed coefficients.
-// w[] contains a row-major 4 by 4 symmetric matrix.
-static int Disto4x4_NEON(const uint8_t* const a, const uint8_t* const b,
-                         const uint16_t* const w) {
-  uint32x2_t d_in_ab_0123 = vdup_n_u32(0);
-  uint32x2_t d_in_ab_4567 = vdup_n_u32(0);
-  uint32x2_t d_in_ab_89ab = vdup_n_u32(0);
-  uint32x2_t d_in_ab_cdef = vdup_n_u32(0);
-  uint8x8x4_t d4_in;
-
-  // load data a, b
-  LOAD_LANE_32b(a + 0 * BPS, d_in_ab_0123, 0);
-  LOAD_LANE_32b(a + 1 * BPS, d_in_ab_4567, 0);
-  LOAD_LANE_32b(a + 2 * BPS, d_in_ab_89ab, 0);
-  LOAD_LANE_32b(a + 3 * BPS, d_in_ab_cdef, 0);
-  LOAD_LANE_32b(b + 0 * BPS, d_in_ab_0123, 1);
-  LOAD_LANE_32b(b + 1 * BPS, d_in_ab_4567, 1);
-  LOAD_LANE_32b(b + 2 * BPS, d_in_ab_89ab, 1);
-  LOAD_LANE_32b(b + 3 * BPS, d_in_ab_cdef, 1);
-  INIT_VECTOR4(d4_in,
-               vreinterpret_u8_u32(d_in_ab_0123),
-               vreinterpret_u8_u32(d_in_ab_4567),
-               vreinterpret_u8_u32(d_in_ab_89ab),
-               vreinterpret_u8_u32(d_in_ab_cdef));
-
-  {
-    // Vertical pass first to avoid a transpose (vertical and horizontal passes
-    // are commutative because w/kWeightY is symmetric) and subsequent
-    // transpose.
-    const int16x8x4_t q4_v = DistoVerticalPass_NEON(d4_in);
-    const int16x4x4_t d4_w = DistoLoadW_NEON(w);
-    // horizontal pass
-    const int16x8x4_t q4_t = DistoTranspose4x4S16_NEON(q4_v);
-    const int16x8x4_t q4_h = DistoHorizontalPass_NEON(q4_t);
-    int32x2_t d_sum = DistoSum_NEON(q4_h, d4_w);
-
-    // abs(sum2 - sum1) >> 5
-    d_sum = vabs_s32(d_sum);
-    d_sum = vshr_n_s32(d_sum, 5);
-    return vget_lane_s32(d_sum, 0);
-  }
-}
-#undef LOAD_LANE_32b
-
-static int Disto16x16_NEON(const uint8_t* const a, const uint8_t* const b,
-                           const uint16_t* const w) {
-  int D = 0;
-  int x, y;
-  for (y = 0; y < 16 * BPS; y += 4 * BPS) {
-    for (x = 0; x < 16; x += 4) {
-      D += Disto4x4_NEON(a + x + y, b + x + y, w);
-    }
-  }
-  return D;
-}
-
-//------------------------------------------------------------------------------
-
-static void CollectHistogram_NEON(const uint8_t* ref, const uint8_t* pred,
-                                  int start_block, int end_block,
-                                  VP8Histogram* const histo) {
-  const uint16x8_t max_coeff_thresh = vdupq_n_u16(MAX_COEFF_THRESH);
-  int j;
-  int distribution[MAX_COEFF_THRESH + 1] = { 0 };
-  for (j = start_block; j < end_block; ++j) {
-    int16_t out[16];
-    FTransform_NEON(ref + VP8DspScan[j], pred + VP8DspScan[j], out);
-    {
-      int k;
-      const int16x8_t a0 = vld1q_s16(out + 0);
-      const int16x8_t b0 = vld1q_s16(out + 8);
-      const uint16x8_t a1 = vreinterpretq_u16_s16(vabsq_s16(a0));
-      const uint16x8_t b1 = vreinterpretq_u16_s16(vabsq_s16(b0));
-      const uint16x8_t a2 = vshrq_n_u16(a1, 3);
-      const uint16x8_t b2 = vshrq_n_u16(b1, 3);
-      const uint16x8_t a3 = vminq_u16(a2, max_coeff_thresh);
-      const uint16x8_t b3 = vminq_u16(b2, max_coeff_thresh);
-      vst1q_s16(out + 0, vreinterpretq_s16_u16(a3));
-      vst1q_s16(out + 8, vreinterpretq_s16_u16(b3));
-      // Convert coefficients to bin.
-      for (k = 0; k < 16; ++k) {
-        ++distribution[out[k]];
-      }
-    }
-  }
-  VP8SetHistogramData(distribution, histo);
-}
-
-//------------------------------------------------------------------------------
-
-static WEBP_INLINE void AccumulateSSE16_NEON(const uint8_t* const a,
-                                             const uint8_t* const b,
-                                             uint32x4_t* const sum) {
-  const uint8x16_t a0 = vld1q_u8(a);
-  const uint8x16_t b0 = vld1q_u8(b);
-  const uint8x16_t abs_diff = vabdq_u8(a0, b0);
-  const uint16x8_t prod1 = vmull_u8(vget_low_u8(abs_diff),
-                                    vget_low_u8(abs_diff));
-  const uint16x8_t prod2 = vmull_u8(vget_high_u8(abs_diff),
-                                    vget_high_u8(abs_diff));
-  /* pair-wise adds and widen */
-  const uint32x4_t sum1 = vpaddlq_u16(prod1);
-  const uint32x4_t sum2 = vpaddlq_u16(prod2);
-  *sum = vaddq_u32(*sum, vaddq_u32(sum1, sum2));
-}
-
-// Horizontal sum of all four uint32_t values in 'sum'.
-static int SumToInt_NEON(uint32x4_t sum) {
-  const uint64x2_t sum2 = vpaddlq_u32(sum);
-  const uint64_t sum3 = vgetq_lane_u64(sum2, 0) + vgetq_lane_u64(sum2, 1);
-  return (int)sum3;
-}
-
-static int SSE16x16_NEON(const uint8_t* a, const uint8_t* b) {
-  uint32x4_t sum = vdupq_n_u32(0);
-  int y;
-  for (y = 0; y < 16; ++y) {
-    AccumulateSSE16_NEON(a + y * BPS, b + y * BPS, &sum);
-  }
-  return SumToInt_NEON(sum);
-}
-
-static int SSE16x8_NEON(const uint8_t* a, const uint8_t* b) {
-  uint32x4_t sum = vdupq_n_u32(0);
-  int y;
-  for (y = 0; y < 8; ++y) {
-    AccumulateSSE16_NEON(a + y * BPS, b + y * BPS, &sum);
-  }
-  return SumToInt_NEON(sum);
-}
-
-static int SSE8x8_NEON(const uint8_t* a, const uint8_t* b) {
-  uint32x4_t sum = vdupq_n_u32(0);
-  int y;
-  for (y = 0; y < 8; ++y) {
-    const uint8x8_t a0 = vld1_u8(a + y * BPS);
-    const uint8x8_t b0 = vld1_u8(b + y * BPS);
-    const uint8x8_t abs_diff = vabd_u8(a0, b0);
-    const uint16x8_t prod = vmull_u8(abs_diff, abs_diff);
-    sum = vpadalq_u16(sum, prod);
-  }
-  return SumToInt_NEON(sum);
-}
-
-static int SSE4x4_NEON(const uint8_t* a, const uint8_t* b) {
-  const uint8x16_t a0 = Load4x4_NEON(a);
-  const uint8x16_t b0 = Load4x4_NEON(b);
-  const uint8x16_t abs_diff = vabdq_u8(a0, b0);
-  const uint16x8_t prod1 = vmull_u8(vget_low_u8(abs_diff),
-                                    vget_low_u8(abs_diff));
-  const uint16x8_t prod2 = vmull_u8(vget_high_u8(abs_diff),
-                                    vget_high_u8(abs_diff));
-  /* pair-wise adds and widen */
-  const uint32x4_t sum1 = vpaddlq_u16(prod1);
-  const uint32x4_t sum2 = vpaddlq_u16(prod2);
-  return SumToInt_NEON(vaddq_u32(sum1, sum2));
-}
-
-//------------------------------------------------------------------------------
-
-// Compilation with gcc-4.6.x is problematic for now.
-#if !defined(WORK_AROUND_GCC)
-
-static int16x8_t Quantize_NEON(int16_t* const in,
-                               const VP8Matrix* const mtx, int offset) {
-  const uint16x8_t sharp = vld1q_u16(&mtx->sharpen_[offset]);
-  const uint16x8_t q = vld1q_u16(&mtx->q_[offset]);
-  const uint16x8_t iq = vld1q_u16(&mtx->iq_[offset]);
-  const uint32x4_t bias0 = vld1q_u32(&mtx->bias_[offset + 0]);
-  const uint32x4_t bias1 = vld1q_u32(&mtx->bias_[offset + 4]);
-
-  const int16x8_t a = vld1q_s16(in + offset);                // in
-  const uint16x8_t b = vreinterpretq_u16_s16(vabsq_s16(a));  // coeff = abs(in)
-  const int16x8_t sign = vshrq_n_s16(a, 15);                 // sign
-  const uint16x8_t c = vaddq_u16(b, sharp);                  // + sharpen
-  const uint32x4_t m0 = vmull_u16(vget_low_u16(c), vget_low_u16(iq));
-  const uint32x4_t m1 = vmull_u16(vget_high_u16(c), vget_high_u16(iq));
-  const uint32x4_t m2 = vhaddq_u32(m0, bias0);
-  const uint32x4_t m3 = vhaddq_u32(m1, bias1);     // (coeff * iQ + bias) >> 1
-  const uint16x8_t c0 = vcombine_u16(vshrn_n_u32(m2, 16),
-                                     vshrn_n_u32(m3, 16));   // QFIX=17 = 16+1
-  const uint16x8_t c1 = vminq_u16(c0, vdupq_n_u16(MAX_LEVEL));
-  const int16x8_t c2 = veorq_s16(vreinterpretq_s16_u16(c1), sign);
-  const int16x8_t c3 = vsubq_s16(c2, sign);                  // restore sign
-  const int16x8_t c4 = vmulq_s16(c3, vreinterpretq_s16_u16(q));
-  vst1q_s16(in + offset, c4);
-  assert(QFIX == 17);  // this function can't work as is if QFIX != 16+1
-  return c3;
-}
-
-static const uint8_t kShuffles[4][8] = {
-  { 0,   1,  2,  3,  8,  9, 16, 17 },
-  { 10, 11,  4,  5,  6,  7, 12, 13 },
-  { 18, 19, 24, 25, 26, 27, 20, 21 },
-  { 14, 15, 22, 23, 28, 29, 30, 31 }
-};
-
-static int QuantizeBlock_NEON(int16_t in[16], int16_t out[16],
-                              const VP8Matrix* const mtx) {
-  const int16x8_t out0 = Quantize_NEON(in, mtx, 0);
-  const int16x8_t out1 = Quantize_NEON(in, mtx, 8);
-  uint8x8x4_t shuffles;
-  // vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use
-  // non-standard versions there.
-#if defined(__APPLE__) && defined(__aarch64__) && \
-    defined(__apple_build_version__) && (__apple_build_version__< 6020037)
-  uint8x16x2_t all_out;
-  INIT_VECTOR2(all_out, vreinterpretq_u8_s16(out0), vreinterpretq_u8_s16(out1));
-  INIT_VECTOR4(shuffles,
-               vtbl2q_u8(all_out, vld1_u8(kShuffles[0])),
-               vtbl2q_u8(all_out, vld1_u8(kShuffles[1])),
-               vtbl2q_u8(all_out, vld1_u8(kShuffles[2])),
-               vtbl2q_u8(all_out, vld1_u8(kShuffles[3])));
-#else
-  uint8x8x4_t all_out;
-  INIT_VECTOR4(all_out,
-               vreinterpret_u8_s16(vget_low_s16(out0)),
-               vreinterpret_u8_s16(vget_high_s16(out0)),
-               vreinterpret_u8_s16(vget_low_s16(out1)),
-               vreinterpret_u8_s16(vget_high_s16(out1)));
-  INIT_VECTOR4(shuffles,
-               vtbl4_u8(all_out, vld1_u8(kShuffles[0])),
-               vtbl4_u8(all_out, vld1_u8(kShuffles[1])),
-               vtbl4_u8(all_out, vld1_u8(kShuffles[2])),
-               vtbl4_u8(all_out, vld1_u8(kShuffles[3])));
-#endif
-  // Zigzag reordering
-  vst1_u8((uint8_t*)(out +  0), shuffles.val[0]);
-  vst1_u8((uint8_t*)(out +  4), shuffles.val[1]);
-  vst1_u8((uint8_t*)(out +  8), shuffles.val[2]);
-  vst1_u8((uint8_t*)(out + 12), shuffles.val[3]);
-  // test zeros
-  if (*(uint64_t*)(out +  0) != 0) return 1;
-  if (*(uint64_t*)(out +  4) != 0) return 1;
-  if (*(uint64_t*)(out +  8) != 0) return 1;
-  if (*(uint64_t*)(out + 12) != 0) return 1;
-  return 0;
-}
-
-static int Quantize2Blocks_NEON(int16_t in[32], int16_t out[32],
-                                const VP8Matrix* const mtx) {
-  int nz;
-  nz  = QuantizeBlock_NEON(in + 0 * 16, out + 0 * 16, mtx) << 0;
-  nz |= QuantizeBlock_NEON(in + 1 * 16, out + 1 * 16, mtx) << 1;
-  return nz;
-}
-
-#endif   // !WORK_AROUND_GCC
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspInitNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitNEON(void) {
-  VP8ITransform = ITransform_NEON;
-  VP8FTransform = FTransform_NEON;
-
-  VP8FTransformWHT = FTransformWHT_NEON;
-
-  VP8TDisto4x4 = Disto4x4_NEON;
-  VP8TDisto16x16 = Disto16x16_NEON;
-  VP8CollectHistogram = CollectHistogram_NEON;
-
-  VP8SSE16x16 = SSE16x16_NEON;
-  VP8SSE16x8 = SSE16x8_NEON;
-  VP8SSE8x8 = SSE8x8_NEON;
-  VP8SSE4x4 = SSE4x4_NEON;
-
-#if !defined(WORK_AROUND_GCC)
-  VP8EncQuantizeBlock = QuantizeBlock_NEON;
-  VP8EncQuantize2Blocks = Quantize2Blocks_NEON;
-#endif
-}
-
-#else  // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(VP8EncDspInitNEON)
-
-#endif  // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/enc_sse2.c b/ios/Pods/libwebp/src/dsp/enc_sse2.c
deleted file mode 100644
index 7b3f142..0000000
--- a/ios/Pods/libwebp/src/dsp/enc_sse2.c
+++ /dev/null
@@ -1,1381 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 version of speed-critical encoding functions.
-//
-// Author: Christian Duvivier (cduvivier@google.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-#include <assert.h>
-#include <stdlib.h>  // for abs()
-#include <emmintrin.h>
-
-#include "src/dsp/common_sse2.h"
-#include "src/enc/cost_enc.h"
-#include "src/enc/vp8i_enc.h"
-
-//------------------------------------------------------------------------------
-// Transforms (Paragraph 14.4)
-
-// Does one or two inverse transforms.
-static void ITransform_SSE2(const uint8_t* ref, const int16_t* in, uint8_t* dst,
-                            int do_two) {
-  // This implementation makes use of 16-bit fixed point versions of two
-  // multiply constants:
-  //    K1 = sqrt(2) * cos (pi/8) ~= 85627 / 2^16
-  //    K2 = sqrt(2) * sin (pi/8) ~= 35468 / 2^16
-  //
-  // To be able to use signed 16-bit integers, we use the following trick to
-  // have constants within range:
-  // - Associated constants are obtained by subtracting the 16-bit fixed point
-  //   version of one:
-  //      k = K - (1 << 16)  =>  K = k + (1 << 16)
-  //      K1 = 85267  =>  k1 =  20091
-  //      K2 = 35468  =>  k2 = -30068
-  // - The multiplication of a variable by a constant become the sum of the
-  //   variable and the multiplication of that variable by the associated
-  //   constant:
-  //      (x * K) >> 16 = (x * (k + (1 << 16))) >> 16 = ((x * k ) >> 16) + x
-  const __m128i k1 = _mm_set1_epi16(20091);
-  const __m128i k2 = _mm_set1_epi16(-30068);
-  __m128i T0, T1, T2, T3;
-
-  // Load and concatenate the transform coefficients (we'll do two inverse
-  // transforms in parallel). In the case of only one inverse transform, the
-  // second half of the vectors will just contain random value we'll never
-  // use nor store.
-  __m128i in0, in1, in2, in3;
-  {
-    in0 = _mm_loadl_epi64((const __m128i*)&in[0]);
-    in1 = _mm_loadl_epi64((const __m128i*)&in[4]);
-    in2 = _mm_loadl_epi64((const __m128i*)&in[8]);
-    in3 = _mm_loadl_epi64((const __m128i*)&in[12]);
-    // a00 a10 a20 a30   x x x x
-    // a01 a11 a21 a31   x x x x
-    // a02 a12 a22 a32   x x x x
-    // a03 a13 a23 a33   x x x x
-    if (do_two) {
-      const __m128i inB0 = _mm_loadl_epi64((const __m128i*)&in[16]);
-      const __m128i inB1 = _mm_loadl_epi64((const __m128i*)&in[20]);
-      const __m128i inB2 = _mm_loadl_epi64((const __m128i*)&in[24]);
-      const __m128i inB3 = _mm_loadl_epi64((const __m128i*)&in[28]);
-      in0 = _mm_unpacklo_epi64(in0, inB0);
-      in1 = _mm_unpacklo_epi64(in1, inB1);
-      in2 = _mm_unpacklo_epi64(in2, inB2);
-      in3 = _mm_unpacklo_epi64(in3, inB3);
-      // a00 a10 a20 a30   b00 b10 b20 b30
-      // a01 a11 a21 a31   b01 b11 b21 b31
-      // a02 a12 a22 a32   b02 b12 b22 b32
-      // a03 a13 a23 a33   b03 b13 b23 b33
-    }
-  }
-
-  // Vertical pass and subsequent transpose.
-  {
-    // First pass, c and d calculations are longer because of the "trick"
-    // multiplications.
-    const __m128i a = _mm_add_epi16(in0, in2);
-    const __m128i b = _mm_sub_epi16(in0, in2);
-    // c = MUL(in1, K2) - MUL(in3, K1) = MUL(in1, k2) - MUL(in3, k1) + in1 - in3
-    const __m128i c1 = _mm_mulhi_epi16(in1, k2);
-    const __m128i c2 = _mm_mulhi_epi16(in3, k1);
-    const __m128i c3 = _mm_sub_epi16(in1, in3);
-    const __m128i c4 = _mm_sub_epi16(c1, c2);
-    const __m128i c = _mm_add_epi16(c3, c4);
-    // d = MUL(in1, K1) + MUL(in3, K2) = MUL(in1, k1) + MUL(in3, k2) + in1 + in3
-    const __m128i d1 = _mm_mulhi_epi16(in1, k1);
-    const __m128i d2 = _mm_mulhi_epi16(in3, k2);
-    const __m128i d3 = _mm_add_epi16(in1, in3);
-    const __m128i d4 = _mm_add_epi16(d1, d2);
-    const __m128i d = _mm_add_epi16(d3, d4);
-
-    // Second pass.
-    const __m128i tmp0 = _mm_add_epi16(a, d);
-    const __m128i tmp1 = _mm_add_epi16(b, c);
-    const __m128i tmp2 = _mm_sub_epi16(b, c);
-    const __m128i tmp3 = _mm_sub_epi16(a, d);
-
-    // Transpose the two 4x4.
-    VP8Transpose_2_4x4_16b(&tmp0, &tmp1, &tmp2, &tmp3, &T0, &T1, &T2, &T3);
-  }
-
-  // Horizontal pass and subsequent transpose.
-  {
-    // First pass, c and d calculations are longer because of the "trick"
-    // multiplications.
-    const __m128i four = _mm_set1_epi16(4);
-    const __m128i dc = _mm_add_epi16(T0, four);
-    const __m128i a =  _mm_add_epi16(dc, T2);
-    const __m128i b =  _mm_sub_epi16(dc, T2);
-    // c = MUL(T1, K2) - MUL(T3, K1) = MUL(T1, k2) - MUL(T3, k1) + T1 - T3
-    const __m128i c1 = _mm_mulhi_epi16(T1, k2);
-    const __m128i c2 = _mm_mulhi_epi16(T3, k1);
-    const __m128i c3 = _mm_sub_epi16(T1, T3);
-    const __m128i c4 = _mm_sub_epi16(c1, c2);
-    const __m128i c = _mm_add_epi16(c3, c4);
-    // d = MUL(T1, K1) + MUL(T3, K2) = MUL(T1, k1) + MUL(T3, k2) + T1 + T3
-    const __m128i d1 = _mm_mulhi_epi16(T1, k1);
-    const __m128i d2 = _mm_mulhi_epi16(T3, k2);
-    const __m128i d3 = _mm_add_epi16(T1, T3);
-    const __m128i d4 = _mm_add_epi16(d1, d2);
-    const __m128i d = _mm_add_epi16(d3, d4);
-
-    // Second pass.
-    const __m128i tmp0 = _mm_add_epi16(a, d);
-    const __m128i tmp1 = _mm_add_epi16(b, c);
-    const __m128i tmp2 = _mm_sub_epi16(b, c);
-    const __m128i tmp3 = _mm_sub_epi16(a, d);
-    const __m128i shifted0 = _mm_srai_epi16(tmp0, 3);
-    const __m128i shifted1 = _mm_srai_epi16(tmp1, 3);
-    const __m128i shifted2 = _mm_srai_epi16(tmp2, 3);
-    const __m128i shifted3 = _mm_srai_epi16(tmp3, 3);
-
-    // Transpose the two 4x4.
-    VP8Transpose_2_4x4_16b(&shifted0, &shifted1, &shifted2, &shifted3, &T0, &T1,
-                           &T2, &T3);
-  }
-
-  // Add inverse transform to 'ref' and store.
-  {
-    const __m128i zero = _mm_setzero_si128();
-    // Load the reference(s).
-    __m128i ref0, ref1, ref2, ref3;
-    if (do_two) {
-      // Load eight bytes/pixels per line.
-      ref0 = _mm_loadl_epi64((const __m128i*)&ref[0 * BPS]);
-      ref1 = _mm_loadl_epi64((const __m128i*)&ref[1 * BPS]);
-      ref2 = _mm_loadl_epi64((const __m128i*)&ref[2 * BPS]);
-      ref3 = _mm_loadl_epi64((const __m128i*)&ref[3 * BPS]);
-    } else {
-      // Load four bytes/pixels per line.
-      ref0 = _mm_cvtsi32_si128(WebPMemToUint32(&ref[0 * BPS]));
-      ref1 = _mm_cvtsi32_si128(WebPMemToUint32(&ref[1 * BPS]));
-      ref2 = _mm_cvtsi32_si128(WebPMemToUint32(&ref[2 * BPS]));
-      ref3 = _mm_cvtsi32_si128(WebPMemToUint32(&ref[3 * BPS]));
-    }
-    // Convert to 16b.
-    ref0 = _mm_unpacklo_epi8(ref0, zero);
-    ref1 = _mm_unpacklo_epi8(ref1, zero);
-    ref2 = _mm_unpacklo_epi8(ref2, zero);
-    ref3 = _mm_unpacklo_epi8(ref3, zero);
-    // Add the inverse transform(s).
-    ref0 = _mm_add_epi16(ref0, T0);
-    ref1 = _mm_add_epi16(ref1, T1);
-    ref2 = _mm_add_epi16(ref2, T2);
-    ref3 = _mm_add_epi16(ref3, T3);
-    // Unsigned saturate to 8b.
-    ref0 = _mm_packus_epi16(ref0, ref0);
-    ref1 = _mm_packus_epi16(ref1, ref1);
-    ref2 = _mm_packus_epi16(ref2, ref2);
-    ref3 = _mm_packus_epi16(ref3, ref3);
-    // Store the results.
-    if (do_two) {
-      // Store eight bytes/pixels per line.
-      _mm_storel_epi64((__m128i*)&dst[0 * BPS], ref0);
-      _mm_storel_epi64((__m128i*)&dst[1 * BPS], ref1);
-      _mm_storel_epi64((__m128i*)&dst[2 * BPS], ref2);
-      _mm_storel_epi64((__m128i*)&dst[3 * BPS], ref3);
-    } else {
-      // Store four bytes/pixels per line.
-      WebPUint32ToMem(&dst[0 * BPS], _mm_cvtsi128_si32(ref0));
-      WebPUint32ToMem(&dst[1 * BPS], _mm_cvtsi128_si32(ref1));
-      WebPUint32ToMem(&dst[2 * BPS], _mm_cvtsi128_si32(ref2));
-      WebPUint32ToMem(&dst[3 * BPS], _mm_cvtsi128_si32(ref3));
-    }
-  }
-}
-
-static void FTransformPass1_SSE2(const __m128i* const in01,
-                                 const __m128i* const in23,
-                                 __m128i* const out01,
-                                 __m128i* const out32) {
-  const __m128i k937 = _mm_set1_epi32(937);
-  const __m128i k1812 = _mm_set1_epi32(1812);
-
-  const __m128i k88p = _mm_set_epi16(8, 8, 8, 8, 8, 8, 8, 8);
-  const __m128i k88m = _mm_set_epi16(-8, 8, -8, 8, -8, 8, -8, 8);
-  const __m128i k5352_2217p = _mm_set_epi16(2217, 5352, 2217, 5352,
-                                            2217, 5352, 2217, 5352);
-  const __m128i k5352_2217m = _mm_set_epi16(-5352, 2217, -5352, 2217,
-                                            -5352, 2217, -5352, 2217);
-
-  // *in01 = 00 01 10 11 02 03 12 13
-  // *in23 = 20 21 30 31 22 23 32 33
-  const __m128i shuf01_p = _mm_shufflehi_epi16(*in01, _MM_SHUFFLE(2, 3, 0, 1));
-  const __m128i shuf23_p = _mm_shufflehi_epi16(*in23, _MM_SHUFFLE(2, 3, 0, 1));
-  // 00 01 10 11 03 02 13 12
-  // 20 21 30 31 23 22 33 32
-  const __m128i s01 = _mm_unpacklo_epi64(shuf01_p, shuf23_p);
-  const __m128i s32 = _mm_unpackhi_epi64(shuf01_p, shuf23_p);
-  // 00 01 10 11 20 21 30 31
-  // 03 02 13 12 23 22 33 32
-  const __m128i a01 = _mm_add_epi16(s01, s32);
-  const __m128i a32 = _mm_sub_epi16(s01, s32);
-  // [d0 + d3 | d1 + d2 | ...] = [a0 a1 | a0' a1' | ... ]
-  // [d0 - d3 | d1 - d2 | ...] = [a3 a2 | a3' a2' | ... ]
-
-  const __m128i tmp0   = _mm_madd_epi16(a01, k88p);  // [ (a0 + a1) << 3, ... ]
-  const __m128i tmp2   = _mm_madd_epi16(a01, k88m);  // [ (a0 - a1) << 3, ... ]
-  const __m128i tmp1_1 = _mm_madd_epi16(a32, k5352_2217p);
-  const __m128i tmp3_1 = _mm_madd_epi16(a32, k5352_2217m);
-  const __m128i tmp1_2 = _mm_add_epi32(tmp1_1, k1812);
-  const __m128i tmp3_2 = _mm_add_epi32(tmp3_1, k937);
-  const __m128i tmp1   = _mm_srai_epi32(tmp1_2, 9);
-  const __m128i tmp3   = _mm_srai_epi32(tmp3_2, 9);
-  const __m128i s03    = _mm_packs_epi32(tmp0, tmp2);
-  const __m128i s12    = _mm_packs_epi32(tmp1, tmp3);
-  const __m128i s_lo   = _mm_unpacklo_epi16(s03, s12);   // 0 1 0 1 0 1...
-  const __m128i s_hi   = _mm_unpackhi_epi16(s03, s12);   // 2 3 2 3 2 3
-  const __m128i v23    = _mm_unpackhi_epi32(s_lo, s_hi);
-  *out01 = _mm_unpacklo_epi32(s_lo, s_hi);
-  *out32 = _mm_shuffle_epi32(v23, _MM_SHUFFLE(1, 0, 3, 2));  // 3 2 3 2 3 2..
-}
-
-static void FTransformPass2_SSE2(const __m128i* const v01,
-                                 const __m128i* const v32,
-                                 int16_t* out) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i seven = _mm_set1_epi16(7);
-  const __m128i k5352_2217 = _mm_set_epi16(5352,  2217, 5352,  2217,
-                                           5352,  2217, 5352,  2217);
-  const __m128i k2217_5352 = _mm_set_epi16(2217, -5352, 2217, -5352,
-                                           2217, -5352, 2217, -5352);
-  const __m128i k12000_plus_one = _mm_set1_epi32(12000 + (1 << 16));
-  const __m128i k51000 = _mm_set1_epi32(51000);
-
-  // Same operations are done on the (0,3) and (1,2) pairs.
-  // a3 = v0 - v3
-  // a2 = v1 - v2
-  const __m128i a32 = _mm_sub_epi16(*v01, *v32);
-  const __m128i a22 = _mm_unpackhi_epi64(a32, a32);
-
-  const __m128i b23 = _mm_unpacklo_epi16(a22, a32);
-  const __m128i c1 = _mm_madd_epi16(b23, k5352_2217);
-  const __m128i c3 = _mm_madd_epi16(b23, k2217_5352);
-  const __m128i d1 = _mm_add_epi32(c1, k12000_plus_one);
-  const __m128i d3 = _mm_add_epi32(c3, k51000);
-  const __m128i e1 = _mm_srai_epi32(d1, 16);
-  const __m128i e3 = _mm_srai_epi32(d3, 16);
-  // f1 = ((b3 * 5352 + b2 * 2217 + 12000) >> 16)
-  // f3 = ((b3 * 2217 - b2 * 5352 + 51000) >> 16)
-  const __m128i f1 = _mm_packs_epi32(e1, e1);
-  const __m128i f3 = _mm_packs_epi32(e3, e3);
-  // g1 = f1 + (a3 != 0);
-  // The compare will return (0xffff, 0) for (==0, !=0). To turn that into the
-  // desired (0, 1), we add one earlier through k12000_plus_one.
-  // -> g1 = f1 + 1 - (a3 == 0)
-  const __m128i g1 = _mm_add_epi16(f1, _mm_cmpeq_epi16(a32, zero));
-
-  // a0 = v0 + v3
-  // a1 = v1 + v2
-  const __m128i a01 = _mm_add_epi16(*v01, *v32);
-  const __m128i a01_plus_7 = _mm_add_epi16(a01, seven);
-  const __m128i a11 = _mm_unpackhi_epi64(a01, a01);
-  const __m128i c0 = _mm_add_epi16(a01_plus_7, a11);
-  const __m128i c2 = _mm_sub_epi16(a01_plus_7, a11);
-  // d0 = (a0 + a1 + 7) >> 4;
-  // d2 = (a0 - a1 + 7) >> 4;
-  const __m128i d0 = _mm_srai_epi16(c0, 4);
-  const __m128i d2 = _mm_srai_epi16(c2, 4);
-
-  const __m128i d0_g1 = _mm_unpacklo_epi64(d0, g1);
-  const __m128i d2_f3 = _mm_unpacklo_epi64(d2, f3);
-  _mm_storeu_si128((__m128i*)&out[0], d0_g1);
-  _mm_storeu_si128((__m128i*)&out[8], d2_f3);
-}
-
-static void FTransform_SSE2(const uint8_t* src, const uint8_t* ref,
-                            int16_t* out) {
-  const __m128i zero = _mm_setzero_si128();
-  // Load src.
-  const __m128i src0 = _mm_loadl_epi64((const __m128i*)&src[0 * BPS]);
-  const __m128i src1 = _mm_loadl_epi64((const __m128i*)&src[1 * BPS]);
-  const __m128i src2 = _mm_loadl_epi64((const __m128i*)&src[2 * BPS]);
-  const __m128i src3 = _mm_loadl_epi64((const __m128i*)&src[3 * BPS]);
-  // 00 01 02 03 *
-  // 10 11 12 13 *
-  // 20 21 22 23 *
-  // 30 31 32 33 *
-  // Shuffle.
-  const __m128i src_0 = _mm_unpacklo_epi16(src0, src1);
-  const __m128i src_1 = _mm_unpacklo_epi16(src2, src3);
-  // 00 01 10 11 02 03 12 13 * * ...
-  // 20 21 30 31 22 22 32 33 * * ...
-
-  // Load ref.
-  const __m128i ref0 = _mm_loadl_epi64((const __m128i*)&ref[0 * BPS]);
-  const __m128i ref1 = _mm_loadl_epi64((const __m128i*)&ref[1 * BPS]);
-  const __m128i ref2 = _mm_loadl_epi64((const __m128i*)&ref[2 * BPS]);
-  const __m128i ref3 = _mm_loadl_epi64((const __m128i*)&ref[3 * BPS]);
-  const __m128i ref_0 = _mm_unpacklo_epi16(ref0, ref1);
-  const __m128i ref_1 = _mm_unpacklo_epi16(ref2, ref3);
-
-  // Convert both to 16 bit.
-  const __m128i src_0_16b = _mm_unpacklo_epi8(src_0, zero);
-  const __m128i src_1_16b = _mm_unpacklo_epi8(src_1, zero);
-  const __m128i ref_0_16b = _mm_unpacklo_epi8(ref_0, zero);
-  const __m128i ref_1_16b = _mm_unpacklo_epi8(ref_1, zero);
-
-  // Compute the difference.
-  const __m128i row01 = _mm_sub_epi16(src_0_16b, ref_0_16b);
-  const __m128i row23 = _mm_sub_epi16(src_1_16b, ref_1_16b);
-  __m128i v01, v32;
-
-  // First pass
-  FTransformPass1_SSE2(&row01, &row23, &v01, &v32);
-
-  // Second pass
-  FTransformPass2_SSE2(&v01, &v32, out);
-}
-
-static void FTransform2_SSE2(const uint8_t* src, const uint8_t* ref,
-                             int16_t* out) {
-  const __m128i zero = _mm_setzero_si128();
-
-  // Load src and convert to 16b.
-  const __m128i src0 = _mm_loadl_epi64((const __m128i*)&src[0 * BPS]);
-  const __m128i src1 = _mm_loadl_epi64((const __m128i*)&src[1 * BPS]);
-  const __m128i src2 = _mm_loadl_epi64((const __m128i*)&src[2 * BPS]);
-  const __m128i src3 = _mm_loadl_epi64((const __m128i*)&src[3 * BPS]);
-  const __m128i src_0 = _mm_unpacklo_epi8(src0, zero);
-  const __m128i src_1 = _mm_unpacklo_epi8(src1, zero);
-  const __m128i src_2 = _mm_unpacklo_epi8(src2, zero);
-  const __m128i src_3 = _mm_unpacklo_epi8(src3, zero);
-  // Load ref and convert to 16b.
-  const __m128i ref0 = _mm_loadl_epi64((const __m128i*)&ref[0 * BPS]);
-  const __m128i ref1 = _mm_loadl_epi64((const __m128i*)&ref[1 * BPS]);
-  const __m128i ref2 = _mm_loadl_epi64((const __m128i*)&ref[2 * BPS]);
-  const __m128i ref3 = _mm_loadl_epi64((const __m128i*)&ref[3 * BPS]);
-  const __m128i ref_0 = _mm_unpacklo_epi8(ref0, zero);
-  const __m128i ref_1 = _mm_unpacklo_epi8(ref1, zero);
-  const __m128i ref_2 = _mm_unpacklo_epi8(ref2, zero);
-  const __m128i ref_3 = _mm_unpacklo_epi8(ref3, zero);
-  // Compute difference. -> 00 01 02 03  00' 01' 02' 03'
-  const __m128i diff0 = _mm_sub_epi16(src_0, ref_0);
-  const __m128i diff1 = _mm_sub_epi16(src_1, ref_1);
-  const __m128i diff2 = _mm_sub_epi16(src_2, ref_2);
-  const __m128i diff3 = _mm_sub_epi16(src_3, ref_3);
-
-  // Unpack and shuffle
-  // 00 01 02 03   0 0 0 0
-  // 10 11 12 13   0 0 0 0
-  // 20 21 22 23   0 0 0 0
-  // 30 31 32 33   0 0 0 0
-  const __m128i shuf01l = _mm_unpacklo_epi32(diff0, diff1);
-  const __m128i shuf23l = _mm_unpacklo_epi32(diff2, diff3);
-  const __m128i shuf01h = _mm_unpackhi_epi32(diff0, diff1);
-  const __m128i shuf23h = _mm_unpackhi_epi32(diff2, diff3);
-  __m128i v01l, v32l;
-  __m128i v01h, v32h;
-
-  // First pass
-  FTransformPass1_SSE2(&shuf01l, &shuf23l, &v01l, &v32l);
-  FTransformPass1_SSE2(&shuf01h, &shuf23h, &v01h, &v32h);
-
-  // Second pass
-  FTransformPass2_SSE2(&v01l, &v32l, out + 0);
-  FTransformPass2_SSE2(&v01h, &v32h, out + 16);
-}
-
-static void FTransformWHTRow_SSE2(const int16_t* const in, __m128i* const out) {
-  const __m128i kMult = _mm_set_epi16(-1, 1, -1, 1, 1, 1, 1, 1);
-  const __m128i src0 = _mm_loadl_epi64((__m128i*)&in[0 * 16]);
-  const __m128i src1 = _mm_loadl_epi64((__m128i*)&in[1 * 16]);
-  const __m128i src2 = _mm_loadl_epi64((__m128i*)&in[2 * 16]);
-  const __m128i src3 = _mm_loadl_epi64((__m128i*)&in[3 * 16]);
-  const __m128i A01 = _mm_unpacklo_epi16(src0, src1);  // A0 A1 | ...
-  const __m128i A23 = _mm_unpacklo_epi16(src2, src3);  // A2 A3 | ...
-  const __m128i B0 = _mm_adds_epi16(A01, A23);    // a0 | a1 | ...
-  const __m128i B1 = _mm_subs_epi16(A01, A23);    // a3 | a2 | ...
-  const __m128i C0 = _mm_unpacklo_epi32(B0, B1);  // a0 | a1 | a3 | a2 | ...
-  const __m128i C1 = _mm_unpacklo_epi32(B1, B0);  // a3 | a2 | a0 | a1 | ...
-  const __m128i D = _mm_unpacklo_epi64(C0, C1);   // a0 a1 a3 a2 a3 a2 a0 a1
-  *out = _mm_madd_epi16(D, kMult);
-}
-
-static void FTransformWHT_SSE2(const int16_t* in, int16_t* out) {
-  // Input is 12b signed.
-  __m128i row0, row1, row2, row3;
-  // Rows are 14b signed.
-  FTransformWHTRow_SSE2(in + 0 * 64, &row0);
-  FTransformWHTRow_SSE2(in + 1 * 64, &row1);
-  FTransformWHTRow_SSE2(in + 2 * 64, &row2);
-  FTransformWHTRow_SSE2(in + 3 * 64, &row3);
-
-  {
-    // The a* are 15b signed.
-    const __m128i a0 = _mm_add_epi32(row0, row2);
-    const __m128i a1 = _mm_add_epi32(row1, row3);
-    const __m128i a2 = _mm_sub_epi32(row1, row3);
-    const __m128i a3 = _mm_sub_epi32(row0, row2);
-    const __m128i a0a3 = _mm_packs_epi32(a0, a3);
-    const __m128i a1a2 = _mm_packs_epi32(a1, a2);
-
-    // The b* are 16b signed.
-    const __m128i b0b1 = _mm_add_epi16(a0a3, a1a2);
-    const __m128i b3b2 = _mm_sub_epi16(a0a3, a1a2);
-    const __m128i tmp_b2b3 = _mm_unpackhi_epi64(b3b2, b3b2);
-    const __m128i b2b3 = _mm_unpacklo_epi64(tmp_b2b3, b3b2);
-
-    _mm_storeu_si128((__m128i*)&out[0], _mm_srai_epi16(b0b1, 1));
-    _mm_storeu_si128((__m128i*)&out[8], _mm_srai_epi16(b2b3, 1));
-  }
-}
-
-//------------------------------------------------------------------------------
-// Compute susceptibility based on DCT-coeff histograms:
-// the higher, the "easier" the macroblock is to compress.
-
-static void CollectHistogram_SSE2(const uint8_t* ref, const uint8_t* pred,
-                                  int start_block, int end_block,
-                                  VP8Histogram* const histo) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i max_coeff_thresh = _mm_set1_epi16(MAX_COEFF_THRESH);
-  int j;
-  int distribution[MAX_COEFF_THRESH + 1] = { 0 };
-  for (j = start_block; j < end_block; ++j) {
-    int16_t out[16];
-    int k;
-
-    FTransform_SSE2(ref + VP8DspScan[j], pred + VP8DspScan[j], out);
-
-    // Convert coefficients to bin (within out[]).
-    {
-      // Load.
-      const __m128i out0 = _mm_loadu_si128((__m128i*)&out[0]);
-      const __m128i out1 = _mm_loadu_si128((__m128i*)&out[8]);
-      const __m128i d0 = _mm_sub_epi16(zero, out0);
-      const __m128i d1 = _mm_sub_epi16(zero, out1);
-      const __m128i abs0 = _mm_max_epi16(out0, d0);   // abs(v), 16b
-      const __m128i abs1 = _mm_max_epi16(out1, d1);
-      // v = abs(out) >> 3
-      const __m128i v0 = _mm_srai_epi16(abs0, 3);
-      const __m128i v1 = _mm_srai_epi16(abs1, 3);
-      // bin = min(v, MAX_COEFF_THRESH)
-      const __m128i bin0 = _mm_min_epi16(v0, max_coeff_thresh);
-      const __m128i bin1 = _mm_min_epi16(v1, max_coeff_thresh);
-      // Store.
-      _mm_storeu_si128((__m128i*)&out[0], bin0);
-      _mm_storeu_si128((__m128i*)&out[8], bin1);
-    }
-
-    // Convert coefficients to bin.
-    for (k = 0; k < 16; ++k) {
-      ++distribution[out[k]];
-    }
-  }
-  VP8SetHistogramData(distribution, histo);
-}
-
-//------------------------------------------------------------------------------
-// Intra predictions
-
-// helper for chroma-DC predictions
-static WEBP_INLINE void Put8x8uv_SSE2(uint8_t v, uint8_t* dst) {
-  int j;
-  const __m128i values = _mm_set1_epi8(v);
-  for (j = 0; j < 8; ++j) {
-    _mm_storel_epi64((__m128i*)(dst + j * BPS), values);
-  }
-}
-
-static WEBP_INLINE void Put16_SSE2(uint8_t v, uint8_t* dst) {
-  int j;
-  const __m128i values = _mm_set1_epi8(v);
-  for (j = 0; j < 16; ++j) {
-    _mm_store_si128((__m128i*)(dst + j * BPS), values);
-  }
-}
-
-static WEBP_INLINE void Fill_SSE2(uint8_t* dst, int value, int size) {
-  if (size == 4) {
-    int j;
-    for (j = 0; j < 4; ++j) {
-      memset(dst + j * BPS, value, 4);
-    }
-  } else if (size == 8) {
-    Put8x8uv_SSE2(value, dst);
-  } else {
-    Put16_SSE2(value, dst);
-  }
-}
-
-static WEBP_INLINE void VE8uv_SSE2(uint8_t* dst, const uint8_t* top) {
-  int j;
-  const __m128i top_values = _mm_loadl_epi64((const __m128i*)top);
-  for (j = 0; j < 8; ++j) {
-    _mm_storel_epi64((__m128i*)(dst + j * BPS), top_values);
-  }
-}
-
-static WEBP_INLINE void VE16_SSE2(uint8_t* dst, const uint8_t* top) {
-  const __m128i top_values = _mm_load_si128((const __m128i*)top);
-  int j;
-  for (j = 0; j < 16; ++j) {
-    _mm_store_si128((__m128i*)(dst + j * BPS), top_values);
-  }
-}
-
-static WEBP_INLINE void VerticalPred_SSE2(uint8_t* dst,
-                                          const uint8_t* top, int size) {
-  if (top != NULL) {
-    if (size == 8) {
-      VE8uv_SSE2(dst, top);
-    } else {
-      VE16_SSE2(dst, top);
-    }
-  } else {
-    Fill_SSE2(dst, 127, size);
-  }
-}
-
-static WEBP_INLINE void HE8uv_SSE2(uint8_t* dst, const uint8_t* left) {
-  int j;
-  for (j = 0; j < 8; ++j) {
-    const __m128i values = _mm_set1_epi8(left[j]);
-    _mm_storel_epi64((__m128i*)dst, values);
-    dst += BPS;
-  }
-}
-
-static WEBP_INLINE void HE16_SSE2(uint8_t* dst, const uint8_t* left) {
-  int j;
-  for (j = 0; j < 16; ++j) {
-    const __m128i values = _mm_set1_epi8(left[j]);
-    _mm_store_si128((__m128i*)dst, values);
-    dst += BPS;
-  }
-}
-
-static WEBP_INLINE void HorizontalPred_SSE2(uint8_t* dst,
-                                            const uint8_t* left, int size) {
-  if (left != NULL) {
-    if (size == 8) {
-      HE8uv_SSE2(dst, left);
-    } else {
-      HE16_SSE2(dst, left);
-    }
-  } else {
-    Fill_SSE2(dst, 129, size);
-  }
-}
-
-static WEBP_INLINE void TM_SSE2(uint8_t* dst, const uint8_t* left,
-                                const uint8_t* top, int size) {
-  const __m128i zero = _mm_setzero_si128();
-  int y;
-  if (size == 8) {
-    const __m128i top_values = _mm_loadl_epi64((const __m128i*)top);
-    const __m128i top_base = _mm_unpacklo_epi8(top_values, zero);
-    for (y = 0; y < 8; ++y, dst += BPS) {
-      const int val = left[y] - left[-1];
-      const __m128i base = _mm_set1_epi16(val);
-      const __m128i out = _mm_packus_epi16(_mm_add_epi16(base, top_base), zero);
-      _mm_storel_epi64((__m128i*)dst, out);
-    }
-  } else {
-    const __m128i top_values = _mm_load_si128((const __m128i*)top);
-    const __m128i top_base_0 = _mm_unpacklo_epi8(top_values, zero);
-    const __m128i top_base_1 = _mm_unpackhi_epi8(top_values, zero);
-    for (y = 0; y < 16; ++y, dst += BPS) {
-      const int val = left[y] - left[-1];
-      const __m128i base = _mm_set1_epi16(val);
-      const __m128i out_0 = _mm_add_epi16(base, top_base_0);
-      const __m128i out_1 = _mm_add_epi16(base, top_base_1);
-      const __m128i out = _mm_packus_epi16(out_0, out_1);
-      _mm_store_si128((__m128i*)dst, out);
-    }
-  }
-}
-
-static WEBP_INLINE void TrueMotion_SSE2(uint8_t* dst, const uint8_t* left,
-                                        const uint8_t* top, int size) {
-  if (left != NULL) {
-    if (top != NULL) {
-      TM_SSE2(dst, left, top, size);
-    } else {
-      HorizontalPred_SSE2(dst, left, size);
-    }
-  } else {
-    // true motion without left samples (hence: with default 129 value)
-    // is equivalent to VE prediction where you just copy the top samples.
-    // Note that if top samples are not available, the default value is
-    // then 129, and not 127 as in the VerticalPred case.
-    if (top != NULL) {
-      VerticalPred_SSE2(dst, top, size);
-    } else {
-      Fill_SSE2(dst, 129, size);
-    }
-  }
-}
-
-static WEBP_INLINE void DC8uv_SSE2(uint8_t* dst, const uint8_t* left,
-                                   const uint8_t* top) {
-  const __m128i top_values = _mm_loadl_epi64((const __m128i*)top);
-  const __m128i left_values = _mm_loadl_epi64((const __m128i*)left);
-  const __m128i combined = _mm_unpacklo_epi64(top_values, left_values);
-  const int DC = VP8HorizontalAdd8b(&combined) + 8;
-  Put8x8uv_SSE2(DC >> 4, dst);
-}
-
-static WEBP_INLINE void DC8uvNoLeft_SSE2(uint8_t* dst, const uint8_t* top) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i top_values = _mm_loadl_epi64((const __m128i*)top);
-  const __m128i sum = _mm_sad_epu8(top_values, zero);
-  const int DC = _mm_cvtsi128_si32(sum) + 4;
-  Put8x8uv_SSE2(DC >> 3, dst);
-}
-
-static WEBP_INLINE void DC8uvNoTop_SSE2(uint8_t* dst, const uint8_t* left) {
-  // 'left' is contiguous so we can reuse the top summation.
-  DC8uvNoLeft_SSE2(dst, left);
-}
-
-static WEBP_INLINE void DC8uvNoTopLeft_SSE2(uint8_t* dst) {
-  Put8x8uv_SSE2(0x80, dst);
-}
-
-static WEBP_INLINE void DC8uvMode_SSE2(uint8_t* dst, const uint8_t* left,
-                                       const uint8_t* top) {
-  if (top != NULL) {
-    if (left != NULL) {  // top and left present
-      DC8uv_SSE2(dst, left, top);
-    } else {  // top, but no left
-      DC8uvNoLeft_SSE2(dst, top);
-    }
-  } else if (left != NULL) {  // left but no top
-    DC8uvNoTop_SSE2(dst, left);
-  } else {  // no top, no left, nothing.
-    DC8uvNoTopLeft_SSE2(dst);
-  }
-}
-
-static WEBP_INLINE void DC16_SSE2(uint8_t* dst, const uint8_t* left,
-                                  const uint8_t* top) {
-  const __m128i top_row = _mm_load_si128((const __m128i*)top);
-  const __m128i left_row = _mm_load_si128((const __m128i*)left);
-  const int DC =
-      VP8HorizontalAdd8b(&top_row) + VP8HorizontalAdd8b(&left_row) + 16;
-  Put16_SSE2(DC >> 5, dst);
-}
-
-static WEBP_INLINE void DC16NoLeft_SSE2(uint8_t* dst, const uint8_t* top) {
-  const __m128i top_row = _mm_load_si128((const __m128i*)top);
-  const int DC = VP8HorizontalAdd8b(&top_row) + 8;
-  Put16_SSE2(DC >> 4, dst);
-}
-
-static WEBP_INLINE void DC16NoTop_SSE2(uint8_t* dst, const uint8_t* left) {
-  // 'left' is contiguous so we can reuse the top summation.
-  DC16NoLeft_SSE2(dst, left);
-}
-
-static WEBP_INLINE void DC16NoTopLeft_SSE2(uint8_t* dst) {
-  Put16_SSE2(0x80, dst);
-}
-
-static WEBP_INLINE void DC16Mode_SSE2(uint8_t* dst, const uint8_t* left,
-                                      const uint8_t* top) {
-  if (top != NULL) {
-    if (left != NULL) {  // top and left present
-      DC16_SSE2(dst, left, top);
-    } else {  // top, but no left
-      DC16NoLeft_SSE2(dst, top);
-    }
-  } else if (left != NULL) {  // left but no top
-    DC16NoTop_SSE2(dst, left);
-  } else {  // no top, no left, nothing.
-    DC16NoTopLeft_SSE2(dst);
-  }
-}
-
-//------------------------------------------------------------------------------
-// 4x4 predictions
-
-#define DST(x, y) dst[(x) + (y) * BPS]
-#define AVG3(a, b, c) (((a) + 2 * (b) + (c) + 2) >> 2)
-#define AVG2(a, b) (((a) + (b) + 1) >> 1)
-
-// We use the following 8b-arithmetic tricks:
-//     (a + 2 * b + c + 2) >> 2 = (AC + b + 1) >> 1
-//   where: AC = (a + c) >> 1 = [(a + c + 1) >> 1] - [(a^c) & 1]
-// and:
-//     (a + 2 * b + c + 2) >> 2 = (AB + BC + 1) >> 1 - (ab|bc)&lsb
-//   where: AC = (a + b + 1) >> 1,   BC = (b + c + 1) >> 1
-//   and ab = a ^ b, bc = b ^ c, lsb = (AC^BC)&1
-
-static WEBP_INLINE void VE4_SSE2(uint8_t* dst,
-                                 const uint8_t* top) {  // vertical
-  const __m128i one = _mm_set1_epi8(1);
-  const __m128i ABCDEFGH = _mm_loadl_epi64((__m128i*)(top - 1));
-  const __m128i BCDEFGH0 = _mm_srli_si128(ABCDEFGH, 1);
-  const __m128i CDEFGH00 = _mm_srli_si128(ABCDEFGH, 2);
-  const __m128i a = _mm_avg_epu8(ABCDEFGH, CDEFGH00);
-  const __m128i lsb = _mm_and_si128(_mm_xor_si128(ABCDEFGH, CDEFGH00), one);
-  const __m128i b = _mm_subs_epu8(a, lsb);
-  const __m128i avg = _mm_avg_epu8(b, BCDEFGH0);
-  const uint32_t vals = _mm_cvtsi128_si32(avg);
-  int i;
-  for (i = 0; i < 4; ++i) {
-    WebPUint32ToMem(dst + i * BPS, vals);
-  }
-}
-
-static WEBP_INLINE void HE4_SSE2(uint8_t* dst,
-                                 const uint8_t* top) {  // horizontal
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  WebPUint32ToMem(dst + 0 * BPS, 0x01010101U * AVG3(X, I, J));
-  WebPUint32ToMem(dst + 1 * BPS, 0x01010101U * AVG3(I, J, K));
-  WebPUint32ToMem(dst + 2 * BPS, 0x01010101U * AVG3(J, K, L));
-  WebPUint32ToMem(dst + 3 * BPS, 0x01010101U * AVG3(K, L, L));
-}
-
-static WEBP_INLINE void DC4_SSE2(uint8_t* dst, const uint8_t* top) {
-  uint32_t dc = 4;
-  int i;
-  for (i = 0; i < 4; ++i) dc += top[i] + top[-5 + i];
-  Fill_SSE2(dst, dc >> 3, 4);
-}
-
-static WEBP_INLINE void LD4_SSE2(uint8_t* dst,
-                                 const uint8_t* top) {  // Down-Left
-  const __m128i one = _mm_set1_epi8(1);
-  const __m128i ABCDEFGH = _mm_loadl_epi64((const __m128i*)top);
-  const __m128i BCDEFGH0 = _mm_srli_si128(ABCDEFGH, 1);
-  const __m128i CDEFGH00 = _mm_srli_si128(ABCDEFGH, 2);
-  const __m128i CDEFGHH0 = _mm_insert_epi16(CDEFGH00, top[7], 3);
-  const __m128i avg1 = _mm_avg_epu8(ABCDEFGH, CDEFGHH0);
-  const __m128i lsb = _mm_and_si128(_mm_xor_si128(ABCDEFGH, CDEFGHH0), one);
-  const __m128i avg2 = _mm_subs_epu8(avg1, lsb);
-  const __m128i abcdefg = _mm_avg_epu8(avg2, BCDEFGH0);
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(               abcdefg    ));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 1)));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 2)));
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 3)));
-}
-
-static WEBP_INLINE void VR4_SSE2(uint8_t* dst,
-                                 const uint8_t* top) {  // Vertical-Right
-  const __m128i one = _mm_set1_epi8(1);
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int X = top[-1];
-  const __m128i XABCD = _mm_loadl_epi64((const __m128i*)(top - 1));
-  const __m128i ABCD0 = _mm_srli_si128(XABCD, 1);
-  const __m128i abcd = _mm_avg_epu8(XABCD, ABCD0);
-  const __m128i _XABCD = _mm_slli_si128(XABCD, 1);
-  const __m128i IXABCD = _mm_insert_epi16(_XABCD, I | (X << 8), 0);
-  const __m128i avg1 = _mm_avg_epu8(IXABCD, ABCD0);
-  const __m128i lsb = _mm_and_si128(_mm_xor_si128(IXABCD, ABCD0), one);
-  const __m128i avg2 = _mm_subs_epu8(avg1, lsb);
-  const __m128i efgh = _mm_avg_epu8(avg2, XABCD);
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(               abcd    ));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(               efgh    ));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_slli_si128(abcd, 1)));
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_slli_si128(efgh, 1)));
-
-  // these two are hard to implement in SSE2, so we keep the C-version:
-  DST(0, 2) = AVG3(J, I, X);
-  DST(0, 3) = AVG3(K, J, I);
-}
-
-static WEBP_INLINE void VL4_SSE2(uint8_t* dst,
-                                 const uint8_t* top) {  // Vertical-Left
-  const __m128i one = _mm_set1_epi8(1);
-  const __m128i ABCDEFGH = _mm_loadl_epi64((const __m128i*)top);
-  const __m128i BCDEFGH_ = _mm_srli_si128(ABCDEFGH, 1);
-  const __m128i CDEFGH__ = _mm_srli_si128(ABCDEFGH, 2);
-  const __m128i avg1 = _mm_avg_epu8(ABCDEFGH, BCDEFGH_);
-  const __m128i avg2 = _mm_avg_epu8(CDEFGH__, BCDEFGH_);
-  const __m128i avg3 = _mm_avg_epu8(avg1, avg2);
-  const __m128i lsb1 = _mm_and_si128(_mm_xor_si128(avg1, avg2), one);
-  const __m128i ab = _mm_xor_si128(ABCDEFGH, BCDEFGH_);
-  const __m128i bc = _mm_xor_si128(CDEFGH__, BCDEFGH_);
-  const __m128i abbc = _mm_or_si128(ab, bc);
-  const __m128i lsb2 = _mm_and_si128(abbc, lsb1);
-  const __m128i avg4 = _mm_subs_epu8(avg3, lsb2);
-  const uint32_t extra_out = _mm_cvtsi128_si32(_mm_srli_si128(avg4, 4));
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(               avg1    ));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(               avg4    ));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(avg1, 1)));
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(avg4, 1)));
-
-  // these two are hard to get and irregular
-  DST(3, 2) = (extra_out >> 0) & 0xff;
-  DST(3, 3) = (extra_out >> 8) & 0xff;
-}
-
-static WEBP_INLINE void RD4_SSE2(uint8_t* dst,
-                                 const uint8_t* top) {  // Down-right
-  const __m128i one = _mm_set1_epi8(1);
-  const __m128i LKJIXABC = _mm_loadl_epi64((const __m128i*)(top - 5));
-  const __m128i LKJIXABCD = _mm_insert_epi16(LKJIXABC, top[3], 4);
-  const __m128i KJIXABCD_ = _mm_srli_si128(LKJIXABCD, 1);
-  const __m128i JIXABCD__ = _mm_srli_si128(LKJIXABCD, 2);
-  const __m128i avg1 = _mm_avg_epu8(JIXABCD__, LKJIXABCD);
-  const __m128i lsb = _mm_and_si128(_mm_xor_si128(JIXABCD__, LKJIXABCD), one);
-  const __m128i avg2 = _mm_subs_epu8(avg1, lsb);
-  const __m128i abcdefg = _mm_avg_epu8(avg2, KJIXABCD_);
-  WebPUint32ToMem(dst + 3 * BPS, _mm_cvtsi128_si32(               abcdefg    ));
-  WebPUint32ToMem(dst + 2 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 1)));
-  WebPUint32ToMem(dst + 1 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 2)));
-  WebPUint32ToMem(dst + 0 * BPS, _mm_cvtsi128_si32(_mm_srli_si128(abcdefg, 3)));
-}
-
-static WEBP_INLINE void HU4_SSE2(uint8_t* dst, const uint8_t* top) {
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  DST(0, 0) =             AVG2(I, J);
-  DST(2, 0) = DST(0, 1) = AVG2(J, K);
-  DST(2, 1) = DST(0, 2) = AVG2(K, L);
-  DST(1, 0) =             AVG3(I, J, K);
-  DST(3, 0) = DST(1, 1) = AVG3(J, K, L);
-  DST(3, 1) = DST(1, 2) = AVG3(K, L, L);
-  DST(3, 2) = DST(2, 2) =
-  DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L;
-}
-
-static WEBP_INLINE void HD4_SSE2(uint8_t* dst, const uint8_t* top) {
-  const int X = top[-1];
-  const int I = top[-2];
-  const int J = top[-3];
-  const int K = top[-4];
-  const int L = top[-5];
-  const int A = top[0];
-  const int B = top[1];
-  const int C = top[2];
-
-  DST(0, 0) = DST(2, 1) = AVG2(I, X);
-  DST(0, 1) = DST(2, 2) = AVG2(J, I);
-  DST(0, 2) = DST(2, 3) = AVG2(K, J);
-  DST(0, 3)             = AVG2(L, K);
-
-  DST(3, 0)             = AVG3(A, B, C);
-  DST(2, 0)             = AVG3(X, A, B);
-  DST(1, 0) = DST(3, 1) = AVG3(I, X, A);
-  DST(1, 1) = DST(3, 2) = AVG3(J, I, X);
-  DST(1, 2) = DST(3, 3) = AVG3(K, J, I);
-  DST(1, 3)             = AVG3(L, K, J);
-}
-
-static WEBP_INLINE void TM4_SSE2(uint8_t* dst, const uint8_t* top) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i top_values = _mm_cvtsi32_si128(WebPMemToUint32(top));
-  const __m128i top_base = _mm_unpacklo_epi8(top_values, zero);
-  int y;
-  for (y = 0; y < 4; ++y, dst += BPS) {
-    const int val = top[-2 - y] - top[-1];
-    const __m128i base = _mm_set1_epi16(val);
-    const __m128i out = _mm_packus_epi16(_mm_add_epi16(base, top_base), zero);
-    WebPUint32ToMem(dst, _mm_cvtsi128_si32(out));
-  }
-}
-
-#undef DST
-#undef AVG3
-#undef AVG2
-
-//------------------------------------------------------------------------------
-// luma 4x4 prediction
-
-// Left samples are top[-5 .. -2], top_left is top[-1], top are
-// located at top[0..3], and top right is top[4..7]
-static void Intra4Preds_SSE2(uint8_t* dst, const uint8_t* top) {
-  DC4_SSE2(I4DC4 + dst, top);
-  TM4_SSE2(I4TM4 + dst, top);
-  VE4_SSE2(I4VE4 + dst, top);
-  HE4_SSE2(I4HE4 + dst, top);
-  RD4_SSE2(I4RD4 + dst, top);
-  VR4_SSE2(I4VR4 + dst, top);
-  LD4_SSE2(I4LD4 + dst, top);
-  VL4_SSE2(I4VL4 + dst, top);
-  HD4_SSE2(I4HD4 + dst, top);
-  HU4_SSE2(I4HU4 + dst, top);
-}
-
-//------------------------------------------------------------------------------
-// Chroma 8x8 prediction (paragraph 12.2)
-
-static void IntraChromaPreds_SSE2(uint8_t* dst, const uint8_t* left,
-                                  const uint8_t* top) {
-  // U block
-  DC8uvMode_SSE2(C8DC8 + dst, left, top);
-  VerticalPred_SSE2(C8VE8 + dst, top, 8);
-  HorizontalPred_SSE2(C8HE8 + dst, left, 8);
-  TrueMotion_SSE2(C8TM8 + dst, left, top, 8);
-  // V block
-  dst += 8;
-  if (top != NULL) top += 8;
-  if (left != NULL) left += 16;
-  DC8uvMode_SSE2(C8DC8 + dst, left, top);
-  VerticalPred_SSE2(C8VE8 + dst, top, 8);
-  HorizontalPred_SSE2(C8HE8 + dst, left, 8);
-  TrueMotion_SSE2(C8TM8 + dst, left, top, 8);
-}
-
-//------------------------------------------------------------------------------
-// luma 16x16 prediction (paragraph 12.3)
-
-static void Intra16Preds_SSE2(uint8_t* dst,
-                              const uint8_t* left, const uint8_t* top) {
-  DC16Mode_SSE2(I16DC16 + dst, left, top);
-  VerticalPred_SSE2(I16VE16 + dst, top, 16);
-  HorizontalPred_SSE2(I16HE16 + dst, left, 16);
-  TrueMotion_SSE2(I16TM16 + dst, left, top, 16);
-}
-
-//------------------------------------------------------------------------------
-// Metric
-
-static WEBP_INLINE void SubtractAndAccumulate_SSE2(const __m128i a,
-                                                   const __m128i b,
-                                                   __m128i* const sum) {
-  // take abs(a-b) in 8b
-  const __m128i a_b = _mm_subs_epu8(a, b);
-  const __m128i b_a = _mm_subs_epu8(b, a);
-  const __m128i abs_a_b = _mm_or_si128(a_b, b_a);
-  // zero-extend to 16b
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i C0 = _mm_unpacklo_epi8(abs_a_b, zero);
-  const __m128i C1 = _mm_unpackhi_epi8(abs_a_b, zero);
-  // multiply with self
-  const __m128i sum1 = _mm_madd_epi16(C0, C0);
-  const __m128i sum2 = _mm_madd_epi16(C1, C1);
-  *sum = _mm_add_epi32(sum1, sum2);
-}
-
-static WEBP_INLINE int SSE_16xN_SSE2(const uint8_t* a, const uint8_t* b,
-                                     int num_pairs) {
-  __m128i sum = _mm_setzero_si128();
-  int32_t tmp[4];
-  int i;
-
-  for (i = 0; i < num_pairs; ++i) {
-    const __m128i a0 = _mm_loadu_si128((const __m128i*)&a[BPS * 0]);
-    const __m128i b0 = _mm_loadu_si128((const __m128i*)&b[BPS * 0]);
-    const __m128i a1 = _mm_loadu_si128((const __m128i*)&a[BPS * 1]);
-    const __m128i b1 = _mm_loadu_si128((const __m128i*)&b[BPS * 1]);
-    __m128i sum1, sum2;
-    SubtractAndAccumulate_SSE2(a0, b0, &sum1);
-    SubtractAndAccumulate_SSE2(a1, b1, &sum2);
-    sum = _mm_add_epi32(sum, _mm_add_epi32(sum1, sum2));
-    a += 2 * BPS;
-    b += 2 * BPS;
-  }
-  _mm_storeu_si128((__m128i*)tmp, sum);
-  return (tmp[3] + tmp[2] + tmp[1] + tmp[0]);
-}
-
-static int SSE16x16_SSE2(const uint8_t* a, const uint8_t* b) {
-  return SSE_16xN_SSE2(a, b, 8);
-}
-
-static int SSE16x8_SSE2(const uint8_t* a, const uint8_t* b) {
-  return SSE_16xN_SSE2(a, b, 4);
-}
-
-#define LOAD_8x16b(ptr) \
-  _mm_unpacklo_epi8(_mm_loadl_epi64((const __m128i*)(ptr)), zero)
-
-static int SSE8x8_SSE2(const uint8_t* a, const uint8_t* b) {
-  const __m128i zero = _mm_setzero_si128();
-  int num_pairs = 4;
-  __m128i sum = zero;
-  int32_t tmp[4];
-  while (num_pairs-- > 0) {
-    const __m128i a0 = LOAD_8x16b(&a[BPS * 0]);
-    const __m128i a1 = LOAD_8x16b(&a[BPS * 1]);
-    const __m128i b0 = LOAD_8x16b(&b[BPS * 0]);
-    const __m128i b1 = LOAD_8x16b(&b[BPS * 1]);
-    // subtract
-    const __m128i c0 = _mm_subs_epi16(a0, b0);
-    const __m128i c1 = _mm_subs_epi16(a1, b1);
-    // multiply/accumulate with self
-    const __m128i d0 = _mm_madd_epi16(c0, c0);
-    const __m128i d1 = _mm_madd_epi16(c1, c1);
-    // collect
-    const __m128i sum01 = _mm_add_epi32(d0, d1);
-    sum = _mm_add_epi32(sum, sum01);
-    a += 2 * BPS;
-    b += 2 * BPS;
-  }
-  _mm_storeu_si128((__m128i*)tmp, sum);
-  return (tmp[3] + tmp[2] + tmp[1] + tmp[0]);
-}
-#undef LOAD_8x16b
-
-static int SSE4x4_SSE2(const uint8_t* a, const uint8_t* b) {
-  const __m128i zero = _mm_setzero_si128();
-
-  // Load values. Note that we read 8 pixels instead of 4,
-  // but the a/b buffers are over-allocated to that effect.
-  const __m128i a0 = _mm_loadl_epi64((const __m128i*)&a[BPS * 0]);
-  const __m128i a1 = _mm_loadl_epi64((const __m128i*)&a[BPS * 1]);
-  const __m128i a2 = _mm_loadl_epi64((const __m128i*)&a[BPS * 2]);
-  const __m128i a3 = _mm_loadl_epi64((const __m128i*)&a[BPS * 3]);
-  const __m128i b0 = _mm_loadl_epi64((const __m128i*)&b[BPS * 0]);
-  const __m128i b1 = _mm_loadl_epi64((const __m128i*)&b[BPS * 1]);
-  const __m128i b2 = _mm_loadl_epi64((const __m128i*)&b[BPS * 2]);
-  const __m128i b3 = _mm_loadl_epi64((const __m128i*)&b[BPS * 3]);
-  // Combine pair of lines.
-  const __m128i a01 = _mm_unpacklo_epi32(a0, a1);
-  const __m128i a23 = _mm_unpacklo_epi32(a2, a3);
-  const __m128i b01 = _mm_unpacklo_epi32(b0, b1);
-  const __m128i b23 = _mm_unpacklo_epi32(b2, b3);
-  // Convert to 16b.
-  const __m128i a01s = _mm_unpacklo_epi8(a01, zero);
-  const __m128i a23s = _mm_unpacklo_epi8(a23, zero);
-  const __m128i b01s = _mm_unpacklo_epi8(b01, zero);
-  const __m128i b23s = _mm_unpacklo_epi8(b23, zero);
-  // subtract, square and accumulate
-  const __m128i d0 = _mm_subs_epi16(a01s, b01s);
-  const __m128i d1 = _mm_subs_epi16(a23s, b23s);
-  const __m128i e0 = _mm_madd_epi16(d0, d0);
-  const __m128i e1 = _mm_madd_epi16(d1, d1);
-  const __m128i sum = _mm_add_epi32(e0, e1);
-
-  int32_t tmp[4];
-  _mm_storeu_si128((__m128i*)tmp, sum);
-  return (tmp[3] + tmp[2] + tmp[1] + tmp[0]);
-}
-
-//------------------------------------------------------------------------------
-
-static void Mean16x4_SSE2(const uint8_t* ref, uint32_t dc[4]) {
-  const __m128i mask = _mm_set1_epi16(0x00ff);
-  const __m128i a0 = _mm_loadu_si128((const __m128i*)&ref[BPS * 0]);
-  const __m128i a1 = _mm_loadu_si128((const __m128i*)&ref[BPS * 1]);
-  const __m128i a2 = _mm_loadu_si128((const __m128i*)&ref[BPS * 2]);
-  const __m128i a3 = _mm_loadu_si128((const __m128i*)&ref[BPS * 3]);
-  const __m128i b0 = _mm_srli_epi16(a0, 8);     // hi byte
-  const __m128i b1 = _mm_srli_epi16(a1, 8);
-  const __m128i b2 = _mm_srli_epi16(a2, 8);
-  const __m128i b3 = _mm_srli_epi16(a3, 8);
-  const __m128i c0 = _mm_and_si128(a0, mask);   // lo byte
-  const __m128i c1 = _mm_and_si128(a1, mask);
-  const __m128i c2 = _mm_and_si128(a2, mask);
-  const __m128i c3 = _mm_and_si128(a3, mask);
-  const __m128i d0 = _mm_add_epi32(b0, c0);
-  const __m128i d1 = _mm_add_epi32(b1, c1);
-  const __m128i d2 = _mm_add_epi32(b2, c2);
-  const __m128i d3 = _mm_add_epi32(b3, c3);
-  const __m128i e0 = _mm_add_epi32(d0, d1);
-  const __m128i e1 = _mm_add_epi32(d2, d3);
-  const __m128i f0 = _mm_add_epi32(e0, e1);
-  uint16_t tmp[8];
-  _mm_storeu_si128((__m128i*)tmp, f0);
-  dc[0] = tmp[0] + tmp[1];
-  dc[1] = tmp[2] + tmp[3];
-  dc[2] = tmp[4] + tmp[5];
-  dc[3] = tmp[6] + tmp[7];
-}
-
-//------------------------------------------------------------------------------
-// Texture distortion
-//
-// We try to match the spectral content (weighted) between source and
-// reconstructed samples.
-
-// Hadamard transform
-// Returns the weighted sum of the absolute value of transformed coefficients.
-// w[] contains a row-major 4 by 4 symmetric matrix.
-static int TTransform_SSE2(const uint8_t* inA, const uint8_t* inB,
-                           const uint16_t* const w) {
-  int32_t sum[4];
-  __m128i tmp_0, tmp_1, tmp_2, tmp_3;
-  const __m128i zero = _mm_setzero_si128();
-
-  // Load and combine inputs.
-  {
-    const __m128i inA_0 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 0]);
-    const __m128i inA_1 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 1]);
-    const __m128i inA_2 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 2]);
-    const __m128i inA_3 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 3]);
-    const __m128i inB_0 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 0]);
-    const __m128i inB_1 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 1]);
-    const __m128i inB_2 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 2]);
-    const __m128i inB_3 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 3]);
-
-    // Combine inA and inB (we'll do two transforms in parallel).
-    const __m128i inAB_0 = _mm_unpacklo_epi32(inA_0, inB_0);
-    const __m128i inAB_1 = _mm_unpacklo_epi32(inA_1, inB_1);
-    const __m128i inAB_2 = _mm_unpacklo_epi32(inA_2, inB_2);
-    const __m128i inAB_3 = _mm_unpacklo_epi32(inA_3, inB_3);
-    tmp_0 = _mm_unpacklo_epi8(inAB_0, zero);
-    tmp_1 = _mm_unpacklo_epi8(inAB_1, zero);
-    tmp_2 = _mm_unpacklo_epi8(inAB_2, zero);
-    tmp_3 = _mm_unpacklo_epi8(inAB_3, zero);
-    // a00 a01 a02 a03   b00 b01 b02 b03
-    // a10 a11 a12 a13   b10 b11 b12 b13
-    // a20 a21 a22 a23   b20 b21 b22 b23
-    // a30 a31 a32 a33   b30 b31 b32 b33
-  }
-
-  // Vertical pass first to avoid a transpose (vertical and horizontal passes
-  // are commutative because w/kWeightY is symmetric) and subsequent transpose.
-  {
-    // Calculate a and b (two 4x4 at once).
-    const __m128i a0 = _mm_add_epi16(tmp_0, tmp_2);
-    const __m128i a1 = _mm_add_epi16(tmp_1, tmp_3);
-    const __m128i a2 = _mm_sub_epi16(tmp_1, tmp_3);
-    const __m128i a3 = _mm_sub_epi16(tmp_0, tmp_2);
-    const __m128i b0 = _mm_add_epi16(a0, a1);
-    const __m128i b1 = _mm_add_epi16(a3, a2);
-    const __m128i b2 = _mm_sub_epi16(a3, a2);
-    const __m128i b3 = _mm_sub_epi16(a0, a1);
-    // a00 a01 a02 a03   b00 b01 b02 b03
-    // a10 a11 a12 a13   b10 b11 b12 b13
-    // a20 a21 a22 a23   b20 b21 b22 b23
-    // a30 a31 a32 a33   b30 b31 b32 b33
-
-    // Transpose the two 4x4.
-    VP8Transpose_2_4x4_16b(&b0, &b1, &b2, &b3, &tmp_0, &tmp_1, &tmp_2, &tmp_3);
-  }
-
-  // Horizontal pass and difference of weighted sums.
-  {
-    // Load all inputs.
-    const __m128i w_0 = _mm_loadu_si128((const __m128i*)&w[0]);
-    const __m128i w_8 = _mm_loadu_si128((const __m128i*)&w[8]);
-
-    // Calculate a and b (two 4x4 at once).
-    const __m128i a0 = _mm_add_epi16(tmp_0, tmp_2);
-    const __m128i a1 = _mm_add_epi16(tmp_1, tmp_3);
-    const __m128i a2 = _mm_sub_epi16(tmp_1, tmp_3);
-    const __m128i a3 = _mm_sub_epi16(tmp_0, tmp_2);
-    const __m128i b0 = _mm_add_epi16(a0, a1);
-    const __m128i b1 = _mm_add_epi16(a3, a2);
-    const __m128i b2 = _mm_sub_epi16(a3, a2);
-    const __m128i b3 = _mm_sub_epi16(a0, a1);
-
-    // Separate the transforms of inA and inB.
-    __m128i A_b0 = _mm_unpacklo_epi64(b0, b1);
-    __m128i A_b2 = _mm_unpacklo_epi64(b2, b3);
-    __m128i B_b0 = _mm_unpackhi_epi64(b0, b1);
-    __m128i B_b2 = _mm_unpackhi_epi64(b2, b3);
-
-    {
-      const __m128i d0 = _mm_sub_epi16(zero, A_b0);
-      const __m128i d1 = _mm_sub_epi16(zero, A_b2);
-      const __m128i d2 = _mm_sub_epi16(zero, B_b0);
-      const __m128i d3 = _mm_sub_epi16(zero, B_b2);
-      A_b0 = _mm_max_epi16(A_b0, d0);   // abs(v), 16b
-      A_b2 = _mm_max_epi16(A_b2, d1);
-      B_b0 = _mm_max_epi16(B_b0, d2);
-      B_b2 = _mm_max_epi16(B_b2, d3);
-    }
-
-    // weighted sums
-    A_b0 = _mm_madd_epi16(A_b0, w_0);
-    A_b2 = _mm_madd_epi16(A_b2, w_8);
-    B_b0 = _mm_madd_epi16(B_b0, w_0);
-    B_b2 = _mm_madd_epi16(B_b2, w_8);
-    A_b0 = _mm_add_epi32(A_b0, A_b2);
-    B_b0 = _mm_add_epi32(B_b0, B_b2);
-
-    // difference of weighted sums
-    A_b0 = _mm_sub_epi32(A_b0, B_b0);
-    _mm_storeu_si128((__m128i*)&sum[0], A_b0);
-  }
-  return sum[0] + sum[1] + sum[2] + sum[3];
-}
-
-static int Disto4x4_SSE2(const uint8_t* const a, const uint8_t* const b,
-                         const uint16_t* const w) {
-  const int diff_sum = TTransform_SSE2(a, b, w);
-  return abs(diff_sum) >> 5;
-}
-
-static int Disto16x16_SSE2(const uint8_t* const a, const uint8_t* const b,
-                           const uint16_t* const w) {
-  int D = 0;
-  int x, y;
-  for (y = 0; y < 16 * BPS; y += 4 * BPS) {
-    for (x = 0; x < 16; x += 4) {
-      D += Disto4x4_SSE2(a + x + y, b + x + y, w);
-    }
-  }
-  return D;
-}
-
-//------------------------------------------------------------------------------
-// Quantization
-//
-
-static WEBP_INLINE int DoQuantizeBlock_SSE2(int16_t in[16], int16_t out[16],
-                                            const uint16_t* const sharpen,
-                                            const VP8Matrix* const mtx) {
-  const __m128i max_coeff_2047 = _mm_set1_epi16(MAX_LEVEL);
-  const __m128i zero = _mm_setzero_si128();
-  __m128i coeff0, coeff8;
-  __m128i out0, out8;
-  __m128i packed_out;
-
-  // Load all inputs.
-  __m128i in0 = _mm_loadu_si128((__m128i*)&in[0]);
-  __m128i in8 = _mm_loadu_si128((__m128i*)&in[8]);
-  const __m128i iq0 = _mm_loadu_si128((const __m128i*)&mtx->iq_[0]);
-  const __m128i iq8 = _mm_loadu_si128((const __m128i*)&mtx->iq_[8]);
-  const __m128i q0 = _mm_loadu_si128((const __m128i*)&mtx->q_[0]);
-  const __m128i q8 = _mm_loadu_si128((const __m128i*)&mtx->q_[8]);
-
-  // extract sign(in)  (0x0000 if positive, 0xffff if negative)
-  const __m128i sign0 = _mm_cmpgt_epi16(zero, in0);
-  const __m128i sign8 = _mm_cmpgt_epi16(zero, in8);
-
-  // coeff = abs(in) = (in ^ sign) - sign
-  coeff0 = _mm_xor_si128(in0, sign0);
-  coeff8 = _mm_xor_si128(in8, sign8);
-  coeff0 = _mm_sub_epi16(coeff0, sign0);
-  coeff8 = _mm_sub_epi16(coeff8, sign8);
-
-  // coeff = abs(in) + sharpen
-  if (sharpen != NULL) {
-    const __m128i sharpen0 = _mm_loadu_si128((const __m128i*)&sharpen[0]);
-    const __m128i sharpen8 = _mm_loadu_si128((const __m128i*)&sharpen[8]);
-    coeff0 = _mm_add_epi16(coeff0, sharpen0);
-    coeff8 = _mm_add_epi16(coeff8, sharpen8);
-  }
-
-  // out = (coeff * iQ + B) >> QFIX
-  {
-    // doing calculations with 32b precision (QFIX=17)
-    // out = (coeff * iQ)
-    const __m128i coeff_iQ0H = _mm_mulhi_epu16(coeff0, iq0);
-    const __m128i coeff_iQ0L = _mm_mullo_epi16(coeff0, iq0);
-    const __m128i coeff_iQ8H = _mm_mulhi_epu16(coeff8, iq8);
-    const __m128i coeff_iQ8L = _mm_mullo_epi16(coeff8, iq8);
-    __m128i out_00 = _mm_unpacklo_epi16(coeff_iQ0L, coeff_iQ0H);
-    __m128i out_04 = _mm_unpackhi_epi16(coeff_iQ0L, coeff_iQ0H);
-    __m128i out_08 = _mm_unpacklo_epi16(coeff_iQ8L, coeff_iQ8H);
-    __m128i out_12 = _mm_unpackhi_epi16(coeff_iQ8L, coeff_iQ8H);
-    // out = (coeff * iQ + B)
-    const __m128i bias_00 = _mm_loadu_si128((const __m128i*)&mtx->bias_[0]);
-    const __m128i bias_04 = _mm_loadu_si128((const __m128i*)&mtx->bias_[4]);
-    const __m128i bias_08 = _mm_loadu_si128((const __m128i*)&mtx->bias_[8]);
-    const __m128i bias_12 = _mm_loadu_si128((const __m128i*)&mtx->bias_[12]);
-    out_00 = _mm_add_epi32(out_00, bias_00);
-    out_04 = _mm_add_epi32(out_04, bias_04);
-    out_08 = _mm_add_epi32(out_08, bias_08);
-    out_12 = _mm_add_epi32(out_12, bias_12);
-    // out = QUANTDIV(coeff, iQ, B, QFIX)
-    out_00 = _mm_srai_epi32(out_00, QFIX);
-    out_04 = _mm_srai_epi32(out_04, QFIX);
-    out_08 = _mm_srai_epi32(out_08, QFIX);
-    out_12 = _mm_srai_epi32(out_12, QFIX);
-
-    // pack result as 16b
-    out0 = _mm_packs_epi32(out_00, out_04);
-    out8 = _mm_packs_epi32(out_08, out_12);
-
-    // if (coeff > 2047) coeff = 2047
-    out0 = _mm_min_epi16(out0, max_coeff_2047);
-    out8 = _mm_min_epi16(out8, max_coeff_2047);
-  }
-
-  // get sign back (if (sign[j]) out_n = -out_n)
-  out0 = _mm_xor_si128(out0, sign0);
-  out8 = _mm_xor_si128(out8, sign8);
-  out0 = _mm_sub_epi16(out0, sign0);
-  out8 = _mm_sub_epi16(out8, sign8);
-
-  // in = out * Q
-  in0 = _mm_mullo_epi16(out0, q0);
-  in8 = _mm_mullo_epi16(out8, q8);
-
-  _mm_storeu_si128((__m128i*)&in[0], in0);
-  _mm_storeu_si128((__m128i*)&in[8], in8);
-
-  // zigzag the output before storing it.
-  //
-  // The zigzag pattern can almost be reproduced with a small sequence of
-  // shuffles. After it, we only need to swap the 7th (ending up in third
-  // position instead of twelfth) and 8th values.
-  {
-    __m128i outZ0, outZ8;
-    outZ0 = _mm_shufflehi_epi16(out0,  _MM_SHUFFLE(2, 1, 3, 0));
-    outZ0 = _mm_shuffle_epi32  (outZ0, _MM_SHUFFLE(3, 1, 2, 0));
-    outZ0 = _mm_shufflehi_epi16(outZ0, _MM_SHUFFLE(3, 1, 0, 2));
-    outZ8 = _mm_shufflelo_epi16(out8,  _MM_SHUFFLE(3, 0, 2, 1));
-    outZ8 = _mm_shuffle_epi32  (outZ8, _MM_SHUFFLE(3, 1, 2, 0));
-    outZ8 = _mm_shufflelo_epi16(outZ8, _MM_SHUFFLE(1, 3, 2, 0));
-    _mm_storeu_si128((__m128i*)&out[0], outZ0);
-    _mm_storeu_si128((__m128i*)&out[8], outZ8);
-    packed_out = _mm_packs_epi16(outZ0, outZ8);
-  }
-  {
-    const int16_t outZ_12 = out[12];
-    const int16_t outZ_3 = out[3];
-    out[3] = outZ_12;
-    out[12] = outZ_3;
-  }
-
-  // detect if all 'out' values are zeroes or not
-  return (_mm_movemask_epi8(_mm_cmpeq_epi8(packed_out, zero)) != 0xffff);
-}
-
-static int QuantizeBlock_SSE2(int16_t in[16], int16_t out[16],
-                              const VP8Matrix* const mtx) {
-  return DoQuantizeBlock_SSE2(in, out, &mtx->sharpen_[0], mtx);
-}
-
-static int QuantizeBlockWHT_SSE2(int16_t in[16], int16_t out[16],
-                                 const VP8Matrix* const mtx) {
-  return DoQuantizeBlock_SSE2(in, out, NULL, mtx);
-}
-
-static int Quantize2Blocks_SSE2(int16_t in[32], int16_t out[32],
-                                const VP8Matrix* const mtx) {
-  int nz;
-  const uint16_t* const sharpen = &mtx->sharpen_[0];
-  nz  = DoQuantizeBlock_SSE2(in + 0 * 16, out + 0 * 16, sharpen, mtx) << 0;
-  nz |= DoQuantizeBlock_SSE2(in + 1 * 16, out + 1 * 16, sharpen, mtx) << 1;
-  return nz;
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspInitSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitSSE2(void) {
-  VP8CollectHistogram = CollectHistogram_SSE2;
-  VP8EncPredLuma16 = Intra16Preds_SSE2;
-  VP8EncPredChroma8 = IntraChromaPreds_SSE2;
-  VP8EncPredLuma4 = Intra4Preds_SSE2;
-  VP8EncQuantizeBlock = QuantizeBlock_SSE2;
-  VP8EncQuantize2Blocks = Quantize2Blocks_SSE2;
-  VP8EncQuantizeBlockWHT = QuantizeBlockWHT_SSE2;
-  VP8ITransform = ITransform_SSE2;
-  VP8FTransform = FTransform_SSE2;
-  VP8FTransform2 = FTransform2_SSE2;
-  VP8FTransformWHT = FTransformWHT_SSE2;
-  VP8SSE16x16 = SSE16x16_SSE2;
-  VP8SSE16x8 = SSE16x8_SSE2;
-  VP8SSE8x8 = SSE8x8_SSE2;
-  VP8SSE4x4 = SSE4x4_SSE2;
-  VP8TDisto4x4 = Disto4x4_SSE2;
-  VP8TDisto16x16 = Disto16x16_SSE2;
-  VP8Mean16x4 = Mean16x4_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(VP8EncDspInitSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/enc_sse41.c b/ios/Pods/libwebp/src/dsp/enc_sse41.c
deleted file mode 100644
index 924035a..0000000
--- a/ios/Pods/libwebp/src/dsp/enc_sse41.c
+++ /dev/null
@@ -1,339 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE4 version of some encoding functions.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE41)
-#include <smmintrin.h>
-#include <stdlib.h>  // for abs()
-
-#include "src/dsp/common_sse2.h"
-#include "src/enc/vp8i_enc.h"
-
-//------------------------------------------------------------------------------
-// Compute susceptibility based on DCT-coeff histograms.
-
-static void CollectHistogram_SSE41(const uint8_t* ref, const uint8_t* pred,
-                                   int start_block, int end_block,
-                                   VP8Histogram* const histo) {
-  const __m128i max_coeff_thresh = _mm_set1_epi16(MAX_COEFF_THRESH);
-  int j;
-  int distribution[MAX_COEFF_THRESH + 1] = { 0 };
-  for (j = start_block; j < end_block; ++j) {
-    int16_t out[16];
-    int k;
-
-    VP8FTransform(ref + VP8DspScan[j], pred + VP8DspScan[j], out);
-
-    // Convert coefficients to bin (within out[]).
-    {
-      // Load.
-      const __m128i out0 = _mm_loadu_si128((__m128i*)&out[0]);
-      const __m128i out1 = _mm_loadu_si128((__m128i*)&out[8]);
-      // v = abs(out) >> 3
-      const __m128i abs0 = _mm_abs_epi16(out0);
-      const __m128i abs1 = _mm_abs_epi16(out1);
-      const __m128i v0 = _mm_srai_epi16(abs0, 3);
-      const __m128i v1 = _mm_srai_epi16(abs1, 3);
-      // bin = min(v, MAX_COEFF_THRESH)
-      const __m128i bin0 = _mm_min_epi16(v0, max_coeff_thresh);
-      const __m128i bin1 = _mm_min_epi16(v1, max_coeff_thresh);
-      // Store.
-      _mm_storeu_si128((__m128i*)&out[0], bin0);
-      _mm_storeu_si128((__m128i*)&out[8], bin1);
-    }
-
-    // Convert coefficients to bin.
-    for (k = 0; k < 16; ++k) {
-      ++distribution[out[k]];
-    }
-  }
-  VP8SetHistogramData(distribution, histo);
-}
-
-//------------------------------------------------------------------------------
-// Texture distortion
-//
-// We try to match the spectral content (weighted) between source and
-// reconstructed samples.
-
-// Hadamard transform
-// Returns the weighted sum of the absolute value of transformed coefficients.
-// w[] contains a row-major 4 by 4 symmetric matrix.
-static int TTransform_SSE41(const uint8_t* inA, const uint8_t* inB,
-                            const uint16_t* const w) {
-  int32_t sum[4];
-  __m128i tmp_0, tmp_1, tmp_2, tmp_3;
-
-  // Load and combine inputs.
-  {
-    const __m128i inA_0 = _mm_loadu_si128((const __m128i*)&inA[BPS * 0]);
-    const __m128i inA_1 = _mm_loadu_si128((const __m128i*)&inA[BPS * 1]);
-    const __m128i inA_2 = _mm_loadu_si128((const __m128i*)&inA[BPS * 2]);
-    // In SSE4.1, with gcc 4.8 at least (maybe other versions),
-    // _mm_loadu_si128 is faster than _mm_loadl_epi64. But for the last lump
-    // of inA and inB, _mm_loadl_epi64 is still used not to have an out of
-    // bound read.
-    const __m128i inA_3 = _mm_loadl_epi64((const __m128i*)&inA[BPS * 3]);
-    const __m128i inB_0 = _mm_loadu_si128((const __m128i*)&inB[BPS * 0]);
-    const __m128i inB_1 = _mm_loadu_si128((const __m128i*)&inB[BPS * 1]);
-    const __m128i inB_2 = _mm_loadu_si128((const __m128i*)&inB[BPS * 2]);
-    const __m128i inB_3 = _mm_loadl_epi64((const __m128i*)&inB[BPS * 3]);
-
-    // Combine inA and inB (we'll do two transforms in parallel).
-    const __m128i inAB_0 = _mm_unpacklo_epi32(inA_0, inB_0);
-    const __m128i inAB_1 = _mm_unpacklo_epi32(inA_1, inB_1);
-    const __m128i inAB_2 = _mm_unpacklo_epi32(inA_2, inB_2);
-    const __m128i inAB_3 = _mm_unpacklo_epi32(inA_3, inB_3);
-    tmp_0 = _mm_cvtepu8_epi16(inAB_0);
-    tmp_1 = _mm_cvtepu8_epi16(inAB_1);
-    tmp_2 = _mm_cvtepu8_epi16(inAB_2);
-    tmp_3 = _mm_cvtepu8_epi16(inAB_3);
-    // a00 a01 a02 a03   b00 b01 b02 b03
-    // a10 a11 a12 a13   b10 b11 b12 b13
-    // a20 a21 a22 a23   b20 b21 b22 b23
-    // a30 a31 a32 a33   b30 b31 b32 b33
-  }
-
-  // Vertical pass first to avoid a transpose (vertical and horizontal passes
-  // are commutative because w/kWeightY is symmetric) and subsequent transpose.
-  {
-    // Calculate a and b (two 4x4 at once).
-    const __m128i a0 = _mm_add_epi16(tmp_0, tmp_2);
-    const __m128i a1 = _mm_add_epi16(tmp_1, tmp_3);
-    const __m128i a2 = _mm_sub_epi16(tmp_1, tmp_3);
-    const __m128i a3 = _mm_sub_epi16(tmp_0, tmp_2);
-    const __m128i b0 = _mm_add_epi16(a0, a1);
-    const __m128i b1 = _mm_add_epi16(a3, a2);
-    const __m128i b2 = _mm_sub_epi16(a3, a2);
-    const __m128i b3 = _mm_sub_epi16(a0, a1);
-    // a00 a01 a02 a03   b00 b01 b02 b03
-    // a10 a11 a12 a13   b10 b11 b12 b13
-    // a20 a21 a22 a23   b20 b21 b22 b23
-    // a30 a31 a32 a33   b30 b31 b32 b33
-
-    // Transpose the two 4x4.
-    VP8Transpose_2_4x4_16b(&b0, &b1, &b2, &b3, &tmp_0, &tmp_1, &tmp_2, &tmp_3);
-  }
-
-  // Horizontal pass and difference of weighted sums.
-  {
-    // Load all inputs.
-    const __m128i w_0 = _mm_loadu_si128((const __m128i*)&w[0]);
-    const __m128i w_8 = _mm_loadu_si128((const __m128i*)&w[8]);
-
-    // Calculate a and b (two 4x4 at once).
-    const __m128i a0 = _mm_add_epi16(tmp_0, tmp_2);
-    const __m128i a1 = _mm_add_epi16(tmp_1, tmp_3);
-    const __m128i a2 = _mm_sub_epi16(tmp_1, tmp_3);
-    const __m128i a3 = _mm_sub_epi16(tmp_0, tmp_2);
-    const __m128i b0 = _mm_add_epi16(a0, a1);
-    const __m128i b1 = _mm_add_epi16(a3, a2);
-    const __m128i b2 = _mm_sub_epi16(a3, a2);
-    const __m128i b3 = _mm_sub_epi16(a0, a1);
-
-    // Separate the transforms of inA and inB.
-    __m128i A_b0 = _mm_unpacklo_epi64(b0, b1);
-    __m128i A_b2 = _mm_unpacklo_epi64(b2, b3);
-    __m128i B_b0 = _mm_unpackhi_epi64(b0, b1);
-    __m128i B_b2 = _mm_unpackhi_epi64(b2, b3);
-
-    A_b0 = _mm_abs_epi16(A_b0);
-    A_b2 = _mm_abs_epi16(A_b2);
-    B_b0 = _mm_abs_epi16(B_b0);
-    B_b2 = _mm_abs_epi16(B_b2);
-
-    // weighted sums
-    A_b0 = _mm_madd_epi16(A_b0, w_0);
-    A_b2 = _mm_madd_epi16(A_b2, w_8);
-    B_b0 = _mm_madd_epi16(B_b0, w_0);
-    B_b2 = _mm_madd_epi16(B_b2, w_8);
-    A_b0 = _mm_add_epi32(A_b0, A_b2);
-    B_b0 = _mm_add_epi32(B_b0, B_b2);
-
-    // difference of weighted sums
-    A_b2 = _mm_sub_epi32(A_b0, B_b0);
-    _mm_storeu_si128((__m128i*)&sum[0], A_b2);
-  }
-  return sum[0] + sum[1] + sum[2] + sum[3];
-}
-
-static int Disto4x4_SSE41(const uint8_t* const a, const uint8_t* const b,
-                          const uint16_t* const w) {
-  const int diff_sum = TTransform_SSE41(a, b, w);
-  return abs(diff_sum) >> 5;
-}
-
-static int Disto16x16_SSE41(const uint8_t* const a, const uint8_t* const b,
-                            const uint16_t* const w) {
-  int D = 0;
-  int x, y;
-  for (y = 0; y < 16 * BPS; y += 4 * BPS) {
-    for (x = 0; x < 16; x += 4) {
-      D += Disto4x4_SSE41(a + x + y, b + x + y, w);
-    }
-  }
-  return D;
-}
-
-//------------------------------------------------------------------------------
-// Quantization
-//
-
-// Generates a pshufb constant for shuffling 16b words.
-#define PSHUFB_CST(A,B,C,D,E,F,G,H) \
-  _mm_set_epi8(2 * (H) + 1, 2 * (H) + 0, 2 * (G) + 1, 2 * (G) + 0, \
-               2 * (F) + 1, 2 * (F) + 0, 2 * (E) + 1, 2 * (E) + 0, \
-               2 * (D) + 1, 2 * (D) + 0, 2 * (C) + 1, 2 * (C) + 0, \
-               2 * (B) + 1, 2 * (B) + 0, 2 * (A) + 1, 2 * (A) + 0)
-
-static WEBP_INLINE int DoQuantizeBlock_SSE41(int16_t in[16], int16_t out[16],
-                                             const uint16_t* const sharpen,
-                                             const VP8Matrix* const mtx) {
-  const __m128i max_coeff_2047 = _mm_set1_epi16(MAX_LEVEL);
-  const __m128i zero = _mm_setzero_si128();
-  __m128i out0, out8;
-  __m128i packed_out;
-
-  // Load all inputs.
-  __m128i in0 = _mm_loadu_si128((__m128i*)&in[0]);
-  __m128i in8 = _mm_loadu_si128((__m128i*)&in[8]);
-  const __m128i iq0 = _mm_loadu_si128((const __m128i*)&mtx->iq_[0]);
-  const __m128i iq8 = _mm_loadu_si128((const __m128i*)&mtx->iq_[8]);
-  const __m128i q0 = _mm_loadu_si128((const __m128i*)&mtx->q_[0]);
-  const __m128i q8 = _mm_loadu_si128((const __m128i*)&mtx->q_[8]);
-
-  // coeff = abs(in)
-  __m128i coeff0 = _mm_abs_epi16(in0);
-  __m128i coeff8 = _mm_abs_epi16(in8);
-
-  // coeff = abs(in) + sharpen
-  if (sharpen != NULL) {
-    const __m128i sharpen0 = _mm_loadu_si128((const __m128i*)&sharpen[0]);
-    const __m128i sharpen8 = _mm_loadu_si128((const __m128i*)&sharpen[8]);
-    coeff0 = _mm_add_epi16(coeff0, sharpen0);
-    coeff8 = _mm_add_epi16(coeff8, sharpen8);
-  }
-
-  // out = (coeff * iQ + B) >> QFIX
-  {
-    // doing calculations with 32b precision (QFIX=17)
-    // out = (coeff * iQ)
-    const __m128i coeff_iQ0H = _mm_mulhi_epu16(coeff0, iq0);
-    const __m128i coeff_iQ0L = _mm_mullo_epi16(coeff0, iq0);
-    const __m128i coeff_iQ8H = _mm_mulhi_epu16(coeff8, iq8);
-    const __m128i coeff_iQ8L = _mm_mullo_epi16(coeff8, iq8);
-    __m128i out_00 = _mm_unpacklo_epi16(coeff_iQ0L, coeff_iQ0H);
-    __m128i out_04 = _mm_unpackhi_epi16(coeff_iQ0L, coeff_iQ0H);
-    __m128i out_08 = _mm_unpacklo_epi16(coeff_iQ8L, coeff_iQ8H);
-    __m128i out_12 = _mm_unpackhi_epi16(coeff_iQ8L, coeff_iQ8H);
-    // out = (coeff * iQ + B)
-    const __m128i bias_00 = _mm_loadu_si128((const __m128i*)&mtx->bias_[0]);
-    const __m128i bias_04 = _mm_loadu_si128((const __m128i*)&mtx->bias_[4]);
-    const __m128i bias_08 = _mm_loadu_si128((const __m128i*)&mtx->bias_[8]);
-    const __m128i bias_12 = _mm_loadu_si128((const __m128i*)&mtx->bias_[12]);
-    out_00 = _mm_add_epi32(out_00, bias_00);
-    out_04 = _mm_add_epi32(out_04, bias_04);
-    out_08 = _mm_add_epi32(out_08, bias_08);
-    out_12 = _mm_add_epi32(out_12, bias_12);
-    // out = QUANTDIV(coeff, iQ, B, QFIX)
-    out_00 = _mm_srai_epi32(out_00, QFIX);
-    out_04 = _mm_srai_epi32(out_04, QFIX);
-    out_08 = _mm_srai_epi32(out_08, QFIX);
-    out_12 = _mm_srai_epi32(out_12, QFIX);
-
-    // pack result as 16b
-    out0 = _mm_packs_epi32(out_00, out_04);
-    out8 = _mm_packs_epi32(out_08, out_12);
-
-    // if (coeff > 2047) coeff = 2047
-    out0 = _mm_min_epi16(out0, max_coeff_2047);
-    out8 = _mm_min_epi16(out8, max_coeff_2047);
-  }
-
-  // put sign back
-  out0 = _mm_sign_epi16(out0, in0);
-  out8 = _mm_sign_epi16(out8, in8);
-
-  // in = out * Q
-  in0 = _mm_mullo_epi16(out0, q0);
-  in8 = _mm_mullo_epi16(out8, q8);
-
-  _mm_storeu_si128((__m128i*)&in[0], in0);
-  _mm_storeu_si128((__m128i*)&in[8], in8);
-
-  // zigzag the output before storing it. The re-ordering is:
-  //    0 1 2 3 4 5 6 7 | 8  9 10 11 12 13 14 15
-  // -> 0 1 4[8]5 2 3 6 | 9 12 13 10 [7]11 14 15
-  // There's only two misplaced entries ([8] and [7]) that are crossing the
-  // reg's boundaries.
-  // We use pshufb instead of pshuflo/pshufhi.
-  {
-    const __m128i kCst_lo = PSHUFB_CST(0, 1, 4, -1, 5, 2, 3, 6);
-    const __m128i kCst_7 = PSHUFB_CST(-1, -1, -1, -1, 7, -1, -1, -1);
-    const __m128i tmp_lo = _mm_shuffle_epi8(out0, kCst_lo);
-    const __m128i tmp_7 = _mm_shuffle_epi8(out0, kCst_7);  // extract #7
-    const __m128i kCst_hi = PSHUFB_CST(1, 4, 5, 2, -1, 3, 6, 7);
-    const __m128i kCst_8 = PSHUFB_CST(-1, -1, -1, 0, -1, -1, -1, -1);
-    const __m128i tmp_hi = _mm_shuffle_epi8(out8, kCst_hi);
-    const __m128i tmp_8 = _mm_shuffle_epi8(out8, kCst_8);  // extract #8
-    const __m128i out_z0 = _mm_or_si128(tmp_lo, tmp_8);
-    const __m128i out_z8 = _mm_or_si128(tmp_hi, tmp_7);
-    _mm_storeu_si128((__m128i*)&out[0], out_z0);
-    _mm_storeu_si128((__m128i*)&out[8], out_z8);
-    packed_out = _mm_packs_epi16(out_z0, out_z8);
-  }
-
-  // detect if all 'out' values are zeroes or not
-  return (_mm_movemask_epi8(_mm_cmpeq_epi8(packed_out, zero)) != 0xffff);
-}
-
-#undef PSHUFB_CST
-
-static int QuantizeBlock_SSE41(int16_t in[16], int16_t out[16],
-                               const VP8Matrix* const mtx) {
-  return DoQuantizeBlock_SSE41(in, out, &mtx->sharpen_[0], mtx);
-}
-
-static int QuantizeBlockWHT_SSE41(int16_t in[16], int16_t out[16],
-                                  const VP8Matrix* const mtx) {
-  return DoQuantizeBlock_SSE41(in, out, NULL, mtx);
-}
-
-static int Quantize2Blocks_SSE41(int16_t in[32], int16_t out[32],
-                                 const VP8Matrix* const mtx) {
-  int nz;
-  const uint16_t* const sharpen = &mtx->sharpen_[0];
-  nz  = DoQuantizeBlock_SSE41(in + 0 * 16, out + 0 * 16, sharpen, mtx) << 0;
-  nz |= DoQuantizeBlock_SSE41(in + 1 * 16, out + 1 * 16, sharpen, mtx) << 1;
-  return nz;
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8EncDspInitSSE41(void);
-WEBP_TSAN_IGNORE_FUNCTION void VP8EncDspInitSSE41(void) {
-  VP8CollectHistogram = CollectHistogram_SSE41;
-  VP8EncQuantizeBlock = QuantizeBlock_SSE41;
-  VP8EncQuantize2Blocks = Quantize2Blocks_SSE41;
-  VP8EncQuantizeBlockWHT = QuantizeBlockWHT_SSE41;
-  VP8TDisto4x4 = Disto4x4_SSE41;
-  VP8TDisto16x16 = Disto16x16_SSE41;
-}
-
-#else  // !WEBP_USE_SSE41
-
-WEBP_DSP_INIT_STUB(VP8EncDspInitSSE41)
-
-#endif  // WEBP_USE_SSE41
diff --git a/ios/Pods/libwebp/src/dsp/filters.c b/ios/Pods/libwebp/src/dsp/filters.c
deleted file mode 100644
index 069a22e..0000000
--- a/ios/Pods/libwebp/src/dsp/filters.c
+++ /dev/null
@@ -1,287 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Spatial prediction using various filters
-//
-// Author: Urvang (urvang@google.com)
-
-#include "src/dsp/dsp.h"
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-//------------------------------------------------------------------------------
-// Helpful macro.
-
-# define SANITY_CHECK(in, out)                                                 \
-  assert((in) != NULL);                                                        \
-  assert((out) != NULL);                                                       \
-  assert(width > 0);                                                           \
-  assert(height > 0);                                                          \
-  assert(stride >= width);                                                     \
-  assert(row >= 0 && num_rows > 0 && row + num_rows <= height);                \
-  (void)height;  // Silence unused warning.
-
-#if !WEBP_NEON_OMIT_C_CODE
-static WEBP_INLINE void PredictLine_C(const uint8_t* src, const uint8_t* pred,
-                                      uint8_t* dst, int length, int inverse) {
-  int i;
-  if (inverse) {
-    for (i = 0; i < length; ++i) dst[i] = src[i] + pred[i];
-  } else {
-    for (i = 0; i < length; ++i) dst[i] = src[i] - pred[i];
-  }
-}
-
-//------------------------------------------------------------------------------
-// Horizontal filter.
-
-static WEBP_INLINE void DoHorizontalFilter_C(const uint8_t* in,
-                                             int width, int height, int stride,
-                                             int row, int num_rows,
-                                             int inverse, uint8_t* out) {
-  const uint8_t* preds;
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-  preds = inverse ? out : in;
-
-  if (row == 0) {
-    // Leftmost pixel is the same as input for topmost scanline.
-    out[0] = in[0];
-    PredictLine_C(in + 1, preds, out + 1, width - 1, inverse);
-    row = 1;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    // Leftmost pixel is predicted from above.
-    PredictLine_C(in, preds - stride, out, 1, inverse);
-    PredictLine_C(in + 1, preds, out + 1, width - 1, inverse);
-    ++row;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Vertical filter.
-
-static WEBP_INLINE void DoVerticalFilter_C(const uint8_t* in,
-                                           int width, int height, int stride,
-                                           int row, int num_rows,
-                                           int inverse, uint8_t* out) {
-  const uint8_t* preds;
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-  preds = inverse ? out : in;
-
-  if (row == 0) {
-    // Very first top-left pixel is copied.
-    out[0] = in[0];
-    // Rest of top scan-line is left-predicted.
-    PredictLine_C(in + 1, preds, out + 1, width - 1, inverse);
-    row = 1;
-    in += stride;
-    out += stride;
-  } else {
-    // We are starting from in-between. Make sure 'preds' points to prev row.
-    preds -= stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    PredictLine_C(in, preds, out, width, inverse);
-    ++row;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-//------------------------------------------------------------------------------
-// Gradient filter.
-
-static WEBP_INLINE int GradientPredictor_C(uint8_t a, uint8_t b, uint8_t c) {
-  const int g = a + b - c;
-  return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255;  // clip to 8bit
-}
-
-#if !WEBP_NEON_OMIT_C_CODE
-static WEBP_INLINE void DoGradientFilter_C(const uint8_t* in,
-                                           int width, int height, int stride,
-                                           int row, int num_rows,
-                                           int inverse, uint8_t* out) {
-  const uint8_t* preds;
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-  preds = inverse ? out : in;
-
-  // left prediction for top scan-line
-  if (row == 0) {
-    out[0] = in[0];
-    PredictLine_C(in + 1, preds, out + 1, width - 1, inverse);
-    row = 1;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    int w;
-    // leftmost pixel: predict from above.
-    PredictLine_C(in, preds - stride, out, 1, inverse);
-    for (w = 1; w < width; ++w) {
-      const int pred = GradientPredictor_C(preds[w - 1],
-                                           preds[w - stride],
-                                           preds[w - stride - 1]);
-      out[w] = in[w] + (inverse ? pred : -pred);
-    }
-    ++row;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-#undef SANITY_CHECK
-
-//------------------------------------------------------------------------------
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void HorizontalFilter_C(const uint8_t* data, int width, int height,
-                               int stride, uint8_t* filtered_data) {
-  DoHorizontalFilter_C(data, width, height, stride, 0, height, 0,
-                       filtered_data);
-}
-
-static void VerticalFilter_C(const uint8_t* data, int width, int height,
-                             int stride, uint8_t* filtered_data) {
-  DoVerticalFilter_C(data, width, height, stride, 0, height, 0, filtered_data);
-}
-
-static void GradientFilter_C(const uint8_t* data, int width, int height,
-                             int stride, uint8_t* filtered_data) {
-  DoGradientFilter_C(data, width, height, stride, 0, height, 0, filtered_data);
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-//------------------------------------------------------------------------------
-
-static void HorizontalUnfilter_C(const uint8_t* prev, const uint8_t* in,
-                                 uint8_t* out, int width) {
-  uint8_t pred = (prev == NULL) ? 0 : prev[0];
-  int i;
-  for (i = 0; i < width; ++i) {
-    out[i] = pred + in[i];
-    pred = out[i];
-  }
-}
-
-#if !WEBP_NEON_OMIT_C_CODE
-static void VerticalUnfilter_C(const uint8_t* prev, const uint8_t* in,
-                               uint8_t* out, int width) {
-  if (prev == NULL) {
-    HorizontalUnfilter_C(NULL, in, out, width);
-  } else {
-    int i;
-    for (i = 0; i < width; ++i) out[i] = prev[i] + in[i];
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-static void GradientUnfilter_C(const uint8_t* prev, const uint8_t* in,
-                               uint8_t* out, int width) {
-  if (prev == NULL) {
-    HorizontalUnfilter_C(NULL, in, out, width);
-  } else {
-    uint8_t top = prev[0], top_left = top, left = top;
-    int i;
-    for (i = 0; i < width; ++i) {
-      top = prev[i];  // need to read this first, in case prev==out
-      left = in[i] + GradientPredictor_C(left, top, top_left);
-      top_left = top;
-      out[i] = left;
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Init function
-
-WebPFilterFunc WebPFilters[WEBP_FILTER_LAST];
-WebPUnfilterFunc WebPUnfilters[WEBP_FILTER_LAST];
-
-extern void VP8FiltersInitMIPSdspR2(void);
-extern void VP8FiltersInitMSA(void);
-extern void VP8FiltersInitNEON(void);
-extern void VP8FiltersInitSSE2(void);
-
-WEBP_DSP_INIT_FUNC(VP8FiltersInit) {
-  WebPUnfilters[WEBP_FILTER_NONE] = NULL;
-#if !WEBP_NEON_OMIT_C_CODE
-  WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_C;
-  WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_C;
-#endif
-  WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_C;
-
-  WebPFilters[WEBP_FILTER_NONE] = NULL;
-#if !WEBP_NEON_OMIT_C_CODE
-  WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_C;
-  WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_C;
-  WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_C;
-#endif
-
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      VP8FiltersInitSSE2();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      VP8FiltersInitMIPSdspR2();
-    }
-#endif
-#if defined(WEBP_USE_MSA)
-    if (VP8GetCPUInfo(kMSA)) {
-      VP8FiltersInitMSA();
-    }
-#endif
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    VP8FiltersInitNEON();
-  }
-#endif
-
-  assert(WebPUnfilters[WEBP_FILTER_HORIZONTAL] != NULL);
-  assert(WebPUnfilters[WEBP_FILTER_VERTICAL] != NULL);
-  assert(WebPUnfilters[WEBP_FILTER_GRADIENT] != NULL);
-  assert(WebPFilters[WEBP_FILTER_HORIZONTAL] != NULL);
-  assert(WebPFilters[WEBP_FILTER_VERTICAL] != NULL);
-  assert(WebPFilters[WEBP_FILTER_GRADIENT] != NULL);
-}
diff --git a/ios/Pods/libwebp/src/dsp/filters_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/filters_mips_dsp_r2.c
deleted file mode 100644
index 9382b12..0000000
--- a/ios/Pods/libwebp/src/dsp/filters_mips_dsp_r2.c
+++ /dev/null
@@ -1,402 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Spatial prediction using various filters
-//
-// Author(s): Branimir Vasic (branimir.vasic@imgtec.com)
-//            Djordje Pesut (djordje.pesut@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-#include "src/dsp/dsp.h"
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-//------------------------------------------------------------------------------
-// Helpful macro.
-
-# define SANITY_CHECK(in, out)                                                 \
-  assert(in != NULL);                                                          \
-  assert(out != NULL);                                                         \
-  assert(width > 0);                                                           \
-  assert(height > 0);                                                          \
-  assert(stride >= width);                                                     \
-  assert(row >= 0 && num_rows > 0 && row + num_rows <= height);                \
-  (void)height;  // Silence unused warning.
-
-#define DO_PREDICT_LINE(SRC, DST, LENGTH, INVERSE) do {                        \
-    const uint8_t* psrc = (uint8_t*)(SRC);                                     \
-    uint8_t* pdst = (uint8_t*)(DST);                                           \
-    const int ilength = (int)(LENGTH);                                         \
-    int temp0, temp1, temp2, temp3, temp4, temp5, temp6;                       \
-    __asm__ volatile (                                                         \
-      ".set      push                                   \n\t"                  \
-      ".set      noreorder                              \n\t"                  \
-      "srl       %[temp0],    %[length],    2           \n\t"                  \
-      "beqz      %[temp0],    4f                        \n\t"                  \
-      " andi     %[temp6],    %[length],    3           \n\t"                  \
-    ".if " #INVERSE "                                   \n\t"                  \
-    "1:                                                 \n\t"                  \
-      "lbu       %[temp1],    -1(%[dst])                \n\t"                  \
-      "lbu       %[temp2],    0(%[src])                 \n\t"                  \
-      "lbu       %[temp3],    1(%[src])                 \n\t"                  \
-      "lbu       %[temp4],    2(%[src])                 \n\t"                  \
-      "lbu       %[temp5],    3(%[src])                 \n\t"                  \
-      "addu      %[temp1],    %[temp1],     %[temp2]    \n\t"                  \
-      "addu      %[temp2],    %[temp1],     %[temp3]    \n\t"                  \
-      "addu      %[temp3],    %[temp2],     %[temp4]    \n\t"                  \
-      "addu      %[temp4],    %[temp3],     %[temp5]    \n\t"                  \
-      "sb        %[temp1],    0(%[dst])                 \n\t"                  \
-      "sb        %[temp2],    1(%[dst])                 \n\t"                  \
-      "sb        %[temp3],    2(%[dst])                 \n\t"                  \
-      "sb        %[temp4],    3(%[dst])                 \n\t"                  \
-      "addiu     %[src],      %[src],       4           \n\t"                  \
-      "addiu     %[temp0],    %[temp0],     -1          \n\t"                  \
-      "bnez      %[temp0],    1b                        \n\t"                  \
-      " addiu    %[dst],      %[dst],       4           \n\t"                  \
-    ".else                                              \n\t"                  \
-    "1:                                                 \n\t"                  \
-      "ulw       %[temp1],    -1(%[src])                \n\t"                  \
-      "ulw       %[temp2],    0(%[src])                 \n\t"                  \
-      "addiu     %[src],      %[src],       4           \n\t"                  \
-      "addiu     %[temp0],    %[temp0],     -1          \n\t"                  \
-      "subu.qb   %[temp3],    %[temp2],     %[temp1]    \n\t"                  \
-      "usw       %[temp3],    0(%[dst])                 \n\t"                  \
-      "bnez      %[temp0],    1b                        \n\t"                  \
-      " addiu    %[dst],      %[dst],       4           \n\t"                  \
-    ".endif                                             \n\t"                  \
-    "4:                                                 \n\t"                  \
-      "beqz      %[temp6],    3f                        \n\t"                  \
-      " nop                                             \n\t"                  \
-    "2:                                                 \n\t"                  \
-      "lbu       %[temp2],    0(%[src])                 \n\t"                  \
-    ".if " #INVERSE "                                   \n\t"                  \
-      "lbu       %[temp1],    -1(%[dst])                \n\t"                  \
-      "addu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \
-    ".else                                              \n\t"                  \
-      "lbu       %[temp1],    -1(%[src])                \n\t"                  \
-      "subu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \
-    ".endif                                             \n\t"                  \
-      "addiu     %[src],      %[src],       1           \n\t"                  \
-      "sb        %[temp3],    0(%[dst])                 \n\t"                  \
-      "addiu     %[temp6],    %[temp6],     -1          \n\t"                  \
-      "bnez      %[temp6],    2b                        \n\t"                  \
-      " addiu    %[dst],      %[dst],       1           \n\t"                  \
-    "3:                                                 \n\t"                  \
-      ".set      pop                                    \n\t"                  \
-      : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),         \
-        [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),         \
-        [temp6]"=&r"(temp6), [dst]"+&r"(pdst), [src]"+&r"(psrc)                \
-      : [length]"r"(ilength)                                                   \
-      : "memory"                                                               \
-    );                                                                         \
-  } while (0)
-
-static WEBP_INLINE void PredictLine_MIPSdspR2(const uint8_t* src, uint8_t* dst,
-                                              int length) {
-  DO_PREDICT_LINE(src, dst, length, 0);
-}
-
-#define DO_PREDICT_LINE_VERTICAL(SRC, PRED, DST, LENGTH, INVERSE) do {         \
-    const uint8_t* psrc = (uint8_t*)(SRC);                                     \
-    const uint8_t* ppred = (uint8_t*)(PRED);                                   \
-    uint8_t* pdst = (uint8_t*)(DST);                                           \
-    const int ilength = (int)(LENGTH);                                         \
-    int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;                \
-    __asm__ volatile (                                                         \
-      ".set      push                                   \n\t"                  \
-      ".set      noreorder                              \n\t"                  \
-      "srl       %[temp0],    %[length],    0x3         \n\t"                  \
-      "beqz      %[temp0],    4f                        \n\t"                  \
-      " andi     %[temp7],    %[length],    0x7         \n\t"                  \
-    "1:                                                 \n\t"                  \
-      "ulw       %[temp1],    0(%[src])                 \n\t"                  \
-      "ulw       %[temp2],    0(%[pred])                \n\t"                  \
-      "ulw       %[temp3],    4(%[src])                 \n\t"                  \
-      "ulw       %[temp4],    4(%[pred])                \n\t"                  \
-      "addiu     %[src],      %[src],       8           \n\t"                  \
-    ".if " #INVERSE "                                   \n\t"                  \
-      "addu.qb   %[temp5],    %[temp1],     %[temp2]    \n\t"                  \
-      "addu.qb   %[temp6],    %[temp3],     %[temp4]    \n\t"                  \
-    ".else                                              \n\t"                  \
-      "subu.qb   %[temp5],    %[temp1],     %[temp2]    \n\t"                  \
-      "subu.qb   %[temp6],    %[temp3],     %[temp4]    \n\t"                  \
-    ".endif                                             \n\t"                  \
-      "addiu     %[pred],     %[pred],      8           \n\t"                  \
-      "usw       %[temp5],    0(%[dst])                 \n\t"                  \
-      "usw       %[temp6],    4(%[dst])                 \n\t"                  \
-      "addiu     %[temp0],    %[temp0],     -1          \n\t"                  \
-      "bnez      %[temp0],    1b                        \n\t"                  \
-      " addiu    %[dst],      %[dst],       8           \n\t"                  \
-    "4:                                                 \n\t"                  \
-      "beqz      %[temp7],    3f                        \n\t"                  \
-      " nop                                             \n\t"                  \
-    "2:                                                 \n\t"                  \
-      "lbu       %[temp1],    0(%[src])                 \n\t"                  \
-      "lbu       %[temp2],    0(%[pred])                \n\t"                  \
-      "addiu     %[src],      %[src],       1           \n\t"                  \
-      "addiu     %[pred],     %[pred],      1           \n\t"                  \
-    ".if " #INVERSE "                                   \n\t"                  \
-      "addu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \
-    ".else                                              \n\t"                  \
-      "subu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \
-    ".endif                                             \n\t"                  \
-      "sb        %[temp3],    0(%[dst])                 \n\t"                  \
-      "addiu     %[temp7],    %[temp7],     -1          \n\t"                  \
-      "bnez      %[temp7],    2b                        \n\t"                  \
-      " addiu    %[dst],      %[dst],       1           \n\t"                  \
-    "3:                                                 \n\t"                  \
-      ".set      pop                                    \n\t"                  \
-      : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),         \
-        [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),         \
-        [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [pred]"+&r"(ppred),          \
-        [dst]"+&r"(pdst), [src]"+&r"(psrc)                                     \
-      : [length]"r"(ilength)                                                   \
-      : "memory"                                                               \
-    );                                                                         \
-  } while (0)
-
-#define PREDICT_LINE_ONE_PASS(SRC, PRED, DST) do {                             \
-    int temp1, temp2, temp3;                                                   \
-    __asm__ volatile (                                                         \
-      "lbu       %[temp1],   0(%[src])               \n\t"                     \
-      "lbu       %[temp2],   0(%[pred])              \n\t"                     \
-      "subu      %[temp3],   %[temp1],   %[temp2]    \n\t"                     \
-      "sb        %[temp3],   0(%[dst])               \n\t"                     \
-      : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3)          \
-      : [pred]"r"((PRED)), [dst]"r"((DST)), [src]"r"((SRC))                    \
-      : "memory"                                                               \
-    );                                                                         \
-  } while (0)
-
-//------------------------------------------------------------------------------
-// Horizontal filter.
-
-#define FILTER_LINE_BY_LINE do {                                               \
-    while (row < last_row) {                                                   \
-      PREDICT_LINE_ONE_PASS(in, preds - stride, out);                          \
-      DO_PREDICT_LINE(in + 1, out + 1, width - 1, 0);                          \
-      ++row;                                                                   \
-      preds += stride;                                                         \
-      in += stride;                                                            \
-      out += stride;                                                           \
-    }                                                                          \
-  } while (0)
-
-static WEBP_INLINE void DoHorizontalFilter_MIPSdspR2(const uint8_t* in,
-                                                     int width, int height,
-                                                     int stride,
-                                                     int row, int num_rows,
-                                                     uint8_t* out) {
-  const uint8_t* preds;
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-  preds = in;
-
-  if (row == 0) {
-    // Leftmost pixel is the same as input for topmost scanline.
-    out[0] = in[0];
-    PredictLine_MIPSdspR2(in + 1, out + 1, width - 1);
-    row = 1;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  FILTER_LINE_BY_LINE;
-}
-#undef FILTER_LINE_BY_LINE
-
-static void HorizontalFilter_MIPSdspR2(const uint8_t* data,
-                                       int width, int height,
-                                       int stride, uint8_t* filtered_data) {
-  DoHorizontalFilter_MIPSdspR2(data, width, height, stride, 0, height,
-                               filtered_data);
-}
-
-//------------------------------------------------------------------------------
-// Vertical filter.
-
-#define FILTER_LINE_BY_LINE do {                                               \
-    while (row < last_row) {                                                   \
-      DO_PREDICT_LINE_VERTICAL(in, preds, out, width, 0);                      \
-      ++row;                                                                   \
-      preds += stride;                                                         \
-      in += stride;                                                            \
-      out += stride;                                                           \
-    }                                                                          \
-  } while (0)
-
-static WEBP_INLINE void DoVerticalFilter_MIPSdspR2(const uint8_t* in,
-                                                   int width, int height,
-                                                   int stride,
-                                                   int row, int num_rows,
-                                                   uint8_t* out) {
-  const uint8_t* preds;
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-  preds = in;
-
-  if (row == 0) {
-    // Very first top-left pixel is copied.
-    out[0] = in[0];
-    // Rest of top scan-line is left-predicted.
-    PredictLine_MIPSdspR2(in + 1, out + 1, width - 1);
-    row = 1;
-    in += stride;
-    out += stride;
-  } else {
-    // We are starting from in-between. Make sure 'preds' points to prev row.
-    preds -= stride;
-  }
-
-  // Filter line-by-line.
-  FILTER_LINE_BY_LINE;
-}
-#undef FILTER_LINE_BY_LINE
-
-static void VerticalFilter_MIPSdspR2(const uint8_t* data, int width, int height,
-                                     int stride, uint8_t* filtered_data) {
-  DoVerticalFilter_MIPSdspR2(data, width, height, stride, 0, height,
-                             filtered_data);
-}
-
-//------------------------------------------------------------------------------
-// Gradient filter.
-
-static int GradientPredictor_MIPSdspR2(uint8_t a, uint8_t b, uint8_t c) {
-  int temp0;
-  __asm__ volatile (
-    "addu             %[temp0],   %[a],       %[b]        \n\t"
-    "subu             %[temp0],   %[temp0],   %[c]        \n\t"
-    "shll_s.w         %[temp0],   %[temp0],   23          \n\t"
-    "precrqu_s.qb.ph  %[temp0],   %[temp0],   $zero       \n\t"
-    "srl              %[temp0],   %[temp0],   24          \n\t"
-    : [temp0]"=&r"(temp0)
-    : [a]"r"(a),[b]"r"(b),[c]"r"(c)
-  );
-  return temp0;
-}
-
-#define FILTER_LINE_BY_LINE(PREDS, OPERATION) do {                             \
-    while (row < last_row) {                                                   \
-      int w;                                                                   \
-      PREDICT_LINE_ONE_PASS(in, PREDS - stride, out);                          \
-      for (w = 1; w < width; ++w) {                                            \
-        const int pred = GradientPredictor_MIPSdspR2(PREDS[w - 1],             \
-                                                     PREDS[w - stride],        \
-                                                     PREDS[w - stride - 1]);   \
-        out[w] = in[w] OPERATION pred;                                         \
-      }                                                                        \
-      ++row;                                                                   \
-      in += stride;                                                            \
-      out += stride;                                                           \
-    }                                                                          \
-  } while (0)
-
-static void DoGradientFilter_MIPSdspR2(const uint8_t* in,
-                                       int width, int height, int stride,
-                                       int row, int num_rows, uint8_t* out) {
-  const uint8_t* preds;
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-  preds = in;
-
-  // left prediction for top scan-line
-  if (row == 0) {
-    out[0] = in[0];
-    PredictLine_MIPSdspR2(in + 1, out + 1, width - 1);
-    row = 1;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  FILTER_LINE_BY_LINE(in, -);
-}
-#undef FILTER_LINE_BY_LINE
-
-static void GradientFilter_MIPSdspR2(const uint8_t* data, int width, int height,
-                                     int stride, uint8_t* filtered_data) {
-  DoGradientFilter_MIPSdspR2(data, width, height, stride, 0, height,
-                             filtered_data);
-}
-
-//------------------------------------------------------------------------------
-
-static void HorizontalUnfilter_MIPSdspR2(const uint8_t* prev, const uint8_t* in,
-                                         uint8_t* out, int width) {
- out[0] = in[0] + (prev == NULL ? 0 : prev[0]);
- DO_PREDICT_LINE(in + 1, out + 1, width - 1, 1);
-}
-
-static void VerticalUnfilter_MIPSdspR2(const uint8_t* prev, const uint8_t* in,
-                                       uint8_t* out, int width) {
-  if (prev == NULL) {
-    HorizontalUnfilter_MIPSdspR2(NULL, in, out, width);
-  } else {
-    DO_PREDICT_LINE_VERTICAL(in, prev, out, width, 1);
-  }
-}
-
-static void GradientUnfilter_MIPSdspR2(const uint8_t* prev, const uint8_t* in,
-                                       uint8_t* out, int width) {
-  if (prev == NULL) {
-    HorizontalUnfilter_MIPSdspR2(NULL, in, out, width);
-  } else {
-    uint8_t top = prev[0], top_left = top, left = top;
-    int i;
-    for (i = 0; i < width; ++i) {
-      top = prev[i];  // need to read this first, in case prev==dst
-      left = in[i] + GradientPredictor_MIPSdspR2(left, top, top_left);
-      top_left = top;
-      out[i] = left;
-    }
-  }
-}
-
-#undef DO_PREDICT_LINE_VERTICAL
-#undef PREDICT_LINE_ONE_PASS
-#undef DO_PREDICT_LINE
-#undef SANITY_CHECK
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8FiltersInitMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitMIPSdspR2(void) {
-  WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_MIPSdspR2;
-  WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_MIPSdspR2;
-  WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_MIPSdspR2;
-
-  WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_MIPSdspR2;
-  WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_MIPSdspR2;
-  WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_MIPSdspR2;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(VP8FiltersInitMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/filters_msa.c b/ios/Pods/libwebp/src/dsp/filters_msa.c
deleted file mode 100644
index 14c437d..0000000
--- a/ios/Pods/libwebp/src/dsp/filters_msa.c
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MSA variant of alpha filters
-//
-// Author: Prashant Patil (prashant.patil@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MSA)
-
-#include "src/dsp/msa_macro.h"
-
-#include <assert.h>
-
-static WEBP_INLINE void PredictLineInverse0(const uint8_t* src,
-                                            const uint8_t* pred,
-                                            uint8_t* dst, int length) {
-  v16u8 src0, pred0, dst0;
-  assert(length >= 0);
-  while (length >= 32) {
-    v16u8 src1, pred1, dst1;
-    LD_UB2(src, 16, src0, src1);
-    LD_UB2(pred, 16, pred0, pred1);
-    SUB2(src0, pred0, src1, pred1, dst0, dst1);
-    ST_UB2(dst0, dst1, dst, 16);
-    src += 32;
-    pred += 32;
-    dst += 32;
-    length -= 32;
-  }
-  if (length > 0) {
-    int i;
-    if (length >= 16) {
-      src0 = LD_UB(src);
-      pred0 = LD_UB(pred);
-      dst0 = src0 - pred0;
-      ST_UB(dst0, dst);
-      src += 16;
-      pred += 16;
-      dst += 16;
-      length -= 16;
-    }
-    for (i = 0; i < length; i++) {
-      dst[i] = src[i] - pred[i];
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Helpful macro.
-
-#define SANITY_CHECK(in, out)  \
-  assert(in != NULL);          \
-  assert(out != NULL);         \
-  assert(width > 0);           \
-  assert(height > 0);          \
-  assert(stride >= width);
-
-//------------------------------------------------------------------------------
-// Horrizontal filter
-
-static void HorizontalFilter_MSA(const uint8_t* data, int width, int height,
-                                 int stride, uint8_t* filtered_data) {
-  const uint8_t* preds = data;
-  const uint8_t* in = data;
-  uint8_t* out = filtered_data;
-  int row = 1;
-  SANITY_CHECK(in, out);
-
-  // Leftmost pixel is the same as input for topmost scanline.
-  out[0] = in[0];
-  PredictLineInverse0(in + 1, preds, out + 1, width - 1);
-  preds += stride;
-  in += stride;
-  out += stride;
-  // Filter line-by-line.
-  while (row < height) {
-    // Leftmost pixel is predicted from above.
-    PredictLineInverse0(in, preds - stride, out, 1);
-    PredictLineInverse0(in + 1, preds, out + 1, width - 1);
-    ++row;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Gradient filter
-
-static WEBP_INLINE void PredictLineGradient(const uint8_t* pinput,
-                                            const uint8_t* ppred,
-                                            uint8_t* poutput, int stride,
-                                            int size) {
-  int w;
-  const v16i8 zero = { 0 };
-  while (size >= 16) {
-    v16u8 pred0, dst0;
-    v8i16 a0, a1, b0, b1, c0, c1;
-    const v16u8 tmp0 = LD_UB(ppred - 1);
-    const v16u8 tmp1 = LD_UB(ppred - stride);
-    const v16u8 tmp2 = LD_UB(ppred - stride - 1);
-    const v16u8 src0 = LD_UB(pinput);
-    ILVRL_B2_SH(zero, tmp0, a0, a1);
-    ILVRL_B2_SH(zero, tmp1, b0, b1);
-    ILVRL_B2_SH(zero, tmp2, c0, c1);
-    ADD2(a0, b0, a1, b1, a0, a1);
-    SUB2(a0, c0, a1, c1, a0, a1);
-    CLIP_SH2_0_255(a0, a1);
-    pred0 = (v16u8)__msa_pckev_b((v16i8)a1, (v16i8)a0);
-    dst0 = src0 - pred0;
-    ST_UB(dst0, poutput);
-    ppred += 16;
-    pinput += 16;
-    poutput += 16;
-    size -= 16;
-  }
-  for (w = 0; w < size; ++w) {
-    const int pred = ppred[w - 1] + ppred[w - stride] - ppred[w - stride - 1];
-    poutput[w] = pinput[w] - (pred < 0 ? 0 : pred > 255 ? 255 : pred);
-  }
-}
-
-
-static void GradientFilter_MSA(const uint8_t* data, int width, int height,
-                               int stride, uint8_t* filtered_data) {
-  const uint8_t* in = data;
-  const uint8_t* preds = data;
-  uint8_t* out = filtered_data;
-  int row = 1;
-  SANITY_CHECK(in, out);
-
-  // left prediction for top scan-line
-  out[0] = in[0];
-  PredictLineInverse0(in + 1, preds, out + 1, width - 1);
-  preds += stride;
-  in += stride;
-  out += stride;
-  // Filter line-by-line.
-  while (row < height) {
-    out[0] = in[0] - preds[- stride];
-    PredictLineGradient(preds + 1, in + 1, out + 1, stride, width - 1);
-    ++row;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Vertical filter
-
-static void VerticalFilter_MSA(const uint8_t* data, int width, int height,
-                               int stride, uint8_t* filtered_data) {
-  const uint8_t* in = data;
-  const uint8_t* preds = data;
-  uint8_t* out = filtered_data;
-  int row = 1;
-  SANITY_CHECK(in, out);
-
-  // Very first top-left pixel is copied.
-  out[0] = in[0];
-  // Rest of top scan-line is left-predicted.
-  PredictLineInverse0(in + 1, preds, out + 1, width - 1);
-  in += stride;
-  out += stride;
-
-  // Filter line-by-line.
-  while (row < height) {
-    PredictLineInverse0(in, preds, out, width);
-    ++row;
-    preds += stride;
-    in += stride;
-    out += stride;
-  }
-}
-
-#undef SANITY_CHECK
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8FiltersInitMSA(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitMSA(void) {
-  WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_MSA;
-  WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_MSA;
-  WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_MSA;
-}
-
-#else  // !WEBP_USE_MSA
-
-WEBP_DSP_INIT_STUB(VP8FiltersInitMSA)
-
-#endif  // WEBP_USE_MSA
diff --git a/ios/Pods/libwebp/src/dsp/filters_neon.c b/ios/Pods/libwebp/src/dsp/filters_neon.c
deleted file mode 100644
index 3e6a578..0000000
--- a/ios/Pods/libwebp/src/dsp/filters_neon.c
+++ /dev/null
@@ -1,329 +0,0 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// NEON variant of alpha filters
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include <assert.h>
-#include "src/dsp/neon.h"
-
-//------------------------------------------------------------------------------
-// Helpful macros.
-
-# define SANITY_CHECK(in, out)                                                 \
-  assert(in != NULL);                                                          \
-  assert(out != NULL);                                                         \
-  assert(width > 0);                                                           \
-  assert(height > 0);                                                          \
-  assert(stride >= width);                                                     \
-  assert(row >= 0 && num_rows > 0 && row + num_rows <= height);                \
-  (void)height;  // Silence unused warning.
-
-// load eight u8 and widen to s16
-#define U8_TO_S16(A) vreinterpretq_s16_u16(vmovl_u8(A))
-#define LOAD_U8_TO_S16(A) U8_TO_S16(vld1_u8(A))
-
-// shift left or right by N byte, inserting zeros
-#define SHIFT_RIGHT_N_Q(A, N) vextq_u8((A), zero, (N))
-#define SHIFT_LEFT_N_Q(A, N) vextq_u8(zero, (A), (16 - (N)) % 16)
-
-// rotate left by N bytes
-#define ROTATE_LEFT_N(A, N)   vext_u8((A), (A), (N))
-// rotate right by N bytes
-#define ROTATE_RIGHT_N(A, N)   vext_u8((A), (A), (8 - (N)) % 8)
-
-static void PredictLine_NEON(const uint8_t* src, const uint8_t* pred,
-                             uint8_t* dst, int length) {
-  int i;
-  assert(length >= 0);
-  for (i = 0; i + 16 <= length; i += 16) {
-    const uint8x16_t A = vld1q_u8(&src[i]);
-    const uint8x16_t B = vld1q_u8(&pred[i]);
-    const uint8x16_t C = vsubq_u8(A, B);
-    vst1q_u8(&dst[i], C);
-  }
-  for (; i < length; ++i) dst[i] = src[i] - pred[i];
-}
-
-// Special case for left-based prediction (when preds==dst-1 or preds==src-1).
-static void PredictLineLeft_NEON(const uint8_t* src, uint8_t* dst, int length) {
-  PredictLine_NEON(src, src - 1, dst, length);
-}
-
-//------------------------------------------------------------------------------
-// Horizontal filter.
-
-static WEBP_INLINE void DoHorizontalFilter_NEON(const uint8_t* in,
-                                                int width, int height,
-                                                int stride,
-                                                int row, int num_rows,
-                                                uint8_t* out) {
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-
-  if (row == 0) {
-    // Leftmost pixel is the same as input for topmost scanline.
-    out[0] = in[0];
-    PredictLineLeft_NEON(in + 1, out + 1, width - 1);
-    row = 1;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    // Leftmost pixel is predicted from above.
-    out[0] = in[0] - in[-stride];
-    PredictLineLeft_NEON(in + 1, out + 1, width - 1);
-    ++row;
-    in += stride;
-    out += stride;
-  }
-}
-
-static void HorizontalFilter_NEON(const uint8_t* data, int width, int height,
-                                  int stride, uint8_t* filtered_data) {
-  DoHorizontalFilter_NEON(data, width, height, stride, 0, height,
-                          filtered_data);
-}
-
-//------------------------------------------------------------------------------
-// Vertical filter.
-
-static WEBP_INLINE void DoVerticalFilter_NEON(const uint8_t* in,
-                                              int width, int height, int stride,
-                                              int row, int num_rows,
-                                              uint8_t* out) {
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-
-  if (row == 0) {
-    // Very first top-left pixel is copied.
-    out[0] = in[0];
-    // Rest of top scan-line is left-predicted.
-    PredictLineLeft_NEON(in + 1, out + 1, width - 1);
-    row = 1;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    PredictLine_NEON(in, in - stride, out, width);
-    ++row;
-    in += stride;
-    out += stride;
-  }
-}
-
-static void VerticalFilter_NEON(const uint8_t* data, int width, int height,
-                                int stride, uint8_t* filtered_data) {
-  DoVerticalFilter_NEON(data, width, height, stride, 0, height,
-                        filtered_data);
-}
-
-//------------------------------------------------------------------------------
-// Gradient filter.
-
-static WEBP_INLINE int GradientPredictor_C(uint8_t a, uint8_t b, uint8_t c) {
-  const int g = a + b - c;
-  return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255;  // clip to 8bit
-}
-
-static void GradientPredictDirect_NEON(const uint8_t* const row,
-                                       const uint8_t* const top,
-                                       uint8_t* const out, int length) {
-  int i;
-  for (i = 0; i + 8 <= length; i += 8) {
-    const uint8x8_t A = vld1_u8(&row[i - 1]);
-    const uint8x8_t B = vld1_u8(&top[i + 0]);
-    const int16x8_t C = vreinterpretq_s16_u16(vaddl_u8(A, B));
-    const int16x8_t D = LOAD_U8_TO_S16(&top[i - 1]);
-    const uint8x8_t E = vqmovun_s16(vsubq_s16(C, D));
-    const uint8x8_t F = vld1_u8(&row[i + 0]);
-    vst1_u8(&out[i], vsub_u8(F, E));
-  }
-  for (; i < length; ++i) {
-    out[i] = row[i] - GradientPredictor_C(row[i - 1], top[i], top[i - 1]);
-  }
-}
-
-static WEBP_INLINE void DoGradientFilter_NEON(const uint8_t* in,
-                                              int width, int height,
-                                              int stride,
-                                              int row, int num_rows,
-                                              uint8_t* out) {
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-
-  // left prediction for top scan-line
-  if (row == 0) {
-    out[0] = in[0];
-    PredictLineLeft_NEON(in + 1, out + 1, width - 1);
-    row = 1;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    out[0] = in[0] - in[-stride];
-    GradientPredictDirect_NEON(in + 1, in + 1 - stride, out + 1, width - 1);
-    ++row;
-    in += stride;
-    out += stride;
-  }
-}
-
-static void GradientFilter_NEON(const uint8_t* data, int width, int height,
-                                int stride, uint8_t* filtered_data) {
-  DoGradientFilter_NEON(data, width, height, stride, 0, height,
-                        filtered_data);
-}
-
-#undef SANITY_CHECK
-
-//------------------------------------------------------------------------------
-// Inverse transforms
-
-static void HorizontalUnfilter_NEON(const uint8_t* prev, const uint8_t* in,
-                                    uint8_t* out, int width) {
-  int i;
-  const uint8x16_t zero = vdupq_n_u8(0);
-  uint8x16_t last;
-  out[0] = in[0] + (prev == NULL ? 0 : prev[0]);
-  if (width <= 1) return;
-  last = vsetq_lane_u8(out[0], zero, 0);
-  for (i = 1; i + 16 <= width; i += 16) {
-    const uint8x16_t A0 = vld1q_u8(&in[i]);
-    const uint8x16_t A1 = vaddq_u8(A0, last);
-    const uint8x16_t A2 = SHIFT_LEFT_N_Q(A1, 1);
-    const uint8x16_t A3 = vaddq_u8(A1, A2);
-    const uint8x16_t A4 = SHIFT_LEFT_N_Q(A3, 2);
-    const uint8x16_t A5 = vaddq_u8(A3, A4);
-    const uint8x16_t A6 = SHIFT_LEFT_N_Q(A5, 4);
-    const uint8x16_t A7 = vaddq_u8(A5, A6);
-    const uint8x16_t A8 = SHIFT_LEFT_N_Q(A7, 8);
-    const uint8x16_t A9 = vaddq_u8(A7, A8);
-    vst1q_u8(&out[i], A9);
-    last = SHIFT_RIGHT_N_Q(A9, 15);
-  }
-  for (; i < width; ++i) out[i] = in[i] + out[i - 1];
-}
-
-static void VerticalUnfilter_NEON(const uint8_t* prev, const uint8_t* in,
-                                  uint8_t* out, int width) {
-  if (prev == NULL) {
-    HorizontalUnfilter_NEON(NULL, in, out, width);
-  } else {
-    int i;
-    assert(width >= 0);
-    for (i = 0; i + 16 <= width; i += 16) {
-      const uint8x16_t A = vld1q_u8(&in[i]);
-      const uint8x16_t B = vld1q_u8(&prev[i]);
-      const uint8x16_t C = vaddq_u8(A, B);
-      vst1q_u8(&out[i], C);
-    }
-    for (; i < width; ++i) out[i] = in[i] + prev[i];
-  }
-}
-
-// GradientUnfilter_NEON is correct but slower than the C-version,
-// at least on ARM64. For armv7, it's a wash.
-// So best is to disable it for now, but keep the idea around...
-#if !defined(USE_GRADIENT_UNFILTER)
-#define USE_GRADIENT_UNFILTER 0   // ALTERNATE_CODE
-#endif
-
-#if (USE_GRADIENT_UNFILTER == 1)
-#define GRAD_PROCESS_LANE(L)  do {                                             \
-  const uint8x8_t tmp1 = ROTATE_RIGHT_N(pred, 1);  /* rotate predictor in */   \
-  const int16x8_t tmp2 = vaddq_s16(BC, U8_TO_S16(tmp1));                       \
-  const uint8x8_t delta = vqmovun_s16(tmp2);                                   \
-  pred = vadd_u8(D, delta);                                                    \
-  out = vext_u8(out, ROTATE_LEFT_N(pred, (L)), 1);                             \
-} while (0)
-
-static void GradientPredictInverse_NEON(const uint8_t* const in,
-                                        const uint8_t* const top,
-                                        uint8_t* const row, int length) {
-  if (length > 0) {
-    int i;
-    uint8x8_t pred = vdup_n_u8(row[-1]);   // left sample
-    uint8x8_t out = vdup_n_u8(0);
-    for (i = 0; i + 8 <= length; i += 8) {
-      const int16x8_t B = LOAD_U8_TO_S16(&top[i + 0]);
-      const int16x8_t C = LOAD_U8_TO_S16(&top[i - 1]);
-      const int16x8_t BC = vsubq_s16(B, C);  // unclipped gradient basis B - C
-      const uint8x8_t D = vld1_u8(&in[i]);   // base input
-      GRAD_PROCESS_LANE(0);
-      GRAD_PROCESS_LANE(1);
-      GRAD_PROCESS_LANE(2);
-      GRAD_PROCESS_LANE(3);
-      GRAD_PROCESS_LANE(4);
-      GRAD_PROCESS_LANE(5);
-      GRAD_PROCESS_LANE(6);
-      GRAD_PROCESS_LANE(7);
-      vst1_u8(&row[i], out);
-    }
-    for (; i < length; ++i) {
-      row[i] = in[i] + GradientPredictor_C(row[i - 1], top[i], top[i - 1]);
-    }
-  }
-}
-#undef GRAD_PROCESS_LANE
-
-static void GradientUnfilter_NEON(const uint8_t* prev, const uint8_t* in,
-                                  uint8_t* out, int width) {
-  if (prev == NULL) {
-    HorizontalUnfilter_NEON(NULL, in, out, width);
-  } else {
-    out[0] = in[0] + prev[0];  // predict from above
-    GradientPredictInverse_NEON(in + 1, prev + 1, out + 1, width - 1);
-  }
-}
-
-#endif   // USE_GRADIENT_UNFILTER
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8FiltersInitNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitNEON(void) {
-  WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_NEON;
-  WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_NEON;
-#if (USE_GRADIENT_UNFILTER == 1)
-  WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_NEON;
-#endif
-
-  WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_NEON;
-  WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_NEON;
-  WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_NEON;
-}
-
-#else  // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(VP8FiltersInitNEON)
-
-#endif  // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/filters_sse2.c b/ios/Pods/libwebp/src/dsp/filters_sse2.c
deleted file mode 100644
index 5a18895..0000000
--- a/ios/Pods/libwebp/src/dsp/filters_sse2.c
+++ /dev/null
@@ -1,333 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 variant of alpha filters
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-
-#include <assert.h>
-#include <emmintrin.h>
-#include <stdlib.h>
-#include <string.h>
-
-//------------------------------------------------------------------------------
-// Helpful macro.
-
-# define SANITY_CHECK(in, out)                                                 \
-  assert((in) != NULL);                                                        \
-  assert((out) != NULL);                                                       \
-  assert(width > 0);                                                           \
-  assert(height > 0);                                                          \
-  assert(stride >= width);                                                     \
-  assert(row >= 0 && num_rows > 0 && row + num_rows <= height);                \
-  (void)height;  // Silence unused warning.
-
-static void PredictLineTop_SSE2(const uint8_t* src, const uint8_t* pred,
-                                uint8_t* dst, int length) {
-  int i;
-  const int max_pos = length & ~31;
-  assert(length >= 0);
-  for (i = 0; i < max_pos; i += 32) {
-    const __m128i A0 = _mm_loadu_si128((const __m128i*)&src[i +  0]);
-    const __m128i A1 = _mm_loadu_si128((const __m128i*)&src[i + 16]);
-    const __m128i B0 = _mm_loadu_si128((const __m128i*)&pred[i +  0]);
-    const __m128i B1 = _mm_loadu_si128((const __m128i*)&pred[i + 16]);
-    const __m128i C0 = _mm_sub_epi8(A0, B0);
-    const __m128i C1 = _mm_sub_epi8(A1, B1);
-    _mm_storeu_si128((__m128i*)&dst[i +  0], C0);
-    _mm_storeu_si128((__m128i*)&dst[i + 16], C1);
-  }
-  for (; i < length; ++i) dst[i] = src[i] - pred[i];
-}
-
-// Special case for left-based prediction (when preds==dst-1 or preds==src-1).
-static void PredictLineLeft_SSE2(const uint8_t* src, uint8_t* dst, int length) {
-  int i;
-  const int max_pos = length & ~31;
-  assert(length >= 0);
-  for (i = 0; i < max_pos; i += 32) {
-    const __m128i A0 = _mm_loadu_si128((const __m128i*)(src + i +  0    ));
-    const __m128i B0 = _mm_loadu_si128((const __m128i*)(src + i +  0 - 1));
-    const __m128i A1 = _mm_loadu_si128((const __m128i*)(src + i + 16    ));
-    const __m128i B1 = _mm_loadu_si128((const __m128i*)(src + i + 16 - 1));
-    const __m128i C0 = _mm_sub_epi8(A0, B0);
-    const __m128i C1 = _mm_sub_epi8(A1, B1);
-    _mm_storeu_si128((__m128i*)(dst + i +  0), C0);
-    _mm_storeu_si128((__m128i*)(dst + i + 16), C1);
-  }
-  for (; i < length; ++i) dst[i] = src[i] - src[i - 1];
-}
-
-//------------------------------------------------------------------------------
-// Horizontal filter.
-
-static WEBP_INLINE void DoHorizontalFilter_SSE2(const uint8_t* in,
-                                                int width, int height,
-                                                int stride,
-                                                int row, int num_rows,
-                                                uint8_t* out) {
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-
-  if (row == 0) {
-    // Leftmost pixel is the same as input for topmost scanline.
-    out[0] = in[0];
-    PredictLineLeft_SSE2(in + 1, out + 1, width - 1);
-    row = 1;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    // Leftmost pixel is predicted from above.
-    out[0] = in[0] - in[-stride];
-    PredictLineLeft_SSE2(in + 1, out + 1, width - 1);
-    ++row;
-    in += stride;
-    out += stride;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Vertical filter.
-
-static WEBP_INLINE void DoVerticalFilter_SSE2(const uint8_t* in,
-                                              int width, int height, int stride,
-                                              int row, int num_rows,
-                                              uint8_t* out) {
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-
-  if (row == 0) {
-    // Very first top-left pixel is copied.
-    out[0] = in[0];
-    // Rest of top scan-line is left-predicted.
-    PredictLineLeft_SSE2(in + 1, out + 1, width - 1);
-    row = 1;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    PredictLineTop_SSE2(in, in - stride, out, width);
-    ++row;
-    in += stride;
-    out += stride;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Gradient filter.
-
-static WEBP_INLINE int GradientPredictor_SSE2(uint8_t a, uint8_t b, uint8_t c) {
-  const int g = a + b - c;
-  return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255;  // clip to 8bit
-}
-
-static void GradientPredictDirect_SSE2(const uint8_t* const row,
-                                       const uint8_t* const top,
-                                       uint8_t* const out, int length) {
-  const int max_pos = length & ~7;
-  int i;
-  const __m128i zero = _mm_setzero_si128();
-  for (i = 0; i < max_pos; i += 8) {
-    const __m128i A0 = _mm_loadl_epi64((const __m128i*)&row[i - 1]);
-    const __m128i B0 = _mm_loadl_epi64((const __m128i*)&top[i]);
-    const __m128i C0 = _mm_loadl_epi64((const __m128i*)&top[i - 1]);
-    const __m128i D = _mm_loadl_epi64((const __m128i*)&row[i]);
-    const __m128i A1 = _mm_unpacklo_epi8(A0, zero);
-    const __m128i B1 = _mm_unpacklo_epi8(B0, zero);
-    const __m128i C1 = _mm_unpacklo_epi8(C0, zero);
-    const __m128i E = _mm_add_epi16(A1, B1);
-    const __m128i F = _mm_sub_epi16(E, C1);
-    const __m128i G = _mm_packus_epi16(F, zero);
-    const __m128i H = _mm_sub_epi8(D, G);
-    _mm_storel_epi64((__m128i*)(out + i), H);
-  }
-  for (; i < length; ++i) {
-    out[i] = row[i] - GradientPredictor_SSE2(row[i - 1], top[i], top[i - 1]);
-  }
-}
-
-static WEBP_INLINE void DoGradientFilter_SSE2(const uint8_t* in,
-                                              int width, int height, int stride,
-                                              int row, int num_rows,
-                                              uint8_t* out) {
-  const size_t start_offset = row * stride;
-  const int last_row = row + num_rows;
-  SANITY_CHECK(in, out);
-  in += start_offset;
-  out += start_offset;
-
-  // left prediction for top scan-line
-  if (row == 0) {
-    out[0] = in[0];
-    PredictLineLeft_SSE2(in + 1, out + 1, width - 1);
-    row = 1;
-    in += stride;
-    out += stride;
-  }
-
-  // Filter line-by-line.
-  while (row < last_row) {
-    out[0] = in[0] - in[-stride];
-    GradientPredictDirect_SSE2(in + 1, in + 1 - stride, out + 1, width - 1);
-    ++row;
-    in += stride;
-    out += stride;
-  }
-}
-
-#undef SANITY_CHECK
-
-//------------------------------------------------------------------------------
-
-static void HorizontalFilter_SSE2(const uint8_t* data, int width, int height,
-                                  int stride, uint8_t* filtered_data) {
-  DoHorizontalFilter_SSE2(data, width, height, stride, 0, height,
-                          filtered_data);
-}
-
-static void VerticalFilter_SSE2(const uint8_t* data, int width, int height,
-                                int stride, uint8_t* filtered_data) {
-  DoVerticalFilter_SSE2(data, width, height, stride, 0, height, filtered_data);
-}
-
-static void GradientFilter_SSE2(const uint8_t* data, int width, int height,
-                                int stride, uint8_t* filtered_data) {
-  DoGradientFilter_SSE2(data, width, height, stride, 0, height, filtered_data);
-}
-
-//------------------------------------------------------------------------------
-// Inverse transforms
-
-static void HorizontalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in,
-                                    uint8_t* out, int width) {
-  int i;
-  __m128i last;
-  out[0] = in[0] + (prev == NULL ? 0 : prev[0]);
-  if (width <= 1) return;
-  last = _mm_set_epi32(0, 0, 0, out[0]);
-  for (i = 1; i + 8 <= width; i += 8) {
-    const __m128i A0 = _mm_loadl_epi64((const __m128i*)(in + i));
-    const __m128i A1 = _mm_add_epi8(A0, last);
-    const __m128i A2 = _mm_slli_si128(A1, 1);
-    const __m128i A3 = _mm_add_epi8(A1, A2);
-    const __m128i A4 = _mm_slli_si128(A3, 2);
-    const __m128i A5 = _mm_add_epi8(A3, A4);
-    const __m128i A6 = _mm_slli_si128(A5, 4);
-    const __m128i A7 = _mm_add_epi8(A5, A6);
-    _mm_storel_epi64((__m128i*)(out + i), A7);
-    last = _mm_srli_epi64(A7, 56);
-  }
-  for (; i < width; ++i) out[i] = in[i] + out[i - 1];
-}
-
-static void VerticalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in,
-                                  uint8_t* out, int width) {
-  if (prev == NULL) {
-    HorizontalUnfilter_SSE2(NULL, in, out, width);
-  } else {
-    int i;
-    const int max_pos = width & ~31;
-    assert(width >= 0);
-    for (i = 0; i < max_pos; i += 32) {
-      const __m128i A0 = _mm_loadu_si128((const __m128i*)&in[i +  0]);
-      const __m128i A1 = _mm_loadu_si128((const __m128i*)&in[i + 16]);
-      const __m128i B0 = _mm_loadu_si128((const __m128i*)&prev[i +  0]);
-      const __m128i B1 = _mm_loadu_si128((const __m128i*)&prev[i + 16]);
-      const __m128i C0 = _mm_add_epi8(A0, B0);
-      const __m128i C1 = _mm_add_epi8(A1, B1);
-      _mm_storeu_si128((__m128i*)&out[i +  0], C0);
-      _mm_storeu_si128((__m128i*)&out[i + 16], C1);
-    }
-    for (; i < width; ++i) out[i] = in[i] + prev[i];
-  }
-}
-
-static void GradientPredictInverse_SSE2(const uint8_t* const in,
-                                        const uint8_t* const top,
-                                        uint8_t* const row, int length) {
-  if (length > 0) {
-    int i;
-    const int max_pos = length & ~7;
-    const __m128i zero = _mm_setzero_si128();
-    __m128i A = _mm_set_epi32(0, 0, 0, row[-1]);   // left sample
-    for (i = 0; i < max_pos; i += 8) {
-      const __m128i tmp0 = _mm_loadl_epi64((const __m128i*)&top[i]);
-      const __m128i tmp1 = _mm_loadl_epi64((const __m128i*)&top[i - 1]);
-      const __m128i B = _mm_unpacklo_epi8(tmp0, zero);
-      const __m128i C = _mm_unpacklo_epi8(tmp1, zero);
-      const __m128i D = _mm_loadl_epi64((const __m128i*)&in[i]);  // base input
-      const __m128i E = _mm_sub_epi16(B, C);  // unclipped gradient basis B - C
-      __m128i out = zero;                     // accumulator for output
-      __m128i mask_hi = _mm_set_epi32(0, 0, 0, 0xff);
-      int k = 8;
-      while (1) {
-        const __m128i tmp3 = _mm_add_epi16(A, E);           // delta = A + B - C
-        const __m128i tmp4 = _mm_packus_epi16(tmp3, zero);  // saturate delta
-        const __m128i tmp5 = _mm_add_epi8(tmp4, D);         // add to in[]
-        A = _mm_and_si128(tmp5, mask_hi);                   // 1-complement clip
-        out = _mm_or_si128(out, A);                         // accumulate output
-        if (--k == 0) break;
-        A = _mm_slli_si128(A, 1);                        // rotate left sample
-        mask_hi = _mm_slli_si128(mask_hi, 1);            // rotate mask
-        A = _mm_unpacklo_epi8(A, zero);                  // convert 8b->16b
-      }
-      A = _mm_srli_si128(A, 7);       // prepare left sample for next iteration
-      _mm_storel_epi64((__m128i*)&row[i], out);
-    }
-    for (; i < length; ++i) {
-      row[i] = in[i] + GradientPredictor_SSE2(row[i - 1], top[i], top[i - 1]);
-    }
-  }
-}
-
-static void GradientUnfilter_SSE2(const uint8_t* prev, const uint8_t* in,
-                                  uint8_t* out, int width) {
-  if (prev == NULL) {
-    HorizontalUnfilter_SSE2(NULL, in, out, width);
-  } else {
-    out[0] = in[0] + prev[0];  // predict from above
-    GradientPredictInverse_SSE2(in + 1, prev + 1, out + 1, width - 1);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8FiltersInitSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitSSE2(void) {
-  WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_SSE2;
-  WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_SSE2;
-  WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_SSE2;
-
-  WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_SSE2;
-  WebPFilters[WEBP_FILTER_VERTICAL] = VerticalFilter_SSE2;
-  WebPFilters[WEBP_FILTER_GRADIENT] = GradientFilter_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(VP8FiltersInitSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/lossless.c b/ios/Pods/libwebp/src/dsp/lossless.c
deleted file mode 100644
index d21aa6a..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless.c
+++ /dev/null
@@ -1,657 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Image transforms and color space conversion methods for lossless decoder.
-//
-// Authors: Vikas Arora (vikaas.arora@gmail.com)
-//          Jyrki Alakuijala (jyrki@google.com)
-//          Urvang Joshi (urvang@google.com)
-
-#include "src/dsp/dsp.h"
-
-#include <assert.h>
-#include <math.h>
-#include <stdlib.h>
-#include "src/dec/vp8li_dec.h"
-#include "src/utils/endian_inl_utils.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-
-//------------------------------------------------------------------------------
-// Image transforms.
-
-static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) {
-  return (((a0 ^ a1) & 0xfefefefeu) >> 1) + (a0 & a1);
-}
-
-static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) {
-  return Average2(Average2(a0, a2), a1);
-}
-
-static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1,
-                                     uint32_t a2, uint32_t a3) {
-  return Average2(Average2(a0, a1), Average2(a2, a3));
-}
-
-static WEBP_INLINE uint32_t Clip255(uint32_t a) {
-  if (a < 256) {
-    return a;
-  }
-  // return 0, when a is a negative integer.
-  // return 255, when a is positive.
-  return ~a >> 24;
-}
-
-static WEBP_INLINE int AddSubtractComponentFull(int a, int b, int c) {
-  return Clip255(a + b - c);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1,
-                                                   uint32_t c2) {
-  const int a = AddSubtractComponentFull(c0 >> 24, c1 >> 24, c2 >> 24);
-  const int r = AddSubtractComponentFull((c0 >> 16) & 0xff,
-                                         (c1 >> 16) & 0xff,
-                                         (c2 >> 16) & 0xff);
-  const int g = AddSubtractComponentFull((c0 >> 8) & 0xff,
-                                         (c1 >> 8) & 0xff,
-                                         (c2 >> 8) & 0xff);
-  const int b = AddSubtractComponentFull(c0 & 0xff, c1 & 0xff, c2 & 0xff);
-  return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b;
-}
-
-static WEBP_INLINE int AddSubtractComponentHalf(int a, int b) {
-  return Clip255(a + (a - b) / 2);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1,
-                                                   uint32_t c2) {
-  const uint32_t ave = Average2(c0, c1);
-  const int a = AddSubtractComponentHalf(ave >> 24, c2 >> 24);
-  const int r = AddSubtractComponentHalf((ave >> 16) & 0xff, (c2 >> 16) & 0xff);
-  const int g = AddSubtractComponentHalf((ave >> 8) & 0xff, (c2 >> 8) & 0xff);
-  const int b = AddSubtractComponentHalf((ave >> 0) & 0xff, (c2 >> 0) & 0xff);
-  return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b;
-}
-
-// gcc <= 4.9 on ARM generates incorrect code in Select() when Sub3() is
-// inlined.
-#if defined(__arm__) && LOCAL_GCC_VERSION <= 0x409
-# define LOCAL_INLINE __attribute__ ((noinline))
-#else
-# define LOCAL_INLINE WEBP_INLINE
-#endif
-
-static LOCAL_INLINE int Sub3(int a, int b, int c) {
-  const int pb = b - c;
-  const int pa = a - c;
-  return abs(pb) - abs(pa);
-}
-
-#undef LOCAL_INLINE
-
-static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) {
-  const int pa_minus_pb =
-      Sub3((a >> 24)       , (b >> 24)       , (c >> 24)       ) +
-      Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) +
-      Sub3((a >>  8) & 0xff, (b >>  8) & 0xff, (c >>  8) & 0xff) +
-      Sub3((a      ) & 0xff, (b      ) & 0xff, (c      ) & 0xff);
-  return (pa_minus_pb <= 0) ? a : b;
-}
-
-//------------------------------------------------------------------------------
-// Predictors
-
-static uint32_t Predictor0_C(uint32_t left, const uint32_t* const top) {
-  (void)top;
-  (void)left;
-  return ARGB_BLACK;
-}
-static uint32_t Predictor1_C(uint32_t left, const uint32_t* const top) {
-  (void)top;
-  return left;
-}
-static uint32_t Predictor2_C(uint32_t left, const uint32_t* const top) {
-  (void)left;
-  return top[0];
-}
-static uint32_t Predictor3_C(uint32_t left, const uint32_t* const top) {
-  (void)left;
-  return top[1];
-}
-static uint32_t Predictor4_C(uint32_t left, const uint32_t* const top) {
-  (void)left;
-  return top[-1];
-}
-static uint32_t Predictor5_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average3(left, top[0], top[1]);
-  return pred;
-}
-static uint32_t Predictor6_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2(left, top[-1]);
-  return pred;
-}
-static uint32_t Predictor7_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2(left, top[0]);
-  return pred;
-}
-static uint32_t Predictor8_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2(top[-1], top[0]);
-  (void)left;
-  return pred;
-}
-static uint32_t Predictor9_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2(top[0], top[1]);
-  (void)left;
-  return pred;
-}
-static uint32_t Predictor10_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average4(left, top[-1], top[0], top[1]);
-  return pred;
-}
-static uint32_t Predictor11_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Select(top[0], left, top[-1]);
-  return pred;
-}
-static uint32_t Predictor12_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]);
-  return pred;
-}
-static uint32_t Predictor13_C(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]);
-  return pred;
-}
-
-GENERATE_PREDICTOR_ADD(Predictor0_C, PredictorAdd0_C)
-static void PredictorAdd1_C(const uint32_t* in, const uint32_t* upper,
-                            int num_pixels, uint32_t* out) {
-  int i;
-  uint32_t left = out[-1];
-  for (i = 0; i < num_pixels; ++i) {
-    out[i] = left = VP8LAddPixels(in[i], left);
-  }
-  (void)upper;
-}
-GENERATE_PREDICTOR_ADD(Predictor2_C, PredictorAdd2_C)
-GENERATE_PREDICTOR_ADD(Predictor3_C, PredictorAdd3_C)
-GENERATE_PREDICTOR_ADD(Predictor4_C, PredictorAdd4_C)
-GENERATE_PREDICTOR_ADD(Predictor5_C, PredictorAdd5_C)
-GENERATE_PREDICTOR_ADD(Predictor6_C, PredictorAdd6_C)
-GENERATE_PREDICTOR_ADD(Predictor7_C, PredictorAdd7_C)
-GENERATE_PREDICTOR_ADD(Predictor8_C, PredictorAdd8_C)
-GENERATE_PREDICTOR_ADD(Predictor9_C, PredictorAdd9_C)
-GENERATE_PREDICTOR_ADD(Predictor10_C, PredictorAdd10_C)
-GENERATE_PREDICTOR_ADD(Predictor11_C, PredictorAdd11_C)
-GENERATE_PREDICTOR_ADD(Predictor12_C, PredictorAdd12_C)
-GENERATE_PREDICTOR_ADD(Predictor13_C, PredictorAdd13_C)
-
-//------------------------------------------------------------------------------
-
-// Inverse prediction.
-static void PredictorInverseTransform_C(const VP8LTransform* const transform,
-                                        int y_start, int y_end,
-                                        const uint32_t* in, uint32_t* out) {
-  const int width = transform->xsize_;
-  if (y_start == 0) {  // First Row follows the L (mode=1) mode.
-    PredictorAdd0_C(in, NULL, 1, out);
-    PredictorAdd1_C(in + 1, NULL, width - 1, out + 1);
-    in += width;
-    out += width;
-    ++y_start;
-  }
-
-  {
-    int y = y_start;
-    const int tile_width = 1 << transform->bits_;
-    const int mask = tile_width - 1;
-    const int tiles_per_row = VP8LSubSampleSize(width, transform->bits_);
-    const uint32_t* pred_mode_base =
-        transform->data_ + (y >> transform->bits_) * tiles_per_row;
-
-    while (y < y_end) {
-      const uint32_t* pred_mode_src = pred_mode_base;
-      int x = 1;
-      // First pixel follows the T (mode=2) mode.
-      PredictorAdd2_C(in, out - width, 1, out);
-      // .. the rest:
-      while (x < width) {
-        const VP8LPredictorAddSubFunc pred_func =
-            VP8LPredictorsAdd[((*pred_mode_src++) >> 8) & 0xf];
-        int x_end = (x & ~mask) + tile_width;
-        if (x_end > width) x_end = width;
-        pred_func(in + x, out + x - width, x_end - x, out + x);
-        x = x_end;
-      }
-      in += width;
-      out += width;
-      ++y;
-      if ((y & mask) == 0) {   // Use the same mask, since tiles are squares.
-        pred_mode_base += tiles_per_row;
-      }
-    }
-  }
-}
-
-// Add green to blue and red channels (i.e. perform the inverse transform of
-// 'subtract green').
-void VP8LAddGreenToBlueAndRed_C(const uint32_t* src, int num_pixels,
-                                uint32_t* dst) {
-  int i;
-  for (i = 0; i < num_pixels; ++i) {
-    const uint32_t argb = src[i];
-    const uint32_t green = ((argb >> 8) & 0xff);
-    uint32_t red_blue = (argb & 0x00ff00ffu);
-    red_blue += (green << 16) | green;
-    red_blue &= 0x00ff00ffu;
-    dst[i] = (argb & 0xff00ff00u) | red_blue;
-  }
-}
-
-static WEBP_INLINE int ColorTransformDelta(int8_t color_pred,
-                                           int8_t color) {
-  return ((int)color_pred * color) >> 5;
-}
-
-static WEBP_INLINE void ColorCodeToMultipliers(uint32_t color_code,
-                                               VP8LMultipliers* const m) {
-  m->green_to_red_  = (color_code >>  0) & 0xff;
-  m->green_to_blue_ = (color_code >>  8) & 0xff;
-  m->red_to_blue_   = (color_code >> 16) & 0xff;
-}
-
-void VP8LTransformColorInverse_C(const VP8LMultipliers* const m,
-                                 const uint32_t* src, int num_pixels,
-                                 uint32_t* dst) {
-  int i;
-  for (i = 0; i < num_pixels; ++i) {
-    const uint32_t argb = src[i];
-    const uint32_t green = argb >> 8;
-    const uint32_t red = argb >> 16;
-    int new_red = red & 0xff;
-    int new_blue = argb & 0xff;
-    new_red += ColorTransformDelta(m->green_to_red_, green);
-    new_red &= 0xff;
-    new_blue += ColorTransformDelta(m->green_to_blue_, green);
-    new_blue += ColorTransformDelta(m->red_to_blue_, new_red);
-    new_blue &= 0xff;
-    dst[i] = (argb & 0xff00ff00u) | (new_red << 16) | (new_blue);
-  }
-}
-
-// Color space inverse transform.
-static void ColorSpaceInverseTransform_C(const VP8LTransform* const transform,
-                                         int y_start, int y_end,
-                                         const uint32_t* src, uint32_t* dst) {
-  const int width = transform->xsize_;
-  const int tile_width = 1 << transform->bits_;
-  const int mask = tile_width - 1;
-  const int safe_width = width & ~mask;
-  const int remaining_width = width - safe_width;
-  const int tiles_per_row = VP8LSubSampleSize(width, transform->bits_);
-  int y = y_start;
-  const uint32_t* pred_row =
-      transform->data_ + (y >> transform->bits_) * tiles_per_row;
-
-  while (y < y_end) {
-    const uint32_t* pred = pred_row;
-    VP8LMultipliers m = { 0, 0, 0 };
-    const uint32_t* const src_safe_end = src + safe_width;
-    const uint32_t* const src_end = src + width;
-    while (src < src_safe_end) {
-      ColorCodeToMultipliers(*pred++, &m);
-      VP8LTransformColorInverse(&m, src, tile_width, dst);
-      src += tile_width;
-      dst += tile_width;
-    }
-    if (src < src_end) {  // Left-overs using C-version.
-      ColorCodeToMultipliers(*pred++, &m);
-      VP8LTransformColorInverse(&m, src, remaining_width, dst);
-      src += remaining_width;
-      dst += remaining_width;
-    }
-    ++y;
-    if ((y & mask) == 0) pred_row += tiles_per_row;
-  }
-}
-
-// Separate out pixels packed together using pixel-bundling.
-// We define two methods for ARGB data (uint32_t) and alpha-only data (uint8_t).
-#define COLOR_INDEX_INVERSE(FUNC_NAME, F_NAME, STATIC_DECL, TYPE, BIT_SUFFIX,  \
-                            GET_INDEX, GET_VALUE)                              \
-static void F_NAME(const TYPE* src, const uint32_t* const color_map,           \
-                   TYPE* dst, int y_start, int y_end, int width) {             \
-  int y;                                                                       \
-  for (y = y_start; y < y_end; ++y) {                                          \
-    int x;                                                                     \
-    for (x = 0; x < width; ++x) {                                              \
-      *dst++ = GET_VALUE(color_map[GET_INDEX(*src++)]);                        \
-    }                                                                          \
-  }                                                                            \
-}                                                                              \
-STATIC_DECL void FUNC_NAME(const VP8LTransform* const transform,               \
-                           int y_start, int y_end, const TYPE* src,            \
-                           TYPE* dst) {                                        \
-  int y;                                                                       \
-  const int bits_per_pixel = 8 >> transform->bits_;                            \
-  const int width = transform->xsize_;                                         \
-  const uint32_t* const color_map = transform->data_;                          \
-  if (bits_per_pixel < 8) {                                                    \
-    const int pixels_per_byte = 1 << transform->bits_;                         \
-    const int count_mask = pixels_per_byte - 1;                                \
-    const uint32_t bit_mask = (1 << bits_per_pixel) - 1;                       \
-    for (y = y_start; y < y_end; ++y) {                                        \
-      uint32_t packed_pixels = 0;                                              \
-      int x;                                                                   \
-      for (x = 0; x < width; ++x) {                                            \
-        /* We need to load fresh 'packed_pixels' once every                */  \
-        /* 'pixels_per_byte' increments of x. Fortunately, pixels_per_byte */  \
-        /* is a power of 2, so can just use a mask for that, instead of    */  \
-        /* decrementing a counter.                                         */  \
-        if ((x & count_mask) == 0) packed_pixels = GET_INDEX(*src++);          \
-        *dst++ = GET_VALUE(color_map[packed_pixels & bit_mask]);               \
-        packed_pixels >>= bits_per_pixel;                                      \
-      }                                                                        \
-    }                                                                          \
-  } else {                                                                     \
-    VP8LMapColor##BIT_SUFFIX(src, color_map, dst, y_start, y_end, width);      \
-  }                                                                            \
-}
-
-COLOR_INDEX_INVERSE(ColorIndexInverseTransform_C, MapARGB_C, static,
-                    uint32_t, 32b, VP8GetARGBIndex, VP8GetARGBValue)
-COLOR_INDEX_INVERSE(VP8LColorIndexInverseTransformAlpha, MapAlpha_C, ,
-                    uint8_t, 8b, VP8GetAlphaIndex, VP8GetAlphaValue)
-
-#undef COLOR_INDEX_INVERSE
-
-void VP8LInverseTransform(const VP8LTransform* const transform,
-                          int row_start, int row_end,
-                          const uint32_t* const in, uint32_t* const out) {
-  const int width = transform->xsize_;
-  assert(row_start < row_end);
-  assert(row_end <= transform->ysize_);
-  switch (transform->type_) {
-    case SUBTRACT_GREEN:
-      VP8LAddGreenToBlueAndRed(in, (row_end - row_start) * width, out);
-      break;
-    case PREDICTOR_TRANSFORM:
-      PredictorInverseTransform_C(transform, row_start, row_end, in, out);
-      if (row_end != transform->ysize_) {
-        // The last predicted row in this iteration will be the top-pred row
-        // for the first row in next iteration.
-        memcpy(out - width, out + (row_end - row_start - 1) * width,
-               width * sizeof(*out));
-      }
-      break;
-    case CROSS_COLOR_TRANSFORM:
-      ColorSpaceInverseTransform_C(transform, row_start, row_end, in, out);
-      break;
-    case COLOR_INDEXING_TRANSFORM:
-      if (in == out && transform->bits_ > 0) {
-        // Move packed pixels to the end of unpacked region, so that unpacking
-        // can occur seamlessly.
-        // Also, note that this is the only transform that applies on
-        // the effective width of VP8LSubSampleSize(xsize_, bits_). All other
-        // transforms work on effective width of xsize_.
-        const int out_stride = (row_end - row_start) * width;
-        const int in_stride = (row_end - row_start) *
-            VP8LSubSampleSize(transform->xsize_, transform->bits_);
-        uint32_t* const src = out + out_stride - in_stride;
-        memmove(src, out, in_stride * sizeof(*src));
-        ColorIndexInverseTransform_C(transform, row_start, row_end, src, out);
-      } else {
-        ColorIndexInverseTransform_C(transform, row_start, row_end, in, out);
-      }
-      break;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Color space conversion.
-
-static int is_big_endian(void) {
-  static const union {
-    uint16_t w;
-    uint8_t b[2];
-  } tmp = { 1 };
-  return (tmp.b[0] != 1);
-}
-
-void VP8LConvertBGRAToRGB_C(const uint32_t* src,
-                            int num_pixels, uint8_t* dst) {
-  const uint32_t* const src_end = src + num_pixels;
-  while (src < src_end) {
-    const uint32_t argb = *src++;
-    *dst++ = (argb >> 16) & 0xff;
-    *dst++ = (argb >>  8) & 0xff;
-    *dst++ = (argb >>  0) & 0xff;
-  }
-}
-
-void VP8LConvertBGRAToRGBA_C(const uint32_t* src,
-                             int num_pixels, uint8_t* dst) {
-  const uint32_t* const src_end = src + num_pixels;
-  while (src < src_end) {
-    const uint32_t argb = *src++;
-    *dst++ = (argb >> 16) & 0xff;
-    *dst++ = (argb >>  8) & 0xff;
-    *dst++ = (argb >>  0) & 0xff;
-    *dst++ = (argb >> 24) & 0xff;
-  }
-}
-
-void VP8LConvertBGRAToRGBA4444_C(const uint32_t* src,
-                                 int num_pixels, uint8_t* dst) {
-  const uint32_t* const src_end = src + num_pixels;
-  while (src < src_end) {
-    const uint32_t argb = *src++;
-    const uint8_t rg = ((argb >> 16) & 0xf0) | ((argb >> 12) & 0xf);
-    const uint8_t ba = ((argb >>  0) & 0xf0) | ((argb >> 28) & 0xf);
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    *dst++ = ba;
-    *dst++ = rg;
-#else
-    *dst++ = rg;
-    *dst++ = ba;
-#endif
-  }
-}
-
-void VP8LConvertBGRAToRGB565_C(const uint32_t* src,
-                               int num_pixels, uint8_t* dst) {
-  const uint32_t* const src_end = src + num_pixels;
-  while (src < src_end) {
-    const uint32_t argb = *src++;
-    const uint8_t rg = ((argb >> 16) & 0xf8) | ((argb >> 13) & 0x7);
-    const uint8_t gb = ((argb >>  5) & 0xe0) | ((argb >>  3) & 0x1f);
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    *dst++ = gb;
-    *dst++ = rg;
-#else
-    *dst++ = rg;
-    *dst++ = gb;
-#endif
-  }
-}
-
-void VP8LConvertBGRAToBGR_C(const uint32_t* src,
-                            int num_pixels, uint8_t* dst) {
-  const uint32_t* const src_end = src + num_pixels;
-  while (src < src_end) {
-    const uint32_t argb = *src++;
-    *dst++ = (argb >>  0) & 0xff;
-    *dst++ = (argb >>  8) & 0xff;
-    *dst++ = (argb >> 16) & 0xff;
-  }
-}
-
-static void CopyOrSwap(const uint32_t* src, int num_pixels, uint8_t* dst,
-                       int swap_on_big_endian) {
-  if (is_big_endian() == swap_on_big_endian) {
-    const uint32_t* const src_end = src + num_pixels;
-    while (src < src_end) {
-      const uint32_t argb = *src++;
-      WebPUint32ToMem(dst, BSwap32(argb));
-      dst += sizeof(argb);
-    }
-  } else {
-    memcpy(dst, src, num_pixels * sizeof(*src));
-  }
-}
-
-void VP8LConvertFromBGRA(const uint32_t* const in_data, int num_pixels,
-                         WEBP_CSP_MODE out_colorspace, uint8_t* const rgba) {
-  switch (out_colorspace) {
-    case MODE_RGB:
-      VP8LConvertBGRAToRGB(in_data, num_pixels, rgba);
-      break;
-    case MODE_RGBA:
-      VP8LConvertBGRAToRGBA(in_data, num_pixels, rgba);
-      break;
-    case MODE_rgbA:
-      VP8LConvertBGRAToRGBA(in_data, num_pixels, rgba);
-      WebPApplyAlphaMultiply(rgba, 0, num_pixels, 1, 0);
-      break;
-    case MODE_BGR:
-      VP8LConvertBGRAToBGR(in_data, num_pixels, rgba);
-      break;
-    case MODE_BGRA:
-      CopyOrSwap(in_data, num_pixels, rgba, 1);
-      break;
-    case MODE_bgrA:
-      CopyOrSwap(in_data, num_pixels, rgba, 1);
-      WebPApplyAlphaMultiply(rgba, 0, num_pixels, 1, 0);
-      break;
-    case MODE_ARGB:
-      CopyOrSwap(in_data, num_pixels, rgba, 0);
-      break;
-    case MODE_Argb:
-      CopyOrSwap(in_data, num_pixels, rgba, 0);
-      WebPApplyAlphaMultiply(rgba, 1, num_pixels, 1, 0);
-      break;
-    case MODE_RGBA_4444:
-      VP8LConvertBGRAToRGBA4444(in_data, num_pixels, rgba);
-      break;
-    case MODE_rgbA_4444:
-      VP8LConvertBGRAToRGBA4444(in_data, num_pixels, rgba);
-      WebPApplyAlphaMultiply4444(rgba, num_pixels, 1, 0);
-      break;
-    case MODE_RGB_565:
-      VP8LConvertBGRAToRGB565(in_data, num_pixels, rgba);
-      break;
-    default:
-      assert(0);          // Code flow should not reach here.
-  }
-}
-
-//------------------------------------------------------------------------------
-
-VP8LProcessDecBlueAndRedFunc VP8LAddGreenToBlueAndRed;
-VP8LPredictorAddSubFunc VP8LPredictorsAdd[16];
-VP8LPredictorFunc VP8LPredictors[16];
-
-// exposed plain-C implementations
-VP8LPredictorAddSubFunc VP8LPredictorsAdd_C[16];
-VP8LPredictorFunc VP8LPredictors_C[16];
-
-VP8LTransformColorInverseFunc VP8LTransformColorInverse;
-
-VP8LConvertFunc VP8LConvertBGRAToRGB;
-VP8LConvertFunc VP8LConvertBGRAToRGBA;
-VP8LConvertFunc VP8LConvertBGRAToRGBA4444;
-VP8LConvertFunc VP8LConvertBGRAToRGB565;
-VP8LConvertFunc VP8LConvertBGRAToBGR;
-
-VP8LMapARGBFunc VP8LMapColor32b;
-VP8LMapAlphaFunc VP8LMapColor8b;
-
-extern void VP8LDspInitSSE2(void);
-extern void VP8LDspInitNEON(void);
-extern void VP8LDspInitMIPSdspR2(void);
-extern void VP8LDspInitMSA(void);
-
-#define COPY_PREDICTOR_ARRAY(IN, OUT) do {                \
-  (OUT)[0] = IN##0_C;                                     \
-  (OUT)[1] = IN##1_C;                                     \
-  (OUT)[2] = IN##2_C;                                     \
-  (OUT)[3] = IN##3_C;                                     \
-  (OUT)[4] = IN##4_C;                                     \
-  (OUT)[5] = IN##5_C;                                     \
-  (OUT)[6] = IN##6_C;                                     \
-  (OUT)[7] = IN##7_C;                                     \
-  (OUT)[8] = IN##8_C;                                     \
-  (OUT)[9] = IN##9_C;                                     \
-  (OUT)[10] = IN##10_C;                                   \
-  (OUT)[11] = IN##11_C;                                   \
-  (OUT)[12] = IN##12_C;                                   \
-  (OUT)[13] = IN##13_C;                                   \
-  (OUT)[14] = IN##0_C; /* <- padding security sentinels*/ \
-  (OUT)[15] = IN##0_C;                                    \
-} while (0);
-
-WEBP_DSP_INIT_FUNC(VP8LDspInit) {
-  COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors)
-  COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors_C)
-  COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd)
-  COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd_C)
-
-#if !WEBP_NEON_OMIT_C_CODE
-  VP8LAddGreenToBlueAndRed = VP8LAddGreenToBlueAndRed_C;
-
-  VP8LTransformColorInverse = VP8LTransformColorInverse_C;
-
-  VP8LConvertBGRAToRGBA = VP8LConvertBGRAToRGBA_C;
-  VP8LConvertBGRAToRGB = VP8LConvertBGRAToRGB_C;
-  VP8LConvertBGRAToBGR = VP8LConvertBGRAToBGR_C;
-#endif
-
-  VP8LConvertBGRAToRGBA4444 = VP8LConvertBGRAToRGBA4444_C;
-  VP8LConvertBGRAToRGB565 = VP8LConvertBGRAToRGB565_C;
-
-  VP8LMapColor32b = MapARGB_C;
-  VP8LMapColor8b = MapAlpha_C;
-
-  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      VP8LDspInitSSE2();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      VP8LDspInitMIPSdspR2();
-    }
-#endif
-#if defined(WEBP_USE_MSA)
-    if (VP8GetCPUInfo(kMSA)) {
-      VP8LDspInitMSA();
-    }
-#endif
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    VP8LDspInitNEON();
-  }
-#endif
-
-  assert(VP8LAddGreenToBlueAndRed != NULL);
-  assert(VP8LTransformColorInverse != NULL);
-  assert(VP8LConvertBGRAToRGBA != NULL);
-  assert(VP8LConvertBGRAToRGB != NULL);
-  assert(VP8LConvertBGRAToBGR != NULL);
-  assert(VP8LConvertBGRAToRGBA4444 != NULL);
-  assert(VP8LConvertBGRAToRGB565 != NULL);
-  assert(VP8LMapColor32b != NULL);
-  assert(VP8LMapColor8b != NULL);
-}
-#undef COPY_PREDICTOR_ARRAY
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dsp/lossless.h b/ios/Pods/libwebp/src/dsp/lossless.h
deleted file mode 100644
index f709cc8..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless.h
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Image transforms and color space conversion methods for lossless decoder.
-//
-// Authors: Vikas Arora (vikaas.arora@gmail.com)
-//          Jyrki Alakuijala (jyrki@google.com)
-
-#ifndef WEBP_DSP_LOSSLESS_H_
-#define WEBP_DSP_LOSSLESS_H_
-
-#include "src/webp/types.h"
-#include "src/webp/decode.h"
-
-#include "src/enc/histogram_enc.h"
-#include "src/utils/utils.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Decoding
-
-typedef uint32_t (*VP8LPredictorFunc)(uint32_t left, const uint32_t* const top);
-extern VP8LPredictorFunc VP8LPredictors[16];
-extern VP8LPredictorFunc VP8LPredictors_C[16];
-// These Add/Sub function expects upper[-1] and out[-1] to be readable.
-typedef void (*VP8LPredictorAddSubFunc)(const uint32_t* in,
-                                        const uint32_t* upper, int num_pixels,
-                                        uint32_t* out);
-extern VP8LPredictorAddSubFunc VP8LPredictorsAdd[16];
-extern VP8LPredictorAddSubFunc VP8LPredictorsAdd_C[16];
-
-typedef void (*VP8LProcessDecBlueAndRedFunc)(const uint32_t* src,
-                                             int num_pixels, uint32_t* dst);
-extern VP8LProcessDecBlueAndRedFunc VP8LAddGreenToBlueAndRed;
-
-typedef struct {
-  // Note: the members are uint8_t, so that any negative values are
-  // automatically converted to "mod 256" values.
-  uint8_t green_to_red_;
-  uint8_t green_to_blue_;
-  uint8_t red_to_blue_;
-} VP8LMultipliers;
-typedef void (*VP8LTransformColorInverseFunc)(const VP8LMultipliers* const m,
-                                              const uint32_t* src,
-                                              int num_pixels, uint32_t* dst);
-extern VP8LTransformColorInverseFunc VP8LTransformColorInverse;
-
-struct VP8LTransform;  // Defined in dec/vp8li.h.
-
-// Performs inverse transform of data given transform information, start and end
-// rows. Transform will be applied to rows [row_start, row_end[.
-// The *in and *out pointers refer to source and destination data respectively
-// corresponding to the intermediate row (row_start).
-void VP8LInverseTransform(const struct VP8LTransform* const transform,
-                          int row_start, int row_end,
-                          const uint32_t* const in, uint32_t* const out);
-
-// Color space conversion.
-typedef void (*VP8LConvertFunc)(const uint32_t* src, int num_pixels,
-                                uint8_t* dst);
-extern VP8LConvertFunc VP8LConvertBGRAToRGB;
-extern VP8LConvertFunc VP8LConvertBGRAToRGBA;
-extern VP8LConvertFunc VP8LConvertBGRAToRGBA4444;
-extern VP8LConvertFunc VP8LConvertBGRAToRGB565;
-extern VP8LConvertFunc VP8LConvertBGRAToBGR;
-
-// Converts from BGRA to other color spaces.
-void VP8LConvertFromBGRA(const uint32_t* const in_data, int num_pixels,
-                         WEBP_CSP_MODE out_colorspace, uint8_t* const rgba);
-
-typedef void (*VP8LMapARGBFunc)(const uint32_t* src,
-                                const uint32_t* const color_map,
-                                uint32_t* dst, int y_start,
-                                int y_end, int width);
-typedef void (*VP8LMapAlphaFunc)(const uint8_t* src,
-                                 const uint32_t* const color_map,
-                                 uint8_t* dst, int y_start,
-                                 int y_end, int width);
-
-extern VP8LMapARGBFunc VP8LMapColor32b;
-extern VP8LMapAlphaFunc VP8LMapColor8b;
-
-// Similar to the static method ColorIndexInverseTransform() that is part of
-// lossless.c, but used only for alpha decoding. It takes uint8_t (rather than
-// uint32_t) arguments for 'src' and 'dst'.
-void VP8LColorIndexInverseTransformAlpha(
-    const struct VP8LTransform* const transform, int y_start, int y_end,
-    const uint8_t* src, uint8_t* dst);
-
-// Expose some C-only fallback functions
-void VP8LTransformColorInverse_C(const VP8LMultipliers* const m,
-                                 const uint32_t* src, int num_pixels,
-                                 uint32_t* dst);
-
-void VP8LConvertBGRAToRGB_C(const uint32_t* src, int num_pixels, uint8_t* dst);
-void VP8LConvertBGRAToRGBA_C(const uint32_t* src, int num_pixels, uint8_t* dst);
-void VP8LConvertBGRAToRGBA4444_C(const uint32_t* src,
-                                 int num_pixels, uint8_t* dst);
-void VP8LConvertBGRAToRGB565_C(const uint32_t* src,
-                               int num_pixels, uint8_t* dst);
-void VP8LConvertBGRAToBGR_C(const uint32_t* src, int num_pixels, uint8_t* dst);
-void VP8LAddGreenToBlueAndRed_C(const uint32_t* src, int num_pixels,
-                                uint32_t* dst);
-
-// Must be called before calling any of the above methods.
-void VP8LDspInit(void);
-
-//------------------------------------------------------------------------------
-// Encoding
-
-typedef void (*VP8LProcessEncBlueAndRedFunc)(uint32_t* dst, int num_pixels);
-extern VP8LProcessEncBlueAndRedFunc VP8LSubtractGreenFromBlueAndRed;
-typedef void (*VP8LTransformColorFunc)(const VP8LMultipliers* const m,
-                                       uint32_t* dst, int num_pixels);
-extern VP8LTransformColorFunc VP8LTransformColor;
-typedef void (*VP8LCollectColorBlueTransformsFunc)(
-    const uint32_t* argb, int stride,
-    int tile_width, int tile_height,
-    int green_to_blue, int red_to_blue, int histo[]);
-extern VP8LCollectColorBlueTransformsFunc VP8LCollectColorBlueTransforms;
-
-typedef void (*VP8LCollectColorRedTransformsFunc)(
-    const uint32_t* argb, int stride,
-    int tile_width, int tile_height,
-    int green_to_red, int histo[]);
-extern VP8LCollectColorRedTransformsFunc VP8LCollectColorRedTransforms;
-
-// Expose some C-only fallback functions
-void VP8LTransformColor_C(const VP8LMultipliers* const m,
-                          uint32_t* data, int num_pixels);
-void VP8LSubtractGreenFromBlueAndRed_C(uint32_t* argb_data, int num_pixels);
-void VP8LCollectColorRedTransforms_C(const uint32_t* argb, int stride,
-                                     int tile_width, int tile_height,
-                                     int green_to_red, int histo[]);
-void VP8LCollectColorBlueTransforms_C(const uint32_t* argb, int stride,
-                                      int tile_width, int tile_height,
-                                      int green_to_blue, int red_to_blue,
-                                      int histo[]);
-
-extern VP8LPredictorAddSubFunc VP8LPredictorsSub[16];
-extern VP8LPredictorAddSubFunc VP8LPredictorsSub_C[16];
-
-// -----------------------------------------------------------------------------
-// Huffman-cost related functions.
-
-typedef double (*VP8LCostFunc)(const uint32_t* population, int length);
-typedef double (*VP8LCostCombinedFunc)(const uint32_t* X, const uint32_t* Y,
-                                       int length);
-typedef float (*VP8LCombinedShannonEntropyFunc)(const int X[256],
-                                                const int Y[256]);
-
-extern VP8LCostFunc VP8LExtraCost;
-extern VP8LCostCombinedFunc VP8LExtraCostCombined;
-extern VP8LCombinedShannonEntropyFunc VP8LCombinedShannonEntropy;
-
-typedef struct {        // small struct to hold counters
-  int counts[2];        // index: 0=zero streak, 1=non-zero streak
-  int streaks[2][2];    // [zero/non-zero][streak<3 / streak>=3]
-} VP8LStreaks;
-
-typedef struct {            // small struct to hold bit entropy results
-  double entropy;           // entropy
-  uint32_t sum;             // sum of the population
-  int nonzeros;             // number of non-zero elements in the population
-  uint32_t max_val;         // maximum value in the population
-  uint32_t nonzero_code;    // index of the last non-zero in the population
-} VP8LBitEntropy;
-
-void VP8LBitEntropyInit(VP8LBitEntropy* const entropy);
-
-// Get the combined symbol bit entropy and Huffman cost stats for the
-// distributions 'X' and 'Y'. Those results can then be refined according to
-// codec specific heuristics.
-typedef void (*VP8LGetCombinedEntropyUnrefinedFunc)(
-    const uint32_t X[], const uint32_t Y[], int length,
-    VP8LBitEntropy* const bit_entropy, VP8LStreaks* const stats);
-extern VP8LGetCombinedEntropyUnrefinedFunc VP8LGetCombinedEntropyUnrefined;
-
-// Get the entropy for the distribution 'X'.
-typedef void (*VP8LGetEntropyUnrefinedFunc)(const uint32_t X[], int length,
-                                            VP8LBitEntropy* const bit_entropy,
-                                            VP8LStreaks* const stats);
-extern VP8LGetEntropyUnrefinedFunc VP8LGetEntropyUnrefined;
-
-void VP8LBitsEntropyUnrefined(const uint32_t* const array, int n,
-                              VP8LBitEntropy* const entropy);
-
-typedef void (*VP8LAddVectorFunc)(const uint32_t* a, const uint32_t* b,
-                                  uint32_t* out, int size);
-extern VP8LAddVectorFunc VP8LAddVector;
-typedef void (*VP8LAddVectorEqFunc)(const uint32_t* a, uint32_t* out, int size);
-extern VP8LAddVectorEqFunc VP8LAddVectorEq;
-void VP8LHistogramAdd(const VP8LHistogram* const a,
-                      const VP8LHistogram* const b,
-                      VP8LHistogram* const out);
-
-// -----------------------------------------------------------------------------
-// PrefixEncode()
-
-typedef int (*VP8LVectorMismatchFunc)(const uint32_t* const array1,
-                                      const uint32_t* const array2, int length);
-// Returns the first index where array1 and array2 are different.
-extern VP8LVectorMismatchFunc VP8LVectorMismatch;
-
-typedef void (*VP8LBundleColorMapFunc)(const uint8_t* const row, int width,
-                                       int xbits, uint32_t* dst);
-extern VP8LBundleColorMapFunc VP8LBundleColorMap;
-void VP8LBundleColorMap_C(const uint8_t* const row, int width, int xbits,
-                          uint32_t* dst);
-
-// Must be called before calling any of the above methods.
-void VP8LEncDspInit(void);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DSP_LOSSLESS_H_
diff --git a/ios/Pods/libwebp/src/dsp/lossless_common.h b/ios/Pods/libwebp/src/dsp/lossless_common.h
deleted file mode 100644
index a2648d1..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_common.h
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Image transforms and color space conversion methods for lossless decoder.
-//
-// Authors: Vikas Arora (vikaas.arora@gmail.com)
-//          Jyrki Alakuijala (jyrki@google.com)
-//          Vincent Rabaud (vrabaud@google.com)
-
-#ifndef WEBP_DSP_LOSSLESS_COMMON_H_
-#define WEBP_DSP_LOSSLESS_COMMON_H_
-
-#include "src/webp/types.h"
-
-#include "src/utils/utils.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Decoding
-
-// color mapping related functions.
-static WEBP_INLINE uint32_t VP8GetARGBIndex(uint32_t idx) {
-  return (idx >> 8) & 0xff;
-}
-
-static WEBP_INLINE uint8_t VP8GetAlphaIndex(uint8_t idx) {
-  return idx;
-}
-
-static WEBP_INLINE uint32_t VP8GetARGBValue(uint32_t val) {
-  return val;
-}
-
-static WEBP_INLINE uint8_t VP8GetAlphaValue(uint32_t val) {
-  return (val >> 8) & 0xff;
-}
-
-//------------------------------------------------------------------------------
-// Misc methods.
-
-// Computes sampled size of 'size' when sampling using 'sampling bits'.
-static WEBP_INLINE uint32_t VP8LSubSampleSize(uint32_t size,
-                                              uint32_t sampling_bits) {
-  return (size + (1 << sampling_bits) - 1) >> sampling_bits;
-}
-
-// Converts near lossless quality into max number of bits shaved off.
-static WEBP_INLINE int VP8LNearLosslessBits(int near_lossless_quality) {
-  //    100 -> 0
-  // 80..99 -> 1
-  // 60..79 -> 2
-  // 40..59 -> 3
-  // 20..39 -> 4
-  //  0..19 -> 5
-  return 5 - near_lossless_quality / 20;
-}
-
-// -----------------------------------------------------------------------------
-// Faster logarithm for integers. Small values use a look-up table.
-
-// The threshold till approximate version of log_2 can be used.
-// Practically, we can get rid of the call to log() as the two values match to
-// very high degree (the ratio of these two is 0.99999x).
-// Keeping a high threshold for now.
-#define APPROX_LOG_WITH_CORRECTION_MAX  65536
-#define APPROX_LOG_MAX                   4096
-#define LOG_2_RECIPROCAL 1.44269504088896338700465094007086
-#define LOG_LOOKUP_IDX_MAX 256
-extern const float kLog2Table[LOG_LOOKUP_IDX_MAX];
-extern const float kSLog2Table[LOG_LOOKUP_IDX_MAX];
-typedef float (*VP8LFastLog2SlowFunc)(uint32_t v);
-
-extern VP8LFastLog2SlowFunc VP8LFastLog2Slow;
-extern VP8LFastLog2SlowFunc VP8LFastSLog2Slow;
-
-static WEBP_INLINE float VP8LFastLog2(uint32_t v) {
-  return (v < LOG_LOOKUP_IDX_MAX) ? kLog2Table[v] : VP8LFastLog2Slow(v);
-}
-// Fast calculation of v * log2(v) for integer input.
-static WEBP_INLINE float VP8LFastSLog2(uint32_t v) {
-  return (v < LOG_LOOKUP_IDX_MAX) ? kSLog2Table[v] : VP8LFastSLog2Slow(v);
-}
-
-// -----------------------------------------------------------------------------
-// PrefixEncode()
-
-// Splitting of distance and length codes into prefixes and
-// extra bits. The prefixes are encoded with an entropy code
-// while the extra bits are stored just as normal bits.
-static WEBP_INLINE void VP8LPrefixEncodeBitsNoLUT(int distance, int* const code,
-                                                  int* const extra_bits) {
-  const int highest_bit = BitsLog2Floor(--distance);
-  const int second_highest_bit = (distance >> (highest_bit - 1)) & 1;
-  *extra_bits = highest_bit - 1;
-  *code = 2 * highest_bit + second_highest_bit;
-}
-
-static WEBP_INLINE void VP8LPrefixEncodeNoLUT(int distance, int* const code,
-                                              int* const extra_bits,
-                                              int* const extra_bits_value) {
-  const int highest_bit = BitsLog2Floor(--distance);
-  const int second_highest_bit = (distance >> (highest_bit - 1)) & 1;
-  *extra_bits = highest_bit - 1;
-  *extra_bits_value = distance & ((1 << *extra_bits) - 1);
-  *code = 2 * highest_bit + second_highest_bit;
-}
-
-#define PREFIX_LOOKUP_IDX_MAX   512
-typedef struct {
-  int8_t code_;
-  int8_t extra_bits_;
-} VP8LPrefixCode;
-
-// These tables are derived using VP8LPrefixEncodeNoLUT.
-extern const VP8LPrefixCode kPrefixEncodeCode[PREFIX_LOOKUP_IDX_MAX];
-extern const uint8_t kPrefixEncodeExtraBitsValue[PREFIX_LOOKUP_IDX_MAX];
-static WEBP_INLINE void VP8LPrefixEncodeBits(int distance, int* const code,
-                                             int* const extra_bits) {
-  if (distance < PREFIX_LOOKUP_IDX_MAX) {
-    const VP8LPrefixCode prefix_code = kPrefixEncodeCode[distance];
-    *code = prefix_code.code_;
-    *extra_bits = prefix_code.extra_bits_;
-  } else {
-    VP8LPrefixEncodeBitsNoLUT(distance, code, extra_bits);
-  }
-}
-
-static WEBP_INLINE void VP8LPrefixEncode(int distance, int* const code,
-                                         int* const extra_bits,
-                                         int* const extra_bits_value) {
-  if (distance < PREFIX_LOOKUP_IDX_MAX) {
-    const VP8LPrefixCode prefix_code = kPrefixEncodeCode[distance];
-    *code = prefix_code.code_;
-    *extra_bits = prefix_code.extra_bits_;
-    *extra_bits_value = kPrefixEncodeExtraBitsValue[distance];
-  } else {
-    VP8LPrefixEncodeNoLUT(distance, code, extra_bits, extra_bits_value);
-  }
-}
-
-// Sum of each component, mod 256.
-static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE
-uint32_t VP8LAddPixels(uint32_t a, uint32_t b) {
-  const uint32_t alpha_and_green = (a & 0xff00ff00u) + (b & 0xff00ff00u);
-  const uint32_t red_and_blue = (a & 0x00ff00ffu) + (b & 0x00ff00ffu);
-  return (alpha_and_green & 0xff00ff00u) | (red_and_blue & 0x00ff00ffu);
-}
-
-// Difference of each component, mod 256.
-static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE
-uint32_t VP8LSubPixels(uint32_t a, uint32_t b) {
-  const uint32_t alpha_and_green =
-      0x00ff00ffu + (a & 0xff00ff00u) - (b & 0xff00ff00u);
-  const uint32_t red_and_blue =
-      0xff00ff00u + (a & 0x00ff00ffu) - (b & 0x00ff00ffu);
-  return (alpha_and_green & 0xff00ff00u) | (red_and_blue & 0x00ff00ffu);
-}
-
-//------------------------------------------------------------------------------
-// Transform-related functions use din both encoding and decoding.
-
-// Macros used to create a batch predictor that iteratively uses a
-// one-pixel predictor.
-
-// The predictor is added to the output pixel (which
-// is therefore considered as a residual) to get the final prediction.
-#define GENERATE_PREDICTOR_ADD(PREDICTOR, PREDICTOR_ADD)             \
-static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
-                          int num_pixels, uint32_t* out) {           \
-  int x;                                                             \
-  for (x = 0; x < num_pixels; ++x) {                                 \
-    const uint32_t pred = (PREDICTOR)(out[x - 1], upper + x);        \
-    out[x] = VP8LAddPixels(in[x], pred);                             \
-  }                                                                  \
-}
-
-// It subtracts the prediction from the input pixel and stores the residual
-// in the output pixel.
-#define GENERATE_PREDICTOR_SUB(PREDICTOR, PREDICTOR_SUB)             \
-static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \
-                          int num_pixels, uint32_t* out) {           \
-  int x;                                                             \
-  for (x = 0; x < num_pixels; ++x) {                                 \
-    const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x);         \
-    out[x] = VP8LSubPixels(in[x], pred);                             \
-  }                                                                  \
-}
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DSP_LOSSLESS_COMMON_H_
diff --git a/ios/Pods/libwebp/src/dsp/lossless_enc.c b/ios/Pods/libwebp/src/dsp/lossless_enc.c
deleted file mode 100644
index 1408fbf..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_enc.c
+++ /dev/null
@@ -1,1043 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Image transform methods for lossless encoder.
-//
-// Authors: Vikas Arora (vikaas.arora@gmail.com)
-//          Jyrki Alakuijala (jyrki@google.com)
-//          Urvang Joshi (urvang@google.com)
-
-#include "src/dsp/dsp.h"
-
-#include <assert.h>
-#include <math.h>
-#include <stdlib.h>
-#include "src/dec/vp8li_dec.h"
-#include "src/utils/endian_inl_utils.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-#include "src/dsp/yuv.h"
-
-// lookup table for small values of log2(int)
-const float kLog2Table[LOG_LOOKUP_IDX_MAX] = {
-  0.0000000000000000f, 0.0000000000000000f,
-  1.0000000000000000f, 1.5849625007211560f,
-  2.0000000000000000f, 2.3219280948873621f,
-  2.5849625007211560f, 2.8073549220576041f,
-  3.0000000000000000f, 3.1699250014423121f,
-  3.3219280948873621f, 3.4594316186372973f,
-  3.5849625007211560f, 3.7004397181410921f,
-  3.8073549220576041f, 3.9068905956085187f,
-  4.0000000000000000f, 4.0874628412503390f,
-  4.1699250014423121f, 4.2479275134435852f,
-  4.3219280948873626f, 4.3923174227787606f,
-  4.4594316186372973f, 4.5235619560570130f,
-  4.5849625007211560f, 4.6438561897747243f,
-  4.7004397181410917f, 4.7548875021634682f,
-  4.8073549220576037f, 4.8579809951275718f,
-  4.9068905956085187f, 4.9541963103868749f,
-  5.0000000000000000f, 5.0443941193584533f,
-  5.0874628412503390f, 5.1292830169449663f,
-  5.1699250014423121f, 5.2094533656289501f,
-  5.2479275134435852f, 5.2854022188622487f,
-  5.3219280948873626f, 5.3575520046180837f,
-  5.3923174227787606f, 5.4262647547020979f,
-  5.4594316186372973f, 5.4918530963296747f,
-  5.5235619560570130f, 5.5545888516776376f,
-  5.5849625007211560f, 5.6147098441152083f,
-  5.6438561897747243f, 5.6724253419714951f,
-  5.7004397181410917f, 5.7279204545631987f,
-  5.7548875021634682f, 5.7813597135246599f,
-  5.8073549220576037f, 5.8328900141647412f,
-  5.8579809951275718f, 5.8826430493618415f,
-  5.9068905956085187f, 5.9307373375628866f,
-  5.9541963103868749f, 5.9772799234999167f,
-  6.0000000000000000f, 6.0223678130284543f,
-  6.0443941193584533f, 6.0660891904577720f,
-  6.0874628412503390f, 6.1085244567781691f,
-  6.1292830169449663f, 6.1497471195046822f,
-  6.1699250014423121f, 6.1898245588800175f,
-  6.2094533656289501f, 6.2288186904958804f,
-  6.2479275134435852f, 6.2667865406949010f,
-  6.2854022188622487f, 6.3037807481771030f,
-  6.3219280948873626f, 6.3398500028846243f,
-  6.3575520046180837f, 6.3750394313469245f,
-  6.3923174227787606f, 6.4093909361377017f,
-  6.4262647547020979f, 6.4429434958487279f,
-  6.4594316186372973f, 6.4757334309663976f,
-  6.4918530963296747f, 6.5077946401986963f,
-  6.5235619560570130f, 6.5391588111080309f,
-  6.5545888516776376f, 6.5698556083309478f,
-  6.5849625007211560f, 6.5999128421871278f,
-  6.6147098441152083f, 6.6293566200796094f,
-  6.6438561897747243f, 6.6582114827517946f,
-  6.6724253419714951f, 6.6865005271832185f,
-  6.7004397181410917f, 6.7142455176661224f,
-  6.7279204545631987f, 6.7414669864011464f,
-  6.7548875021634682f, 6.7681843247769259f,
-  6.7813597135246599f, 6.7944158663501061f,
-  6.8073549220576037f, 6.8201789624151878f,
-  6.8328900141647412f, 6.8454900509443747f,
-  6.8579809951275718f, 6.8703647195834047f,
-  6.8826430493618415f, 6.8948177633079437f,
-  6.9068905956085187f, 6.9188632372745946f,
-  6.9307373375628866f, 6.9425145053392398f,
-  6.9541963103868749f, 6.9657842846620869f,
-  6.9772799234999167f, 6.9886846867721654f,
-  7.0000000000000000f, 7.0112272554232539f,
-  7.0223678130284543f, 7.0334230015374501f,
-  7.0443941193584533f, 7.0552824355011898f,
-  7.0660891904577720f, 7.0768155970508308f,
-  7.0874628412503390f, 7.0980320829605263f,
-  7.1085244567781691f, 7.1189410727235076f,
-  7.1292830169449663f, 7.1395513523987936f,
-  7.1497471195046822f, 7.1598713367783890f,
-  7.1699250014423121f, 7.1799090900149344f,
-  7.1898245588800175f, 7.1996723448363644f,
-  7.2094533656289501f, 7.2191685204621611f,
-  7.2288186904958804f, 7.2384047393250785f,
-  7.2479275134435852f, 7.2573878426926521f,
-  7.2667865406949010f, 7.2761244052742375f,
-  7.2854022188622487f, 7.2946207488916270f,
-  7.3037807481771030f, 7.3128829552843557f,
-  7.3219280948873626f, 7.3309168781146167f,
-  7.3398500028846243f, 7.3487281542310771f,
-  7.3575520046180837f, 7.3663222142458160f,
-  7.3750394313469245f, 7.3837042924740519f,
-  7.3923174227787606f, 7.4008794362821843f,
-  7.4093909361377017f, 7.4178525148858982f,
-  7.4262647547020979f, 7.4346282276367245f,
-  7.4429434958487279f, 7.4512111118323289f,
-  7.4594316186372973f, 7.4676055500829976f,
-  7.4757334309663976f, 7.4838157772642563f,
-  7.4918530963296747f, 7.4998458870832056f,
-  7.5077946401986963f, 7.5156998382840427f,
-  7.5235619560570130f, 7.5313814605163118f,
-  7.5391588111080309f, 7.5468944598876364f,
-  7.5545888516776376f, 7.5622424242210728f,
-  7.5698556083309478f, 7.5774288280357486f,
-  7.5849625007211560f, 7.5924570372680806f,
-  7.5999128421871278f, 7.6073303137496104f,
-  7.6147098441152083f, 7.6220518194563764f,
-  7.6293566200796094f, 7.6366246205436487f,
-  7.6438561897747243f, 7.6510516911789281f,
-  7.6582114827517946f, 7.6653359171851764f,
-  7.6724253419714951f, 7.6794800995054464f,
-  7.6865005271832185f, 7.6934869574993252f,
-  7.7004397181410917f, 7.7073591320808825f,
-  7.7142455176661224f, 7.7210991887071855f,
-  7.7279204545631987f, 7.7347096202258383f,
-  7.7414669864011464f, 7.7481928495894605f,
-  7.7548875021634682f, 7.7615512324444795f,
-  7.7681843247769259f, 7.7747870596011736f,
-  7.7813597135246599f, 7.7879025593914317f,
-  7.7944158663501061f, 7.8008998999203047f,
-  7.8073549220576037f, 7.8137811912170374f,
-  7.8201789624151878f, 7.8265484872909150f,
-  7.8328900141647412f, 7.8392037880969436f,
-  7.8454900509443747f, 7.8517490414160571f,
-  7.8579809951275718f, 7.8641861446542797f,
-  7.8703647195834047f, 7.8765169465649993f,
-  7.8826430493618415f, 7.8887432488982591f,
-  7.8948177633079437f, 7.9008668079807486f,
-  7.9068905956085187f, 7.9128893362299619f,
-  7.9188632372745946f, 7.9248125036057812f,
-  7.9307373375628866f, 7.9366379390025709f,
-  7.9425145053392398f, 7.9483672315846778f,
-  7.9541963103868749f, 7.9600019320680805f,
-  7.9657842846620869f, 7.9715435539507719f,
-  7.9772799234999167f, 7.9829935746943103f,
-  7.9886846867721654f, 7.9943534368588577f
-};
-
-const float kSLog2Table[LOG_LOOKUP_IDX_MAX] = {
-  0.00000000f,    0.00000000f,  2.00000000f,   4.75488750f,
-  8.00000000f,   11.60964047f,  15.50977500f,  19.65148445f,
-  24.00000000f,  28.52932501f,  33.21928095f,  38.05374781f,
-  43.01955001f,  48.10571634f,  53.30296891f,  58.60335893f,
-  64.00000000f,  69.48686830f,  75.05865003f,  80.71062276f,
-  86.43856190f,  92.23866588f,  98.10749561f,  104.04192499f,
-  110.03910002f, 116.09640474f, 122.21143267f, 128.38196256f,
-  134.60593782f, 140.88144886f, 147.20671787f, 153.58008562f,
-  160.00000000f, 166.46500594f, 172.97373660f, 179.52490559f,
-  186.11730005f, 192.74977453f, 199.42124551f, 206.13068654f,
-  212.87712380f, 219.65963219f, 226.47733176f, 233.32938445f,
-  240.21499122f, 247.13338933f, 254.08384998f, 261.06567603f,
-  268.07820003f, 275.12078236f, 282.19280949f, 289.29369244f,
-  296.42286534f, 303.57978409f, 310.76392512f, 317.97478424f,
-  325.21187564f, 332.47473081f, 339.76289772f, 347.07593991f,
-  354.41343574f, 361.77497759f, 369.16017124f, 376.56863518f,
-  384.00000000f, 391.45390785f, 398.93001188f, 406.42797576f,
-  413.94747321f, 421.48818752f, 429.04981119f, 436.63204548f,
-  444.23460010f, 451.85719280f, 459.49954906f, 467.16140179f,
-  474.84249102f, 482.54256363f, 490.26137307f, 497.99867911f,
-  505.75424759f, 513.52785023f, 521.31926438f, 529.12827280f,
-  536.95466351f, 544.79822957f, 552.65876890f, 560.53608414f,
-  568.42998244f, 576.34027536f, 584.26677867f, 592.20931226f,
-  600.16769996f, 608.14176943f, 616.13135206f, 624.13628279f,
-  632.15640007f, 640.19154569f, 648.24156472f, 656.30630539f,
-  664.38561898f, 672.47935976f, 680.58738488f, 688.70955430f,
-  696.84573069f, 704.99577935f, 713.15956818f, 721.33696754f,
-  729.52785023f, 737.73209140f, 745.94956849f, 754.18016116f,
-  762.42375127f, 770.68022275f, 778.94946161f, 787.23135586f,
-  795.52579543f, 803.83267219f, 812.15187982f, 820.48331383f,
-  828.82687147f, 837.18245171f, 845.54995518f, 853.92928416f,
-  862.32034249f, 870.72303558f, 879.13727036f, 887.56295522f,
-  896.00000000f, 904.44831595f, 912.90781569f, 921.37841320f,
-  929.86002376f, 938.35256392f, 946.85595152f, 955.37010560f,
-  963.89494641f, 972.43039537f, 980.97637504f, 989.53280911f,
-  998.09962237f, 1006.67674069f, 1015.26409097f, 1023.86160116f,
-  1032.46920021f, 1041.08681805f, 1049.71438560f, 1058.35183469f,
-  1066.99909811f, 1075.65610955f, 1084.32280357f, 1092.99911564f,
-  1101.68498204f, 1110.38033993f, 1119.08512727f, 1127.79928282f,
-  1136.52274614f, 1145.25545758f, 1153.99735821f, 1162.74838989f,
-  1171.50849518f, 1180.27761738f, 1189.05570047f, 1197.84268914f,
-  1206.63852876f, 1215.44316535f, 1224.25654560f, 1233.07861684f,
-  1241.90932703f, 1250.74862473f, 1259.59645914f, 1268.45278005f,
-  1277.31753781f, 1286.19068338f, 1295.07216828f, 1303.96194457f,
-  1312.85996488f, 1321.76618236f, 1330.68055071f, 1339.60302413f,
-  1348.53355734f, 1357.47210556f, 1366.41862452f, 1375.37307041f,
-  1384.33539991f, 1393.30557020f, 1402.28353887f, 1411.26926400f,
-  1420.26270412f, 1429.26381818f, 1438.27256558f, 1447.28890615f,
-  1456.31280014f, 1465.34420819f, 1474.38309138f, 1483.42941118f,
-  1492.48312945f, 1501.54420843f, 1510.61261078f, 1519.68829949f,
-  1528.77123795f, 1537.86138993f, 1546.95871952f, 1556.06319119f,
-  1565.17476976f, 1574.29342040f, 1583.41910860f, 1592.55180020f,
-  1601.69146137f, 1610.83805860f, 1619.99155871f, 1629.15192882f,
-  1638.31913637f, 1647.49314911f, 1656.67393509f, 1665.86146266f,
-  1675.05570047f, 1684.25661744f, 1693.46418280f, 1702.67836605f,
-  1711.89913698f, 1721.12646563f, 1730.36032233f, 1739.60067768f,
-  1748.84750254f, 1758.10076802f, 1767.36044551f, 1776.62650662f,
-  1785.89892323f, 1795.17766747f, 1804.46271172f, 1813.75402857f,
-  1823.05159087f, 1832.35537170f, 1841.66534438f, 1850.98148244f,
-  1860.30375965f, 1869.63214999f, 1878.96662767f, 1888.30716711f,
-  1897.65374295f, 1907.00633003f, 1916.36490342f, 1925.72943838f,
-  1935.09991037f, 1944.47629506f, 1953.85856831f, 1963.24670620f,
-  1972.64068498f, 1982.04048108f, 1991.44607117f, 2000.85743204f,
-  2010.27454072f, 2019.69737440f, 2029.12591044f, 2038.56012640f
-};
-
-const VP8LPrefixCode kPrefixEncodeCode[PREFIX_LOOKUP_IDX_MAX] = {
-  { 0, 0}, { 0, 0}, { 1, 0}, { 2, 0}, { 3, 0}, { 4, 1}, { 4, 1}, { 5, 1},
-  { 5, 1}, { 6, 2}, { 6, 2}, { 6, 2}, { 6, 2}, { 7, 2}, { 7, 2}, { 7, 2},
-  { 7, 2}, { 8, 3}, { 8, 3}, { 8, 3}, { 8, 3}, { 8, 3}, { 8, 3}, { 8, 3},
-  { 8, 3}, { 9, 3}, { 9, 3}, { 9, 3}, { 9, 3}, { 9, 3}, { 9, 3}, { 9, 3},
-  { 9, 3}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4},
-  {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4},
-  {10, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4},
-  {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4},
-  {11, 4}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5},
-  {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5},
-  {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5},
-  {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5}, {12, 5},
-  {12, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5},
-  {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5},
-  {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5},
-  {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5}, {13, 5},
-  {13, 5}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6},
-  {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6},
-  {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6},
-  {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6},
-  {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6},
-  {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6},
-  {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6},
-  {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6}, {14, 6},
-  {14, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6},
-  {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6},
-  {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6},
-  {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6},
-  {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6},
-  {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6},
-  {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6},
-  {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6}, {15, 6},
-  {15, 6}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7}, {16, 7},
-  {16, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-  {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
-};
-
-const uint8_t kPrefixEncodeExtraBitsValue[PREFIX_LOOKUP_IDX_MAX] = {
-   0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  1,  2,  3,  0,  1,  2,  3,
-   0,  1,  2,  3,  4,  5,  6,  7,  0,  1,  2,  3,  4,  5,  6,  7,
-   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-  64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
-  80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-  96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
-  112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
-  127,
-   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-  64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
-  80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-  96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
-  112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126
-};
-
-static float FastSLog2Slow_C(uint32_t v) {
-  assert(v >= LOG_LOOKUP_IDX_MAX);
-  if (v < APPROX_LOG_WITH_CORRECTION_MAX) {
-    int log_cnt = 0;
-    uint32_t y = 1;
-    int correction = 0;
-    const float v_f = (float)v;
-    const uint32_t orig_v = v;
-    do {
-      ++log_cnt;
-      v = v >> 1;
-      y = y << 1;
-    } while (v >= LOG_LOOKUP_IDX_MAX);
-    // vf = (2^log_cnt) * Xf; where y = 2^log_cnt and Xf < 256
-    // Xf = floor(Xf) * (1 + (v % y) / v)
-    // log2(Xf) = log2(floor(Xf)) + log2(1 + (v % y) / v)
-    // The correction factor: log(1 + d) ~ d; for very small d values, so
-    // log2(1 + (v % y) / v) ~ LOG_2_RECIPROCAL * (v % y)/v
-    // LOG_2_RECIPROCAL ~ 23/16
-    correction = (23 * (orig_v & (y - 1))) >> 4;
-    return v_f * (kLog2Table[v] + log_cnt) + correction;
-  } else {
-    return (float)(LOG_2_RECIPROCAL * v * log((double)v));
-  }
-}
-
-static float FastLog2Slow_C(uint32_t v) {
-  assert(v >= LOG_LOOKUP_IDX_MAX);
-  if (v < APPROX_LOG_WITH_CORRECTION_MAX) {
-    int log_cnt = 0;
-    uint32_t y = 1;
-    const uint32_t orig_v = v;
-    double log_2;
-    do {
-      ++log_cnt;
-      v = v >> 1;
-      y = y << 1;
-    } while (v >= LOG_LOOKUP_IDX_MAX);
-    log_2 = kLog2Table[v] + log_cnt;
-    if (orig_v >= APPROX_LOG_MAX) {
-      // Since the division is still expensive, add this correction factor only
-      // for large values of 'v'.
-      const int correction = (23 * (orig_v & (y - 1))) >> 4;
-      log_2 += (double)correction / orig_v;
-    }
-    return (float)log_2;
-  } else {
-    return (float)(LOG_2_RECIPROCAL * log((double)v));
-  }
-}
-
-//------------------------------------------------------------------------------
-// Methods to calculate Entropy (Shannon).
-
-// Compute the combined Shanon's entropy for distribution {X} and {X+Y}
-static float CombinedShannonEntropy_C(const int X[256], const int Y[256]) {
-  int i;
-  double retval = 0.;
-  int sumX = 0, sumXY = 0;
-  for (i = 0; i < 256; ++i) {
-    const int x = X[i];
-    if (x != 0) {
-      const int xy = x + Y[i];
-      sumX += x;
-      retval -= VP8LFastSLog2(x);
-      sumXY += xy;
-      retval -= VP8LFastSLog2(xy);
-    } else if (Y[i] != 0) {
-      sumXY += Y[i];
-      retval -= VP8LFastSLog2(Y[i]);
-    }
-  }
-  retval += VP8LFastSLog2(sumX) + VP8LFastSLog2(sumXY);
-  return (float)retval;
-}
-
-void VP8LBitEntropyInit(VP8LBitEntropy* const entropy) {
-  entropy->entropy = 0.;
-  entropy->sum = 0;
-  entropy->nonzeros = 0;
-  entropy->max_val = 0;
-  entropy->nonzero_code = VP8L_NON_TRIVIAL_SYM;
-}
-
-void VP8LBitsEntropyUnrefined(const uint32_t* const array, int n,
-                              VP8LBitEntropy* const entropy) {
-  int i;
-
-  VP8LBitEntropyInit(entropy);
-
-  for (i = 0; i < n; ++i) {
-    if (array[i] != 0) {
-      entropy->sum += array[i];
-      entropy->nonzero_code = i;
-      ++entropy->nonzeros;
-      entropy->entropy -= VP8LFastSLog2(array[i]);
-      if (entropy->max_val < array[i]) {
-        entropy->max_val = array[i];
-      }
-    }
-  }
-  entropy->entropy += VP8LFastSLog2(entropy->sum);
-}
-
-static WEBP_INLINE void GetEntropyUnrefinedHelper(
-    uint32_t val, int i, uint32_t* const val_prev, int* const i_prev,
-    VP8LBitEntropy* const bit_entropy, VP8LStreaks* const stats) {
-  const int streak = i - *i_prev;
-
-  // Gather info for the bit entropy.
-  if (*val_prev != 0) {
-    bit_entropy->sum += (*val_prev) * streak;
-    bit_entropy->nonzeros += streak;
-    bit_entropy->nonzero_code = *i_prev;
-    bit_entropy->entropy -= VP8LFastSLog2(*val_prev) * streak;
-    if (bit_entropy->max_val < *val_prev) {
-      bit_entropy->max_val = *val_prev;
-    }
-  }
-
-  // Gather info for the Huffman cost.
-  stats->counts[*val_prev != 0] += (streak > 3);
-  stats->streaks[*val_prev != 0][(streak > 3)] += streak;
-
-  *val_prev = val;
-  *i_prev = i;
-}
-
-static void GetEntropyUnrefined_C(const uint32_t X[], int length,
-                                  VP8LBitEntropy* const bit_entropy,
-                                  VP8LStreaks* const stats) {
-  int i;
-  int i_prev = 0;
-  uint32_t x_prev = X[0];
-
-  memset(stats, 0, sizeof(*stats));
-  VP8LBitEntropyInit(bit_entropy);
-
-  for (i = 1; i < length; ++i) {
-    const uint32_t x = X[i];
-    if (x != x_prev) {
-      GetEntropyUnrefinedHelper(x, i, &x_prev, &i_prev, bit_entropy, stats);
-    }
-  }
-  GetEntropyUnrefinedHelper(0, i, &x_prev, &i_prev, bit_entropy, stats);
-
-  bit_entropy->entropy += VP8LFastSLog2(bit_entropy->sum);
-}
-
-static void GetCombinedEntropyUnrefined_C(const uint32_t X[],
-                                          const uint32_t Y[],
-                                          int length,
-                                          VP8LBitEntropy* const bit_entropy,
-                                          VP8LStreaks* const stats) {
-  int i = 1;
-  int i_prev = 0;
-  uint32_t xy_prev = X[0] + Y[0];
-
-  memset(stats, 0, sizeof(*stats));
-  VP8LBitEntropyInit(bit_entropy);
-
-  for (i = 1; i < length; ++i) {
-    const uint32_t xy = X[i] + Y[i];
-    if (xy != xy_prev) {
-      GetEntropyUnrefinedHelper(xy, i, &xy_prev, &i_prev, bit_entropy, stats);
-    }
-  }
-  GetEntropyUnrefinedHelper(0, i, &xy_prev, &i_prev, bit_entropy, stats);
-
-  bit_entropy->entropy += VP8LFastSLog2(bit_entropy->sum);
-}
-
-//------------------------------------------------------------------------------
-
-void VP8LSubtractGreenFromBlueAndRed_C(uint32_t* argb_data, int num_pixels) {
-  int i;
-  for (i = 0; i < num_pixels; ++i) {
-    const int argb = argb_data[i];
-    const int green = (argb >> 8) & 0xff;
-    const uint32_t new_r = (((argb >> 16) & 0xff) - green) & 0xff;
-    const uint32_t new_b = (((argb >>  0) & 0xff) - green) & 0xff;
-    argb_data[i] = (argb & 0xff00ff00u) | (new_r << 16) | new_b;
-  }
-}
-
-static WEBP_INLINE int ColorTransformDelta(int8_t color_pred, int8_t color) {
-  return ((int)color_pred * color) >> 5;
-}
-
-void VP8LTransformColor_C(const VP8LMultipliers* const m, uint32_t* data,
-                          int num_pixels) {
-  int i;
-  for (i = 0; i < num_pixels; ++i) {
-    const uint32_t argb = data[i];
-    const uint32_t green = argb >> 8;
-    const uint32_t red = argb >> 16;
-    int new_red = red & 0xff;
-    int new_blue = argb & 0xff;
-    new_red -= ColorTransformDelta(m->green_to_red_, green);
-    new_red &= 0xff;
-    new_blue -= ColorTransformDelta(m->green_to_blue_, green);
-    new_blue -= ColorTransformDelta(m->red_to_blue_, red);
-    new_blue &= 0xff;
-    data[i] = (argb & 0xff00ff00u) | (new_red << 16) | (new_blue);
-  }
-}
-
-static WEBP_INLINE uint8_t TransformColorRed(uint8_t green_to_red,
-                                             uint32_t argb) {
-  const uint32_t green = argb >> 8;
-  int new_red = argb >> 16;
-  new_red -= ColorTransformDelta(green_to_red, green);
-  return (new_red & 0xff);
-}
-
-static WEBP_INLINE uint8_t TransformColorBlue(uint8_t green_to_blue,
-                                              uint8_t red_to_blue,
-                                              uint32_t argb) {
-  const uint32_t green = argb >> 8;
-  const uint32_t red = argb >> 16;
-  uint8_t new_blue = argb;
-  new_blue -= ColorTransformDelta(green_to_blue, green);
-  new_blue -= ColorTransformDelta(red_to_blue, red);
-  return (new_blue & 0xff);
-}
-
-void VP8LCollectColorRedTransforms_C(const uint32_t* argb, int stride,
-                                     int tile_width, int tile_height,
-                                     int green_to_red, int histo[]) {
-  while (tile_height-- > 0) {
-    int x;
-    for (x = 0; x < tile_width; ++x) {
-      ++histo[TransformColorRed(green_to_red, argb[x])];
-    }
-    argb += stride;
-  }
-}
-
-void VP8LCollectColorBlueTransforms_C(const uint32_t* argb, int stride,
-                                      int tile_width, int tile_height,
-                                      int green_to_blue, int red_to_blue,
-                                      int histo[]) {
-  while (tile_height-- > 0) {
-    int x;
-    for (x = 0; x < tile_width; ++x) {
-      ++histo[TransformColorBlue(green_to_blue, red_to_blue, argb[x])];
-    }
-    argb += stride;
-  }
-}
-
-//------------------------------------------------------------------------------
-
-static int VectorMismatch_C(const uint32_t* const array1,
-                            const uint32_t* const array2, int length) {
-  int match_len = 0;
-
-  while (match_len < length && array1[match_len] == array2[match_len]) {
-    ++match_len;
-  }
-  return match_len;
-}
-
-// Bundles multiple (1, 2, 4 or 8) pixels into a single pixel.
-void VP8LBundleColorMap_C(const uint8_t* const row, int width, int xbits,
-                          uint32_t* dst) {
-  int x;
-  if (xbits > 0) {
-    const int bit_depth = 1 << (3 - xbits);
-    const int mask = (1 << xbits) - 1;
-    uint32_t code = 0xff000000;
-    for (x = 0; x < width; ++x) {
-      const int xsub = x & mask;
-      if (xsub == 0) {
-        code = 0xff000000;
-      }
-      code |= row[x] << (8 + bit_depth * xsub);
-      dst[x >> xbits] = code;
-    }
-  } else {
-    for (x = 0; x < width; ++x) dst[x] = 0xff000000 | (row[x] << 8);
-  }
-}
-
-//------------------------------------------------------------------------------
-
-static double ExtraCost_C(const uint32_t* population, int length) {
-  int i;
-  double cost = 0.;
-  for (i = 2; i < length - 2; ++i) cost += (i >> 1) * population[i + 2];
-  return cost;
-}
-
-static double ExtraCostCombined_C(const uint32_t* X, const uint32_t* Y,
-                                  int length) {
-  int i;
-  double cost = 0.;
-  for (i = 2; i < length - 2; ++i) {
-    const int xy = X[i + 2] + Y[i + 2];
-    cost += (i >> 1) * xy;
-  }
-  return cost;
-}
-
-//------------------------------------------------------------------------------
-
-static void AddVector_C(const uint32_t* a, const uint32_t* b, uint32_t* out,
-                        int size) {
-  int i;
-  for (i = 0; i < size; ++i) out[i] = a[i] + b[i];
-}
-
-static void AddVectorEq_C(const uint32_t* a, uint32_t* out, int size) {
-  int i;
-  for (i = 0; i < size; ++i) out[i] += a[i];
-}
-
-#define ADD(X, ARG, LEN) do {                                                  \
-  if (a->is_used_[X]) {                                                        \
-    if (b->is_used_[X]) {                                                      \
-      VP8LAddVector(a->ARG, b->ARG, out->ARG, (LEN));                          \
-    } else {                                                                   \
-      memcpy(&out->ARG[0], &a->ARG[0], (LEN) * sizeof(out->ARG[0]));           \
-    }                                                                          \
-  } else if (b->is_used_[X]) {                                                 \
-    memcpy(&out->ARG[0], &b->ARG[0], (LEN) * sizeof(out->ARG[0]));             \
-  } else {                                                                     \
-    memset(&out->ARG[0], 0, (LEN) * sizeof(out->ARG[0]));                      \
-  }                                                                            \
-} while (0)
-
-#define ADD_EQ(X, ARG, LEN) do {                                               \
-  if (a->is_used_[X]) {                                                        \
-    if (out->is_used_[X]) {                                                    \
-      VP8LAddVectorEq(a->ARG, out->ARG, (LEN));                                \
-    } else {                                                                   \
-      memcpy(&out->ARG[0], &a->ARG[0], (LEN) * sizeof(out->ARG[0]));           \
-    }                                                                          \
-  }                                                                            \
-} while (0)
-
-void VP8LHistogramAdd(const VP8LHistogram* const a,
-                      const VP8LHistogram* const b, VP8LHistogram* const out) {
-  int i;
-  const int literal_size = VP8LHistogramNumCodes(a->palette_code_bits_);
-  assert(a->palette_code_bits_ == b->palette_code_bits_);
-
-  if (b != out) {
-    ADD(0, literal_, literal_size);
-    ADD(1, red_, NUM_LITERAL_CODES);
-    ADD(2, blue_, NUM_LITERAL_CODES);
-    ADD(3, alpha_, NUM_LITERAL_CODES);
-    ADD(4, distance_, NUM_DISTANCE_CODES);
-    for (i = 0; i < 5; ++i) {
-      out->is_used_[i] = (a->is_used_[i] | b->is_used_[i]);
-    }
-  } else {
-    ADD_EQ(0, literal_, literal_size);
-    ADD_EQ(1, red_, NUM_LITERAL_CODES);
-    ADD_EQ(2, blue_, NUM_LITERAL_CODES);
-    ADD_EQ(3, alpha_, NUM_LITERAL_CODES);
-    ADD_EQ(4, distance_, NUM_DISTANCE_CODES);
-    for (i = 0; i < 5; ++i) out->is_used_[i] |= a->is_used_[i];
-  }
-}
-#undef ADD
-#undef ADD_EQ
-
-//------------------------------------------------------------------------------
-// Image transforms.
-
-static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) {
-  return (((a0 ^ a1) & 0xfefefefeu) >> 1) + (a0 & a1);
-}
-
-static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) {
-  return Average2(Average2(a0, a2), a1);
-}
-
-static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1,
-                                     uint32_t a2, uint32_t a3) {
-  return Average2(Average2(a0, a1), Average2(a2, a3));
-}
-
-static WEBP_INLINE uint32_t Clip255(uint32_t a) {
-  if (a < 256) {
-    return a;
-  }
-  // return 0, when a is a negative integer.
-  // return 255, when a is positive.
-  return ~a >> 24;
-}
-
-static WEBP_INLINE int AddSubtractComponentFull(int a, int b, int c) {
-  return Clip255(a + b - c);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1,
-                                                   uint32_t c2) {
-  const int a = AddSubtractComponentFull(c0 >> 24, c1 >> 24, c2 >> 24);
-  const int r = AddSubtractComponentFull((c0 >> 16) & 0xff,
-                                         (c1 >> 16) & 0xff,
-                                         (c2 >> 16) & 0xff);
-  const int g = AddSubtractComponentFull((c0 >> 8) & 0xff,
-                                         (c1 >> 8) & 0xff,
-                                         (c2 >> 8) & 0xff);
-  const int b = AddSubtractComponentFull(c0 & 0xff, c1 & 0xff, c2 & 0xff);
-  return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b;
-}
-
-static WEBP_INLINE int AddSubtractComponentHalf(int a, int b) {
-  return Clip255(a + (a - b) / 2);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1,
-                                                   uint32_t c2) {
-  const uint32_t ave = Average2(c0, c1);
-  const int a = AddSubtractComponentHalf(ave >> 24, c2 >> 24);
-  const int r = AddSubtractComponentHalf((ave >> 16) & 0xff, (c2 >> 16) & 0xff);
-  const int g = AddSubtractComponentHalf((ave >> 8) & 0xff, (c2 >> 8) & 0xff);
-  const int b = AddSubtractComponentHalf((ave >> 0) & 0xff, (c2 >> 0) & 0xff);
-  return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b;
-}
-
-// gcc-4.9 on ARM generates incorrect code in Select() when Sub3() is inlined.
-#if defined(__arm__) && \
-    (LOCAL_GCC_VERSION == 0x409 || LOCAL_GCC_VERSION == 0x408)
-# define LOCAL_INLINE __attribute__ ((noinline))
-#else
-# define LOCAL_INLINE WEBP_INLINE
-#endif
-
-static LOCAL_INLINE int Sub3(int a, int b, int c) {
-  const int pb = b - c;
-  const int pa = a - c;
-  return abs(pb) - abs(pa);
-}
-
-#undef LOCAL_INLINE
-
-static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) {
-  const int pa_minus_pb =
-      Sub3((a >> 24)       , (b >> 24)       , (c >> 24)       ) +
-      Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) +
-      Sub3((a >>  8) & 0xff, (b >>  8) & 0xff, (c >>  8) & 0xff) +
-      Sub3((a      ) & 0xff, (b      ) & 0xff, (c      ) & 0xff);
-  return (pa_minus_pb <= 0) ? a : b;
-}
-
-//------------------------------------------------------------------------------
-// Predictors
-
-static uint32_t Predictor2(uint32_t left, const uint32_t* const top) {
-  (void)left;
-  return top[0];
-}
-static uint32_t Predictor3(uint32_t left, const uint32_t* const top) {
-  (void)left;
-  return top[1];
-}
-static uint32_t Predictor4(uint32_t left, const uint32_t* const top) {
-  (void)left;
-  return top[-1];
-}
-static uint32_t Predictor5(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average3(left, top[0], top[1]);
-  return pred;
-}
-static uint32_t Predictor6(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2(left, top[-1]);
-  return pred;
-}
-static uint32_t Predictor7(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2(left, top[0]);
-  return pred;
-}
-static uint32_t Predictor8(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2(top[-1], top[0]);
-  (void)left;
-  return pred;
-}
-static uint32_t Predictor9(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2(top[0], top[1]);
-  (void)left;
-  return pred;
-}
-static uint32_t Predictor10(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average4(left, top[-1], top[0], top[1]);
-  return pred;
-}
-static uint32_t Predictor11(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Select(top[0], left, top[-1]);
-  return pred;
-}
-static uint32_t Predictor12(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]);
-  return pred;
-}
-static uint32_t Predictor13(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]);
-  return pred;
-}
-
-//------------------------------------------------------------------------------
-
-static void PredictorSub0_C(const uint32_t* in, const uint32_t* upper,
-                            int num_pixels, uint32_t* out) {
-  int i;
-  for (i = 0; i < num_pixels; ++i) out[i] = VP8LSubPixels(in[i], ARGB_BLACK);
-  (void)upper;
-}
-
-static void PredictorSub1_C(const uint32_t* in, const uint32_t* upper,
-                            int num_pixels, uint32_t* out) {
-  int i;
-  for (i = 0; i < num_pixels; ++i) out[i] = VP8LSubPixels(in[i], in[i - 1]);
-  (void)upper;
-}
-
-GENERATE_PREDICTOR_SUB(Predictor2, PredictorSub2_C)
-GENERATE_PREDICTOR_SUB(Predictor3, PredictorSub3_C)
-GENERATE_PREDICTOR_SUB(Predictor4, PredictorSub4_C)
-GENERATE_PREDICTOR_SUB(Predictor5, PredictorSub5_C)
-GENERATE_PREDICTOR_SUB(Predictor6, PredictorSub6_C)
-GENERATE_PREDICTOR_SUB(Predictor7, PredictorSub7_C)
-GENERATE_PREDICTOR_SUB(Predictor8, PredictorSub8_C)
-GENERATE_PREDICTOR_SUB(Predictor9, PredictorSub9_C)
-GENERATE_PREDICTOR_SUB(Predictor10, PredictorSub10_C)
-GENERATE_PREDICTOR_SUB(Predictor11, PredictorSub11_C)
-GENERATE_PREDICTOR_SUB(Predictor12, PredictorSub12_C)
-GENERATE_PREDICTOR_SUB(Predictor13, PredictorSub13_C)
-
-//------------------------------------------------------------------------------
-
-VP8LProcessEncBlueAndRedFunc VP8LSubtractGreenFromBlueAndRed;
-
-VP8LTransformColorFunc VP8LTransformColor;
-
-VP8LCollectColorBlueTransformsFunc VP8LCollectColorBlueTransforms;
-VP8LCollectColorRedTransformsFunc VP8LCollectColorRedTransforms;
-
-VP8LFastLog2SlowFunc VP8LFastLog2Slow;
-VP8LFastLog2SlowFunc VP8LFastSLog2Slow;
-
-VP8LCostFunc VP8LExtraCost;
-VP8LCostCombinedFunc VP8LExtraCostCombined;
-VP8LCombinedShannonEntropyFunc VP8LCombinedShannonEntropy;
-
-VP8LGetEntropyUnrefinedFunc VP8LGetEntropyUnrefined;
-VP8LGetCombinedEntropyUnrefinedFunc VP8LGetCombinedEntropyUnrefined;
-
-VP8LAddVectorFunc VP8LAddVector;
-VP8LAddVectorEqFunc VP8LAddVectorEq;
-
-VP8LVectorMismatchFunc VP8LVectorMismatch;
-VP8LBundleColorMapFunc VP8LBundleColorMap;
-
-VP8LPredictorAddSubFunc VP8LPredictorsSub[16];
-VP8LPredictorAddSubFunc VP8LPredictorsSub_C[16];
-
-extern void VP8LEncDspInitSSE2(void);
-extern void VP8LEncDspInitSSE41(void);
-extern void VP8LEncDspInitNEON(void);
-extern void VP8LEncDspInitMIPS32(void);
-extern void VP8LEncDspInitMIPSdspR2(void);
-extern void VP8LEncDspInitMSA(void);
-
-WEBP_DSP_INIT_FUNC(VP8LEncDspInit) {
-  VP8LDspInit();
-
-#if !WEBP_NEON_OMIT_C_CODE
-  VP8LSubtractGreenFromBlueAndRed = VP8LSubtractGreenFromBlueAndRed_C;
-
-  VP8LTransformColor = VP8LTransformColor_C;
-#endif
-
-  VP8LCollectColorBlueTransforms = VP8LCollectColorBlueTransforms_C;
-  VP8LCollectColorRedTransforms = VP8LCollectColorRedTransforms_C;
-
-  VP8LFastLog2Slow = FastLog2Slow_C;
-  VP8LFastSLog2Slow = FastSLog2Slow_C;
-
-  VP8LExtraCost = ExtraCost_C;
-  VP8LExtraCostCombined = ExtraCostCombined_C;
-  VP8LCombinedShannonEntropy = CombinedShannonEntropy_C;
-
-  VP8LGetEntropyUnrefined = GetEntropyUnrefined_C;
-  VP8LGetCombinedEntropyUnrefined = GetCombinedEntropyUnrefined_C;
-
-  VP8LAddVector = AddVector_C;
-  VP8LAddVectorEq = AddVectorEq_C;
-
-  VP8LVectorMismatch = VectorMismatch_C;
-  VP8LBundleColorMap = VP8LBundleColorMap_C;
-
-  VP8LPredictorsSub[0] = PredictorSub0_C;
-  VP8LPredictorsSub[1] = PredictorSub1_C;
-  VP8LPredictorsSub[2] = PredictorSub2_C;
-  VP8LPredictorsSub[3] = PredictorSub3_C;
-  VP8LPredictorsSub[4] = PredictorSub4_C;
-  VP8LPredictorsSub[5] = PredictorSub5_C;
-  VP8LPredictorsSub[6] = PredictorSub6_C;
-  VP8LPredictorsSub[7] = PredictorSub7_C;
-  VP8LPredictorsSub[8] = PredictorSub8_C;
-  VP8LPredictorsSub[9] = PredictorSub9_C;
-  VP8LPredictorsSub[10] = PredictorSub10_C;
-  VP8LPredictorsSub[11] = PredictorSub11_C;
-  VP8LPredictorsSub[12] = PredictorSub12_C;
-  VP8LPredictorsSub[13] = PredictorSub13_C;
-  VP8LPredictorsSub[14] = PredictorSub0_C;  // <- padding security sentinels
-  VP8LPredictorsSub[15] = PredictorSub0_C;
-
-  VP8LPredictorsSub_C[0] = PredictorSub0_C;
-  VP8LPredictorsSub_C[1] = PredictorSub1_C;
-  VP8LPredictorsSub_C[2] = PredictorSub2_C;
-  VP8LPredictorsSub_C[3] = PredictorSub3_C;
-  VP8LPredictorsSub_C[4] = PredictorSub4_C;
-  VP8LPredictorsSub_C[5] = PredictorSub5_C;
-  VP8LPredictorsSub_C[6] = PredictorSub6_C;
-  VP8LPredictorsSub_C[7] = PredictorSub7_C;
-  VP8LPredictorsSub_C[8] = PredictorSub8_C;
-  VP8LPredictorsSub_C[9] = PredictorSub9_C;
-  VP8LPredictorsSub_C[10] = PredictorSub10_C;
-  VP8LPredictorsSub_C[11] = PredictorSub11_C;
-  VP8LPredictorsSub_C[12] = PredictorSub12_C;
-  VP8LPredictorsSub_C[13] = PredictorSub13_C;
-  VP8LPredictorsSub_C[14] = PredictorSub0_C;  // <- padding security sentinels
-  VP8LPredictorsSub_C[15] = PredictorSub0_C;
-
-  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      VP8LEncDspInitSSE2();
-#if defined(WEBP_USE_SSE41)
-      if (VP8GetCPUInfo(kSSE4_1)) {
-        VP8LEncDspInitSSE41();
-      }
-#endif
-    }
-#endif
-#if defined(WEBP_USE_MIPS32)
-    if (VP8GetCPUInfo(kMIPS32)) {
-      VP8LEncDspInitMIPS32();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      VP8LEncDspInitMIPSdspR2();
-    }
-#endif
-#if defined(WEBP_USE_MSA)
-    if (VP8GetCPUInfo(kMSA)) {
-      VP8LEncDspInitMSA();
-    }
-#endif
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    VP8LEncDspInitNEON();
-  }
-#endif
-
-  assert(VP8LSubtractGreenFromBlueAndRed != NULL);
-  assert(VP8LTransformColor != NULL);
-  assert(VP8LCollectColorBlueTransforms != NULL);
-  assert(VP8LCollectColorRedTransforms != NULL);
-  assert(VP8LFastLog2Slow != NULL);
-  assert(VP8LFastSLog2Slow != NULL);
-  assert(VP8LExtraCost != NULL);
-  assert(VP8LExtraCostCombined != NULL);
-  assert(VP8LCombinedShannonEntropy != NULL);
-  assert(VP8LGetEntropyUnrefined != NULL);
-  assert(VP8LGetCombinedEntropyUnrefined != NULL);
-  assert(VP8LAddVector != NULL);
-  assert(VP8LAddVectorEq != NULL);
-  assert(VP8LVectorMismatch != NULL);
-  assert(VP8LBundleColorMap != NULL);
-  assert(VP8LPredictorsSub[0] != NULL);
-  assert(VP8LPredictorsSub[1] != NULL);
-  assert(VP8LPredictorsSub[2] != NULL);
-  assert(VP8LPredictorsSub[3] != NULL);
-  assert(VP8LPredictorsSub[4] != NULL);
-  assert(VP8LPredictorsSub[5] != NULL);
-  assert(VP8LPredictorsSub[6] != NULL);
-  assert(VP8LPredictorsSub[7] != NULL);
-  assert(VP8LPredictorsSub[8] != NULL);
-  assert(VP8LPredictorsSub[9] != NULL);
-  assert(VP8LPredictorsSub[10] != NULL);
-  assert(VP8LPredictorsSub[11] != NULL);
-  assert(VP8LPredictorsSub[12] != NULL);
-  assert(VP8LPredictorsSub[13] != NULL);
-  assert(VP8LPredictorsSub[14] != NULL);
-  assert(VP8LPredictorsSub[15] != NULL);
-  assert(VP8LPredictorsSub_C[0] != NULL);
-  assert(VP8LPredictorsSub_C[1] != NULL);
-  assert(VP8LPredictorsSub_C[2] != NULL);
-  assert(VP8LPredictorsSub_C[3] != NULL);
-  assert(VP8LPredictorsSub_C[4] != NULL);
-  assert(VP8LPredictorsSub_C[5] != NULL);
-  assert(VP8LPredictorsSub_C[6] != NULL);
-  assert(VP8LPredictorsSub_C[7] != NULL);
-  assert(VP8LPredictorsSub_C[8] != NULL);
-  assert(VP8LPredictorsSub_C[9] != NULL);
-  assert(VP8LPredictorsSub_C[10] != NULL);
-  assert(VP8LPredictorsSub_C[11] != NULL);
-  assert(VP8LPredictorsSub_C[12] != NULL);
-  assert(VP8LPredictorsSub_C[13] != NULL);
-  assert(VP8LPredictorsSub_C[14] != NULL);
-  assert(VP8LPredictorsSub_C[15] != NULL);
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dsp/lossless_enc_mips32.c b/ios/Pods/libwebp/src/dsp/lossless_enc_mips32.c
deleted file mode 100644
index 0412a09..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_enc_mips32.c
+++ /dev/null
@@ -1,397 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS version of lossless functions
-//
-// Author(s):  Djordje Pesut    (djordje.pesut@imgtec.com)
-//             Jovan Zelincevic (jovan.zelincevic@imgtec.com)
-
-#include "src/dsp/dsp.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-
-#if defined(WEBP_USE_MIPS32)
-
-#include <assert.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-static float FastSLog2Slow_MIPS32(uint32_t v) {
-  assert(v >= LOG_LOOKUP_IDX_MAX);
-  if (v < APPROX_LOG_WITH_CORRECTION_MAX) {
-    uint32_t log_cnt, y, correction;
-    const int c24 = 24;
-    const float v_f = (float)v;
-    uint32_t temp;
-
-    // Xf = 256 = 2^8
-    // log_cnt is index of leading one in upper 24 bits
-    __asm__ volatile(
-      "clz      %[log_cnt], %[v]                      \n\t"
-      "addiu    %[y],       $zero,        1           \n\t"
-      "subu     %[log_cnt], %[c24],       %[log_cnt]  \n\t"
-      "sllv     %[y],       %[y],         %[log_cnt]  \n\t"
-      "srlv     %[temp],    %[v],         %[log_cnt]  \n\t"
-      : [log_cnt]"=&r"(log_cnt), [y]"=&r"(y),
-        [temp]"=r"(temp)
-      : [c24]"r"(c24), [v]"r"(v)
-    );
-
-    // vf = (2^log_cnt) * Xf; where y = 2^log_cnt and Xf < 256
-    // Xf = floor(Xf) * (1 + (v % y) / v)
-    // log2(Xf) = log2(floor(Xf)) + log2(1 + (v % y) / v)
-    // The correction factor: log(1 + d) ~ d; for very small d values, so
-    // log2(1 + (v % y) / v) ~ LOG_2_RECIPROCAL * (v % y)/v
-    // LOG_2_RECIPROCAL ~ 23/16
-
-    // (v % y) = (v % 2^log_cnt) = v & (2^log_cnt - 1)
-    correction = (23 * (v & (y - 1))) >> 4;
-    return v_f * (kLog2Table[temp] + log_cnt) + correction;
-  } else {
-    return (float)(LOG_2_RECIPROCAL * v * log((double)v));
-  }
-}
-
-static float FastLog2Slow_MIPS32(uint32_t v) {
-  assert(v >= LOG_LOOKUP_IDX_MAX);
-  if (v < APPROX_LOG_WITH_CORRECTION_MAX) {
-    uint32_t log_cnt, y;
-    const int c24 = 24;
-    double log_2;
-    uint32_t temp;
-
-    __asm__ volatile(
-      "clz      %[log_cnt], %[v]                      \n\t"
-      "addiu    %[y],       $zero,        1           \n\t"
-      "subu     %[log_cnt], %[c24],       %[log_cnt]  \n\t"
-      "sllv     %[y],       %[y],         %[log_cnt]  \n\t"
-      "srlv     %[temp],    %[v],         %[log_cnt]  \n\t"
-      : [log_cnt]"=&r"(log_cnt), [y]"=&r"(y),
-        [temp]"=r"(temp)
-      : [c24]"r"(c24), [v]"r"(v)
-    );
-
-    log_2 = kLog2Table[temp] + log_cnt;
-    if (v >= APPROX_LOG_MAX) {
-      // Since the division is still expensive, add this correction factor only
-      // for large values of 'v'.
-
-      const uint32_t correction = (23 * (v & (y - 1))) >> 4;
-      log_2 += (double)correction / v;
-    }
-    return (float)log_2;
-  } else {
-    return (float)(LOG_2_RECIPROCAL * log((double)v));
-  }
-}
-
-// C version of this function:
-//   int i = 0;
-//   int64_t cost = 0;
-//   const uint32_t* pop = &population[4];
-//   const uint32_t* LoopEnd = &population[length];
-//   while (pop != LoopEnd) {
-//     ++i;
-//     cost += i * *pop;
-//     cost += i * *(pop + 1);
-//     pop += 2;
-//   }
-//   return (double)cost;
-static double ExtraCost_MIPS32(const uint32_t* const population, int length) {
-  int i, temp0, temp1;
-  const uint32_t* pop = &population[4];
-  const uint32_t* const LoopEnd = &population[length];
-
-  __asm__ volatile(
-    "mult   $zero,    $zero                  \n\t"
-    "xor    %[i],     %[i],       %[i]       \n\t"
-    "beq    %[pop],   %[LoopEnd], 2f         \n\t"
-  "1:                                        \n\t"
-    "lw     %[temp0], 0(%[pop])              \n\t"
-    "lw     %[temp1], 4(%[pop])              \n\t"
-    "addiu  %[i],     %[i],       1          \n\t"
-    "addiu  %[pop],   %[pop],     8          \n\t"
-    "madd   %[i],     %[temp0]               \n\t"
-    "madd   %[i],     %[temp1]               \n\t"
-    "bne    %[pop],   %[LoopEnd], 1b         \n\t"
-  "2:                                        \n\t"
-    "mfhi   %[temp0]                         \n\t"
-    "mflo   %[temp1]                         \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),
-      [i]"=&r"(i), [pop]"+r"(pop)
-    : [LoopEnd]"r"(LoopEnd)
-    : "memory", "hi", "lo"
-  );
-
-  return (double)((int64_t)temp0 << 32 | temp1);
-}
-
-// C version of this function:
-//   int i = 0;
-//   int64_t cost = 0;
-//   const uint32_t* pX = &X[4];
-//   const uint32_t* pY = &Y[4];
-//   const uint32_t* LoopEnd = &X[length];
-//   while (pX != LoopEnd) {
-//     const uint32_t xy0 = *pX + *pY;
-//     const uint32_t xy1 = *(pX + 1) + *(pY + 1);
-//     ++i;
-//     cost += i * xy0;
-//     cost += i * xy1;
-//     pX += 2;
-//     pY += 2;
-//   }
-//   return (double)cost;
-static double ExtraCostCombined_MIPS32(const uint32_t* const X,
-                                       const uint32_t* const Y, int length) {
-  int i, temp0, temp1, temp2, temp3;
-  const uint32_t* pX = &X[4];
-  const uint32_t* pY = &Y[4];
-  const uint32_t* const LoopEnd = &X[length];
-
-  __asm__ volatile(
-    "mult   $zero,    $zero                  \n\t"
-    "xor    %[i],     %[i],       %[i]       \n\t"
-    "beq    %[pX],    %[LoopEnd], 2f         \n\t"
-  "1:                                        \n\t"
-    "lw     %[temp0], 0(%[pX])               \n\t"
-    "lw     %[temp1], 0(%[pY])               \n\t"
-    "lw     %[temp2], 4(%[pX])               \n\t"
-    "lw     %[temp3], 4(%[pY])               \n\t"
-    "addiu  %[i],     %[i],       1          \n\t"
-    "addu   %[temp0], %[temp0],   %[temp1]   \n\t"
-    "addu   %[temp2], %[temp2],   %[temp3]   \n\t"
-    "addiu  %[pX],    %[pX],      8          \n\t"
-    "addiu  %[pY],    %[pY],      8          \n\t"
-    "madd   %[i],     %[temp0]               \n\t"
-    "madd   %[i],     %[temp2]               \n\t"
-    "bne    %[pX],    %[LoopEnd], 1b         \n\t"
-  "2:                                        \n\t"
-    "mfhi   %[temp0]                         \n\t"
-    "mflo   %[temp1]                         \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),
-      [i]"=&r"(i), [pX]"+r"(pX), [pY]"+r"(pY)
-    : [LoopEnd]"r"(LoopEnd)
-    : "memory", "hi", "lo"
-  );
-
-  return (double)((int64_t)temp0 << 32 | temp1);
-}
-
-#define HUFFMAN_COST_PASS                                 \
-  __asm__ volatile(                                       \
-    "sll   %[temp1],  %[temp0],    3           \n\t"      \
-    "addiu %[temp3],  %[streak],   -3          \n\t"      \
-    "addu  %[temp2],  %[pstreaks], %[temp1]    \n\t"      \
-    "blez  %[temp3],  1f                       \n\t"      \
-    "srl   %[temp1],  %[temp1],    1           \n\t"      \
-    "addu  %[temp3],  %[pcnts],    %[temp1]    \n\t"      \
-    "lw    %[temp0],  4(%[temp2])              \n\t"      \
-    "lw    %[temp1],  0(%[temp3])              \n\t"      \
-    "addu  %[temp0],  %[temp0],    %[streak]   \n\t"      \
-    "addiu %[temp1],  %[temp1],    1           \n\t"      \
-    "sw    %[temp0],  4(%[temp2])              \n\t"      \
-    "sw    %[temp1],  0(%[temp3])              \n\t"      \
-    "b     2f                                  \n\t"      \
-  "1:                                          \n\t"      \
-    "lw    %[temp0],  0(%[temp2])              \n\t"      \
-    "addu  %[temp0],  %[temp0],    %[streak]   \n\t"      \
-    "sw    %[temp0],  0(%[temp2])              \n\t"      \
-  "2:                                          \n\t"      \
-    : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),           \
-      [temp3]"=&r"(temp3), [temp0]"+r"(temp0)             \
-    : [pstreaks]"r"(pstreaks), [pcnts]"r"(pcnts),         \
-      [streak]"r"(streak)                                 \
-    : "memory"                                            \
-  );
-
-// Returns the various RLE counts
-static WEBP_INLINE void GetEntropyUnrefinedHelper(
-    uint32_t val, int i, uint32_t* const val_prev, int* const i_prev,
-    VP8LBitEntropy* const bit_entropy, VP8LStreaks* const stats) {
-  int* const pstreaks = &stats->streaks[0][0];
-  int* const pcnts = &stats->counts[0];
-  int temp0, temp1, temp2, temp3;
-  const int streak = i - *i_prev;
-
-  // Gather info for the bit entropy.
-  if (*val_prev != 0) {
-    bit_entropy->sum += (*val_prev) * streak;
-    bit_entropy->nonzeros += streak;
-    bit_entropy->nonzero_code = *i_prev;
-    bit_entropy->entropy -= VP8LFastSLog2(*val_prev) * streak;
-    if (bit_entropy->max_val < *val_prev) {
-      bit_entropy->max_val = *val_prev;
-    }
-  }
-
-  // Gather info for the Huffman cost.
-  temp0 = (*val_prev != 0);
-  HUFFMAN_COST_PASS
-
-  *val_prev = val;
-  *i_prev = i;
-}
-
-static void GetEntropyUnrefined_MIPS32(const uint32_t X[], int length,
-                                       VP8LBitEntropy* const bit_entropy,
-                                       VP8LStreaks* const stats) {
-  int i;
-  int i_prev = 0;
-  uint32_t x_prev = X[0];
-
-  memset(stats, 0, sizeof(*stats));
-  VP8LBitEntropyInit(bit_entropy);
-
-  for (i = 1; i < length; ++i) {
-    const uint32_t x = X[i];
-    if (x != x_prev) {
-      GetEntropyUnrefinedHelper(x, i, &x_prev, &i_prev, bit_entropy, stats);
-    }
-  }
-  GetEntropyUnrefinedHelper(0, i, &x_prev, &i_prev, bit_entropy, stats);
-
-  bit_entropy->entropy += VP8LFastSLog2(bit_entropy->sum);
-}
-
-static void GetCombinedEntropyUnrefined_MIPS32(const uint32_t X[],
-                                               const uint32_t Y[],
-                                               int length,
-                                               VP8LBitEntropy* const entropy,
-                                               VP8LStreaks* const stats) {
-  int i = 1;
-  int i_prev = 0;
-  uint32_t xy_prev = X[0] + Y[0];
-
-  memset(stats, 0, sizeof(*stats));
-  VP8LBitEntropyInit(entropy);
-
-  for (i = 1; i < length; ++i) {
-    const uint32_t xy = X[i] + Y[i];
-    if (xy != xy_prev) {
-      GetEntropyUnrefinedHelper(xy, i, &xy_prev, &i_prev, entropy, stats);
-    }
-  }
-  GetEntropyUnrefinedHelper(0, i, &xy_prev, &i_prev, entropy, stats);
-
-  entropy->entropy += VP8LFastSLog2(entropy->sum);
-}
-
-#define ASM_START                                       \
-  __asm__ volatile(                                     \
-    ".set   push                            \n\t"       \
-    ".set   at                              \n\t"       \
-    ".set   macro                           \n\t"       \
-  "1:                                       \n\t"
-
-// P2 = P0 + P1
-// A..D - offsets
-// E - temp variable to tell macro
-//     if pointer should be incremented
-// literal_ and successive histograms could be unaligned
-// so we must use ulw and usw
-#define ADD_TO_OUT(A, B, C, D, E, P0, P1, P2)           \
-    "ulw    %[temp0], " #A "(%[" #P0 "])    \n\t"       \
-    "ulw    %[temp1], " #B "(%[" #P0 "])    \n\t"       \
-    "ulw    %[temp2], " #C "(%[" #P0 "])    \n\t"       \
-    "ulw    %[temp3], " #D "(%[" #P0 "])    \n\t"       \
-    "ulw    %[temp4], " #A "(%[" #P1 "])    \n\t"       \
-    "ulw    %[temp5], " #B "(%[" #P1 "])    \n\t"       \
-    "ulw    %[temp6], " #C "(%[" #P1 "])    \n\t"       \
-    "ulw    %[temp7], " #D "(%[" #P1 "])    \n\t"       \
-    "addu   %[temp4], %[temp4],   %[temp0]  \n\t"       \
-    "addu   %[temp5], %[temp5],   %[temp1]  \n\t"       \
-    "addu   %[temp6], %[temp6],   %[temp2]  \n\t"       \
-    "addu   %[temp7], %[temp7],   %[temp3]  \n\t"       \
-    "addiu  %[" #P0 "],  %[" #P0 "],  16    \n\t"       \
-  ".if " #E " == 1                          \n\t"       \
-    "addiu  %[" #P1 "],  %[" #P1 "],  16    \n\t"       \
-  ".endif                                   \n\t"       \
-    "usw    %[temp4], " #A "(%[" #P2 "])    \n\t"       \
-    "usw    %[temp5], " #B "(%[" #P2 "])    \n\t"       \
-    "usw    %[temp6], " #C "(%[" #P2 "])    \n\t"       \
-    "usw    %[temp7], " #D "(%[" #P2 "])    \n\t"       \
-    "addiu  %[" #P2 "], %[" #P2 "],   16    \n\t"       \
-    "bne    %[" #P0 "], %[LoopEnd], 1b      \n\t"       \
-    ".set   pop                             \n\t"       \
-
-#define ASM_END_COMMON_0                                \
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),         \
-      [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),         \
-      [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),         \
-      [temp6]"=&r"(temp6), [temp7]"=&r"(temp7),         \
-      [pa]"+r"(pa), [pout]"+r"(pout)
-
-#define ASM_END_COMMON_1                                \
-    : [LoopEnd]"r"(LoopEnd)                             \
-    : "memory", "at"                                    \
-  );
-
-#define ASM_END_0                                       \
-    ASM_END_COMMON_0                                    \
-      , [pb]"+r"(pb)                                    \
-    ASM_END_COMMON_1
-
-#define ASM_END_1                                       \
-    ASM_END_COMMON_0                                    \
-    ASM_END_COMMON_1
-
-static void AddVector_MIPS32(const uint32_t* pa, const uint32_t* pb,
-                             uint32_t* pout, int size) {
-  uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-  const uint32_t end = ((size) / 4) * 4;
-  const uint32_t* const LoopEnd = pa + end;
-  int i;
-  ASM_START
-  ADD_TO_OUT(0, 4, 8, 12, 1, pa, pb, pout)
-  ASM_END_0
-  for (i = end; i < size; ++i) pout[i] = pa[i] + pb[i];
-}
-
-static void AddVectorEq_MIPS32(const uint32_t* pa, uint32_t* pout, int size) {
-  uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-  const uint32_t end = ((size) / 4) * 4;
-  const uint32_t* const LoopEnd = pa + end;
-  int i;
-  ASM_START
-  ADD_TO_OUT(0, 4, 8, 12, 0, pa, pout, pout)
-  ASM_END_1
-  for (i = end; i < size; ++i) pout[i] += pa[i];
-}
-
-#undef ASM_END_1
-#undef ASM_END_0
-#undef ASM_END_COMMON_1
-#undef ASM_END_COMMON_0
-#undef ADD_TO_OUT
-#undef ASM_START
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LEncDspInitMIPS32(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitMIPS32(void) {
-  VP8LFastSLog2Slow = FastSLog2Slow_MIPS32;
-  VP8LFastLog2Slow = FastLog2Slow_MIPS32;
-  VP8LExtraCost = ExtraCost_MIPS32;
-  VP8LExtraCostCombined = ExtraCostCombined_MIPS32;
-  VP8LGetEntropyUnrefined = GetEntropyUnrefined_MIPS32;
-  VP8LGetCombinedEntropyUnrefined = GetCombinedEntropyUnrefined_MIPS32;
-  VP8LAddVector = AddVector_MIPS32;
-  VP8LAddVectorEq = AddVectorEq_MIPS32;
-}
-
-#else  // !WEBP_USE_MIPS32
-
-WEBP_DSP_INIT_STUB(VP8LEncDspInitMIPS32)
-
-#endif  // WEBP_USE_MIPS32
diff --git a/ios/Pods/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c
deleted file mode 100644
index 5855e6a..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c
+++ /dev/null
@@ -1,281 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Image transform methods for lossless encoder.
-//
-// Author(s):  Djordje Pesut    (djordje.pesut@imgtec.com)
-//             Jovan Zelincevic (jovan.zelincevic@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-#include "src/dsp/lossless.h"
-
-static void SubtractGreenFromBlueAndRed_MIPSdspR2(uint32_t* argb_data,
-                                                  int num_pixels) {
-  uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-  uint32_t* const p_loop1_end = argb_data + (num_pixels & ~3);
-  uint32_t* const p_loop2_end = p_loop1_end + (num_pixels & 3);
-  __asm__ volatile (
-    ".set       push                                          \n\t"
-    ".set       noreorder                                     \n\t"
-    "beq        %[argb_data],    %[p_loop1_end],     3f       \n\t"
-    " nop                                                     \n\t"
-  "0:                                                         \n\t"
-    "lw         %[temp0],        0(%[argb_data])              \n\t"
-    "lw         %[temp1],        4(%[argb_data])              \n\t"
-    "lw         %[temp2],        8(%[argb_data])              \n\t"
-    "lw         %[temp3],        12(%[argb_data])             \n\t"
-    "ext        %[temp4],        %[temp0],           8,    8  \n\t"
-    "ext        %[temp5],        %[temp1],           8,    8  \n\t"
-    "ext        %[temp6],        %[temp2],           8,    8  \n\t"
-    "ext        %[temp7],        %[temp3],           8,    8  \n\t"
-    "addiu      %[argb_data],    %[argb_data],       16       \n\t"
-    "replv.ph   %[temp4],        %[temp4]                     \n\t"
-    "replv.ph   %[temp5],        %[temp5]                     \n\t"
-    "replv.ph   %[temp6],        %[temp6]                     \n\t"
-    "replv.ph   %[temp7],        %[temp7]                     \n\t"
-    "subu.qb    %[temp0],        %[temp0],           %[temp4] \n\t"
-    "subu.qb    %[temp1],        %[temp1],           %[temp5] \n\t"
-    "subu.qb    %[temp2],        %[temp2],           %[temp6] \n\t"
-    "subu.qb    %[temp3],        %[temp3],           %[temp7] \n\t"
-    "sw         %[temp0],        -16(%[argb_data])            \n\t"
-    "sw         %[temp1],        -12(%[argb_data])            \n\t"
-    "sw         %[temp2],        -8(%[argb_data])             \n\t"
-    "bne        %[argb_data],    %[p_loop1_end],     0b       \n\t"
-    " sw        %[temp3],        -4(%[argb_data])             \n\t"
-  "3:                                                         \n\t"
-    "beq        %[argb_data],    %[p_loop2_end],     2f       \n\t"
-    " nop                                                     \n\t"
-  "1:                                                         \n\t"
-    "lw         %[temp0],        0(%[argb_data])              \n\t"
-    "addiu      %[argb_data],    %[argb_data],       4        \n\t"
-    "ext        %[temp4],        %[temp0],           8,    8  \n\t"
-    "replv.ph   %[temp4],        %[temp4]                     \n\t"
-    "subu.qb    %[temp0],        %[temp0],           %[temp4] \n\t"
-    "bne        %[argb_data],    %[p_loop2_end],     1b       \n\t"
-    " sw        %[temp0],        -4(%[argb_data])             \n\t"
-  "2:                                                         \n\t"
-    ".set       pop                                           \n\t"
-    : [argb_data]"+&r"(argb_data), [temp0]"=&r"(temp0),
-      [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),
-      [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp6]"=&r"(temp6),
-      [temp7]"=&r"(temp7)
-    : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end)
-    : "memory"
-  );
-}
-
-static WEBP_INLINE uint32_t ColorTransformDelta(int8_t color_pred,
-                                                int8_t color) {
-  return (uint32_t)((int)(color_pred) * color) >> 5;
-}
-
-static void TransformColor_MIPSdspR2(const VP8LMultipliers* const m,
-                                     uint32_t* data, int num_pixels) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  uint32_t argb, argb1, new_red, new_red1;
-  const uint32_t G_to_R = m->green_to_red_;
-  const uint32_t G_to_B = m->green_to_blue_;
-  const uint32_t R_to_B = m->red_to_blue_;
-  uint32_t* const p_loop_end = data + (num_pixels & ~1);
-  __asm__ volatile (
-    ".set            push                                    \n\t"
-    ".set            noreorder                               \n\t"
-    "beq             %[data],      %[p_loop_end],  1f        \n\t"
-    " nop                                                    \n\t"
-    "replv.ph        %[temp0],     %[G_to_R]                 \n\t"
-    "replv.ph        %[temp1],     %[G_to_B]                 \n\t"
-    "replv.ph        %[temp2],     %[R_to_B]                 \n\t"
-    "shll.ph         %[temp0],     %[temp0],       8         \n\t"
-    "shll.ph         %[temp1],     %[temp1],       8         \n\t"
-    "shll.ph         %[temp2],     %[temp2],       8         \n\t"
-    "shra.ph         %[temp0],     %[temp0],       8         \n\t"
-    "shra.ph         %[temp1],     %[temp1],       8         \n\t"
-    "shra.ph         %[temp2],     %[temp2],       8         \n\t"
-  "0:                                                        \n\t"
-    "lw              %[argb],      0(%[data])                \n\t"
-    "lw              %[argb1],     4(%[data])                \n\t"
-    "lhu             %[new_red],   2(%[data])                \n\t"
-    "lhu             %[new_red1],  6(%[data])                \n\t"
-    "precrq.qb.ph    %[temp3],     %[argb],        %[argb1]  \n\t"
-    "precr.qb.ph     %[temp4],     %[argb],        %[argb1]  \n\t"
-    "preceu.ph.qbra  %[temp3],     %[temp3]                  \n\t"
-    "preceu.ph.qbla  %[temp4],     %[temp4]                  \n\t"
-    "shll.ph         %[temp3],     %[temp3],       8         \n\t"
-    "shll.ph         %[temp4],     %[temp4],       8         \n\t"
-    "shra.ph         %[temp3],     %[temp3],       8         \n\t"
-    "shra.ph         %[temp4],     %[temp4],       8         \n\t"
-    "mul.ph          %[temp5],     %[temp3],       %[temp0]  \n\t"
-    "mul.ph          %[temp3],     %[temp3],       %[temp1]  \n\t"
-    "mul.ph          %[temp4],     %[temp4],       %[temp2]  \n\t"
-    "addiu           %[data],      %[data],        8         \n\t"
-    "ins             %[new_red1],  %[new_red],     16,   16  \n\t"
-    "ins             %[argb1],     %[argb],        16,   16  \n\t"
-    "shra.ph         %[temp5],     %[temp5],       5         \n\t"
-    "shra.ph         %[temp3],     %[temp3],       5         \n\t"
-    "shra.ph         %[temp4],     %[temp4],       5         \n\t"
-    "subu.ph         %[new_red1],  %[new_red1],    %[temp5]  \n\t"
-    "subu.ph         %[argb1],     %[argb1],       %[temp3]  \n\t"
-    "preceu.ph.qbra  %[temp5],     %[new_red1]               \n\t"
-    "subu.ph         %[argb1],     %[argb1],       %[temp4]  \n\t"
-    "preceu.ph.qbra  %[temp3],     %[argb1]                  \n\t"
-    "sb              %[temp5],     -2(%[data])               \n\t"
-    "sb              %[temp3],     -4(%[data])               \n\t"
-    "sra             %[temp5],     %[temp5],       16        \n\t"
-    "sra             %[temp3],     %[temp3],       16        \n\t"
-    "sb              %[temp5],     -6(%[data])               \n\t"
-    "bne             %[data],      %[p_loop_end],  0b        \n\t"
-    " sb             %[temp3],     -8(%[data])               \n\t"
-  "1:                                                        \n\t"
-    ".set            pop                                     \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [new_red1]"=&r"(new_red1), [new_red]"=&r"(new_red),
-      [argb]"=&r"(argb), [argb1]"=&r"(argb1), [data]"+&r"(data)
-    : [G_to_R]"r"(G_to_R), [R_to_B]"r"(R_to_B),
-      [G_to_B]"r"(G_to_B), [p_loop_end]"r"(p_loop_end)
-    : "memory", "hi", "lo"
-  );
-
-  if (num_pixels & 1) {
-    const uint32_t argb_ = data[0];
-    const uint32_t green = argb_ >> 8;
-    const uint32_t red = argb_ >> 16;
-    uint32_t new_blue = argb_;
-    new_red = red;
-    new_red -= ColorTransformDelta(m->green_to_red_, green);
-    new_red &= 0xff;
-    new_blue -= ColorTransformDelta(m->green_to_blue_, green);
-    new_blue -= ColorTransformDelta(m->red_to_blue_, red);
-    new_blue &= 0xff;
-    data[0] = (argb_ & 0xff00ff00u) | (new_red << 16) | (new_blue);
-  }
-}
-
-static WEBP_INLINE uint8_t TransformColorBlue(uint8_t green_to_blue,
-                                              uint8_t red_to_blue,
-                                              uint32_t argb) {
-  const uint32_t green = argb >> 8;
-  const uint32_t red = argb >> 16;
-  uint8_t new_blue = argb;
-  new_blue -= ColorTransformDelta(green_to_blue, green);
-  new_blue -= ColorTransformDelta(red_to_blue, red);
-  return (new_blue & 0xff);
-}
-
-static void CollectColorBlueTransforms_MIPSdspR2(const uint32_t* argb,
-                                                 int stride,
-                                                 int tile_width,
-                                                 int tile_height,
-                                                 int green_to_blue,
-                                                 int red_to_blue,
-                                                 int histo[]) {
-  const int rtb = (red_to_blue << 16) | (red_to_blue & 0xffff);
-  const int gtb = (green_to_blue << 16) | (green_to_blue & 0xffff);
-  const uint32_t mask = 0xff00ffu;
-  while (tile_height-- > 0) {
-    int x;
-    const uint32_t* p_argb = argb;
-    argb += stride;
-    for (x = 0; x < (tile_width >> 1); ++x) {
-      int temp0, temp1, temp2, temp3, temp4, temp5, temp6;
-      __asm__ volatile (
-        "lw           %[temp0],  0(%[p_argb])             \n\t"
-        "lw           %[temp1],  4(%[p_argb])             \n\t"
-        "precr.qb.ph  %[temp2],  %[temp0],  %[temp1]      \n\t"
-        "ins          %[temp1],  %[temp0],  16,    16     \n\t"
-        "shra.ph      %[temp2],  %[temp2],  8             \n\t"
-        "shra.ph      %[temp3],  %[temp1],  8             \n\t"
-        "mul.ph       %[temp5],  %[temp2],  %[rtb]        \n\t"
-        "mul.ph       %[temp6],  %[temp3],  %[gtb]        \n\t"
-        "and          %[temp4],  %[temp1],  %[mask]       \n\t"
-        "addiu        %[p_argb], %[p_argb], 8             \n\t"
-        "shra.ph      %[temp5],  %[temp5],  5             \n\t"
-        "shra.ph      %[temp6],  %[temp6],  5             \n\t"
-        "subu.qb      %[temp2],  %[temp4],  %[temp5]      \n\t"
-        "subu.qb      %[temp2],  %[temp2],  %[temp6]      \n\t"
-        : [p_argb]"+&r"(p_argb), [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),
-          [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [temp4]"=&r"(temp4),
-          [temp5]"=&r"(temp5), [temp6]"=&r"(temp6)
-        : [rtb]"r"(rtb), [gtb]"r"(gtb), [mask]"r"(mask)
-        : "memory", "hi", "lo"
-      );
-      ++histo[(uint8_t)(temp2 >> 16)];
-      ++histo[(uint8_t)temp2];
-    }
-    if (tile_width & 1) {
-      ++histo[TransformColorBlue(green_to_blue, red_to_blue, *p_argb)];
-    }
-  }
-}
-
-static WEBP_INLINE uint8_t TransformColorRed(uint8_t green_to_red,
-                                             uint32_t argb) {
-  const uint32_t green = argb >> 8;
-  uint32_t new_red = argb >> 16;
-  new_red -= ColorTransformDelta(green_to_red, green);
-  return (new_red & 0xff);
-}
-
-static void CollectColorRedTransforms_MIPSdspR2(const uint32_t* argb,
-                                                int stride,
-                                                int tile_width,
-                                                int tile_height,
-                                                int green_to_red,
-                                                int histo[]) {
-  const int gtr = (green_to_red << 16) | (green_to_red & 0xffff);
-  while (tile_height-- > 0) {
-    int x;
-    const uint32_t* p_argb = argb;
-    argb += stride;
-    for (x = 0; x < (tile_width >> 1); ++x) {
-      int temp0, temp1, temp2, temp3, temp4;
-      __asm__ volatile (
-        "lw           %[temp0],  0(%[p_argb])             \n\t"
-        "lw           %[temp1],  4(%[p_argb])             \n\t"
-        "precrq.ph.w  %[temp4],  %[temp0],  %[temp1]      \n\t"
-        "ins          %[temp1],  %[temp0],  16,    16     \n\t"
-        "shra.ph      %[temp3],  %[temp1],  8             \n\t"
-        "mul.ph       %[temp2],  %[temp3],  %[gtr]        \n\t"
-        "addiu        %[p_argb], %[p_argb], 8             \n\t"
-        "shra.ph      %[temp2],  %[temp2],  5             \n\t"
-        "subu.qb      %[temp2],  %[temp4],  %[temp2]      \n\t"
-        : [p_argb]"+&r"(p_argb), [temp0]"=&r"(temp0), [temp1]"=&r"(temp1),
-          [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [temp4]"=&r"(temp4)
-        : [gtr]"r"(gtr)
-        : "memory", "hi", "lo"
-      );
-      ++histo[(uint8_t)(temp2 >> 16)];
-      ++histo[(uint8_t)temp2];
-    }
-    if (tile_width & 1) {
-      ++histo[TransformColorRed(green_to_red, *p_argb)];
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LEncDspInitMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitMIPSdspR2(void) {
-  VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_MIPSdspR2;
-  VP8LTransformColor = TransformColor_MIPSdspR2;
-  VP8LCollectColorBlueTransforms = CollectColorBlueTransforms_MIPSdspR2;
-  VP8LCollectColorRedTransforms = CollectColorRedTransforms_MIPSdspR2;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(VP8LEncDspInitMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/lossless_enc_msa.c b/ios/Pods/libwebp/src/dsp/lossless_enc_msa.c
deleted file mode 100644
index 600dddf..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_enc_msa.c
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MSA variant of Image transform methods for lossless encoder.
-//
-// Authors: Prashant Patil (Prashant.Patil@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MSA)
-
-#include "src/dsp/lossless.h"
-#include "src/dsp/msa_macro.h"
-
-#define TRANSFORM_COLOR_8(src0, src1, dst0, dst1, c0, c1, mask0, mask1) do {  \
-  v8i16 g0, g1, t0, t1, t2, t3;                                               \
-  v4i32 t4, t5;                                                               \
-  VSHF_B2_SH(src0, src0, src1, src1, mask0, mask0, g0, g1);                   \
-  DOTP_SB2_SH(g0, g1, c0, c0, t0, t1);                                        \
-  SRAI_H2_SH(t0, t1, 5);                                                      \
-  t0 = __msa_subv_h((v8i16)src0, t0);                                         \
-  t1 = __msa_subv_h((v8i16)src1, t1);                                         \
-  t4 = __msa_srli_w((v4i32)src0, 16);                                         \
-  t5 = __msa_srli_w((v4i32)src1, 16);                                         \
-  DOTP_SB2_SH(t4, t5, c1, c1, t2, t3);                                        \
-  SRAI_H2_SH(t2, t3, 5);                                                      \
-  SUB2(t0, t2, t1, t3, t0, t1);                                               \
-  VSHF_B2_UB(src0, t0, src1, t1, mask1, mask1, dst0, dst1);                   \
-} while (0)
-
-#define TRANSFORM_COLOR_4(src, dst, c0, c1, mask0, mask1) do {  \
-  const v16i8 g0 = VSHF_SB(src, src, mask0);                    \
-  v8i16 t0 = __msa_dotp_s_h(c0, g0);                            \
-  v8i16 t1;                                                     \
-  v4i32 t2;                                                     \
-  t0 = SRAI_H(t0, 5);                                           \
-  t0 = __msa_subv_h((v8i16)src, t0);                            \
-  t2 = __msa_srli_w((v4i32)src, 16);                            \
-  t1 = __msa_dotp_s_h(c1, (v16i8)t2);                           \
-  t1 = SRAI_H(t1, 5);                                           \
-  t0 = t0 - t1;                                                 \
-  dst = VSHF_UB(src, t0, mask1);                                \
-} while (0)
-
-static void TransformColor_MSA(const VP8LMultipliers* const m, uint32_t* data,
-                               int num_pixels) {
-  v16u8 src0, dst0;
-  const v16i8 g2br = (v16i8)__msa_fill_w(m->green_to_blue_ |
-                                         (m->green_to_red_ << 16));
-  const v16i8 r2b = (v16i8)__msa_fill_w(m->red_to_blue_);
-  const v16u8 mask0 = { 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255,
-                        13, 255, 13, 255 };
-  const v16u8 mask1 = { 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11,
-                        28, 13, 30, 15 };
-
-  while (num_pixels >= 8) {
-    v16u8 src1, dst1;
-    LD_UB2(data, 4, src0, src1);
-    TRANSFORM_COLOR_8(src0, src1, dst0, dst1, g2br, r2b, mask0, mask1);
-    ST_UB2(dst0, dst1, data, 4);
-    data += 8;
-    num_pixels -= 8;
-  }
-  if (num_pixels > 0) {
-    if (num_pixels >= 4) {
-      src0 = LD_UB(data);
-      TRANSFORM_COLOR_4(src0, dst0, g2br, r2b, mask0, mask1);
-      ST_UB(dst0, data);
-      data += 4;
-      num_pixels -= 4;
-    }
-    if (num_pixels > 0) {
-      src0 = LD_UB(data);
-      TRANSFORM_COLOR_4(src0, dst0, g2br, r2b, mask0, mask1);
-      if (num_pixels == 3) {
-        const uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0);
-        const uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 2);
-        SD(pix_d, data + 0);
-        SW(pix_w, data + 2);
-      } else if (num_pixels == 2) {
-        const uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0);
-        SD(pix_d, data);
-      } else {
-        const uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 0);
-        SW(pix_w, data);
-      }
-    }
-  }
-}
-
-static void SubtractGreenFromBlueAndRed_MSA(uint32_t* argb_data,
-                                            int num_pixels) {
-  int i;
-  uint8_t* ptemp_data = (uint8_t*)argb_data;
-  v16u8 src0, dst0, tmp0;
-  const v16u8 mask = { 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255,
-                       13, 255, 13, 255 };
-
-  while (num_pixels >= 8) {
-    v16u8 src1, dst1, tmp1;
-    LD_UB2(ptemp_data, 16, src0, src1);
-    VSHF_B2_UB(src0, src1, src1, src0, mask, mask, tmp0, tmp1);
-    SUB2(src0, tmp0, src1, tmp1, dst0, dst1);
-    ST_UB2(dst0, dst1, ptemp_data, 16);
-    ptemp_data += 8 * 4;
-    num_pixels -= 8;
-  }
-  if (num_pixels > 0) {
-    if (num_pixels >= 4) {
-      src0 = LD_UB(ptemp_data);
-      tmp0 = VSHF_UB(src0, src0, mask);
-      dst0 = src0 - tmp0;
-      ST_UB(dst0, ptemp_data);
-      ptemp_data += 4 * 4;
-      num_pixels -= 4;
-    }
-    for (i = 0; i < num_pixels; i++) {
-      const uint8_t b = ptemp_data[0];
-      const uint8_t g = ptemp_data[1];
-      const uint8_t r = ptemp_data[2];
-      ptemp_data[0] = (b - g) & 0xff;
-      ptemp_data[2] = (r - g) & 0xff;
-      ptemp_data += 4;
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LEncDspInitMSA(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitMSA(void) {
-  VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_MSA;
-  VP8LTransformColor = TransformColor_MSA;
-}
-
-#else  // !WEBP_USE_MSA
-
-WEBP_DSP_INIT_STUB(VP8LEncDspInitMSA)
-
-#endif  // WEBP_USE_MSA
diff --git a/ios/Pods/libwebp/src/dsp/lossless_enc_neon.c b/ios/Pods/libwebp/src/dsp/lossless_enc_neon.c
deleted file mode 100644
index 7c7b73f..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_enc_neon.c
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// NEON variant of methods for lossless encoder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include <arm_neon.h>
-
-#include "src/dsp/lossless.h"
-#include "src/dsp/neon.h"
-
-//------------------------------------------------------------------------------
-// Subtract-Green Transform
-
-// vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use
-// non-standard versions there.
-#if defined(__APPLE__) && defined(__aarch64__) && \
-    defined(__apple_build_version__) && (__apple_build_version__< 6020037)
-#define USE_VTBLQ
-#endif
-
-#ifdef USE_VTBLQ
-// 255 = byte will be zeroed
-static const uint8_t kGreenShuffle[16] = {
-  1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, 13, 255, 13, 255
-};
-
-static WEBP_INLINE uint8x16_t DoGreenShuffle_NEON(const uint8x16_t argb,
-                                                  const uint8x16_t shuffle) {
-  return vcombine_u8(vtbl1q_u8(argb, vget_low_u8(shuffle)),
-                     vtbl1q_u8(argb, vget_high_u8(shuffle)));
-}
-#else  // !USE_VTBLQ
-// 255 = byte will be zeroed
-static const uint8_t kGreenShuffle[8] = { 1, 255, 1, 255, 5, 255, 5, 255  };
-
-static WEBP_INLINE uint8x16_t DoGreenShuffle_NEON(const uint8x16_t argb,
-                                                  const uint8x8_t shuffle) {
-  return vcombine_u8(vtbl1_u8(vget_low_u8(argb), shuffle),
-                     vtbl1_u8(vget_high_u8(argb), shuffle));
-}
-#endif  // USE_VTBLQ
-
-static void SubtractGreenFromBlueAndRed_NEON(uint32_t* argb_data,
-                                             int num_pixels) {
-  const uint32_t* const end = argb_data + (num_pixels & ~3);
-#ifdef USE_VTBLQ
-  const uint8x16_t shuffle = vld1q_u8(kGreenShuffle);
-#else
-  const uint8x8_t shuffle = vld1_u8(kGreenShuffle);
-#endif
-  for (; argb_data < end; argb_data += 4) {
-    const uint8x16_t argb = vld1q_u8((uint8_t*)argb_data);
-    const uint8x16_t greens = DoGreenShuffle_NEON(argb, shuffle);
-    vst1q_u8((uint8_t*)argb_data, vsubq_u8(argb, greens));
-  }
-  // fallthrough and finish off with plain-C
-  VP8LSubtractGreenFromBlueAndRed_C(argb_data, num_pixels & 3);
-}
-
-//------------------------------------------------------------------------------
-// Color Transform
-
-static void TransformColor_NEON(const VP8LMultipliers* const m,
-                                uint32_t* argb_data, int num_pixels) {
-  // sign-extended multiplying constants, pre-shifted by 6.
-#define CST(X)  (((int16_t)(m->X << 8)) >> 6)
-  const int16_t rb[8] = {
-    CST(green_to_blue_), CST(green_to_red_),
-    CST(green_to_blue_), CST(green_to_red_),
-    CST(green_to_blue_), CST(green_to_red_),
-    CST(green_to_blue_), CST(green_to_red_)
-  };
-  const int16x8_t mults_rb = vld1q_s16(rb);
-  const int16_t b2[8] = {
-    0, CST(red_to_blue_), 0, CST(red_to_blue_),
-    0, CST(red_to_blue_), 0, CST(red_to_blue_),
-  };
-  const int16x8_t mults_b2 = vld1q_s16(b2);
-#undef CST
-#ifdef USE_VTBLQ
-  static const uint8_t kg0g0[16] = {
-    255, 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, 13, 255, 13
-  };
-  const uint8x16_t shuffle = vld1q_u8(kg0g0);
-#else
-  static const uint8_t k0g0g[8] = { 255, 1, 255, 1, 255, 5, 255, 5 };
-  const uint8x8_t shuffle = vld1_u8(k0g0g);
-#endif
-  const uint32x4_t mask_rb = vdupq_n_u32(0x00ff00ffu);  // red-blue masks
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t in = vld1q_u8((uint8_t*)(argb_data + i));
-    // 0 g 0 g
-    const uint8x16_t greens = DoGreenShuffle_NEON(in, shuffle);
-    // x dr  x db1
-    const int16x8_t A = vqdmulhq_s16(vreinterpretq_s16_u8(greens), mults_rb);
-    // r 0   b   0
-    const int16x8_t B = vshlq_n_s16(vreinterpretq_s16_u8(in), 8);
-    // x db2 0   0
-    const int16x8_t C = vqdmulhq_s16(B, mults_b2);
-    // 0 0   x db2
-    const uint32x4_t D = vshrq_n_u32(vreinterpretq_u32_s16(C), 16);
-    // x dr  x  db
-    const int8x16_t E = vaddq_s8(vreinterpretq_s8_u32(D),
-                                 vreinterpretq_s8_s16(A));
-    // 0 dr  0  db
-    const uint32x4_t F = vandq_u32(vreinterpretq_u32_s8(E), mask_rb);
-    const int8x16_t out = vsubq_s8(vreinterpretq_s8_u8(in),
-                                   vreinterpretq_s8_u32(F));
-    vst1q_s8((int8_t*)(argb_data + i), out);
-  }
-  // fallthrough and finish off with plain-C
-  VP8LTransformColor_C(m, argb_data + i, num_pixels - i);
-}
-
-#undef USE_VTBLQ
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LEncDspInitNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitNEON(void) {
-  VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_NEON;
-  VP8LTransformColor = TransformColor_NEON;
-}
-
-#else  // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(VP8LEncDspInitNEON)
-
-#endif  // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/lossless_enc_sse2.c b/ios/Pods/libwebp/src/dsp/lossless_enc_sse2.c
deleted file mode 100644
index 36478c4..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_enc_sse2.c
+++ /dev/null
@@ -1,685 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 variant of methods for lossless encoder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-#include <assert.h>
-#include <emmintrin.h>
-#include "src/dsp/lossless.h"
-#include "src/dsp/common_sse2.h"
-#include "src/dsp/lossless_common.h"
-
-// For sign-extended multiplying constants, pre-shifted by 5:
-#define CST_5b(X)  (((int16_t)((uint16_t)(X) << 8)) >> 5)
-
-//------------------------------------------------------------------------------
-// Subtract-Green Transform
-
-static void SubtractGreenFromBlueAndRed_SSE2(uint32_t* argb_data,
-                                             int num_pixels) {
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i in = _mm_loadu_si128((__m128i*)&argb_data[i]); // argb
-    const __m128i A = _mm_srli_epi16(in, 8);     // 0 a 0 g
-    const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0));
-    const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0));  // 0g0g
-    const __m128i out = _mm_sub_epi8(in, C);
-    _mm_storeu_si128((__m128i*)&argb_data[i], out);
-  }
-  // fallthrough and finish off with plain-C
-  if (i != num_pixels) {
-    VP8LSubtractGreenFromBlueAndRed_C(argb_data + i, num_pixels - i);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Color Transform
-
-#define MK_CST_16(HI, LO) \
-  _mm_set1_epi32((int)(((uint32_t)(HI) << 16) | ((LO) & 0xffff)))
-
-static void TransformColor_SSE2(const VP8LMultipliers* const m,
-                                uint32_t* argb_data, int num_pixels) {
-  const __m128i mults_rb = MK_CST_16(CST_5b(m->green_to_red_),
-                                     CST_5b(m->green_to_blue_));
-  const __m128i mults_b2 = MK_CST_16(CST_5b(m->red_to_blue_), 0);
-  const __m128i mask_ag = _mm_set1_epi32(0xff00ff00);  // alpha-green masks
-  const __m128i mask_rb = _mm_set1_epi32(0x00ff00ff);  // red-blue masks
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i in = _mm_loadu_si128((__m128i*)&argb_data[i]); // argb
-    const __m128i A = _mm_and_si128(in, mask_ag);     // a   0   g   0
-    const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0));
-    const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0));  // g0g0
-    const __m128i D = _mm_mulhi_epi16(C, mults_rb);    // x dr  x db1
-    const __m128i E = _mm_slli_epi16(in, 8);           // r 0   b   0
-    const __m128i F = _mm_mulhi_epi16(E, mults_b2);    // x db2 0   0
-    const __m128i G = _mm_srli_epi32(F, 16);           // 0 0   x db2
-    const __m128i H = _mm_add_epi8(G, D);              // x dr  x  db
-    const __m128i I = _mm_and_si128(H, mask_rb);       // 0 dr  0  db
-    const __m128i out = _mm_sub_epi8(in, I);
-    _mm_storeu_si128((__m128i*)&argb_data[i], out);
-  }
-  // fallthrough and finish off with plain-C
-  if (i != num_pixels) {
-    VP8LTransformColor_C(m, argb_data + i, num_pixels - i);
-  }
-}
-
-//------------------------------------------------------------------------------
-#define SPAN 8
-static void CollectColorBlueTransforms_SSE2(const uint32_t* argb, int stride,
-                                            int tile_width, int tile_height,
-                                            int green_to_blue, int red_to_blue,
-                                            int histo[]) {
-  const __m128i mults_r = MK_CST_16(CST_5b(red_to_blue), 0);
-  const __m128i mults_g = MK_CST_16(0, CST_5b(green_to_blue));
-  const __m128i mask_g = _mm_set1_epi32(0x00ff00);  // green mask
-  const __m128i mask_b = _mm_set1_epi32(0x0000ff);  // blue mask
-  int y;
-  for (y = 0; y < tile_height; ++y) {
-    const uint32_t* const src = argb + y * stride;
-    int i, x;
-    for (x = 0; x + SPAN <= tile_width; x += SPAN) {
-      uint16_t values[SPAN];
-      const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x +        0]);
-      const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]);
-      const __m128i A0 = _mm_slli_epi16(in0, 8);        // r 0  | b 0
-      const __m128i A1 = _mm_slli_epi16(in1, 8);
-      const __m128i B0 = _mm_and_si128(in0, mask_g);    // 0 0  | g 0
-      const __m128i B1 = _mm_and_si128(in1, mask_g);
-      const __m128i C0 = _mm_mulhi_epi16(A0, mults_r);  // x db | 0 0
-      const __m128i C1 = _mm_mulhi_epi16(A1, mults_r);
-      const __m128i D0 = _mm_mulhi_epi16(B0, mults_g);  // 0 0  | x db
-      const __m128i D1 = _mm_mulhi_epi16(B1, mults_g);
-      const __m128i E0 = _mm_sub_epi8(in0, D0);         // x x  | x b'
-      const __m128i E1 = _mm_sub_epi8(in1, D1);
-      const __m128i F0 = _mm_srli_epi32(C0, 16);        // 0 0  | x db
-      const __m128i F1 = _mm_srli_epi32(C1, 16);
-      const __m128i G0 = _mm_sub_epi8(E0, F0);          // 0 0  | x b'
-      const __m128i G1 = _mm_sub_epi8(E1, F1);
-      const __m128i H0 = _mm_and_si128(G0, mask_b);     // 0 0  | 0 b
-      const __m128i H1 = _mm_and_si128(G1, mask_b);
-      const __m128i I = _mm_packs_epi32(H0, H1);        // 0 b' | 0 b'
-      _mm_storeu_si128((__m128i*)values, I);
-      for (i = 0; i < SPAN; ++i) ++histo[values[i]];
-    }
-  }
-  {
-    const int left_over = tile_width & (SPAN - 1);
-    if (left_over > 0) {
-      VP8LCollectColorBlueTransforms_C(argb + tile_width - left_over, stride,
-                                       left_over, tile_height,
-                                       green_to_blue, red_to_blue, histo);
-    }
-  }
-}
-
-static void CollectColorRedTransforms_SSE2(const uint32_t* argb, int stride,
-                                           int tile_width, int tile_height,
-                                           int green_to_red, int histo[]) {
-  const __m128i mults_g = MK_CST_16(0, CST_5b(green_to_red));
-  const __m128i mask_g = _mm_set1_epi32(0x00ff00);  // green mask
-  const __m128i mask = _mm_set1_epi32(0xff);
-
-  int y;
-  for (y = 0; y < tile_height; ++y) {
-    const uint32_t* const src = argb + y * stride;
-    int i, x;
-    for (x = 0; x + SPAN <= tile_width; x += SPAN) {
-      uint16_t values[SPAN];
-      const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x +        0]);
-      const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]);
-      const __m128i A0 = _mm_and_si128(in0, mask_g);    // 0 0  | g 0
-      const __m128i A1 = _mm_and_si128(in1, mask_g);
-      const __m128i B0 = _mm_srli_epi32(in0, 16);       // 0 0  | x r
-      const __m128i B1 = _mm_srli_epi32(in1, 16);
-      const __m128i C0 = _mm_mulhi_epi16(A0, mults_g);  // 0 0  | x dr
-      const __m128i C1 = _mm_mulhi_epi16(A1, mults_g);
-      const __m128i E0 = _mm_sub_epi8(B0, C0);          // x x  | x r'
-      const __m128i E1 = _mm_sub_epi8(B1, C1);
-      const __m128i F0 = _mm_and_si128(E0, mask);       // 0 0  | 0 r'
-      const __m128i F1 = _mm_and_si128(E1, mask);
-      const __m128i I = _mm_packs_epi32(F0, F1);
-      _mm_storeu_si128((__m128i*)values, I);
-      for (i = 0; i < SPAN; ++i) ++histo[values[i]];
-    }
-  }
-  {
-    const int left_over = tile_width & (SPAN - 1);
-    if (left_over > 0) {
-      VP8LCollectColorRedTransforms_C(argb + tile_width - left_over, stride,
-                                      left_over, tile_height,
-                                      green_to_red, histo);
-    }
-  }
-}
-#undef SPAN
-#undef MK_CST_16
-
-//------------------------------------------------------------------------------
-
-// Note we are adding uint32_t's as *signed* int32's (using _mm_add_epi32). But
-// that's ok since the histogram values are less than 1<<28 (max picture size).
-#define LINE_SIZE 16    // 8 or 16
-static void AddVector_SSE2(const uint32_t* a, const uint32_t* b, uint32_t* out,
-                           int size) {
-  int i;
-  for (i = 0; i + LINE_SIZE <= size; i += LINE_SIZE) {
-    const __m128i a0 = _mm_loadu_si128((const __m128i*)&a[i +  0]);
-    const __m128i a1 = _mm_loadu_si128((const __m128i*)&a[i +  4]);
-#if (LINE_SIZE == 16)
-    const __m128i a2 = _mm_loadu_si128((const __m128i*)&a[i +  8]);
-    const __m128i a3 = _mm_loadu_si128((const __m128i*)&a[i + 12]);
-#endif
-    const __m128i b0 = _mm_loadu_si128((const __m128i*)&b[i +  0]);
-    const __m128i b1 = _mm_loadu_si128((const __m128i*)&b[i +  4]);
-#if (LINE_SIZE == 16)
-    const __m128i b2 = _mm_loadu_si128((const __m128i*)&b[i +  8]);
-    const __m128i b3 = _mm_loadu_si128((const __m128i*)&b[i + 12]);
-#endif
-    _mm_storeu_si128((__m128i*)&out[i +  0], _mm_add_epi32(a0, b0));
-    _mm_storeu_si128((__m128i*)&out[i +  4], _mm_add_epi32(a1, b1));
-#if (LINE_SIZE == 16)
-    _mm_storeu_si128((__m128i*)&out[i +  8], _mm_add_epi32(a2, b2));
-    _mm_storeu_si128((__m128i*)&out[i + 12], _mm_add_epi32(a3, b3));
-#endif
-  }
-  for (; i < size; ++i) {
-    out[i] = a[i] + b[i];
-  }
-}
-
-static void AddVectorEq_SSE2(const uint32_t* a, uint32_t* out, int size) {
-  int i;
-  for (i = 0; i + LINE_SIZE <= size; i += LINE_SIZE) {
-    const __m128i a0 = _mm_loadu_si128((const __m128i*)&a[i +  0]);
-    const __m128i a1 = _mm_loadu_si128((const __m128i*)&a[i +  4]);
-#if (LINE_SIZE == 16)
-    const __m128i a2 = _mm_loadu_si128((const __m128i*)&a[i +  8]);
-    const __m128i a3 = _mm_loadu_si128((const __m128i*)&a[i + 12]);
-#endif
-    const __m128i b0 = _mm_loadu_si128((const __m128i*)&out[i +  0]);
-    const __m128i b1 = _mm_loadu_si128((const __m128i*)&out[i +  4]);
-#if (LINE_SIZE == 16)
-    const __m128i b2 = _mm_loadu_si128((const __m128i*)&out[i +  8]);
-    const __m128i b3 = _mm_loadu_si128((const __m128i*)&out[i + 12]);
-#endif
-    _mm_storeu_si128((__m128i*)&out[i +  0], _mm_add_epi32(a0, b0));
-    _mm_storeu_si128((__m128i*)&out[i +  4], _mm_add_epi32(a1, b1));
-#if (LINE_SIZE == 16)
-    _mm_storeu_si128((__m128i*)&out[i +  8], _mm_add_epi32(a2, b2));
-    _mm_storeu_si128((__m128i*)&out[i + 12], _mm_add_epi32(a3, b3));
-#endif
-  }
-  for (; i < size; ++i) {
-    out[i] += a[i];
-  }
-}
-#undef LINE_SIZE
-
-//------------------------------------------------------------------------------
-// Entropy
-
-// Checks whether the X or Y contribution is worth computing and adding.
-// Used in loop unrolling.
-#define ANALYZE_X_OR_Y(x_or_y, j)                                           \
-  do {                                                                      \
-    if ((x_or_y)[i + (j)] != 0) retval -= VP8LFastSLog2((x_or_y)[i + (j)]); \
-  } while (0)
-
-// Checks whether the X + Y contribution is worth computing and adding.
-// Used in loop unrolling.
-#define ANALYZE_XY(j)                  \
-  do {                                 \
-    if (tmp[j] != 0) {                 \
-      retval -= VP8LFastSLog2(tmp[j]); \
-      ANALYZE_X_OR_Y(X, j);            \
-    }                                  \
-  } while (0)
-
-static float CombinedShannonEntropy_SSE2(const int X[256], const int Y[256]) {
-  int i;
-  double retval = 0.;
-  int sumX, sumXY;
-  int32_t tmp[4];
-  __m128i zero = _mm_setzero_si128();
-  // Sums up X + Y, 4 ints at a time (and will merge it at the end for sumXY).
-  __m128i sumXY_128 = zero;
-  __m128i sumX_128 = zero;
-
-  for (i = 0; i < 256; i += 4) {
-    const __m128i x = _mm_loadu_si128((const __m128i*)(X + i));
-    const __m128i y = _mm_loadu_si128((const __m128i*)(Y + i));
-
-    // Check if any X is non-zero: this actually provides a speedup as X is
-    // usually sparse.
-    if (_mm_movemask_epi8(_mm_cmpeq_epi32(x, zero)) != 0xFFFF) {
-      const __m128i xy_128 = _mm_add_epi32(x, y);
-      sumXY_128 = _mm_add_epi32(sumXY_128, xy_128);
-
-      sumX_128 = _mm_add_epi32(sumX_128, x);
-
-      // Analyze the different X + Y.
-      _mm_storeu_si128((__m128i*)tmp, xy_128);
-
-      ANALYZE_XY(0);
-      ANALYZE_XY(1);
-      ANALYZE_XY(2);
-      ANALYZE_XY(3);
-    } else {
-      // X is fully 0, so only deal with Y.
-      sumXY_128 = _mm_add_epi32(sumXY_128, y);
-
-      ANALYZE_X_OR_Y(Y, 0);
-      ANALYZE_X_OR_Y(Y, 1);
-      ANALYZE_X_OR_Y(Y, 2);
-      ANALYZE_X_OR_Y(Y, 3);
-    }
-  }
-
-  // Sum up sumX_128 to get sumX.
-  _mm_storeu_si128((__m128i*)tmp, sumX_128);
-  sumX = tmp[3] + tmp[2] + tmp[1] + tmp[0];
-
-  // Sum up sumXY_128 to get sumXY.
-  _mm_storeu_si128((__m128i*)tmp, sumXY_128);
-  sumXY = tmp[3] + tmp[2] + tmp[1] + tmp[0];
-
-  retval += VP8LFastSLog2(sumX) + VP8LFastSLog2(sumXY);
-  return (float)retval;
-}
-#undef ANALYZE_X_OR_Y
-#undef ANALYZE_XY
-
-//------------------------------------------------------------------------------
-
-static int VectorMismatch_SSE2(const uint32_t* const array1,
-                               const uint32_t* const array2, int length) {
-  int match_len;
-
-  if (length >= 12) {
-    __m128i A0 = _mm_loadu_si128((const __m128i*)&array1[0]);
-    __m128i A1 = _mm_loadu_si128((const __m128i*)&array2[0]);
-    match_len = 0;
-    do {
-      // Loop unrolling and early load both provide a speedup of 10% for the
-      // current function. Also, max_limit can be MAX_LENGTH=4096 at most.
-      const __m128i cmpA = _mm_cmpeq_epi32(A0, A1);
-      const __m128i B0 =
-          _mm_loadu_si128((const __m128i*)&array1[match_len + 4]);
-      const __m128i B1 =
-          _mm_loadu_si128((const __m128i*)&array2[match_len + 4]);
-      if (_mm_movemask_epi8(cmpA) != 0xffff) break;
-      match_len += 4;
-
-      {
-        const __m128i cmpB = _mm_cmpeq_epi32(B0, B1);
-        A0 = _mm_loadu_si128((const __m128i*)&array1[match_len + 4]);
-        A1 = _mm_loadu_si128((const __m128i*)&array2[match_len + 4]);
-        if (_mm_movemask_epi8(cmpB) != 0xffff) break;
-        match_len += 4;
-      }
-    } while (match_len + 12 < length);
-  } else {
-    match_len = 0;
-    // Unroll the potential first two loops.
-    if (length >= 4 &&
-        _mm_movemask_epi8(_mm_cmpeq_epi32(
-            _mm_loadu_si128((const __m128i*)&array1[0]),
-            _mm_loadu_si128((const __m128i*)&array2[0]))) == 0xffff) {
-      match_len = 4;
-      if (length >= 8 &&
-          _mm_movemask_epi8(_mm_cmpeq_epi32(
-              _mm_loadu_si128((const __m128i*)&array1[4]),
-              _mm_loadu_si128((const __m128i*)&array2[4]))) == 0xffff) {
-        match_len = 8;
-      }
-    }
-  }
-
-  while (match_len < length && array1[match_len] == array2[match_len]) {
-    ++match_len;
-  }
-  return match_len;
-}
-
-// Bundles multiple (1, 2, 4 or 8) pixels into a single pixel.
-static void BundleColorMap_SSE2(const uint8_t* const row, int width, int xbits,
-                                uint32_t* dst) {
-  int x;
-  assert(xbits >= 0);
-  assert(xbits <= 3);
-  switch (xbits) {
-    case 0: {
-      const __m128i ff = _mm_set1_epi16(0xff00);
-      const __m128i zero = _mm_setzero_si128();
-      // Store 0xff000000 | (row[x] << 8).
-      for (x = 0; x + 16 <= width; x += 16, dst += 16) {
-        const __m128i in = _mm_loadu_si128((const __m128i*)&row[x]);
-        const __m128i in_lo = _mm_unpacklo_epi8(zero, in);
-        const __m128i dst0 = _mm_unpacklo_epi16(in_lo, ff);
-        const __m128i dst1 = _mm_unpackhi_epi16(in_lo, ff);
-        const __m128i in_hi = _mm_unpackhi_epi8(zero, in);
-        const __m128i dst2 = _mm_unpacklo_epi16(in_hi, ff);
-        const __m128i dst3 = _mm_unpackhi_epi16(in_hi, ff);
-        _mm_storeu_si128((__m128i*)&dst[0], dst0);
-        _mm_storeu_si128((__m128i*)&dst[4], dst1);
-        _mm_storeu_si128((__m128i*)&dst[8], dst2);
-        _mm_storeu_si128((__m128i*)&dst[12], dst3);
-      }
-      break;
-    }
-    case 1: {
-      const __m128i ff = _mm_set1_epi16(0xff00);
-      const __m128i mul = _mm_set1_epi16(0x110);
-      for (x = 0; x + 16 <= width; x += 16, dst += 8) {
-        // 0a0b | (where a/b are 4 bits).
-        const __m128i in = _mm_loadu_si128((const __m128i*)&row[x]);
-        const __m128i tmp = _mm_mullo_epi16(in, mul);  // aba0
-        const __m128i pack = _mm_and_si128(tmp, ff);   // ab00
-        const __m128i dst0 = _mm_unpacklo_epi16(pack, ff);
-        const __m128i dst1 = _mm_unpackhi_epi16(pack, ff);
-        _mm_storeu_si128((__m128i*)&dst[0], dst0);
-        _mm_storeu_si128((__m128i*)&dst[4], dst1);
-      }
-      break;
-    }
-    case 2: {
-      const __m128i mask_or = _mm_set1_epi32(0xff000000);
-      const __m128i mul_cst = _mm_set1_epi16(0x0104);
-      const __m128i mask_mul = _mm_set1_epi16(0x0f00);
-      for (x = 0; x + 16 <= width; x += 16, dst += 4) {
-        // 000a000b000c000d | (where a/b/c/d are 2 bits).
-        const __m128i in = _mm_loadu_si128((const __m128i*)&row[x]);
-        const __m128i mul = _mm_mullo_epi16(in, mul_cst);  // 00ab00b000cd00d0
-        const __m128i tmp = _mm_and_si128(mul, mask_mul);  // 00ab000000cd0000
-        const __m128i shift = _mm_srli_epi32(tmp, 12);     // 00000000ab000000
-        const __m128i pack = _mm_or_si128(shift, tmp);     // 00000000abcd0000
-        // Convert to 0xff00**00.
-        const __m128i res = _mm_or_si128(pack, mask_or);
-        _mm_storeu_si128((__m128i*)dst, res);
-      }
-      break;
-    }
-    default: {
-      assert(xbits == 3);
-      for (x = 0; x + 16 <= width; x += 16, dst += 2) {
-        // 0000000a00000000b... | (where a/b are 1 bit).
-        const __m128i in = _mm_loadu_si128((const __m128i*)&row[x]);
-        const __m128i shift = _mm_slli_epi64(in, 7);
-        const uint32_t move = _mm_movemask_epi8(shift);
-        dst[0] = 0xff000000 | ((move & 0xff) << 8);
-        dst[1] = 0xff000000 | (move & 0xff00);
-      }
-      break;
-    }
-  }
-  if (x != width) {
-    VP8LBundleColorMap_C(row + x, width - x, xbits, dst);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Batch version of Predictor Transform subtraction
-
-static WEBP_INLINE void Average2_m128i(const __m128i* const a0,
-                                       const __m128i* const a1,
-                                       __m128i* const avg) {
-  // (a + b) >> 1 = ((a + b + 1) >> 1) - ((a ^ b) & 1)
-  const __m128i ones = _mm_set1_epi8(1);
-  const __m128i avg1 = _mm_avg_epu8(*a0, *a1);
-  const __m128i one = _mm_and_si128(_mm_xor_si128(*a0, *a1), ones);
-  *avg = _mm_sub_epi8(avg1, one);
-}
-
-// Predictor0: ARGB_BLACK.
-static void PredictorSub0_SSE2(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  const __m128i black = _mm_set1_epi32(ARGB_BLACK);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    const __m128i res = _mm_sub_epi8(src, black);
-    _mm_storeu_si128((__m128i*)&out[i], res);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsSub_C[0](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-
-#define GENERATE_PREDICTOR_1(X, IN)                                           \
-static void PredictorSub##X##_SSE2(const uint32_t* in, const uint32_t* upper, \
-                                   int num_pixels, uint32_t* out) {           \
-  int i;                                                                      \
-  for (i = 0; i + 4 <= num_pixels; i += 4) {                                  \
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);              \
-    const __m128i pred = _mm_loadu_si128((const __m128i*)&(IN));              \
-    const __m128i res = _mm_sub_epi8(src, pred);                              \
-    _mm_storeu_si128((__m128i*)&out[i], res);                                 \
-  }                                                                           \
-  if (i != num_pixels) {                                                      \
-    VP8LPredictorsSub_C[(X)](in + i, upper + i, num_pixels - i, out + i);     \
-  }                                                                           \
-}
-
-GENERATE_PREDICTOR_1(1, in[i - 1])       // Predictor1: L
-GENERATE_PREDICTOR_1(2, upper[i])        // Predictor2: T
-GENERATE_PREDICTOR_1(3, upper[i + 1])    // Predictor3: TR
-GENERATE_PREDICTOR_1(4, upper[i - 1])    // Predictor4: TL
-#undef GENERATE_PREDICTOR_1
-
-// Predictor5: avg2(avg2(L, TR), T)
-static void PredictorSub5_SSE2(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i L = _mm_loadu_si128((const __m128i*)&in[i - 1]);
-    const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]);
-    const __m128i TR = _mm_loadu_si128((const __m128i*)&upper[i + 1]);
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    __m128i avg, pred, res;
-    Average2_m128i(&L, &TR, &avg);
-    Average2_m128i(&avg, &T, &pred);
-    res = _mm_sub_epi8(src, pred);
-    _mm_storeu_si128((__m128i*)&out[i], res);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsSub_C[5](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-
-#define GENERATE_PREDICTOR_2(X, A, B)                                         \
-static void PredictorSub##X##_SSE2(const uint32_t* in, const uint32_t* upper, \
-                                   int num_pixels, uint32_t* out) {           \
-  int i;                                                                      \
-  for (i = 0; i + 4 <= num_pixels; i += 4) {                                  \
-    const __m128i tA = _mm_loadu_si128((const __m128i*)&(A));                 \
-    const __m128i tB = _mm_loadu_si128((const __m128i*)&(B));                 \
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);              \
-    __m128i pred, res;                                                        \
-    Average2_m128i(&tA, &tB, &pred);                                          \
-    res = _mm_sub_epi8(src, pred);                                            \
-    _mm_storeu_si128((__m128i*)&out[i], res);                                 \
-  }                                                                           \
-  if (i != num_pixels) {                                                      \
-    VP8LPredictorsSub_C[(X)](in + i, upper + i, num_pixels - i, out + i);     \
-  }                                                                           \
-}
-
-GENERATE_PREDICTOR_2(6, in[i - 1], upper[i - 1])   // Predictor6: avg(L, TL)
-GENERATE_PREDICTOR_2(7, in[i - 1], upper[i])       // Predictor7: avg(L, T)
-GENERATE_PREDICTOR_2(8, upper[i - 1], upper[i])    // Predictor8: avg(TL, T)
-GENERATE_PREDICTOR_2(9, upper[i], upper[i + 1])    // Predictor9: average(T, TR)
-#undef GENERATE_PREDICTOR_2
-
-// Predictor10: avg(avg(L,TL), avg(T, TR)).
-static void PredictorSub10_SSE2(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i L = _mm_loadu_si128((const __m128i*)&in[i - 1]);
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    const __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]);
-    const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]);
-    const __m128i TR = _mm_loadu_si128((const __m128i*)&upper[i + 1]);
-    __m128i avgTTR, avgLTL, avg, res;
-    Average2_m128i(&T, &TR, &avgTTR);
-    Average2_m128i(&L, &TL, &avgLTL);
-    Average2_m128i(&avgTTR, &avgLTL, &avg);
-    res = _mm_sub_epi8(src, avg);
-    _mm_storeu_si128((__m128i*)&out[i], res);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsSub_C[10](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-
-// Predictor11: select.
-static void GetSumAbsDiff32_SSE2(const __m128i* const A, const __m128i* const B,
-                                 __m128i* const out) {
-  // We can unpack with any value on the upper 32 bits, provided it's the same
-  // on both operands (to that their sum of abs diff is zero). Here we use *A.
-  const __m128i A_lo = _mm_unpacklo_epi32(*A, *A);
-  const __m128i B_lo = _mm_unpacklo_epi32(*B, *A);
-  const __m128i A_hi = _mm_unpackhi_epi32(*A, *A);
-  const __m128i B_hi = _mm_unpackhi_epi32(*B, *A);
-  const __m128i s_lo = _mm_sad_epu8(A_lo, B_lo);
-  const __m128i s_hi = _mm_sad_epu8(A_hi, B_hi);
-  *out = _mm_packs_epi32(s_lo, s_hi);
-}
-
-static void PredictorSub11_SSE2(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i L = _mm_loadu_si128((const __m128i*)&in[i - 1]);
-    const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]);
-    const __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]);
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    __m128i pa, pb;
-    GetSumAbsDiff32_SSE2(&T, &TL, &pa);   // pa = sum |T-TL|
-    GetSumAbsDiff32_SSE2(&L, &TL, &pb);   // pb = sum |L-TL|
-    {
-      const __m128i mask = _mm_cmpgt_epi32(pb, pa);
-      const __m128i A = _mm_and_si128(mask, L);
-      const __m128i B = _mm_andnot_si128(mask, T);
-      const __m128i pred = _mm_or_si128(A, B);    // pred = (L > T)? L : T
-      const __m128i res = _mm_sub_epi8(src, pred);
-      _mm_storeu_si128((__m128i*)&out[i], res);
-    }
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsSub_C[11](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-
-// Predictor12: ClampedSubSubtractFull.
-static void PredictorSub12_SSE2(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  const __m128i zero = _mm_setzero_si128();
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    const __m128i L = _mm_loadu_si128((const __m128i*)&in[i - 1]);
-    const __m128i L_lo = _mm_unpacklo_epi8(L, zero);
-    const __m128i L_hi = _mm_unpackhi_epi8(L, zero);
-    const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]);
-    const __m128i T_lo = _mm_unpacklo_epi8(T, zero);
-    const __m128i T_hi = _mm_unpackhi_epi8(T, zero);
-    const __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]);
-    const __m128i TL_lo = _mm_unpacklo_epi8(TL, zero);
-    const __m128i TL_hi = _mm_unpackhi_epi8(TL, zero);
-    const __m128i diff_lo = _mm_sub_epi16(T_lo, TL_lo);
-    const __m128i diff_hi = _mm_sub_epi16(T_hi, TL_hi);
-    const __m128i pred_lo = _mm_add_epi16(L_lo, diff_lo);
-    const __m128i pred_hi = _mm_add_epi16(L_hi, diff_hi);
-    const __m128i pred = _mm_packus_epi16(pred_lo, pred_hi);
-    const __m128i res = _mm_sub_epi8(src, pred);
-    _mm_storeu_si128((__m128i*)&out[i], res);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsSub_C[12](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-
-// Predictors13: ClampedAddSubtractHalf
-static void PredictorSub13_SSE2(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  const __m128i zero = _mm_setzero_si128();
-  for (i = 0; i + 2 <= num_pixels; i += 2) {
-    // we can only process two pixels at a time
-    const __m128i L = _mm_loadl_epi64((const __m128i*)&in[i - 1]);
-    const __m128i src = _mm_loadl_epi64((const __m128i*)&in[i]);
-    const __m128i T = _mm_loadl_epi64((const __m128i*)&upper[i]);
-    const __m128i TL = _mm_loadl_epi64((const __m128i*)&upper[i - 1]);
-    const __m128i L_lo = _mm_unpacklo_epi8(L, zero);
-    const __m128i T_lo = _mm_unpacklo_epi8(T, zero);
-    const __m128i TL_lo = _mm_unpacklo_epi8(TL, zero);
-    const __m128i sum = _mm_add_epi16(T_lo, L_lo);
-    const __m128i avg = _mm_srli_epi16(sum, 1);
-    const __m128i A1 = _mm_sub_epi16(avg, TL_lo);
-    const __m128i bit_fix = _mm_cmpgt_epi16(TL_lo, avg);
-    const __m128i A2 = _mm_sub_epi16(A1, bit_fix);
-    const __m128i A3 = _mm_srai_epi16(A2, 1);
-    const __m128i A4 = _mm_add_epi16(avg, A3);
-    const __m128i pred = _mm_packus_epi16(A4, A4);
-    const __m128i res = _mm_sub_epi8(src, pred);
-    _mm_storel_epi64((__m128i*)&out[i], res);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsSub_C[13](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LEncDspInitSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitSSE2(void) {
-  VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_SSE2;
-  VP8LTransformColor = TransformColor_SSE2;
-  VP8LCollectColorBlueTransforms = CollectColorBlueTransforms_SSE2;
-  VP8LCollectColorRedTransforms = CollectColorRedTransforms_SSE2;
-  VP8LAddVector = AddVector_SSE2;
-  VP8LAddVectorEq = AddVectorEq_SSE2;
-  VP8LCombinedShannonEntropy = CombinedShannonEntropy_SSE2;
-  VP8LVectorMismatch = VectorMismatch_SSE2;
-  VP8LBundleColorMap = BundleColorMap_SSE2;
-
-  VP8LPredictorsSub[0] = PredictorSub0_SSE2;
-  VP8LPredictorsSub[1] = PredictorSub1_SSE2;
-  VP8LPredictorsSub[2] = PredictorSub2_SSE2;
-  VP8LPredictorsSub[3] = PredictorSub3_SSE2;
-  VP8LPredictorsSub[4] = PredictorSub4_SSE2;
-  VP8LPredictorsSub[5] = PredictorSub5_SSE2;
-  VP8LPredictorsSub[6] = PredictorSub6_SSE2;
-  VP8LPredictorsSub[7] = PredictorSub7_SSE2;
-  VP8LPredictorsSub[8] = PredictorSub8_SSE2;
-  VP8LPredictorsSub[9] = PredictorSub9_SSE2;
-  VP8LPredictorsSub[10] = PredictorSub10_SSE2;
-  VP8LPredictorsSub[11] = PredictorSub11_SSE2;
-  VP8LPredictorsSub[12] = PredictorSub12_SSE2;
-  VP8LPredictorsSub[13] = PredictorSub13_SSE2;
-  VP8LPredictorsSub[14] = PredictorSub0_SSE2;  // <- padding security sentinels
-  VP8LPredictorsSub[15] = PredictorSub0_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(VP8LEncDspInitSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/lossless_enc_sse41.c b/ios/Pods/libwebp/src/dsp/lossless_enc_sse41.c
deleted file mode 100644
index 2e12a71..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_enc_sse41.c
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE4.1 variant of methods for lossless encoder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE41)
-#include <assert.h>
-#include <smmintrin.h>
-#include "src/dsp/lossless.h"
-
-// For sign-extended multiplying constants, pre-shifted by 5:
-#define CST_5b(X)  (((int16_t)((uint16_t)(X) << 8)) >> 5)
-
-//------------------------------------------------------------------------------
-// Subtract-Green Transform
-
-static void SubtractGreenFromBlueAndRed_SSE41(uint32_t* argb_data,
-                                              int num_pixels) {
-  int i;
-  const __m128i kCstShuffle = _mm_set_epi8(-1, 13, -1, 13, -1, 9, -1, 9,
-                                           -1,  5, -1,  5, -1, 1, -1, 1);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i in = _mm_loadu_si128((__m128i*)&argb_data[i]);
-    const __m128i in_0g0g = _mm_shuffle_epi8(in, kCstShuffle);
-    const __m128i out = _mm_sub_epi8(in, in_0g0g);
-    _mm_storeu_si128((__m128i*)&argb_data[i], out);
-  }
-  // fallthrough and finish off with plain-C
-  if (i != num_pixels) {
-    VP8LSubtractGreenFromBlueAndRed_C(argb_data + i, num_pixels - i);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Color Transform
-
-#define SPAN 8
-static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride,
-                                             int tile_width, int tile_height,
-                                             int green_to_blue, int red_to_blue,
-                                             int histo[]) {
-  const __m128i mults_r = _mm_set1_epi16(CST_5b(red_to_blue));
-  const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_blue));
-  const __m128i mask_g = _mm_set1_epi16(0xff00);   // green mask
-  const __m128i mask_gb = _mm_set1_epi32(0xffff);  // green/blue mask
-  const __m128i mask_b = _mm_set1_epi16(0x00ff);   // blue mask
-  const __m128i shuffler_lo = _mm_setr_epi8(-1, 2, -1, 6, -1, 10, -1, 14, -1,
-                                            -1, -1, -1, -1, -1, -1, -1);
-  const __m128i shuffler_hi = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1,
-                                            2, -1, 6, -1, 10, -1, 14);
-  int y;
-  for (y = 0; y < tile_height; ++y) {
-    const uint32_t* const src = argb + y * stride;
-    int i, x;
-    for (x = 0; x + SPAN <= tile_width; x += SPAN) {
-      uint16_t values[SPAN];
-      const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]);
-      const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]);
-      const __m128i r0 = _mm_shuffle_epi8(in0, shuffler_lo);
-      const __m128i r1 = _mm_shuffle_epi8(in1, shuffler_hi);
-      const __m128i r = _mm_or_si128(r0, r1);         // r 0
-      const __m128i gb0 = _mm_and_si128(in0, mask_gb);
-      const __m128i gb1 = _mm_and_si128(in1, mask_gb);
-      const __m128i gb = _mm_packus_epi32(gb0, gb1);  // g b
-      const __m128i g = _mm_and_si128(gb, mask_g);    // g 0
-      const __m128i A = _mm_mulhi_epi16(r, mults_r);  // x dbr
-      const __m128i B = _mm_mulhi_epi16(g, mults_g);  // x dbg
-      const __m128i C = _mm_sub_epi8(gb, B);          // x b'
-      const __m128i D = _mm_sub_epi8(C, A);           // x b''
-      const __m128i E = _mm_and_si128(D, mask_b);     // 0 b''
-      _mm_storeu_si128((__m128i*)values, E);
-      for (i = 0; i < SPAN; ++i) ++histo[values[i]];
-    }
-  }
-  {
-    const int left_over = tile_width & (SPAN - 1);
-    if (left_over > 0) {
-      VP8LCollectColorBlueTransforms_C(argb + tile_width - left_over, stride,
-                                       left_over, tile_height,
-                                       green_to_blue, red_to_blue, histo);
-    }
-  }
-}
-
-static void CollectColorRedTransforms_SSE41(const uint32_t* argb, int stride,
-                                            int tile_width, int tile_height,
-                                            int green_to_red, int histo[]) {
-  const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_red));
-  const __m128i mask_g = _mm_set1_epi32(0x00ff00);  // green mask
-  const __m128i mask = _mm_set1_epi16(0xff);
-
-  int y;
-  for (y = 0; y < tile_height; ++y) {
-    const uint32_t* const src = argb + y * stride;
-    int i, x;
-    for (x = 0; x + SPAN <= tile_width; x += SPAN) {
-      uint16_t values[SPAN];
-      const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]);
-      const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]);
-      const __m128i g0 = _mm_and_si128(in0, mask_g);  // 0 0  | g 0
-      const __m128i g1 = _mm_and_si128(in1, mask_g);
-      const __m128i g = _mm_packus_epi32(g0, g1);     // g 0
-      const __m128i A0 = _mm_srli_epi32(in0, 16);     // 0 0  | x r
-      const __m128i A1 = _mm_srli_epi32(in1, 16);
-      const __m128i A = _mm_packus_epi32(A0, A1);     // x r
-      const __m128i B = _mm_mulhi_epi16(g, mults_g);  // x dr
-      const __m128i C = _mm_sub_epi8(A, B);           // x r'
-      const __m128i D = _mm_and_si128(C, mask);       // 0 r'
-      _mm_storeu_si128((__m128i*)values, D);
-      for (i = 0; i < SPAN; ++i) ++histo[values[i]];
-    }
-  }
-  {
-    const int left_over = tile_width & (SPAN - 1);
-    if (left_over > 0) {
-      VP8LCollectColorRedTransforms_C(argb + tile_width - left_over, stride,
-                                      left_over, tile_height, green_to_red,
-                                      histo);
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LEncDspInitSSE41(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitSSE41(void) {
-  VP8LSubtractGreenFromBlueAndRed = SubtractGreenFromBlueAndRed_SSE41;
-  VP8LCollectColorBlueTransforms = CollectColorBlueTransforms_SSE41;
-  VP8LCollectColorRedTransforms = CollectColorRedTransforms_SSE41;
-}
-
-#else  // !WEBP_USE_SSE41
-
-WEBP_DSP_INIT_STUB(VP8LEncDspInitSSE41)
-
-#endif  // WEBP_USE_SSE41
diff --git a/ios/Pods/libwebp/src/dsp/lossless_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/lossless_mips_dsp_r2.c
deleted file mode 100644
index 9888854..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_mips_dsp_r2.c
+++ /dev/null
@@ -1,696 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Image transforms and color space conversion methods for lossless decoder.
-//
-// Author(s):  Djordje Pesut    (djordje.pesut@imgtec.com)
-//             Jovan Zelincevic (jovan.zelincevic@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-
-#define MAP_COLOR_FUNCS(FUNC_NAME, TYPE, GET_INDEX, GET_VALUE)                 \
-static void FUNC_NAME(const TYPE* src,                                         \
-                      const uint32_t* const color_map,                         \
-                      TYPE* dst, int y_start, int y_end,                       \
-                      int width) {                                             \
-  int y;                                                                       \
-  for (y = y_start; y < y_end; ++y) {                                          \
-    int x;                                                                     \
-    for (x = 0; x < (width >> 2); ++x) {                                       \
-      int tmp1, tmp2, tmp3, tmp4;                                              \
-      __asm__ volatile (                                                       \
-      ".ifc        " #TYPE ",  uint8_t                  \n\t"                  \
-        "lbu       %[tmp1],  0(%[src])                  \n\t"                  \
-        "lbu       %[tmp2],  1(%[src])                  \n\t"                  \
-        "lbu       %[tmp3],  2(%[src])                  \n\t"                  \
-        "lbu       %[tmp4],  3(%[src])                  \n\t"                  \
-        "addiu     %[src],   %[src],      4             \n\t"                  \
-      ".endif                                           \n\t"                  \
-      ".ifc        " #TYPE ",  uint32_t                 \n\t"                  \
-        "lw        %[tmp1],  0(%[src])                  \n\t"                  \
-        "lw        %[tmp2],  4(%[src])                  \n\t"                  \
-        "lw        %[tmp3],  8(%[src])                  \n\t"                  \
-        "lw        %[tmp4],  12(%[src])                 \n\t"                  \
-        "ext       %[tmp1],  %[tmp1],     8,        8   \n\t"                  \
-        "ext       %[tmp2],  %[tmp2],     8,        8   \n\t"                  \
-        "ext       %[tmp3],  %[tmp3],     8,        8   \n\t"                  \
-        "ext       %[tmp4],  %[tmp4],     8,        8   \n\t"                  \
-        "addiu     %[src],   %[src],      16            \n\t"                  \
-      ".endif                                           \n\t"                  \
-        "sll       %[tmp1],  %[tmp1],     2             \n\t"                  \
-        "sll       %[tmp2],  %[tmp2],     2             \n\t"                  \
-        "sll       %[tmp3],  %[tmp3],     2             \n\t"                  \
-        "sll       %[tmp4],  %[tmp4],     2             \n\t"                  \
-        "lwx       %[tmp1],  %[tmp1](%[color_map])      \n\t"                  \
-        "lwx       %[tmp2],  %[tmp2](%[color_map])      \n\t"                  \
-        "lwx       %[tmp3],  %[tmp3](%[color_map])      \n\t"                  \
-        "lwx       %[tmp4],  %[tmp4](%[color_map])      \n\t"                  \
-      ".ifc        " #TYPE ",  uint8_t                  \n\t"                  \
-        "ext       %[tmp1],  %[tmp1],     8,        8   \n\t"                  \
-        "ext       %[tmp2],  %[tmp2],     8,        8   \n\t"                  \
-        "ext       %[tmp3],  %[tmp3],     8,        8   \n\t"                  \
-        "ext       %[tmp4],  %[tmp4],     8,        8   \n\t"                  \
-        "sb        %[tmp1],  0(%[dst])                  \n\t"                  \
-        "sb        %[tmp2],  1(%[dst])                  \n\t"                  \
-        "sb        %[tmp3],  2(%[dst])                  \n\t"                  \
-        "sb        %[tmp4],  3(%[dst])                  \n\t"                  \
-        "addiu     %[dst],   %[dst],      4             \n\t"                  \
-      ".endif                                           \n\t"                  \
-      ".ifc        " #TYPE ",  uint32_t                 \n\t"                  \
-        "sw        %[tmp1],  0(%[dst])                  \n\t"                  \
-        "sw        %[tmp2],  4(%[dst])                  \n\t"                  \
-        "sw        %[tmp3],  8(%[dst])                  \n\t"                  \
-        "sw        %[tmp4],  12(%[dst])                 \n\t"                  \
-        "addiu     %[dst],   %[dst],      16            \n\t"                  \
-      ".endif                                           \n\t"                  \
-        : [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3),             \
-          [tmp4]"=&r"(tmp4), [src]"+&r"(src), [dst]"+r"(dst)                   \
-        : [color_map]"r"(color_map)                                            \
-        : "memory"                                                             \
-      );                                                                       \
-    }                                                                          \
-    for (x = 0; x < (width & 3); ++x) {                                        \
-      *dst++ = GET_VALUE(color_map[GET_INDEX(*src++)]);                        \
-    }                                                                          \
-  }                                                                            \
-}
-
-MAP_COLOR_FUNCS(MapARGB_MIPSdspR2, uint32_t, VP8GetARGBIndex, VP8GetARGBValue)
-MAP_COLOR_FUNCS(MapAlpha_MIPSdspR2, uint8_t, VP8GetAlphaIndex, VP8GetAlphaValue)
-
-#undef MAP_COLOR_FUNCS
-
-static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1,
-                                                   uint32_t c2) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  __asm__ volatile (
-    "preceu.ph.qbr   %[temp1],   %[c0]                 \n\t"
-    "preceu.ph.qbl   %[temp2],   %[c0]                 \n\t"
-    "preceu.ph.qbr   %[temp3],   %[c1]                 \n\t"
-    "preceu.ph.qbl   %[temp4],   %[c1]                 \n\t"
-    "preceu.ph.qbr   %[temp5],   %[c2]                 \n\t"
-    "preceu.ph.qbl   %[temp0],   %[c2]                 \n\t"
-    "subq.ph         %[temp3],   %[temp3],   %[temp5]  \n\t"
-    "subq.ph         %[temp4],   %[temp4],   %[temp0]  \n\t"
-    "addq.ph         %[temp1],   %[temp1],   %[temp3]  \n\t"
-    "addq.ph         %[temp2],   %[temp2],   %[temp4]  \n\t"
-    "shll_s.ph       %[temp1],   %[temp1],   7         \n\t"
-    "shll_s.ph       %[temp2],   %[temp2],   7         \n\t"
-    "precrqu_s.qb.ph %[temp2],   %[temp2],   %[temp1]  \n\t"
-    : [temp0]"=r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5)
-    : [c0]"r"(c0), [c1]"r"(c1), [c2]"r"(c2)
-    : "memory"
-  );
-  return temp2;
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1,
-                                                   uint32_t c2) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  __asm__ volatile (
-    "adduh.qb         %[temp5],   %[c0],      %[c1]       \n\t"
-    "preceu.ph.qbr    %[temp3],   %[c2]                   \n\t"
-    "preceu.ph.qbr    %[temp1],   %[temp5]                \n\t"
-    "preceu.ph.qbl    %[temp2],   %[temp5]                \n\t"
-    "preceu.ph.qbl    %[temp4],   %[c2]                   \n\t"
-    "subq.ph          %[temp3],   %[temp1],   %[temp3]    \n\t"
-    "subq.ph          %[temp4],   %[temp2],   %[temp4]    \n\t"
-    "shrl.ph          %[temp5],   %[temp3],   15          \n\t"
-    "shrl.ph          %[temp0],   %[temp4],   15          \n\t"
-    "addq.ph          %[temp3],   %[temp3],   %[temp5]    \n\t"
-    "addq.ph          %[temp4],   %[temp0],   %[temp4]    \n\t"
-    "shra.ph          %[temp3],   %[temp3],   1           \n\t"
-    "shra.ph          %[temp4],   %[temp4],   1           \n\t"
-    "addq.ph          %[temp1],   %[temp1],   %[temp3]    \n\t"
-    "addq.ph          %[temp2],   %[temp2],   %[temp4]    \n\t"
-    "shll_s.ph        %[temp1],   %[temp1],   7           \n\t"
-    "shll_s.ph        %[temp2],   %[temp2],   7           \n\t"
-    "precrqu_s.qb.ph  %[temp1],   %[temp2],   %[temp1]    \n\t"
-    : [temp0]"=r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=r"(temp4), [temp5]"=&r"(temp5)
-    : [c0]"r"(c0), [c1]"r"(c1), [c2]"r"(c2)
-    : "memory"
-  );
-  return temp1;
-}
-
-static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  __asm__ volatile (
-    "cmpgdu.lt.qb %[temp1], %[c],     %[b]             \n\t"
-    "pick.qb      %[temp1], %[b],     %[c]             \n\t"
-    "pick.qb      %[temp2], %[c],     %[b]             \n\t"
-    "cmpgdu.lt.qb %[temp4], %[c],     %[a]             \n\t"
-    "pick.qb      %[temp4], %[a],     %[c]             \n\t"
-    "pick.qb      %[temp5], %[c],     %[a]             \n\t"
-    "subu.qb      %[temp3], %[temp1], %[temp2]         \n\t"
-    "subu.qb      %[temp0], %[temp4], %[temp5]         \n\t"
-    "raddu.w.qb   %[temp3], %[temp3]                   \n\t"
-    "raddu.w.qb   %[temp0], %[temp0]                   \n\t"
-    "subu         %[temp3], %[temp3], %[temp0]         \n\t"
-    "slti         %[temp0], %[temp3], 0x1              \n\t"
-    "movz         %[a],     %[b],     %[temp0]         \n\t"
-    : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),
-      [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp0]"=&r"(temp0),
-      [a]"+&r"(a)
-    : [b]"r"(b), [c]"r"(c)
-  );
-  return a;
-}
-
-static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) {
-  __asm__ volatile (
-    "adduh.qb    %[a0], %[a0], %[a1]       \n\t"
-    : [a0]"+r"(a0)
-    : [a1]"r"(a1)
-  );
-  return a0;
-}
-
-static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) {
-  return Average2(Average2(a0, a2), a1);
-}
-
-static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1,
-                                     uint32_t a2, uint32_t a3) {
-  return Average2(Average2(a0, a1), Average2(a2, a3));
-}
-
-static uint32_t Predictor5_MIPSdspR2(uint32_t left, const uint32_t* const top) {
-  return Average3(left, top[0], top[1]);
-}
-
-static uint32_t Predictor6_MIPSdspR2(uint32_t left, const uint32_t* const top) {
-  return Average2(left, top[-1]);
-}
-
-static uint32_t Predictor7_MIPSdspR2(uint32_t left, const uint32_t* const top) {
-  return Average2(left, top[0]);
-}
-
-static uint32_t Predictor8_MIPSdspR2(uint32_t left, const uint32_t* const top) {
-  (void)left;
-  return Average2(top[-1], top[0]);
-}
-
-static uint32_t Predictor9_MIPSdspR2(uint32_t left, const uint32_t* const top) {
-  (void)left;
-  return Average2(top[0], top[1]);
-}
-
-static uint32_t Predictor10_MIPSdspR2(uint32_t left,
-                                      const uint32_t* const top) {
-  return Average4(left, top[-1], top[0], top[1]);
-}
-
-static uint32_t Predictor11_MIPSdspR2(uint32_t left,
-                                      const uint32_t* const top) {
-  return Select(top[0], left, top[-1]);
-}
-
-static uint32_t Predictor12_MIPSdspR2(uint32_t left,
-                                      const uint32_t* const top) {
-  return ClampedAddSubtractFull(left, top[0], top[-1]);
-}
-
-static uint32_t Predictor13_MIPSdspR2(uint32_t left,
-                                      const uint32_t* const top) {
-  return ClampedAddSubtractHalf(left, top[0], top[-1]);
-}
-
-// Add green to blue and red channels (i.e. perform the inverse transform of
-// 'subtract green').
-static void AddGreenToBlueAndRed_MIPSdspR2(const uint32_t* src, int num_pixels,
-                                           uint32_t* dst) {
-  uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
-  const uint32_t* const p_loop1_end = src + (num_pixels & ~3);
-  const uint32_t* const p_loop2_end = src + num_pixels;
-  __asm__ volatile (
-    ".set       push                                          \n\t"
-    ".set       noreorder                                     \n\t"
-    "beq        %[src],          %[p_loop1_end],     3f       \n\t"
-    " nop                                                     \n\t"
-  "0:                                                         \n\t"
-    "lw         %[temp0],        0(%[src])                    \n\t"
-    "lw         %[temp1],        4(%[src])                    \n\t"
-    "lw         %[temp2],        8(%[src])                    \n\t"
-    "lw         %[temp3],        12(%[src])                   \n\t"
-    "ext        %[temp4],        %[temp0],           8,    8  \n\t"
-    "ext        %[temp5],        %[temp1],           8,    8  \n\t"
-    "ext        %[temp6],        %[temp2],           8,    8  \n\t"
-    "ext        %[temp7],        %[temp3],           8,    8  \n\t"
-    "addiu      %[src],          %[src],             16       \n\t"
-    "addiu      %[dst],          %[dst],             16       \n\t"
-    "replv.ph   %[temp4],        %[temp4]                     \n\t"
-    "replv.ph   %[temp5],        %[temp5]                     \n\t"
-    "replv.ph   %[temp6],        %[temp6]                     \n\t"
-    "replv.ph   %[temp7],        %[temp7]                     \n\t"
-    "addu.qb    %[temp0],        %[temp0],           %[temp4] \n\t"
-    "addu.qb    %[temp1],        %[temp1],           %[temp5] \n\t"
-    "addu.qb    %[temp2],        %[temp2],           %[temp6] \n\t"
-    "addu.qb    %[temp3],        %[temp3],           %[temp7] \n\t"
-    "sw         %[temp0],        -16(%[dst])                  \n\t"
-    "sw         %[temp1],        -12(%[dst])                  \n\t"
-    "sw         %[temp2],        -8(%[dst])                   \n\t"
-    "bne        %[src],          %[p_loop1_end],     0b       \n\t"
-    " sw        %[temp3],        -4(%[dst])                   \n\t"
-  "3:                                                         \n\t"
-    "beq        %[src],          %[p_loop2_end],     2f       \n\t"
-    " nop                                                     \n\t"
-  "1:                                                         \n\t"
-    "lw         %[temp0],        0(%[src])                    \n\t"
-    "addiu      %[src],          %[src],             4        \n\t"
-    "addiu      %[dst],          %[dst],             4        \n\t"
-    "ext        %[temp4],        %[temp0],           8,    8  \n\t"
-    "replv.ph   %[temp4],        %[temp4]                     \n\t"
-    "addu.qb    %[temp0],        %[temp0],           %[temp4] \n\t"
-    "bne        %[src],          %[p_loop2_end],     1b       \n\t"
-    " sw        %[temp0],        -4(%[dst])                   \n\t"
-  "2:                                                         \n\t"
-    ".set       pop                                           \n\t"
-    : [dst]"+&r"(dst), [src]"+&r"(src), [temp0]"=&r"(temp0),
-      [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),
-      [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp6]"=&r"(temp6),
-      [temp7]"=&r"(temp7)
-    : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end)
-    : "memory"
-  );
-}
-
-static void TransformColorInverse_MIPSdspR2(const VP8LMultipliers* const m,
-                                            const uint32_t* src, int num_pixels,
-                                            uint32_t* dst) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  uint32_t argb, argb1, new_red;
-  const uint32_t G_to_R = m->green_to_red_;
-  const uint32_t G_to_B = m->green_to_blue_;
-  const uint32_t R_to_B = m->red_to_blue_;
-  const uint32_t* const p_loop_end = src + (num_pixels & ~1);
-  __asm__ volatile (
-    ".set            push                                    \n\t"
-    ".set            noreorder                               \n\t"
-    "beq             %[src],       %[p_loop_end],  1f        \n\t"
-    " nop                                                    \n\t"
-    "replv.ph        %[temp0],     %[G_to_R]                 \n\t"
-    "replv.ph        %[temp1],     %[G_to_B]                 \n\t"
-    "replv.ph        %[temp2],     %[R_to_B]                 \n\t"
-    "shll.ph         %[temp0],     %[temp0],       8         \n\t"
-    "shll.ph         %[temp1],     %[temp1],       8         \n\t"
-    "shll.ph         %[temp2],     %[temp2],       8         \n\t"
-    "shra.ph         %[temp0],     %[temp0],       8         \n\t"
-    "shra.ph         %[temp1],     %[temp1],       8         \n\t"
-    "shra.ph         %[temp2],     %[temp2],       8         \n\t"
-  "0:                                                        \n\t"
-    "lw              %[argb],      0(%[src])                 \n\t"
-    "lw              %[argb1],     4(%[src])                 \n\t"
-    "sw              %[argb],      0(%[dst])                 \n\t"
-    "sw              %[argb1],     4(%[dst])                 \n\t"
-    "addiu           %[src],       %[src],         8         \n\t"
-    "addiu           %[dst],       %[dst],         8         \n\t"
-    "precrq.qb.ph    %[temp3],     %[argb],        %[argb1]  \n\t"
-    "preceu.ph.qbra  %[temp3],     %[temp3]                  \n\t"
-    "shll.ph         %[temp3],     %[temp3],       8         \n\t"
-    "shra.ph         %[temp3],     %[temp3],       8         \n\t"
-    "mul.ph          %[temp5],     %[temp3],       %[temp0]  \n\t"
-    "mul.ph          %[temp3],     %[temp3],       %[temp1]  \n\t"
-    "precrq.ph.w     %[new_red],   %[argb],        %[argb1]  \n\t"
-    "ins             %[argb1],     %[argb],        16,   16  \n\t"
-    "shra.ph         %[temp5],     %[temp5],       5         \n\t"
-    "shra.ph         %[temp3],     %[temp3],       5         \n\t"
-    "addu.ph         %[new_red],   %[new_red],     %[temp5]  \n\t"
-    "addu.ph         %[argb1],     %[argb1],       %[temp3]  \n\t"
-    "preceu.ph.qbra  %[temp5],     %[new_red]                \n\t"
-    "shll.ph         %[temp4],     %[temp5],       8         \n\t"
-    "shra.ph         %[temp4],     %[temp4],       8         \n\t"
-    "mul.ph          %[temp4],     %[temp4],       %[temp2]  \n\t"
-    "sb              %[temp5],     -2(%[dst])                \n\t"
-    "sra             %[temp5],     %[temp5],       16        \n\t"
-    "shra.ph         %[temp4],     %[temp4],       5         \n\t"
-    "addu.ph         %[argb1],     %[argb1],       %[temp4]  \n\t"
-    "preceu.ph.qbra  %[temp3],     %[argb1]                  \n\t"
-    "sb              %[temp5],     -6(%[dst])                \n\t"
-    "sb              %[temp3],     -4(%[dst])                \n\t"
-    "sra             %[temp3],     %[temp3],       16        \n\t"
-    "bne             %[src],       %[p_loop_end],  0b        \n\t"
-    " sb             %[temp3],     -8(%[dst])                \n\t"
-  "1:                                                        \n\t"
-    ".set            pop                                     \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [new_red]"=&r"(new_red), [argb]"=&r"(argb),
-      [argb1]"=&r"(argb1), [dst]"+&r"(dst), [src]"+&r"(src)
-    : [G_to_R]"r"(G_to_R), [R_to_B]"r"(R_to_B),
-      [G_to_B]"r"(G_to_B), [p_loop_end]"r"(p_loop_end)
-    : "memory", "hi", "lo"
-  );
-
-  // Fall-back to C-version for left-overs.
-  if (num_pixels & 1) VP8LTransformColorInverse_C(m, src, 1, dst);
-}
-
-static void ConvertBGRAToRGB_MIPSdspR2(const uint32_t* src,
-                                       int num_pixels, uint8_t* dst) {
-  int temp0, temp1, temp2, temp3;
-  const uint32_t* const p_loop1_end = src + (num_pixels & ~3);
-  const uint32_t* const p_loop2_end = src + num_pixels;
-  __asm__ volatile (
-    ".set       push                                       \n\t"
-    ".set       noreorder                                  \n\t"
-    "beq        %[src],      %[p_loop1_end],    3f         \n\t"
-    " nop                                                  \n\t"
-  "0:                                                      \n\t"
-    "lw         %[temp3],    12(%[src])                    \n\t"
-    "lw         %[temp2],    8(%[src])                     \n\t"
-    "lw         %[temp1],    4(%[src])                     \n\t"
-    "lw         %[temp0],    0(%[src])                     \n\t"
-    "ins        %[temp3],    %[temp2],          24,   8    \n\t"
-    "sll        %[temp2],    %[temp2],          8          \n\t"
-    "rotr       %[temp3],    %[temp3],          16         \n\t"
-    "ins        %[temp2],    %[temp1],          0,    16   \n\t"
-    "sll        %[temp1],    %[temp1],          8          \n\t"
-    "wsbh       %[temp3],    %[temp3]                      \n\t"
-    "balign     %[temp0],    %[temp1],          1          \n\t"
-    "wsbh       %[temp2],    %[temp2]                      \n\t"
-    "wsbh       %[temp0],    %[temp0]                      \n\t"
-    "usw        %[temp3],    8(%[dst])                     \n\t"
-    "rotr       %[temp0],    %[temp0],          16         \n\t"
-    "usw        %[temp2],    4(%[dst])                     \n\t"
-    "addiu      %[src],      %[src],            16         \n\t"
-    "usw        %[temp0],    0(%[dst])                     \n\t"
-    "bne        %[src],      %[p_loop1_end],    0b         \n\t"
-    " addiu     %[dst],      %[dst],            12         \n\t"
-  "3:                                                      \n\t"
-    "beq        %[src],      %[p_loop2_end],    2f         \n\t"
-    " nop                                                  \n\t"
-  "1:                                                      \n\t"
-    "lw         %[temp0],    0(%[src])                     \n\t"
-    "addiu      %[src],      %[src],            4          \n\t"
-    "wsbh       %[temp1],    %[temp0]                      \n\t"
-    "addiu      %[dst],      %[dst],            3          \n\t"
-    "ush        %[temp1],    -2(%[dst])                    \n\t"
-    "sra        %[temp0],    %[temp0],          16         \n\t"
-    "bne        %[src],      %[p_loop2_end],    1b         \n\t"
-    " sb        %[temp0],    -3(%[dst])                    \n\t"
-  "2:                                                      \n\t"
-    ".set       pop                                        \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [dst]"+&r"(dst), [src]"+&r"(src)
-    : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end)
-    : "memory"
-  );
-}
-
-static void ConvertBGRAToRGBA_MIPSdspR2(const uint32_t* src,
-                                        int num_pixels, uint8_t* dst) {
-  int temp0, temp1, temp2, temp3;
-  const uint32_t* const p_loop1_end = src + (num_pixels & ~3);
-  const uint32_t* const p_loop2_end = src + num_pixels;
-  __asm__ volatile (
-    ".set       push                                       \n\t"
-    ".set       noreorder                                  \n\t"
-    "beq        %[src],      %[p_loop1_end],    3f         \n\t"
-    " nop                                                  \n\t"
-  "0:                                                      \n\t"
-    "lw         %[temp0],    0(%[src])                     \n\t"
-    "lw         %[temp1],    4(%[src])                     \n\t"
-    "lw         %[temp2],    8(%[src])                     \n\t"
-    "lw         %[temp3],    12(%[src])                    \n\t"
-    "wsbh       %[temp0],    %[temp0]                      \n\t"
-    "wsbh       %[temp1],    %[temp1]                      \n\t"
-    "wsbh       %[temp2],    %[temp2]                      \n\t"
-    "wsbh       %[temp3],    %[temp3]                      \n\t"
-    "addiu      %[src],      %[src],            16         \n\t"
-    "balign     %[temp0],    %[temp0],          1          \n\t"
-    "balign     %[temp1],    %[temp1],          1          \n\t"
-    "balign     %[temp2],    %[temp2],          1          \n\t"
-    "balign     %[temp3],    %[temp3],          1          \n\t"
-    "usw        %[temp0],    0(%[dst])                     \n\t"
-    "usw        %[temp1],    4(%[dst])                     \n\t"
-    "usw        %[temp2],    8(%[dst])                     \n\t"
-    "usw        %[temp3],    12(%[dst])                    \n\t"
-    "bne        %[src],      %[p_loop1_end],    0b         \n\t"
-    " addiu     %[dst],      %[dst],            16         \n\t"
-  "3:                                                      \n\t"
-    "beq        %[src],      %[p_loop2_end],    2f         \n\t"
-    " nop                                                  \n\t"
-  "1:                                                      \n\t"
-    "lw         %[temp0],    0(%[src])                     \n\t"
-    "wsbh       %[temp0],    %[temp0]                      \n\t"
-    "addiu      %[src],      %[src],            4          \n\t"
-    "balign     %[temp0],    %[temp0],          1          \n\t"
-    "usw        %[temp0],    0(%[dst])                     \n\t"
-    "bne        %[src],      %[p_loop2_end],    1b         \n\t"
-    " addiu     %[dst],      %[dst],            4          \n\t"
-  "2:                                                      \n\t"
-    ".set       pop                                        \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [dst]"+&r"(dst), [src]"+&r"(src)
-    : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end)
-    : "memory"
-  );
-}
-
-static void ConvertBGRAToRGBA4444_MIPSdspR2(const uint32_t* src,
-                                            int num_pixels, uint8_t* dst) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  const uint32_t* const p_loop1_end = src + (num_pixels & ~3);
-  const uint32_t* const p_loop2_end = src + num_pixels;
-  __asm__ volatile (
-    ".set           push                                       \n\t"
-    ".set           noreorder                                  \n\t"
-    "beq            %[src],      %[p_loop1_end],    3f         \n\t"
-    " nop                                                      \n\t"
-  "0:                                                          \n\t"
-    "lw             %[temp0],    0(%[src])                     \n\t"
-    "lw             %[temp1],    4(%[src])                     \n\t"
-    "lw             %[temp2],    8(%[src])                     \n\t"
-    "lw             %[temp3],    12(%[src])                    \n\t"
-    "ext            %[temp4],    %[temp0],          28,   4    \n\t"
-    "ext            %[temp5],    %[temp0],          12,   4    \n\t"
-    "ins            %[temp0],    %[temp4],          0,    4    \n\t"
-    "ext            %[temp4],    %[temp1],          28,   4    \n\t"
-    "ins            %[temp0],    %[temp5],          16,   4    \n\t"
-    "ext            %[temp5],    %[temp1],          12,   4    \n\t"
-    "ins            %[temp1],    %[temp4],          0,    4    \n\t"
-    "ext            %[temp4],    %[temp2],          28,   4    \n\t"
-    "ins            %[temp1],    %[temp5],          16,   4    \n\t"
-    "ext            %[temp5],    %[temp2],          12,   4    \n\t"
-    "ins            %[temp2],    %[temp4],          0,    4    \n\t"
-    "ext            %[temp4],    %[temp3],          28,   4    \n\t"
-    "ins            %[temp2],    %[temp5],          16,   4    \n\t"
-    "ext            %[temp5],    %[temp3],          12,   4    \n\t"
-    "ins            %[temp3],    %[temp4],          0,    4    \n\t"
-    "precr.qb.ph    %[temp1],    %[temp1],          %[temp0]   \n\t"
-    "ins            %[temp3],    %[temp5],          16,   4    \n\t"
-    "addiu          %[src],      %[src],            16         \n\t"
-    "precr.qb.ph    %[temp3],    %[temp3],          %[temp2]   \n\t"
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    "usw            %[temp1],    0(%[dst])                     \n\t"
-    "usw            %[temp3],    4(%[dst])                     \n\t"
-#else
-    "wsbh           %[temp1],    %[temp1]                      \n\t"
-    "wsbh           %[temp3],    %[temp3]                      \n\t"
-    "usw            %[temp1],    0(%[dst])                     \n\t"
-    "usw            %[temp3],    4(%[dst])                     \n\t"
-#endif
-    "bne            %[src],      %[p_loop1_end],    0b         \n\t"
-    " addiu         %[dst],      %[dst],            8          \n\t"
-  "3:                                                          \n\t"
-    "beq            %[src],      %[p_loop2_end],    2f         \n\t"
-    " nop                                                      \n\t"
-  "1:                                                          \n\t"
-    "lw             %[temp0],    0(%[src])                     \n\t"
-    "ext            %[temp4],    %[temp0],          28,   4    \n\t"
-    "ext            %[temp5],    %[temp0],          12,   4    \n\t"
-    "ins            %[temp0],    %[temp4],          0,    4    \n\t"
-    "ins            %[temp0],    %[temp5],          16,   4    \n\t"
-    "addiu          %[src],      %[src],            4          \n\t"
-    "precr.qb.ph    %[temp0],    %[temp0],          %[temp0]   \n\t"
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    "ush            %[temp0],    0(%[dst])                     \n\t"
-#else
-    "wsbh           %[temp0],    %[temp0]                      \n\t"
-    "ush            %[temp0],    0(%[dst])                     \n\t"
-#endif
-    "bne            %[src],      %[p_loop2_end],    1b         \n\t"
-    " addiu         %[dst],      %[dst],            2          \n\t"
-  "2:                                                          \n\t"
-    ".set           pop                                        \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [dst]"+&r"(dst), [src]"+&r"(src)
-    : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end)
-    : "memory"
-  );
-}
-
-static void ConvertBGRAToRGB565_MIPSdspR2(const uint32_t* src,
-                                          int num_pixels, uint8_t* dst) {
-  int temp0, temp1, temp2, temp3, temp4, temp5;
-  const uint32_t* const p_loop1_end = src + (num_pixels & ~3);
-  const uint32_t* const p_loop2_end = src + num_pixels;
-  __asm__ volatile (
-    ".set           push                                       \n\t"
-    ".set           noreorder                                  \n\t"
-    "beq            %[src],      %[p_loop1_end],    3f         \n\t"
-    " nop                                                      \n\t"
-  "0:                                                          \n\t"
-    "lw             %[temp0],    0(%[src])                     \n\t"
-    "lw             %[temp1],    4(%[src])                     \n\t"
-    "lw             %[temp2],    8(%[src])                     \n\t"
-    "lw             %[temp3],    12(%[src])                    \n\t"
-    "ext            %[temp4],    %[temp0],          8,    16   \n\t"
-    "ext            %[temp5],    %[temp0],          5,    11   \n\t"
-    "ext            %[temp0],    %[temp0],          3,    5    \n\t"
-    "ins            %[temp4],    %[temp5],          0,    11   \n\t"
-    "ext            %[temp5],    %[temp1],          5,    11   \n\t"
-    "ins            %[temp4],    %[temp0],          0,    5    \n\t"
-    "ext            %[temp0],    %[temp1],          8,    16   \n\t"
-    "ext            %[temp1],    %[temp1],          3,    5    \n\t"
-    "ins            %[temp0],    %[temp5],          0,    11   \n\t"
-    "ext            %[temp5],    %[temp2],          5,    11   \n\t"
-    "ins            %[temp0],    %[temp1],          0,    5    \n\t"
-    "ext            %[temp1],    %[temp2],          8,    16   \n\t"
-    "ext            %[temp2],    %[temp2],          3,    5    \n\t"
-    "ins            %[temp1],    %[temp5],          0,    11   \n\t"
-    "ext            %[temp5],    %[temp3],          5,    11   \n\t"
-    "ins            %[temp1],    %[temp2],          0,    5    \n\t"
-    "ext            %[temp2],    %[temp3],          8,    16   \n\t"
-    "ext            %[temp3],    %[temp3],          3,    5    \n\t"
-    "ins            %[temp2],    %[temp5],          0,    11   \n\t"
-    "append         %[temp0],    %[temp4],          16         \n\t"
-    "ins            %[temp2],    %[temp3],          0,    5    \n\t"
-    "addiu          %[src],      %[src],            16         \n\t"
-    "append         %[temp2],    %[temp1],          16         \n\t"
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    "usw            %[temp0],    0(%[dst])                     \n\t"
-    "usw            %[temp2],    4(%[dst])                     \n\t"
-#else
-    "wsbh           %[temp0],    %[temp0]                      \n\t"
-    "wsbh           %[temp2],    %[temp2]                      \n\t"
-    "usw            %[temp0],    0(%[dst])                     \n\t"
-    "usw            %[temp2],    4(%[dst])                     \n\t"
-#endif
-    "bne            %[src],      %[p_loop1_end],    0b         \n\t"
-    " addiu         %[dst],      %[dst],            8          \n\t"
-  "3:                                                          \n\t"
-    "beq            %[src],      %[p_loop2_end],    2f         \n\t"
-    " nop                                                      \n\t"
-  "1:                                                          \n\t"
-    "lw             %[temp0],    0(%[src])                     \n\t"
-    "ext            %[temp4],    %[temp0],          8,    16   \n\t"
-    "ext            %[temp5],    %[temp0],          5,    11   \n\t"
-    "ext            %[temp0],    %[temp0],          3,    5    \n\t"
-    "ins            %[temp4],    %[temp5],          0,    11   \n\t"
-    "addiu          %[src],      %[src],            4          \n\t"
-    "ins            %[temp4],    %[temp0],          0,    5    \n\t"
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    "ush            %[temp4],    0(%[dst])                     \n\t"
-#else
-    "wsbh           %[temp4],    %[temp4]                      \n\t"
-    "ush            %[temp4],    0(%[dst])                     \n\t"
-#endif
-    "bne            %[src],      %[p_loop2_end],    1b         \n\t"
-    " addiu         %[dst],      %[dst],            2          \n\t"
-  "2:                                                          \n\t"
-    ".set           pop                                        \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),
-      [dst]"+&r"(dst), [src]"+&r"(src)
-    : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end)
-    : "memory"
-  );
-}
-
-static void ConvertBGRAToBGR_MIPSdspR2(const uint32_t* src,
-                                       int num_pixels, uint8_t* dst) {
-  int temp0, temp1, temp2, temp3;
-  const uint32_t* const p_loop1_end = src + (num_pixels & ~3);
-  const uint32_t* const p_loop2_end = src + num_pixels;
-  __asm__ volatile (
-    ".set       push                                         \n\t"
-    ".set       noreorder                                    \n\t"
-    "beq        %[src],      %[p_loop1_end],    3f           \n\t"
-    " nop                                                    \n\t"
-  "0:                                                        \n\t"
-    "lw         %[temp0],    0(%[src])                       \n\t"
-    "lw         %[temp1],    4(%[src])                       \n\t"
-    "lw         %[temp2],    8(%[src])                       \n\t"
-    "lw         %[temp3],    12(%[src])                      \n\t"
-    "ins        %[temp0],    %[temp1],          24,    8     \n\t"
-    "sra        %[temp1],    %[temp1],          8            \n\t"
-    "ins        %[temp1],    %[temp2],          16,    16    \n\t"
-    "sll        %[temp2],    %[temp2],          8            \n\t"
-    "balign     %[temp3],    %[temp2],          1            \n\t"
-    "addiu      %[src],      %[src],            16           \n\t"
-    "usw        %[temp0],    0(%[dst])                       \n\t"
-    "usw        %[temp1],    4(%[dst])                       \n\t"
-    "usw        %[temp3],    8(%[dst])                       \n\t"
-    "bne        %[src],      %[p_loop1_end],    0b           \n\t"
-    " addiu     %[dst],      %[dst],            12           \n\t"
-  "3:                                                        \n\t"
-    "beq        %[src],      %[p_loop2_end],    2f           \n\t"
-    " nop                                                    \n\t"
-  "1:                                                        \n\t"
-    "lw         %[temp0],    0(%[src])                       \n\t"
-    "addiu      %[src],      %[src],            4            \n\t"
-    "addiu      %[dst],      %[dst],            3            \n\t"
-    "ush        %[temp0],    -3(%[dst])                      \n\t"
-    "sra        %[temp0],    %[temp0],          16           \n\t"
-    "bne        %[src],      %[p_loop2_end],    1b           \n\t"
-    " sb        %[temp0],    -1(%[dst])                      \n\t"
-  "2:                                                        \n\t"
-    ".set       pop                                          \n\t"
-    : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),
-      [temp3]"=&r"(temp3), [dst]"+&r"(dst), [src]"+&r"(src)
-    : [p_loop1_end]"r"(p_loop1_end), [p_loop2_end]"r"(p_loop2_end)
-    : "memory"
-  );
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LDspInitMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitMIPSdspR2(void) {
-  VP8LMapColor32b = MapARGB_MIPSdspR2;
-  VP8LMapColor8b = MapAlpha_MIPSdspR2;
-
-  VP8LPredictors[5] = Predictor5_MIPSdspR2;
-  VP8LPredictors[6] = Predictor6_MIPSdspR2;
-  VP8LPredictors[7] = Predictor7_MIPSdspR2;
-  VP8LPredictors[8] = Predictor8_MIPSdspR2;
-  VP8LPredictors[9] = Predictor9_MIPSdspR2;
-  VP8LPredictors[10] = Predictor10_MIPSdspR2;
-  VP8LPredictors[11] = Predictor11_MIPSdspR2;
-  VP8LPredictors[12] = Predictor12_MIPSdspR2;
-  VP8LPredictors[13] = Predictor13_MIPSdspR2;
-
-  VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed_MIPSdspR2;
-  VP8LTransformColorInverse = TransformColorInverse_MIPSdspR2;
-
-  VP8LConvertBGRAToRGB = ConvertBGRAToRGB_MIPSdspR2;
-  VP8LConvertBGRAToRGBA = ConvertBGRAToRGBA_MIPSdspR2;
-  VP8LConvertBGRAToRGBA4444 = ConvertBGRAToRGBA4444_MIPSdspR2;
-  VP8LConvertBGRAToRGB565 = ConvertBGRAToRGB565_MIPSdspR2;
-  VP8LConvertBGRAToBGR = ConvertBGRAToBGR_MIPSdspR2;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(VP8LDspInitMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/lossless_msa.c b/ios/Pods/libwebp/src/dsp/lossless_msa.c
deleted file mode 100644
index 9f54720..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_msa.c
+++ /dev/null
@@ -1,356 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MSA variant of methods for lossless decoder
-//
-// Author: Prashant Patil (prashant.patil@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MSA)
-
-#include "src/dsp/lossless.h"
-#include "src/dsp/msa_macro.h"
-
-//------------------------------------------------------------------------------
-// Colorspace conversion functions
-
-#define CONVERT16_BGRA_XXX(psrc, pdst, m0, m1, m2) do {    \
-  v16u8 src0, src1, src2, src3, dst0, dst1, dst2;          \
-  LD_UB4(psrc, 16, src0, src1, src2, src3);                \
-  VSHF_B2_UB(src0, src1, src1, src2, m0, m1, dst0, dst1);  \
-  dst2 = VSHF_UB(src2, src3, m2);                          \
-  ST_UB2(dst0, dst1, pdst, 16);                            \
-  ST_UB(dst2, pdst + 32);                                  \
-} while (0)
-
-#define CONVERT12_BGRA_XXX(psrc, pdst, m0, m1, m2) do {    \
-  uint32_t pix_w;                                          \
-  v16u8 src0, src1, src2, dst0, dst1, dst2;                \
-  LD_UB3(psrc, 16, src0, src1, src2);                      \
-  VSHF_B2_UB(src0, src1, src1, src2, m0, m1, dst0, dst1);  \
-  dst2 = VSHF_UB(src2, src2, m2);                          \
-  ST_UB2(dst0, dst1, pdst, 16);                            \
-  pix_w = __msa_copy_s_w((v4i32)dst2, 0);                  \
-  SW(pix_w, pdst + 32);                                    \
-} while (0)
-
-#define CONVERT8_BGRA_XXX(psrc, pdst, m0, m1) do {         \
-  uint64_t pix_d;                                          \
-  v16u8 src0, src1, src2 = { 0 }, dst0, dst1;              \
-  LD_UB2(psrc, 16, src0, src1);                            \
-  VSHF_B2_UB(src0, src1, src1, src2, m0, m1, dst0, dst1);  \
-  ST_UB(dst0, pdst);                                       \
-  pix_d = __msa_copy_s_d((v2i64)dst1, 0);                  \
-  SD(pix_d, pdst + 16);                                    \
-} while (0)
-
-#define CONVERT4_BGRA_XXX(psrc, pdst, m) do {       \
-  const v16u8 src0 = LD_UB(psrc);                   \
-  const v16u8 dst0 = VSHF_UB(src0, src0, m);        \
-  uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0);  \
-  uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 2);  \
-  SD(pix_d, pdst + 0);                              \
-  SW(pix_w, pdst + 8);                              \
-} while (0)
-
-#define CONVERT1_BGRA_BGR(psrc, pdst) do {  \
-  const int32_t b = (psrc)[0];              \
-  const int32_t g = (psrc)[1];              \
-  const int32_t r = (psrc)[2];              \
-  (pdst)[0] = b;                            \
-  (pdst)[1] = g;                            \
-  (pdst)[2] = r;                            \
-} while (0)
-
-#define CONVERT1_BGRA_RGB(psrc, pdst) do {  \
-  const int32_t b = (psrc)[0];              \
-  const int32_t g = (psrc)[1];              \
-  const int32_t r = (psrc)[2];              \
-  (pdst)[0] = r;                            \
-  (pdst)[1] = g;                            \
-  (pdst)[2] = b;                            \
-} while (0)
-
-#define TRANSFORM_COLOR_INVERSE_8(src0, src1, dst0, dst1,     \
-                                  c0, c1, mask0, mask1) do {  \
-  v8i16 g0, g1, t0, t1, t2, t3;                               \
-  v4i32 t4, t5;                                               \
-  VSHF_B2_SH(src0, src0, src1, src1, mask0, mask0, g0, g1);   \
-  DOTP_SB2_SH(g0, g1, c0, c0, t0, t1);                        \
-  SRAI_H2_SH(t0, t1, 5);                                      \
-  t0 = __msa_addv_h(t0, (v8i16)src0);                         \
-  t1 = __msa_addv_h(t1, (v8i16)src1);                         \
-  t4 = __msa_srli_w((v4i32)t0, 16);                           \
-  t5 = __msa_srli_w((v4i32)t1, 16);                           \
-  DOTP_SB2_SH(t4, t5, c1, c1, t2, t3);                        \
-  SRAI_H2_SH(t2, t3, 5);                                      \
-  ADD2(t0, t2, t1, t3, t0, t1);                               \
-  VSHF_B2_UB(src0, t0, src1, t1, mask1, mask1, dst0, dst1);   \
-} while (0)
-
-#define TRANSFORM_COLOR_INVERSE_4(src, dst, c0, c1, mask0, mask1) do {  \
-  const v16i8 g0 = VSHF_SB(src, src, mask0);                            \
-  v8i16 t0 = __msa_dotp_s_h(c0, g0);                                    \
-  v8i16 t1;                                                             \
-  v4i32 t2;                                                             \
-  t0 = SRAI_H(t0, 5);                                                   \
-  t0 = __msa_addv_h(t0, (v8i16)src);                                    \
-  t2 = __msa_srli_w((v4i32)t0, 16);                                     \
-  t1 = __msa_dotp_s_h(c1, (v16i8)t2);                                   \
-  t1 = SRAI_H(t1, 5);                                                   \
-  t0 = t0 + t1;                                                         \
-  dst = VSHF_UB(src, t0, mask1);                                        \
-} while (0)
-
-static void ConvertBGRAToRGBA_MSA(const uint32_t* src,
-                                  int num_pixels, uint8_t* dst) {
-  int i;
-  const uint8_t* ptemp_src = (const uint8_t*)src;
-  uint8_t* ptemp_dst = (uint8_t*)dst;
-  v16u8 src0, dst0;
-  const v16u8 mask = { 2, 1, 0, 3, 6, 5, 4, 7, 10, 9, 8, 11, 14, 13, 12, 15 };
-
-  while (num_pixels >= 8) {
-    v16u8 src1, dst1;
-    LD_UB2(ptemp_src, 16, src0, src1);
-    VSHF_B2_UB(src0, src0, src1, src1, mask, mask, dst0, dst1);
-    ST_UB2(dst0, dst1, ptemp_dst, 16);
-    ptemp_src += 32;
-    ptemp_dst += 32;
-    num_pixels -= 8;
-  }
-  if (num_pixels > 0) {
-    if (num_pixels >= 4) {
-      src0 = LD_UB(ptemp_src);
-      dst0 = VSHF_UB(src0, src0, mask);
-      ST_UB(dst0, ptemp_dst);
-      ptemp_src += 16;
-      ptemp_dst += 16;
-      num_pixels -= 4;
-    }
-    for (i = 0; i < num_pixels; i++) {
-      const uint8_t b = ptemp_src[2];
-      const uint8_t g = ptemp_src[1];
-      const uint8_t r = ptemp_src[0];
-      const uint8_t a = ptemp_src[3];
-      ptemp_dst[0] = b;
-      ptemp_dst[1] = g;
-      ptemp_dst[2] = r;
-      ptemp_dst[3] = a;
-      ptemp_src += 4;
-      ptemp_dst += 4;
-    }
-  }
-}
-
-static void ConvertBGRAToBGR_MSA(const uint32_t* src,
-                                 int num_pixels, uint8_t* dst) {
-  const uint8_t* ptemp_src = (const uint8_t*)src;
-  uint8_t* ptemp_dst = (uint8_t*)dst;
-  const v16u8 mask0 = { 0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14,
-                        16, 17, 18, 20 };
-  const v16u8 mask1 = { 5, 6, 8, 9, 10, 12, 13, 14, 16, 17, 18, 20,
-                        21, 22, 24, 25 };
-  const v16u8 mask2 = { 10, 12, 13, 14, 16, 17, 18, 20, 21, 22, 24, 25,
-                        26, 28, 29, 30 };
-
-  while (num_pixels >= 16) {
-    CONVERT16_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1, mask2);
-    ptemp_src += 64;
-    ptemp_dst += 48;
-    num_pixels -= 16;
-  }
-  if (num_pixels > 0) {
-    if (num_pixels >= 12) {
-      CONVERT12_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1, mask2);
-      ptemp_src += 48;
-      ptemp_dst += 36;
-      num_pixels -= 12;
-    } else if (num_pixels >= 8) {
-      CONVERT8_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1);
-      ptemp_src += 32;
-      ptemp_dst += 24;
-      num_pixels -= 8;
-    } else if (num_pixels >= 4) {
-      CONVERT4_BGRA_XXX(ptemp_src, ptemp_dst, mask0);
-      ptemp_src += 16;
-      ptemp_dst += 12;
-      num_pixels -= 4;
-    }
-    if (num_pixels == 3) {
-      CONVERT1_BGRA_BGR(ptemp_src + 0, ptemp_dst + 0);
-      CONVERT1_BGRA_BGR(ptemp_src + 4, ptemp_dst + 3);
-      CONVERT1_BGRA_BGR(ptemp_src + 8, ptemp_dst + 6);
-    } else if (num_pixels == 2) {
-      CONVERT1_BGRA_BGR(ptemp_src + 0, ptemp_dst + 0);
-      CONVERT1_BGRA_BGR(ptemp_src + 4, ptemp_dst + 3);
-    } else if (num_pixels == 1) {
-      CONVERT1_BGRA_BGR(ptemp_src, ptemp_dst);
-    }
-  }
-}
-
-static void ConvertBGRAToRGB_MSA(const uint32_t* src,
-                                 int num_pixels, uint8_t* dst) {
-  const uint8_t* ptemp_src = (const uint8_t*)src;
-  uint8_t* ptemp_dst = (uint8_t*)dst;
-  const v16u8 mask0 = { 2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12,
-                        18, 17, 16, 22 };
-  const v16u8 mask1 = { 5, 4, 10, 9, 8, 14, 13, 12, 18, 17, 16, 22,
-                        21, 20, 26, 25 };
-  const v16u8 mask2 = { 8, 14, 13, 12, 18, 17, 16, 22, 21, 20, 26, 25,
-                        24, 30, 29, 28 };
-
-  while (num_pixels >= 16) {
-    CONVERT16_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1, mask2);
-    ptemp_src += 64;
-    ptemp_dst += 48;
-    num_pixels -= 16;
-  }
-  if (num_pixels) {
-    if (num_pixels >= 12) {
-      CONVERT12_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1, mask2);
-      ptemp_src += 48;
-      ptemp_dst += 36;
-      num_pixels -= 12;
-    } else if (num_pixels >= 8) {
-      CONVERT8_BGRA_XXX(ptemp_src, ptemp_dst, mask0, mask1);
-      ptemp_src += 32;
-      ptemp_dst += 24;
-      num_pixels -= 8;
-    } else if (num_pixels >= 4) {
-      CONVERT4_BGRA_XXX(ptemp_src, ptemp_dst, mask0);
-      ptemp_src += 16;
-      ptemp_dst += 12;
-      num_pixels -= 4;
-    }
-    if (num_pixels == 3) {
-      CONVERT1_BGRA_RGB(ptemp_src + 0, ptemp_dst + 0);
-      CONVERT1_BGRA_RGB(ptemp_src + 4, ptemp_dst + 3);
-      CONVERT1_BGRA_RGB(ptemp_src + 8, ptemp_dst + 6);
-    } else if (num_pixels == 2) {
-      CONVERT1_BGRA_RGB(ptemp_src + 0, ptemp_dst + 0);
-      CONVERT1_BGRA_RGB(ptemp_src + 4, ptemp_dst + 3);
-    } else if (num_pixels == 1) {
-      CONVERT1_BGRA_RGB(ptemp_src, ptemp_dst);
-    }
-  }
-}
-
-static void AddGreenToBlueAndRed_MSA(const uint32_t* const src, int num_pixels,
-                                     uint32_t* dst) {
-  int i;
-  const uint8_t* in = (const uint8_t*)src;
-  uint8_t* out = (uint8_t*)dst;
-  v16u8 src0, dst0, tmp0;
-  const v16u8 mask = { 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255,
-                       13, 255, 13, 255 };
-
-  while (num_pixels >= 8) {
-    v16u8 src1, dst1, tmp1;
-    LD_UB2(in, 16, src0, src1);
-    VSHF_B2_UB(src0, src1, src1, src0, mask, mask, tmp0, tmp1);
-    ADD2(src0, tmp0, src1, tmp1, dst0, dst1);
-    ST_UB2(dst0, dst1, out, 16);
-    in += 32;
-    out += 32;
-    num_pixels -= 8;
-  }
-  if (num_pixels > 0) {
-    if (num_pixels >= 4) {
-      src0 = LD_UB(in);
-      tmp0 = VSHF_UB(src0, src0, mask);
-      dst0 = src0 + tmp0;
-      ST_UB(dst0, out);
-      in += 16;
-      out += 16;
-      num_pixels -= 4;
-    }
-    for (i = 0; i < num_pixels; i++) {
-      const uint8_t b = in[0];
-      const uint8_t g = in[1];
-      const uint8_t r = in[2];
-      out[0] = (b + g) & 0xff;
-      out[1] = g;
-      out[2] = (r + g) & 0xff;
-      out[4] = in[4];
-      out += 4;
-    }
-  }
-}
-
-static void TransformColorInverse_MSA(const VP8LMultipliers* const m,
-                                      const uint32_t* src, int num_pixels,
-                                      uint32_t* dst) {
-  v16u8 src0, dst0;
-  const v16i8 g2br = (v16i8)__msa_fill_w(m->green_to_blue_ |
-                                         (m->green_to_red_ << 16));
-  const v16i8 r2b = (v16i8)__msa_fill_w(m->red_to_blue_);
-  const v16u8 mask0 = { 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255,
-                        13, 255, 13, 255 };
-  const v16u8 mask1 = { 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11,
-                        28, 13, 30, 15 };
-
-  while (num_pixels >= 8) {
-    v16u8 src1, dst1;
-    LD_UB2(src, 4, src0, src1);
-    TRANSFORM_COLOR_INVERSE_8(src0, src1, dst0, dst1, g2br, r2b, mask0, mask1);
-    ST_UB2(dst0, dst1, dst, 4);
-    src += 8;
-    dst += 8;
-    num_pixels -= 8;
-  }
-  if (num_pixels > 0) {
-    if (num_pixels >= 4) {
-      src0 = LD_UB(src);
-      TRANSFORM_COLOR_INVERSE_4(src0, dst0, g2br, r2b, mask0, mask1);
-      ST_UB(dst0, dst);
-      src += 4;
-      dst += 4;
-      num_pixels -= 4;
-    }
-    if (num_pixels > 0) {
-      src0 = LD_UB(src);
-      TRANSFORM_COLOR_INVERSE_4(src0, dst0, g2br, r2b, mask0, mask1);
-      if (num_pixels == 3) {
-        const uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0);
-        const uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 2);
-        SD(pix_d, dst + 0);
-        SW(pix_w, dst + 2);
-      } else if (num_pixels == 2) {
-        const uint64_t pix_d = __msa_copy_s_d((v2i64)dst0, 0);
-        SD(pix_d, dst);
-      } else {
-        const uint32_t pix_w = __msa_copy_s_w((v4i32)dst0, 0);
-        SW(pix_w, dst);
-      }
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LDspInitMSA(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitMSA(void) {
-  VP8LConvertBGRAToRGBA = ConvertBGRAToRGBA_MSA;
-  VP8LConvertBGRAToBGR = ConvertBGRAToBGR_MSA;
-  VP8LConvertBGRAToRGB = ConvertBGRAToRGB_MSA;
-
-  VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed_MSA;
-  VP8LTransformColorInverse = TransformColorInverse_MSA;
-}
-
-#else  // !WEBP_USE_MSA
-
-WEBP_DSP_INIT_STUB(VP8LDspInitMSA)
-
-#endif  // WEBP_USE_MSA
diff --git a/ios/Pods/libwebp/src/dsp/lossless_neon.c b/ios/Pods/libwebp/src/dsp/lossless_neon.c
deleted file mode 100644
index 76a1b6f..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_neon.c
+++ /dev/null
@@ -1,641 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// NEON variant of methods for lossless decoder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include <arm_neon.h>
-
-#include "src/dsp/lossless.h"
-#include "src/dsp/neon.h"
-
-//------------------------------------------------------------------------------
-// Colorspace conversion functions
-
-#if !defined(WORK_AROUND_GCC)
-// gcc 4.6.0 had some trouble (NDK-r9) with this code. We only use it for
-// gcc-4.8.x at least.
-static void ConvertBGRAToRGBA_NEON(const uint32_t* src,
-                                   int num_pixels, uint8_t* dst) {
-  const uint32_t* const end = src + (num_pixels & ~15);
-  for (; src < end; src += 16) {
-    uint8x16x4_t pixel = vld4q_u8((uint8_t*)src);
-    // swap B and R. (VSWP d0,d2 has no intrinsics equivalent!)
-    const uint8x16_t tmp = pixel.val[0];
-    pixel.val[0] = pixel.val[2];
-    pixel.val[2] = tmp;
-    vst4q_u8(dst, pixel);
-    dst += 64;
-  }
-  VP8LConvertBGRAToRGBA_C(src, num_pixels & 15, dst);  // left-overs
-}
-
-static void ConvertBGRAToBGR_NEON(const uint32_t* src,
-                                  int num_pixels, uint8_t* dst) {
-  const uint32_t* const end = src + (num_pixels & ~15);
-  for (; src < end; src += 16) {
-    const uint8x16x4_t pixel = vld4q_u8((uint8_t*)src);
-    const uint8x16x3_t tmp = { { pixel.val[0], pixel.val[1], pixel.val[2] } };
-    vst3q_u8(dst, tmp);
-    dst += 48;
-  }
-  VP8LConvertBGRAToBGR_C(src, num_pixels & 15, dst);  // left-overs
-}
-
-static void ConvertBGRAToRGB_NEON(const uint32_t* src,
-                                  int num_pixels, uint8_t* dst) {
-  const uint32_t* const end = src + (num_pixels & ~15);
-  for (; src < end; src += 16) {
-    const uint8x16x4_t pixel = vld4q_u8((uint8_t*)src);
-    const uint8x16x3_t tmp = { { pixel.val[2], pixel.val[1], pixel.val[0] } };
-    vst3q_u8(dst, tmp);
-    dst += 48;
-  }
-  VP8LConvertBGRAToRGB_C(src, num_pixels & 15, dst);  // left-overs
-}
-
-#else  // WORK_AROUND_GCC
-
-// gcc-4.6.0 fallback
-
-static const uint8_t kRGBAShuffle[8] = { 2, 1, 0, 3, 6, 5, 4, 7 };
-
-static void ConvertBGRAToRGBA_NEON(const uint32_t* src,
-                                   int num_pixels, uint8_t* dst) {
-  const uint32_t* const end = src + (num_pixels & ~1);
-  const uint8x8_t shuffle = vld1_u8(kRGBAShuffle);
-  for (; src < end; src += 2) {
-    const uint8x8_t pixels = vld1_u8((uint8_t*)src);
-    vst1_u8(dst, vtbl1_u8(pixels, shuffle));
-    dst += 8;
-  }
-  VP8LConvertBGRAToRGBA_C(src, num_pixels & 1, dst);  // left-overs
-}
-
-static const uint8_t kBGRShuffle[3][8] = {
-  {  0,  1,  2,  4,  5,  6,  8,  9 },
-  { 10, 12, 13, 14, 16, 17, 18, 20 },
-  { 21, 22, 24, 25, 26, 28, 29, 30 }
-};
-
-static void ConvertBGRAToBGR_NEON(const uint32_t* src,
-                                  int num_pixels, uint8_t* dst) {
-  const uint32_t* const end = src + (num_pixels & ~7);
-  const uint8x8_t shuffle0 = vld1_u8(kBGRShuffle[0]);
-  const uint8x8_t shuffle1 = vld1_u8(kBGRShuffle[1]);
-  const uint8x8_t shuffle2 = vld1_u8(kBGRShuffle[2]);
-  for (; src < end; src += 8) {
-    uint8x8x4_t pixels;
-    INIT_VECTOR4(pixels,
-                 vld1_u8((const uint8_t*)(src + 0)),
-                 vld1_u8((const uint8_t*)(src + 2)),
-                 vld1_u8((const uint8_t*)(src + 4)),
-                 vld1_u8((const uint8_t*)(src + 6)));
-    vst1_u8(dst +  0, vtbl4_u8(pixels, shuffle0));
-    vst1_u8(dst +  8, vtbl4_u8(pixels, shuffle1));
-    vst1_u8(dst + 16, vtbl4_u8(pixels, shuffle2));
-    dst += 8 * 3;
-  }
-  VP8LConvertBGRAToBGR_C(src, num_pixels & 7, dst);  // left-overs
-}
-
-static const uint8_t kRGBShuffle[3][8] = {
-  {  2,  1,  0,  6,  5,  4, 10,  9 },
-  {  8, 14, 13, 12, 18, 17, 16, 22 },
-  { 21, 20, 26, 25, 24, 30, 29, 28 }
-};
-
-static void ConvertBGRAToRGB_NEON(const uint32_t* src,
-                                  int num_pixels, uint8_t* dst) {
-  const uint32_t* const end = src + (num_pixels & ~7);
-  const uint8x8_t shuffle0 = vld1_u8(kRGBShuffle[0]);
-  const uint8x8_t shuffle1 = vld1_u8(kRGBShuffle[1]);
-  const uint8x8_t shuffle2 = vld1_u8(kRGBShuffle[2]);
-  for (; src < end; src += 8) {
-    uint8x8x4_t pixels;
-    INIT_VECTOR4(pixels,
-                 vld1_u8((const uint8_t*)(src + 0)),
-                 vld1_u8((const uint8_t*)(src + 2)),
-                 vld1_u8((const uint8_t*)(src + 4)),
-                 vld1_u8((const uint8_t*)(src + 6)));
-    vst1_u8(dst +  0, vtbl4_u8(pixels, shuffle0));
-    vst1_u8(dst +  8, vtbl4_u8(pixels, shuffle1));
-    vst1_u8(dst + 16, vtbl4_u8(pixels, shuffle2));
-    dst += 8 * 3;
-  }
-  VP8LConvertBGRAToRGB_C(src, num_pixels & 7, dst);  // left-overs
-}
-
-#endif   // !WORK_AROUND_GCC
-
-//------------------------------------------------------------------------------
-// Predictor Transform
-
-#define LOAD_U32_AS_U8(IN) vreinterpret_u8_u32(vdup_n_u32((IN)))
-#define LOAD_U32P_AS_U8(IN) vreinterpret_u8_u32(vld1_u32((IN)))
-#define LOADQ_U32_AS_U8(IN) vreinterpretq_u8_u32(vdupq_n_u32((IN)))
-#define LOADQ_U32P_AS_U8(IN) vreinterpretq_u8_u32(vld1q_u32((IN)))
-#define GET_U8_AS_U32(IN) vget_lane_u32(vreinterpret_u32_u8((IN)), 0);
-#define GETQ_U8_AS_U32(IN) vgetq_lane_u32(vreinterpretq_u32_u8((IN)), 0);
-#define STOREQ_U8_AS_U32P(OUT, IN) vst1q_u32((OUT), vreinterpretq_u32_u8((IN)));
-#define ROTATE32_LEFT(L) vextq_u8((L), (L), 12)    // D|C|B|A -> C|B|A|D
-
-static WEBP_INLINE uint8x8_t Average2_u8_NEON(uint32_t a0, uint32_t a1) {
-  const uint8x8_t A0 = LOAD_U32_AS_U8(a0);
-  const uint8x8_t A1 = LOAD_U32_AS_U8(a1);
-  return vhadd_u8(A0, A1);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractHalf_NEON(uint32_t c0,
-                                                        uint32_t c1,
-                                                        uint32_t c2) {
-  const uint8x8_t avg = Average2_u8_NEON(c0, c1);
-  // Remove one to c2 when bigger than avg.
-  const uint8x8_t C2 = LOAD_U32_AS_U8(c2);
-  const uint8x8_t cmp = vcgt_u8(C2, avg);
-  const uint8x8_t C2_1 = vadd_u8(C2, cmp);
-  // Compute half of the difference between avg and c2.
-  const int8x8_t diff_avg = vreinterpret_s8_u8(vhsub_u8(avg, C2_1));
-  // Compute the sum with avg and saturate.
-  const int16x8_t avg_16 = vreinterpretq_s16_u16(vmovl_u8(avg));
-  const uint8x8_t res = vqmovun_s16(vaddw_s8(avg_16, diff_avg));
-  const uint32_t output = GET_U8_AS_U32(res);
-  return output;
-}
-
-static WEBP_INLINE uint32_t Average2_NEON(uint32_t a0, uint32_t a1) {
-  const uint8x8_t avg_u8x8 = Average2_u8_NEON(a0, a1);
-  const uint32_t avg = GET_U8_AS_U32(avg_u8x8);
-  return avg;
-}
-
-static WEBP_INLINE uint32_t Average3_NEON(uint32_t a0, uint32_t a1,
-                                          uint32_t a2) {
-  const uint8x8_t avg0 = Average2_u8_NEON(a0, a2);
-  const uint8x8_t A1 = LOAD_U32_AS_U8(a1);
-  const uint32_t avg = GET_U8_AS_U32(vhadd_u8(avg0, A1));
-  return avg;
-}
-
-static uint32_t Predictor5_NEON(uint32_t left, const uint32_t* const top) {
-  return Average3_NEON(left, top[0], top[1]);
-}
-static uint32_t Predictor6_NEON(uint32_t left, const uint32_t* const top) {
-  return Average2_NEON(left, top[-1]);
-}
-static uint32_t Predictor7_NEON(uint32_t left, const uint32_t* const top) {
-  return Average2_NEON(left, top[0]);
-}
-static uint32_t Predictor13_NEON(uint32_t left, const uint32_t* const top) {
-  return ClampedAddSubtractHalf_NEON(left, top[0], top[-1]);
-}
-
-// Batch versions of those functions.
-
-// Predictor0: ARGB_BLACK.
-static void PredictorAdd0_NEON(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  const uint8x16_t black = vreinterpretq_u8_u32(vdupq_n_u32(ARGB_BLACK));
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    const uint8x16_t res = vaddq_u8(src, black);
-    STOREQ_U8_AS_U32P(&out[i], res);
-  }
-  VP8LPredictorsAdd_C[0](in + i, upper + i, num_pixels - i, out + i);
-}
-
-// Predictor1: left.
-static void PredictorAdd1_NEON(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  const uint8x16_t zero = LOADQ_U32_AS_U8(0);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    // a | b | c | d
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    // 0 | a | b | c
-    const uint8x16_t shift0 = vextq_u8(zero, src, 12);
-    // a | a + b | b + c | c + d
-    const uint8x16_t sum0 = vaddq_u8(src, shift0);
-    // 0 | 0 | a | a + b
-    const uint8x16_t shift1 = vextq_u8(zero, sum0, 8);
-    // a | a + b | a + b + c | a + b + c + d
-    const uint8x16_t sum1 = vaddq_u8(sum0, shift1);
-    const uint8x16_t prev = LOADQ_U32_AS_U8(out[i - 1]);
-    const uint8x16_t res = vaddq_u8(sum1, prev);
-    STOREQ_U8_AS_U32P(&out[i], res);
-  }
-  VP8LPredictorsAdd_C[1](in + i, upper + i, num_pixels - i, out + i);
-}
-
-// Macro that adds 32-bit integers from IN using mod 256 arithmetic
-// per 8 bit channel.
-#define GENERATE_PREDICTOR_1(X, IN)                                       \
-static void PredictorAdd##X##_NEON(const uint32_t* in,                    \
-                                   const uint32_t* upper, int num_pixels, \
-                                   uint32_t* out) {                       \
-  int i;                                                                  \
-  for (i = 0; i + 4 <= num_pixels; i += 4) {                              \
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);                      \
-    const uint8x16_t other = LOADQ_U32P_AS_U8(&(IN));                     \
-    const uint8x16_t res = vaddq_u8(src, other);                          \
-    STOREQ_U8_AS_U32P(&out[i], res);                                      \
-  }                                                                       \
-  VP8LPredictorsAdd_C[(X)](in + i, upper + i, num_pixels - i, out + i);   \
-}
-// Predictor2: Top.
-GENERATE_PREDICTOR_1(2, upper[i])
-// Predictor3: Top-right.
-GENERATE_PREDICTOR_1(3, upper[i + 1])
-// Predictor4: Top-left.
-GENERATE_PREDICTOR_1(4, upper[i - 1])
-#undef GENERATE_PREDICTOR_1
-
-// Predictor5: average(average(left, TR), T)
-#define DO_PRED5(LANE) do {                                              \
-  const uint8x16_t avgLTR = vhaddq_u8(L, TR);                            \
-  const uint8x16_t avg = vhaddq_u8(avgLTR, T);                           \
-  const uint8x16_t res = vaddq_u8(avg, src);                             \
-  vst1q_lane_u32(&out[i + (LANE)], vreinterpretq_u32_u8(res), (LANE));   \
-  L = ROTATE32_LEFT(res);                                                \
-} while (0)
-
-static void PredictorAdd5_NEON(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  uint8x16_t L = LOADQ_U32_AS_U8(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i + 0]);
-    const uint8x16_t TR = LOADQ_U32P_AS_U8(&upper[i + 1]);
-    DO_PRED5(0);
-    DO_PRED5(1);
-    DO_PRED5(2);
-    DO_PRED5(3);
-  }
-  VP8LPredictorsAdd_C[5](in + i, upper + i, num_pixels - i, out + i);
-}
-#undef DO_PRED5
-
-#define DO_PRED67(LANE) do {                                             \
-  const uint8x16_t avg = vhaddq_u8(L, top);                              \
-  const uint8x16_t res = vaddq_u8(avg, src);                             \
-  vst1q_lane_u32(&out[i + (LANE)], vreinterpretq_u32_u8(res), (LANE));   \
-  L = ROTATE32_LEFT(res);                                                \
-} while (0)
-
-// Predictor6: average(left, TL)
-static void PredictorAdd6_NEON(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  uint8x16_t L = LOADQ_U32_AS_U8(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    const uint8x16_t top = LOADQ_U32P_AS_U8(&upper[i - 1]);
-    DO_PRED67(0);
-    DO_PRED67(1);
-    DO_PRED67(2);
-    DO_PRED67(3);
-  }
-  VP8LPredictorsAdd_C[6](in + i, upper + i, num_pixels - i, out + i);
-}
-
-// Predictor7: average(left, T)
-static void PredictorAdd7_NEON(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  uint8x16_t L = LOADQ_U32_AS_U8(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    const uint8x16_t top = LOADQ_U32P_AS_U8(&upper[i]);
-    DO_PRED67(0);
-    DO_PRED67(1);
-    DO_PRED67(2);
-    DO_PRED67(3);
-  }
-  VP8LPredictorsAdd_C[7](in + i, upper + i, num_pixels - i, out + i);
-}
-#undef DO_PRED67
-
-#define GENERATE_PREDICTOR_2(X, IN)                                       \
-static void PredictorAdd##X##_NEON(const uint32_t* in,                    \
-                                   const uint32_t* upper, int num_pixels, \
-                                   uint32_t* out) {                       \
-  int i;                                                                  \
-  for (i = 0; i + 4 <= num_pixels; i += 4) {                              \
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);                      \
-    const uint8x16_t Tother = LOADQ_U32P_AS_U8(&(IN));                    \
-    const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]);                     \
-    const uint8x16_t avg = vhaddq_u8(T, Tother);                          \
-    const uint8x16_t res = vaddq_u8(avg, src);                            \
-    STOREQ_U8_AS_U32P(&out[i], res);                                      \
-  }                                                                       \
-  VP8LPredictorsAdd_C[(X)](in + i, upper + i, num_pixels - i, out + i);   \
-}
-// Predictor8: average TL T.
-GENERATE_PREDICTOR_2(8, upper[i - 1])
-// Predictor9: average T TR.
-GENERATE_PREDICTOR_2(9, upper[i + 1])
-#undef GENERATE_PREDICTOR_2
-
-// Predictor10: average of (average of (L,TL), average of (T, TR)).
-#define DO_PRED10(LANE) do {                                             \
-  const uint8x16_t avgLTL = vhaddq_u8(L, TL);                            \
-  const uint8x16_t avg = vhaddq_u8(avgTTR, avgLTL);                      \
-  const uint8x16_t res = vaddq_u8(avg, src);                             \
-  vst1q_lane_u32(&out[i + (LANE)], vreinterpretq_u32_u8(res), (LANE));   \
-  L = ROTATE32_LEFT(res);                                                \
-} while (0)
-
-static void PredictorAdd10_NEON(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  uint8x16_t L = LOADQ_U32_AS_U8(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    const uint8x16_t TL = LOADQ_U32P_AS_U8(&upper[i - 1]);
-    const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]);
-    const uint8x16_t TR = LOADQ_U32P_AS_U8(&upper[i + 1]);
-    const uint8x16_t avgTTR = vhaddq_u8(T, TR);
-    DO_PRED10(0);
-    DO_PRED10(1);
-    DO_PRED10(2);
-    DO_PRED10(3);
-  }
-  VP8LPredictorsAdd_C[10](in + i, upper + i, num_pixels - i, out + i);
-}
-#undef DO_PRED10
-
-// Predictor11: select.
-#define DO_PRED11(LANE) do {                                                   \
-  const uint8x16_t sumLin = vaddq_u8(L, src);  /* in + L */                    \
-  const uint8x16_t pLTL = vabdq_u8(L, TL);  /* |L - TL| */                     \
-  const uint16x8_t sum_LTL = vpaddlq_u8(pLTL);                                 \
-  const uint32x4_t pa = vpaddlq_u16(sum_LTL);                                  \
-  const uint32x4_t mask = vcleq_u32(pa, pb);                                   \
-  const uint8x16_t res = vbslq_u8(vreinterpretq_u8_u32(mask), sumTin, sumLin); \
-  vst1q_lane_u32(&out[i + (LANE)], vreinterpretq_u32_u8(res), (LANE));         \
-  L = ROTATE32_LEFT(res);                                                      \
-} while (0)
-
-static void PredictorAdd11_NEON(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  uint8x16_t L = LOADQ_U32_AS_U8(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]);
-    const uint8x16_t TL = LOADQ_U32P_AS_U8(&upper[i - 1]);
-    const uint8x16_t pTTL = vabdq_u8(T, TL);   // |T - TL|
-    const uint16x8_t sum_TTL = vpaddlq_u8(pTTL);
-    const uint32x4_t pb = vpaddlq_u16(sum_TTL);
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    const uint8x16_t sumTin = vaddq_u8(T, src);   // in + T
-    DO_PRED11(0);
-    DO_PRED11(1);
-    DO_PRED11(2);
-    DO_PRED11(3);
-  }
-  VP8LPredictorsAdd_C[11](in + i, upper + i, num_pixels - i, out + i);
-}
-#undef DO_PRED11
-
-// Predictor12: ClampedAddSubtractFull.
-#define DO_PRED12(DIFF, LANE) do {                                       \
-  const uint8x8_t pred =                                                 \
-      vqmovun_s16(vaddq_s16(vreinterpretq_s16_u16(L), (DIFF)));          \
-  const uint8x8_t res =                                                  \
-      vadd_u8(pred, (LANE <= 1) ? vget_low_u8(src) : vget_high_u8(src)); \
-  const uint16x8_t res16 = vmovl_u8(res);                                \
-  vst1_lane_u32(&out[i + (LANE)], vreinterpret_u32_u8(res), (LANE) & 1); \
-  /* rotate in the left predictor for next iteration */                  \
-  L = vextq_u16(res16, res16, 4);                                        \
-} while (0)
-
-static void PredictorAdd12_NEON(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  uint16x8_t L = vmovl_u8(LOAD_U32_AS_U8(out[-1]));
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    // load four pixels of source
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    // precompute the difference T - TL once for all, stored as s16
-    const uint8x16_t TL = LOADQ_U32P_AS_U8(&upper[i - 1]);
-    const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]);
-    const int16x8_t diff_lo =
-        vreinterpretq_s16_u16(vsubl_u8(vget_low_u8(T), vget_low_u8(TL)));
-    const int16x8_t diff_hi =
-        vreinterpretq_s16_u16(vsubl_u8(vget_high_u8(T), vget_high_u8(TL)));
-    // loop over the four reconstructed pixels
-    DO_PRED12(diff_lo, 0);
-    DO_PRED12(diff_lo, 1);
-    DO_PRED12(diff_hi, 2);
-    DO_PRED12(diff_hi, 3);
-  }
-  VP8LPredictorsAdd_C[12](in + i, upper + i, num_pixels - i, out + i);
-}
-#undef DO_PRED12
-
-// Predictor13: ClampedAddSubtractHalf
-#define DO_PRED13(LANE, LOW_OR_HI) do {                                        \
-  const uint8x16_t avg = vhaddq_u8(L, T);                                      \
-  const uint8x16_t cmp = vcgtq_u8(TL, avg);                                    \
-  const uint8x16_t TL_1 = vaddq_u8(TL, cmp);                                   \
-  /* Compute half of the difference between avg and TL'. */                    \
-  const int8x8_t diff_avg =                                                    \
-      vreinterpret_s8_u8(LOW_OR_HI(vhsubq_u8(avg, TL_1)));                     \
-  /* Compute the sum with avg and saturate. */                                 \
-  const int16x8_t avg_16 = vreinterpretq_s16_u16(vmovl_u8(LOW_OR_HI(avg)));    \
-  const uint8x8_t delta = vqmovun_s16(vaddw_s8(avg_16, diff_avg));             \
-  const uint8x8_t res = vadd_u8(LOW_OR_HI(src), delta);                        \
-  const uint8x16_t res2 = vcombine_u8(res, res);                               \
-  vst1_lane_u32(&out[i + (LANE)], vreinterpret_u32_u8(res), (LANE) & 1);       \
-  L = ROTATE32_LEFT(res2);                                                     \
-} while (0)
-
-static void PredictorAdd13_NEON(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  uint8x16_t L = LOADQ_U32_AS_U8(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t src = LOADQ_U32P_AS_U8(&in[i]);
-    const uint8x16_t T = LOADQ_U32P_AS_U8(&upper[i]);
-    const uint8x16_t TL = LOADQ_U32P_AS_U8(&upper[i - 1]);
-    DO_PRED13(0, vget_low_u8);
-    DO_PRED13(1, vget_low_u8);
-    DO_PRED13(2, vget_high_u8);
-    DO_PRED13(3, vget_high_u8);
-  }
-  VP8LPredictorsAdd_C[13](in + i, upper + i, num_pixels - i, out + i);
-}
-#undef DO_PRED13
-
-#undef LOAD_U32_AS_U8
-#undef LOAD_U32P_AS_U8
-#undef LOADQ_U32_AS_U8
-#undef LOADQ_U32P_AS_U8
-#undef GET_U8_AS_U32
-#undef GETQ_U8_AS_U32
-#undef STOREQ_U8_AS_U32P
-#undef ROTATE32_LEFT
-
-//------------------------------------------------------------------------------
-// Subtract-Green Transform
-
-// vtbl?_u8 are marked unavailable for iOS arm64 with Xcode < 6.3, use
-// non-standard versions there.
-#if defined(__APPLE__) && defined(__aarch64__) && \
-    defined(__apple_build_version__) && (__apple_build_version__< 6020037)
-#define USE_VTBLQ
-#endif
-
-#ifdef USE_VTBLQ
-// 255 = byte will be zeroed
-static const uint8_t kGreenShuffle[16] = {
-  1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, 13, 255, 13, 255
-};
-
-static WEBP_INLINE uint8x16_t DoGreenShuffle_NEON(const uint8x16_t argb,
-                                                  const uint8x16_t shuffle) {
-  return vcombine_u8(vtbl1q_u8(argb, vget_low_u8(shuffle)),
-                     vtbl1q_u8(argb, vget_high_u8(shuffle)));
-}
-#else  // !USE_VTBLQ
-// 255 = byte will be zeroed
-static const uint8_t kGreenShuffle[8] = { 1, 255, 1, 255, 5, 255, 5, 255  };
-
-static WEBP_INLINE uint8x16_t DoGreenShuffle_NEON(const uint8x16_t argb,
-                                                  const uint8x8_t shuffle) {
-  return vcombine_u8(vtbl1_u8(vget_low_u8(argb), shuffle),
-                     vtbl1_u8(vget_high_u8(argb), shuffle));
-}
-#endif  // USE_VTBLQ
-
-static void AddGreenToBlueAndRed_NEON(const uint32_t* src, int num_pixels,
-                                      uint32_t* dst) {
-  const uint32_t* const end = src + (num_pixels & ~3);
-#ifdef USE_VTBLQ
-  const uint8x16_t shuffle = vld1q_u8(kGreenShuffle);
-#else
-  const uint8x8_t shuffle = vld1_u8(kGreenShuffle);
-#endif
-  for (; src < end; src += 4, dst += 4) {
-    const uint8x16_t argb = vld1q_u8((const uint8_t*)src);
-    const uint8x16_t greens = DoGreenShuffle_NEON(argb, shuffle);
-    vst1q_u8((uint8_t*)dst, vaddq_u8(argb, greens));
-  }
-  // fallthrough and finish off with plain-C
-  VP8LAddGreenToBlueAndRed_C(src, num_pixels & 3, dst);
-}
-
-//------------------------------------------------------------------------------
-// Color Transform
-
-static void TransformColorInverse_NEON(const VP8LMultipliers* const m,
-                                       const uint32_t* const src,
-                                       int num_pixels, uint32_t* dst) {
-// sign-extended multiplying constants, pre-shifted by 6.
-#define CST(X)  (((int16_t)(m->X << 8)) >> 6)
-  const int16_t rb[8] = {
-    CST(green_to_blue_), CST(green_to_red_),
-    CST(green_to_blue_), CST(green_to_red_),
-    CST(green_to_blue_), CST(green_to_red_),
-    CST(green_to_blue_), CST(green_to_red_)
-  };
-  const int16x8_t mults_rb = vld1q_s16(rb);
-  const int16_t b2[8] = {
-    0, CST(red_to_blue_), 0, CST(red_to_blue_),
-    0, CST(red_to_blue_), 0, CST(red_to_blue_),
-  };
-  const int16x8_t mults_b2 = vld1q_s16(b2);
-#undef CST
-#ifdef USE_VTBLQ
-  static const uint8_t kg0g0[16] = {
-    255, 1, 255, 1, 255, 5, 255, 5, 255, 9, 255, 9, 255, 13, 255, 13
-  };
-  const uint8x16_t shuffle = vld1q_u8(kg0g0);
-#else
-  static const uint8_t k0g0g[8] = { 255, 1, 255, 1, 255, 5, 255, 5 };
-  const uint8x8_t shuffle = vld1_u8(k0g0g);
-#endif
-  const uint32x4_t mask_ag = vdupq_n_u32(0xff00ff00u);
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const uint8x16_t in = vld1q_u8((const uint8_t*)(src + i));
-    const uint32x4_t a0g0 = vandq_u32(vreinterpretq_u32_u8(in), mask_ag);
-    // 0 g 0 g
-    const uint8x16_t greens = DoGreenShuffle_NEON(in, shuffle);
-    // x dr  x db1
-    const int16x8_t A = vqdmulhq_s16(vreinterpretq_s16_u8(greens), mults_rb);
-    // x r'  x   b'
-    const int8x16_t B = vaddq_s8(vreinterpretq_s8_u8(in),
-                                 vreinterpretq_s8_s16(A));
-    // r' 0   b' 0
-    const int16x8_t C = vshlq_n_s16(vreinterpretq_s16_s8(B), 8);
-    // x db2  0  0
-    const int16x8_t D = vqdmulhq_s16(C, mults_b2);
-    // 0  x db2  0
-    const uint32x4_t E = vshrq_n_u32(vreinterpretq_u32_s16(D), 8);
-    // r' x  b'' 0
-    const int8x16_t F = vaddq_s8(vreinterpretq_s8_u32(E),
-                                 vreinterpretq_s8_s16(C));
-    // 0  r'  0  b''
-    const uint16x8_t G = vshrq_n_u16(vreinterpretq_u16_s8(F), 8);
-    const uint32x4_t out = vorrq_u32(vreinterpretq_u32_u16(G), a0g0);
-    vst1q_u32(dst + i, out);
-  }
-  // Fall-back to C-version for left-overs.
-  VP8LTransformColorInverse_C(m, src + i, num_pixels - i, dst + i);
-}
-
-#undef USE_VTBLQ
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LDspInitNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitNEON(void) {
-  VP8LPredictors[5] = Predictor5_NEON;
-  VP8LPredictors[6] = Predictor6_NEON;
-  VP8LPredictors[7] = Predictor7_NEON;
-  VP8LPredictors[13] = Predictor13_NEON;
-
-  VP8LPredictorsAdd[0] = PredictorAdd0_NEON;
-  VP8LPredictorsAdd[1] = PredictorAdd1_NEON;
-  VP8LPredictorsAdd[2] = PredictorAdd2_NEON;
-  VP8LPredictorsAdd[3] = PredictorAdd3_NEON;
-  VP8LPredictorsAdd[4] = PredictorAdd4_NEON;
-  VP8LPredictorsAdd[5] = PredictorAdd5_NEON;
-  VP8LPredictorsAdd[6] = PredictorAdd6_NEON;
-  VP8LPredictorsAdd[7] = PredictorAdd7_NEON;
-  VP8LPredictorsAdd[8] = PredictorAdd8_NEON;
-  VP8LPredictorsAdd[9] = PredictorAdd9_NEON;
-  VP8LPredictorsAdd[10] = PredictorAdd10_NEON;
-  VP8LPredictorsAdd[11] = PredictorAdd11_NEON;
-  VP8LPredictorsAdd[12] = PredictorAdd12_NEON;
-  VP8LPredictorsAdd[13] = PredictorAdd13_NEON;
-
-  VP8LConvertBGRAToRGBA = ConvertBGRAToRGBA_NEON;
-  VP8LConvertBGRAToBGR = ConvertBGRAToBGR_NEON;
-  VP8LConvertBGRAToRGB = ConvertBGRAToRGB_NEON;
-
-  VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed_NEON;
-  VP8LTransformColorInverse = TransformColorInverse_NEON;
-}
-
-#else  // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(VP8LDspInitNEON)
-
-#endif  // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/lossless_sse2.c b/ios/Pods/libwebp/src/dsp/lossless_sse2.c
deleted file mode 100644
index 17d7576..0000000
--- a/ios/Pods/libwebp/src/dsp/lossless_sse2.c
+++ /dev/null
@@ -1,707 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 variant of methods for lossless decoder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-
-#include "src/dsp/common_sse2.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-#include <assert.h>
-#include <emmintrin.h>
-
-//------------------------------------------------------------------------------
-// Predictor Transform
-
-static WEBP_INLINE uint32_t ClampedAddSubtractFull_SSE2(uint32_t c0,
-                                                        uint32_t c1,
-                                                        uint32_t c2) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i C0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c0), zero);
-  const __m128i C1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c1), zero);
-  const __m128i C2 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c2), zero);
-  const __m128i V1 = _mm_add_epi16(C0, C1);
-  const __m128i V2 = _mm_sub_epi16(V1, C2);
-  const __m128i b = _mm_packus_epi16(V2, V2);
-  const uint32_t output = _mm_cvtsi128_si32(b);
-  return output;
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractHalf_SSE2(uint32_t c0,
-                                                        uint32_t c1,
-                                                        uint32_t c2) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i C0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c0), zero);
-  const __m128i C1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c1), zero);
-  const __m128i B0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(c2), zero);
-  const __m128i avg = _mm_add_epi16(C1, C0);
-  const __m128i A0 = _mm_srli_epi16(avg, 1);
-  const __m128i A1 = _mm_sub_epi16(A0, B0);
-  const __m128i BgtA = _mm_cmpgt_epi16(B0, A0);
-  const __m128i A2 = _mm_sub_epi16(A1, BgtA);
-  const __m128i A3 = _mm_srai_epi16(A2, 1);
-  const __m128i A4 = _mm_add_epi16(A0, A3);
-  const __m128i A5 = _mm_packus_epi16(A4, A4);
-  const uint32_t output = _mm_cvtsi128_si32(A5);
-  return output;
-}
-
-static WEBP_INLINE uint32_t Select_SSE2(uint32_t a, uint32_t b, uint32_t c) {
-  int pa_minus_pb;
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i A0 = _mm_cvtsi32_si128(a);
-  const __m128i B0 = _mm_cvtsi32_si128(b);
-  const __m128i C0 = _mm_cvtsi32_si128(c);
-  const __m128i AC0 = _mm_subs_epu8(A0, C0);
-  const __m128i CA0 = _mm_subs_epu8(C0, A0);
-  const __m128i BC0 = _mm_subs_epu8(B0, C0);
-  const __m128i CB0 = _mm_subs_epu8(C0, B0);
-  const __m128i AC = _mm_or_si128(AC0, CA0);
-  const __m128i BC = _mm_or_si128(BC0, CB0);
-  const __m128i pa = _mm_unpacklo_epi8(AC, zero);  // |a - c|
-  const __m128i pb = _mm_unpacklo_epi8(BC, zero);  // |b - c|
-  const __m128i diff = _mm_sub_epi16(pb, pa);
-  {
-    int16_t out[8];
-    _mm_storeu_si128((__m128i*)out, diff);
-    pa_minus_pb = out[0] + out[1] + out[2] + out[3];
-  }
-  return (pa_minus_pb <= 0) ? a : b;
-}
-
-static WEBP_INLINE void Average2_m128i(const __m128i* const a0,
-                                       const __m128i* const a1,
-                                       __m128i* const avg) {
-  // (a + b) >> 1 = ((a + b + 1) >> 1) - ((a ^ b) & 1)
-  const __m128i ones = _mm_set1_epi8(1);
-  const __m128i avg1 = _mm_avg_epu8(*a0, *a1);
-  const __m128i one = _mm_and_si128(_mm_xor_si128(*a0, *a1), ones);
-  *avg = _mm_sub_epi8(avg1, one);
-}
-
-static WEBP_INLINE void Average2_uint32_SSE2(const uint32_t a0,
-                                             const uint32_t a1,
-                                             __m128i* const avg) {
-  // (a + b) >> 1 = ((a + b + 1) >> 1) - ((a ^ b) & 1)
-  const __m128i ones = _mm_set1_epi8(1);
-  const __m128i A0 = _mm_cvtsi32_si128(a0);
-  const __m128i A1 = _mm_cvtsi32_si128(a1);
-  const __m128i avg1 = _mm_avg_epu8(A0, A1);
-  const __m128i one = _mm_and_si128(_mm_xor_si128(A0, A1), ones);
-  *avg = _mm_sub_epi8(avg1, one);
-}
-
-static WEBP_INLINE __m128i Average2_uint32_16_SSE2(uint32_t a0, uint32_t a1) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i A0 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(a0), zero);
-  const __m128i A1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(a1), zero);
-  const __m128i sum = _mm_add_epi16(A1, A0);
-  return _mm_srli_epi16(sum, 1);
-}
-
-static WEBP_INLINE uint32_t Average2_SSE2(uint32_t a0, uint32_t a1) {
-  __m128i output;
-  Average2_uint32_SSE2(a0, a1, &output);
-  return _mm_cvtsi128_si32(output);
-}
-
-static WEBP_INLINE uint32_t Average3_SSE2(uint32_t a0, uint32_t a1,
-                                          uint32_t a2) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i avg1 = Average2_uint32_16_SSE2(a0, a2);
-  const __m128i A1 = _mm_unpacklo_epi8(_mm_cvtsi32_si128(a1), zero);
-  const __m128i sum = _mm_add_epi16(avg1, A1);
-  const __m128i avg2 = _mm_srli_epi16(sum, 1);
-  const __m128i A2 = _mm_packus_epi16(avg2, avg2);
-  const uint32_t output = _mm_cvtsi128_si32(A2);
-  return output;
-}
-
-static WEBP_INLINE uint32_t Average4_SSE2(uint32_t a0, uint32_t a1,
-                                          uint32_t a2, uint32_t a3) {
-  const __m128i avg1 = Average2_uint32_16_SSE2(a0, a1);
-  const __m128i avg2 = Average2_uint32_16_SSE2(a2, a3);
-  const __m128i sum = _mm_add_epi16(avg2, avg1);
-  const __m128i avg3 = _mm_srli_epi16(sum, 1);
-  const __m128i A0 = _mm_packus_epi16(avg3, avg3);
-  const uint32_t output = _mm_cvtsi128_si32(A0);
-  return output;
-}
-
-static uint32_t Predictor5_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average3_SSE2(left, top[0], top[1]);
-  return pred;
-}
-static uint32_t Predictor6_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2_SSE2(left, top[-1]);
-  return pred;
-}
-static uint32_t Predictor7_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2_SSE2(left, top[0]);
-  return pred;
-}
-static uint32_t Predictor8_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2_SSE2(top[-1], top[0]);
-  (void)left;
-  return pred;
-}
-static uint32_t Predictor9_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average2_SSE2(top[0], top[1]);
-  (void)left;
-  return pred;
-}
-static uint32_t Predictor10_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Average4_SSE2(left, top[-1], top[0], top[1]);
-  return pred;
-}
-static uint32_t Predictor11_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = Select_SSE2(top[0], left, top[-1]);
-  return pred;
-}
-static uint32_t Predictor12_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = ClampedAddSubtractFull_SSE2(left, top[0], top[-1]);
-  return pred;
-}
-static uint32_t Predictor13_SSE2(uint32_t left, const uint32_t* const top) {
-  const uint32_t pred = ClampedAddSubtractHalf_SSE2(left, top[0], top[-1]);
-  return pred;
-}
-
-// Batch versions of those functions.
-
-// Predictor0: ARGB_BLACK.
-static void PredictorAdd0_SSE2(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  const __m128i black = _mm_set1_epi32(ARGB_BLACK);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    const __m128i res = _mm_add_epi8(src, black);
-    _mm_storeu_si128((__m128i*)&out[i], res);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsAdd_C[0](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-
-// Predictor1: left.
-static void PredictorAdd1_SSE2(const uint32_t* in, const uint32_t* upper,
-                               int num_pixels, uint32_t* out) {
-  int i;
-  __m128i prev = _mm_set1_epi32(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    // a | b | c | d
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    // 0 | a | b | c
-    const __m128i shift0 = _mm_slli_si128(src, 4);
-    // a | a + b | b + c | c + d
-    const __m128i sum0 = _mm_add_epi8(src, shift0);
-    // 0 | 0 | a | a + b
-    const __m128i shift1 = _mm_slli_si128(sum0, 8);
-    // a | a + b | a + b + c | a + b + c + d
-    const __m128i sum1 = _mm_add_epi8(sum0, shift1);
-    const __m128i res = _mm_add_epi8(sum1, prev);
-    _mm_storeu_si128((__m128i*)&out[i], res);
-    // replicate prev output on the four lanes
-    prev = _mm_shuffle_epi32(res, (3 << 0) | (3 << 2) | (3 << 4) | (3 << 6));
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsAdd_C[1](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-
-// Macro that adds 32-bit integers from IN using mod 256 arithmetic
-// per 8 bit channel.
-#define GENERATE_PREDICTOR_1(X, IN)                                           \
-static void PredictorAdd##X##_SSE2(const uint32_t* in, const uint32_t* upper, \
-                                  int num_pixels, uint32_t* out) {            \
-  int i;                                                                      \
-  for (i = 0; i + 4 <= num_pixels; i += 4) {                                  \
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);              \
-    const __m128i other = _mm_loadu_si128((const __m128i*)&(IN));             \
-    const __m128i res = _mm_add_epi8(src, other);                             \
-    _mm_storeu_si128((__m128i*)&out[i], res);                                 \
-  }                                                                           \
-  if (i != num_pixels) {                                                      \
-    VP8LPredictorsAdd_C[(X)](in + i, upper + i, num_pixels - i, out + i);     \
-  }                                                                           \
-}
-
-// Predictor2: Top.
-GENERATE_PREDICTOR_1(2, upper[i])
-// Predictor3: Top-right.
-GENERATE_PREDICTOR_1(3, upper[i + 1])
-// Predictor4: Top-left.
-GENERATE_PREDICTOR_1(4, upper[i - 1])
-#undef GENERATE_PREDICTOR_1
-
-// Due to averages with integers, values cannot be accumulated in parallel for
-// predictors 5 to 7.
-GENERATE_PREDICTOR_ADD(Predictor5_SSE2, PredictorAdd5_SSE2)
-GENERATE_PREDICTOR_ADD(Predictor6_SSE2, PredictorAdd6_SSE2)
-GENERATE_PREDICTOR_ADD(Predictor7_SSE2, PredictorAdd7_SSE2)
-
-#define GENERATE_PREDICTOR_2(X, IN)                                           \
-static void PredictorAdd##X##_SSE2(const uint32_t* in, const uint32_t* upper, \
-                                   int num_pixels, uint32_t* out) {           \
-  int i;                                                                      \
-  for (i = 0; i + 4 <= num_pixels; i += 4) {                                  \
-    const __m128i Tother = _mm_loadu_si128((const __m128i*)&(IN));            \
-    const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]);             \
-    const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);              \
-    __m128i avg, res;                                                         \
-    Average2_m128i(&T, &Tother, &avg);                                        \
-    res = _mm_add_epi8(avg, src);                                             \
-    _mm_storeu_si128((__m128i*)&out[i], res);                                 \
-  }                                                                           \
-  if (i != num_pixels) {                                                      \
-    VP8LPredictorsAdd_C[(X)](in + i, upper + i, num_pixels - i, out + i);     \
-  }                                                                           \
-}
-// Predictor8: average TL T.
-GENERATE_PREDICTOR_2(8, upper[i - 1])
-// Predictor9: average T TR.
-GENERATE_PREDICTOR_2(9, upper[i + 1])
-#undef GENERATE_PREDICTOR_2
-
-// Predictor10: average of (average of (L,TL), average of (T, TR)).
-#define DO_PRED10(OUT) do {               \
-  __m128i avgLTL, avg;                    \
-  Average2_m128i(&L, &TL, &avgLTL);       \
-  Average2_m128i(&avgTTR, &avgLTL, &avg); \
-  L = _mm_add_epi8(avg, src);             \
-  out[i + (OUT)] = _mm_cvtsi128_si32(L);  \
-} while (0)
-
-#define DO_PRED10_SHIFT do {                                  \
-  /* Rotate the pre-computed values for the next iteration.*/ \
-  avgTTR = _mm_srli_si128(avgTTR, 4);                         \
-  TL = _mm_srli_si128(TL, 4);                                 \
-  src = _mm_srli_si128(src, 4);                               \
-} while (0)
-
-static void PredictorAdd10_SSE2(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  __m128i L = _mm_cvtsi32_si128(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]);
-    const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]);
-    const __m128i TR = _mm_loadu_si128((const __m128i*)&upper[i + 1]);
-    __m128i avgTTR;
-    Average2_m128i(&T, &TR, &avgTTR);
-    DO_PRED10(0);
-    DO_PRED10_SHIFT;
-    DO_PRED10(1);
-    DO_PRED10_SHIFT;
-    DO_PRED10(2);
-    DO_PRED10_SHIFT;
-    DO_PRED10(3);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsAdd_C[10](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-#undef DO_PRED10
-#undef DO_PRED10_SHIFT
-
-// Predictor11: select.
-#define DO_PRED11(OUT) do {                                            \
-  const __m128i L_lo = _mm_unpacklo_epi32(L, T);                       \
-  const __m128i TL_lo = _mm_unpacklo_epi32(TL, T);                     \
-  const __m128i pb = _mm_sad_epu8(L_lo, TL_lo); /* pb = sum |L-TL|*/   \
-  const __m128i mask = _mm_cmpgt_epi32(pb, pa);                        \
-  const __m128i A = _mm_and_si128(mask, L);                            \
-  const __m128i B = _mm_andnot_si128(mask, T);                         \
-  const __m128i pred = _mm_or_si128(A, B); /* pred = (pa > b)? L : T*/ \
-  L = _mm_add_epi8(src, pred);                                         \
-  out[i + (OUT)] = _mm_cvtsi128_si32(L);                               \
-} while (0)
-
-#define DO_PRED11_SHIFT do {                                \
-  /* Shift the pre-computed value for the next iteration.*/ \
-  T = _mm_srli_si128(T, 4);                                 \
-  TL = _mm_srli_si128(TL, 4);                               \
-  src = _mm_srli_si128(src, 4);                             \
-  pa = _mm_srli_si128(pa, 4);                               \
-} while (0)
-
-static void PredictorAdd11_SSE2(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  __m128i pa;
-  __m128i L = _mm_cvtsi32_si128(out[-1]);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]);
-    __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]);
-    __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    {
-      // We can unpack with any value on the upper 32 bits, provided it's the
-      // same on both operands (so that their sum of abs diff is zero). Here we
-      // use T.
-      const __m128i T_lo = _mm_unpacklo_epi32(T, T);
-      const __m128i TL_lo = _mm_unpacklo_epi32(TL, T);
-      const __m128i T_hi = _mm_unpackhi_epi32(T, T);
-      const __m128i TL_hi = _mm_unpackhi_epi32(TL, T);
-      const __m128i s_lo = _mm_sad_epu8(T_lo, TL_lo);
-      const __m128i s_hi = _mm_sad_epu8(T_hi, TL_hi);
-      pa = _mm_packs_epi32(s_lo, s_hi);  // pa = sum |T-TL|
-    }
-    DO_PRED11(0);
-    DO_PRED11_SHIFT;
-    DO_PRED11(1);
-    DO_PRED11_SHIFT;
-    DO_PRED11(2);
-    DO_PRED11_SHIFT;
-    DO_PRED11(3);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsAdd_C[11](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-#undef DO_PRED11
-#undef DO_PRED11_SHIFT
-
-// Predictor12: ClampedAddSubtractFull.
-#define DO_PRED12(DIFF, LANE, OUT) do {            \
-  const __m128i all = _mm_add_epi16(L, (DIFF));    \
-  const __m128i alls = _mm_packus_epi16(all, all); \
-  const __m128i res = _mm_add_epi8(src, alls);     \
-  out[i + (OUT)] = _mm_cvtsi128_si32(res);         \
-  L = _mm_unpacklo_epi8(res, zero);                \
-} while (0)
-
-#define DO_PRED12_SHIFT(DIFF, LANE) do {                    \
-  /* Shift the pre-computed value for the next iteration.*/ \
-  if ((LANE) == 0) (DIFF) = _mm_srli_si128((DIFF), 8);      \
-  src = _mm_srli_si128(src, 4);                             \
-} while (0)
-
-static void PredictorAdd12_SSE2(const uint32_t* in, const uint32_t* upper,
-                                int num_pixels, uint32_t* out) {
-  int i;
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i L8 = _mm_cvtsi32_si128(out[-1]);
-  __m128i L = _mm_unpacklo_epi8(L8, zero);
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    // Load 4 pixels at a time.
-    __m128i src = _mm_loadu_si128((const __m128i*)&in[i]);
-    const __m128i T = _mm_loadu_si128((const __m128i*)&upper[i]);
-    const __m128i T_lo = _mm_unpacklo_epi8(T, zero);
-    const __m128i T_hi = _mm_unpackhi_epi8(T, zero);
-    const __m128i TL = _mm_loadu_si128((const __m128i*)&upper[i - 1]);
-    const __m128i TL_lo = _mm_unpacklo_epi8(TL, zero);
-    const __m128i TL_hi = _mm_unpackhi_epi8(TL, zero);
-    __m128i diff_lo = _mm_sub_epi16(T_lo, TL_lo);
-    __m128i diff_hi = _mm_sub_epi16(T_hi, TL_hi);
-    DO_PRED12(diff_lo, 0, 0);
-    DO_PRED12_SHIFT(diff_lo, 0);
-    DO_PRED12(diff_lo, 1, 1);
-    DO_PRED12_SHIFT(diff_lo, 1);
-    DO_PRED12(diff_hi, 0, 2);
-    DO_PRED12_SHIFT(diff_hi, 0);
-    DO_PRED12(diff_hi, 1, 3);
-  }
-  if (i != num_pixels) {
-    VP8LPredictorsAdd_C[12](in + i, upper + i, num_pixels - i, out + i);
-  }
-}
-#undef DO_PRED12
-#undef DO_PRED12_SHIFT
-
-// Due to averages with integers, values cannot be accumulated in parallel for
-// predictors 13.
-GENERATE_PREDICTOR_ADD(Predictor13_SSE2, PredictorAdd13_SSE2)
-
-//------------------------------------------------------------------------------
-// Subtract-Green Transform
-
-static void AddGreenToBlueAndRed_SSE2(const uint32_t* const src, int num_pixels,
-                                      uint32_t* dst) {
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i in = _mm_loadu_si128((const __m128i*)&src[i]); // argb
-    const __m128i A = _mm_srli_epi16(in, 8);     // 0 a 0 g
-    const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0));
-    const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0));  // 0g0g
-    const __m128i out = _mm_add_epi8(in, C);
-    _mm_storeu_si128((__m128i*)&dst[i], out);
-  }
-  // fallthrough and finish off with plain-C
-  if (i != num_pixels) {
-    VP8LAddGreenToBlueAndRed_C(src + i, num_pixels - i, dst + i);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Color Transform
-
-static void TransformColorInverse_SSE2(const VP8LMultipliers* const m,
-                                       const uint32_t* const src,
-                                       int num_pixels, uint32_t* dst) {
-// sign-extended multiplying constants, pre-shifted by 5.
-#define CST(X)  (((int16_t)(m->X << 8)) >> 5)   // sign-extend
-#define MK_CST_16(HI, LO) \
-  _mm_set1_epi32((int)(((uint32_t)(HI) << 16) | ((LO) & 0xffff)))
-  const __m128i mults_rb = MK_CST_16(CST(green_to_red_), CST(green_to_blue_));
-  const __m128i mults_b2 = MK_CST_16(CST(red_to_blue_), 0);
-#undef MK_CST_16
-#undef CST
-  const __m128i mask_ag = _mm_set1_epi32(0xff00ff00);  // alpha-green masks
-  int i;
-  for (i = 0; i + 4 <= num_pixels; i += 4) {
-    const __m128i in = _mm_loadu_si128((const __m128i*)&src[i]); // argb
-    const __m128i A = _mm_and_si128(in, mask_ag);     // a   0   g   0
-    const __m128i B = _mm_shufflelo_epi16(A, _MM_SHUFFLE(2, 2, 0, 0));
-    const __m128i C = _mm_shufflehi_epi16(B, _MM_SHUFFLE(2, 2, 0, 0));  // g0g0
-    const __m128i D = _mm_mulhi_epi16(C, mults_rb);    // x dr  x db1
-    const __m128i E = _mm_add_epi8(in, D);             // x r'  x   b'
-    const __m128i F = _mm_slli_epi16(E, 8);            // r' 0   b' 0
-    const __m128i G = _mm_mulhi_epi16(F, mults_b2);    // x db2  0  0
-    const __m128i H = _mm_srli_epi32(G, 8);            // 0  x db2  0
-    const __m128i I = _mm_add_epi8(H, F);              // r' x  b'' 0
-    const __m128i J = _mm_srli_epi16(I, 8);            // 0  r'  0  b''
-    const __m128i out = _mm_or_si128(J, A);
-    _mm_storeu_si128((__m128i*)&dst[i], out);
-  }
-  // Fall-back to C-version for left-overs.
-  if (i != num_pixels) {
-    VP8LTransformColorInverse_C(m, src + i, num_pixels - i, dst + i);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Color-space conversion functions
-
-static void ConvertBGRAToRGB_SSE2(const uint32_t* src, int num_pixels,
-                                  uint8_t* dst) {
-  const __m128i* in = (const __m128i*)src;
-  __m128i* out = (__m128i*)dst;
-
-  while (num_pixels >= 32) {
-    // Load the BGRA buffers.
-    __m128i in0 = _mm_loadu_si128(in + 0);
-    __m128i in1 = _mm_loadu_si128(in + 1);
-    __m128i in2 = _mm_loadu_si128(in + 2);
-    __m128i in3 = _mm_loadu_si128(in + 3);
-    __m128i in4 = _mm_loadu_si128(in + 4);
-    __m128i in5 = _mm_loadu_si128(in + 5);
-    __m128i in6 = _mm_loadu_si128(in + 6);
-    __m128i in7 = _mm_loadu_si128(in + 7);
-    VP8L32bToPlanar_SSE2(&in0, &in1, &in2, &in3);
-    VP8L32bToPlanar_SSE2(&in4, &in5, &in6, &in7);
-    // At this points, in1/in5 contains red only, in2/in6 green only ...
-    // Pack the colors in 24b RGB.
-    VP8PlanarTo24b_SSE2(&in1, &in5, &in2, &in6, &in3, &in7);
-    _mm_storeu_si128(out + 0, in1);
-    _mm_storeu_si128(out + 1, in5);
-    _mm_storeu_si128(out + 2, in2);
-    _mm_storeu_si128(out + 3, in6);
-    _mm_storeu_si128(out + 4, in3);
-    _mm_storeu_si128(out + 5, in7);
-    in += 8;
-    out += 6;
-    num_pixels -= 32;
-  }
-  // left-overs
-  if (num_pixels > 0) {
-    VP8LConvertBGRAToRGB_C((const uint32_t*)in, num_pixels, (uint8_t*)out);
-  }
-}
-
-static void ConvertBGRAToRGBA_SSE2(const uint32_t* src,
-                                   int num_pixels, uint8_t* dst) {
-  const __m128i red_blue_mask = _mm_set1_epi32(0x00ff00ffu);
-  const __m128i* in = (const __m128i*)src;
-  __m128i* out = (__m128i*)dst;
-  while (num_pixels >= 8) {
-    const __m128i A1 = _mm_loadu_si128(in++);
-    const __m128i A2 = _mm_loadu_si128(in++);
-    const __m128i B1 = _mm_and_si128(A1, red_blue_mask);     // R 0 B 0
-    const __m128i B2 = _mm_and_si128(A2, red_blue_mask);     // R 0 B 0
-    const __m128i C1 = _mm_andnot_si128(red_blue_mask, A1);  // 0 G 0 A
-    const __m128i C2 = _mm_andnot_si128(red_blue_mask, A2);  // 0 G 0 A
-    const __m128i D1 = _mm_shufflelo_epi16(B1, _MM_SHUFFLE(2, 3, 0, 1));
-    const __m128i D2 = _mm_shufflelo_epi16(B2, _MM_SHUFFLE(2, 3, 0, 1));
-    const __m128i E1 = _mm_shufflehi_epi16(D1, _MM_SHUFFLE(2, 3, 0, 1));
-    const __m128i E2 = _mm_shufflehi_epi16(D2, _MM_SHUFFLE(2, 3, 0, 1));
-    const __m128i F1 = _mm_or_si128(E1, C1);
-    const __m128i F2 = _mm_or_si128(E2, C2);
-    _mm_storeu_si128(out++, F1);
-    _mm_storeu_si128(out++, F2);
-    num_pixels -= 8;
-  }
-  // left-overs
-  if (num_pixels > 0) {
-    VP8LConvertBGRAToRGBA_C((const uint32_t*)in, num_pixels, (uint8_t*)out);
-  }
-}
-
-static void ConvertBGRAToRGBA4444_SSE2(const uint32_t* src,
-                                       int num_pixels, uint8_t* dst) {
-  const __m128i mask_0x0f = _mm_set1_epi8(0x0f);
-  const __m128i mask_0xf0 = _mm_set1_epi8(0xf0);
-  const __m128i* in = (const __m128i*)src;
-  __m128i* out = (__m128i*)dst;
-  while (num_pixels >= 8) {
-    const __m128i bgra0 = _mm_loadu_si128(in++);     // bgra0|bgra1|bgra2|bgra3
-    const __m128i bgra4 = _mm_loadu_si128(in++);     // bgra4|bgra5|bgra6|bgra7
-    const __m128i v0l = _mm_unpacklo_epi8(bgra0, bgra4);  // b0b4g0g4r0r4a0a4...
-    const __m128i v0h = _mm_unpackhi_epi8(bgra0, bgra4);  // b2b6g2g6r2r6a2a6...
-    const __m128i v1l = _mm_unpacklo_epi8(v0l, v0h);    // b0b2b4b6g0g2g4g6...
-    const __m128i v1h = _mm_unpackhi_epi8(v0l, v0h);    // b1b3b5b7g1g3g5g7...
-    const __m128i v2l = _mm_unpacklo_epi8(v1l, v1h);    // b0...b7 | g0...g7
-    const __m128i v2h = _mm_unpackhi_epi8(v1l, v1h);    // r0...r7 | a0...a7
-    const __m128i ga0 = _mm_unpackhi_epi64(v2l, v2h);   // g0...g7 | a0...a7
-    const __m128i rb0 = _mm_unpacklo_epi64(v2h, v2l);   // r0...r7 | b0...b7
-    const __m128i ga1 = _mm_srli_epi16(ga0, 4);         // g0-|g1-|...|a6-|a7-
-    const __m128i rb1 = _mm_and_si128(rb0, mask_0xf0);  // -r0|-r1|...|-b6|-a7
-    const __m128i ga2 = _mm_and_si128(ga1, mask_0x0f);  // g0-|g1-|...|a6-|a7-
-    const __m128i rgba0 = _mm_or_si128(ga2, rb1);       // rg0..rg7 | ba0..ba7
-    const __m128i rgba1 = _mm_srli_si128(rgba0, 8);     // ba0..ba7 | 0
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    const __m128i rgba = _mm_unpacklo_epi8(rgba1, rgba0);  // barg0...barg7
-#else
-    const __m128i rgba = _mm_unpacklo_epi8(rgba0, rgba1);  // rgba0...rgba7
-#endif
-    _mm_storeu_si128(out++, rgba);
-    num_pixels -= 8;
-  }
-  // left-overs
-  if (num_pixels > 0) {
-    VP8LConvertBGRAToRGBA4444_C((const uint32_t*)in, num_pixels, (uint8_t*)out);
-  }
-}
-
-static void ConvertBGRAToRGB565_SSE2(const uint32_t* src,
-                                     int num_pixels, uint8_t* dst) {
-  const __m128i mask_0xe0 = _mm_set1_epi8(0xe0);
-  const __m128i mask_0xf8 = _mm_set1_epi8(0xf8);
-  const __m128i mask_0x07 = _mm_set1_epi8(0x07);
-  const __m128i* in = (const __m128i*)src;
-  __m128i* out = (__m128i*)dst;
-  while (num_pixels >= 8) {
-    const __m128i bgra0 = _mm_loadu_si128(in++);     // bgra0|bgra1|bgra2|bgra3
-    const __m128i bgra4 = _mm_loadu_si128(in++);     // bgra4|bgra5|bgra6|bgra7
-    const __m128i v0l = _mm_unpacklo_epi8(bgra0, bgra4);  // b0b4g0g4r0r4a0a4...
-    const __m128i v0h = _mm_unpackhi_epi8(bgra0, bgra4);  // b2b6g2g6r2r6a2a6...
-    const __m128i v1l = _mm_unpacklo_epi8(v0l, v0h);      // b0b2b4b6g0g2g4g6...
-    const __m128i v1h = _mm_unpackhi_epi8(v0l, v0h);      // b1b3b5b7g1g3g5g7...
-    const __m128i v2l = _mm_unpacklo_epi8(v1l, v1h);      // b0...b7 | g0...g7
-    const __m128i v2h = _mm_unpackhi_epi8(v1l, v1h);      // r0...r7 | a0...a7
-    const __m128i ga0 = _mm_unpackhi_epi64(v2l, v2h);     // g0...g7 | a0...a7
-    const __m128i rb0 = _mm_unpacklo_epi64(v2h, v2l);     // r0...r7 | b0...b7
-    const __m128i rb1 = _mm_and_si128(rb0, mask_0xf8);    // -r0..-r7|-b0..-b7
-    const __m128i g_lo1 = _mm_srli_epi16(ga0, 5);
-    const __m128i g_lo2 = _mm_and_si128(g_lo1, mask_0x07);  // g0-...g7-|xx (3b)
-    const __m128i g_hi1 = _mm_slli_epi16(ga0, 3);
-    const __m128i g_hi2 = _mm_and_si128(g_hi1, mask_0xe0);  // -g0...-g7|xx (3b)
-    const __m128i b0 = _mm_srli_si128(rb1, 8);              // -b0...-b7|0
-    const __m128i rg1 = _mm_or_si128(rb1, g_lo2);           // gr0...gr7|xx
-    const __m128i b1 = _mm_srli_epi16(b0, 3);
-    const __m128i gb1 = _mm_or_si128(b1, g_hi2);            // bg0...bg7|xx
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    const __m128i rgba = _mm_unpacklo_epi8(gb1, rg1);     // rggb0...rggb7
-#else
-    const __m128i rgba = _mm_unpacklo_epi8(rg1, gb1);     // bgrb0...bgrb7
-#endif
-    _mm_storeu_si128(out++, rgba);
-    num_pixels -= 8;
-  }
-  // left-overs
-  if (num_pixels > 0) {
-    VP8LConvertBGRAToRGB565_C((const uint32_t*)in, num_pixels, (uint8_t*)out);
-  }
-}
-
-static void ConvertBGRAToBGR_SSE2(const uint32_t* src,
-                                  int num_pixels, uint8_t* dst) {
-  const __m128i mask_l = _mm_set_epi32(0, 0x00ffffff, 0, 0x00ffffff);
-  const __m128i mask_h = _mm_set_epi32(0x00ffffff, 0, 0x00ffffff, 0);
-  const __m128i* in = (const __m128i*)src;
-  const uint8_t* const end = dst + num_pixels * 3;
-  // the last storel_epi64 below writes 8 bytes starting at offset 18
-  while (dst + 26 <= end) {
-    const __m128i bgra0 = _mm_loadu_si128(in++);     // bgra0|bgra1|bgra2|bgra3
-    const __m128i bgra4 = _mm_loadu_si128(in++);     // bgra4|bgra5|bgra6|bgra7
-    const __m128i a0l = _mm_and_si128(bgra0, mask_l);   // bgr0|0|bgr0|0
-    const __m128i a4l = _mm_and_si128(bgra4, mask_l);   // bgr0|0|bgr0|0
-    const __m128i a0h = _mm_and_si128(bgra0, mask_h);   // 0|bgr0|0|bgr0
-    const __m128i a4h = _mm_and_si128(bgra4, mask_h);   // 0|bgr0|0|bgr0
-    const __m128i b0h = _mm_srli_epi64(a0h, 8);         // 000b|gr00|000b|gr00
-    const __m128i b4h = _mm_srli_epi64(a4h, 8);         // 000b|gr00|000b|gr00
-    const __m128i c0 = _mm_or_si128(a0l, b0h);          // rgbrgb00|rgbrgb00
-    const __m128i c4 = _mm_or_si128(a4l, b4h);          // rgbrgb00|rgbrgb00
-    const __m128i c2 = _mm_srli_si128(c0, 8);
-    const __m128i c6 = _mm_srli_si128(c4, 8);
-    _mm_storel_epi64((__m128i*)(dst +   0), c0);
-    _mm_storel_epi64((__m128i*)(dst +   6), c2);
-    _mm_storel_epi64((__m128i*)(dst +  12), c4);
-    _mm_storel_epi64((__m128i*)(dst +  18), c6);
-    dst += 24;
-    num_pixels -= 8;
-  }
-  // left-overs
-  if (num_pixels > 0) {
-    VP8LConvertBGRAToBGR_C((const uint32_t*)in, num_pixels, dst);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void VP8LDspInitSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitSSE2(void) {
-  VP8LPredictors[5] = Predictor5_SSE2;
-  VP8LPredictors[6] = Predictor6_SSE2;
-  VP8LPredictors[7] = Predictor7_SSE2;
-  VP8LPredictors[8] = Predictor8_SSE2;
-  VP8LPredictors[9] = Predictor9_SSE2;
-  VP8LPredictors[10] = Predictor10_SSE2;
-  VP8LPredictors[11] = Predictor11_SSE2;
-  VP8LPredictors[12] = Predictor12_SSE2;
-  VP8LPredictors[13] = Predictor13_SSE2;
-
-  VP8LPredictorsAdd[0] = PredictorAdd0_SSE2;
-  VP8LPredictorsAdd[1] = PredictorAdd1_SSE2;
-  VP8LPredictorsAdd[2] = PredictorAdd2_SSE2;
-  VP8LPredictorsAdd[3] = PredictorAdd3_SSE2;
-  VP8LPredictorsAdd[4] = PredictorAdd4_SSE2;
-  VP8LPredictorsAdd[5] = PredictorAdd5_SSE2;
-  VP8LPredictorsAdd[6] = PredictorAdd6_SSE2;
-  VP8LPredictorsAdd[7] = PredictorAdd7_SSE2;
-  VP8LPredictorsAdd[8] = PredictorAdd8_SSE2;
-  VP8LPredictorsAdd[9] = PredictorAdd9_SSE2;
-  VP8LPredictorsAdd[10] = PredictorAdd10_SSE2;
-  VP8LPredictorsAdd[11] = PredictorAdd11_SSE2;
-  VP8LPredictorsAdd[12] = PredictorAdd12_SSE2;
-  VP8LPredictorsAdd[13] = PredictorAdd13_SSE2;
-
-  VP8LAddGreenToBlueAndRed = AddGreenToBlueAndRed_SSE2;
-  VP8LTransformColorInverse = TransformColorInverse_SSE2;
-
-  VP8LConvertBGRAToRGB = ConvertBGRAToRGB_SSE2;
-  VP8LConvertBGRAToRGBA = ConvertBGRAToRGBA_SSE2;
-  VP8LConvertBGRAToRGBA4444 = ConvertBGRAToRGBA4444_SSE2;
-  VP8LConvertBGRAToRGB565 = ConvertBGRAToRGB565_SSE2;
-  VP8LConvertBGRAToBGR = ConvertBGRAToBGR_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(VP8LDspInitSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/mips_macro.h b/ios/Pods/libwebp/src/dsp/mips_macro.h
deleted file mode 100644
index 44aba9b..0000000
--- a/ios/Pods/libwebp/src/dsp/mips_macro.h
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS common macros
-
-#ifndef WEBP_DSP_MIPS_MACRO_H_
-#define WEBP_DSP_MIPS_MACRO_H_
-
-#if defined(__GNUC__) && defined(__ANDROID__) && LOCAL_GCC_VERSION == 0x409
-#define WORK_AROUND_GCC
-#endif
-
-#define STR(s) #s
-#define XSTR(s) STR(s)
-
-// O0[31..16 | 15..0] = I0[31..16 | 15..0] + I1[31..16 | 15..0]
-// O1[31..16 | 15..0] = I0[31..16 | 15..0] - I1[31..16 | 15..0]
-// O - output
-// I - input (macro doesn't change it)
-#define ADD_SUB_HALVES(O0, O1,                                                 \
-                       I0, I1)                                                 \
-  "addq.ph          %[" #O0 "],   %[" #I0 "],  %[" #I1 "]           \n\t"      \
-  "subq.ph          %[" #O1 "],   %[" #I0 "],  %[" #I1 "]           \n\t"
-
-// O - output
-// I - input (macro doesn't change it)
-// I[0/1] - offset in bytes
-#define LOAD_IN_X2(O0, O1,                                                     \
-                   I0, I1)                                                     \
-  "lh               %[" #O0 "],   " #I0 "(%[in])                  \n\t"        \
-  "lh               %[" #O1 "],   " #I1 "(%[in])                  \n\t"
-
-// I0 - location
-// I1..I9 - offsets in bytes
-#define LOAD_WITH_OFFSET_X4(O0, O1, O2, O3,                                    \
-                            I0, I1, I2, I3, I4, I5, I6, I7, I8, I9)            \
-  "ulw    %[" #O0 "],    " #I1 "+" XSTR(I9) "*" #I5 "(%[" #I0 "])       \n\t"  \
-  "ulw    %[" #O1 "],    " #I2 "+" XSTR(I9) "*" #I6 "(%[" #I0 "])       \n\t"  \
-  "ulw    %[" #O2 "],    " #I3 "+" XSTR(I9) "*" #I7 "(%[" #I0 "])       \n\t"  \
-  "ulw    %[" #O3 "],    " #I4 "+" XSTR(I9) "*" #I8 "(%[" #I0 "])       \n\t"
-
-// O - output
-// IO - input/output
-// I - input (macro doesn't change it)
-#define MUL_SHIFT_SUM(O0, O1, O2, O3, O4, O5, O6, O7,                          \
-                      IO0, IO1, IO2, IO3,                                      \
-                      I0, I1, I2, I3, I4, I5, I6, I7)                          \
-  "mul              %[" #O0 "],   %[" #I0 "],   %[kC2]        \n\t"            \
-  "mul              %[" #O1 "],   %[" #I0 "],   %[kC1]        \n\t"            \
-  "mul              %[" #O2 "],   %[" #I1 "],   %[kC2]        \n\t"            \
-  "mul              %[" #O3 "],   %[" #I1 "],   %[kC1]        \n\t"            \
-  "mul              %[" #O4 "],   %[" #I2 "],   %[kC2]        \n\t"            \
-  "mul              %[" #O5 "],   %[" #I2 "],   %[kC1]        \n\t"            \
-  "mul              %[" #O6 "],   %[" #I3 "],   %[kC2]        \n\t"            \
-  "mul              %[" #O7 "],   %[" #I3 "],   %[kC1]        \n\t"            \
-  "sra              %[" #O0 "],   %[" #O0 "],   16            \n\t"            \
-  "sra              %[" #O1 "],   %[" #O1 "],   16            \n\t"            \
-  "sra              %[" #O2 "],   %[" #O2 "],   16            \n\t"            \
-  "sra              %[" #O3 "],   %[" #O3 "],   16            \n\t"            \
-  "sra              %[" #O4 "],   %[" #O4 "],   16            \n\t"            \
-  "sra              %[" #O5 "],   %[" #O5 "],   16            \n\t"            \
-  "sra              %[" #O6 "],   %[" #O6 "],   16            \n\t"            \
-  "sra              %[" #O7 "],   %[" #O7 "],   16            \n\t"            \
-  "addu             %[" #IO0 "],  %[" #IO0 "],  %[" #I4 "]    \n\t"            \
-  "addu             %[" #IO1 "],  %[" #IO1 "],  %[" #I5 "]    \n\t"            \
-  "subu             %[" #IO2 "],  %[" #IO2 "],  %[" #I6 "]    \n\t"            \
-  "subu             %[" #IO3 "],  %[" #IO3 "],  %[" #I7 "]    \n\t"
-
-// O - output
-// I - input (macro doesn't change it)
-#define INSERT_HALF_X2(O0, O1,                                                 \
-                       I0, I1)                                                 \
-  "ins              %[" #O0 "],   %[" #I0 "], 16,    16           \n\t"        \
-  "ins              %[" #O1 "],   %[" #I1 "], 16,    16           \n\t"
-
-// O - output
-// I - input (macro doesn't change it)
-#define SRA_16(O0, O1, O2, O3,                                                 \
-               I0, I1, I2, I3)                                                 \
-  "sra              %[" #O0 "],  %[" #I0 "],  16                  \n\t"        \
-  "sra              %[" #O1 "],  %[" #I1 "],  16                  \n\t"        \
-  "sra              %[" #O2 "],  %[" #I2 "],  16                  \n\t"        \
-  "sra              %[" #O3 "],  %[" #I3 "],  16                  \n\t"
-
-// temp0[31..16 | 15..0] = temp8[31..16 | 15..0] + temp12[31..16 | 15..0]
-// temp1[31..16 | 15..0] = temp8[31..16 | 15..0] - temp12[31..16 | 15..0]
-// temp0[31..16 | 15..0] = temp0[31..16 >> 3 | 15..0 >> 3]
-// temp1[31..16 | 15..0] = temp1[31..16 >> 3 | 15..0 >> 3]
-// O - output
-// I - input (macro doesn't change it)
-#define SHIFT_R_SUM_X2(O0, O1, O2, O3, O4, O5, O6, O7,                         \
-                       I0, I1, I2, I3, I4, I5, I6, I7)                         \
-  "addq.ph          %[" #O0 "],   %[" #I0 "],   %[" #I4 "]    \n\t"            \
-  "subq.ph          %[" #O1 "],   %[" #I0 "],   %[" #I4 "]    \n\t"            \
-  "addq.ph          %[" #O2 "],   %[" #I1 "],   %[" #I5 "]    \n\t"            \
-  "subq.ph          %[" #O3 "],   %[" #I1 "],   %[" #I5 "]    \n\t"            \
-  "addq.ph          %[" #O4 "],   %[" #I2 "],   %[" #I6 "]    \n\t"            \
-  "subq.ph          %[" #O5 "],   %[" #I2 "],   %[" #I6 "]    \n\t"            \
-  "addq.ph          %[" #O6 "],   %[" #I3 "],   %[" #I7 "]    \n\t"            \
-  "subq.ph          %[" #O7 "],   %[" #I3 "],   %[" #I7 "]    \n\t"            \
-  "shra.ph          %[" #O0 "],   %[" #O0 "],   3             \n\t"            \
-  "shra.ph          %[" #O1 "],   %[" #O1 "],   3             \n\t"            \
-  "shra.ph          %[" #O2 "],   %[" #O2 "],   3             \n\t"            \
-  "shra.ph          %[" #O3 "],   %[" #O3 "],   3             \n\t"            \
-  "shra.ph          %[" #O4 "],   %[" #O4 "],   3             \n\t"            \
-  "shra.ph          %[" #O5 "],   %[" #O5 "],   3             \n\t"            \
-  "shra.ph          %[" #O6 "],   %[" #O6 "],   3             \n\t"            \
-  "shra.ph          %[" #O7 "],   %[" #O7 "],   3             \n\t"
-
-// precrq.ph.w temp0, temp8, temp2
-//   temp0 = temp8[31..16] | temp2[31..16]
-// ins temp2, temp8, 16, 16
-//   temp2 = temp8[31..16] | temp2[15..0]
-// O - output
-// IO - input/output
-// I - input (macro doesn't change it)
-#define PACK_2_HALVES_TO_WORD(O0, O1, O2, O3,                                  \
-                              IO0, IO1, IO2, IO3,                              \
-                              I0, I1, I2, I3)                                  \
-  "precrq.ph.w      %[" #O0 "],    %[" #I0 "],  %[" #IO0 "]       \n\t"        \
-  "precrq.ph.w      %[" #O1 "],    %[" #I1 "],  %[" #IO1 "]       \n\t"        \
-  "ins              %[" #IO0 "],   %[" #I0 "],  16,    16         \n\t"        \
-  "ins              %[" #IO1 "],   %[" #I1 "],  16,    16         \n\t"        \
-  "precrq.ph.w      %[" #O2 "],    %[" #I2 "],  %[" #IO2 "]       \n\t"        \
-  "precrq.ph.w      %[" #O3 "],    %[" #I3 "],  %[" #IO3 "]       \n\t"        \
-  "ins              %[" #IO2 "],   %[" #I2 "],  16,    16         \n\t"        \
-  "ins              %[" #IO3 "],   %[" #I3 "],  16,    16         \n\t"
-
-// preceu.ph.qbr temp0, temp8
-//   temp0 = 0 | 0 | temp8[23..16] | temp8[7..0]
-// preceu.ph.qbl temp1, temp8
-//   temp1 = temp8[23..16] | temp8[7..0] | 0 | 0
-// O - output
-// I - input (macro doesn't change it)
-#define CONVERT_2_BYTES_TO_HALF(O0, O1, O2, O3, O4, O5, O6, O7,                \
-                                I0, I1, I2, I3)                                \
-  "preceu.ph.qbr    %[" #O0 "],   %[" #I0 "]                      \n\t"        \
-  "preceu.ph.qbl    %[" #O1 "],   %[" #I0 "]                      \n\t"        \
-  "preceu.ph.qbr    %[" #O2 "],   %[" #I1 "]                      \n\t"        \
-  "preceu.ph.qbl    %[" #O3 "],   %[" #I1 "]                      \n\t"        \
-  "preceu.ph.qbr    %[" #O4 "],   %[" #I2 "]                      \n\t"        \
-  "preceu.ph.qbl    %[" #O5 "],   %[" #I2 "]                      \n\t"        \
-  "preceu.ph.qbr    %[" #O6 "],   %[" #I3 "]                      \n\t"        \
-  "preceu.ph.qbl    %[" #O7 "],   %[" #I3 "]                      \n\t"
-
-// temp0[31..16 | 15..0] = temp0[31..16 | 15..0] + temp8[31..16 | 15..0]
-// temp0[31..16 | 15..0] = temp0[31..16 <<(s) 7 | 15..0 <<(s) 7]
-// temp1..temp7 same as temp0
-// precrqu_s.qb.ph temp0, temp1, temp0:
-//   temp0 = temp1[31..24] | temp1[15..8] | temp0[31..24] | temp0[15..8]
-// store temp0 to dst
-// IO - input/output
-// I - input (macro doesn't change it)
-#define STORE_SAT_SUM_X2(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7,               \
-                         I0, I1, I2, I3, I4, I5, I6, I7,                       \
-                         I8, I9, I10, I11, I12, I13)                           \
-  "addq.ph          %[" #IO0 "],  %[" #IO0 "],  %[" #I0 "]          \n\t"      \
-  "addq.ph          %[" #IO1 "],  %[" #IO1 "],  %[" #I1 "]          \n\t"      \
-  "addq.ph          %[" #IO2 "],  %[" #IO2 "],  %[" #I2 "]          \n\t"      \
-  "addq.ph          %[" #IO3 "],  %[" #IO3 "],  %[" #I3 "]          \n\t"      \
-  "addq.ph          %[" #IO4 "],  %[" #IO4 "],  %[" #I4 "]          \n\t"      \
-  "addq.ph          %[" #IO5 "],  %[" #IO5 "],  %[" #I5 "]          \n\t"      \
-  "addq.ph          %[" #IO6 "],  %[" #IO6 "],  %[" #I6 "]          \n\t"      \
-  "addq.ph          %[" #IO7 "],  %[" #IO7 "],  %[" #I7 "]          \n\t"      \
-  "shll_s.ph        %[" #IO0 "],  %[" #IO0 "],  7                   \n\t"      \
-  "shll_s.ph        %[" #IO1 "],  %[" #IO1 "],  7                   \n\t"      \
-  "shll_s.ph        %[" #IO2 "],  %[" #IO2 "],  7                   \n\t"      \
-  "shll_s.ph        %[" #IO3 "],  %[" #IO3 "],  7                   \n\t"      \
-  "shll_s.ph        %[" #IO4 "],  %[" #IO4 "],  7                   \n\t"      \
-  "shll_s.ph        %[" #IO5 "],  %[" #IO5 "],  7                   \n\t"      \
-  "shll_s.ph        %[" #IO6 "],  %[" #IO6 "],  7                   \n\t"      \
-  "shll_s.ph        %[" #IO7 "],  %[" #IO7 "],  7                   \n\t"      \
-  "precrqu_s.qb.ph  %[" #IO0 "],  %[" #IO1 "],  %[" #IO0 "]         \n\t"      \
-  "precrqu_s.qb.ph  %[" #IO2 "],  %[" #IO3 "],  %[" #IO2 "]         \n\t"      \
-  "precrqu_s.qb.ph  %[" #IO4 "],  %[" #IO5 "],  %[" #IO4 "]         \n\t"      \
-  "precrqu_s.qb.ph  %[" #IO6 "],  %[" #IO7 "],  %[" #IO6 "]         \n\t"      \
-  "usw              %[" #IO0 "],  " XSTR(I13) "*" #I9 "(%[" #I8 "])   \n\t"    \
-  "usw              %[" #IO2 "],  " XSTR(I13) "*" #I10 "(%[" #I8 "])  \n\t"    \
-  "usw              %[" #IO4 "],  " XSTR(I13) "*" #I11 "(%[" #I8 "])  \n\t"    \
-  "usw              %[" #IO6 "],  " XSTR(I13) "*" #I12 "(%[" #I8 "])  \n\t"
-
-#define OUTPUT_EARLY_CLOBBER_REGS_10()                                         \
-  : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),             \
-    [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [temp6]"=&r"(temp6),             \
-    [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), [temp9]"=&r"(temp9),             \
-    [temp10]"=&r"(temp10)
-
-#define OUTPUT_EARLY_CLOBBER_REGS_18()                                         \
-  OUTPUT_EARLY_CLOBBER_REGS_10(),                                              \
-  [temp11]"=&r"(temp11), [temp12]"=&r"(temp12), [temp13]"=&r"(temp13),         \
-  [temp14]"=&r"(temp14), [temp15]"=&r"(temp15), [temp16]"=&r"(temp16),         \
-  [temp17]"=&r"(temp17), [temp18]"=&r"(temp18)
-
-#endif  // WEBP_DSP_MIPS_MACRO_H_
diff --git a/ios/Pods/libwebp/src/dsp/msa_macro.h b/ios/Pods/libwebp/src/dsp/msa_macro.h
deleted file mode 100644
index de026a1..0000000
--- a/ios/Pods/libwebp/src/dsp/msa_macro.h
+++ /dev/null
@@ -1,1392 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MSA common macros
-//
-// Author(s):  Prashant Patil   (prashant.patil@imgtec.com)
-
-#ifndef WEBP_DSP_MSA_MACRO_H_
-#define WEBP_DSP_MSA_MACRO_H_
-
-#include <stdint.h>
-#include <msa.h>
-
-#if defined(__clang__)
-  #define CLANG_BUILD
-#endif
-
-#ifdef CLANG_BUILD
-  #define ALPHAVAL  (-1)
-  #define ADDVI_H(a, b)  __msa_addvi_h((v8i16)a, b)
-  #define ADDVI_W(a, b)  __msa_addvi_w((v4i32)a, b)
-  #define SRAI_B(a, b)  __msa_srai_b((v16i8)a, b)
-  #define SRAI_H(a, b)  __msa_srai_h((v8i16)a, b)
-  #define SRAI_W(a, b)  __msa_srai_w((v4i32)a, b)
-  #define SRLI_H(a, b)  __msa_srli_h((v8i16)a, b)
-  #define SLLI_B(a, b)  __msa_slli_b((v4i32)a, b)
-  #define ANDI_B(a, b)  __msa_andi_b((v16u8)a, b)
-  #define ORI_B(a, b)   __msa_ori_b((v16u8)a, b)
-#else
-  #define ALPHAVAL  (0xff)
-  #define ADDVI_H(a, b)  (a + b)
-  #define ADDVI_W(a, b)  (a + b)
-  #define SRAI_B(a, b)  (a >> b)
-  #define SRAI_H(a, b)  (a >> b)
-  #define SRAI_W(a, b)  (a >> b)
-  #define SRLI_H(a, b)  (a << b)
-  #define SLLI_B(a, b)  (a << b)
-  #define ANDI_B(a, b)  (a & b)
-  #define ORI_B(a, b)   (a | b)
-#endif
-
-#define LD_B(RTYPE, psrc) *((RTYPE*)(psrc))
-#define LD_UB(...) LD_B(v16u8, __VA_ARGS__)
-#define LD_SB(...) LD_B(v16i8, __VA_ARGS__)
-
-#define LD_H(RTYPE, psrc) *((RTYPE*)(psrc))
-#define LD_UH(...) LD_H(v8u16, __VA_ARGS__)
-#define LD_SH(...) LD_H(v8i16, __VA_ARGS__)
-
-#define LD_W(RTYPE, psrc) *((RTYPE*)(psrc))
-#define LD_UW(...) LD_W(v4u32, __VA_ARGS__)
-#define LD_SW(...) LD_W(v4i32, __VA_ARGS__)
-
-#define ST_B(RTYPE, in, pdst) *((RTYPE*)(pdst)) = in
-#define ST_UB(...) ST_B(v16u8, __VA_ARGS__)
-#define ST_SB(...) ST_B(v16i8, __VA_ARGS__)
-
-#define ST_H(RTYPE, in, pdst) *((RTYPE*)(pdst)) = in
-#define ST_UH(...) ST_H(v8u16, __VA_ARGS__)
-#define ST_SH(...) ST_H(v8i16, __VA_ARGS__)
-
-#define ST_W(RTYPE, in, pdst) *((RTYPE*)(pdst)) = in
-#define ST_UW(...) ST_W(v4u32, __VA_ARGS__)
-#define ST_SW(...) ST_W(v4i32, __VA_ARGS__)
-
-#define MSA_LOAD_FUNC(TYPE, INSTR, FUNC_NAME)             \
-  static inline TYPE FUNC_NAME(const void* const psrc) {  \
-    const uint8_t* const psrc_m = (const uint8_t*)psrc;   \
-    TYPE val_m;                                           \
-    asm volatile (                                        \
-      "" #INSTR " %[val_m], %[psrc_m]  \n\t"              \
-      : [val_m] "=r" (val_m)                              \
-      : [psrc_m] "m" (*psrc_m));                          \
-    return val_m;                                         \
-  }
-
-#define MSA_LOAD(psrc, FUNC_NAME)  FUNC_NAME(psrc)
-
-#define MSA_STORE_FUNC(TYPE, INSTR, FUNC_NAME)               \
-  static inline void FUNC_NAME(TYPE val, void* const pdst) { \
-    uint8_t* const pdst_m = (uint8_t*)pdst;                  \
-    TYPE val_m = val;                                        \
-    asm volatile (                                           \
-      " " #INSTR "  %[val_m],  %[pdst_m]  \n\t"              \
-      : [pdst_m] "=m" (*pdst_m)                              \
-      : [val_m] "r" (val_m));                                \
-  }
-
-#define MSA_STORE(val, pdst, FUNC_NAME)  FUNC_NAME(val, pdst)
-
-#if (__mips_isa_rev >= 6)
-  MSA_LOAD_FUNC(uint16_t, lh, msa_lh);
-  #define LH(psrc)  MSA_LOAD(psrc, msa_lh)
-  MSA_LOAD_FUNC(uint32_t, lw, msa_lw);
-  #define LW(psrc)  MSA_LOAD(psrc, msa_lw)
-  #if (__mips == 64)
-    MSA_LOAD_FUNC(uint64_t, ld, msa_ld);
-    #define LD(psrc)  MSA_LOAD(psrc, msa_ld)
-  #else  // !(__mips == 64)
-    #define LD(psrc)  ((((uint64_t)MSA_LOAD(psrc + 4, msa_lw)) << 32) | \
-                       MSA_LOAD(psrc, msa_lw))
-  #endif  // (__mips == 64)
-
-  MSA_STORE_FUNC(uint16_t, sh, msa_sh);
-  #define SH(val, pdst)  MSA_STORE(val, pdst, msa_sh)
-  MSA_STORE_FUNC(uint32_t, sw, msa_sw);
-  #define SW(val, pdst)  MSA_STORE(val, pdst, msa_sw)
-  MSA_STORE_FUNC(uint64_t, sd, msa_sd);
-  #define SD(val, pdst)  MSA_STORE(val, pdst, msa_sd)
-#else  // !(__mips_isa_rev >= 6)
-  MSA_LOAD_FUNC(uint16_t, ulh, msa_ulh);
-  #define LH(psrc)  MSA_LOAD(psrc, msa_ulh)
-  MSA_LOAD_FUNC(uint32_t, ulw, msa_ulw);
-  #define LW(psrc)  MSA_LOAD(psrc, msa_ulw)
-  #if (__mips == 64)
-    MSA_LOAD_FUNC(uint64_t, uld, msa_uld);
-    #define LD(psrc)  MSA_LOAD(psrc, msa_uld)
-  #else  // !(__mips == 64)
-    #define LD(psrc)  ((((uint64_t)MSA_LOAD(psrc + 4, msa_ulw)) << 32) | \
-                        MSA_LOAD(psrc, msa_ulw))
-  #endif  // (__mips == 64)
-
-  MSA_STORE_FUNC(uint16_t, ush, msa_ush);
-  #define SH(val, pdst)  MSA_STORE(val, pdst, msa_ush)
-  MSA_STORE_FUNC(uint32_t, usw, msa_usw);
-  #define SW(val, pdst)  MSA_STORE(val, pdst, msa_usw)
-  #define SD(val, pdst) do {                                               \
-    uint8_t* const pdst_sd_m = (uint8_t*)(pdst);                           \
-    const uint32_t val0_m = (uint32_t)(val & 0x00000000FFFFFFFF);          \
-    const uint32_t val1_m = (uint32_t)((val >> 32) & 0x00000000FFFFFFFF);  \
-    SW(val0_m, pdst_sd_m);                                                 \
-    SW(val1_m, pdst_sd_m + 4);                                             \
-  } while (0)
-#endif  // (__mips_isa_rev >= 6)
-
-/* Description : Load 4 words with stride
- * Arguments   : Inputs  - psrc, stride
- *               Outputs - out0, out1, out2, out3
- * Details     : Load word in 'out0' from (psrc)
- *               Load word in 'out1' from (psrc + stride)
- *               Load word in 'out2' from (psrc + 2 * stride)
- *               Load word in 'out3' from (psrc + 3 * stride)
- */
-#define LW4(psrc, stride, out0, out1, out2, out3) do {  \
-  const uint8_t* ptmp = (const uint8_t*)psrc;           \
-  out0 = LW(ptmp);                                      \
-  ptmp += stride;                                       \
-  out1 = LW(ptmp);                                      \
-  ptmp += stride;                                       \
-  out2 = LW(ptmp);                                      \
-  ptmp += stride;                                       \
-  out3 = LW(ptmp);                                      \
-} while (0)
-
-/* Description : Store words with stride
- * Arguments   : Inputs - in0, in1, in2, in3, pdst, stride
- * Details     : Store word from 'in0' to (pdst)
- *               Store word from 'in1' to (pdst + stride)
- *               Store word from 'in2' to (pdst + 2 * stride)
- *               Store word from 'in3' to (pdst + 3 * stride)
- */
-#define SW4(in0, in1, in2, in3, pdst, stride) do {  \
-  uint8_t* ptmp = (uint8_t*)pdst;                   \
-  SW(in0, ptmp);                                    \
-  ptmp += stride;                                   \
-  SW(in1, ptmp);                                    \
-  ptmp += stride;                                   \
-  SW(in2, ptmp);                                    \
-  ptmp += stride;                                   \
-  SW(in3, ptmp);                                    \
-} while (0)
-
-#define SW3(in0, in1, in2, pdst, stride) do {  \
-  uint8_t* ptmp = (uint8_t*)pdst;              \
-  SW(in0, ptmp);                               \
-  ptmp += stride;                              \
-  SW(in1, ptmp);                               \
-  ptmp += stride;                              \
-  SW(in2, ptmp);                               \
-} while (0)
-
-#define SW2(in0, in1, pdst, stride) do {  \
-  uint8_t* ptmp = (uint8_t*)pdst;         \
-  SW(in0, ptmp);                          \
-  ptmp += stride;                         \
-  SW(in1, ptmp);                          \
-} while (0)
-
-/* Description : Store 4 double words with stride
- * Arguments   : Inputs - in0, in1, in2, in3, pdst, stride
- * Details     : Store double word from 'in0' to (pdst)
- *               Store double word from 'in1' to (pdst + stride)
- *               Store double word from 'in2' to (pdst + 2 * stride)
- *               Store double word from 'in3' to (pdst + 3 * stride)
- */
-#define SD4(in0, in1, in2, in3, pdst, stride) do {  \
-  uint8_t* ptmp = (uint8_t*)pdst;                   \
-  SD(in0, ptmp);                                    \
-  ptmp += stride;                                   \
-  SD(in1, ptmp);                                    \
-  ptmp += stride;                                   \
-  SD(in2, ptmp);                                    \
-  ptmp += stride;                                   \
-  SD(in3, ptmp);                                    \
-} while (0)
-
-/* Description : Load vectors with 16 byte elements with stride
- * Arguments   : Inputs  - psrc, stride
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Load 16 byte elements in 'out0' from (psrc)
- *               Load 16 byte elements in 'out1' from (psrc + stride)
- */
-#define LD_B2(RTYPE, psrc, stride, out0, out1) do {  \
-  out0 = LD_B(RTYPE, psrc);                          \
-  out1 = LD_B(RTYPE, psrc + stride);                 \
-} while (0)
-#define LD_UB2(...) LD_B2(v16u8, __VA_ARGS__)
-#define LD_SB2(...) LD_B2(v16i8, __VA_ARGS__)
-
-#define LD_B3(RTYPE, psrc, stride, out0, out1, out2) do {  \
-  LD_B2(RTYPE, psrc, stride, out0, out1);                  \
-  out2 = LD_B(RTYPE, psrc + 2 * stride);                   \
-} while (0)
-#define LD_UB3(...) LD_B3(v16u8, __VA_ARGS__)
-#define LD_SB3(...) LD_B3(v16i8, __VA_ARGS__)
-
-#define LD_B4(RTYPE, psrc, stride, out0, out1, out2, out3) do {  \
-  LD_B2(RTYPE, psrc, stride, out0, out1);                        \
-  LD_B2(RTYPE, psrc + 2 * stride , stride, out2, out3);          \
-} while (0)
-#define LD_UB4(...) LD_B4(v16u8, __VA_ARGS__)
-#define LD_SB4(...) LD_B4(v16i8, __VA_ARGS__)
-
-#define LD_B8(RTYPE, psrc, stride,                                  \
-              out0, out1, out2, out3, out4, out5, out6, out7) do {  \
-  LD_B4(RTYPE, psrc, stride, out0, out1, out2, out3);               \
-  LD_B4(RTYPE, psrc + 4 * stride, stride, out4, out5, out6, out7);  \
-} while (0)
-#define LD_UB8(...) LD_B8(v16u8, __VA_ARGS__)
-#define LD_SB8(...) LD_B8(v16i8, __VA_ARGS__)
-
-/* Description : Load vectors with 8 halfword elements with stride
- * Arguments   : Inputs  - psrc, stride
- *               Outputs - out0, out1
- * Details     : Load 8 halfword elements in 'out0' from (psrc)
- *               Load 8 halfword elements in 'out1' from (psrc + stride)
- */
-#define LD_H2(RTYPE, psrc, stride, out0, out1) do {  \
-  out0 = LD_H(RTYPE, psrc);                          \
-  out1 = LD_H(RTYPE, psrc + stride);                 \
-} while (0)
-#define LD_UH2(...) LD_H2(v8u16, __VA_ARGS__)
-#define LD_SH2(...) LD_H2(v8i16, __VA_ARGS__)
-
-/* Description : Load vectors with 4 word elements with stride
- * Arguments   : Inputs  - psrc, stride
- *               Outputs - out0, out1, out2, out3
- * Details     : Load 4 word elements in 'out0' from (psrc + 0 * stride)
- *               Load 4 word elements in 'out1' from (psrc + 1 * stride)
- *               Load 4 word elements in 'out2' from (psrc + 2 * stride)
- *               Load 4 word elements in 'out3' from (psrc + 3 * stride)
- */
-#define LD_W2(RTYPE, psrc, stride, out0, out1) do {  \
-  out0 = LD_W(RTYPE, psrc);                          \
-  out1 = LD_W(RTYPE, psrc + stride);                 \
-} while (0)
-#define LD_UW2(...) LD_W2(v4u32, __VA_ARGS__)
-#define LD_SW2(...) LD_W2(v4i32, __VA_ARGS__)
-
-#define LD_W3(RTYPE, psrc, stride, out0, out1, out2) do {  \
-  LD_W2(RTYPE, psrc, stride, out0, out1);                  \
-  out2 = LD_W(RTYPE, psrc + 2 * stride);                   \
-} while (0)
-#define LD_UW3(...) LD_W3(v4u32, __VA_ARGS__)
-#define LD_SW3(...) LD_W3(v4i32, __VA_ARGS__)
-
-#define LD_W4(RTYPE, psrc, stride, out0, out1, out2, out3) do {  \
-  LD_W2(RTYPE, psrc, stride, out0, out1);                        \
-  LD_W2(RTYPE, psrc + 2 * stride, stride, out2, out3);           \
-} while (0)
-#define LD_UW4(...) LD_W4(v4u32, __VA_ARGS__)
-#define LD_SW4(...) LD_W4(v4i32, __VA_ARGS__)
-
-/* Description : Store vectors of 16 byte elements with stride
- * Arguments   : Inputs - in0, in1, pdst, stride
- * Details     : Store 16 byte elements from 'in0' to (pdst)
- *               Store 16 byte elements from 'in1' to (pdst + stride)
- */
-#define ST_B2(RTYPE, in0, in1, pdst, stride) do {  \
-  ST_B(RTYPE, in0, pdst);                          \
-  ST_B(RTYPE, in1, pdst + stride);                 \
-} while (0)
-#define ST_UB2(...) ST_B2(v16u8, __VA_ARGS__)
-#define ST_SB2(...) ST_B2(v16i8, __VA_ARGS__)
-
-#define ST_B4(RTYPE, in0, in1, in2, in3, pdst, stride) do {  \
-  ST_B2(RTYPE, in0, in1, pdst, stride);                      \
-  ST_B2(RTYPE, in2, in3, pdst + 2 * stride, stride);         \
-} while (0)
-#define ST_UB4(...) ST_B4(v16u8, __VA_ARGS__)
-#define ST_SB4(...) ST_B4(v16i8, __VA_ARGS__)
-
-#define ST_B8(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7,    \
-              pdst, stride) do {                                \
-  ST_B4(RTYPE, in0, in1, in2, in3, pdst, stride);               \
-  ST_B4(RTYPE, in4, in5, in6, in7, pdst + 4 * stride, stride);  \
-} while (0)
-#define ST_UB8(...) ST_B8(v16u8, __VA_ARGS__)
-
-/* Description : Store vectors of 4 word elements with stride
- * Arguments   : Inputs - in0, in1, in2, in3, pdst, stride
- * Details     : Store 4 word elements from 'in0' to (pdst + 0 * stride)
- *               Store 4 word elements from 'in1' to (pdst + 1 * stride)
- *               Store 4 word elements from 'in2' to (pdst + 2 * stride)
- *               Store 4 word elements from 'in3' to (pdst + 3 * stride)
- */
-#define ST_W2(RTYPE, in0, in1, pdst, stride) do {  \
-  ST_W(RTYPE, in0, pdst);                          \
-  ST_W(RTYPE, in1, pdst + stride);                 \
-} while (0)
-#define ST_UW2(...) ST_W2(v4u32, __VA_ARGS__)
-#define ST_SW2(...) ST_W2(v4i32, __VA_ARGS__)
-
-#define ST_W3(RTYPE, in0, in1, in2, pdst, stride) do {  \
-  ST_W2(RTYPE, in0, in1, pdst, stride);                 \
-  ST_W(RTYPE, in2, pdst + 2 * stride);                  \
-} while (0)
-#define ST_UW3(...) ST_W3(v4u32, __VA_ARGS__)
-#define ST_SW3(...) ST_W3(v4i32, __VA_ARGS__)
-
-#define ST_W4(RTYPE, in0, in1, in2, in3, pdst, stride) do {  \
-  ST_W2(RTYPE, in0, in1, pdst, stride);                      \
-  ST_W2(RTYPE, in2, in3, pdst + 2 * stride, stride);         \
-} while (0)
-#define ST_UW4(...) ST_W4(v4u32, __VA_ARGS__)
-#define ST_SW4(...) ST_W4(v4i32, __VA_ARGS__)
-
-/* Description : Store vectors of 8 halfword elements with stride
- * Arguments   : Inputs - in0, in1, pdst, stride
- * Details     : Store 8 halfword elements from 'in0' to (pdst)
- *               Store 8 halfword elements from 'in1' to (pdst + stride)
- */
-#define ST_H2(RTYPE, in0, in1, pdst, stride) do {  \
-  ST_H(RTYPE, in0, pdst);                          \
-  ST_H(RTYPE, in1, pdst + stride);                 \
-} while (0)
-#define ST_UH2(...) ST_H2(v8u16, __VA_ARGS__)
-#define ST_SH2(...) ST_H2(v8i16, __VA_ARGS__)
-
-/* Description : Store 2x4 byte block to destination memory from input vector
- * Arguments   : Inputs - in, stidx, pdst, stride
- * Details     : Index 'stidx' halfword element from 'in' vector is copied to
- *               the GP register and stored to (pdst)
- *               Index 'stidx+1' halfword element from 'in' vector is copied to
- *               the GP register and stored to (pdst + stride)
- *               Index 'stidx+2' halfword element from 'in' vector is copied to
- *               the GP register and stored to (pdst + 2 * stride)
- *               Index 'stidx+3' halfword element from 'in' vector is copied to
- *               the GP register and stored to (pdst + 3 * stride)
- */
-#define ST2x4_UB(in, stidx, pdst, stride) do {                   \
-  uint8_t* pblk_2x4_m = (uint8_t*)pdst;                          \
-  const uint16_t out0_m = __msa_copy_s_h((v8i16)in, stidx);      \
-  const uint16_t out1_m = __msa_copy_s_h((v8i16)in, stidx + 1);  \
-  const uint16_t out2_m = __msa_copy_s_h((v8i16)in, stidx + 2);  \
-  const uint16_t out3_m = __msa_copy_s_h((v8i16)in, stidx + 3);  \
-  SH(out0_m, pblk_2x4_m);                                        \
-  pblk_2x4_m += stride;                                          \
-  SH(out1_m, pblk_2x4_m);                                        \
-  pblk_2x4_m += stride;                                          \
-  SH(out2_m, pblk_2x4_m);                                        \
-  pblk_2x4_m += stride;                                          \
-  SH(out3_m, pblk_2x4_m);                                        \
-} while (0)
-
-/* Description : Store 4x4 byte block to destination memory from input vector
- * Arguments   : Inputs - in0, in1, pdst, stride
- * Details     : 'Idx0' word element from input vector 'in0' is copied to the
- *               GP register and stored to (pdst)
- *               'Idx1' word element from input vector 'in0' is copied to the
- *               GP register and stored to (pdst + stride)
- *               'Idx2' word element from input vector 'in0' is copied to the
- *               GP register and stored to (pdst + 2 * stride)
- *               'Idx3' word element from input vector 'in0' is copied to the
- *               GP register and stored to (pdst + 3 * stride)
- */
-#define ST4x4_UB(in0, in1, idx0, idx1, idx2, idx3, pdst, stride) do {  \
-  uint8_t* const pblk_4x4_m = (uint8_t*)pdst;                          \
-  const uint32_t out0_m = __msa_copy_s_w((v4i32)in0, idx0);            \
-  const uint32_t out1_m = __msa_copy_s_w((v4i32)in0, idx1);            \
-  const uint32_t out2_m = __msa_copy_s_w((v4i32)in1, idx2);            \
-  const uint32_t out3_m = __msa_copy_s_w((v4i32)in1, idx3);            \
-  SW4(out0_m, out1_m, out2_m, out3_m, pblk_4x4_m, stride);             \
-} while (0)
-
-#define ST4x8_UB(in0, in1, pdst, stride) do {                     \
-  uint8_t* const pblk_4x8 = (uint8_t*)pdst;                       \
-  ST4x4_UB(in0, in0, 0, 1, 2, 3, pblk_4x8, stride);               \
-  ST4x4_UB(in1, in1, 0, 1, 2, 3, pblk_4x8 + 4 * stride, stride);  \
-} while (0)
-
-/* Description : Immediate number of elements to slide
- * Arguments   : Inputs  - in0, in1, slide_val
- *               Outputs - out
- *               Return Type - as per RTYPE
- * Details     : Byte elements from 'in1' vector are slid into 'in0' by
- *               value specified in the 'slide_val'
- */
-#define SLDI_B(RTYPE, in0, in1, slide_val)                      \
-        (RTYPE)__msa_sldi_b((v16i8)in0, (v16i8)in1, slide_val)  \
-
-#define SLDI_UB(...) SLDI_B(v16u8, __VA_ARGS__)
-#define SLDI_SB(...) SLDI_B(v16i8, __VA_ARGS__)
-#define SLDI_SH(...) SLDI_B(v8i16, __VA_ARGS__)
-
-/* Description : Shuffle byte vector elements as per mask vector
- * Arguments   : Inputs  - in0, in1, in2, in3, mask0, mask1
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Byte elements from 'in0' & 'in1' are copied selectively to
- *               'out0' as per control vector 'mask0'
- */
-#define VSHF_B(RTYPE, in0, in1, mask)                              \
-        (RTYPE)__msa_vshf_b((v16i8)mask, (v16i8)in1, (v16i8)in0)
-
-#define VSHF_UB(...) VSHF_B(v16u8, __VA_ARGS__)
-#define VSHF_SB(...) VSHF_B(v16i8, __VA_ARGS__)
-#define VSHF_UH(...) VSHF_B(v8u16, __VA_ARGS__)
-#define VSHF_SH(...) VSHF_B(v8i16, __VA_ARGS__)
-
-#define VSHF_B2(RTYPE, in0, in1, in2, in3, mask0, mask1, out0, out1) do {  \
-  out0 = VSHF_B(RTYPE, in0, in1, mask0);                                   \
-  out1 = VSHF_B(RTYPE, in2, in3, mask1);                                   \
-} while (0)
-#define VSHF_B2_UB(...) VSHF_B2(v16u8, __VA_ARGS__)
-#define VSHF_B2_SB(...) VSHF_B2(v16i8, __VA_ARGS__)
-#define VSHF_B2_UH(...) VSHF_B2(v8u16, __VA_ARGS__)
-#define VSHF_B2_SH(...) VSHF_B2(v8i16, __VA_ARGS__)
-
-/* Description : Shuffle halfword vector elements as per mask vector
- * Arguments   : Inputs  - in0, in1, in2, in3, mask0, mask1
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : halfword elements from 'in0' & 'in1' are copied selectively to
- *               'out0' as per control vector 'mask0'
- */
-#define VSHF_H2(RTYPE, in0, in1, in2, in3, mask0, mask1, out0, out1) do {  \
-  out0 = (RTYPE)__msa_vshf_h((v8i16)mask0, (v8i16)in1, (v8i16)in0);        \
-  out1 = (RTYPE)__msa_vshf_h((v8i16)mask1, (v8i16)in3, (v8i16)in2);        \
-} while (0)
-#define VSHF_H2_UH(...) VSHF_H2(v8u16, __VA_ARGS__)
-#define VSHF_H2_SH(...) VSHF_H2(v8i16, __VA_ARGS__)
-
-/* Description : Dot product of byte vector elements
- * Arguments   : Inputs  - mult0, mult1, cnst0, cnst1
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Signed byte elements from 'mult0' are multiplied with
- *               signed byte elements from 'cnst0' producing a result
- *               twice the size of input i.e. signed halfword.
- *               The multiplication result of adjacent odd-even elements
- *               are added together and written to the 'out0' vector
-*/
-#define DOTP_SB2(RTYPE, mult0, mult1, cnst0, cnst1, out0, out1) do {  \
-  out0 = (RTYPE)__msa_dotp_s_h((v16i8)mult0, (v16i8)cnst0);           \
-  out1 = (RTYPE)__msa_dotp_s_h((v16i8)mult1, (v16i8)cnst1);           \
-} while (0)
-#define DOTP_SB2_SH(...) DOTP_SB2(v8i16, __VA_ARGS__)
-
-/* Description : Dot product of halfword vector elements
- * Arguments   : Inputs  - mult0, mult1, cnst0, cnst1
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Signed halfword elements from 'mult0' are multiplied with
- *               signed halfword elements from 'cnst0' producing a result
- *               twice the size of input i.e. signed word.
- *               The multiplication result of adjacent odd-even elements
- *               are added together and written to the 'out0' vector
- */
-#define DOTP_SH2(RTYPE, mult0, mult1, cnst0, cnst1, out0, out1) do {  \
-  out0 = (RTYPE)__msa_dotp_s_w((v8i16)mult0, (v8i16)cnst0);           \
-  out1 = (RTYPE)__msa_dotp_s_w((v8i16)mult1, (v8i16)cnst1);           \
-} while (0)
-#define DOTP_SH2_SW(...) DOTP_SH2(v4i32, __VA_ARGS__)
-
-/* Description : Dot product of unsigned word vector elements
- * Arguments   : Inputs  - mult0, mult1, cnst0, cnst1
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Unsigned word elements from 'mult0' are multiplied with
- *               unsigned word elements from 'cnst0' producing a result
- *               twice the size of input i.e. unsigned double word.
- *               The multiplication result of adjacent odd-even elements
- *               are added together and written to the 'out0' vector
- */
-#define DOTP_UW2(RTYPE, mult0, mult1, cnst0, cnst1, out0, out1) do {  \
-  out0 = (RTYPE)__msa_dotp_u_d((v4u32)mult0, (v4u32)cnst0);           \
-  out1 = (RTYPE)__msa_dotp_u_d((v4u32)mult1, (v4u32)cnst1);           \
-} while (0)
-#define DOTP_UW2_UD(...) DOTP_UW2(v2u64, __VA_ARGS__)
-
-/* Description : Dot product & addition of halfword vector elements
- * Arguments   : Inputs  - mult0, mult1, cnst0, cnst1
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Signed halfword elements from 'mult0' are multiplied with
- *               signed halfword elements from 'cnst0' producing a result
- *               twice the size of input i.e. signed word.
- *               The multiplication result of adjacent odd-even elements
- *               are added to the 'out0' vector
- */
-#define DPADD_SH2(RTYPE, mult0, mult1, cnst0, cnst1, out0, out1) do {      \
-  out0 = (RTYPE)__msa_dpadd_s_w((v4i32)out0, (v8i16)mult0, (v8i16)cnst0);  \
-  out1 = (RTYPE)__msa_dpadd_s_w((v4i32)out1, (v8i16)mult1, (v8i16)cnst1);  \
-} while (0)
-#define DPADD_SH2_SW(...) DPADD_SH2(v4i32, __VA_ARGS__)
-
-/* Description : Clips all signed halfword elements of input vector
- *               between 0 & 255
- * Arguments   : Input/output  - val
- *               Return Type - signed halfword
- */
-#define CLIP_SH_0_255(val) do {                   \
-  const v8i16 max_m = __msa_ldi_h(255);           \
-  val = __msa_maxi_s_h((v8i16)val, 0);            \
-  val = __msa_min_s_h(max_m, (v8i16)val);         \
-} while (0)
-
-#define CLIP_SH2_0_255(in0, in1) do {  \
-  CLIP_SH_0_255(in0);                  \
-  CLIP_SH_0_255(in1);                  \
-} while (0)
-
-#define CLIP_SH4_0_255(in0, in1, in2, in3) do {  \
-  CLIP_SH2_0_255(in0, in1);                      \
-  CLIP_SH2_0_255(in2, in3);                      \
-} while (0)
-
-/* Description : Clips all unsigned halfword elements of input vector
- *               between 0 & 255
- * Arguments   : Input  - in
- *               Output - out_m
- *               Return Type - unsigned halfword
- */
-#define CLIP_UH_0_255(in) do {                    \
-  const v8u16 max_m = (v8u16)__msa_ldi_h(255);    \
-  in = __msa_maxi_u_h((v8u16) in, 0);             \
-  in = __msa_min_u_h((v8u16) max_m, (v8u16) in);  \
-} while (0)
-
-#define CLIP_UH2_0_255(in0, in1) do {  \
-  CLIP_UH_0_255(in0);                  \
-  CLIP_UH_0_255(in1);                  \
-} while (0)
-
-/* Description : Clips all signed word elements of input vector
- *               between 0 & 255
- * Arguments   : Input/output  - val
- *               Return Type - signed word
- */
-#define CLIP_SW_0_255(val) do {                   \
-  const v4i32 max_m = __msa_ldi_w(255);           \
-  val = __msa_maxi_s_w((v4i32)val, 0);            \
-  val = __msa_min_s_w(max_m, (v4i32)val);         \
-} while (0)
-
-#define CLIP_SW4_0_255(in0, in1, in2, in3) do {   \
-  CLIP_SW_0_255(in0);                             \
-  CLIP_SW_0_255(in1);                             \
-  CLIP_SW_0_255(in2);                             \
-  CLIP_SW_0_255(in3);                             \
-} while (0)
-
-/* Description : Horizontal addition of 4 signed word elements of input vector
- * Arguments   : Input  - in       (signed word vector)
- *               Output - sum_m    (i32 sum)
- *               Return Type - signed word (GP)
- * Details     : 4 signed word elements of 'in' vector are added together and
- *               the resulting integer sum is returned
- */
-static WEBP_INLINE int32_t func_hadd_sw_s32(v4i32 in) {
-  const v2i64 res0_m = __msa_hadd_s_d((v4i32)in, (v4i32)in);
-  const v2i64 res1_m = __msa_splati_d(res0_m, 1);
-  const v2i64 out = res0_m + res1_m;
-  int32_t sum_m = __msa_copy_s_w((v4i32)out, 0);
-  return sum_m;
-}
-#define HADD_SW_S32(in) func_hadd_sw_s32(in)
-
-/* Description : Horizontal addition of 8 signed halfword elements
- * Arguments   : Input  - in       (signed halfword vector)
- *               Output - sum_m    (s32 sum)
- *               Return Type - signed word
- * Details     : 8 signed halfword elements of input vector are added
- *               together and the resulting integer sum is returned
- */
-static WEBP_INLINE int32_t func_hadd_sh_s32(v8i16 in) {
-  const v4i32 res = __msa_hadd_s_w(in, in);
-  const v2i64 res0 = __msa_hadd_s_d(res, res);
-  const v2i64 res1 = __msa_splati_d(res0, 1);
-  const v2i64 res2 = res0 + res1;
-  const int32_t sum_m = __msa_copy_s_w((v4i32)res2, 0);
-  return sum_m;
-}
-#define HADD_SH_S32(in) func_hadd_sh_s32(in)
-
-/* Description : Horizontal addition of 8 unsigned halfword elements
- * Arguments   : Input  - in       (unsigned halfword vector)
- *               Output - sum_m    (u32 sum)
- *               Return Type - unsigned word
- * Details     : 8 unsigned halfword elements of input vector are added
- *               together and the resulting integer sum is returned
- */
-static WEBP_INLINE uint32_t func_hadd_uh_u32(v8u16 in) {
-  uint32_t sum_m;
-  const v4u32 res_m = __msa_hadd_u_w(in, in);
-  v2u64 res0_m = __msa_hadd_u_d(res_m, res_m);
-  v2u64 res1_m = (v2u64)__msa_splati_d((v2i64)res0_m, 1);
-  res0_m = res0_m + res1_m;
-  sum_m = __msa_copy_s_w((v4i32)res0_m, 0);
-  return sum_m;
-}
-#define HADD_UH_U32(in) func_hadd_uh_u32(in)
-
-/* Description : Horizontal addition of signed half word vector elements
-   Arguments   : Inputs  - in0, in1
-                 Outputs - out0, out1
-                 Return Type - as per RTYPE
-   Details     : Each signed odd half word element from 'in0' is added to
-                 even signed half word element from 'in0' (pairwise) and the
-                 halfword result is written in 'out0'
-*/
-#define HADD_SH2(RTYPE, in0, in1, out0, out1) do {       \
-  out0 = (RTYPE)__msa_hadd_s_w((v8i16)in0, (v8i16)in0);  \
-  out1 = (RTYPE)__msa_hadd_s_w((v8i16)in1, (v8i16)in1);  \
-} while (0)
-#define HADD_SH2_SW(...) HADD_SH2(v4i32, __VA_ARGS__)
-
-#define HADD_SH4(RTYPE, in0, in1, in2, in3, out0, out1, out2, out3) do {  \
-  HADD_SH2(RTYPE, in0, in1, out0, out1);                                  \
-  HADD_SH2(RTYPE, in2, in3, out2, out3);                                  \
-} while (0)
-#define HADD_SH4_SW(...) HADD_SH4(v4i32, __VA_ARGS__)
-
-/* Description : Horizontal subtraction of unsigned byte vector elements
- * Arguments   : Inputs  - in0, in1
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Each unsigned odd byte element from 'in0' is subtracted from
- *               even unsigned byte element from 'in0' (pairwise) and the
- *               halfword result is written to 'out0'
- */
-#define HSUB_UB2(RTYPE, in0, in1, out0, out1) do {       \
-  out0 = (RTYPE)__msa_hsub_u_h((v16u8)in0, (v16u8)in0);  \
-  out1 = (RTYPE)__msa_hsub_u_h((v16u8)in1, (v16u8)in1);  \
-} while (0)
-#define HSUB_UB2_UH(...) HSUB_UB2(v8u16, __VA_ARGS__)
-#define HSUB_UB2_SH(...) HSUB_UB2(v8i16, __VA_ARGS__)
-#define HSUB_UB2_SW(...) HSUB_UB2(v4i32, __VA_ARGS__)
-
-/* Description : Set element n input vector to GPR value
- * Arguments   : Inputs - in0, in1, in2, in3
- *               Output - out
- *               Return Type - as per RTYPE
- * Details     : Set element 0 in vector 'out' to value specified in 'in0'
- */
-#define INSERT_W2(RTYPE, in0, in1, out) do {        \
-  out = (RTYPE)__msa_insert_w((v4i32)out, 0, in0);  \
-  out = (RTYPE)__msa_insert_w((v4i32)out, 1, in1);  \
-} while (0)
-#define INSERT_W2_UB(...) INSERT_W2(v16u8, __VA_ARGS__)
-#define INSERT_W2_SB(...) INSERT_W2(v16i8, __VA_ARGS__)
-
-#define INSERT_W4(RTYPE, in0, in1, in2, in3, out) do {  \
-  out = (RTYPE)__msa_insert_w((v4i32)out, 0, in0);      \
-  out = (RTYPE)__msa_insert_w((v4i32)out, 1, in1);      \
-  out = (RTYPE)__msa_insert_w((v4i32)out, 2, in2);      \
-  out = (RTYPE)__msa_insert_w((v4i32)out, 3, in3);      \
-} while (0)
-#define INSERT_W4_UB(...) INSERT_W4(v16u8, __VA_ARGS__)
-#define INSERT_W4_SB(...) INSERT_W4(v16i8, __VA_ARGS__)
-#define INSERT_W4_SW(...) INSERT_W4(v4i32, __VA_ARGS__)
-
-/* Description : Set element n of double word input vector to GPR value
- * Arguments   : Inputs - in0, in1
- *               Output - out
- *               Return Type - as per RTYPE
- * Details     : Set element 0 in vector 'out' to GPR value specified in 'in0'
- *               Set element 1 in vector 'out' to GPR value specified in 'in1'
- */
-#define INSERT_D2(RTYPE, in0, in1, out) do {        \
-  out = (RTYPE)__msa_insert_d((v2i64)out, 0, in0);  \
-  out = (RTYPE)__msa_insert_d((v2i64)out, 1, in1);  \
-} while (0)
-#define INSERT_D2_UB(...) INSERT_D2(v16u8, __VA_ARGS__)
-#define INSERT_D2_SB(...) INSERT_D2(v16i8, __VA_ARGS__)
-
-/* Description : Interleave even byte elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Even byte elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'
- */
-#define ILVEV_B2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvev_b((v16i8)in1, (v16i8)in0);        \
-  out1 = (RTYPE)__msa_ilvev_b((v16i8)in3, (v16i8)in2);        \
-} while (0)
-#define ILVEV_B2_UB(...) ILVEV_B2(v16u8, __VA_ARGS__)
-#define ILVEV_B2_SB(...) ILVEV_B2(v16i8, __VA_ARGS__)
-#define ILVEV_B2_UH(...) ILVEV_B2(v8u16, __VA_ARGS__)
-#define ILVEV_B2_SH(...) ILVEV_B2(v8i16, __VA_ARGS__)
-#define ILVEV_B2_SD(...) ILVEV_B2(v2i64, __VA_ARGS__)
-
-/* Description : Interleave odd byte elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Odd byte elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'
- */
-#define ILVOD_B2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvod_b((v16i8)in1, (v16i8)in0);        \
-  out1 = (RTYPE)__msa_ilvod_b((v16i8)in3, (v16i8)in2);        \
-} while (0)
-#define ILVOD_B2_UB(...) ILVOD_B2(v16u8, __VA_ARGS__)
-#define ILVOD_B2_SB(...) ILVOD_B2(v16i8, __VA_ARGS__)
-#define ILVOD_B2_UH(...) ILVOD_B2(v8u16, __VA_ARGS__)
-#define ILVOD_B2_SH(...) ILVOD_B2(v8i16, __VA_ARGS__)
-#define ILVOD_B2_SD(...) ILVOD_B2(v2i64, __VA_ARGS__)
-
-/* Description : Interleave even halfword elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Even halfword elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'
- */
-#define ILVEV_H2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvev_h((v8i16)in1, (v8i16)in0);        \
-  out1 = (RTYPE)__msa_ilvev_h((v8i16)in3, (v8i16)in2);        \
-} while (0)
-#define ILVEV_H2_UB(...) ILVEV_H2(v16u8, __VA_ARGS__)
-#define ILVEV_H2_UH(...) ILVEV_H2(v8u16, __VA_ARGS__)
-#define ILVEV_H2_SH(...) ILVEV_H2(v8i16, __VA_ARGS__)
-#define ILVEV_H2_SW(...) ILVEV_H2(v4i32, __VA_ARGS__)
-
-/* Description : Interleave odd halfword elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Odd halfword elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'
- */
-#define ILVOD_H2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvod_h((v8i16)in1, (v8i16)in0);        \
-  out1 = (RTYPE)__msa_ilvod_h((v8i16)in3, (v8i16)in2);        \
-} while (0)
-#define ILVOD_H2_UB(...) ILVOD_H2(v16u8, __VA_ARGS__)
-#define ILVOD_H2_UH(...) ILVOD_H2(v8u16, __VA_ARGS__)
-#define ILVOD_H2_SH(...) ILVOD_H2(v8i16, __VA_ARGS__)
-#define ILVOD_H2_SW(...) ILVOD_H2(v4i32, __VA_ARGS__)
-
-/* Description : Interleave even word elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Even word elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'
- */
-#define ILVEV_W2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvev_w((v4i32)in1, (v4i32)in0);        \
-  out1 = (RTYPE)__msa_ilvev_w((v4i32)in3, (v4i32)in2);        \
-} while (0)
-#define ILVEV_W2_UB(...) ILVEV_W2(v16u8, __VA_ARGS__)
-#define ILVEV_W2_SB(...) ILVEV_W2(v16i8, __VA_ARGS__)
-#define ILVEV_W2_UH(...) ILVEV_W2(v8u16, __VA_ARGS__)
-#define ILVEV_W2_SD(...) ILVEV_W2(v2i64, __VA_ARGS__)
-
-/* Description : Interleave even-odd word elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Even word elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'
- *               Odd word elements of 'in2' and 'in3' are interleaved
- *               and written to 'out1'
- */
-#define ILVEVOD_W2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvev_w((v4i32)in1, (v4i32)in0);          \
-  out1 = (RTYPE)__msa_ilvod_w((v4i32)in3, (v4i32)in2);          \
-} while (0)
-#define ILVEVOD_W2_UB(...) ILVEVOD_W2(v16u8, __VA_ARGS__)
-#define ILVEVOD_W2_UH(...) ILVEVOD_W2(v8u16, __VA_ARGS__)
-#define ILVEVOD_W2_SH(...) ILVEVOD_W2(v8i16, __VA_ARGS__)
-#define ILVEVOD_W2_SW(...) ILVEVOD_W2(v4i32, __VA_ARGS__)
-
-/* Description : Interleave even-odd half-word elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Even half-word elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'
- *               Odd half-word elements of 'in2' and 'in3' are interleaved
- *               and written to 'out1'
- */
-#define ILVEVOD_H2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvev_h((v8i16)in1, (v8i16)in0);          \
-  out1 = (RTYPE)__msa_ilvod_h((v8i16)in3, (v8i16)in2);          \
-} while (0)
-#define ILVEVOD_H2_UB(...) ILVEVOD_H2(v16u8, __VA_ARGS__)
-#define ILVEVOD_H2_UH(...) ILVEVOD_H2(v8u16, __VA_ARGS__)
-#define ILVEVOD_H2_SH(...) ILVEVOD_H2(v8i16, __VA_ARGS__)
-#define ILVEVOD_H2_SW(...) ILVEVOD_H2(v4i32, __VA_ARGS__)
-
-/* Description : Interleave even double word elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Even double word elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'
- */
-#define ILVEV_D2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvev_d((v2i64)in1, (v2i64)in0);        \
-  out1 = (RTYPE)__msa_ilvev_d((v2i64)in3, (v2i64)in2);        \
-} while (0)
-#define ILVEV_D2_UB(...) ILVEV_D2(v16u8, __VA_ARGS__)
-#define ILVEV_D2_SB(...) ILVEV_D2(v16i8, __VA_ARGS__)
-#define ILVEV_D2_SW(...) ILVEV_D2(v4i32, __VA_ARGS__)
-#define ILVEV_D2_SD(...) ILVEV_D2(v2i64, __VA_ARGS__)
-
-/* Description : Interleave left half of byte elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Left half of byte elements of 'in0' and 'in1' are interleaved
- *               and written to 'out0'.
- */
-#define ILVL_B2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvl_b((v16i8)in0, (v16i8)in1);        \
-  out1 = (RTYPE)__msa_ilvl_b((v16i8)in2, (v16i8)in3);        \
-} while (0)
-#define ILVL_B2_UB(...) ILVL_B2(v16u8, __VA_ARGS__)
-#define ILVL_B2_SB(...) ILVL_B2(v16i8, __VA_ARGS__)
-#define ILVL_B2_UH(...) ILVL_B2(v8u16, __VA_ARGS__)
-#define ILVL_B2_SH(...) ILVL_B2(v8i16, __VA_ARGS__)
-#define ILVL_B2_SW(...) ILVL_B2(v4i32, __VA_ARGS__)
-
-/* Description : Interleave right half of byte elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Right half of byte elements of 'in0' and 'in1' are interleaved
- *               and written to out0.
- */
-#define ILVR_B2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvr_b((v16i8)in0, (v16i8)in1);        \
-  out1 = (RTYPE)__msa_ilvr_b((v16i8)in2, (v16i8)in3);        \
-} while (0)
-#define ILVR_B2_UB(...) ILVR_B2(v16u8, __VA_ARGS__)
-#define ILVR_B2_SB(...) ILVR_B2(v16i8, __VA_ARGS__)
-#define ILVR_B2_UH(...) ILVR_B2(v8u16, __VA_ARGS__)
-#define ILVR_B2_SH(...) ILVR_B2(v8i16, __VA_ARGS__)
-#define ILVR_B2_SW(...) ILVR_B2(v4i32, __VA_ARGS__)
-
-#define ILVR_B4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7,  \
-                out0, out1, out2, out3) do {                    \
-  ILVR_B2(RTYPE, in0, in1, in2, in3, out0, out1);               \
-  ILVR_B2(RTYPE, in4, in5, in6, in7, out2, out3);               \
-} while (0)
-#define ILVR_B4_UB(...) ILVR_B4(v16u8, __VA_ARGS__)
-#define ILVR_B4_SB(...) ILVR_B4(v16i8, __VA_ARGS__)
-#define ILVR_B4_UH(...) ILVR_B4(v8u16, __VA_ARGS__)
-#define ILVR_B4_SH(...) ILVR_B4(v8i16, __VA_ARGS__)
-#define ILVR_B4_SW(...) ILVR_B4(v4i32, __VA_ARGS__)
-
-/* Description : Interleave right half of halfword elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Right half of halfword elements of 'in0' and 'in1' are
- *               interleaved and written to 'out0'.
- */
-#define ILVR_H2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvr_h((v8i16)in0, (v8i16)in1);        \
-  out1 = (RTYPE)__msa_ilvr_h((v8i16)in2, (v8i16)in3);        \
-} while (0)
-#define ILVR_H2_UB(...) ILVR_H2(v16u8, __VA_ARGS__)
-#define ILVR_H2_SH(...) ILVR_H2(v8i16, __VA_ARGS__)
-#define ILVR_H2_SW(...) ILVR_H2(v4i32, __VA_ARGS__)
-
-#define ILVR_H4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7,  \
-                out0, out1, out2, out3) do {                    \
-  ILVR_H2(RTYPE, in0, in1, in2, in3, out0, out1);               \
-  ILVR_H2(RTYPE, in4, in5, in6, in7, out2, out3);               \
-} while (0)
-#define ILVR_H4_UB(...) ILVR_H4(v16u8, __VA_ARGS__)
-#define ILVR_H4_SH(...) ILVR_H4(v8i16, __VA_ARGS__)
-#define ILVR_H4_SW(...) ILVR_H4(v4i32, __VA_ARGS__)
-
-/* Description : Interleave right half of double word elements from vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Right half of double word elements of 'in0' and 'in1' are
- *               interleaved and written to 'out0'.
- */
-#define ILVR_D2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_ilvr_d((v2i64)in0, (v2i64)in1);        \
-  out1 = (RTYPE)__msa_ilvr_d((v2i64)in2, (v2i64)in3);        \
-} while (0)
-#define ILVR_D2_UB(...) ILVR_D2(v16u8, __VA_ARGS__)
-#define ILVR_D2_SB(...) ILVR_D2(v16i8, __VA_ARGS__)
-#define ILVR_D2_SH(...) ILVR_D2(v8i16, __VA_ARGS__)
-
-#define ILVR_D4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7,  \
-                out0, out1, out2, out3) do {                    \
-  ILVR_D2(RTYPE, in0, in1, in2, in3, out0, out1);               \
-  ILVR_D2(RTYPE, in4, in5, in6, in7, out2, out3);               \
-} while (0)
-#define ILVR_D4_SB(...) ILVR_D4(v16i8, __VA_ARGS__)
-#define ILVR_D4_UB(...) ILVR_D4(v16u8, __VA_ARGS__)
-
-/* Description : Interleave both left and right half of input vectors
- * Arguments   : Inputs  - in0, in1
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Right half of byte elements from 'in0' and 'in1' are
- *               interleaved and written to 'out0'
- */
-#define ILVRL_B2(RTYPE, in0, in1, out0, out1) do {     \
-  out0 = (RTYPE)__msa_ilvr_b((v16i8)in0, (v16i8)in1);  \
-  out1 = (RTYPE)__msa_ilvl_b((v16i8)in0, (v16i8)in1);  \
-} while (0)
-#define ILVRL_B2_UB(...) ILVRL_B2(v16u8, __VA_ARGS__)
-#define ILVRL_B2_SB(...) ILVRL_B2(v16i8, __VA_ARGS__)
-#define ILVRL_B2_UH(...) ILVRL_B2(v8u16, __VA_ARGS__)
-#define ILVRL_B2_SH(...) ILVRL_B2(v8i16, __VA_ARGS__)
-#define ILVRL_B2_SW(...) ILVRL_B2(v4i32, __VA_ARGS__)
-
-#define ILVRL_H2(RTYPE, in0, in1, out0, out1) do {     \
-  out0 = (RTYPE)__msa_ilvr_h((v8i16)in0, (v8i16)in1);  \
-  out1 = (RTYPE)__msa_ilvl_h((v8i16)in0, (v8i16)in1);  \
-} while (0)
-#define ILVRL_H2_UB(...) ILVRL_H2(v16u8, __VA_ARGS__)
-#define ILVRL_H2_SB(...) ILVRL_H2(v16i8, __VA_ARGS__)
-#define ILVRL_H2_SH(...) ILVRL_H2(v8i16, __VA_ARGS__)
-#define ILVRL_H2_SW(...) ILVRL_H2(v4i32, __VA_ARGS__)
-#define ILVRL_H2_UW(...) ILVRL_H2(v4u32, __VA_ARGS__)
-
-#define ILVRL_W2(RTYPE, in0, in1, out0, out1) do {     \
-  out0 = (RTYPE)__msa_ilvr_w((v4i32)in0, (v4i32)in1);  \
-  out1 = (RTYPE)__msa_ilvl_w((v4i32)in0, (v4i32)in1);  \
-} while (0)
-#define ILVRL_W2_UB(...) ILVRL_W2(v16u8, __VA_ARGS__)
-#define ILVRL_W2_SH(...) ILVRL_W2(v8i16, __VA_ARGS__)
-#define ILVRL_W2_SW(...) ILVRL_W2(v4i32, __VA_ARGS__)
-#define ILVRL_W2_UW(...) ILVRL_W2(v4u32, __VA_ARGS__)
-
-/* Description : Pack even byte elements of vector pairs
- *  Arguments   : Inputs  - in0, in1, in2, in3
- *                Outputs - out0, out1
- *                Return Type - as per RTYPE
- *  Details     : Even byte elements of 'in0' are copied to the left half of
- *                'out0' & even byte elements of 'in1' are copied to the right
- *                half of 'out0'.
- */
-#define PCKEV_B2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_pckev_b((v16i8)in0, (v16i8)in1);        \
-  out1 = (RTYPE)__msa_pckev_b((v16i8)in2, (v16i8)in3);        \
-} while (0)
-#define PCKEV_B2_SB(...) PCKEV_B2(v16i8, __VA_ARGS__)
-#define PCKEV_B2_UB(...) PCKEV_B2(v16u8, __VA_ARGS__)
-#define PCKEV_B2_SH(...) PCKEV_B2(v8i16, __VA_ARGS__)
-#define PCKEV_B2_SW(...) PCKEV_B2(v4i32, __VA_ARGS__)
-
-#define PCKEV_B4(RTYPE, in0, in1, in2, in3, in4, in5, in6, in7,  \
-                 out0, out1, out2, out3) do {                    \
-  PCKEV_B2(RTYPE, in0, in1, in2, in3, out0, out1);               \
-  PCKEV_B2(RTYPE, in4, in5, in6, in7, out2, out3);               \
-} while (0)
-#define PCKEV_B4_SB(...) PCKEV_B4(v16i8, __VA_ARGS__)
-#define PCKEV_B4_UB(...) PCKEV_B4(v16u8, __VA_ARGS__)
-#define PCKEV_B4_SH(...) PCKEV_B4(v8i16, __VA_ARGS__)
-#define PCKEV_B4_SW(...) PCKEV_B4(v4i32, __VA_ARGS__)
-
-/* Description : Pack even halfword elements of vector pairs
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Even halfword elements of 'in0' are copied to the left half of
- *               'out0' & even halfword elements of 'in1' are copied to the
- *               right half of 'out0'.
- */
-#define PCKEV_H2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_pckev_h((v8i16)in0, (v8i16)in1);        \
-  out1 = (RTYPE)__msa_pckev_h((v8i16)in2, (v8i16)in3);        \
-} while (0)
-#define PCKEV_H2_UH(...) PCKEV_H2(v8u16, __VA_ARGS__)
-#define PCKEV_H2_SH(...) PCKEV_H2(v8i16, __VA_ARGS__)
-#define PCKEV_H2_SW(...) PCKEV_H2(v4i32, __VA_ARGS__)
-#define PCKEV_H2_UW(...) PCKEV_H2(v4u32, __VA_ARGS__)
-
-/* Description : Pack even word elements of vector pairs
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Even word elements of 'in0' are copied to the left half of
- *               'out0' & even word elements of 'in1' are copied to the
- *               right half of 'out0'.
- */
-#define PCKEV_W2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_pckev_w((v4i32)in0, (v4i32)in1);        \
-  out1 = (RTYPE)__msa_pckev_w((v4i32)in2, (v4i32)in3);        \
-} while (0)
-#define PCKEV_W2_UH(...) PCKEV_W2(v8u16, __VA_ARGS__)
-#define PCKEV_W2_SH(...) PCKEV_W2(v8i16, __VA_ARGS__)
-#define PCKEV_W2_SW(...) PCKEV_W2(v4i32, __VA_ARGS__)
-#define PCKEV_W2_UW(...) PCKEV_W2(v4u32, __VA_ARGS__)
-
-/* Description : Pack odd halfword elements of vector pairs
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Odd halfword elements of 'in0' are copied to the left half of
- *               'out0' & odd halfword elements of 'in1' are copied to the
- *               right half of 'out0'.
- */
-#define PCKOD_H2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_pckod_h((v8i16)in0, (v8i16)in1);        \
-  out1 = (RTYPE)__msa_pckod_h((v8i16)in2, (v8i16)in3);        \
-} while (0)
-#define PCKOD_H2_UH(...) PCKOD_H2(v8u16, __VA_ARGS__)
-#define PCKOD_H2_SH(...) PCKOD_H2(v8i16, __VA_ARGS__)
-#define PCKOD_H2_SW(...) PCKOD_H2(v4i32, __VA_ARGS__)
-#define PCKOD_H2_UW(...) PCKOD_H2(v4u32, __VA_ARGS__)
-
-/* Description : Arithmetic immediate shift right all elements of word vector
- * Arguments   : Inputs  - in0, in1, shift
- *               Outputs - in place operation
- *               Return Type - as per input vector RTYPE
- * Details     : Each element of vector 'in0' is right shifted by 'shift' and
- *               the result is written in-place. 'shift' is a GP variable.
- */
-#define SRAI_W2(RTYPE, in0, in1, shift_val) do {  \
-  in0 = (RTYPE)SRAI_W(in0, shift_val);            \
-  in1 = (RTYPE)SRAI_W(in1, shift_val);            \
-} while (0)
-#define SRAI_W2_SW(...) SRAI_W2(v4i32, __VA_ARGS__)
-#define SRAI_W2_UW(...) SRAI_W2(v4u32, __VA_ARGS__)
-
-#define SRAI_W4(RTYPE, in0, in1, in2, in3, shift_val) do {  \
-  SRAI_W2(RTYPE, in0, in1, shift_val);                      \
-  SRAI_W2(RTYPE, in2, in3, shift_val);                      \
-} while (0)
-#define SRAI_W4_SW(...) SRAI_W4(v4i32, __VA_ARGS__)
-#define SRAI_W4_UW(...) SRAI_W4(v4u32, __VA_ARGS__)
-
-/* Description : Arithmetic shift right all elements of half-word vector
- * Arguments   : Inputs  - in0, in1, shift
- *               Outputs - in place operation
- *               Return Type - as per input vector RTYPE
- * Details     : Each element of vector 'in0' is right shifted by 'shift' and
- *               the result is written in-place. 'shift' is a GP variable.
- */
-#define SRAI_H2(RTYPE, in0, in1, shift_val) do {  \
-  in0 = (RTYPE)SRAI_H(in0, shift_val);            \
-  in1 = (RTYPE)SRAI_H(in1, shift_val);            \
-} while (0)
-#define SRAI_H2_SH(...) SRAI_H2(v8i16, __VA_ARGS__)
-#define SRAI_H2_UH(...) SRAI_H2(v8u16, __VA_ARGS__)
-
-/* Description : Arithmetic rounded shift right all elements of word vector
- * Arguments   : Inputs  - in0, in1, shift
- *               Outputs - in place operation
- *               Return Type - as per input vector RTYPE
- * Details     : Each element of vector 'in0' is right shifted by 'shift' and
- *               the result is written in-place. 'shift' is a GP variable.
- */
-#define SRARI_W2(RTYPE, in0, in1, shift) do {     \
-  in0 = (RTYPE)__msa_srari_w((v4i32)in0, shift);  \
-  in1 = (RTYPE)__msa_srari_w((v4i32)in1, shift);  \
-} while (0)
-#define SRARI_W2_SW(...) SRARI_W2(v4i32, __VA_ARGS__)
-
-#define SRARI_W4(RTYPE, in0, in1, in2, in3, shift) do {  \
-  SRARI_W2(RTYPE, in0, in1, shift);                      \
-  SRARI_W2(RTYPE, in2, in3, shift);                      \
-} while (0)
-#define SRARI_W4_SH(...) SRARI_W4(v8i16, __VA_ARGS__)
-#define SRARI_W4_UW(...) SRARI_W4(v4u32, __VA_ARGS__)
-#define SRARI_W4_SW(...) SRARI_W4(v4i32, __VA_ARGS__)
-
-/* Description : Shift right arithmetic rounded double words
- * Arguments   : Inputs  - in0, in1, shift
- *               Outputs - in place operation
- *               Return Type - as per RTYPE
- * Details     : Each element of vector 'in0' is shifted right arithmetically by
- *               the number of bits in the corresponding element in the vector
- *               'shift'. The last discarded bit is added to shifted value for
- *               rounding and the result is written in-place.
- *               'shift' is a vector.
- */
-#define SRAR_D2(RTYPE, in0, in1, shift) do {            \
-  in0 = (RTYPE)__msa_srar_d((v2i64)in0, (v2i64)shift);  \
-  in1 = (RTYPE)__msa_srar_d((v2i64)in1, (v2i64)shift);  \
-} while (0)
-#define SRAR_D2_SW(...) SRAR_D2(v4i32, __VA_ARGS__)
-#define SRAR_D2_SD(...) SRAR_D2(v2i64, __VA_ARGS__)
-#define SRAR_D2_UD(...) SRAR_D2(v2u64, __VA_ARGS__)
-
-#define SRAR_D4(RTYPE, in0, in1, in2, in3, shift) do {  \
-  SRAR_D2(RTYPE, in0, in1, shift);                      \
-  SRAR_D2(RTYPE, in2, in3, shift);                      \
-} while (0)
-#define SRAR_D4_SD(...) SRAR_D4(v2i64, __VA_ARGS__)
-#define SRAR_D4_UD(...) SRAR_D4(v2u64, __VA_ARGS__)
-
-/* Description : Addition of 2 pairs of half-word vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- * Details     : Each element in 'in0' is added to 'in1' and result is written
- *               to 'out0'.
- */
-#define ADDVI_H2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)ADDVI_H(in0, in1);                            \
-  out1 = (RTYPE)ADDVI_H(in2, in3);                            \
-} while (0)
-#define ADDVI_H2_SH(...) ADDVI_H2(v8i16, __VA_ARGS__)
-#define ADDVI_H2_UH(...) ADDVI_H2(v8u16, __VA_ARGS__)
-
-/* Description : Addition of 2 pairs of word vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- * Details     : Each element in 'in0' is added to 'in1' and result is written
- *               to 'out0'.
- */
-#define ADDVI_W2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)ADDVI_W(in0, in1);                            \
-  out1 = (RTYPE)ADDVI_W(in2, in3);                            \
-} while (0)
-#define ADDVI_W2_SW(...) ADDVI_W2(v4i32, __VA_ARGS__)
-
-/* Description : Fill 2 pairs of word vectors with GP registers
- * Arguments   : Inputs  - in0, in1
- *               Outputs - out0, out1
- * Details     : GP register in0 is replicated in each word element of out0
- *               GP register in1 is replicated in each word element of out1
- */
-#define FILL_W2(RTYPE, in0, in1, out0, out1) do {  \
-  out0 = (RTYPE)__msa_fill_w(in0);                 \
-  out1 = (RTYPE)__msa_fill_w(in1);                 \
-} while (0)
-#define FILL_W2_SW(...) FILL_W2(v4i32, __VA_ARGS__)
-
-/* Description : Addition of 2 pairs of vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- * Details     : Each element in 'in0' is added to 'in1' and result is written
- *               to 'out0'.
- */
-#define ADD2(in0, in1, in2, in3, out0, out1) do {  \
-  out0 = in0 + in1;                                \
-  out1 = in2 + in3;                                \
-} while (0)
-
-#define ADD4(in0, in1, in2, in3, in4, in5, in6, in7,  \
-             out0, out1, out2, out3) do {             \
-  ADD2(in0, in1, in2, in3, out0, out1);               \
-  ADD2(in4, in5, in6, in7, out2, out3);               \
-} while (0)
-
-/* Description : Subtraction of 2 pairs of vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- * Details     : Each element in 'in1' is subtracted from 'in0' and result is
- *               written to 'out0'.
- */
-#define SUB2(in0, in1, in2, in3, out0, out1) do {  \
-  out0 = in0 - in1;                                \
-  out1 = in2 - in3;                                \
-} while (0)
-
-#define SUB3(in0, in1, in2, in3, in4, in5, out0, out1, out2) do {  \
-  out0 = in0 - in1;                                                \
-  out1 = in2 - in3;                                                \
-  out2 = in4 - in5;                                                \
-} while (0)
-
-#define SUB4(in0, in1, in2, in3, in4, in5, in6, in7,  \
-             out0, out1, out2, out3) do {             \
-  out0 = in0 - in1;                                   \
-  out1 = in2 - in3;                                   \
-  out2 = in4 - in5;                                   \
-  out3 = in6 - in7;                                   \
-} while (0)
-
-/* Description : Addition - Subtraction of input vectors
- * Arguments   : Inputs  - in0, in1
- *               Outputs - out0, out1
- * Details     : Each element in 'in1' is added to 'in0' and result is
- *               written to 'out0'.
- *               Each element in 'in1' is subtracted from 'in0' and result is
- *               written to 'out1'.
- */
-#define ADDSUB2(in0, in1, out0, out1) do {  \
-  out0 = in0 + in1;                         \
-  out1 = in0 - in1;                         \
-} while (0)
-
-/* Description : Multiplication of pairs of vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1
- * Details     : Each element from 'in0' is multiplied with elements from 'in1'
- *               and the result is written to 'out0'
- */
-#define MUL2(in0, in1, in2, in3, out0, out1) do {  \
-  out0 = in0 * in1;                                \
-  out1 = in2 * in3;                                \
-} while (0)
-
-#define MUL4(in0, in1, in2, in3, in4, in5, in6, in7,  \
-             out0, out1, out2, out3) do {             \
-  MUL2(in0, in1, in2, in3, out0, out1);               \
-  MUL2(in4, in5, in6, in7, out2, out3);               \
-} while (0)
-
-/* Description : Sign extend halfword elements from right half of the vector
- * Arguments   : Input  - in    (halfword vector)
- *               Output - out   (sign extended word vector)
- *               Return Type - signed word
- * Details     : Sign bit of halfword elements from input vector 'in' is
- *               extracted and interleaved with same vector 'in0' to generate
- *               4 word elements keeping sign intact
- */
-#define UNPCK_R_SH_SW(in, out) do {                   \
-  const v8i16 sign_m = __msa_clti_s_h((v8i16)in, 0);  \
-  out = (v4i32)__msa_ilvr_h(sign_m, (v8i16)in);       \
-} while (0)
-
-/* Description : Sign extend halfword elements from input vector and return
- *               the result in pair of vectors
- * Arguments   : Input   - in            (halfword vector)
- *               Outputs - out0, out1   (sign extended word vectors)
- *               Return Type - signed word
- * Details     : Sign bit of halfword elements from input vector 'in' is
- *               extracted and interleaved right with same vector 'in0' to
- *               generate 4 signed word elements in 'out0'
- *               Then interleaved left with same vector 'in0' to
- *               generate 4 signed word elements in 'out1'
- */
-#define UNPCK_SH_SW(in, out0, out1) do {              \
-  const v8i16 tmp_m = __msa_clti_s_h((v8i16)in, 0);   \
-  ILVRL_H2_SW(tmp_m, in, out0, out1);                 \
-} while (0)
-
-/* Description : Butterfly of 4 input vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *               Outputs - out0, out1, out2, out3
- * Details     : Butterfly operation
- */
-#define BUTTERFLY_4(in0, in1, in2, in3, out0, out1, out2, out3) do {  \
-  out0 = in0 + in3;                                                   \
-  out1 = in1 + in2;                                                   \
-  out2 = in1 - in2;                                                   \
-  out3 = in0 - in3;                                                   \
-} while (0)
-
-/* Description : Transpose 16x4 block into 4x16 with byte elements in vectors
- * Arguments   : Inputs  - in0, in1, in2, in3, in4, in5, in6, in7,
- *                         in8, in9, in10, in11, in12, in13, in14, in15
- *               Outputs - out0, out1, out2, out3
- *               Return Type - unsigned byte
- */
-#define TRANSPOSE16x4_UB_UB(in0, in1, in2, in3, in4, in5, in6, in7,        \
-                            in8, in9, in10, in11, in12, in13, in14, in15,  \
-                            out0, out1, out2, out3) do {                   \
-  v2i64 tmp0_m, tmp1_m, tmp2_m, tmp3_m, tmp4_m, tmp5_m;                    \
-  ILVEV_W2_SD(in0, in4, in8, in12, tmp2_m, tmp3_m);                        \
-  ILVEV_W2_SD(in1, in5, in9, in13, tmp0_m, tmp1_m);                        \
-  ILVEV_D2_UB(tmp2_m, tmp3_m, tmp0_m, tmp1_m, out1, out3);                 \
-  ILVEV_W2_SD(in2, in6, in10, in14, tmp4_m, tmp5_m);                       \
-  ILVEV_W2_SD(in3, in7, in11, in15, tmp0_m, tmp1_m);                       \
-  ILVEV_D2_SD(tmp4_m, tmp5_m, tmp0_m, tmp1_m, tmp2_m, tmp3_m);             \
-  ILVEV_B2_SD(out1, out3, tmp2_m, tmp3_m, tmp0_m, tmp1_m);                 \
-  ILVEVOD_H2_UB(tmp0_m, tmp1_m, tmp0_m, tmp1_m, out0, out2);               \
-  ILVOD_B2_SD(out1, out3, tmp2_m, tmp3_m, tmp0_m, tmp1_m);                 \
-  ILVEVOD_H2_UB(tmp0_m, tmp1_m, tmp0_m, tmp1_m, out1, out3);               \
-} while (0)
-
-/* Description : Transpose 16x8 block into 8x16 with byte elements in vectors
- * Arguments   : Inputs  - in0, in1, in2, in3, in4, in5, in6, in7,
- *                         in8, in9, in10, in11, in12, in13, in14, in15
- *               Outputs - out0, out1, out2, out3, out4, out5, out6, out7
- *               Return Type - unsigned byte
- */
-#define TRANSPOSE16x8_UB_UB(in0, in1, in2, in3, in4, in5, in6, in7,        \
-                            in8, in9, in10, in11, in12, in13, in14, in15,  \
-                            out0, out1, out2, out3, out4, out5,            \
-                            out6, out7) do {                               \
-  v8i16 tmp0_m, tmp1_m, tmp4_m, tmp5_m, tmp6_m, tmp7_m;                    \
-  v4i32 tmp2_m, tmp3_m;                                                    \
-  ILVEV_D2_UB(in0, in8, in1, in9, out7, out6);                             \
-  ILVEV_D2_UB(in2, in10, in3, in11, out5, out4);                           \
-  ILVEV_D2_UB(in4, in12, in5, in13, out3, out2);                           \
-  ILVEV_D2_UB(in6, in14, in7, in15, out1, out0);                           \
-  ILVEV_B2_SH(out7, out6, out5, out4, tmp0_m, tmp1_m);                     \
-  ILVOD_B2_SH(out7, out6, out5, out4, tmp4_m, tmp5_m);                     \
-  ILVEV_B2_UB(out3, out2, out1, out0, out5, out7);                         \
-  ILVOD_B2_SH(out3, out2, out1, out0, tmp6_m, tmp7_m);                     \
-  ILVEV_H2_SW(tmp0_m, tmp1_m, out5, out7, tmp2_m, tmp3_m);                 \
-  ILVEVOD_W2_UB(tmp2_m, tmp3_m, tmp2_m, tmp3_m, out0, out4);               \
-  ILVOD_H2_SW(tmp0_m, tmp1_m, out5, out7, tmp2_m, tmp3_m);                 \
-  ILVEVOD_W2_UB(tmp2_m, tmp3_m, tmp2_m, tmp3_m, out2, out6);               \
-  ILVEV_H2_SW(tmp4_m, tmp5_m, tmp6_m, tmp7_m, tmp2_m, tmp3_m);             \
-  ILVEVOD_W2_UB(tmp2_m, tmp3_m, tmp2_m, tmp3_m, out1, out5);               \
-  ILVOD_H2_SW(tmp4_m, tmp5_m, tmp6_m, tmp7_m, tmp2_m, tmp3_m);             \
-  ILVEVOD_W2_UB(tmp2_m, tmp3_m, tmp2_m, tmp3_m, out3, out7);               \
-} while (0)
-
-/* Description : Transpose 4x4 block with word elements in vectors
- * Arguments   : Inputs  - in0, in1, in2, in3
- *                Outputs - out0, out1, out2, out3
- *                Return Type - as per RTYPE
- */
-#define TRANSPOSE4x4_W(RTYPE, in0, in1, in2, in3,                            \
-                       out0, out1, out2, out3) do {                          \
-  v4i32 s0_m, s1_m, s2_m, s3_m;                                              \
-  ILVRL_W2_SW(in1, in0, s0_m, s1_m);                                         \
-  ILVRL_W2_SW(in3, in2, s2_m, s3_m);                                         \
-  out0 = (RTYPE)__msa_ilvr_d((v2i64)s2_m, (v2i64)s0_m);                      \
-  out1 = (RTYPE)__msa_ilvl_d((v2i64)s2_m, (v2i64)s0_m);                      \
-  out2 = (RTYPE)__msa_ilvr_d((v2i64)s3_m, (v2i64)s1_m);                      \
-  out3 = (RTYPE)__msa_ilvl_d((v2i64)s3_m, (v2i64)s1_m);                      \
-} while (0)
-#define TRANSPOSE4x4_SW_SW(...) TRANSPOSE4x4_W(v4i32, __VA_ARGS__)
-
-/* Description : Add block 4x4
- * Arguments   : Inputs - in0, in1, in2, in3, pdst, stride
- * Details     : Least significant 4 bytes from each input vector are added to
- *               the destination bytes, clipped between 0-255 and stored.
- */
-#define ADDBLK_ST4x4_UB(in0, in1, in2, in3, pdst, stride) do {  \
-  uint32_t src0_m, src1_m, src2_m, src3_m;                      \
-  v8i16 inp0_m, inp1_m, res0_m, res1_m;                         \
-  v16i8 dst0_m = { 0 };                                         \
-  v16i8 dst1_m = { 0 };                                         \
-  const v16i8 zero_m = { 0 };                                   \
-  ILVR_D2_SH(in1, in0, in3, in2, inp0_m, inp1_m);               \
-  LW4(pdst, stride, src0_m, src1_m, src2_m, src3_m);            \
-  INSERT_W2_SB(src0_m, src1_m, dst0_m);                         \
-  INSERT_W2_SB(src2_m, src3_m, dst1_m);                         \
-  ILVR_B2_SH(zero_m, dst0_m, zero_m, dst1_m, res0_m, res1_m);   \
-  ADD2(res0_m, inp0_m, res1_m, inp1_m, res0_m, res1_m);         \
-  CLIP_SH2_0_255(res0_m, res1_m);                               \
-  PCKEV_B2_SB(res0_m, res0_m, res1_m, res1_m, dst0_m, dst1_m);  \
-  ST4x4_UB(dst0_m, dst1_m, 0, 1, 0, 1, pdst, stride);           \
-} while (0)
-
-/* Description : Pack even byte elements, extract 0 & 2 index words from pair
- *               of results and store 4 words in destination memory as per
- *               stride
- * Arguments   : Inputs - in0, in1, in2, in3, pdst, stride
- */
-#define PCKEV_ST4x4_UB(in0, in1, in2, in3, pdst, stride) do {  \
-  v16i8 tmp0_m, tmp1_m;                                        \
-  PCKEV_B2_SB(in1, in0, in3, in2, tmp0_m, tmp1_m);             \
-  ST4x4_UB(tmp0_m, tmp1_m, 0, 2, 0, 2, pdst, stride);          \
-} while (0)
-
-/* Description : average with rounding (in0 + in1 + 1) / 2.
- * Arguments   : Inputs  - in0, in1, in2, in3,
- *               Outputs - out0, out1
- *               Return Type - as per RTYPE
- * Details     : Each unsigned byte element from 'in0' vector is added with
- *               each unsigned byte element from 'in1' vector. Then the average
- *               with rounding is calculated and written to 'out0'
- */
-#define AVER_UB2(RTYPE, in0, in1, in2, in3, out0, out1) do {  \
-  out0 = (RTYPE)__msa_aver_u_b((v16u8)in0, (v16u8)in1);       \
-  out1 = (RTYPE)__msa_aver_u_b((v16u8)in2, (v16u8)in3);       \
-} while (0)
-#define AVER_UB2_UB(...) AVER_UB2(v16u8, __VA_ARGS__)
-
-#endif  // WEBP_DSP_MSA_MACRO_H_
diff --git a/ios/Pods/libwebp/src/dsp/neon.h b/ios/Pods/libwebp/src/dsp/neon.h
deleted file mode 100644
index aa1dea1..0000000
--- a/ios/Pods/libwebp/src/dsp/neon.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  NEON common code.
-
-#ifndef WEBP_DSP_NEON_H_
-#define WEBP_DSP_NEON_H_
-
-#include <arm_neon.h>
-
-#include "src/dsp/dsp.h"
-
-// Right now, some intrinsics functions seem slower, so we disable them
-// everywhere except newer clang/gcc or aarch64 where the inline assembly is
-// incompatible.
-#if LOCAL_CLANG_PREREQ(3,8) || LOCAL_GCC_PREREQ(4,9) || defined(__aarch64__)
-#define WEBP_USE_INTRINSICS   // use intrinsics when possible
-#endif
-
-#define INIT_VECTOR2(v, a, b) do {  \
-  v.val[0] = a;                     \
-  v.val[1] = b;                     \
-} while (0)
-
-#define INIT_VECTOR3(v, a, b, c) do {  \
-  v.val[0] = a;                        \
-  v.val[1] = b;                        \
-  v.val[2] = c;                        \
-} while (0)
-
-#define INIT_VECTOR4(v, a, b, c, d) do {  \
-  v.val[0] = a;                           \
-  v.val[1] = b;                           \
-  v.val[2] = c;                           \
-  v.val[3] = d;                           \
-} while (0)
-
-// if using intrinsics, this flag avoids some functions that make gcc-4.6.3
-// crash ("internal compiler error: in immed_double_const, at emit-rtl.").
-// (probably similar to gcc.gnu.org/bugzilla/show_bug.cgi?id=48183)
-#if !(LOCAL_CLANG_PREREQ(3,8) || LOCAL_GCC_PREREQ(4,8) || defined(__aarch64__))
-#define WORK_AROUND_GCC
-#endif
-
-static WEBP_INLINE int32x4x4_t Transpose4x4_NEON(const int32x4x4_t rows) {
-  uint64x2x2_t row01, row23;
-
-  row01.val[0] = vreinterpretq_u64_s32(rows.val[0]);
-  row01.val[1] = vreinterpretq_u64_s32(rows.val[1]);
-  row23.val[0] = vreinterpretq_u64_s32(rows.val[2]);
-  row23.val[1] = vreinterpretq_u64_s32(rows.val[3]);
-  // Transpose 64-bit values (there's no vswp equivalent)
-  {
-    const uint64x1_t row0h = vget_high_u64(row01.val[0]);
-    const uint64x1_t row2l = vget_low_u64(row23.val[0]);
-    const uint64x1_t row1h = vget_high_u64(row01.val[1]);
-    const uint64x1_t row3l = vget_low_u64(row23.val[1]);
-    row01.val[0] = vcombine_u64(vget_low_u64(row01.val[0]), row2l);
-    row23.val[0] = vcombine_u64(row0h, vget_high_u64(row23.val[0]));
-    row01.val[1] = vcombine_u64(vget_low_u64(row01.val[1]), row3l);
-    row23.val[1] = vcombine_u64(row1h, vget_high_u64(row23.val[1]));
-  }
-  {
-    const int32x4x2_t out01 = vtrnq_s32(vreinterpretq_s32_u64(row01.val[0]),
-                                        vreinterpretq_s32_u64(row01.val[1]));
-    const int32x4x2_t out23 = vtrnq_s32(vreinterpretq_s32_u64(row23.val[0]),
-                                        vreinterpretq_s32_u64(row23.val[1]));
-    int32x4x4_t out;
-    out.val[0] = out01.val[0];
-    out.val[1] = out01.val[1];
-    out.val[2] = out23.val[0];
-    out.val[3] = out23.val[1];
-    return out;
-  }
-}
-
-#if 0     // Useful debug macro.
-#include <stdio.h>
-#define PRINT_REG(REG, SIZE) do {                       \
-  int i;                                                \
-  printf("%s \t[%d]: 0x", #REG, SIZE);                  \
-  if (SIZE == 8) {                                      \
-    uint8_t _tmp[8];                                    \
-    vst1_u8(_tmp, (REG));                               \
-    for (i = 0; i < 8; ++i) printf("%.2x ", _tmp[i]);   \
-  } else if (SIZE == 16) {                              \
-    uint16_t _tmp[4];                                   \
-    vst1_u16(_tmp, (REG));                              \
-    for (i = 0; i < 4; ++i) printf("%.4x ", _tmp[i]);   \
-  }                                                     \
-  printf("\n");                                         \
-} while (0)
-#endif
-
-#endif  // WEBP_DSP_NEON_H_
diff --git a/ios/Pods/libwebp/src/dsp/quant.h b/ios/Pods/libwebp/src/dsp/quant.h
deleted file mode 100644
index 5ba6f9c..0000000
--- a/ios/Pods/libwebp/src/dsp/quant.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2018 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-
-#ifndef WEBP_DSP_QUANT_H_
-#define WEBP_DSP_QUANT_H_
-
-#include "src/dsp/dsp.h"
-#include "src/webp/types.h"
-
-#if defined(WEBP_USE_NEON) && !defined(WEBP_ANDROID_NEON) && \
-    !defined(WEBP_HAVE_NEON_RTCD)
-#include <arm_neon.h>
-
-#define IsFlat IsFlat_NEON
-
-static uint32x2_t horizontal_add_uint32x4(const uint32x4_t a) {
-  const uint64x2_t b = vpaddlq_u32(a);
-  return vadd_u32(vreinterpret_u32_u64(vget_low_u64(b)),
-                  vreinterpret_u32_u64(vget_high_u64(b)));
-}
-
-static WEBP_INLINE int IsFlat(const int16_t* levels, int num_blocks,
-                              int thresh) {
-  const int16x8_t tst_ones = vdupq_n_s16(-1);
-  uint32x4_t sum = vdupq_n_u32(0);
-
-  for (int i = 0; i < num_blocks; ++i) {
-    // Set DC to zero.
-    const int16x8_t a_0 = vsetq_lane_s16(0, vld1q_s16(levels), 0);
-    const int16x8_t a_1 = vld1q_s16(levels + 8);
-
-    const uint16x8_t b_0 = vshrq_n_u16(vtstq_s16(a_0, tst_ones), 15);
-    const uint16x8_t b_1 = vshrq_n_u16(vtstq_s16(a_1, tst_ones), 15);
-
-    sum = vpadalq_u16(sum, b_0);
-    sum = vpadalq_u16(sum, b_1);
-
-    levels += 16;
-  }
-  return thresh >= (int32_t)vget_lane_u32(horizontal_add_uint32x4(sum), 0);
-}
-
-#else
-
-#define IsFlat IsFlat_C
-
-static WEBP_INLINE int IsFlat(const int16_t* levels, int num_blocks,
-                              int thresh) {
-  int score = 0;
-  while (num_blocks-- > 0) {      // TODO(skal): refine positional scoring?
-    int i;
-    for (i = 1; i < 16; ++i) {    // omit DC, we're only interested in AC
-      score += (levels[i] != 0);
-      if (score > thresh) return 0;
-    }
-    levels += 16;
-  }
-  return 1;
-}
-
-#endif  // defined(WEBP_USE_NEON) && !defined(WEBP_ANDROID_NEON) &&
-        // !defined(WEBP_HAVE_NEON_RTCD)
-
-#endif  // WEBP_DSP_QUANT_H_
diff --git a/ios/Pods/libwebp/src/dsp/rescaler.c b/ios/Pods/libwebp/src/dsp/rescaler.c
deleted file mode 100644
index 753f84f..0000000
--- a/ios/Pods/libwebp/src/dsp/rescaler.c
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Rescaling functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-
-#include "src/dsp/dsp.h"
-#include "src/utils/rescaler_utils.h"
-
-//------------------------------------------------------------------------------
-// Implementations of critical functions ImportRow / ExportRow
-
-#define ROUNDER (WEBP_RESCALER_ONE >> 1)
-#define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX)
-#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX)
-
-//------------------------------------------------------------------------------
-// Row import
-
-void WebPRescalerImportRowExpand_C(WebPRescaler* const wrk,
-                                   const uint8_t* src) {
-  const int x_stride = wrk->num_channels;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  int channel;
-  assert(!WebPRescalerInputDone(wrk));
-  assert(wrk->x_expand);
-  for (channel = 0; channel < x_stride; ++channel) {
-    int x_in = channel;
-    int x_out = channel;
-    // simple bilinear interpolation
-    int accum = wrk->x_add;
-    int left = src[x_in];
-    int right = (wrk->src_width > 1) ? src[x_in + x_stride] : left;
-    x_in += x_stride;
-    while (1) {
-      wrk->frow[x_out] = right * wrk->x_add + (left - right) * accum;
-      x_out += x_stride;
-      if (x_out >= x_out_max) break;
-      accum -= wrk->x_sub;
-      if (accum < 0) {
-        left = right;
-        x_in += x_stride;
-        assert(x_in < wrk->src_width * x_stride);
-        right = src[x_in];
-        accum += wrk->x_add;
-      }
-    }
-    assert(wrk->x_sub == 0 /* <- special case for src_width=1 */ || accum == 0);
-  }
-}
-
-void WebPRescalerImportRowShrink_C(WebPRescaler* const wrk,
-                                   const uint8_t* src) {
-  const int x_stride = wrk->num_channels;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  int channel;
-  assert(!WebPRescalerInputDone(wrk));
-  assert(!wrk->x_expand);
-  for (channel = 0; channel < x_stride; ++channel) {
-    int x_in = channel;
-    int x_out = channel;
-    uint32_t sum = 0;
-    int accum = 0;
-    while (x_out < x_out_max) {
-      uint32_t base = 0;
-      accum += wrk->x_add;
-      while (accum > 0) {
-        accum -= wrk->x_sub;
-        assert(x_in < wrk->src_width * x_stride);
-        base = src[x_in];
-        sum += base;
-        x_in += x_stride;
-      }
-      {        // Emit next horizontal pixel.
-        const rescaler_t frac = base * (-accum);
-        wrk->frow[x_out] = sum * wrk->x_sub - frac;
-        // fresh fractional start for next pixel
-        sum = (int)MULT_FIX(frac, wrk->fx_scale);
-      }
-      x_out += x_stride;
-    }
-    assert(accum == 0);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Row export
-
-void WebPRescalerExportRowExpand_C(WebPRescaler* const wrk) {
-  int x_out;
-  uint8_t* const dst = wrk->dst;
-  rescaler_t* const irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const rescaler_t* const frow = wrk->frow;
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(wrk->y_expand);
-  assert(wrk->y_sub != 0);
-  if (wrk->y_accum == 0) {
-    for (x_out = 0; x_out < x_out_max; ++x_out) {
-      const uint32_t J = frow[x_out];
-      const int v = (int)MULT_FIX(J, wrk->fy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-    }
-  } else {
-    const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub);
-    const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B);
-    for (x_out = 0; x_out < x_out_max; ++x_out) {
-      const uint64_t I = (uint64_t)A * frow[x_out]
-                       + (uint64_t)B * irow[x_out];
-      const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX);
-      const int v = (int)MULT_FIX(J, wrk->fy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-    }
-  }
-}
-
-void WebPRescalerExportRowShrink_C(WebPRescaler* const wrk) {
-  int x_out;
-  uint8_t* const dst = wrk->dst;
-  rescaler_t* const irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const rescaler_t* const frow = wrk->frow;
-  const uint32_t yscale = wrk->fy_scale * (-wrk->y_accum);
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(!wrk->y_expand);
-  if (yscale) {
-    for (x_out = 0; x_out < x_out_max; ++x_out) {
-      const uint32_t frac = (uint32_t)MULT_FIX(frow[x_out], yscale);
-      const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-      irow[x_out] = frac;   // new fractional start
-    }
-  } else {
-    for (x_out = 0; x_out < x_out_max; ++x_out) {
-      const int v = (int)MULT_FIX(irow[x_out], wrk->fxy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-      irow[x_out] = 0;
-    }
-  }
-}
-
-#undef MULT_FIX_FLOOR
-#undef MULT_FIX
-#undef ROUNDER
-
-//------------------------------------------------------------------------------
-// Main entry calls
-
-void WebPRescalerImportRow(WebPRescaler* const wrk, const uint8_t* src) {
-  assert(!WebPRescalerInputDone(wrk));
-  if (!wrk->x_expand) {
-    WebPRescalerImportRowShrink(wrk, src);
-  } else {
-    WebPRescalerImportRowExpand(wrk, src);
-  }
-}
-
-void WebPRescalerExportRow(WebPRescaler* const wrk) {
-  if (wrk->y_accum <= 0) {
-    assert(!WebPRescalerOutputDone(wrk));
-    if (wrk->y_expand) {
-      WebPRescalerExportRowExpand(wrk);
-    } else if (wrk->fxy_scale) {
-      WebPRescalerExportRowShrink(wrk);
-    } else {  // special case
-      int i;
-      assert(wrk->src_height == wrk->dst_height && wrk->x_add == 1);
-      assert(wrk->src_width == 1 && wrk->dst_width <= 2);
-      for (i = 0; i < wrk->num_channels * wrk->dst_width; ++i) {
-        wrk->dst[i] = wrk->irow[i];
-        wrk->irow[i] = 0;
-      }
-    }
-    wrk->y_accum += wrk->y_add;
-    wrk->dst += wrk->dst_stride;
-    ++wrk->dst_y;
-  }
-}
-
-//------------------------------------------------------------------------------
-
-WebPRescalerImportRowFunc WebPRescalerImportRowExpand;
-WebPRescalerImportRowFunc WebPRescalerImportRowShrink;
-
-WebPRescalerExportRowFunc WebPRescalerExportRowExpand;
-WebPRescalerExportRowFunc WebPRescalerExportRowShrink;
-
-extern void WebPRescalerDspInitSSE2(void);
-extern void WebPRescalerDspInitMIPS32(void);
-extern void WebPRescalerDspInitMIPSdspR2(void);
-extern void WebPRescalerDspInitMSA(void);
-extern void WebPRescalerDspInitNEON(void);
-
-WEBP_DSP_INIT_FUNC(WebPRescalerDspInit) {
-#if !defined(WEBP_REDUCE_SIZE)
-#if !WEBP_NEON_OMIT_C_CODE
-  WebPRescalerExportRowExpand = WebPRescalerExportRowExpand_C;
-  WebPRescalerExportRowShrink = WebPRescalerExportRowShrink_C;
-#endif
-
-  WebPRescalerImportRowExpand = WebPRescalerImportRowExpand_C;
-  WebPRescalerImportRowShrink = WebPRescalerImportRowShrink_C;
-
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      WebPRescalerDspInitSSE2();
-    }
-#endif
-#if defined(WEBP_USE_MIPS32)
-    if (VP8GetCPUInfo(kMIPS32)) {
-      WebPRescalerDspInitMIPS32();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      WebPRescalerDspInitMIPSdspR2();
-    }
-#endif
-#if defined(WEBP_USE_MSA)
-    if (VP8GetCPUInfo(kMSA)) {
-      WebPRescalerDspInitMSA();
-    }
-#endif
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    WebPRescalerDspInitNEON();
-  }
-#endif
-
-  assert(WebPRescalerExportRowExpand != NULL);
-  assert(WebPRescalerExportRowShrink != NULL);
-  assert(WebPRescalerImportRowExpand != NULL);
-  assert(WebPRescalerImportRowShrink != NULL);
-#endif   // WEBP_REDUCE_SIZE
-}
diff --git a/ios/Pods/libwebp/src/dsp/rescaler_mips32.c b/ios/Pods/libwebp/src/dsp/rescaler_mips32.c
deleted file mode 100644
index 61f63c6..0000000
--- a/ios/Pods/libwebp/src/dsp/rescaler_mips32.c
+++ /dev/null
@@ -1,295 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS version of rescaling functions
-//
-// Author(s): Djordje Pesut (djordje.pesut@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS32) && !defined(WEBP_REDUCE_SIZE)
-
-#include <assert.h>
-#include "src/utils/rescaler_utils.h"
-
-//------------------------------------------------------------------------------
-// Row import
-
-static void ImportRowShrink_MIPS32(WebPRescaler* const wrk,
-                                   const uint8_t* src) {
-  const int x_stride = wrk->num_channels;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const int fx_scale = wrk->fx_scale;
-  const int x_add = wrk->x_add;
-  const int x_sub = wrk->x_sub;
-  const int x_stride1 = x_stride << 2;
-  int channel;
-  assert(!wrk->x_expand);
-  assert(!WebPRescalerInputDone(wrk));
-
-  for (channel = 0; channel < x_stride; ++channel) {
-    const uint8_t* src1 = src + channel;
-    rescaler_t* frow = wrk->frow + channel;
-    int temp1, temp2, temp3;
-    int base, frac, sum;
-    int accum, accum1;
-    int loop_c = x_out_max - channel;
-
-    __asm__ volatile (
-      "li     %[temp1],   0x8000                    \n\t"
-      "li     %[temp2],   0x10000                   \n\t"
-      "li     %[sum],     0                         \n\t"
-      "li     %[accum],   0                         \n\t"
-    "1:                                             \n\t"
-      "addu   %[accum],   %[accum],   %[x_add]      \n\t"
-      "li     %[base],    0                         \n\t"
-      "blez   %[accum],   3f                        \n\t"
-    "2:                                             \n\t"
-      "lbu    %[base],    0(%[src1])                \n\t"
-      "subu   %[accum],   %[accum],   %[x_sub]      \n\t"
-      "addu   %[src1],    %[src1],    %[x_stride]   \n\t"
-      "addu   %[sum],     %[sum],     %[base]       \n\t"
-      "bgtz   %[accum],   2b                        \n\t"
-    "3:                                             \n\t"
-      "negu   %[accum1],  %[accum]                  \n\t"
-      "mul    %[frac],    %[base],    %[accum1]     \n\t"
-      "mul    %[temp3],   %[sum],     %[x_sub]      \n\t"
-      "subu   %[loop_c],  %[loop_c],  %[x_stride]   \n\t"
-      "mult   %[temp1],   %[temp2]                  \n\t"
-      "maddu  %[frac],    %[fx_scale]               \n\t"
-      "mfhi   %[sum]                                \n\t"
-      "subu   %[temp3],   %[temp3],   %[frac]       \n\t"
-      "sw     %[temp3],   0(%[frow])                \n\t"
-      "addu   %[frow],    %[frow],    %[x_stride1]  \n\t"
-      "bgtz   %[loop_c],  1b                        \n\t"
-      : [accum]"=&r"(accum), [src1]"+r"(src1), [temp3]"=&r"(temp3),
-        [sum]"=&r"(sum), [base]"=&r"(base), [frac]"=&r"(frac),
-        [frow]"+r"(frow), [accum1]"=&r"(accum1),
-        [temp2]"=&r"(temp2), [temp1]"=&r"(temp1)
-      : [x_stride]"r"(x_stride), [fx_scale]"r"(fx_scale),
-        [x_sub]"r"(x_sub), [x_add]"r"(x_add),
-        [loop_c]"r"(loop_c), [x_stride1]"r"(x_stride1)
-      : "memory", "hi", "lo"
-    );
-    assert(accum == 0);
-  }
-}
-
-static void ImportRowExpand_MIPS32(WebPRescaler* const wrk,
-                                   const uint8_t* src) {
-  const int x_stride = wrk->num_channels;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const int x_add = wrk->x_add;
-  const int x_sub = wrk->x_sub;
-  const int src_width = wrk->src_width;
-  const int x_stride1 = x_stride << 2;
-  int channel;
-  assert(wrk->x_expand);
-  assert(!WebPRescalerInputDone(wrk));
-
-  for (channel = 0; channel < x_stride; ++channel) {
-    const uint8_t* src1 = src + channel;
-    rescaler_t* frow = wrk->frow + channel;
-    int temp1, temp2, temp3, temp4;
-    int frac;
-    int accum;
-    int x_out = channel;
-
-    __asm__ volatile (
-      "addiu  %[temp3],   %[src_width], -1            \n\t"
-      "lbu    %[temp2],   0(%[src1])                  \n\t"
-      "addu   %[src1],    %[src1],      %[x_stride]   \n\t"
-      "bgtz   %[temp3],   0f                          \n\t"
-      "addiu  %[temp1],   %[temp2],     0             \n\t"
-      "b      3f                                      \n\t"
-    "0:                                               \n\t"
-      "lbu    %[temp1],   0(%[src1])                  \n\t"
-    "3:                                               \n\t"
-      "addiu  %[accum],   %[x_add],     0             \n\t"
-    "1:                                               \n\t"
-      "subu   %[temp3],   %[temp2],     %[temp1]      \n\t"
-      "mul    %[temp3],   %[temp3],     %[accum]      \n\t"
-      "mul    %[temp4],   %[temp1],     %[x_add]      \n\t"
-      "addu   %[temp3],   %[temp4],     %[temp3]      \n\t"
-      "sw     %[temp3],   0(%[frow])                  \n\t"
-      "addu   %[frow],    %[frow],      %[x_stride1]  \n\t"
-      "addu   %[x_out],   %[x_out],     %[x_stride]   \n\t"
-      "subu   %[temp3],   %[x_out],     %[x_out_max]  \n\t"
-      "bgez   %[temp3],   2f                          \n\t"
-      "subu   %[accum],   %[accum],     %[x_sub]      \n\t"
-      "bgez   %[accum],   4f                          \n\t"
-      "addiu  %[temp2],   %[temp1],     0             \n\t"
-      "addu   %[src1],    %[src1],      %[x_stride]   \n\t"
-      "lbu    %[temp1],   0(%[src1])                  \n\t"
-      "addu   %[accum],   %[accum],     %[x_add]      \n\t"
-    "4:                                               \n\t"
-      "b      1b                                      \n\t"
-    "2:                                               \n\t"
-      : [src1]"+r"(src1), [accum]"=&r"(accum), [temp1]"=&r"(temp1),
-        [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), [temp4]"=&r"(temp4),
-        [x_out]"+r"(x_out), [frac]"=&r"(frac), [frow]"+r"(frow)
-      : [x_stride]"r"(x_stride), [x_add]"r"(x_add), [x_sub]"r"(x_sub),
-        [x_stride1]"r"(x_stride1), [src_width]"r"(src_width),
-        [x_out_max]"r"(x_out_max)
-      : "memory", "hi", "lo"
-    );
-    assert(wrk->x_sub == 0 /* <- special case for src_width=1 */ || accum == 0);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Row export
-
-static void ExportRowExpand_MIPS32(WebPRescaler* const wrk) {
-  uint8_t* dst = wrk->dst;
-  rescaler_t* irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const rescaler_t* frow = wrk->frow;
-  int temp0, temp1, temp3, temp4, temp5, loop_end;
-  const int temp2 = (int)wrk->fy_scale;
-  const int temp6 = x_out_max << 2;
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(wrk->y_expand);
-  assert(wrk->y_sub != 0);
-  if (wrk->y_accum == 0) {
-    __asm__ volatile (
-      "li       %[temp3],    0x10000                    \n\t"
-      "li       %[temp4],    0x8000                     \n\t"
-      "addu     %[loop_end], %[frow],     %[temp6]      \n\t"
-    "1:                                                 \n\t"
-      "lw       %[temp0],    0(%[frow])                 \n\t"
-      "addiu    %[dst],      %[dst],      1             \n\t"
-      "addiu    %[frow],     %[frow],     4             \n\t"
-      "mult     %[temp3],    %[temp4]                   \n\t"
-      "maddu    %[temp0],    %[temp2]                   \n\t"
-      "mfhi     %[temp5]                                \n\t"
-      "sb       %[temp5],    -1(%[dst])                 \n\t"
-      "bne      %[frow],     %[loop_end], 1b            \n\t"
-      : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3),
-        [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow),
-        [dst]"+r"(dst), [loop_end]"=&r"(loop_end)
-      : [temp2]"r"(temp2), [temp6]"r"(temp6)
-      : "memory", "hi", "lo"
-    );
-  } else {
-    const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub);
-    const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B);
-    __asm__ volatile (
-      "li       %[temp3],    0x10000                    \n\t"
-      "li       %[temp4],    0x8000                     \n\t"
-      "addu     %[loop_end], %[frow],     %[temp6]      \n\t"
-    "1:                                                 \n\t"
-      "lw       %[temp0],    0(%[frow])                 \n\t"
-      "lw       %[temp1],    0(%[irow])                 \n\t"
-      "addiu    %[dst],      %[dst],      1             \n\t"
-      "mult     %[temp3],    %[temp4]                   \n\t"
-      "maddu    %[A],        %[temp0]                   \n\t"
-      "maddu    %[B],        %[temp1]                   \n\t"
-      "addiu    %[frow],     %[frow],     4             \n\t"
-      "addiu    %[irow],     %[irow],     4             \n\t"
-      "mfhi     %[temp5]                                \n\t"
-      "mult     %[temp3],    %[temp4]                   \n\t"
-      "maddu    %[temp5],    %[temp2]                   \n\t"
-      "mfhi     %[temp5]                                \n\t"
-      "sb       %[temp5],    -1(%[dst])                 \n\t"
-      "bne      %[frow],     %[loop_end], 1b            \n\t"
-      : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3),
-        [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow),
-        [irow]"+r"(irow), [dst]"+r"(dst), [loop_end]"=&r"(loop_end)
-      : [temp2]"r"(temp2), [temp6]"r"(temp6), [A]"r"(A), [B]"r"(B)
-      : "memory", "hi", "lo"
-    );
-  }
-}
-
-#if 0  // disabled for now. TODO(skal): make match the C-code
-static void ExportRowShrink_MIPS32(WebPRescaler* const wrk) {
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  uint8_t* dst = wrk->dst;
-  rescaler_t* irow = wrk->irow;
-  const rescaler_t* frow = wrk->frow;
-  const int yscale = wrk->fy_scale * (-wrk->y_accum);
-  int temp0, temp1, temp3, temp4, temp5, loop_end;
-  const int temp2 = (int)wrk->fxy_scale;
-  const int temp6 = x_out_max << 2;
-
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(!wrk->y_expand);
-  assert(wrk->fxy_scale != 0);
-  if (yscale) {
-    __asm__ volatile (
-      "li       %[temp3],    0x10000                    \n\t"
-      "li       %[temp4],    0x8000                     \n\t"
-      "addu     %[loop_end], %[frow],     %[temp6]      \n\t"
-    "1:                                                 \n\t"
-      "lw       %[temp0],    0(%[frow])                 \n\t"
-      "mult     %[temp3],    %[temp4]                   \n\t"
-      "addiu    %[frow],     %[frow],     4             \n\t"
-      "maddu    %[temp0],    %[yscale]                  \n\t"
-      "mfhi     %[temp1]                                \n\t"
-      "lw       %[temp0],    0(%[irow])                 \n\t"
-      "addiu    %[dst],      %[dst],      1             \n\t"
-      "addiu    %[irow],     %[irow],     4             \n\t"
-      "subu     %[temp0],    %[temp0],    %[temp1]      \n\t"
-      "mult     %[temp3],    %[temp4]                   \n\t"
-      "maddu    %[temp0],    %[temp2]                   \n\t"
-      "mfhi     %[temp5]                                \n\t"
-      "sw       %[temp1],    -4(%[irow])                \n\t"
-      "sb       %[temp5],    -1(%[dst])                 \n\t"
-      "bne      %[frow],     %[loop_end], 1b            \n\t"
-      : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3),
-        [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow),
-        [irow]"+r"(irow), [dst]"+r"(dst), [loop_end]"=&r"(loop_end)
-      : [temp2]"r"(temp2), [yscale]"r"(yscale), [temp6]"r"(temp6)
-      : "memory", "hi", "lo"
-    );
-  } else {
-    __asm__ volatile (
-      "li       %[temp3],    0x10000                    \n\t"
-      "li       %[temp4],    0x8000                     \n\t"
-      "addu     %[loop_end], %[irow],     %[temp6]      \n\t"
-    "1:                                                 \n\t"
-      "lw       %[temp0],    0(%[irow])                 \n\t"
-      "addiu    %[dst],      %[dst],      1             \n\t"
-      "addiu    %[irow],     %[irow],     4             \n\t"
-      "mult     %[temp3],    %[temp4]                   \n\t"
-      "maddu    %[temp0],    %[temp2]                   \n\t"
-      "mfhi     %[temp5]                                \n\t"
-      "sw       $zero,       -4(%[irow])                \n\t"
-      "sb       %[temp5],    -1(%[dst])                 \n\t"
-      "bne      %[irow],     %[loop_end], 1b            \n\t"
-      : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3),
-        [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [irow]"+r"(irow),
-        [dst]"+r"(dst), [loop_end]"=&r"(loop_end)
-      : [temp2]"r"(temp2), [temp6]"r"(temp6)
-      : "memory", "hi", "lo"
-    );
-  }
-}
-#endif  // 0
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPRescalerDspInitMIPS32(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMIPS32(void) {
-  WebPRescalerImportRowExpand = ImportRowExpand_MIPS32;
-  WebPRescalerImportRowShrink = ImportRowShrink_MIPS32;
-  WebPRescalerExportRowExpand = ExportRowExpand_MIPS32;
-//  WebPRescalerExportRowShrink = ExportRowShrink_MIPS32;
-}
-
-#else  // !WEBP_USE_MIPS32
-
-WEBP_DSP_INIT_STUB(WebPRescalerDspInitMIPS32)
-
-#endif  // WEBP_USE_MIPS32
diff --git a/ios/Pods/libwebp/src/dsp/rescaler_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/rescaler_mips_dsp_r2.c
deleted file mode 100644
index ce9e648..0000000
--- a/ios/Pods/libwebp/src/dsp/rescaler_mips_dsp_r2.c
+++ /dev/null
@@ -1,318 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS version of rescaling functions
-//
-// Author(s): Djordje Pesut (djordje.pesut@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2) && !defined(WEBP_REDUCE_SIZE)
-
-#include <assert.h>
-#include "src/utils/rescaler_utils.h"
-
-#define ROUNDER (WEBP_RESCALER_ONE >> 1)
-#define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX)
-#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX)
-
-//------------------------------------------------------------------------------
-// Row export
-
-#if 0  // disabled for now. TODO(skal): make match the C-code
-static void ExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) {
-  int i;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  uint8_t* dst = wrk->dst;
-  rescaler_t* irow = wrk->irow;
-  const rescaler_t* frow = wrk->frow;
-  const int yscale = wrk->fy_scale * (-wrk->y_accum);
-  int temp0, temp1, temp2, temp3, temp4, temp5, loop_end;
-  const int temp7 = (int)wrk->fxy_scale;
-  const int temp6 = (x_out_max & ~0x3) << 2;
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(!wrk->y_expand);
-  assert(wrk->fxy_scale != 0);
-  if (yscale) {
-    if (x_out_max >= 4) {
-      int temp8, temp9, temp10, temp11;
-      __asm__ volatile (
-        "li       %[temp3],    0x10000                    \n\t"
-        "li       %[temp4],    0x8000                     \n\t"
-        "addu     %[loop_end], %[frow],     %[temp6]      \n\t"
-      "1:                                                 \n\t"
-        "lw       %[temp0],    0(%[frow])                 \n\t"
-        "lw       %[temp1],    4(%[frow])                 \n\t"
-        "lw       %[temp2],    8(%[frow])                 \n\t"
-        "lw       %[temp5],    12(%[frow])                \n\t"
-        "mult     $ac0,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac0,        %[temp0],    %[yscale]     \n\t"
-        "mult     $ac1,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac1,        %[temp1],    %[yscale]     \n\t"
-        "mult     $ac2,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac2,        %[temp2],    %[yscale]     \n\t"
-        "mult     $ac3,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac3,        %[temp5],    %[yscale]     \n\t"
-        "addiu    %[frow],     %[frow],     16            \n\t"
-        "mfhi     %[temp0],    $ac0                       \n\t"
-        "mfhi     %[temp1],    $ac1                       \n\t"
-        "mfhi     %[temp2],    $ac2                       \n\t"
-        "mfhi     %[temp5],    $ac3                       \n\t"
-        "lw       %[temp8],    0(%[irow])                 \n\t"
-        "lw       %[temp9],    4(%[irow])                 \n\t"
-        "lw       %[temp10],   8(%[irow])                 \n\t"
-        "lw       %[temp11],   12(%[irow])                \n\t"
-        "addiu    %[dst],      %[dst],      4             \n\t"
-        "addiu    %[irow],     %[irow],     16            \n\t"
-        "subu     %[temp8],    %[temp8],    %[temp0]      \n\t"
-        "subu     %[temp9],    %[temp9],    %[temp1]      \n\t"
-        "subu     %[temp10],   %[temp10],   %[temp2]      \n\t"
-        "subu     %[temp11],   %[temp11],   %[temp5]      \n\t"
-        "mult     $ac0,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac0,        %[temp8],    %[temp7]      \n\t"
-        "mult     $ac1,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac1,        %[temp9],    %[temp7]      \n\t"
-        "mult     $ac2,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac2,        %[temp10],   %[temp7]      \n\t"
-        "mult     $ac3,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac3,        %[temp11],   %[temp7]      \n\t"
-        "mfhi     %[temp8],    $ac0                       \n\t"
-        "mfhi     %[temp9],    $ac1                       \n\t"
-        "mfhi     %[temp10],   $ac2                       \n\t"
-        "mfhi     %[temp11],   $ac3                       \n\t"
-        "sw       %[temp0],    -16(%[irow])               \n\t"
-        "sw       %[temp1],    -12(%[irow])               \n\t"
-        "sw       %[temp2],    -8(%[irow])                \n\t"
-        "sw       %[temp5],    -4(%[irow])                \n\t"
-        "sb       %[temp8],    -4(%[dst])                 \n\t"
-        "sb       %[temp9],    -3(%[dst])                 \n\t"
-        "sb       %[temp10],   -2(%[dst])                 \n\t"
-        "sb       %[temp11],   -1(%[dst])                 \n\t"
-        "bne      %[frow],     %[loop_end], 1b            \n\t"
-        : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3),
-          [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow),
-          [irow]"+r"(irow), [dst]"+r"(dst), [loop_end]"=&r"(loop_end),
-          [temp8]"=&r"(temp8), [temp9]"=&r"(temp9), [temp10]"=&r"(temp10),
-          [temp11]"=&r"(temp11), [temp2]"=&r"(temp2)
-        : [temp7]"r"(temp7), [yscale]"r"(yscale), [temp6]"r"(temp6)
-        : "memory", "hi", "lo", "$ac1hi", "$ac1lo",
-          "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo"
-      );
-    }
-    for (i = 0; i < (x_out_max & 0x3); ++i) {
-      const uint32_t frac = (uint32_t)MULT_FIX(*frow++, yscale);
-      const int v = (int)MULT_FIX_FLOOR(*irow - frac, wrk->fxy_scale);
-      assert(v >= 0 && v <= 255);
-      *dst++ = v;
-      *irow++ = frac;   // new fractional start
-    }
-  } else {
-    if (x_out_max >= 4) {
-      __asm__ volatile (
-        "li       %[temp3],    0x10000                    \n\t"
-        "li       %[temp4],    0x8000                     \n\t"
-        "addu     %[loop_end], %[irow],     %[temp6]      \n\t"
-      "1:                                                 \n\t"
-        "lw       %[temp0],    0(%[irow])                 \n\t"
-        "lw       %[temp1],    4(%[irow])                 \n\t"
-        "lw       %[temp2],    8(%[irow])                 \n\t"
-        "lw       %[temp5],    12(%[irow])                \n\t"
-        "addiu    %[dst],      %[dst],      4             \n\t"
-        "addiu    %[irow],     %[irow],     16            \n\t"
-        "mult     $ac0,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac0,        %[temp0],    %[temp7]      \n\t"
-        "mult     $ac1,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac1,        %[temp1],    %[temp7]      \n\t"
-        "mult     $ac2,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac2,        %[temp2],    %[temp7]      \n\t"
-        "mult     $ac3,        %[temp3],    %[temp4]      \n\t"
-        "maddu    $ac3,        %[temp5],    %[temp7]      \n\t"
-        "mfhi     %[temp0],    $ac0                       \n\t"
-        "mfhi     %[temp1],    $ac1                       \n\t"
-        "mfhi     %[temp2],    $ac2                       \n\t"
-        "mfhi     %[temp5],    $ac3                       \n\t"
-        "sw       $zero,       -16(%[irow])               \n\t"
-        "sw       $zero,       -12(%[irow])               \n\t"
-        "sw       $zero,       -8(%[irow])                \n\t"
-        "sw       $zero,       -4(%[irow])                \n\t"
-        "sb       %[temp0],    -4(%[dst])                 \n\t"
-        "sb       %[temp1],    -3(%[dst])                 \n\t"
-        "sb       %[temp2],    -2(%[dst])                 \n\t"
-        "sb       %[temp5],    -1(%[dst])                 \n\t"
-        "bne      %[irow],     %[loop_end], 1b            \n\t"
-        : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3),
-          [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [irow]"+r"(irow),
-          [dst]"+r"(dst), [loop_end]"=&r"(loop_end), [temp2]"=&r"(temp2)
-        : [temp7]"r"(temp7), [temp6]"r"(temp6)
-        : "memory", "hi", "lo", "$ac1hi", "$ac1lo",
-          "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo"
-      );
-    }
-    for (i = 0; i < (x_out_max & 0x3); ++i) {
-      const int v = (int)MULT_FIX_FLOOR(*irow, wrk->fxy_scale);
-      assert(v >= 0 && v <= 255);
-      *dst++ = v;
-      *irow++ = 0;
-    }
-  }
-}
-#endif  // 0
-
-static void ExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) {
-  int i;
-  uint8_t* dst = wrk->dst;
-  rescaler_t* irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const rescaler_t* frow = wrk->frow;
-  int temp0, temp1, temp2, temp3, temp4, temp5, loop_end;
-  const int temp6 = (x_out_max & ~0x3) << 2;
-  const int temp7 = (int)wrk->fy_scale;
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(wrk->y_expand);
-  assert(wrk->y_sub != 0);
-  if (wrk->y_accum == 0) {
-    if (x_out_max >= 4) {
-      __asm__ volatile (
-        "li       %[temp4],    0x10000                    \n\t"
-        "li       %[temp5],    0x8000                     \n\t"
-        "addu     %[loop_end], %[frow],     %[temp6]      \n\t"
-      "1:                                                 \n\t"
-        "lw       %[temp0],    0(%[frow])                 \n\t"
-        "lw       %[temp1],    4(%[frow])                 \n\t"
-        "lw       %[temp2],    8(%[frow])                 \n\t"
-        "lw       %[temp3],    12(%[frow])                \n\t"
-        "addiu    %[dst],      %[dst],      4             \n\t"
-        "addiu    %[frow],     %[frow],     16            \n\t"
-        "mult     $ac0,        %[temp4],    %[temp5]      \n\t"
-        "maddu    $ac0,        %[temp0],    %[temp7]      \n\t"
-        "mult     $ac1,        %[temp4],    %[temp5]      \n\t"
-        "maddu    $ac1,        %[temp1],    %[temp7]      \n\t"
-        "mult     $ac2,        %[temp4],    %[temp5]      \n\t"
-        "maddu    $ac2,        %[temp2],    %[temp7]      \n\t"
-        "mult     $ac3,        %[temp4],    %[temp5]      \n\t"
-        "maddu    $ac3,        %[temp3],    %[temp7]      \n\t"
-        "mfhi     %[temp0],    $ac0                       \n\t"
-        "mfhi     %[temp1],    $ac1                       \n\t"
-        "mfhi     %[temp2],    $ac2                       \n\t"
-        "mfhi     %[temp3],    $ac3                       \n\t"
-        "sb       %[temp0],    -4(%[dst])                 \n\t"
-        "sb       %[temp1],    -3(%[dst])                 \n\t"
-        "sb       %[temp2],    -2(%[dst])                 \n\t"
-        "sb       %[temp3],    -1(%[dst])                 \n\t"
-        "bne      %[frow],     %[loop_end], 1b            \n\t"
-        : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3),
-          [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow),
-          [dst]"+r"(dst), [loop_end]"=&r"(loop_end), [temp2]"=&r"(temp2)
-        : [temp7]"r"(temp7), [temp6]"r"(temp6)
-        : "memory", "hi", "lo", "$ac1hi", "$ac1lo",
-          "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo"
-      );
-    }
-    for (i = 0; i < (x_out_max & 0x3); ++i) {
-      const uint32_t J = *frow++;
-      const int v = (int)MULT_FIX(J, wrk->fy_scale);
-      assert(v >= 0 && v <= 255);
-      *dst++ = v;
-    }
-  } else {
-    const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub);
-    const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B);
-    if (x_out_max >= 4) {
-      int temp8, temp9, temp10, temp11;
-      __asm__ volatile (
-        "li       %[temp8],    0x10000                    \n\t"
-        "li       %[temp9],    0x8000                     \n\t"
-        "addu     %[loop_end], %[frow],     %[temp6]      \n\t"
-      "1:                                                 \n\t"
-        "lw       %[temp0],    0(%[frow])                 \n\t"
-        "lw       %[temp1],    4(%[frow])                 \n\t"
-        "lw       %[temp2],    8(%[frow])                 \n\t"
-        "lw       %[temp3],    12(%[frow])                \n\t"
-        "lw       %[temp4],    0(%[irow])                 \n\t"
-        "lw       %[temp5],    4(%[irow])                 \n\t"
-        "lw       %[temp10],   8(%[irow])                 \n\t"
-        "lw       %[temp11],   12(%[irow])                \n\t"
-        "addiu    %[dst],      %[dst],      4             \n\t"
-        "mult     $ac0,        %[temp8],    %[temp9]      \n\t"
-        "maddu    $ac0,        %[A],        %[temp0]      \n\t"
-        "maddu    $ac0,        %[B],        %[temp4]      \n\t"
-        "mult     $ac1,        %[temp8],    %[temp9]      \n\t"
-        "maddu    $ac1,        %[A],        %[temp1]      \n\t"
-        "maddu    $ac1,        %[B],        %[temp5]      \n\t"
-        "mult     $ac2,        %[temp8],    %[temp9]      \n\t"
-        "maddu    $ac2,        %[A],        %[temp2]      \n\t"
-        "maddu    $ac2,        %[B],        %[temp10]     \n\t"
-        "mult     $ac3,        %[temp8],    %[temp9]      \n\t"
-        "maddu    $ac3,        %[A],        %[temp3]      \n\t"
-        "maddu    $ac3,        %[B],        %[temp11]     \n\t"
-        "addiu    %[frow],     %[frow],     16            \n\t"
-        "addiu    %[irow],     %[irow],     16            \n\t"
-        "mfhi     %[temp0],    $ac0                       \n\t"
-        "mfhi     %[temp1],    $ac1                       \n\t"
-        "mfhi     %[temp2],    $ac2                       \n\t"
-        "mfhi     %[temp3],    $ac3                       \n\t"
-        "mult     $ac0,        %[temp8],    %[temp9]      \n\t"
-        "maddu    $ac0,        %[temp0],    %[temp7]      \n\t"
-        "mult     $ac1,        %[temp8],    %[temp9]      \n\t"
-        "maddu    $ac1,        %[temp1],    %[temp7]      \n\t"
-        "mult     $ac2,        %[temp8],    %[temp9]      \n\t"
-        "maddu    $ac2,        %[temp2],    %[temp7]      \n\t"
-        "mult     $ac3,        %[temp8],    %[temp9]      \n\t"
-        "maddu    $ac3,        %[temp3],    %[temp7]      \n\t"
-        "mfhi     %[temp0],    $ac0                       \n\t"
-        "mfhi     %[temp1],    $ac1                       \n\t"
-        "mfhi     %[temp2],    $ac2                       \n\t"
-        "mfhi     %[temp3],    $ac3                       \n\t"
-        "sb       %[temp0],    -4(%[dst])                 \n\t"
-        "sb       %[temp1],    -3(%[dst])                 \n\t"
-        "sb       %[temp2],    -2(%[dst])                 \n\t"
-        "sb       %[temp3],    -1(%[dst])                 \n\t"
-        "bne      %[frow],     %[loop_end], 1b            \n\t"
-        : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp3]"=&r"(temp3),
-          [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), [frow]"+r"(frow),
-          [irow]"+r"(irow), [dst]"+r"(dst), [loop_end]"=&r"(loop_end),
-          [temp8]"=&r"(temp8), [temp9]"=&r"(temp9), [temp10]"=&r"(temp10),
-          [temp11]"=&r"(temp11), [temp2]"=&r"(temp2)
-        : [temp7]"r"(temp7), [temp6]"r"(temp6), [A]"r"(A), [B]"r"(B)
-        : "memory", "hi", "lo", "$ac1hi", "$ac1lo",
-          "$ac2hi", "$ac2lo", "$ac3hi", "$ac3lo"
-      );
-    }
-    for (i = 0; i < (x_out_max & 0x3); ++i) {
-      const uint64_t I = (uint64_t)A * *frow++
-                       + (uint64_t)B * *irow++;
-      const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX);
-      const int v = (int)MULT_FIX(J, wrk->fy_scale);
-      assert(v >= 0 && v <= 255);
-      *dst++ = v;
-    }
-  }
-}
-
-#undef MULT_FIX_FLOOR
-#undef MULT_FIX
-#undef ROUNDER
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPRescalerDspInitMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMIPSdspR2(void) {
-  WebPRescalerExportRowExpand = ExportRowExpand_MIPSdspR2;
-//  WebPRescalerExportRowShrink = ExportRowShrink_MIPSdspR2;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(WebPRescalerDspInitMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/rescaler_msa.c b/ios/Pods/libwebp/src/dsp/rescaler_msa.c
deleted file mode 100644
index c559254..0000000
--- a/ios/Pods/libwebp/src/dsp/rescaler_msa.c
+++ /dev/null
@@ -1,447 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MSA version of rescaling functions
-//
-// Author: Prashant Patil (prashant.patil@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MSA) && !defined(WEBP_REDUCE_SIZE)
-
-#include <assert.h>
-
-#include "src/utils/rescaler_utils.h"
-#include "src/dsp/msa_macro.h"
-
-#define ROUNDER (WEBP_RESCALER_ONE >> 1)
-#define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX)
-#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX)
-
-#define CALC_MULT_FIX_16(in0, in1, in2, in3, scale, shift, dst) do {  \
-  v4u32 tmp0, tmp1, tmp2, tmp3;                                       \
-  v16u8 t0, t1, t2, t3, t4, t5;                                       \
-  v2u64 out0, out1, out2, out3;                                       \
-  ILVRL_W2_UW(zero, in0, tmp0, tmp1);                                 \
-  ILVRL_W2_UW(zero, in1, tmp2, tmp3);                                 \
-  DOTP_UW2_UD(tmp0, tmp1, scale, scale, out0, out1);                  \
-  DOTP_UW2_UD(tmp2, tmp3, scale, scale, out2, out3);                  \
-  SRAR_D4_UD(out0, out1, out2, out3, shift);                          \
-  PCKEV_B2_UB(out1, out0, out3, out2, t0, t1);                        \
-  ILVRL_W2_UW(zero, in2, tmp0, tmp1);                                 \
-  ILVRL_W2_UW(zero, in3, tmp2, tmp3);                                 \
-  DOTP_UW2_UD(tmp0, tmp1, scale, scale, out0, out1);                  \
-  DOTP_UW2_UD(tmp2, tmp3, scale, scale, out2, out3);                  \
-  SRAR_D4_UD(out0, out1, out2, out3, shift);                          \
-  PCKEV_B2_UB(out1, out0, out3, out2, t2, t3);                        \
-  PCKEV_B2_UB(t1, t0, t3, t2, t4, t5);                                \
-  dst = (v16u8)__msa_pckev_b((v16i8)t5, (v16i8)t4);                   \
-} while (0)
-
-#define CALC_MULT_FIX_4(in0, scale, shift, dst) do {  \
-  v4u32 tmp0, tmp1;                                   \
-  v16i8 t0, t1;                                       \
-  v2u64 out0, out1;                                   \
-  ILVRL_W2_UW(zero, in0, tmp0, tmp1);                 \
-  DOTP_UW2_UD(tmp0, tmp1, scale, scale, out0, out1);  \
-  SRAR_D2_UD(out0, out1, shift);                      \
-  t0 = __msa_pckev_b((v16i8)out1, (v16i8)out0);       \
-  t1 = __msa_pckev_b(t0, t0);                         \
-  t0 = __msa_pckev_b(t1, t1);                         \
-  dst = __msa_copy_s_w((v4i32)t0, 0);                 \
-} while (0)
-
-#define CALC_MULT_FIX1_16(in0, in1, in2, in3, fyscale, shift,  \
-                          dst0, dst1, dst2, dst3) do {         \
-  v4u32 tmp0, tmp1, tmp2, tmp3;                                \
-  v2u64 out0, out1, out2, out3;                                \
-  ILVRL_W2_UW(zero, in0, tmp0, tmp1);                          \
-  ILVRL_W2_UW(zero, in1, tmp2, tmp3);                          \
-  DOTP_UW2_UD(tmp0, tmp1, fyscale, fyscale, out0, out1);       \
-  DOTP_UW2_UD(tmp2, tmp3, fyscale, fyscale, out2, out3);       \
-  SRAR_D4_UD(out0, out1, out2, out3, shift);                   \
-  PCKEV_W2_UW(out1, out0, out3, out2, dst0, dst1);             \
-  ILVRL_W2_UW(zero, in2, tmp0, tmp1);                          \
-  ILVRL_W2_UW(zero, in3, tmp2, tmp3);                          \
-  DOTP_UW2_UD(tmp0, tmp1, fyscale, fyscale, out0, out1);       \
-  DOTP_UW2_UD(tmp2, tmp3, fyscale, fyscale, out2, out3);       \
-  SRAR_D4_UD(out0, out1, out2, out3, shift);                   \
-  PCKEV_W2_UW(out1, out0, out3, out2, dst2, dst3);             \
-} while (0)
-
-#define CALC_MULT_FIX1_4(in0, scale, shift, dst) do {    \
-  v4u32 tmp0, tmp1;                                      \
-  v2u64 out0, out1;                                      \
-  ILVRL_W2_UW(zero, in0, tmp0, tmp1);                    \
-  DOTP_UW2_UD(tmp0, tmp1, scale, scale, out0, out1);     \
-  SRAR_D2_UD(out0, out1, shift);                         \
-  dst = (v4u32)__msa_pckev_w((v4i32)out1, (v4i32)out0);  \
-} while (0)
-
-#define CALC_MULT_FIX2_16(in0, in1, in2, in3, mult, scale, shift,  \
-                          dst0, dst1) do {                         \
-  v4u32 tmp0, tmp1, tmp2, tmp3;                                    \
-  v2u64 out0, out1, out2, out3;                                    \
-  ILVRL_W2_UW(in0, in2, tmp0, tmp1);                               \
-  ILVRL_W2_UW(in1, in3, tmp2, tmp3);                               \
-  DOTP_UW2_UD(tmp0, tmp1, mult, mult, out0, out1);                 \
-  DOTP_UW2_UD(tmp2, tmp3, mult, mult, out2, out3);                 \
-  SRAR_D4_UD(out0, out1, out2, out3, shift);                       \
-  DOTP_UW2_UD(out0, out1, scale, scale, out0, out1);               \
-  DOTP_UW2_UD(out2, out3, scale, scale, out2, out3);               \
-  SRAR_D4_UD(out0, out1, out2, out3, shift);                       \
-  PCKEV_B2_UB(out1, out0, out3, out2, dst0, dst1);                 \
-} while (0)
-
-#define CALC_MULT_FIX2_4(in0, in1, mult, scale, shift, dst) do {  \
-  v4u32 tmp0, tmp1;                                               \
-  v2u64 out0, out1;                                               \
-  v16i8 t0, t1;                                                   \
-  ILVRL_W2_UW(in0, in1, tmp0, tmp1);                              \
-  DOTP_UW2_UD(tmp0, tmp1, mult, mult, out0, out1);                \
-  SRAR_D2_UD(out0, out1, shift);                                  \
-  DOTP_UW2_UD(out0, out1, scale, scale, out0, out1);              \
-  SRAR_D2_UD(out0, out1, shift);                                  \
-  t0 = __msa_pckev_b((v16i8)out1, (v16i8)out0);                   \
-  t1 = __msa_pckev_b(t0, t0);                                     \
-  t0 = __msa_pckev_b(t1, t1);                                     \
-  dst = __msa_copy_s_w((v4i32)t0, 0);                             \
-} while (0)
-
-static WEBP_INLINE void ExportRowExpand_0(const uint32_t* frow, uint8_t* dst,
-                                          int length,
-                                          WebPRescaler* const wrk) {
-  const v4u32 scale = (v4u32)__msa_fill_w(wrk->fy_scale);
-  const v4u32 shift = (v4u32)__msa_fill_w(WEBP_RESCALER_RFIX);
-  const v4i32 zero = { 0 };
-
-  while (length >= 16) {
-    v4u32 src0, src1, src2, src3;
-    v16u8 out;
-    LD_UW4(frow, 4, src0, src1, src2, src3);
-    CALC_MULT_FIX_16(src0, src1, src2, src3, scale, shift, out);
-    ST_UB(out, dst);
-    length -= 16;
-    frow   += 16;
-    dst    += 16;
-  }
-  if (length > 0) {
-    int x_out;
-    if (length >= 12) {
-      uint32_t val0_m, val1_m, val2_m;
-      v4u32 src0, src1, src2;
-      LD_UW3(frow, 4, src0, src1, src2);
-      CALC_MULT_FIX_4(src0, scale, shift, val0_m);
-      CALC_MULT_FIX_4(src1, scale, shift, val1_m);
-      CALC_MULT_FIX_4(src2, scale, shift, val2_m);
-      SW3(val0_m, val1_m, val2_m, dst, 4);
-      length -= 12;
-      frow   += 12;
-      dst    += 12;
-    } else if (length >= 8) {
-      uint32_t val0_m, val1_m;
-      v4u32 src0, src1;
-      LD_UW2(frow, 4, src0, src1);
-      CALC_MULT_FIX_4(src0, scale, shift, val0_m);
-      CALC_MULT_FIX_4(src1, scale, shift, val1_m);
-      SW2(val0_m, val1_m, dst, 4);
-      length -= 8;
-      frow   += 8;
-      dst    += 8;
-    } else if (length >= 4) {
-      uint32_t val0_m;
-      const v4u32 src0 = LD_UW(frow);
-      CALC_MULT_FIX_4(src0, scale, shift, val0_m);
-      SW(val0_m, dst);
-      length -= 4;
-      frow   += 4;
-      dst    += 4;
-    }
-    for (x_out = 0; x_out < length; ++x_out) {
-      const uint32_t J = frow[x_out];
-      const int v = (int)MULT_FIX(J, wrk->fy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-    }
-  }
-}
-
-static WEBP_INLINE void ExportRowExpand_1(const uint32_t* frow, uint32_t* irow,
-                                          uint8_t* dst, int length,
-                                          WebPRescaler* const wrk) {
-  const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub);
-  const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B);
-  const v4i32 B1 = __msa_fill_w(B);
-  const v4i32 A1 = __msa_fill_w(A);
-  const v4i32 AB = __msa_ilvr_w(A1, B1);
-  const v4u32 scale = (v4u32)__msa_fill_w(wrk->fy_scale);
-  const v4u32 shift = (v4u32)__msa_fill_w(WEBP_RESCALER_RFIX);
-
-  while (length >= 16) {
-    v4u32 frow0, frow1, frow2, frow3, irow0, irow1, irow2, irow3;
-    v16u8 t0, t1, t2, t3, t4, t5;
-    LD_UW4(frow, 4, frow0, frow1, frow2, frow3);
-    LD_UW4(irow, 4, irow0, irow1, irow2, irow3);
-    CALC_MULT_FIX2_16(frow0, frow1, irow0, irow1, AB, scale, shift, t0, t1);
-    CALC_MULT_FIX2_16(frow2, frow3, irow2, irow3, AB, scale, shift, t2, t3);
-    PCKEV_B2_UB(t1, t0, t3, t2, t4, t5);
-    t0 = (v16u8)__msa_pckev_b((v16i8)t5, (v16i8)t4);
-    ST_UB(t0, dst);
-    frow   += 16;
-    irow   += 16;
-    dst    += 16;
-    length -= 16;
-  }
-  if (length > 0) {
-    int x_out;
-    if (length >= 12) {
-      uint32_t val0_m, val1_m, val2_m;
-      v4u32 frow0, frow1, frow2, irow0, irow1, irow2;
-      LD_UW3(frow, 4, frow0, frow1, frow2);
-      LD_UW3(irow, 4, irow0, irow1, irow2);
-      CALC_MULT_FIX2_4(frow0, irow0, AB, scale, shift, val0_m);
-      CALC_MULT_FIX2_4(frow1, irow1, AB, scale, shift, val1_m);
-      CALC_MULT_FIX2_4(frow2, irow2, AB, scale, shift, val2_m);
-      SW3(val0_m, val1_m, val2_m, dst, 4);
-      frow   += 12;
-      irow   += 12;
-      dst    += 12;
-      length -= 12;
-    } else if (length >= 8) {
-      uint32_t val0_m, val1_m;
-      v4u32 frow0, frow1, irow0, irow1;
-      LD_UW2(frow, 4, frow0, frow1);
-      LD_UW2(irow, 4, irow0, irow1);
-      CALC_MULT_FIX2_4(frow0, irow0, AB, scale, shift, val0_m);
-      CALC_MULT_FIX2_4(frow1, irow1, AB, scale, shift, val1_m);
-      SW2(val0_m, val1_m, dst, 4);
-      frow   += 4;
-      irow   += 4;
-      dst    += 4;
-      length -= 4;
-    } else if (length >= 4) {
-      uint32_t val0_m;
-      const v4u32 frow0 = LD_UW(frow + 0);
-      const v4u32 irow0 = LD_UW(irow + 0);
-      CALC_MULT_FIX2_4(frow0, irow0, AB, scale, shift, val0_m);
-      SW(val0_m, dst);
-      frow   += 4;
-      irow   += 4;
-      dst    += 4;
-      length -= 4;
-    }
-    for (x_out = 0; x_out < length; ++x_out) {
-      const uint64_t I = (uint64_t)A * frow[x_out]
-                       + (uint64_t)B * irow[x_out];
-      const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX);
-      const int v = (int)MULT_FIX(J, wrk->fy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-    }
-  }
-}
-
-static void RescalerExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) {
-  uint8_t* dst = wrk->dst;
-  rescaler_t* irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const rescaler_t* frow = wrk->frow;
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(wrk->y_expand);
-  assert(wrk->y_sub != 0);
-  if (wrk->y_accum == 0) {
-    ExportRowExpand_0(frow, dst, x_out_max, wrk);
-  } else {
-    ExportRowExpand_1(frow, irow, dst, x_out_max, wrk);
-  }
-}
-
-#if 0  // disabled for now. TODO(skal): make match the C-code
-static WEBP_INLINE void ExportRowShrink_0(const uint32_t* frow, uint32_t* irow,
-                                          uint8_t* dst, int length,
-                                          const uint32_t yscale,
-                                          WebPRescaler* const wrk) {
-  const v4u32 y_scale = (v4u32)__msa_fill_w(yscale);
-  const v4u32 fxyscale = (v4u32)__msa_fill_w(wrk->fxy_scale);
-  const v4u32 shiftval = (v4u32)__msa_fill_w(WEBP_RESCALER_RFIX);
-  const v4i32 zero = { 0 };
-
-  while (length >= 16) {
-    v4u32 src0, src1, src2, src3, frac0, frac1, frac2, frac3;
-    v16u8 out;
-    LD_UW4(frow, 4, src0, src1, src2, src3);
-    CALC_MULT_FIX1_16(src0, src1, src2, src3, y_scale, shiftval,
-                      frac0, frac1, frac2, frac3);
-    LD_UW4(irow, 4, src0, src1, src2, src3);
-    SUB4(src0, frac0, src1, frac1, src2, frac2, src3, frac3,
-         src0, src1, src2, src3);
-    CALC_MULT_FIX_16(src0, src1, src2, src3, fxyscale, shiftval, out);
-    ST_UB(out, dst);
-    ST_UW4(frac0, frac1, frac2, frac3, irow, 4);
-    frow   += 16;
-    irow   += 16;
-    dst    += 16;
-    length -= 16;
-  }
-  if (length > 0) {
-    int x_out;
-    if (length >= 12) {
-      uint32_t val0_m, val1_m, val2_m;
-      v4u32 src0, src1, src2, frac0, frac1, frac2;
-      LD_UW3(frow, 4, src0, src1, src2);
-      CALC_MULT_FIX1_4(src0, y_scale, shiftval, frac0);
-      CALC_MULT_FIX1_4(src1, y_scale, shiftval, frac1);
-      CALC_MULT_FIX1_4(src2, y_scale, shiftval, frac2);
-      LD_UW3(irow, 4, src0, src1, src2);
-      SUB3(src0, frac0, src1, frac1, src2, frac2, src0, src1, src2);
-      CALC_MULT_FIX_4(src0, fxyscale, shiftval, val0_m);
-      CALC_MULT_FIX_4(src1, fxyscale, shiftval, val1_m);
-      CALC_MULT_FIX_4(src2, fxyscale, shiftval, val2_m);
-      SW3(val0_m, val1_m, val2_m, dst, 4);
-      ST_UW3(frac0, frac1, frac2, irow, 4);
-      frow   += 12;
-      irow   += 12;
-      dst    += 12;
-      length -= 12;
-    } else if (length >= 8) {
-      uint32_t val0_m, val1_m;
-      v4u32 src0, src1, frac0, frac1;
-      LD_UW2(frow, 4, src0, src1);
-      CALC_MULT_FIX1_4(src0, y_scale, shiftval, frac0);
-      CALC_MULT_FIX1_4(src1, y_scale, shiftval, frac1);
-      LD_UW2(irow, 4, src0, src1);
-      SUB2(src0, frac0, src1, frac1, src0, src1);
-      CALC_MULT_FIX_4(src0, fxyscale, shiftval, val0_m);
-      CALC_MULT_FIX_4(src1, fxyscale, shiftval, val1_m);
-      SW2(val0_m, val1_m, dst, 4);
-      ST_UW2(frac0, frac1, irow, 4);
-      frow   += 8;
-      irow   += 8;
-      dst    += 8;
-      length -= 8;
-    } else if (length >= 4) {
-      uint32_t val0_m;
-      v4u32 frac0;
-      v4u32 src0 = LD_UW(frow);
-      CALC_MULT_FIX1_4(src0, y_scale, shiftval, frac0);
-      src0 = LD_UW(irow);
-      src0 = src0 - frac0;
-      CALC_MULT_FIX_4(src0, fxyscale, shiftval, val0_m);
-      SW(val0_m, dst);
-      ST_UW(frac0, irow);
-      frow   += 4;
-      irow   += 4;
-      dst    += 4;
-      length -= 4;
-    }
-    for (x_out = 0; x_out < length; ++x_out) {
-      const uint32_t frac = (uint32_t)MULT_FIX(frow[x_out], yscale);
-      const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-      irow[x_out] = frac;
-    }
-  }
-}
-
-static WEBP_INLINE void ExportRowShrink_1(uint32_t* irow, uint8_t* dst,
-                                          int length,
-                                          WebPRescaler* const wrk) {
-  const v4u32 scale = (v4u32)__msa_fill_w(wrk->fxy_scale);
-  const v4u32 shift = (v4u32)__msa_fill_w(WEBP_RESCALER_RFIX);
-  const v4i32 zero = { 0 };
-
-  while (length >= 16) {
-    v4u32 src0, src1, src2, src3;
-    v16u8 dst0;
-    LD_UW4(irow, 4, src0, src1, src2, src3);
-    CALC_MULT_FIX_16(src0, src1, src2, src3, scale, shift, dst0);
-    ST_UB(dst0, dst);
-    ST_SW4(zero, zero, zero, zero, irow, 4);
-    length -= 16;
-    irow   += 16;
-    dst    += 16;
-  }
-  if (length > 0) {
-    int x_out;
-    if (length >= 12) {
-      uint32_t val0_m, val1_m, val2_m;
-      v4u32 src0, src1, src2;
-      LD_UW3(irow, 4, src0, src1, src2);
-      CALC_MULT_FIX_4(src0, scale, shift, val0_m);
-      CALC_MULT_FIX_4(src1, scale, shift, val1_m);
-      CALC_MULT_FIX_4(src2, scale, shift, val2_m);
-      SW3(val0_m, val1_m, val2_m, dst, 4);
-      ST_SW3(zero, zero, zero, irow, 4);
-      length -= 12;
-      irow   += 12;
-      dst    += 12;
-    } else if (length >= 8) {
-      uint32_t val0_m, val1_m;
-      v4u32 src0, src1;
-      LD_UW2(irow, 4, src0, src1);
-      CALC_MULT_FIX_4(src0, scale, shift, val0_m);
-      CALC_MULT_FIX_4(src1, scale, shift, val1_m);
-      SW2(val0_m, val1_m, dst, 4);
-      ST_SW2(zero, zero, irow, 4);
-      length -= 8;
-      irow   += 8;
-      dst    += 8;
-    } else if (length >= 4) {
-      uint32_t val0_m;
-      const v4u32 src0 = LD_UW(irow + 0);
-      CALC_MULT_FIX_4(src0, scale, shift, val0_m);
-      SW(val0_m, dst);
-      ST_SW(zero, irow);
-      length -= 4;
-      irow   += 4;
-      dst    += 4;
-    }
-    for (x_out = 0; x_out < length; ++x_out) {
-      const int v = (int)MULT_FIX(irow[x_out], wrk->fxy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-      irow[x_out] = 0;
-    }
-  }
-}
-
-static void RescalerExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) {
-  uint8_t* dst = wrk->dst;
-  rescaler_t* irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const rescaler_t* frow = wrk->frow;
-  const uint32_t yscale = wrk->fy_scale * (-wrk->y_accum);
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(!wrk->y_expand);
-  if (yscale) {
-    ExportRowShrink_0(frow, irow, dst, x_out_max, yscale, wrk);
-  } else {
-    ExportRowShrink_1(irow, dst, x_out_max, wrk);
-  }
-}
-#endif  // 0
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPRescalerDspInitMSA(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMSA(void) {
-  WebPRescalerExportRowExpand = RescalerExportRowExpand_MIPSdspR2;
-//  WebPRescalerExportRowShrink = RescalerExportRowShrink_MIPSdspR2;
-}
-
-#else     // !WEBP_USE_MSA
-
-WEBP_DSP_INIT_STUB(WebPRescalerDspInitMSA)
-
-#endif    // WEBP_USE_MSA
diff --git a/ios/Pods/libwebp/src/dsp/rescaler_neon.c b/ios/Pods/libwebp/src/dsp/rescaler_neon.c
deleted file mode 100644
index a553f06..0000000
--- a/ios/Pods/libwebp/src/dsp/rescaler_neon.c
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// NEON version of rescaling functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON) && !defined(WEBP_REDUCE_SIZE)
-
-#include <arm_neon.h>
-#include <assert.h>
-#include "src/dsp/neon.h"
-#include "src/utils/rescaler_utils.h"
-
-#define ROUNDER (WEBP_RESCALER_ONE >> 1)
-#define MULT_FIX_C(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX)
-#define MULT_FIX_FLOOR_C(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX)
-
-#define LOAD_32x4(SRC, DST) const uint32x4_t DST = vld1q_u32((SRC))
-#define LOAD_32x8(SRC, DST0, DST1)                                    \
-    LOAD_32x4(SRC + 0, DST0);                                         \
-    LOAD_32x4(SRC + 4, DST1)
-
-#define STORE_32x8(SRC0, SRC1, DST) do {                              \
-    vst1q_u32((DST) + 0, SRC0);                                       \
-    vst1q_u32((DST) + 4, SRC1);                                       \
-} while (0);
-
-#if (WEBP_RESCALER_RFIX == 32)
-#define MAKE_HALF_CST(C) vdupq_n_s32((int32_t)((C) >> 1))
-// note: B is actualy scale>>1. See MAKE_HALF_CST
-#define MULT_FIX(A, B) \
-    vreinterpretq_u32_s32(vqrdmulhq_s32(vreinterpretq_s32_u32((A)), (B)))
-#define MULT_FIX_FLOOR(A, B) \
-    vreinterpretq_u32_s32(vqdmulhq_s32(vreinterpretq_s32_u32((A)), (B)))
-#else
-#error "MULT_FIX/WEBP_RESCALER_RFIX need some more work"
-#endif
-
-static uint32x4_t Interpolate_NEON(const rescaler_t* const frow,
-                                   const rescaler_t* const irow,
-                                   uint32_t A, uint32_t B) {
-  LOAD_32x4(frow, A0);
-  LOAD_32x4(irow, B0);
-  const uint64x2_t C0 = vmull_n_u32(vget_low_u32(A0), A);
-  const uint64x2_t C1 = vmull_n_u32(vget_high_u32(A0), A);
-  const uint64x2_t D0 = vmlal_n_u32(C0, vget_low_u32(B0), B);
-  const uint64x2_t D1 = vmlal_n_u32(C1, vget_high_u32(B0), B);
-  const uint32x4_t E = vcombine_u32(
-      vrshrn_n_u64(D0, WEBP_RESCALER_RFIX),
-      vrshrn_n_u64(D1, WEBP_RESCALER_RFIX));
-  return E;
-}
-
-static void RescalerExportRowExpand_NEON(WebPRescaler* const wrk) {
-  int x_out;
-  uint8_t* const dst = wrk->dst;
-  rescaler_t* const irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const int max_span = x_out_max & ~7;
-  const rescaler_t* const frow = wrk->frow;
-  const uint32_t fy_scale = wrk->fy_scale;
-  const int32x4_t fy_scale_half = MAKE_HALF_CST(fy_scale);
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(wrk->y_expand);
-  assert(wrk->y_sub != 0);
-  if (wrk->y_accum == 0) {
-    for (x_out = 0; x_out < max_span; x_out += 8) {
-      LOAD_32x4(frow + x_out + 0, A0);
-      LOAD_32x4(frow + x_out + 4, A1);
-      const uint32x4_t B0 = MULT_FIX(A0, fy_scale_half);
-      const uint32x4_t B1 = MULT_FIX(A1, fy_scale_half);
-      const uint16x4_t C0 = vmovn_u32(B0);
-      const uint16x4_t C1 = vmovn_u32(B1);
-      const uint8x8_t D = vmovn_u16(vcombine_u16(C0, C1));
-      vst1_u8(dst + x_out, D);
-    }
-    for (; x_out < x_out_max; ++x_out) {
-      const uint32_t J = frow[x_out];
-      const int v = (int)MULT_FIX_C(J, fy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-    }
-  } else {
-    const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub);
-    const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B);
-    for (x_out = 0; x_out < max_span; x_out += 8) {
-      const uint32x4_t C0 =
-          Interpolate_NEON(frow + x_out + 0, irow + x_out + 0, A, B);
-      const uint32x4_t C1 =
-          Interpolate_NEON(frow + x_out + 4, irow + x_out + 4, A, B);
-      const uint32x4_t D0 = MULT_FIX(C0, fy_scale_half);
-      const uint32x4_t D1 = MULT_FIX(C1, fy_scale_half);
-      const uint16x4_t E0 = vmovn_u32(D0);
-      const uint16x4_t E1 = vmovn_u32(D1);
-      const uint8x8_t F = vmovn_u16(vcombine_u16(E0, E1));
-      vst1_u8(dst + x_out, F);
-    }
-    for (; x_out < x_out_max; ++x_out) {
-      const uint64_t I = (uint64_t)A * frow[x_out]
-                       + (uint64_t)B * irow[x_out];
-      const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX);
-      const int v = (int)MULT_FIX_C(J, fy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-    }
-  }
-}
-
-static void RescalerExportRowShrink_NEON(WebPRescaler* const wrk) {
-  int x_out;
-  uint8_t* const dst = wrk->dst;
-  rescaler_t* const irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const int max_span = x_out_max & ~7;
-  const rescaler_t* const frow = wrk->frow;
-  const uint32_t yscale = wrk->fy_scale * (-wrk->y_accum);
-  const uint32_t fxy_scale = wrk->fxy_scale;
-  const uint32x4_t zero = vdupq_n_u32(0);
-  const int32x4_t yscale_half = MAKE_HALF_CST(yscale);
-  const int32x4_t fxy_scale_half = MAKE_HALF_CST(fxy_scale);
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(!wrk->y_expand);
-  if (yscale) {
-    for (x_out = 0; x_out < max_span; x_out += 8) {
-      LOAD_32x8(frow + x_out, in0, in1);
-      LOAD_32x8(irow + x_out, in2, in3);
-      const uint32x4_t A0 = MULT_FIX(in0, yscale_half);
-      const uint32x4_t A1 = MULT_FIX(in1, yscale_half);
-      const uint32x4_t B0 = vqsubq_u32(in2, A0);
-      const uint32x4_t B1 = vqsubq_u32(in3, A1);
-      const uint32x4_t C0 = MULT_FIX_FLOOR(B0, fxy_scale_half);
-      const uint32x4_t C1 = MULT_FIX_FLOOR(B1, fxy_scale_half);
-      const uint16x4_t D0 = vmovn_u32(C0);
-      const uint16x4_t D1 = vmovn_u32(C1);
-      const uint8x8_t E = vmovn_u16(vcombine_u16(D0, D1));
-      vst1_u8(dst + x_out, E);
-      STORE_32x8(A0, A1, irow + x_out);
-    }
-    for (; x_out < x_out_max; ++x_out) {
-      const uint32_t frac = (uint32_t)MULT_FIX_C(frow[x_out], yscale);
-      const int v = (int)MULT_FIX_FLOOR_C(irow[x_out] - frac, fxy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-      irow[x_out] = frac;   // new fractional start
-    }
-  } else {
-    for (x_out = 0; x_out < max_span; x_out += 8) {
-      LOAD_32x8(irow + x_out, in0, in1);
-      const uint32x4_t A0 = MULT_FIX(in0, fxy_scale_half);
-      const uint32x4_t A1 = MULT_FIX(in1, fxy_scale_half);
-      const uint16x4_t B0 = vmovn_u32(A0);
-      const uint16x4_t B1 = vmovn_u32(A1);
-      const uint8x8_t C = vmovn_u16(vcombine_u16(B0, B1));
-      vst1_u8(dst + x_out, C);
-      STORE_32x8(zero, zero, irow + x_out);
-    }
-    for (; x_out < x_out_max; ++x_out) {
-      const int v = (int)MULT_FIX_C(irow[x_out], fxy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-      irow[x_out] = 0;
-    }
-  }
-}
-
-#undef MULT_FIX_FLOOR_C
-#undef MULT_FIX_C
-#undef MULT_FIX_FLOOR
-#undef MULT_FIX
-#undef ROUNDER
-
-//------------------------------------------------------------------------------
-
-extern void WebPRescalerDspInitNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitNEON(void) {
-  WebPRescalerExportRowExpand = RescalerExportRowExpand_NEON;
-  WebPRescalerExportRowShrink = RescalerExportRowShrink_NEON;
-}
-
-#else     // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(WebPRescalerDspInitNEON)
-
-#endif    // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/rescaler_sse2.c b/ios/Pods/libwebp/src/dsp/rescaler_sse2.c
deleted file mode 100644
index f7461a4..0000000
--- a/ios/Pods/libwebp/src/dsp/rescaler_sse2.c
+++ /dev/null
@@ -1,404 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 Rescaling functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2) && !defined(WEBP_REDUCE_SIZE)
-#include <emmintrin.h>
-
-#include <assert.h>
-#include "src/utils/rescaler_utils.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// Implementations of critical functions ImportRow / ExportRow
-
-#define ROUNDER (WEBP_RESCALER_ONE >> 1)
-#define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX)
-#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX)
-
-// input: 8 bytes ABCDEFGH -> output: A0E0B0F0C0G0D0H0
-static void LoadTwoPixels_SSE2(const uint8_t* const src, __m128i* out) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i A = _mm_loadl_epi64((const __m128i*)(src));  // ABCDEFGH
-  const __m128i B = _mm_unpacklo_epi8(A, zero);              // A0B0C0D0E0F0G0H0
-  const __m128i C = _mm_srli_si128(B, 8);                    // E0F0G0H0
-  *out = _mm_unpacklo_epi16(B, C);
-}
-
-// input: 8 bytes ABCDEFGH -> output: A0B0C0D0E0F0G0H0
-static void LoadEightPixels_SSE2(const uint8_t* const src, __m128i* out) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i A = _mm_loadl_epi64((const __m128i*)(src));  // ABCDEFGH
-  *out = _mm_unpacklo_epi8(A, zero);
-}
-
-static void RescalerImportRowExpand_SSE2(WebPRescaler* const wrk,
-                                         const uint8_t* src) {
-  rescaler_t* frow = wrk->frow;
-  const rescaler_t* const frow_end = frow + wrk->dst_width * wrk->num_channels;
-  const int x_add = wrk->x_add;
-  int accum = x_add;
-  __m128i cur_pixels;
-
-  // SSE2 implementation only works with 16b signed arithmetic at max.
-  if (wrk->src_width < 8 || accum >= (1 << 15)) {
-    WebPRescalerImportRowExpand_C(wrk, src);
-    return;
-  }
-
-  assert(!WebPRescalerInputDone(wrk));
-  assert(wrk->x_expand);
-  if (wrk->num_channels == 4) {
-    LoadTwoPixels_SSE2(src, &cur_pixels);
-    src += 4;
-    while (1) {
-      const __m128i mult = _mm_set1_epi32(((x_add - accum) << 16) | accum);
-      const __m128i out = _mm_madd_epi16(cur_pixels, mult);
-      _mm_storeu_si128((__m128i*)frow, out);
-      frow += 4;
-      if (frow >= frow_end) break;
-      accum -= wrk->x_sub;
-      if (accum < 0) {
-        LoadTwoPixels_SSE2(src, &cur_pixels);
-        src += 4;
-        accum += x_add;
-      }
-    }
-  } else {
-    int left;
-    const uint8_t* const src_limit = src + wrk->src_width - 8;
-    LoadEightPixels_SSE2(src, &cur_pixels);
-    src += 7;
-    left = 7;
-    while (1) {
-      const __m128i mult = _mm_cvtsi32_si128(((x_add - accum) << 16) | accum);
-      const __m128i out = _mm_madd_epi16(cur_pixels, mult);
-      assert(sizeof(*frow) == sizeof(uint32_t));
-      WebPUint32ToMem((uint8_t*)frow, _mm_cvtsi128_si32(out));
-      frow += 1;
-      if (frow >= frow_end) break;
-      accum -= wrk->x_sub;
-      if (accum < 0) {
-        if (--left) {
-          cur_pixels = _mm_srli_si128(cur_pixels, 2);
-        } else if (src <= src_limit) {
-          LoadEightPixels_SSE2(src, &cur_pixels);
-          src += 7;
-          left = 7;
-        } else {   // tail
-          cur_pixels = _mm_srli_si128(cur_pixels, 2);
-          cur_pixels = _mm_insert_epi16(cur_pixels, src[1], 1);
-          src += 1;
-          left = 1;
-        }
-        accum += x_add;
-      }
-    }
-  }
-  assert(accum == 0);
-}
-
-static void RescalerImportRowShrink_SSE2(WebPRescaler* const wrk,
-                                         const uint8_t* src) {
-  const int x_sub = wrk->x_sub;
-  int accum = 0;
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i mult0 = _mm_set1_epi16(x_sub);
-  const __m128i mult1 = _mm_set1_epi32(wrk->fx_scale);
-  const __m128i rounder = _mm_set_epi32(0, ROUNDER, 0, ROUNDER);
-  __m128i sum = zero;
-  rescaler_t* frow = wrk->frow;
-  const rescaler_t* const frow_end = wrk->frow + 4 * wrk->dst_width;
-
-  if (wrk->num_channels != 4 || wrk->x_add > (x_sub << 7)) {
-    WebPRescalerImportRowShrink_C(wrk, src);
-    return;
-  }
-  assert(!WebPRescalerInputDone(wrk));
-  assert(!wrk->x_expand);
-
-  for (; frow < frow_end; frow += 4) {
-    __m128i base = zero;
-    accum += wrk->x_add;
-    while (accum > 0) {
-      const __m128i A = _mm_cvtsi32_si128(WebPMemToUint32(src));
-      src += 4;
-      base = _mm_unpacklo_epi8(A, zero);
-      // To avoid overflow, we need: base * x_add / x_sub < 32768
-      // => x_add < x_sub << 7. That's a 1/128 reduction ratio limit.
-      sum = _mm_add_epi16(sum, base);
-      accum -= x_sub;
-    }
-    {    // Emit next horizontal pixel.
-      const __m128i mult = _mm_set1_epi16(-accum);
-      const __m128i frac0 = _mm_mullo_epi16(base, mult);  // 16b x 16b -> 32b
-      const __m128i frac1 = _mm_mulhi_epu16(base, mult);
-      const __m128i frac = _mm_unpacklo_epi16(frac0, frac1);  // frac is 32b
-      const __m128i A0 = _mm_mullo_epi16(sum, mult0);
-      const __m128i A1 = _mm_mulhi_epu16(sum, mult0);
-      const __m128i B0 = _mm_unpacklo_epi16(A0, A1);      // sum * x_sub
-      const __m128i frow_out = _mm_sub_epi32(B0, frac);   // sum * x_sub - frac
-      const __m128i D0 = _mm_srli_epi64(frac, 32);
-      const __m128i D1 = _mm_mul_epu32(frac, mult1);      // 32b x 16b -> 64b
-      const __m128i D2 = _mm_mul_epu32(D0, mult1);
-      const __m128i E1 = _mm_add_epi64(D1, rounder);
-      const __m128i E2 = _mm_add_epi64(D2, rounder);
-      const __m128i F1 = _mm_shuffle_epi32(E1, 1 | (3 << 2));
-      const __m128i F2 = _mm_shuffle_epi32(E2, 1 | (3 << 2));
-      const __m128i G = _mm_unpacklo_epi32(F1, F2);
-      sum = _mm_packs_epi32(G, zero);
-      _mm_storeu_si128((__m128i*)frow, frow_out);
-    }
-  }
-  assert(accum == 0);
-}
-
-//------------------------------------------------------------------------------
-// Row export
-
-// load *src as epi64, multiply by mult and store result in [out0 ... out3]
-static WEBP_INLINE void LoadDispatchAndMult_SSE2(const rescaler_t* const src,
-                                                 const __m128i* const mult,
-                                                 __m128i* const out0,
-                                                 __m128i* const out1,
-                                                 __m128i* const out2,
-                                                 __m128i* const out3) {
-  const __m128i A0 = _mm_loadu_si128((const __m128i*)(src + 0));
-  const __m128i A1 = _mm_loadu_si128((const __m128i*)(src + 4));
-  const __m128i A2 = _mm_srli_epi64(A0, 32);
-  const __m128i A3 = _mm_srli_epi64(A1, 32);
-  if (mult != NULL) {
-    *out0 = _mm_mul_epu32(A0, *mult);
-    *out1 = _mm_mul_epu32(A1, *mult);
-    *out2 = _mm_mul_epu32(A2, *mult);
-    *out3 = _mm_mul_epu32(A3, *mult);
-  } else {
-    *out0 = A0;
-    *out1 = A1;
-    *out2 = A2;
-    *out3 = A3;
-  }
-}
-
-static WEBP_INLINE void ProcessRow_SSE2(const __m128i* const A0,
-                                        const __m128i* const A1,
-                                        const __m128i* const A2,
-                                        const __m128i* const A3,
-                                        const __m128i* const mult,
-                                        uint8_t* const dst) {
-  const __m128i rounder = _mm_set_epi32(0, ROUNDER, 0, ROUNDER);
-  const __m128i mask = _mm_set_epi32(0xffffffffu, 0, 0xffffffffu, 0);
-  const __m128i B0 = _mm_mul_epu32(*A0, *mult);
-  const __m128i B1 = _mm_mul_epu32(*A1, *mult);
-  const __m128i B2 = _mm_mul_epu32(*A2, *mult);
-  const __m128i B3 = _mm_mul_epu32(*A3, *mult);
-  const __m128i C0 = _mm_add_epi64(B0, rounder);
-  const __m128i C1 = _mm_add_epi64(B1, rounder);
-  const __m128i C2 = _mm_add_epi64(B2, rounder);
-  const __m128i C3 = _mm_add_epi64(B3, rounder);
-  const __m128i D0 = _mm_srli_epi64(C0, WEBP_RESCALER_RFIX);
-  const __m128i D1 = _mm_srli_epi64(C1, WEBP_RESCALER_RFIX);
-#if (WEBP_RESCALER_RFIX < 32)
-  const __m128i D2 =
-      _mm_and_si128(_mm_slli_epi64(C2, 32 - WEBP_RESCALER_RFIX), mask);
-  const __m128i D3 =
-      _mm_and_si128(_mm_slli_epi64(C3, 32 - WEBP_RESCALER_RFIX), mask);
-#else
-  const __m128i D2 = _mm_and_si128(C2, mask);
-  const __m128i D3 = _mm_and_si128(C3, mask);
-#endif
-  const __m128i E0 = _mm_or_si128(D0, D2);
-  const __m128i E1 = _mm_or_si128(D1, D3);
-  const __m128i F = _mm_packs_epi32(E0, E1);
-  const __m128i G = _mm_packus_epi16(F, F);
-  _mm_storel_epi64((__m128i*)dst, G);
-}
-
-static WEBP_INLINE void ProcessRow_Floor_SSE2(const __m128i* const A0,
-                                              const __m128i* const A1,
-                                              const __m128i* const A2,
-                                              const __m128i* const A3,
-                                              const __m128i* const mult,
-                                              uint8_t* const dst) {
-  const __m128i mask = _mm_set_epi32(0xffffffffu, 0, 0xffffffffu, 0);
-  const __m128i B0 = _mm_mul_epu32(*A0, *mult);
-  const __m128i B1 = _mm_mul_epu32(*A1, *mult);
-  const __m128i B2 = _mm_mul_epu32(*A2, *mult);
-  const __m128i B3 = _mm_mul_epu32(*A3, *mult);
-  const __m128i D0 = _mm_srli_epi64(B0, WEBP_RESCALER_RFIX);
-  const __m128i D1 = _mm_srli_epi64(B1, WEBP_RESCALER_RFIX);
-#if (WEBP_RESCALER_RFIX < 32)
-  const __m128i D2 =
-      _mm_and_si128(_mm_slli_epi64(B2, 32 - WEBP_RESCALER_RFIX), mask);
-  const __m128i D3 =
-      _mm_and_si128(_mm_slli_epi64(B3, 32 - WEBP_RESCALER_RFIX), mask);
-#else
-  const __m128i D2 = _mm_and_si128(B2, mask);
-  const __m128i D3 = _mm_and_si128(B3, mask);
-#endif
-  const __m128i E0 = _mm_or_si128(D0, D2);
-  const __m128i E1 = _mm_or_si128(D1, D3);
-  const __m128i F = _mm_packs_epi32(E0, E1);
-  const __m128i G = _mm_packus_epi16(F, F);
-  _mm_storel_epi64((__m128i*)dst, G);
-}
-
-static void RescalerExportRowExpand_SSE2(WebPRescaler* const wrk) {
-  int x_out;
-  uint8_t* const dst = wrk->dst;
-  rescaler_t* const irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const rescaler_t* const frow = wrk->frow;
-  const __m128i mult = _mm_set_epi32(0, wrk->fy_scale, 0, wrk->fy_scale);
-
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0 && wrk->y_sub + wrk->y_accum >= 0);
-  assert(wrk->y_expand);
-  if (wrk->y_accum == 0) {
-    for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) {
-      __m128i A0, A1, A2, A3;
-      LoadDispatchAndMult_SSE2(frow + x_out, NULL, &A0, &A1, &A2, &A3);
-      ProcessRow_SSE2(&A0, &A1, &A2, &A3, &mult, dst + x_out);
-    }
-    for (; x_out < x_out_max; ++x_out) {
-      const uint32_t J = frow[x_out];
-      const int v = (int)MULT_FIX(J, wrk->fy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-    }
-  } else {
-    const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub);
-    const uint32_t A = (uint32_t)(WEBP_RESCALER_ONE - B);
-    const __m128i mA = _mm_set_epi32(0, A, 0, A);
-    const __m128i mB = _mm_set_epi32(0, B, 0, B);
-    const __m128i rounder = _mm_set_epi32(0, ROUNDER, 0, ROUNDER);
-    for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) {
-      __m128i A0, A1, A2, A3, B0, B1, B2, B3;
-      LoadDispatchAndMult_SSE2(frow + x_out, &mA, &A0, &A1, &A2, &A3);
-      LoadDispatchAndMult_SSE2(irow + x_out, &mB, &B0, &B1, &B2, &B3);
-      {
-        const __m128i C0 = _mm_add_epi64(A0, B0);
-        const __m128i C1 = _mm_add_epi64(A1, B1);
-        const __m128i C2 = _mm_add_epi64(A2, B2);
-        const __m128i C3 = _mm_add_epi64(A3, B3);
-        const __m128i D0 = _mm_add_epi64(C0, rounder);
-        const __m128i D1 = _mm_add_epi64(C1, rounder);
-        const __m128i D2 = _mm_add_epi64(C2, rounder);
-        const __m128i D3 = _mm_add_epi64(C3, rounder);
-        const __m128i E0 = _mm_srli_epi64(D0, WEBP_RESCALER_RFIX);
-        const __m128i E1 = _mm_srli_epi64(D1, WEBP_RESCALER_RFIX);
-        const __m128i E2 = _mm_srli_epi64(D2, WEBP_RESCALER_RFIX);
-        const __m128i E3 = _mm_srli_epi64(D3, WEBP_RESCALER_RFIX);
-        ProcessRow_SSE2(&E0, &E1, &E2, &E3, &mult, dst + x_out);
-      }
-    }
-    for (; x_out < x_out_max; ++x_out) {
-      const uint64_t I = (uint64_t)A * frow[x_out]
-                       + (uint64_t)B * irow[x_out];
-      const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX);
-      const int v = (int)MULT_FIX(J, wrk->fy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-    }
-  }
-}
-
-static void RescalerExportRowShrink_SSE2(WebPRescaler* const wrk) {
-  int x_out;
-  uint8_t* const dst = wrk->dst;
-  rescaler_t* const irow = wrk->irow;
-  const int x_out_max = wrk->dst_width * wrk->num_channels;
-  const rescaler_t* const frow = wrk->frow;
-  const uint32_t yscale = wrk->fy_scale * (-wrk->y_accum);
-  assert(!WebPRescalerOutputDone(wrk));
-  assert(wrk->y_accum <= 0);
-  assert(!wrk->y_expand);
-  if (yscale) {
-    const int scale_xy = wrk->fxy_scale;
-    const __m128i mult_xy = _mm_set_epi32(0, scale_xy, 0, scale_xy);
-    const __m128i mult_y = _mm_set_epi32(0, yscale, 0, yscale);
-    const __m128i rounder = _mm_set_epi32(0, ROUNDER, 0, ROUNDER);
-    for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) {
-      __m128i A0, A1, A2, A3, B0, B1, B2, B3;
-      LoadDispatchAndMult_SSE2(irow + x_out, NULL, &A0, &A1, &A2, &A3);
-      LoadDispatchAndMult_SSE2(frow + x_out, &mult_y, &B0, &B1, &B2, &B3);
-      {
-        const __m128i C0 = _mm_add_epi64(B0, rounder);
-        const __m128i C1 = _mm_add_epi64(B1, rounder);
-        const __m128i C2 = _mm_add_epi64(B2, rounder);
-        const __m128i C3 = _mm_add_epi64(B3, rounder);
-        const __m128i D0 = _mm_srli_epi64(C0, WEBP_RESCALER_RFIX);   // = frac
-        const __m128i D1 = _mm_srli_epi64(C1, WEBP_RESCALER_RFIX);
-        const __m128i D2 = _mm_srli_epi64(C2, WEBP_RESCALER_RFIX);
-        const __m128i D3 = _mm_srli_epi64(C3, WEBP_RESCALER_RFIX);
-        const __m128i E0 = _mm_sub_epi64(A0, D0);   // irow[x] - frac
-        const __m128i E1 = _mm_sub_epi64(A1, D1);
-        const __m128i E2 = _mm_sub_epi64(A2, D2);
-        const __m128i E3 = _mm_sub_epi64(A3, D3);
-        const __m128i F2 = _mm_slli_epi64(D2, 32);
-        const __m128i F3 = _mm_slli_epi64(D3, 32);
-        const __m128i G0 = _mm_or_si128(D0, F2);
-        const __m128i G1 = _mm_or_si128(D1, F3);
-        _mm_storeu_si128((__m128i*)(irow + x_out + 0), G0);
-        _mm_storeu_si128((__m128i*)(irow + x_out + 4), G1);
-        ProcessRow_Floor_SSE2(&E0, &E1, &E2, &E3, &mult_xy, dst + x_out);
-      }
-    }
-    for (; x_out < x_out_max; ++x_out) {
-      const uint32_t frac = (int)MULT_FIX(frow[x_out], yscale);
-      const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-      irow[x_out] = frac;   // new fractional start
-    }
-  } else {
-    const uint32_t scale = wrk->fxy_scale;
-    const __m128i mult = _mm_set_epi32(0, scale, 0, scale);
-    const __m128i zero = _mm_setzero_si128();
-    for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) {
-      __m128i A0, A1, A2, A3;
-      LoadDispatchAndMult_SSE2(irow + x_out, NULL, &A0, &A1, &A2, &A3);
-      _mm_storeu_si128((__m128i*)(irow + x_out + 0), zero);
-      _mm_storeu_si128((__m128i*)(irow + x_out + 4), zero);
-      ProcessRow_SSE2(&A0, &A1, &A2, &A3, &mult, dst + x_out);
-    }
-    for (; x_out < x_out_max; ++x_out) {
-      const int v = (int)MULT_FIX(irow[x_out], scale);
-      assert(v >= 0 && v <= 255);
-      dst[x_out] = v;
-      irow[x_out] = 0;
-    }
-  }
-}
-
-#undef MULT_FIX_FLOOR
-#undef MULT_FIX
-#undef ROUNDER
-
-//------------------------------------------------------------------------------
-
-extern void WebPRescalerDspInitSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitSSE2(void) {
-  WebPRescalerImportRowExpand = RescalerImportRowExpand_SSE2;
-  WebPRescalerImportRowShrink = RescalerImportRowShrink_SSE2;
-  WebPRescalerExportRowExpand = RescalerExportRowExpand_SSE2;
-  WebPRescalerExportRowShrink = RescalerExportRowShrink_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(WebPRescalerDspInitSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/ssim.c b/ios/Pods/libwebp/src/dsp/ssim.c
deleted file mode 100644
index 989ce82..0000000
--- a/ios/Pods/libwebp/src/dsp/ssim.c
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// distortion calculation
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>  // for abs()
-
-#include "src/dsp/dsp.h"
-
-#if !defined(WEBP_REDUCE_SIZE)
-
-//------------------------------------------------------------------------------
-// SSIM / PSNR
-
-// hat-shaped filter. Sum of coefficients is equal to 16.
-static const uint32_t kWeight[2 * VP8_SSIM_KERNEL + 1] = {
-  1, 2, 3, 4, 3, 2, 1
-};
-static const uint32_t kWeightSum = 16 * 16;   // sum{kWeight}^2
-
-static WEBP_INLINE double SSIMCalculation(
-    const VP8DistoStats* const stats, uint32_t N  /*num samples*/) {
-  const uint32_t w2 =  N * N;
-  const uint32_t C1 = 20 * w2;
-  const uint32_t C2 = 60 * w2;
-  const uint32_t C3 = 8 * 8 * w2;   // 'dark' limit ~= 6
-  const uint64_t xmxm = (uint64_t)stats->xm * stats->xm;
-  const uint64_t ymym = (uint64_t)stats->ym * stats->ym;
-  if (xmxm + ymym >= C3) {
-    const int64_t xmym = (int64_t)stats->xm * stats->ym;
-    const int64_t sxy = (int64_t)stats->xym * N - xmym;    // can be negative
-    const uint64_t sxx = (uint64_t)stats->xxm * N - xmxm;
-    const uint64_t syy = (uint64_t)stats->yym * N - ymym;
-    // we descale by 8 to prevent overflow during the fnum/fden multiply.
-    const uint64_t num_S = (2 * (uint64_t)(sxy < 0 ? 0 : sxy) + C2) >> 8;
-    const uint64_t den_S = (sxx + syy + C2) >> 8;
-    const uint64_t fnum = (2 * xmym + C1) * num_S;
-    const uint64_t fden = (xmxm + ymym + C1) * den_S;
-    const double r = (double)fnum / fden;
-    assert(r >= 0. && r <= 1.0);
-    return r;
-  }
-  return 1.;   // area is too dark to contribute meaningfully
-}
-
-double VP8SSIMFromStats(const VP8DistoStats* const stats) {
-  return SSIMCalculation(stats, kWeightSum);
-}
-
-double VP8SSIMFromStatsClipped(const VP8DistoStats* const stats) {
-  return SSIMCalculation(stats, stats->w);
-}
-
-static double SSIMGetClipped_C(const uint8_t* src1, int stride1,
-                               const uint8_t* src2, int stride2,
-                               int xo, int yo, int W, int H) {
-  VP8DistoStats stats = { 0, 0, 0, 0, 0, 0 };
-  const int ymin = (yo - VP8_SSIM_KERNEL < 0) ? 0 : yo - VP8_SSIM_KERNEL;
-  const int ymax = (yo + VP8_SSIM_KERNEL > H - 1) ? H - 1
-                                                  : yo + VP8_SSIM_KERNEL;
-  const int xmin = (xo - VP8_SSIM_KERNEL < 0) ? 0 : xo - VP8_SSIM_KERNEL;
-  const int xmax = (xo + VP8_SSIM_KERNEL > W - 1) ? W - 1
-                                                  : xo + VP8_SSIM_KERNEL;
-  int x, y;
-  src1 += ymin * stride1;
-  src2 += ymin * stride2;
-  for (y = ymin; y <= ymax; ++y, src1 += stride1, src2 += stride2) {
-    for (x = xmin; x <= xmax; ++x) {
-      const uint32_t w = kWeight[VP8_SSIM_KERNEL + x - xo]
-                       * kWeight[VP8_SSIM_KERNEL + y - yo];
-      const uint32_t s1 = src1[x];
-      const uint32_t s2 = src2[x];
-      stats.w   += w;
-      stats.xm  += w * s1;
-      stats.ym  += w * s2;
-      stats.xxm += w * s1 * s1;
-      stats.xym += w * s1 * s2;
-      stats.yym += w * s2 * s2;
-    }
-  }
-  return VP8SSIMFromStatsClipped(&stats);
-}
-
-static double SSIMGet_C(const uint8_t* src1, int stride1,
-                        const uint8_t* src2, int stride2) {
-  VP8DistoStats stats = { 0, 0, 0, 0, 0, 0 };
-  int x, y;
-  for (y = 0; y <= 2 * VP8_SSIM_KERNEL; ++y, src1 += stride1, src2 += stride2) {
-    for (x = 0; x <= 2 * VP8_SSIM_KERNEL; ++x) {
-      const uint32_t w = kWeight[x] * kWeight[y];
-      const uint32_t s1 = src1[x];
-      const uint32_t s2 = src2[x];
-      stats.xm  += w * s1;
-      stats.ym  += w * s2;
-      stats.xxm += w * s1 * s1;
-      stats.xym += w * s1 * s2;
-      stats.yym += w * s2 * s2;
-    }
-  }
-  return VP8SSIMFromStats(&stats);
-}
-
-#endif  // !defined(WEBP_REDUCE_SIZE)
-
-//------------------------------------------------------------------------------
-
-#if !defined(WEBP_DISABLE_STATS)
-static uint32_t AccumulateSSE_C(const uint8_t* src1,
-                                const uint8_t* src2, int len) {
-  int i;
-  uint32_t sse2 = 0;
-  assert(len <= 65535);  // to ensure that accumulation fits within uint32_t
-  for (i = 0; i < len; ++i) {
-    const int32_t diff = src1[i] - src2[i];
-    sse2 += diff * diff;
-  }
-  return sse2;
-}
-#endif
-
-//------------------------------------------------------------------------------
-
-#if !defined(WEBP_REDUCE_SIZE)
-VP8SSIMGetFunc VP8SSIMGet;
-VP8SSIMGetClippedFunc VP8SSIMGetClipped;
-#endif
-#if !defined(WEBP_DISABLE_STATS)
-VP8AccumulateSSEFunc VP8AccumulateSSE;
-#endif
-
-extern void VP8SSIMDspInitSSE2(void);
-
-WEBP_DSP_INIT_FUNC(VP8SSIMDspInit) {
-#if !defined(WEBP_REDUCE_SIZE)
-  VP8SSIMGetClipped = SSIMGetClipped_C;
-  VP8SSIMGet = SSIMGet_C;
-#endif
-
-#if !defined(WEBP_DISABLE_STATS)
-  VP8AccumulateSSE = AccumulateSSE_C;
-#endif
-
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      VP8SSIMDspInitSSE2();
-    }
-#endif
-  }
-}
diff --git a/ios/Pods/libwebp/src/dsp/ssim_sse2.c b/ios/Pods/libwebp/src/dsp/ssim_sse2.c
deleted file mode 100644
index 1dcb0eb..0000000
--- a/ios/Pods/libwebp/src/dsp/ssim_sse2.c
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 version of distortion calculation
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-
-#include <assert.h>
-#include <emmintrin.h>
-
-#include "src/dsp/common_sse2.h"
-
-#if !defined(WEBP_DISABLE_STATS)
-
-// Helper function
-static WEBP_INLINE void SubtractAndSquare_SSE2(const __m128i a, const __m128i b,
-                                               __m128i* const sum) {
-  // take abs(a-b) in 8b
-  const __m128i a_b = _mm_subs_epu8(a, b);
-  const __m128i b_a = _mm_subs_epu8(b, a);
-  const __m128i abs_a_b = _mm_or_si128(a_b, b_a);
-  // zero-extend to 16b
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i C0 = _mm_unpacklo_epi8(abs_a_b, zero);
-  const __m128i C1 = _mm_unpackhi_epi8(abs_a_b, zero);
-  // multiply with self
-  const __m128i sum1 = _mm_madd_epi16(C0, C0);
-  const __m128i sum2 = _mm_madd_epi16(C1, C1);
-  *sum = _mm_add_epi32(sum1, sum2);
-}
-
-//------------------------------------------------------------------------------
-// SSIM / PSNR entry point
-
-static uint32_t AccumulateSSE_SSE2(const uint8_t* src1,
-                                   const uint8_t* src2, int len) {
-  int i = 0;
-  uint32_t sse2 = 0;
-  if (len >= 16) {
-    const int limit = len - 32;
-    int32_t tmp[4];
-    __m128i sum1;
-    __m128i sum = _mm_setzero_si128();
-    __m128i a0 = _mm_loadu_si128((const __m128i*)&src1[i]);
-    __m128i b0 = _mm_loadu_si128((const __m128i*)&src2[i]);
-    i += 16;
-    while (i <= limit) {
-      const __m128i a1 = _mm_loadu_si128((const __m128i*)&src1[i]);
-      const __m128i b1 = _mm_loadu_si128((const __m128i*)&src2[i]);
-      __m128i sum2;
-      i += 16;
-      SubtractAndSquare_SSE2(a0, b0, &sum1);
-      sum = _mm_add_epi32(sum, sum1);
-      a0 = _mm_loadu_si128((const __m128i*)&src1[i]);
-      b0 = _mm_loadu_si128((const __m128i*)&src2[i]);
-      i += 16;
-      SubtractAndSquare_SSE2(a1, b1, &sum2);
-      sum = _mm_add_epi32(sum, sum2);
-    }
-    SubtractAndSquare_SSE2(a0, b0, &sum1);
-    sum = _mm_add_epi32(sum, sum1);
-    _mm_storeu_si128((__m128i*)tmp, sum);
-    sse2 += (tmp[3] + tmp[2] + tmp[1] + tmp[0]);
-  }
-
-  for (; i < len; ++i) {
-    const int32_t diff = src1[i] - src2[i];
-    sse2 += diff * diff;
-  }
-  return sse2;
-}
-#endif  // !defined(WEBP_DISABLE_STATS)
-
-#if !defined(WEBP_REDUCE_SIZE)
-
-static uint32_t HorizontalAdd16b_SSE2(const __m128i* const m) {
-  uint16_t tmp[8];
-  const __m128i a = _mm_srli_si128(*m, 8);
-  const __m128i b = _mm_add_epi16(*m, a);
-  _mm_storeu_si128((__m128i*)tmp, b);
-  return (uint32_t)tmp[3] + tmp[2] + tmp[1] + tmp[0];
-}
-
-static uint32_t HorizontalAdd32b_SSE2(const __m128i* const m) {
-  const __m128i a = _mm_srli_si128(*m, 8);
-  const __m128i b = _mm_add_epi32(*m, a);
-  const __m128i c = _mm_add_epi32(b, _mm_srli_si128(b, 4));
-  return (uint32_t)_mm_cvtsi128_si32(c);
-}
-
-static const uint16_t kWeight[] = { 1, 2, 3, 4, 3, 2, 1, 0 };
-
-#define ACCUMULATE_ROW(WEIGHT) do {                         \
-  /* compute row weight (Wx * Wy) */                        \
-  const __m128i Wy = _mm_set1_epi16((WEIGHT));              \
-  const __m128i W = _mm_mullo_epi16(Wx, Wy);                \
-  /* process 8 bytes at a time (7 bytes, actually) */       \
-  const __m128i a0 = _mm_loadl_epi64((const __m128i*)src1); \
-  const __m128i b0 = _mm_loadl_epi64((const __m128i*)src2); \
-  /* convert to 16b and multiply by weight */               \
-  const __m128i a1 = _mm_unpacklo_epi8(a0, zero);           \
-  const __m128i b1 = _mm_unpacklo_epi8(b0, zero);           \
-  const __m128i wa1 = _mm_mullo_epi16(a1, W);               \
-  const __m128i wb1 = _mm_mullo_epi16(b1, W);               \
-  /* accumulate */                                          \
-  xm  = _mm_add_epi16(xm, wa1);                             \
-  ym  = _mm_add_epi16(ym, wb1);                             \
-  xxm = _mm_add_epi32(xxm, _mm_madd_epi16(a1, wa1));        \
-  xym = _mm_add_epi32(xym, _mm_madd_epi16(a1, wb1));        \
-  yym = _mm_add_epi32(yym, _mm_madd_epi16(b1, wb1));        \
-  src1 += stride1;                                          \
-  src2 += stride2;                                          \
-} while (0)
-
-static double SSIMGet_SSE2(const uint8_t* src1, int stride1,
-                           const uint8_t* src2, int stride2) {
-  VP8DistoStats stats;
-  const __m128i zero = _mm_setzero_si128();
-  __m128i xm = zero, ym = zero;                // 16b accums
-  __m128i xxm = zero, yym = zero, xym = zero;  // 32b accum
-  const __m128i Wx = _mm_loadu_si128((const __m128i*)kWeight);
-  assert(2 * VP8_SSIM_KERNEL + 1 == 7);
-  ACCUMULATE_ROW(1);
-  ACCUMULATE_ROW(2);
-  ACCUMULATE_ROW(3);
-  ACCUMULATE_ROW(4);
-  ACCUMULATE_ROW(3);
-  ACCUMULATE_ROW(2);
-  ACCUMULATE_ROW(1);
-  stats.xm  = HorizontalAdd16b_SSE2(&xm);
-  stats.ym  = HorizontalAdd16b_SSE2(&ym);
-  stats.xxm = HorizontalAdd32b_SSE2(&xxm);
-  stats.xym = HorizontalAdd32b_SSE2(&xym);
-  stats.yym = HorizontalAdd32b_SSE2(&yym);
-  return VP8SSIMFromStats(&stats);
-}
-
-#endif  // !defined(WEBP_REDUCE_SIZE)
-
-extern void VP8SSIMDspInitSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void VP8SSIMDspInitSSE2(void) {
-#if !defined(WEBP_DISABLE_STATS)
-  VP8AccumulateSSE = AccumulateSSE_SSE2;
-#endif
-#if !defined(WEBP_REDUCE_SIZE)
-  VP8SSIMGet = SSIMGet_SSE2;
-#endif
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(VP8SSIMDspInitSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/upsampling.c b/ios/Pods/libwebp/src/dsp/upsampling.c
deleted file mode 100644
index 9b60da5..0000000
--- a/ios/Pods/libwebp/src/dsp/upsampling.c
+++ /dev/null
@@ -1,327 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// YUV to RGB upsampling functions.
-//
-// Author: somnath@google.com (Somnath Banerjee)
-
-#include "src/dsp/dsp.h"
-#include "src/dsp/yuv.h"
-
-#include <assert.h>
-
-//------------------------------------------------------------------------------
-// Fancy upsampler
-
-#ifdef FANCY_UPSAMPLING
-
-// Fancy upsampling functions to convert YUV to RGB
-WebPUpsampleLinePairFunc WebPUpsamplers[MODE_LAST];
-
-// Given samples laid out in a square as:
-//  [a b]
-//  [c d]
-// we interpolate u/v as:
-//  ([9*a + 3*b + 3*c +   d    3*a + 9*b + 3*c +   d] + [8 8]) / 16
-//  ([3*a +   b + 9*c + 3*d      a + 3*b + 3*c + 9*d]   [8 8]) / 16
-
-// We process u and v together stashed into 32bit (16bit each).
-#define LOAD_UV(u, v) ((u) | ((v) << 16))
-
-#define UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP)                                  \
-static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y,           \
-                      const uint8_t* top_u, const uint8_t* top_v,              \
-                      const uint8_t* cur_u, const uint8_t* cur_v,              \
-                      uint8_t* top_dst, uint8_t* bottom_dst, int len) {        \
-  int x;                                                                       \
-  const int last_pixel_pair = (len - 1) >> 1;                                  \
-  uint32_t tl_uv = LOAD_UV(top_u[0], top_v[0]);   /* top-left sample */        \
-  uint32_t l_uv  = LOAD_UV(cur_u[0], cur_v[0]);   /* left-sample */            \
-  assert(top_y != NULL);                                                       \
-  {                                                                            \
-    const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2;                \
-    FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst);                          \
-  }                                                                            \
-  if (bottom_y != NULL) {                                                      \
-    const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2;                \
-    FUNC(bottom_y[0], uv0 & 0xff, (uv0 >> 16), bottom_dst);                    \
-  }                                                                            \
-  for (x = 1; x <= last_pixel_pair; ++x) {                                     \
-    const uint32_t t_uv = LOAD_UV(top_u[x], top_v[x]);  /* top sample */       \
-    const uint32_t uv   = LOAD_UV(cur_u[x], cur_v[x]);  /* sample */           \
-    /* precompute invariant values associated with first and second diagonals*/\
-    const uint32_t avg = tl_uv + t_uv + l_uv + uv + 0x00080008u;               \
-    const uint32_t diag_12 = (avg + 2 * (t_uv + l_uv)) >> 3;                   \
-    const uint32_t diag_03 = (avg + 2 * (tl_uv + uv)) >> 3;                    \
-    {                                                                          \
-      const uint32_t uv0 = (diag_12 + tl_uv) >> 1;                             \
-      const uint32_t uv1 = (diag_03 + t_uv) >> 1;                              \
-      FUNC(top_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16),                          \
-           top_dst + (2 * x - 1) * (XSTEP));                                   \
-      FUNC(top_y[2 * x - 0], uv1 & 0xff, (uv1 >> 16),                          \
-           top_dst + (2 * x - 0) * (XSTEP));                                   \
-    }                                                                          \
-    if (bottom_y != NULL) {                                                    \
-      const uint32_t uv0 = (diag_03 + l_uv) >> 1;                              \
-      const uint32_t uv1 = (diag_12 + uv) >> 1;                                \
-      FUNC(bottom_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16),                       \
-           bottom_dst + (2 * x - 1) * (XSTEP));                                \
-      FUNC(bottom_y[2 * x + 0], uv1 & 0xff, (uv1 >> 16),                       \
-           bottom_dst + (2 * x + 0) * (XSTEP));                                \
-    }                                                                          \
-    tl_uv = t_uv;                                                              \
-    l_uv = uv;                                                                 \
-  }                                                                            \
-  if (!(len & 1)) {                                                            \
-    {                                                                          \
-      const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2;              \
-      FUNC(top_y[len - 1], uv0 & 0xff, (uv0 >> 16),                            \
-           top_dst + (len - 1) * (XSTEP));                                     \
-    }                                                                          \
-    if (bottom_y != NULL) {                                                    \
-      const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2;              \
-      FUNC(bottom_y[len - 1], uv0 & 0xff, (uv0 >> 16),                         \
-           bottom_dst + (len - 1) * (XSTEP));                                  \
-    }                                                                          \
-  }                                                                            \
-}
-
-// All variants implemented.
-#if !WEBP_NEON_OMIT_C_CODE
-UPSAMPLE_FUNC(UpsampleRgbaLinePair_C, VP8YuvToRgba, 4)
-UPSAMPLE_FUNC(UpsampleBgraLinePair_C, VP8YuvToBgra, 4)
-#if !defined(WEBP_REDUCE_CSP)
-UPSAMPLE_FUNC(UpsampleArgbLinePair_C, VP8YuvToArgb, 4)
-UPSAMPLE_FUNC(UpsampleRgbLinePair_C,  VP8YuvToRgb,  3)
-UPSAMPLE_FUNC(UpsampleBgrLinePair_C,  VP8YuvToBgr,  3)
-UPSAMPLE_FUNC(UpsampleRgba4444LinePair_C, VP8YuvToRgba4444, 2)
-UPSAMPLE_FUNC(UpsampleRgb565LinePair_C,  VP8YuvToRgb565,  2)
-#else
-static void EmptyUpsampleFunc(const uint8_t* top_y, const uint8_t* bottom_y,
-                              const uint8_t* top_u, const uint8_t* top_v,
-                              const uint8_t* cur_u, const uint8_t* cur_v,
-                              uint8_t* top_dst, uint8_t* bottom_dst, int len) {
-  (void)top_y;
-  (void)bottom_y;
-  (void)top_u;
-  (void)top_v;
-  (void)cur_u;
-  (void)cur_v;
-  (void)top_dst;
-  (void)bottom_dst;
-  (void)len;
-  assert(0);   // COLORSPACE SUPPORT NOT COMPILED
-}
-#define UpsampleArgbLinePair_C EmptyUpsampleFunc
-#define UpsampleRgbLinePair_C EmptyUpsampleFunc
-#define UpsampleBgrLinePair_C EmptyUpsampleFunc
-#define UpsampleRgba4444LinePair_C EmptyUpsampleFunc
-#define UpsampleRgb565LinePair_C EmptyUpsampleFunc
-#endif   // WEBP_REDUCE_CSP
-
-#endif
-
-#undef LOAD_UV
-#undef UPSAMPLE_FUNC
-
-#endif  // FANCY_UPSAMPLING
-
-//------------------------------------------------------------------------------
-
-#if !defined(FANCY_UPSAMPLING)
-#define DUAL_SAMPLE_FUNC(FUNC_NAME, FUNC)                                      \
-static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bot_y,              \
-                      const uint8_t* top_u, const uint8_t* top_v,              \
-                      const uint8_t* bot_u, const uint8_t* bot_v,              \
-                      uint8_t* top_dst, uint8_t* bot_dst, int len) {           \
-  const int half_len = len >> 1;                                               \
-  int x;                                                                       \
-  assert(top_dst != NULL);                                                     \
-  {                                                                            \
-    for (x = 0; x < half_len; ++x) {                                           \
-      FUNC(top_y[2 * x + 0], top_u[x], top_v[x], top_dst + 8 * x + 0);         \
-      FUNC(top_y[2 * x + 1], top_u[x], top_v[x], top_dst + 8 * x + 4);         \
-    }                                                                          \
-    if (len & 1) FUNC(top_y[2 * x + 0], top_u[x], top_v[x], top_dst + 8 * x);  \
-  }                                                                            \
-  if (bot_dst != NULL) {                                                       \
-    for (x = 0; x < half_len; ++x) {                                           \
-      FUNC(bot_y[2 * x + 0], bot_u[x], bot_v[x], bot_dst + 8 * x + 0);         \
-      FUNC(bot_y[2 * x + 1], bot_u[x], bot_v[x], bot_dst + 8 * x + 4);         \
-    }                                                                          \
-    if (len & 1) FUNC(bot_y[2 * x + 0], bot_u[x], bot_v[x], bot_dst + 8 * x);  \
-  }                                                                            \
-}
-
-DUAL_SAMPLE_FUNC(DualLineSamplerBGRA, VP8YuvToBgra)
-DUAL_SAMPLE_FUNC(DualLineSamplerARGB, VP8YuvToArgb)
-#undef DUAL_SAMPLE_FUNC
-
-#endif  // !FANCY_UPSAMPLING
-
-WebPUpsampleLinePairFunc WebPGetLinePairConverter(int alpha_is_last) {
-  WebPInitUpsamplers();
-#ifdef FANCY_UPSAMPLING
-  return WebPUpsamplers[alpha_is_last ? MODE_BGRA : MODE_ARGB];
-#else
-  return (alpha_is_last ? DualLineSamplerBGRA : DualLineSamplerARGB);
-#endif
-}
-
-//------------------------------------------------------------------------------
-// YUV444 converter
-
-#define YUV444_FUNC(FUNC_NAME, FUNC, XSTEP)                                    \
-extern void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v,    \
-                      uint8_t* dst, int len);                                  \
-void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v,           \
-               uint8_t* dst, int len) {                                        \
-  int i;                                                                       \
-  for (i = 0; i < len; ++i) FUNC(y[i], u[i], v[i], &dst[i * (XSTEP)]);         \
-}
-
-YUV444_FUNC(WebPYuv444ToRgba_C,     VP8YuvToRgba, 4)
-YUV444_FUNC(WebPYuv444ToBgra_C,     VP8YuvToBgra, 4)
-#if !defined(WEBP_REDUCE_CSP)
-YUV444_FUNC(WebPYuv444ToRgb_C,      VP8YuvToRgb,  3)
-YUV444_FUNC(WebPYuv444ToBgr_C,      VP8YuvToBgr,  3)
-YUV444_FUNC(WebPYuv444ToArgb_C,     VP8YuvToArgb, 4)
-YUV444_FUNC(WebPYuv444ToRgba4444_C, VP8YuvToRgba4444, 2)
-YUV444_FUNC(WebPYuv444ToRgb565_C,   VP8YuvToRgb565, 2)
-#else
-static void EmptyYuv444Func(const uint8_t* y,
-                            const uint8_t* u, const uint8_t* v,
-                            uint8_t* dst, int len) {
-  (void)y;
-  (void)u;
-  (void)v;
-  (void)dst;
-  (void)len;
-}
-#define WebPYuv444ToRgb_C EmptyYuv444Func
-#define WebPYuv444ToBgr_C EmptyYuv444Func
-#define WebPYuv444ToArgb_C EmptyYuv444Func
-#define WebPYuv444ToRgba4444_C EmptyYuv444Func
-#define WebPYuv444ToRgb565_C EmptyYuv444Func
-#endif   // WEBP_REDUCE_CSP
-
-#undef YUV444_FUNC
-
-WebPYUV444Converter WebPYUV444Converters[MODE_LAST];
-
-extern void WebPInitYUV444ConvertersMIPSdspR2(void);
-extern void WebPInitYUV444ConvertersSSE2(void);
-extern void WebPInitYUV444ConvertersSSE41(void);
-
-WEBP_DSP_INIT_FUNC(WebPInitYUV444Converters) {
-  WebPYUV444Converters[MODE_RGBA]      = WebPYuv444ToRgba_C;
-  WebPYUV444Converters[MODE_BGRA]      = WebPYuv444ToBgra_C;
-  WebPYUV444Converters[MODE_RGB]       = WebPYuv444ToRgb_C;
-  WebPYUV444Converters[MODE_BGR]       = WebPYuv444ToBgr_C;
-  WebPYUV444Converters[MODE_ARGB]      = WebPYuv444ToArgb_C;
-  WebPYUV444Converters[MODE_RGBA_4444] = WebPYuv444ToRgba4444_C;
-  WebPYUV444Converters[MODE_RGB_565]   = WebPYuv444ToRgb565_C;
-  WebPYUV444Converters[MODE_rgbA]      = WebPYuv444ToRgba_C;
-  WebPYUV444Converters[MODE_bgrA]      = WebPYuv444ToBgra_C;
-  WebPYUV444Converters[MODE_Argb]      = WebPYuv444ToArgb_C;
-  WebPYUV444Converters[MODE_rgbA_4444] = WebPYuv444ToRgba4444_C;
-
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      WebPInitYUV444ConvertersSSE2();
-    }
-#endif
-#if defined(WEBP_USE_SSE41)
-    if (VP8GetCPUInfo(kSSE4_1)) {
-      WebPInitYUV444ConvertersSSE41();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      WebPInitYUV444ConvertersMIPSdspR2();
-    }
-#endif
-  }
-}
-
-//------------------------------------------------------------------------------
-// Main calls
-
-extern void WebPInitUpsamplersSSE2(void);
-extern void WebPInitUpsamplersSSE41(void);
-extern void WebPInitUpsamplersNEON(void);
-extern void WebPInitUpsamplersMIPSdspR2(void);
-extern void WebPInitUpsamplersMSA(void);
-
-WEBP_DSP_INIT_FUNC(WebPInitUpsamplers) {
-#ifdef FANCY_UPSAMPLING
-#if !WEBP_NEON_OMIT_C_CODE
-  WebPUpsamplers[MODE_RGBA]      = UpsampleRgbaLinePair_C;
-  WebPUpsamplers[MODE_BGRA]      = UpsampleBgraLinePair_C;
-  WebPUpsamplers[MODE_rgbA]      = UpsampleRgbaLinePair_C;
-  WebPUpsamplers[MODE_bgrA]      = UpsampleBgraLinePair_C;
-  WebPUpsamplers[MODE_RGB]       = UpsampleRgbLinePair_C;
-  WebPUpsamplers[MODE_BGR]       = UpsampleBgrLinePair_C;
-  WebPUpsamplers[MODE_ARGB]      = UpsampleArgbLinePair_C;
-  WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair_C;
-  WebPUpsamplers[MODE_RGB_565]   = UpsampleRgb565LinePair_C;
-  WebPUpsamplers[MODE_Argb]      = UpsampleArgbLinePair_C;
-  WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair_C;
-#endif
-
-  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      WebPInitUpsamplersSSE2();
-    }
-#endif
-#if defined(WEBP_USE_SSE41)
-    if (VP8GetCPUInfo(kSSE4_1)) {
-      WebPInitUpsamplersSSE41();
-    }
-#endif
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      WebPInitUpsamplersMIPSdspR2();
-    }
-#endif
-#if defined(WEBP_USE_MSA)
-    if (VP8GetCPUInfo(kMSA)) {
-      WebPInitUpsamplersMSA();
-    }
-#endif
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    WebPInitUpsamplersNEON();
-  }
-#endif
-
-  assert(WebPUpsamplers[MODE_RGBA] != NULL);
-  assert(WebPUpsamplers[MODE_BGRA] != NULL);
-  assert(WebPUpsamplers[MODE_rgbA] != NULL);
-  assert(WebPUpsamplers[MODE_bgrA] != NULL);
-#if !defined(WEBP_REDUCE_CSP) || !WEBP_NEON_OMIT_C_CODE
-  assert(WebPUpsamplers[MODE_RGB] != NULL);
-  assert(WebPUpsamplers[MODE_BGR] != NULL);
-  assert(WebPUpsamplers[MODE_ARGB] != NULL);
-  assert(WebPUpsamplers[MODE_RGBA_4444] != NULL);
-  assert(WebPUpsamplers[MODE_RGB_565] != NULL);
-  assert(WebPUpsamplers[MODE_Argb] != NULL);
-  assert(WebPUpsamplers[MODE_rgbA_4444] != NULL);
-#endif
-
-#endif  // FANCY_UPSAMPLING
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/dsp/upsampling_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/upsampling_mips_dsp_r2.c
deleted file mode 100644
index 10d499d..0000000
--- a/ios/Pods/libwebp/src/dsp/upsampling_mips_dsp_r2.c
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// YUV to RGB upsampling functions.
-//
-// Author(s): Branimir Vasic (branimir.vasic@imgtec.com)
-//            Djordje Pesut  (djordje.pesut@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-#include <assert.h>
-#include "src/dsp/yuv.h"
-
-#define YUV_TO_RGB(Y, U, V, R, G, B) do {                                      \
-    const int t1 = MultHi(Y, 19077);                                           \
-    const int t2 = MultHi(V, 13320);                                           \
-    R = MultHi(V, 26149);                                                      \
-    G = MultHi(U, 6419);                                                       \
-    B = MultHi(U, 33050);                                                      \
-    R = t1 + R;                                                                \
-    G = t1 - G;                                                                \
-    B = t1 + B;                                                                \
-    R = R - 14234;                                                             \
-    G = G - t2 + 8708;                                                         \
-    B = B - 17685;                                                             \
-    __asm__ volatile (                                                         \
-      "shll_s.w         %[" #R "],      %[" #R "],        17         \n\t"     \
-      "shll_s.w         %[" #G "],      %[" #G "],        17         \n\t"     \
-      "shll_s.w         %[" #B "],      %[" #B "],        17         \n\t"     \
-      "precrqu_s.qb.ph  %[" #R "],      %[" #R "],        $zero      \n\t"     \
-      "precrqu_s.qb.ph  %[" #G "],      %[" #G "],        $zero      \n\t"     \
-      "precrqu_s.qb.ph  %[" #B "],      %[" #B "],        $zero      \n\t"     \
-      "srl              %[" #R "],      %[" #R "],        24         \n\t"     \
-      "srl              %[" #G "],      %[" #G "],        24         \n\t"     \
-      "srl              %[" #B "],      %[" #B "],        24         \n\t"     \
-      : [R]"+r"(R), [G]"+r"(G), [B]"+r"(B)                                     \
-      :                                                                        \
-    );                                                                         \
-  } while (0)
-
-#if !defined(WEBP_REDUCE_CSP)
-static WEBP_INLINE void YuvToRgb(int y, int u, int v, uint8_t* const rgb) {
-  int r, g, b;
-  YUV_TO_RGB(y, u, v, r, g, b);
-  rgb[0] = r;
-  rgb[1] = g;
-  rgb[2] = b;
-}
-static WEBP_INLINE void YuvToBgr(int y, int u, int v, uint8_t* const bgr) {
-  int r, g, b;
-  YUV_TO_RGB(y, u, v, r, g, b);
-  bgr[0] = b;
-  bgr[1] = g;
-  bgr[2] = r;
-}
-static WEBP_INLINE void YuvToRgb565(int y, int u, int v, uint8_t* const rgb) {
-  int r, g, b;
-  YUV_TO_RGB(y, u, v, r, g, b);
-  {
-    const int rg = (r & 0xf8) | (g >> 5);
-    const int gb = ((g << 3) & 0xe0) | (b >> 3);
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    rgb[0] = gb;
-    rgb[1] = rg;
-#else
-    rgb[0] = rg;
-    rgb[1] = gb;
-#endif
-  }
-}
-static WEBP_INLINE void YuvToRgba4444(int y, int u, int v,
-                                      uint8_t* const argb) {
-  int r, g, b;
-  YUV_TO_RGB(y, u, v, r, g, b);
-  {
-    const int rg = (r & 0xf0) | (g >> 4);
-    const int ba = (b & 0xf0) | 0x0f;     // overwrite the lower 4 bits
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    argb[0] = ba;
-    argb[1] = rg;
-#else
-    argb[0] = rg;
-    argb[1] = ba;
-#endif
-   }
-}
-#endif   // WEBP_REDUCE_CSP
-
-//-----------------------------------------------------------------------------
-// Alpha handling variants
-
-#if !defined(WEBP_REDUCE_CSP)
-static WEBP_INLINE void YuvToArgb(uint8_t y, uint8_t u, uint8_t v,
-                                  uint8_t* const argb) {
-  int r, g, b;
-  YUV_TO_RGB(y, u, v, r, g, b);
-  argb[0] = 0xff;
-  argb[1] = r;
-  argb[2] = g;
-  argb[3] = b;
-}
-#endif   // WEBP_REDUCE_CSP
-static WEBP_INLINE void YuvToBgra(uint8_t y, uint8_t u, uint8_t v,
-                                  uint8_t* const bgra) {
-  int r, g, b;
-  YUV_TO_RGB(y, u, v, r, g, b);
-  bgra[0] = b;
-  bgra[1] = g;
-  bgra[2] = r;
-  bgra[3] = 0xff;
-}
-static WEBP_INLINE void YuvToRgba(uint8_t y, uint8_t u, uint8_t v,
-                                  uint8_t* const rgba) {
-  int r, g, b;
-  YUV_TO_RGB(y, u, v, r, g, b);
-  rgba[0] = r;
-  rgba[1] = g;
-  rgba[2] = b;
-  rgba[3] = 0xff;
-}
-
-//------------------------------------------------------------------------------
-// Fancy upsampler
-
-#ifdef FANCY_UPSAMPLING
-
-// Given samples laid out in a square as:
-//  [a b]
-//  [c d]
-// we interpolate u/v as:
-//  ([9*a + 3*b + 3*c +   d    3*a + 9*b + 3*c +   d] + [8 8]) / 16
-//  ([3*a +   b + 9*c + 3*d      a + 3*b + 3*c + 9*d]   [8 8]) / 16
-
-// We process u and v together stashed into 32bit (16bit each).
-#define LOAD_UV(u, v) ((u) | ((v) << 16))
-
-#define UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP)                                  \
-static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y,           \
-                      const uint8_t* top_u, const uint8_t* top_v,              \
-                      const uint8_t* cur_u, const uint8_t* cur_v,              \
-                      uint8_t* top_dst, uint8_t* bottom_dst, int len) {        \
-  int x;                                                                       \
-  const int last_pixel_pair = (len - 1) >> 1;                                  \
-  uint32_t tl_uv = LOAD_UV(top_u[0], top_v[0]);   /* top-left sample */        \
-  uint32_t l_uv  = LOAD_UV(cur_u[0], cur_v[0]);   /* left-sample */            \
-  assert(top_y != NULL);                                                       \
-  {                                                                            \
-    const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2;                \
-    FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst);                          \
-  }                                                                            \
-  if (bottom_y != NULL) {                                                      \
-    const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2;                \
-    FUNC(bottom_y[0], uv0 & 0xff, (uv0 >> 16), bottom_dst);                    \
-  }                                                                            \
-  for (x = 1; x <= last_pixel_pair; ++x) {                                     \
-    const uint32_t t_uv = LOAD_UV(top_u[x], top_v[x]);  /* top sample */       \
-    const uint32_t uv   = LOAD_UV(cur_u[x], cur_v[x]);  /* sample */           \
-    /* precompute invariant values associated with first and second diagonals*/\
-    const uint32_t avg = tl_uv + t_uv + l_uv + uv + 0x00080008u;               \
-    const uint32_t diag_12 = (avg + 2 * (t_uv + l_uv)) >> 3;                   \
-    const uint32_t diag_03 = (avg + 2 * (tl_uv + uv)) >> 3;                    \
-    {                                                                          \
-      const uint32_t uv0 = (diag_12 + tl_uv) >> 1;                             \
-      const uint32_t uv1 = (diag_03 + t_uv) >> 1;                              \
-      FUNC(top_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16),                          \
-           top_dst + (2 * x - 1) * XSTEP);                                     \
-      FUNC(top_y[2 * x - 0], uv1 & 0xff, (uv1 >> 16),                          \
-           top_dst + (2 * x - 0) * XSTEP);                                     \
-    }                                                                          \
-    if (bottom_y != NULL) {                                                    \
-      const uint32_t uv0 = (diag_03 + l_uv) >> 1;                              \
-      const uint32_t uv1 = (diag_12 + uv) >> 1;                                \
-      FUNC(bottom_y[2 * x - 1], uv0 & 0xff, (uv0 >> 16),                       \
-           bottom_dst + (2 * x - 1) * XSTEP);                                  \
-      FUNC(bottom_y[2 * x + 0], uv1 & 0xff, (uv1 >> 16),                       \
-           bottom_dst + (2 * x + 0) * XSTEP);                                  \
-    }                                                                          \
-    tl_uv = t_uv;                                                              \
-    l_uv = uv;                                                                 \
-  }                                                                            \
-  if (!(len & 1)) {                                                            \
-    {                                                                          \
-      const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2;              \
-      FUNC(top_y[len - 1], uv0 & 0xff, (uv0 >> 16),                            \
-           top_dst + (len - 1) * XSTEP);                                       \
-    }                                                                          \
-    if (bottom_y != NULL) {                                                    \
-      const uint32_t uv0 = (3 * l_uv + tl_uv + 0x00020002u) >> 2;              \
-      FUNC(bottom_y[len - 1], uv0 & 0xff, (uv0 >> 16),                         \
-           bottom_dst + (len - 1) * XSTEP);                                    \
-    }                                                                          \
-  }                                                                            \
-}
-
-// All variants implemented.
-UPSAMPLE_FUNC(UpsampleRgbaLinePair,     YuvToRgba,     4)
-UPSAMPLE_FUNC(UpsampleBgraLinePair,     YuvToBgra,     4)
-#if !defined(WEBP_REDUCE_CSP)
-UPSAMPLE_FUNC(UpsampleRgbLinePair,      YuvToRgb,      3)
-UPSAMPLE_FUNC(UpsampleBgrLinePair,      YuvToBgr,      3)
-UPSAMPLE_FUNC(UpsampleArgbLinePair,     YuvToArgb,     4)
-UPSAMPLE_FUNC(UpsampleRgba4444LinePair, YuvToRgba4444, 2)
-UPSAMPLE_FUNC(UpsampleRgb565LinePair,   YuvToRgb565,   2)
-#endif   // WEBP_REDUCE_CSP
-
-#undef LOAD_UV
-#undef UPSAMPLE_FUNC
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitUpsamplersMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersMIPSdspR2(void) {
-  WebPUpsamplers[MODE_RGBA]      = UpsampleRgbaLinePair;
-  WebPUpsamplers[MODE_BGRA]      = UpsampleBgraLinePair;
-  WebPUpsamplers[MODE_rgbA]      = UpsampleRgbaLinePair;
-  WebPUpsamplers[MODE_bgrA]      = UpsampleBgraLinePair;
-#if !defined(WEBP_REDUCE_CSP)
-  WebPUpsamplers[MODE_RGB]       = UpsampleRgbLinePair;
-  WebPUpsamplers[MODE_BGR]       = UpsampleBgrLinePair;
-  WebPUpsamplers[MODE_ARGB]      = UpsampleArgbLinePair;
-  WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair;
-  WebPUpsamplers[MODE_RGB_565]   = UpsampleRgb565LinePair;
-  WebPUpsamplers[MODE_Argb]      = UpsampleArgbLinePair;
-  WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair;
-#endif   // WEBP_REDUCE_CSP
-}
-
-#endif  // FANCY_UPSAMPLING
-
-//------------------------------------------------------------------------------
-// YUV444 converter
-
-#define YUV444_FUNC(FUNC_NAME, FUNC, XSTEP)                                    \
-static void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v,    \
-                      uint8_t* dst, int len) {                                 \
-  int i;                                                                       \
-  for (i = 0; i < len; ++i) FUNC(y[i], u[i], v[i], &dst[i * XSTEP]);           \
-}
-
-YUV444_FUNC(Yuv444ToRgba,     YuvToRgba,     4)
-YUV444_FUNC(Yuv444ToBgra,     YuvToBgra,     4)
-#if !defined(WEBP_REDUCE_CSP)
-YUV444_FUNC(Yuv444ToRgb,      YuvToRgb,      3)
-YUV444_FUNC(Yuv444ToBgr,      YuvToBgr,      3)
-YUV444_FUNC(Yuv444ToArgb,     YuvToArgb,     4)
-YUV444_FUNC(Yuv444ToRgba4444, YuvToRgba4444, 2)
-YUV444_FUNC(Yuv444ToRgb565,   YuvToRgb565,   2)
-#endif   // WEBP_REDUCE_CSP
-
-#undef YUV444_FUNC
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitYUV444ConvertersMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitYUV444ConvertersMIPSdspR2(void) {
-  WebPYUV444Converters[MODE_RGBA]      = Yuv444ToRgba;
-  WebPYUV444Converters[MODE_BGRA]      = Yuv444ToBgra;
-  WebPYUV444Converters[MODE_rgbA]      = Yuv444ToRgba;
-  WebPYUV444Converters[MODE_bgrA]      = Yuv444ToBgra;
-#if !defined(WEBP_REDUCE_CSP)
-  WebPYUV444Converters[MODE_RGB]       = Yuv444ToRgb;
-  WebPYUV444Converters[MODE_BGR]       = Yuv444ToBgr;
-  WebPYUV444Converters[MODE_ARGB]      = Yuv444ToArgb;
-  WebPYUV444Converters[MODE_RGBA_4444] = Yuv444ToRgba4444;
-  WebPYUV444Converters[MODE_RGB_565]   = Yuv444ToRgb565;
-  WebPYUV444Converters[MODE_Argb]      = Yuv444ToArgb;
-  WebPYUV444Converters[MODE_rgbA_4444] = Yuv444ToRgba4444;
-#endif   // WEBP_REDUCE_CSP
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(WebPInitYUV444ConvertersMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
-
-#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_MIPS_DSP_R2))
-WEBP_DSP_INIT_STUB(WebPInitUpsamplersMIPSdspR2)
-#endif
diff --git a/ios/Pods/libwebp/src/dsp/upsampling_msa.c b/ios/Pods/libwebp/src/dsp/upsampling_msa.c
deleted file mode 100644
index 99eea70..0000000
--- a/ios/Pods/libwebp/src/dsp/upsampling_msa.c
+++ /dev/null
@@ -1,688 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MSA version of YUV to RGB upsampling functions.
-//
-// Author: Prashant Patil (prashant.patil@imgtec.com)
-
-#include <string.h>
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MSA)
-
-#include "src/dsp/msa_macro.h"
-#include "src/dsp/yuv.h"
-
-#ifdef FANCY_UPSAMPLING
-
-#define ILVR_UW2(in, out0, out1) do {                            \
-  const v8i16 t0 = (v8i16)__msa_ilvr_b((v16i8)zero, (v16i8)in);  \
-  out0 = (v4u32)__msa_ilvr_h((v8i16)zero, t0);                   \
-  out1 = (v4u32)__msa_ilvl_h((v8i16)zero, t0);                   \
-} while (0)
-
-#define ILVRL_UW4(in, out0, out1, out2, out3) do {  \
-  v16u8 t0, t1;                                     \
-  ILVRL_B2_UB(zero, in, t0, t1);                    \
-  ILVRL_H2_UW(zero, t0, out0, out1);                \
-  ILVRL_H2_UW(zero, t1, out2, out3);                \
-} while (0)
-
-#define MULTHI_16(in0, in1, in2, in3, cnst, out0, out1) do {   \
-  const v4i32 const0 = (v4i32)__msa_fill_w(cnst * 256);        \
-  v4u32 temp0, temp1, temp2, temp3;                            \
-  MUL4(in0, const0, in1, const0, in2, const0, in3, const0,     \
-       temp0, temp1, temp2, temp3);                            \
-  PCKOD_H2_UH(temp1, temp0, temp3, temp2, out0, out1);         \
-} while (0)
-
-#define MULTHI_8(in0, in1, cnst, out0) do {                 \
-  const v4i32 const0 = (v4i32)__msa_fill_w(cnst * 256);     \
-  v4u32 temp0, temp1;                                       \
-  MUL2(in0, const0, in1, const0, temp0, temp1);             \
-  out0 = (v8u16)__msa_pckod_h((v8i16)temp1, (v8i16)temp0);  \
-} while (0)
-
-#define CALC_R16(y0, y1, v0, v1, dst) do {                \
-  const v8i16 const_a = (v8i16)__msa_fill_h(14234);       \
-  const v8i16 a0 = __msa_adds_s_h((v8i16)y0, (v8i16)v0);  \
-  const v8i16 a1 = __msa_adds_s_h((v8i16)y1, (v8i16)v1);  \
-  v8i16 b0 = __msa_subs_s_h(a0, const_a);                 \
-  v8i16 b1 = __msa_subs_s_h(a1, const_a);                 \
-  SRAI_H2_SH(b0, b1, 6);                                  \
-  CLIP_SH2_0_255(b0, b1);                                 \
-  dst = (v16u8)__msa_pckev_b((v16i8)b1, (v16i8)b0);       \
-} while (0)
-
-#define CALC_R8(y0, v0, dst) do {                         \
-  const v8i16 const_a = (v8i16)__msa_fill_h(14234);       \
-  const v8i16 a0 = __msa_adds_s_h((v8i16)y0, (v8i16)v0);  \
-  v8i16 b0 = __msa_subs_s_h(a0, const_a);                 \
-  b0 = SRAI_H(b0, 6);                                     \
-  CLIP_SH_0_255(b0);                                      \
-  dst = (v16u8)__msa_pckev_b((v16i8)b0, (v16i8)b0);       \
-} while (0)
-
-#define CALC_G16(y0, y1, u0, u1, v0, v1, dst) do {   \
-  const v8i16 const_a = (v8i16)__msa_fill_h(8708);   \
-  v8i16 a0 = __msa_subs_s_h((v8i16)y0, (v8i16)u0);   \
-  v8i16 a1 = __msa_subs_s_h((v8i16)y1, (v8i16)u1);   \
-  const v8i16 b0 = __msa_subs_s_h(a0, (v8i16)v0);    \
-  const v8i16 b1 = __msa_subs_s_h(a1, (v8i16)v1);    \
-  a0 = __msa_adds_s_h(b0, const_a);                  \
-  a1 = __msa_adds_s_h(b1, const_a);                  \
-  SRAI_H2_SH(a0, a1, 6);                             \
-  CLIP_SH2_0_255(a0, a1);                            \
-  dst = (v16u8)__msa_pckev_b((v16i8)a1, (v16i8)a0);  \
-} while (0)
-
-#define CALC_G8(y0, u0, v0, dst) do {                \
-  const v8i16 const_a = (v8i16)__msa_fill_h(8708);   \
-  v8i16 a0 = __msa_subs_s_h((v8i16)y0, (v8i16)u0);   \
-  const v8i16 b0 = __msa_subs_s_h(a0, (v8i16)v0);    \
-  a0 = __msa_adds_s_h(b0, const_a);                  \
-  a0 = SRAI_H(a0, 6);                                \
-  CLIP_SH_0_255(a0);                                 \
-  dst = (v16u8)__msa_pckev_b((v16i8)a0, (v16i8)a0);  \
-} while (0)
-
-#define CALC_B16(y0, y1, u0, u1, dst) do {           \
-  const v8u16 const_a = (v8u16)__msa_fill_h(17685);  \
-  const v8u16 a0 = __msa_adds_u_h((v8u16)y0, u0);    \
-  const v8u16 a1 = __msa_adds_u_h((v8u16)y1, u1);    \
-  v8u16 b0 = __msa_subs_u_h(a0, const_a);            \
-  v8u16 b1 = __msa_subs_u_h(a1, const_a);            \
-  SRAI_H2_UH(b0, b1, 6);                             \
-  CLIP_UH2_0_255(b0, b1);                            \
-  dst = (v16u8)__msa_pckev_b((v16i8)b1, (v16i8)b0);  \
-} while (0)
-
-#define CALC_B8(y0, u0, dst) do {                    \
-  const v8u16 const_a = (v8u16)__msa_fill_h(17685);  \
-  const v8u16 a0 = __msa_adds_u_h((v8u16)y0, u0);    \
-  v8u16 b0 = __msa_subs_u_h(a0, const_a);            \
-  b0 = SRAI_H(b0, 6);                                \
-  CLIP_UH_0_255(b0);                                 \
-  dst = (v16u8)__msa_pckev_b((v16i8)b0, (v16i8)b0);  \
-} while (0)
-
-#define CALC_RGB16(y, u, v, R, G, B) do {    \
-  const v16u8 zero = { 0 };                  \
-  v8u16 y0, y1, u0, u1, v0, v1;              \
-  v4u32 p0, p1, p2, p3;                      \
-  const v16u8 in_y = LD_UB(y);               \
-  const v16u8 in_u = LD_UB(u);               \
-  const v16u8 in_v = LD_UB(v);               \
-  ILVRL_UW4(in_y, p0, p1, p2, p3);           \
-  MULTHI_16(p0, p1, p2, p3, 19077, y0, y1);  \
-  ILVRL_UW4(in_v, p0, p1, p2, p3);           \
-  MULTHI_16(p0, p1, p2, p3, 26149, v0, v1);  \
-  CALC_R16(y0, y1, v0, v1, R);               \
-  MULTHI_16(p0, p1, p2, p3, 13320, v0, v1);  \
-  ILVRL_UW4(in_u, p0, p1, p2, p3);           \
-  MULTHI_16(p0, p1, p2, p3, 6419, u0, u1);   \
-  CALC_G16(y0, y1, u0, u1, v0, v1, G);       \
-  MULTHI_16(p0, p1, p2, p3, 33050, u0, u1);  \
-  CALC_B16(y0, y1, u0, u1, B);               \
-} while (0)
-
-#define CALC_RGB8(y, u, v, R, G, B) do {  \
-  const v16u8 zero = { 0 };               \
-  v8u16 y0, u0, v0;                       \
-  v4u32 p0, p1;                           \
-  const v16u8 in_y = LD_UB(y);            \
-  const v16u8 in_u = LD_UB(u);            \
-  const v16u8 in_v = LD_UB(v);            \
-  ILVR_UW2(in_y, p0, p1);                 \
-  MULTHI_8(p0, p1, 19077, y0);            \
-  ILVR_UW2(in_v, p0, p1);                 \
-  MULTHI_8(p0, p1, 26149, v0);            \
-  CALC_R8(y0, v0, R);                     \
-  MULTHI_8(p0, p1, 13320, v0);            \
-  ILVR_UW2(in_u, p0, p1);                 \
-  MULTHI_8(p0, p1, 6419, u0);             \
-  CALC_G8(y0, u0, v0, G);                 \
-  MULTHI_8(p0, p1, 33050, u0);            \
-  CALC_B8(y0, u0, B);                     \
-} while (0)
-
-#define STORE16_3(a0, a1, a2, dst) do {                          \
-  const v16u8 mask0 = { 0, 1, 16, 2, 3, 17, 4, 5, 18, 6, 7, 19,  \
-                        8, 9, 20, 10 };                          \
-  const v16u8 mask1 = { 0, 21, 1, 2, 22, 3, 4, 23, 5, 6, 24, 7,  \
-                        8, 25, 9, 10 };                          \
-  const v16u8 mask2 = { 26, 0, 1, 27, 2, 3, 28, 4, 5, 29, 6, 7,  \
-                        30, 8, 9, 31 };                          \
-  v16u8 out0, out1, out2, tmp0, tmp1, tmp2;                      \
-  ILVRL_B2_UB(a1, a0, tmp0, tmp1);                               \
-  out0 = VSHF_UB(tmp0, a2, mask0);                               \
-  tmp2 = SLDI_UB(tmp1, tmp0, 11);                                \
-  out1 = VSHF_UB(tmp2, a2, mask1);                               \
-  tmp2 = SLDI_UB(tmp1, tmp1, 6);                                 \
-  out2 = VSHF_UB(tmp2, a2, mask2);                               \
-  ST_UB(out0, dst +  0);                                         \
-  ST_UB(out1, dst + 16);                                         \
-  ST_UB(out2, dst + 32);                                         \
-} while (0)
-
-#define STORE8_3(a0, a1, a2, dst) do {                             \
-  int64_t out_m;                                                   \
-  const v16u8 mask0 = { 0, 1, 16, 2, 3, 17, 4, 5, 18, 6, 7, 19,    \
-                        8, 9, 20, 10 };                            \
-  const v16u8 mask1 = { 11, 21, 12, 13, 22, 14, 15, 23,            \
-                        255, 255, 255, 255, 255, 255, 255, 255 };  \
-  const v16u8 tmp0 = (v16u8)__msa_ilvr_b((v16i8)a1, (v16i8)a0);    \
-  v16u8 out0, out1;                                                \
-  VSHF_B2_UB(tmp0, a2, tmp0, a2, mask0, mask1, out0, out1);        \
-  ST_UB(out0, dst);                                                \
-  out_m = __msa_copy_s_d((v2i64)out1, 0);                          \
-  SD(out_m, dst + 16);                                             \
-} while (0)
-
-#define STORE16_4(a0, a1, a2, a3, dst) do {  \
-  v16u8 tmp0, tmp1, tmp2, tmp3;              \
-  v16u8 out0, out1, out2, out3;              \
-  ILVRL_B2_UB(a1, a0, tmp0, tmp1);           \
-  ILVRL_B2_UB(a3, a2, tmp2, tmp3);           \
-  ILVRL_H2_UB(tmp2, tmp0, out0, out1);       \
-  ILVRL_H2_UB(tmp3, tmp1, out2, out3);       \
-  ST_UB(out0, dst +  0);                     \
-  ST_UB(out1, dst + 16);                     \
-  ST_UB(out2, dst + 32);                     \
-  ST_UB(out3, dst + 48);                     \
-} while (0)
-
-#define STORE8_4(a0, a1, a2, a3, dst) do {  \
-  v16u8 tmp0, tmp1, tmp2, tmp3;             \
-  ILVR_B2_UB(a1, a0, a3, a2, tmp0, tmp1);   \
-  ILVRL_H2_UB(tmp1, tmp0, tmp2, tmp3);      \
-  ST_UB(tmp2, dst +  0);                    \
-  ST_UB(tmp3, dst + 16);                    \
-} while (0)
-
-#define STORE2_16(a0, a1, dst) do {  \
-  v16u8 out0, out1;                  \
-  ILVRL_B2_UB(a1, a0, out0, out1);   \
-  ST_UB(out0, dst +  0);             \
-  ST_UB(out1, dst + 16);             \
-} while (0)
-
-#define STORE2_8(a0, a1, dst) do {                               \
-  const v16u8 out0 = (v16u8)__msa_ilvr_b((v16i8)a1, (v16i8)a0);  \
-  ST_UB(out0, dst);                                              \
-} while (0)
-
-#define CALC_RGBA4444(y, u, v, out0, out1, N, dst) do {  \
-  CALC_RGB##N(y, u, v, R, G, B);                         \
-  tmp0 = ANDI_B(R, 0xf0);                                \
-  tmp1 = SRAI_B(G, 4);                                   \
-  RG = tmp0 | tmp1;                                      \
-  tmp0 = ANDI_B(B, 0xf0);                                \
-  BA = ORI_B(tmp0, 0x0f);                                \
-  STORE2_##N(out0, out1, dst);                           \
-} while (0)
-
-#define CALC_RGB565(y, u, v, out0, out1, N, dst) do {  \
-  CALC_RGB##N(y, u, v, R, G, B);                       \
-  tmp0 = ANDI_B(R, 0xf8);                              \
-  tmp1 = SRAI_B(G, 5);                                 \
-  RG = tmp0 | tmp1;                                    \
-  tmp0 = SLLI_B(G, 3);                                 \
-  tmp1 = ANDI_B(tmp0, 0xe0);                           \
-  tmp0 = SRAI_B(B, 3);                                 \
-  GB = tmp0 | tmp1;                                    \
-  STORE2_##N(out0, out1, dst);                         \
-} while (0)
-
-static WEBP_INLINE int Clip8(int v) {
-  return v < 0 ? 0 : v > 255 ? 255 : v;
-}
-
-static void YuvToRgb(int y, int u, int v, uint8_t* const rgb) {
-  const int y1 = MultHi(y, 19077);
-  const int r1 = y1 + MultHi(v, 26149) - 14234;
-  const int g1 = y1 - MultHi(u, 6419) - MultHi(v, 13320) + 8708;
-  const int b1 = y1 + MultHi(u, 33050) - 17685;
-  rgb[0] = Clip8(r1 >> 6);
-  rgb[1] = Clip8(g1 >> 6);
-  rgb[2] = Clip8(b1 >> 6);
-}
-
-static void YuvToBgr(int y, int u, int v, uint8_t* const bgr) {
-  const int y1 = MultHi(y, 19077);
-  const int r1 = y1 + MultHi(v, 26149) - 14234;
-  const int g1 = y1 - MultHi(u, 6419) - MultHi(v, 13320) + 8708;
-  const int b1 = y1 + MultHi(u, 33050) - 17685;
-  bgr[0] = Clip8(b1 >> 6);
-  bgr[1] = Clip8(g1 >> 6);
-  bgr[2] = Clip8(r1 >> 6);
-}
-
-#if !defined(WEBP_REDUCE_CSP)
-static void YuvToRgb565(int y, int u, int v, uint8_t* const rgb) {
-  const int y1 = MultHi(y, 19077);
-  const int r1 = y1 + MultHi(v, 26149) - 14234;
-  const int g1 = y1 - MultHi(u, 6419) - MultHi(v, 13320) + 8708;
-  const int b1 = y1 + MultHi(u, 33050) - 17685;
-  const int r = Clip8(r1 >> 6);
-  const int g = Clip8(g1 >> 6);
-  const int b = Clip8(b1 >> 6);
-  const int rg = (r & 0xf8) | (g >> 5);
-  const int gb = ((g << 3) & 0xe0) | (b >> 3);
-#if (WEBP_SWAP_16BIT_CSP == 1)
-  rgb[0] = gb;
-  rgb[1] = rg;
-#else
-  rgb[0] = rg;
-  rgb[1] = gb;
-#endif
-}
-
-static void YuvToRgba4444(int y, int u, int v, uint8_t* const argb) {
-  const int y1 = MultHi(y, 19077);
-  const int r1 = y1 + MultHi(v, 26149) - 14234;
-  const int g1 = y1 - MultHi(u, 6419) - MultHi(v, 13320) + 8708;
-  const int b1 = y1 + MultHi(u, 33050) - 17685;
-  const int r = Clip8(r1 >> 6);
-  const int g = Clip8(g1 >> 6);
-  const int b = Clip8(b1 >> 6);
-  const int rg = (r & 0xf0) | (g >> 4);
-  const int ba = (b & 0xf0) | 0x0f;     // overwrite the lower 4 bits
-#if (WEBP_SWAP_16BIT_CSP == 1)
-  argb[0] = ba;
-  argb[1] = rg;
-#else
-  argb[0] = rg;
-  argb[1] = ba;
-#endif
-}
-
-static void YuvToArgb(uint8_t y, uint8_t u, uint8_t v, uint8_t* const argb) {
-  argb[0] = 0xff;
-  YuvToRgb(y, u, v, argb + 1);
-}
-#endif  // WEBP_REDUCE_CSP
-
-static void YuvToBgra(uint8_t y, uint8_t u, uint8_t v, uint8_t* const bgra) {
-  YuvToBgr(y, u, v, bgra);
-  bgra[3] = 0xff;
-}
-
-static void YuvToRgba(uint8_t y, uint8_t u, uint8_t v, uint8_t* const rgba) {
-  YuvToRgb(y, u, v, rgba);
-  rgba[3] = 0xff;
-}
-
-#if !defined(WEBP_REDUCE_CSP)
-static void YuvToRgbLine(const uint8_t* y, const uint8_t* u,
-                         const uint8_t* v, uint8_t* dst, int length) {
-  v16u8 R, G, B;
-  while (length >= 16) {
-    CALC_RGB16(y, u, v, R, G, B);
-    STORE16_3(R, G, B, dst);
-    y      += 16;
-    u      += 16;
-    v      += 16;
-    dst    += 16 * 3;
-    length -= 16;
-  }
-  if (length > 8) {
-    uint8_t temp[3 * 16] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB16(temp, u, v, R, G, B);
-    STORE16_3(R, G, B, temp);
-    memcpy(dst, temp, length * 3 * sizeof(*dst));
-  } else if (length > 0) {
-    uint8_t temp[3 * 8] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB8(temp, u, v, R, G, B);
-    STORE8_3(R, G, B, temp);
-    memcpy(dst, temp, length * 3 * sizeof(*dst));
-  }
-}
-
-static void YuvToBgrLine(const uint8_t* y, const uint8_t* u,
-                         const uint8_t* v, uint8_t* dst, int length) {
-  v16u8 R, G, B;
-  while (length >= 16) {
-    CALC_RGB16(y, u, v, R, G, B);
-    STORE16_3(B, G, R, dst);
-    y      += 16;
-    u      += 16;
-    v      += 16;
-    dst    += 16 * 3;
-    length -= 16;
-  }
-  if (length > 8) {
-    uint8_t temp[3 * 16] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB16(temp, u, v, R, G, B);
-    STORE16_3(B, G, R, temp);
-    memcpy(dst, temp, length * 3 * sizeof(*dst));
-  } else if (length > 0) {
-    uint8_t temp[3 * 8] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB8(temp, u, v, R, G, B);
-    STORE8_3(B, G, R, temp);
-    memcpy(dst, temp, length * 3 * sizeof(*dst));
-  }
-}
-#endif  // WEBP_REDUCE_CSP
-
-static void YuvToRgbaLine(const uint8_t* y, const uint8_t* u,
-                          const uint8_t* v, uint8_t* dst, int length) {
-  v16u8 R, G, B;
-  const v16u8 A = (v16u8)__msa_ldi_b(ALPHAVAL);
-  while (length >= 16) {
-    CALC_RGB16(y, u, v, R, G, B);
-    STORE16_4(R, G, B, A, dst);
-    y      += 16;
-    u      += 16;
-    v      += 16;
-    dst    += 16 * 4;
-    length -= 16;
-  }
-  if (length > 8) {
-    uint8_t temp[4 * 16] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB16(&temp[0], u, v, R, G, B);
-    STORE16_4(R, G, B, A, temp);
-    memcpy(dst, temp, length * 4 * sizeof(*dst));
-  } else if (length > 0) {
-    uint8_t temp[4 * 8] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB8(temp, u, v, R, G, B);
-    STORE8_4(R, G, B, A, temp);
-    memcpy(dst, temp, length * 4 * sizeof(*dst));
-  }
-}
-
-static void YuvToBgraLine(const uint8_t* y, const uint8_t* u,
-                          const uint8_t* v, uint8_t* dst, int length) {
-  v16u8 R, G, B;
-  const v16u8 A = (v16u8)__msa_ldi_b(ALPHAVAL);
-  while (length >= 16) {
-    CALC_RGB16(y, u, v, R, G, B);
-    STORE16_4(B, G, R, A, dst);
-    y      += 16;
-    u      += 16;
-    v      += 16;
-    dst    += 16 * 4;
-    length -= 16;
-  }
-  if (length > 8) {
-    uint8_t temp[4 * 16] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB16(temp, u, v, R, G, B);
-    STORE16_4(B, G, R, A, temp);
-    memcpy(dst, temp, length * 4 * sizeof(*dst));
-  } else if (length > 0) {
-    uint8_t temp[4 * 8] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB8(temp, u, v, R, G, B);
-    STORE8_4(B, G, R, A, temp);
-    memcpy(dst, temp, length * 4 * sizeof(*dst));
-  }
-}
-
-#if !defined(WEBP_REDUCE_CSP)
-static void YuvToArgbLine(const uint8_t* y, const uint8_t* u,
-                          const uint8_t* v, uint8_t* dst, int length) {
-  v16u8 R, G, B;
-  const v16u8 A = (v16u8)__msa_ldi_b(ALPHAVAL);
-  while (length >= 16) {
-    CALC_RGB16(y, u, v, R, G, B);
-    STORE16_4(A, R, G, B, dst);
-    y      += 16;
-    u      += 16;
-    v      += 16;
-    dst    += 16 * 4;
-    length -= 16;
-  }
-  if (length > 8) {
-    uint8_t temp[4 * 16] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB16(temp, u, v, R, G, B);
-    STORE16_4(A, R, G, B, temp);
-    memcpy(dst, temp, length * 4 * sizeof(*dst));
-  } else if (length > 0) {
-    uint8_t temp[4 * 8] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-    CALC_RGB8(temp, u, v, R, G, B);
-    STORE8_4(A, R, G, B, temp);
-    memcpy(dst, temp, length * 4 * sizeof(*dst));
-  }
-}
-
-static void YuvToRgba4444Line(const uint8_t* y, const uint8_t* u,
-                              const uint8_t* v, uint8_t* dst, int length) {
-  v16u8 R, G, B, RG, BA, tmp0, tmp1;
-  while (length >= 16) {
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    CALC_RGBA4444(y, u, v, BA, RG, 16, dst);
-#else
-    CALC_RGBA4444(y, u, v, RG, BA, 16, dst);
-#endif
-    y      += 16;
-    u      += 16;
-    v      += 16;
-    dst    += 16 * 2;
-    length -= 16;
-  }
-  if (length > 8) {
-    uint8_t temp[2 * 16] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    CALC_RGBA4444(temp, u, v, BA, RG, 16, temp);
-#else
-    CALC_RGBA4444(temp, u, v, RG, BA, 16, temp);
-#endif
-    memcpy(dst, temp, length * 2 * sizeof(*dst));
-  } else if (length > 0) {
-    uint8_t temp[2 * 8] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    CALC_RGBA4444(temp, u, v, BA, RG, 8, temp);
-#else
-    CALC_RGBA4444(temp, u, v, RG, BA, 8, temp);
-#endif
-    memcpy(dst, temp, length * 2 * sizeof(*dst));
-  }
-}
-
-static void YuvToRgb565Line(const uint8_t* y, const uint8_t* u,
-                            const uint8_t* v, uint8_t* dst, int length) {
-  v16u8 R, G, B, RG, GB, tmp0, tmp1;
-  while (length >= 16) {
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    CALC_RGB565(y, u, v, GB, RG, 16, dst);
-#else
-    CALC_RGB565(y, u, v, RG, GB, 16, dst);
-#endif
-    y      += 16;
-    u      += 16;
-    v      += 16;
-    dst    += 16 * 2;
-    length -= 16;
-  }
-  if (length > 8) {
-    uint8_t temp[2 * 16] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    CALC_RGB565(temp, u, v, GB, RG, 16, temp);
-#else
-    CALC_RGB565(temp, u, v, RG, GB, 16, temp);
-#endif
-    memcpy(dst, temp, length * 2 * sizeof(*dst));
-  } else if (length > 0) {
-    uint8_t temp[2 * 8] = { 0 };
-    memcpy(temp, y, length * sizeof(*temp));
-#if (WEBP_SWAP_16BIT_CSP == 1)
-    CALC_RGB565(temp, u, v, GB, RG, 8, temp);
-#else
-    CALC_RGB565(temp, u, v, RG, GB, 8, temp);
-#endif
-    memcpy(dst, temp, length * 2 * sizeof(*dst));
-  }
-}
-#endif  // WEBP_REDUCE_CSP
-
-#define UPSAMPLE_32PIXELS(a, b, c, d) do {    \
-  v16u8 s = __msa_aver_u_b(a, d);             \
-  v16u8 t = __msa_aver_u_b(b, c);             \
-  const v16u8 st = s ^ t;                     \
-  v16u8 ad = a ^ d;                           \
-  v16u8 bc = b ^ c;                           \
-  v16u8 t0 = ad | bc;                         \
-  v16u8 t1 = t0 | st;                         \
-  v16u8 t2 = ANDI_B(t1, 1);                   \
-  v16u8 t3 = __msa_aver_u_b(s, t);            \
-  const v16u8 k = t3 - t2;                    \
-  v16u8 diag1, diag2;                         \
-  AVER_UB2_UB(t, k, s, k, t0, t1);            \
-  bc = bc & st;                               \
-  ad = ad & st;                               \
-  t = t ^ k;                                  \
-  s = s ^ k;                                  \
-  t2 = bc | t;                                \
-  t3 = ad | s;                                \
-  t2 = ANDI_B(t2, 1);                         \
-  t3 = ANDI_B(t3, 1);                         \
-  SUB2(t0, t2, t1, t3, diag1, diag2);         \
-  AVER_UB2_UB(a, diag1, b, diag2, t0, t1);    \
-  ILVRL_B2_UB(t1, t0, a, b);                  \
-  if (pbot_y != NULL) {                       \
-    AVER_UB2_UB(c, diag2, d, diag1, t0, t1);  \
-    ILVRL_B2_UB(t1, t0, c, d);                \
-  }                                           \
-} while (0)
-
-#define UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP)                            \
-static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bot_y,        \
-                      const uint8_t* top_u, const uint8_t* top_v,        \
-                      const uint8_t* cur_u, const uint8_t* cur_v,        \
-                      uint8_t* top_dst, uint8_t* bot_dst, int len)       \
-{                                                                        \
-  int size = (len - 1) >> 1;                                             \
-  uint8_t temp_u[64];                                                    \
-  uint8_t temp_v[64];                                                    \
-  const uint32_t tl_uv = ((top_u[0]) | ((top_v[0]) << 16));              \
-  const uint32_t l_uv = ((cur_u[0]) | ((cur_v[0]) << 16));               \
-  const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2;            \
-  const uint8_t* ptop_y = &top_y[1];                                     \
-  uint8_t *ptop_dst = top_dst + XSTEP;                                   \
-  const uint8_t* pbot_y = &bot_y[1];                                     \
-  uint8_t *pbot_dst = bot_dst + XSTEP;                                   \
-                                                                         \
-  FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst);                      \
-  if (bot_y != NULL) {                                                   \
-    const uint32_t uv1 = (3 * l_uv + tl_uv + 0x00020002u) >> 2;          \
-    FUNC(bot_y[0], uv1 & 0xff, (uv1 >> 16), bot_dst);                    \
-  }                                                                      \
-  while (size >= 16) {                                                   \
-    v16u8 tu0, tu1, tv0, tv1, cu0, cu1, cv0, cv1;                        \
-    LD_UB2(top_u, 1, tu0, tu1);                                          \
-    LD_UB2(cur_u, 1, cu0, cu1);                                          \
-    LD_UB2(top_v, 1, tv0, tv1);                                          \
-    LD_UB2(cur_v, 1, cv0, cv1);                                          \
-    UPSAMPLE_32PIXELS(tu0, tu1, cu0, cu1);                               \
-    UPSAMPLE_32PIXELS(tv0, tv1, cv0, cv1);                               \
-    ST_UB4(tu0, tu1, cu0, cu1, &temp_u[0], 16);                          \
-    ST_UB4(tv0, tv1, cv0, cv1, &temp_v[0], 16);                          \
-    FUNC##Line(ptop_y, &temp_u[ 0], &temp_v[0], ptop_dst, 32);           \
-    if (bot_y != NULL) {                                                 \
-      FUNC##Line(pbot_y, &temp_u[32], &temp_v[32], pbot_dst, 32);        \
-    }                                                                    \
-    ptop_y   += 32;                                                      \
-    pbot_y   += 32;                                                      \
-    ptop_dst += XSTEP * 32;                                              \
-    pbot_dst += XSTEP * 32;                                              \
-    top_u    += 16;                                                      \
-    top_v    += 16;                                                      \
-    cur_u    += 16;                                                      \
-    cur_v    += 16;                                                      \
-    size     -= 16;                                                      \
-  }                                                                      \
-  if (size > 0) {                                                        \
-    v16u8 tu0, tu1, tv0, tv1, cu0, cu1, cv0, cv1;                        \
-    memcpy(&temp_u[ 0], top_u, 17 * sizeof(uint8_t));                    \
-    memcpy(&temp_u[32], cur_u, 17 * sizeof(uint8_t));                    \
-    memcpy(&temp_v[ 0], top_v, 17 * sizeof(uint8_t));                    \
-    memcpy(&temp_v[32], cur_v, 17 * sizeof(uint8_t));                    \
-    LD_UB2(&temp_u[ 0], 1, tu0, tu1);                                    \
-    LD_UB2(&temp_u[32], 1, cu0, cu1);                                    \
-    LD_UB2(&temp_v[ 0], 1, tv0, tv1);                                    \
-    LD_UB2(&temp_v[32], 1, cv0, cv1);                                    \
-    UPSAMPLE_32PIXELS(tu0, tu1, cu0, cu1);                               \
-    UPSAMPLE_32PIXELS(tv0, tv1, cv0, cv1);                               \
-    ST_UB4(tu0, tu1, cu0, cu1, &temp_u[0], 16);                          \
-    ST_UB4(tv0, tv1, cv0, cv1, &temp_v[0], 16);                          \
-    FUNC##Line(ptop_y, &temp_u[ 0], &temp_v[0], ptop_dst, size * 2);     \
-    if (bot_y != NULL) {                                                 \
-      FUNC##Line(pbot_y, &temp_u[32], &temp_v[32], pbot_dst, size * 2);  \
-    }                                                                    \
-    top_u += size;                                                       \
-    top_v += size;                                                       \
-    cur_u += size;                                                       \
-    cur_v += size;                                                       \
-  }                                                                      \
-  if (!(len & 1)) {                                                      \
-    const uint32_t t0 = ((top_u[0]) | ((top_v[0]) << 16));               \
-    const uint32_t c0  = ((cur_u[0]) | ((cur_v[0]) << 16));              \
-    const uint32_t tmp0 = (3 * t0 + c0 + 0x00020002u) >> 2;              \
-    FUNC(top_y[len - 1], tmp0 & 0xff, (tmp0 >> 16),                      \
-                top_dst + (len - 1) * XSTEP);                            \
-    if (bot_y != NULL) {                                                 \
-      const uint32_t tmp1 = (3 * c0 + t0 + 0x00020002u) >> 2;            \
-      FUNC(bot_y[len - 1], tmp1 & 0xff, (tmp1 >> 16),                    \
-           bot_dst + (len - 1) * XSTEP);                                 \
-    }                                                                    \
-  }                                                                      \
-}
-
-UPSAMPLE_FUNC(UpsampleRgbaLinePair,     YuvToRgba,     4)
-UPSAMPLE_FUNC(UpsampleBgraLinePair,     YuvToBgra,     4)
-#if !defined(WEBP_REDUCE_CSP)
-UPSAMPLE_FUNC(UpsampleRgbLinePair,      YuvToRgb,      3)
-UPSAMPLE_FUNC(UpsampleBgrLinePair,      YuvToBgr,      3)
-UPSAMPLE_FUNC(UpsampleArgbLinePair,     YuvToArgb,     4)
-UPSAMPLE_FUNC(UpsampleRgba4444LinePair, YuvToRgba4444, 2)
-UPSAMPLE_FUNC(UpsampleRgb565LinePair,   YuvToRgb565,   2)
-#endif   // WEBP_REDUCE_CSP
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */];
-
-extern void WebPInitUpsamplersMSA(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersMSA(void) {
-  WebPUpsamplers[MODE_RGBA]      = UpsampleRgbaLinePair;
-  WebPUpsamplers[MODE_BGRA]      = UpsampleBgraLinePair;
-  WebPUpsamplers[MODE_rgbA]      = UpsampleRgbaLinePair;
-  WebPUpsamplers[MODE_bgrA]      = UpsampleBgraLinePair;
-#if !defined(WEBP_REDUCE_CSP)
-  WebPUpsamplers[MODE_RGB]       = UpsampleRgbLinePair;
-  WebPUpsamplers[MODE_BGR]       = UpsampleBgrLinePair;
-  WebPUpsamplers[MODE_ARGB]      = UpsampleArgbLinePair;
-  WebPUpsamplers[MODE_Argb]      = UpsampleArgbLinePair;
-  WebPUpsamplers[MODE_RGB_565]   = UpsampleRgb565LinePair;
-  WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair;
-  WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair;
-#endif   // WEBP_REDUCE_CSP
-}
-
-#endif  // FANCY_UPSAMPLING
-
-#endif  // WEBP_USE_MSA
-
-#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_MSA))
-WEBP_DSP_INIT_STUB(WebPInitUpsamplersMSA)
-#endif
diff --git a/ios/Pods/libwebp/src/dsp/upsampling_neon.c b/ios/Pods/libwebp/src/dsp/upsampling_neon.c
deleted file mode 100644
index 17cbc9f..0000000
--- a/ios/Pods/libwebp/src/dsp/upsampling_neon.c
+++ /dev/null
@@ -1,285 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// NEON version of YUV to RGB upsampling functions.
-//
-// Author: mans@mansr.com (Mans Rullgard)
-// Based on SSE code by: somnath@google.com (Somnath Banerjee)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include <assert.h>
-#include <arm_neon.h>
-#include <string.h>
-#include "src/dsp/neon.h"
-#include "src/dsp/yuv.h"
-
-#ifdef FANCY_UPSAMPLING
-
-//-----------------------------------------------------------------------------
-// U/V upsampling
-
-// Loads 9 pixels each from rows r1 and r2 and generates 16 pixels.
-#define UPSAMPLE_16PIXELS(r1, r2, out) do {                             \
-  const uint8x8_t a = vld1_u8(r1 + 0);                                  \
-  const uint8x8_t b = vld1_u8(r1 + 1);                                  \
-  const uint8x8_t c = vld1_u8(r2 + 0);                                  \
-  const uint8x8_t d = vld1_u8(r2 + 1);                                  \
-  /* a + b + c + d */                                                   \
-  const uint16x8_t ad = vaddl_u8(a,  d);                                \
-  const uint16x8_t bc = vaddl_u8(b,  c);                                \
-  const uint16x8_t abcd = vaddq_u16(ad, bc);                            \
-  /* 3a +  b +  c + 3d */                                               \
-  const uint16x8_t al = vaddq_u16(abcd, vshlq_n_u16(ad, 1));            \
-  /*  a + 3b + 3c +  d */                                               \
-  const uint16x8_t bl = vaddq_u16(abcd, vshlq_n_u16(bc, 1));            \
-                                                                        \
-  const uint8x8_t diag2 = vshrn_n_u16(al, 3);                           \
-  const uint8x8_t diag1 = vshrn_n_u16(bl, 3);                           \
-                                                                        \
-  const uint8x8_t A = vrhadd_u8(a, diag1);                              \
-  const uint8x8_t B = vrhadd_u8(b, diag2);                              \
-  const uint8x8_t C = vrhadd_u8(c, diag2);                              \
-  const uint8x8_t D = vrhadd_u8(d, diag1);                              \
-                                                                        \
-  uint8x8x2_t A_B, C_D;                                                 \
-  INIT_VECTOR2(A_B, A, B);                                              \
-  INIT_VECTOR2(C_D, C, D);                                              \
-  vst2_u8(out +  0, A_B);                                               \
-  vst2_u8(out + 32, C_D);                                               \
-} while (0)
-
-// Turn the macro into a function for reducing code-size when non-critical
-static void Upsample16Pixels_NEON(const uint8_t *r1, const uint8_t *r2,
-                                  uint8_t *out) {
-  UPSAMPLE_16PIXELS(r1, r2, out);
-}
-
-#define UPSAMPLE_LAST_BLOCK(tb, bb, num_pixels, out) {                  \
-  uint8_t r1[9], r2[9];                                                 \
-  memcpy(r1, (tb), (num_pixels));                                       \
-  memcpy(r2, (bb), (num_pixels));                                       \
-  /* replicate last byte */                                             \
-  memset(r1 + (num_pixels), r1[(num_pixels) - 1], 9 - (num_pixels));    \
-  memset(r2 + (num_pixels), r2[(num_pixels) - 1], 9 - (num_pixels));    \
-  Upsample16Pixels_NEON(r1, r2, out);                                   \
-}
-
-//-----------------------------------------------------------------------------
-// YUV->RGB conversion
-
-// note: we represent the 33050 large constant as 32768 + 282
-static const int16_t kCoeffs1[4] = { 19077, 26149, 6419, 13320 };
-
-#define v255 vdup_n_u8(255)
-
-#define STORE_Rgb(out, r, g, b) do {                                    \
-  uint8x8x3_t r_g_b;                                                    \
-  INIT_VECTOR3(r_g_b, r, g, b);                                         \
-  vst3_u8(out, r_g_b);                                                  \
-} while (0)
-
-#define STORE_Bgr(out, r, g, b) do {                                    \
-  uint8x8x3_t b_g_r;                                                    \
-  INIT_VECTOR3(b_g_r, b, g, r);                                         \
-  vst3_u8(out, b_g_r);                                                  \
-} while (0)
-
-#define STORE_Rgba(out, r, g, b) do {                                   \
-  uint8x8x4_t r_g_b_v255;                                               \
-  INIT_VECTOR4(r_g_b_v255, r, g, b, v255);                              \
-  vst4_u8(out, r_g_b_v255);                                             \
-} while (0)
-
-#define STORE_Bgra(out, r, g, b) do {                                   \
-  uint8x8x4_t b_g_r_v255;                                               \
-  INIT_VECTOR4(b_g_r_v255, b, g, r, v255);                              \
-  vst4_u8(out, b_g_r_v255);                                             \
-} while (0)
-
-#define STORE_Argb(out, r, g, b) do {                                   \
-  uint8x8x4_t v255_r_g_b;                                               \
-  INIT_VECTOR4(v255_r_g_b, v255, r, g, b);                              \
-  vst4_u8(out, v255_r_g_b);                                             \
-} while (0)
-
-#if !defined(WEBP_SWAP_16BIT_CSP)
-#define ZIP_U8(lo, hi) vzip_u8((lo), (hi))
-#else
-#define ZIP_U8(lo, hi) vzip_u8((hi), (lo))
-#endif
-
-#define STORE_Rgba4444(out, r, g, b) do {                               \
-  const uint8x8_t rg = vsri_n_u8(r, g, 4);      /* shift g, insert r */ \
-  const uint8x8_t ba = vsri_n_u8(b, v255, 4);   /* shift a, insert b */ \
-  const uint8x8x2_t rgba4444 = ZIP_U8(rg, ba);                          \
-  vst1q_u8(out, vcombine_u8(rgba4444.val[0], rgba4444.val[1]));         \
-} while (0)
-
-#define STORE_Rgb565(out, r, g, b) do {                                 \
-  const uint8x8_t rg = vsri_n_u8(r, g, 5);   /* shift g and insert r */ \
-  const uint8x8_t g1 = vshl_n_u8(g, 3);      /* pre-shift g: 3bits */   \
-  const uint8x8_t gb = vsri_n_u8(g1, b, 3);  /* shift b and insert g */ \
-  const uint8x8x2_t rgb565 = ZIP_U8(rg, gb);                            \
-  vst1q_u8(out, vcombine_u8(rgb565.val[0], rgb565.val[1]));             \
-} while (0)
-
-#define CONVERT8(FMT, XSTEP, N, src_y, src_uv, out, cur_x) do {         \
-  int i;                                                                \
-  for (i = 0; i < N; i += 8) {                                          \
-    const int off = ((cur_x) + i) * XSTEP;                              \
-    const uint8x8_t y  = vld1_u8((src_y) + (cur_x)  + i);               \
-    const uint8x8_t u  = vld1_u8((src_uv) + i +  0);                    \
-    const uint8x8_t v  = vld1_u8((src_uv) + i + 16);                    \
-    const int16x8_t Y0 = vreinterpretq_s16_u16(vshll_n_u8(y, 7));       \
-    const int16x8_t U0 = vreinterpretq_s16_u16(vshll_n_u8(u, 7));       \
-    const int16x8_t V0 = vreinterpretq_s16_u16(vshll_n_u8(v, 7));       \
-    const int16x8_t Y1 = vqdmulhq_lane_s16(Y0, coeff1, 0);              \
-    const int16x8_t R0 = vqdmulhq_lane_s16(V0, coeff1, 1);              \
-    const int16x8_t G0 = vqdmulhq_lane_s16(U0, coeff1, 2);              \
-    const int16x8_t G1 = vqdmulhq_lane_s16(V0, coeff1, 3);              \
-    const int16x8_t B0 = vqdmulhq_n_s16(U0, 282);                       \
-    const int16x8_t R1 = vqaddq_s16(Y1, R_Rounder);                     \
-    const int16x8_t G2 = vqaddq_s16(Y1, G_Rounder);                     \
-    const int16x8_t B1 = vqaddq_s16(Y1, B_Rounder);                     \
-    const int16x8_t R2 = vqaddq_s16(R0, R1);                            \
-    const int16x8_t G3 = vqaddq_s16(G0, G1);                            \
-    const int16x8_t B2 = vqaddq_s16(B0, B1);                            \
-    const int16x8_t G4 = vqsubq_s16(G2, G3);                            \
-    const int16x8_t B3 = vqaddq_s16(B2, U0);                            \
-    const uint8x8_t R = vqshrun_n_s16(R2, YUV_FIX2);                    \
-    const uint8x8_t G = vqshrun_n_s16(G4, YUV_FIX2);                    \
-    const uint8x8_t B = vqshrun_n_s16(B3, YUV_FIX2);                    \
-    STORE_ ## FMT(out + off, R, G, B);                                  \
-  }                                                                     \
-} while (0)
-
-#define CONVERT1(FUNC, XSTEP, N, src_y, src_uv, rgb, cur_x) {           \
-  int i;                                                                \
-  for (i = 0; i < N; i++) {                                             \
-    const int off = ((cur_x) + i) * XSTEP;                              \
-    const int y = src_y[(cur_x) + i];                                   \
-    const int u = (src_uv)[i];                                          \
-    const int v = (src_uv)[i + 16];                                     \
-    FUNC(y, u, v, rgb + off);                                           \
-  }                                                                     \
-}
-
-#define CONVERT2RGB_8(FMT, XSTEP, top_y, bottom_y, uv,                  \
-                      top_dst, bottom_dst, cur_x, len) {                \
-  CONVERT8(FMT, XSTEP, len, top_y, uv, top_dst, cur_x);                 \
-  if (bottom_y != NULL) {                                               \
-    CONVERT8(FMT, XSTEP, len, bottom_y, (uv) + 32, bottom_dst, cur_x);  \
-  }                                                                     \
-}
-
-#define CONVERT2RGB_1(FUNC, XSTEP, top_y, bottom_y, uv,                 \
-                      top_dst, bottom_dst, cur_x, len) {                \
-  CONVERT1(FUNC, XSTEP, len, top_y, uv, top_dst, cur_x);                \
-  if (bottom_y != NULL) {                                               \
-    CONVERT1(FUNC, XSTEP, len, bottom_y, (uv) + 32, bottom_dst, cur_x); \
-  }                                                                     \
-}
-
-#define NEON_UPSAMPLE_FUNC(FUNC_NAME, FMT, XSTEP)                       \
-static void FUNC_NAME(const uint8_t *top_y, const uint8_t *bottom_y,    \
-                      const uint8_t *top_u, const uint8_t *top_v,       \
-                      const uint8_t *cur_u, const uint8_t *cur_v,       \
-                      uint8_t *top_dst, uint8_t *bottom_dst, int len) { \
-  int block;                                                            \
-  /* 16 byte aligned array to cache reconstructed u and v */            \
-  uint8_t uv_buf[2 * 32 + 15];                                          \
-  uint8_t *const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15);     \
-  const int uv_len = (len + 1) >> 1;                                    \
-  /* 9 pixels must be read-able for each block */                       \
-  const int num_blocks = (uv_len - 1) >> 3;                             \
-  const int leftover = uv_len - num_blocks * 8;                         \
-  const int last_pos = 1 + 16 * num_blocks;                             \
-                                                                        \
-  const int u_diag = ((top_u[0] + cur_u[0]) >> 1) + 1;                  \
-  const int v_diag = ((top_v[0] + cur_v[0]) >> 1) + 1;                  \
-                                                                        \
-  const int16x4_t coeff1 = vld1_s16(kCoeffs1);                          \
-  const int16x8_t R_Rounder = vdupq_n_s16(-14234);                      \
-  const int16x8_t G_Rounder = vdupq_n_s16(8708);                        \
-  const int16x8_t B_Rounder = vdupq_n_s16(-17685);                      \
-                                                                        \
-  /* Treat the first pixel in regular way */                            \
-  assert(top_y != NULL);                                                \
-  {                                                                     \
-    const int u0 = (top_u[0] + u_diag) >> 1;                            \
-    const int v0 = (top_v[0] + v_diag) >> 1;                            \
-    VP8YuvTo ## FMT(top_y[0], u0, v0, top_dst);                         \
-  }                                                                     \
-  if (bottom_y != NULL) {                                               \
-    const int u0 = (cur_u[0] + u_diag) >> 1;                            \
-    const int v0 = (cur_v[0] + v_diag) >> 1;                            \
-    VP8YuvTo ## FMT(bottom_y[0], u0, v0, bottom_dst);                   \
-  }                                                                     \
-                                                                        \
-  for (block = 0; block < num_blocks; ++block) {                        \
-    UPSAMPLE_16PIXELS(top_u, cur_u, r_uv);                              \
-    UPSAMPLE_16PIXELS(top_v, cur_v, r_uv + 16);                         \
-    CONVERT2RGB_8(FMT, XSTEP, top_y, bottom_y, r_uv,                    \
-                  top_dst, bottom_dst, 16 * block + 1, 16);             \
-    top_u += 8;                                                         \
-    cur_u += 8;                                                         \
-    top_v += 8;                                                         \
-    cur_v += 8;                                                         \
-  }                                                                     \
-                                                                        \
-  UPSAMPLE_LAST_BLOCK(top_u, cur_u, leftover, r_uv);                    \
-  UPSAMPLE_LAST_BLOCK(top_v, cur_v, leftover, r_uv + 16);               \
-  CONVERT2RGB_1(VP8YuvTo ## FMT, XSTEP, top_y, bottom_y, r_uv,          \
-                top_dst, bottom_dst, last_pos, len - last_pos);         \
-}
-
-// NEON variants of the fancy upsampler.
-NEON_UPSAMPLE_FUNC(UpsampleRgbaLinePair_NEON, Rgba, 4)
-NEON_UPSAMPLE_FUNC(UpsampleBgraLinePair_NEON, Bgra, 4)
-#if !defined(WEBP_REDUCE_CSP)
-NEON_UPSAMPLE_FUNC(UpsampleRgbLinePair_NEON,  Rgb,  3)
-NEON_UPSAMPLE_FUNC(UpsampleBgrLinePair_NEON,  Bgr,  3)
-NEON_UPSAMPLE_FUNC(UpsampleArgbLinePair_NEON, Argb, 4)
-NEON_UPSAMPLE_FUNC(UpsampleRgba4444LinePair_NEON, Rgba4444, 2)
-NEON_UPSAMPLE_FUNC(UpsampleRgb565LinePair_NEON, Rgb565, 2)
-#endif   // WEBP_REDUCE_CSP
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */];
-
-extern void WebPInitUpsamplersNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersNEON(void) {
-  WebPUpsamplers[MODE_RGBA] = UpsampleRgbaLinePair_NEON;
-  WebPUpsamplers[MODE_BGRA] = UpsampleBgraLinePair_NEON;
-  WebPUpsamplers[MODE_rgbA] = UpsampleRgbaLinePair_NEON;
-  WebPUpsamplers[MODE_bgrA] = UpsampleBgraLinePair_NEON;
-#if !defined(WEBP_REDUCE_CSP)
-  WebPUpsamplers[MODE_RGB]  = UpsampleRgbLinePair_NEON;
-  WebPUpsamplers[MODE_BGR]  = UpsampleBgrLinePair_NEON;
-  WebPUpsamplers[MODE_ARGB] = UpsampleArgbLinePair_NEON;
-  WebPUpsamplers[MODE_Argb] = UpsampleArgbLinePair_NEON;
-  WebPUpsamplers[MODE_RGB_565] = UpsampleRgb565LinePair_NEON;
-  WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair_NEON;
-  WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair_NEON;
-#endif   // WEBP_REDUCE_CSP
-}
-
-#endif  // FANCY_UPSAMPLING
-
-#endif  // WEBP_USE_NEON
-
-#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_NEON))
-WEBP_DSP_INIT_STUB(WebPInitUpsamplersNEON)
-#endif
diff --git a/ios/Pods/libwebp/src/dsp/upsampling_sse2.c b/ios/Pods/libwebp/src/dsp/upsampling_sse2.c
deleted file mode 100644
index 340f1e2..0000000
--- a/ios/Pods/libwebp/src/dsp/upsampling_sse2.c
+++ /dev/null
@@ -1,267 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE2 version of YUV to RGB upsampling functions.
-//
-// Author: somnath@google.com (Somnath Banerjee)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE2)
-
-#include <assert.h>
-#include <emmintrin.h>
-#include <string.h>
-#include "src/dsp/yuv.h"
-
-#ifdef FANCY_UPSAMPLING
-
-// We compute (9*a + 3*b + 3*c + d + 8) / 16 as follows
-// u = (9*a + 3*b + 3*c + d + 8) / 16
-//   = (a + (a + 3*b + 3*c + d) / 8 + 1) / 2
-//   = (a + m + 1) / 2
-// where m = (a + 3*b + 3*c + d) / 8
-//         = ((a + b + c + d) / 2 + b + c) / 4
-//
-// Let's say  k = (a + b + c + d) / 4.
-// We can compute k as
-// k = (s + t + 1) / 2 - ((a^d) | (b^c) | (s^t)) & 1
-// where s = (a + d + 1) / 2 and t = (b + c + 1) / 2
-//
-// Then m can be written as
-// m = (k + t + 1) / 2 - (((b^c) & (s^t)) | (k^t)) & 1
-
-// Computes out = (k + in + 1) / 2 - ((ij & (s^t)) | (k^in)) & 1
-#define GET_M(ij, in, out) do {                                                \
-  const __m128i tmp0 = _mm_avg_epu8(k, (in));     /* (k + in + 1) / 2 */       \
-  const __m128i tmp1 = _mm_and_si128((ij), st);   /* (ij) & (s^t) */           \
-  const __m128i tmp2 = _mm_xor_si128(k, (in));    /* (k^in) */                 \
-  const __m128i tmp3 = _mm_or_si128(tmp1, tmp2);  /* ((ij) & (s^t)) | (k^in) */\
-  const __m128i tmp4 = _mm_and_si128(tmp3, one);  /* & 1 -> lsb_correction */  \
-  (out) = _mm_sub_epi8(tmp0, tmp4);    /* (k + in + 1) / 2 - lsb_correction */ \
-} while (0)
-
-// pack and store two alternating pixel rows
-#define PACK_AND_STORE(a, b, da, db, out) do {                                 \
-  const __m128i t_a = _mm_avg_epu8(a, da);  /* (9a + 3b + 3c +  d + 8) / 16 */ \
-  const __m128i t_b = _mm_avg_epu8(b, db);  /* (3a + 9b +  c + 3d + 8) / 16 */ \
-  const __m128i t_1 = _mm_unpacklo_epi8(t_a, t_b);                             \
-  const __m128i t_2 = _mm_unpackhi_epi8(t_a, t_b);                             \
-  _mm_store_si128(((__m128i*)(out)) + 0, t_1);                                 \
-  _mm_store_si128(((__m128i*)(out)) + 1, t_2);                                 \
-} while (0)
-
-// Loads 17 pixels each from rows r1 and r2 and generates 32 pixels.
-#define UPSAMPLE_32PIXELS(r1, r2, out) {                                       \
-  const __m128i one = _mm_set1_epi8(1);                                        \
-  const __m128i a = _mm_loadu_si128((const __m128i*)&(r1)[0]);                 \
-  const __m128i b = _mm_loadu_si128((const __m128i*)&(r1)[1]);                 \
-  const __m128i c = _mm_loadu_si128((const __m128i*)&(r2)[0]);                 \
-  const __m128i d = _mm_loadu_si128((const __m128i*)&(r2)[1]);                 \
-                                                                               \
-  const __m128i s = _mm_avg_epu8(a, d);        /* s = (a + d + 1) / 2 */       \
-  const __m128i t = _mm_avg_epu8(b, c);        /* t = (b + c + 1) / 2 */       \
-  const __m128i st = _mm_xor_si128(s, t);      /* st = s^t */                  \
-                                                                               \
-  const __m128i ad = _mm_xor_si128(a, d);      /* ad = a^d */                  \
-  const __m128i bc = _mm_xor_si128(b, c);      /* bc = b^c */                  \
-                                                                               \
-  const __m128i t1 = _mm_or_si128(ad, bc);     /* (a^d) | (b^c) */             \
-  const __m128i t2 = _mm_or_si128(t1, st);     /* (a^d) | (b^c) | (s^t) */     \
-  const __m128i t3 = _mm_and_si128(t2, one);   /* (a^d) | (b^c) | (s^t) & 1 */ \
-  const __m128i t4 = _mm_avg_epu8(s, t);                                       \
-  const __m128i k = _mm_sub_epi8(t4, t3);      /* k = (a + b + c + d) / 4 */   \
-  __m128i diag1, diag2;                                                        \
-                                                                               \
-  GET_M(bc, t, diag1);                  /* diag1 = (a + 3b + 3c + d) / 8 */    \
-  GET_M(ad, s, diag2);                  /* diag2 = (3a + b + c + 3d) / 8 */    \
-                                                                               \
-  /* pack the alternate pixels */                                              \
-  PACK_AND_STORE(a, b, diag1, diag2, (out) +      0);  /* store top */         \
-  PACK_AND_STORE(c, d, diag2, diag1, (out) + 2 * 32);  /* store bottom */      \
-}
-
-// Turn the macro into a function for reducing code-size when non-critical
-static void Upsample32Pixels_SSE2(const uint8_t r1[], const uint8_t r2[],
-                                  uint8_t* const out) {
-  UPSAMPLE_32PIXELS(r1, r2, out);
-}
-
-#define UPSAMPLE_LAST_BLOCK(tb, bb, num_pixels, out) {                         \
-  uint8_t r1[17], r2[17];                                                      \
-  memcpy(r1, (tb), (num_pixels));                                              \
-  memcpy(r2, (bb), (num_pixels));                                              \
-  /* replicate last byte */                                                    \
-  memset(r1 + (num_pixels), r1[(num_pixels) - 1], 17 - (num_pixels));          \
-  memset(r2 + (num_pixels), r2[(num_pixels) - 1], 17 - (num_pixels));          \
-  /* using the shared function instead of the macro saves ~3k code size */     \
-  Upsample32Pixels_SSE2(r1, r2, out);                                          \
-}
-
-#define CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y,                           \
-                       top_dst, bottom_dst, cur_x) do {                        \
-  FUNC##32_SSE2((top_y) + (cur_x), r_u, r_v, (top_dst) + (cur_x) * (XSTEP));   \
-  if ((bottom_y) != NULL) {                                                    \
-    FUNC##32_SSE2((bottom_y) + (cur_x), r_u + 64, r_v + 64,                    \
-                  (bottom_dst) + (cur_x) * (XSTEP));                           \
-  }                                                                            \
-} while (0)
-
-#define SSE2_UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP)                             \
-static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y,           \
-                      const uint8_t* top_u, const uint8_t* top_v,              \
-                      const uint8_t* cur_u, const uint8_t* cur_v,              \
-                      uint8_t* top_dst, uint8_t* bottom_dst, int len) {        \
-  int uv_pos, pos;                                                             \
-  /* 16byte-aligned array to cache reconstructed u and v */                    \
-  uint8_t uv_buf[14 * 32 + 15] = { 0 };                                        \
-  uint8_t* const r_u = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15);             \
-  uint8_t* const r_v = r_u + 32;                                               \
-                                                                               \
-  assert(top_y != NULL);                                                       \
-  {   /* Treat the first pixel in regular way */                               \
-    const int u_diag = ((top_u[0] + cur_u[0]) >> 1) + 1;                       \
-    const int v_diag = ((top_v[0] + cur_v[0]) >> 1) + 1;                       \
-    const int u0_t = (top_u[0] + u_diag) >> 1;                                 \
-    const int v0_t = (top_v[0] + v_diag) >> 1;                                 \
-    FUNC(top_y[0], u0_t, v0_t, top_dst);                                       \
-    if (bottom_y != NULL) {                                                    \
-      const int u0_b = (cur_u[0] + u_diag) >> 1;                               \
-      const int v0_b = (cur_v[0] + v_diag) >> 1;                               \
-      FUNC(bottom_y[0], u0_b, v0_b, bottom_dst);                               \
-    }                                                                          \
-  }                                                                            \
-  /* For UPSAMPLE_32PIXELS, 17 u/v values must be read-able for each block */  \
-  for (pos = 1, uv_pos = 0; pos + 32 + 1 <= len; pos += 32, uv_pos += 16) {    \
-    UPSAMPLE_32PIXELS(top_u + uv_pos, cur_u + uv_pos, r_u);                    \
-    UPSAMPLE_32PIXELS(top_v + uv_pos, cur_v + uv_pos, r_v);                    \
-    CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y, top_dst, bottom_dst, pos);    \
-  }                                                                            \
-  if (len > 1) {                                                               \
-    const int left_over = ((len + 1) >> 1) - (pos >> 1);                       \
-    uint8_t* const tmp_top_dst = r_u + 4 * 32;                                 \
-    uint8_t* const tmp_bottom_dst = tmp_top_dst + 4 * 32;                      \
-    uint8_t* const tmp_top = tmp_bottom_dst + 4 * 32;                          \
-    uint8_t* const tmp_bottom = (bottom_y == NULL) ? NULL : tmp_top + 32;      \
-    assert(left_over > 0);                                                     \
-    UPSAMPLE_LAST_BLOCK(top_u + uv_pos, cur_u + uv_pos, left_over, r_u);       \
-    UPSAMPLE_LAST_BLOCK(top_v + uv_pos, cur_v + uv_pos, left_over, r_v);       \
-    memcpy(tmp_top, top_y + pos, len - pos);                                   \
-    if (bottom_y != NULL) memcpy(tmp_bottom, bottom_y + pos, len - pos);       \
-    CONVERT2RGB_32(FUNC, XSTEP, tmp_top, tmp_bottom, tmp_top_dst,              \
-         tmp_bottom_dst, 0);                                                   \
-    memcpy(top_dst + pos * (XSTEP), tmp_top_dst, (len - pos) * (XSTEP));       \
-    if (bottom_y != NULL) {                                                    \
-      memcpy(bottom_dst + pos * (XSTEP), tmp_bottom_dst,                       \
-             (len - pos) * (XSTEP));                                           \
-    }                                                                          \
-  }                                                                            \
-}
-
-// SSE2 variants of the fancy upsampler.
-SSE2_UPSAMPLE_FUNC(UpsampleRgbaLinePair_SSE2, VP8YuvToRgba, 4)
-SSE2_UPSAMPLE_FUNC(UpsampleBgraLinePair_SSE2, VP8YuvToBgra, 4)
-
-#if !defined(WEBP_REDUCE_CSP)
-SSE2_UPSAMPLE_FUNC(UpsampleRgbLinePair_SSE2,  VP8YuvToRgb,  3)
-SSE2_UPSAMPLE_FUNC(UpsampleBgrLinePair_SSE2,  VP8YuvToBgr,  3)
-SSE2_UPSAMPLE_FUNC(UpsampleArgbLinePair_SSE2, VP8YuvToArgb, 4)
-SSE2_UPSAMPLE_FUNC(UpsampleRgba4444LinePair_SSE2, VP8YuvToRgba4444, 2)
-SSE2_UPSAMPLE_FUNC(UpsampleRgb565LinePair_SSE2, VP8YuvToRgb565, 2)
-#endif   // WEBP_REDUCE_CSP
-
-#undef GET_M
-#undef PACK_AND_STORE
-#undef UPSAMPLE_32PIXELS
-#undef UPSAMPLE_LAST_BLOCK
-#undef CONVERT2RGB
-#undef CONVERT2RGB_32
-#undef SSE2_UPSAMPLE_FUNC
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */];
-
-extern void WebPInitUpsamplersSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersSSE2(void) {
-  WebPUpsamplers[MODE_RGBA] = UpsampleRgbaLinePair_SSE2;
-  WebPUpsamplers[MODE_BGRA] = UpsampleBgraLinePair_SSE2;
-  WebPUpsamplers[MODE_rgbA] = UpsampleRgbaLinePair_SSE2;
-  WebPUpsamplers[MODE_bgrA] = UpsampleBgraLinePair_SSE2;
-#if !defined(WEBP_REDUCE_CSP)
-  WebPUpsamplers[MODE_RGB]  = UpsampleRgbLinePair_SSE2;
-  WebPUpsamplers[MODE_BGR]  = UpsampleBgrLinePair_SSE2;
-  WebPUpsamplers[MODE_ARGB] = UpsampleArgbLinePair_SSE2;
-  WebPUpsamplers[MODE_Argb] = UpsampleArgbLinePair_SSE2;
-  WebPUpsamplers[MODE_RGB_565] = UpsampleRgb565LinePair_SSE2;
-  WebPUpsamplers[MODE_RGBA_4444] = UpsampleRgba4444LinePair_SSE2;
-  WebPUpsamplers[MODE_rgbA_4444] = UpsampleRgba4444LinePair_SSE2;
-#endif   // WEBP_REDUCE_CSP
-}
-
-#endif  // FANCY_UPSAMPLING
-
-//------------------------------------------------------------------------------
-
-extern WebPYUV444Converter WebPYUV444Converters[/* MODE_LAST */];
-extern void WebPInitYUV444ConvertersSSE2(void);
-
-#define YUV444_FUNC(FUNC_NAME, CALL, CALL_C, XSTEP)                            \
-extern void CALL_C(const uint8_t* y, const uint8_t* u, const uint8_t* v,       \
-                   uint8_t* dst, int len);                                     \
-static void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v,    \
-                      uint8_t* dst, int len) {                                 \
-  int i;                                                                       \
-  const int max_len = len & ~31;                                               \
-  for (i = 0; i < max_len; i += 32) {                                          \
-    CALL(y + i, u + i, v + i, dst + i * (XSTEP));                              \
-  }                                                                            \
-  if (i < len) {  /* C-fallback */                                             \
-    CALL_C(y + i, u + i, v + i, dst + i * (XSTEP), len - i);                   \
-  }                                                                            \
-}
-
-YUV444_FUNC(Yuv444ToRgba_SSE2, VP8YuvToRgba32_SSE2, WebPYuv444ToRgba_C, 4);
-YUV444_FUNC(Yuv444ToBgra_SSE2, VP8YuvToBgra32_SSE2, WebPYuv444ToBgra_C, 4);
-#if !defined(WEBP_REDUCE_CSP)
-YUV444_FUNC(Yuv444ToRgb_SSE2, VP8YuvToRgb32_SSE2, WebPYuv444ToRgb_C, 3);
-YUV444_FUNC(Yuv444ToBgr_SSE2, VP8YuvToBgr32_SSE2, WebPYuv444ToBgr_C, 3);
-YUV444_FUNC(Yuv444ToArgb_SSE2, VP8YuvToArgb32_SSE2, WebPYuv444ToArgb_C, 4)
-YUV444_FUNC(Yuv444ToRgba4444_SSE2, VP8YuvToRgba444432_SSE2, \
-            WebPYuv444ToRgba4444_C, 2)
-YUV444_FUNC(Yuv444ToRgb565_SSE2, VP8YuvToRgb56532_SSE2, WebPYuv444ToRgb565_C, 2)
-#endif   // WEBP_REDUCE_CSP
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitYUV444ConvertersSSE2(void) {
-  WebPYUV444Converters[MODE_RGBA]      = Yuv444ToRgba_SSE2;
-  WebPYUV444Converters[MODE_BGRA]      = Yuv444ToBgra_SSE2;
-  WebPYUV444Converters[MODE_rgbA]      = Yuv444ToRgba_SSE2;
-  WebPYUV444Converters[MODE_bgrA]      = Yuv444ToBgra_SSE2;
-#if !defined(WEBP_REDUCE_CSP)
-  WebPYUV444Converters[MODE_RGB]       = Yuv444ToRgb_SSE2;
-  WebPYUV444Converters[MODE_BGR]       = Yuv444ToBgr_SSE2;
-  WebPYUV444Converters[MODE_ARGB]      = Yuv444ToArgb_SSE2;
-  WebPYUV444Converters[MODE_RGBA_4444] = Yuv444ToRgba4444_SSE2;
-  WebPYUV444Converters[MODE_RGB_565]   = Yuv444ToRgb565_SSE2;
-  WebPYUV444Converters[MODE_Argb]      = Yuv444ToArgb_SSE2;
-  WebPYUV444Converters[MODE_rgbA_4444] = Yuv444ToRgba4444_SSE2;
-#endif   // WEBP_REDUCE_CSP
-}
-
-#else
-
-WEBP_DSP_INIT_STUB(WebPInitYUV444ConvertersSSE2)
-
-#endif  // WEBP_USE_SSE2
-
-#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_SSE2))
-WEBP_DSP_INIT_STUB(WebPInitUpsamplersSSE2)
-#endif
diff --git a/ios/Pods/libwebp/src/dsp/upsampling_sse41.c b/ios/Pods/libwebp/src/dsp/upsampling_sse41.c
deleted file mode 100644
index 648d456..0000000
--- a/ios/Pods/libwebp/src/dsp/upsampling_sse41.c
+++ /dev/null
@@ -1,239 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// SSE41 version of YUV to RGB upsampling functions.
-//
-// Author: somnath@google.com (Somnath Banerjee)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_SSE41)
-
-#include <assert.h>
-#include <smmintrin.h>
-#include <string.h>
-#include "src/dsp/yuv.h"
-
-#ifdef FANCY_UPSAMPLING
-
-#if !defined(WEBP_REDUCE_CSP)
-
-// We compute (9*a + 3*b + 3*c + d + 8) / 16 as follows
-// u = (9*a + 3*b + 3*c + d + 8) / 16
-//   = (a + (a + 3*b + 3*c + d) / 8 + 1) / 2
-//   = (a + m + 1) / 2
-// where m = (a + 3*b + 3*c + d) / 8
-//         = ((a + b + c + d) / 2 + b + c) / 4
-//
-// Let's say  k = (a + b + c + d) / 4.
-// We can compute k as
-// k = (s + t + 1) / 2 - ((a^d) | (b^c) | (s^t)) & 1
-// where s = (a + d + 1) / 2 and t = (b + c + 1) / 2
-//
-// Then m can be written as
-// m = (k + t + 1) / 2 - (((b^c) & (s^t)) | (k^t)) & 1
-
-// Computes out = (k + in + 1) / 2 - ((ij & (s^t)) | (k^in)) & 1
-#define GET_M(ij, in, out) do {                                                \
-  const __m128i tmp0 = _mm_avg_epu8(k, (in));     /* (k + in + 1) / 2 */       \
-  const __m128i tmp1 = _mm_and_si128((ij), st);   /* (ij) & (s^t) */           \
-  const __m128i tmp2 = _mm_xor_si128(k, (in));    /* (k^in) */                 \
-  const __m128i tmp3 = _mm_or_si128(tmp1, tmp2);  /* ((ij) & (s^t)) | (k^in) */\
-  const __m128i tmp4 = _mm_and_si128(tmp3, one);  /* & 1 -> lsb_correction */  \
-  (out) = _mm_sub_epi8(tmp0, tmp4);    /* (k + in + 1) / 2 - lsb_correction */ \
-} while (0)
-
-// pack and store two alternating pixel rows
-#define PACK_AND_STORE(a, b, da, db, out) do {                                 \
-  const __m128i t_a = _mm_avg_epu8(a, da);  /* (9a + 3b + 3c +  d + 8) / 16 */ \
-  const __m128i t_b = _mm_avg_epu8(b, db);  /* (3a + 9b +  c + 3d + 8) / 16 */ \
-  const __m128i t_1 = _mm_unpacklo_epi8(t_a, t_b);                             \
-  const __m128i t_2 = _mm_unpackhi_epi8(t_a, t_b);                             \
-  _mm_store_si128(((__m128i*)(out)) + 0, t_1);                                 \
-  _mm_store_si128(((__m128i*)(out)) + 1, t_2);                                 \
-} while (0)
-
-// Loads 17 pixels each from rows r1 and r2 and generates 32 pixels.
-#define UPSAMPLE_32PIXELS(r1, r2, out) {                                       \
-  const __m128i one = _mm_set1_epi8(1);                                        \
-  const __m128i a = _mm_loadu_si128((const __m128i*)&(r1)[0]);                 \
-  const __m128i b = _mm_loadu_si128((const __m128i*)&(r1)[1]);                 \
-  const __m128i c = _mm_loadu_si128((const __m128i*)&(r2)[0]);                 \
-  const __m128i d = _mm_loadu_si128((const __m128i*)&(r2)[1]);                 \
-                                                                               \
-  const __m128i s = _mm_avg_epu8(a, d);        /* s = (a + d + 1) / 2 */       \
-  const __m128i t = _mm_avg_epu8(b, c);        /* t = (b + c + 1) / 2 */       \
-  const __m128i st = _mm_xor_si128(s, t);      /* st = s^t */                  \
-                                                                               \
-  const __m128i ad = _mm_xor_si128(a, d);      /* ad = a^d */                  \
-  const __m128i bc = _mm_xor_si128(b, c);      /* bc = b^c */                  \
-                                                                               \
-  const __m128i t1 = _mm_or_si128(ad, bc);     /* (a^d) | (b^c) */             \
-  const __m128i t2 = _mm_or_si128(t1, st);     /* (a^d) | (b^c) | (s^t) */     \
-  const __m128i t3 = _mm_and_si128(t2, one);   /* (a^d) | (b^c) | (s^t) & 1 */ \
-  const __m128i t4 = _mm_avg_epu8(s, t);                                       \
-  const __m128i k = _mm_sub_epi8(t4, t3);      /* k = (a + b + c + d) / 4 */   \
-  __m128i diag1, diag2;                                                        \
-                                                                               \
-  GET_M(bc, t, diag1);                  /* diag1 = (a + 3b + 3c + d) / 8 */    \
-  GET_M(ad, s, diag2);                  /* diag2 = (3a + b + c + 3d) / 8 */    \
-                                                                               \
-  /* pack the alternate pixels */                                              \
-  PACK_AND_STORE(a, b, diag1, diag2, (out) +      0);  /* store top */         \
-  PACK_AND_STORE(c, d, diag2, diag1, (out) + 2 * 32);  /* store bottom */      \
-}
-
-// Turn the macro into a function for reducing code-size when non-critical
-static void Upsample32Pixels_SSE41(const uint8_t r1[], const uint8_t r2[],
-                                  uint8_t* const out) {
-  UPSAMPLE_32PIXELS(r1, r2, out);
-}
-
-#define UPSAMPLE_LAST_BLOCK(tb, bb, num_pixels, out) {                         \
-  uint8_t r1[17], r2[17];                                                      \
-  memcpy(r1, (tb), (num_pixels));                                              \
-  memcpy(r2, (bb), (num_pixels));                                              \
-  /* replicate last byte */                                                    \
-  memset(r1 + (num_pixels), r1[(num_pixels) - 1], 17 - (num_pixels));          \
-  memset(r2 + (num_pixels), r2[(num_pixels) - 1], 17 - (num_pixels));          \
-  /* using the shared function instead of the macro saves ~3k code size */     \
-  Upsample32Pixels_SSE41(r1, r2, out);                                         \
-}
-
-#define CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y,                           \
-                       top_dst, bottom_dst, cur_x) do {                        \
-  FUNC##32_SSE41((top_y) + (cur_x), r_u, r_v, (top_dst) + (cur_x) * (XSTEP));  \
-  if ((bottom_y) != NULL) {                                                    \
-    FUNC##32_SSE41((bottom_y) + (cur_x), r_u + 64, r_v + 64,                   \
-                  (bottom_dst) + (cur_x) * (XSTEP));                           \
-  }                                                                            \
-} while (0)
-
-#define SSE4_UPSAMPLE_FUNC(FUNC_NAME, FUNC, XSTEP)                             \
-static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y,           \
-                      const uint8_t* top_u, const uint8_t* top_v,              \
-                      const uint8_t* cur_u, const uint8_t* cur_v,              \
-                      uint8_t* top_dst, uint8_t* bottom_dst, int len) {        \
-  int uv_pos, pos;                                                             \
-  /* 16byte-aligned array to cache reconstructed u and v */                    \
-  uint8_t uv_buf[14 * 32 + 15] = { 0 };                                        \
-  uint8_t* const r_u = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15);             \
-  uint8_t* const r_v = r_u + 32;                                               \
-                                                                               \
-  assert(top_y != NULL);                                                       \
-  {   /* Treat the first pixel in regular way */                               \
-    const int u_diag = ((top_u[0] + cur_u[0]) >> 1) + 1;                       \
-    const int v_diag = ((top_v[0] + cur_v[0]) >> 1) + 1;                       \
-    const int u0_t = (top_u[0] + u_diag) >> 1;                                 \
-    const int v0_t = (top_v[0] + v_diag) >> 1;                                 \
-    FUNC(top_y[0], u0_t, v0_t, top_dst);                                       \
-    if (bottom_y != NULL) {                                                    \
-      const int u0_b = (cur_u[0] + u_diag) >> 1;                               \
-      const int v0_b = (cur_v[0] + v_diag) >> 1;                               \
-      FUNC(bottom_y[0], u0_b, v0_b, bottom_dst);                               \
-    }                                                                          \
-  }                                                                            \
-  /* For UPSAMPLE_32PIXELS, 17 u/v values must be read-able for each block */  \
-  for (pos = 1, uv_pos = 0; pos + 32 + 1 <= len; pos += 32, uv_pos += 16) {    \
-    UPSAMPLE_32PIXELS(top_u + uv_pos, cur_u + uv_pos, r_u);                    \
-    UPSAMPLE_32PIXELS(top_v + uv_pos, cur_v + uv_pos, r_v);                    \
-    CONVERT2RGB_32(FUNC, XSTEP, top_y, bottom_y, top_dst, bottom_dst, pos);    \
-  }                                                                            \
-  if (len > 1) {                                                               \
-    const int left_over = ((len + 1) >> 1) - (pos >> 1);                       \
-    uint8_t* const tmp_top_dst = r_u + 4 * 32;                                 \
-    uint8_t* const tmp_bottom_dst = tmp_top_dst + 4 * 32;                      \
-    uint8_t* const tmp_top = tmp_bottom_dst + 4 * 32;                          \
-    uint8_t* const tmp_bottom = (bottom_y == NULL) ? NULL : tmp_top + 32;      \
-    assert(left_over > 0);                                                     \
-    UPSAMPLE_LAST_BLOCK(top_u + uv_pos, cur_u + uv_pos, left_over, r_u);       \
-    UPSAMPLE_LAST_BLOCK(top_v + uv_pos, cur_v + uv_pos, left_over, r_v);       \
-    memcpy(tmp_top, top_y + pos, len - pos);                                   \
-    if (bottom_y != NULL) memcpy(tmp_bottom, bottom_y + pos, len - pos);       \
-    CONVERT2RGB_32(FUNC, XSTEP, tmp_top, tmp_bottom, tmp_top_dst,              \
-         tmp_bottom_dst, 0);                                                   \
-    memcpy(top_dst + pos * (XSTEP), tmp_top_dst, (len - pos) * (XSTEP));       \
-    if (bottom_y != NULL) {                                                    \
-      memcpy(bottom_dst + pos * (XSTEP), tmp_bottom_dst,                       \
-             (len - pos) * (XSTEP));                                           \
-    }                                                                          \
-  }                                                                            \
-}
-
-// SSE4 variants of the fancy upsampler.
-SSE4_UPSAMPLE_FUNC(UpsampleRgbLinePair_SSE41,  VP8YuvToRgb,  3)
-SSE4_UPSAMPLE_FUNC(UpsampleBgrLinePair_SSE41,  VP8YuvToBgr,  3)
-
-#undef GET_M
-#undef PACK_AND_STORE
-#undef UPSAMPLE_32PIXELS
-#undef UPSAMPLE_LAST_BLOCK
-#undef CONVERT2RGB
-#undef CONVERT2RGB_32
-#undef SSE4_UPSAMPLE_FUNC
-
-#endif   // WEBP_REDUCE_CSP
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern WebPUpsampleLinePairFunc WebPUpsamplers[/* MODE_LAST */];
-
-extern void WebPInitUpsamplersSSE41(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitUpsamplersSSE41(void) {
-#if !defined(WEBP_REDUCE_CSP)
-  WebPUpsamplers[MODE_RGB]  = UpsampleRgbLinePair_SSE41;
-  WebPUpsamplers[MODE_BGR]  = UpsampleBgrLinePair_SSE41;
-#endif   // WEBP_REDUCE_CSP
-}
-
-#endif  // FANCY_UPSAMPLING
-
-//------------------------------------------------------------------------------
-
-extern WebPYUV444Converter WebPYUV444Converters[/* MODE_LAST */];
-extern void WebPInitYUV444ConvertersSSE41(void);
-
-#define YUV444_FUNC(FUNC_NAME, CALL, CALL_C, XSTEP)                            \
-extern void CALL_C(const uint8_t* y, const uint8_t* u, const uint8_t* v,       \
-                   uint8_t* dst, int len);                                     \
-static void FUNC_NAME(const uint8_t* y, const uint8_t* u, const uint8_t* v,    \
-                      uint8_t* dst, int len) {                                 \
-  int i;                                                                       \
-  const int max_len = len & ~31;                                               \
-  for (i = 0; i < max_len; i += 32) {                                          \
-    CALL(y + i, u + i, v + i, dst + i * (XSTEP));                              \
-  }                                                                            \
-  if (i < len) {  /* C-fallback */                                             \
-    CALL_C(y + i, u + i, v + i, dst + i * (XSTEP), len - i);                   \
-  }                                                                            \
-}
-
-#if !defined(WEBP_REDUCE_CSP)
-YUV444_FUNC(Yuv444ToRgb_SSE41, VP8YuvToRgb32_SSE41, WebPYuv444ToRgb_C, 3);
-YUV444_FUNC(Yuv444ToBgr_SSE41, VP8YuvToBgr32_SSE41, WebPYuv444ToBgr_C, 3);
-#endif  // WEBP_REDUCE_CSP
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitYUV444ConvertersSSE41(void) {
-#if !defined(WEBP_REDUCE_CSP)
-  WebPYUV444Converters[MODE_RGB]       = Yuv444ToRgb_SSE41;
-  WebPYUV444Converters[MODE_BGR]       = Yuv444ToBgr_SSE41;
-#endif   // WEBP_REDUCE_CSP
-}
-
-#else
-
-WEBP_DSP_INIT_STUB(WebPInitYUV444ConvertersSSE41)
-
-#endif  // WEBP_USE_SSE41
-
-#if !(defined(FANCY_UPSAMPLING) && defined(WEBP_USE_SSE41))
-WEBP_DSP_INIT_STUB(WebPInitUpsamplersSSE41)
-#endif
diff --git a/ios/Pods/libwebp/src/dsp/yuv.c b/ios/Pods/libwebp/src/dsp/yuv.c
deleted file mode 100644
index 14e67fc..0000000
--- a/ios/Pods/libwebp/src/dsp/yuv.c
+++ /dev/null
@@ -1,308 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// YUV->RGB conversion functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/yuv.h"
-
-#include <assert.h>
-#include <stdlib.h>
-
-//-----------------------------------------------------------------------------
-// Plain-C version
-
-#define ROW_FUNC(FUNC_NAME, FUNC, XSTEP)                                       \
-static void FUNC_NAME(const uint8_t* y,                                        \
-                      const uint8_t* u, const uint8_t* v,                      \
-                      uint8_t* dst, int len) {                                 \
-  const uint8_t* const end = dst + (len & ~1) * (XSTEP);                       \
-  while (dst != end) {                                                         \
-    FUNC(y[0], u[0], v[0], dst);                                               \
-    FUNC(y[1], u[0], v[0], dst + (XSTEP));                                     \
-    y += 2;                                                                    \
-    ++u;                                                                       \
-    ++v;                                                                       \
-    dst += 2 * (XSTEP);                                                        \
-  }                                                                            \
-  if (len & 1) {                                                               \
-    FUNC(y[0], u[0], v[0], dst);                                               \
-  }                                                                            \
-}                                                                              \
-
-// All variants implemented.
-ROW_FUNC(YuvToRgbRow,      VP8YuvToRgb,  3)
-ROW_FUNC(YuvToBgrRow,      VP8YuvToBgr,  3)
-ROW_FUNC(YuvToRgbaRow,     VP8YuvToRgba, 4)
-ROW_FUNC(YuvToBgraRow,     VP8YuvToBgra, 4)
-ROW_FUNC(YuvToArgbRow,     VP8YuvToArgb, 4)
-ROW_FUNC(YuvToRgba4444Row, VP8YuvToRgba4444, 2)
-ROW_FUNC(YuvToRgb565Row,   VP8YuvToRgb565, 2)
-
-#undef ROW_FUNC
-
-// Main call for processing a plane with a WebPSamplerRowFunc function:
-void WebPSamplerProcessPlane(const uint8_t* y, int y_stride,
-                             const uint8_t* u, const uint8_t* v, int uv_stride,
-                             uint8_t* dst, int dst_stride,
-                             int width, int height, WebPSamplerRowFunc func) {
-  int j;
-  for (j = 0; j < height; ++j) {
-    func(y, u, v, dst, width);
-    y += y_stride;
-    if (j & 1) {
-      u += uv_stride;
-      v += uv_stride;
-    }
-    dst += dst_stride;
-  }
-}
-
-//-----------------------------------------------------------------------------
-// Main call
-
-WebPSamplerRowFunc WebPSamplers[MODE_LAST];
-
-extern void WebPInitSamplersSSE2(void);
-extern void WebPInitSamplersSSE41(void);
-extern void WebPInitSamplersMIPS32(void);
-extern void WebPInitSamplersMIPSdspR2(void);
-
-WEBP_DSP_INIT_FUNC(WebPInitSamplers) {
-  WebPSamplers[MODE_RGB]       = YuvToRgbRow;
-  WebPSamplers[MODE_RGBA]      = YuvToRgbaRow;
-  WebPSamplers[MODE_BGR]       = YuvToBgrRow;
-  WebPSamplers[MODE_BGRA]      = YuvToBgraRow;
-  WebPSamplers[MODE_ARGB]      = YuvToArgbRow;
-  WebPSamplers[MODE_RGBA_4444] = YuvToRgba4444Row;
-  WebPSamplers[MODE_RGB_565]   = YuvToRgb565Row;
-  WebPSamplers[MODE_rgbA]      = YuvToRgbaRow;
-  WebPSamplers[MODE_bgrA]      = YuvToBgraRow;
-  WebPSamplers[MODE_Argb]      = YuvToArgbRow;
-  WebPSamplers[MODE_rgbA_4444] = YuvToRgba4444Row;
-
-  // If defined, use CPUInfo() to overwrite some pointers with faster versions.
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      WebPInitSamplersSSE2();
-    }
-#endif  // WEBP_USE_SSE2
-#if defined(WEBP_USE_SSE41)
-    if (VP8GetCPUInfo(kSSE4_1)) {
-      WebPInitSamplersSSE41();
-    }
-#endif  // WEBP_USE_SSE41
-#if defined(WEBP_USE_MIPS32)
-    if (VP8GetCPUInfo(kMIPS32)) {
-      WebPInitSamplersMIPS32();
-    }
-#endif  // WEBP_USE_MIPS32
-#if defined(WEBP_USE_MIPS_DSP_R2)
-    if (VP8GetCPUInfo(kMIPSdspR2)) {
-      WebPInitSamplersMIPSdspR2();
-    }
-#endif  // WEBP_USE_MIPS_DSP_R2
-  }
-}
-
-//-----------------------------------------------------------------------------
-// ARGB -> YUV converters
-
-static void ConvertARGBToY_C(const uint32_t* argb, uint8_t* y, int width) {
-  int i;
-  for (i = 0; i < width; ++i) {
-    const uint32_t p = argb[i];
-    y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >>  0) & 0xff,
-                     YUV_HALF);
-  }
-}
-
-void WebPConvertARGBToUV_C(const uint32_t* argb, uint8_t* u, uint8_t* v,
-                           int src_width, int do_store) {
-  // No rounding. Last pixel is dealt with separately.
-  const int uv_width = src_width >> 1;
-  int i;
-  for (i = 0; i < uv_width; ++i) {
-    const uint32_t v0 = argb[2 * i + 0];
-    const uint32_t v1 = argb[2 * i + 1];
-    // VP8RGBToU/V expects four accumulated pixels. Hence we need to
-    // scale r/g/b value by a factor 2. We just shift v0/v1 one bit less.
-    const int r = ((v0 >> 15) & 0x1fe) + ((v1 >> 15) & 0x1fe);
-    const int g = ((v0 >>  7) & 0x1fe) + ((v1 >>  7) & 0x1fe);
-    const int b = ((v0 <<  1) & 0x1fe) + ((v1 <<  1) & 0x1fe);
-    const int tmp_u = VP8RGBToU(r, g, b, YUV_HALF << 2);
-    const int tmp_v = VP8RGBToV(r, g, b, YUV_HALF << 2);
-    if (do_store) {
-      u[i] = tmp_u;
-      v[i] = tmp_v;
-    } else {
-      // Approximated average-of-four. But it's an acceptable diff.
-      u[i] = (u[i] + tmp_u + 1) >> 1;
-      v[i] = (v[i] + tmp_v + 1) >> 1;
-    }
-  }
-  if (src_width & 1) {       // last pixel
-    const uint32_t v0 = argb[2 * i + 0];
-    const int r = (v0 >> 14) & 0x3fc;
-    const int g = (v0 >>  6) & 0x3fc;
-    const int b = (v0 <<  2) & 0x3fc;
-    const int tmp_u = VP8RGBToU(r, g, b, YUV_HALF << 2);
-    const int tmp_v = VP8RGBToV(r, g, b, YUV_HALF << 2);
-    if (do_store) {
-      u[i] = tmp_u;
-      v[i] = tmp_v;
-    } else {
-      u[i] = (u[i] + tmp_u + 1) >> 1;
-      v[i] = (v[i] + tmp_v + 1) >> 1;
-    }
-  }
-}
-
-//-----------------------------------------------------------------------------
-
-static void ConvertRGB24ToY_C(const uint8_t* rgb, uint8_t* y, int width) {
-  int i;
-  for (i = 0; i < width; ++i, rgb += 3) {
-    y[i] = VP8RGBToY(rgb[0], rgb[1], rgb[2], YUV_HALF);
-  }
-}
-
-static void ConvertBGR24ToY_C(const uint8_t* bgr, uint8_t* y, int width) {
-  int i;
-  for (i = 0; i < width; ++i, bgr += 3) {
-    y[i] = VP8RGBToY(bgr[2], bgr[1], bgr[0], YUV_HALF);
-  }
-}
-
-void WebPConvertRGBA32ToUV_C(const uint16_t* rgb,
-                             uint8_t* u, uint8_t* v, int width) {
-  int i;
-  for (i = 0; i < width; i += 1, rgb += 4) {
-    const int r = rgb[0], g = rgb[1], b = rgb[2];
-    u[i] = VP8RGBToU(r, g, b, YUV_HALF << 2);
-    v[i] = VP8RGBToV(r, g, b, YUV_HALF << 2);
-  }
-}
-
-//-----------------------------------------------------------------------------
-
-#if !WEBP_NEON_OMIT_C_CODE
-#define MAX_Y ((1 << 10) - 1)    // 10b precision over 16b-arithmetic
-static uint16_t clip_y(int v) {
-  return (v < 0) ? 0 : (v > MAX_Y) ? MAX_Y : (uint16_t)v;
-}
-
-static uint64_t SharpYUVUpdateY_C(const uint16_t* ref, const uint16_t* src,
-                                  uint16_t* dst, int len) {
-  uint64_t diff = 0;
-  int i;
-  for (i = 0; i < len; ++i) {
-    const int diff_y = ref[i] - src[i];
-    const int new_y = (int)dst[i] + diff_y;
-    dst[i] = clip_y(new_y);
-    diff += (uint64_t)abs(diff_y);
-  }
-  return diff;
-}
-
-static void SharpYUVUpdateRGB_C(const int16_t* ref, const int16_t* src,
-                                int16_t* dst, int len) {
-  int i;
-  for (i = 0; i < len; ++i) {
-    const int diff_uv = ref[i] - src[i];
-    dst[i] += diff_uv;
-  }
-}
-
-static void SharpYUVFilterRow_C(const int16_t* A, const int16_t* B, int len,
-                                const uint16_t* best_y, uint16_t* out) {
-  int i;
-  for (i = 0; i < len; ++i, ++A, ++B) {
-    const int v0 = (A[0] * 9 + A[1] * 3 + B[0] * 3 + B[1] + 8) >> 4;
-    const int v1 = (A[1] * 9 + A[0] * 3 + B[1] * 3 + B[0] + 8) >> 4;
-    out[2 * i + 0] = clip_y(best_y[2 * i + 0] + v0);
-    out[2 * i + 1] = clip_y(best_y[2 * i + 1] + v1);
-  }
-}
-#endif  // !WEBP_NEON_OMIT_C_CODE
-
-#undef MAX_Y
-
-//-----------------------------------------------------------------------------
-
-void (*WebPConvertRGB24ToY)(const uint8_t* rgb, uint8_t* y, int width);
-void (*WebPConvertBGR24ToY)(const uint8_t* bgr, uint8_t* y, int width);
-void (*WebPConvertRGBA32ToUV)(const uint16_t* rgb,
-                              uint8_t* u, uint8_t* v, int width);
-
-void (*WebPConvertARGBToY)(const uint32_t* argb, uint8_t* y, int width);
-void (*WebPConvertARGBToUV)(const uint32_t* argb, uint8_t* u, uint8_t* v,
-                            int src_width, int do_store);
-
-uint64_t (*WebPSharpYUVUpdateY)(const uint16_t* ref, const uint16_t* src,
-                                uint16_t* dst, int len);
-void (*WebPSharpYUVUpdateRGB)(const int16_t* ref, const int16_t* src,
-                              int16_t* dst, int len);
-void (*WebPSharpYUVFilterRow)(const int16_t* A, const int16_t* B, int len,
-                              const uint16_t* best_y, uint16_t* out);
-
-extern void WebPInitConvertARGBToYUVSSE2(void);
-extern void WebPInitConvertARGBToYUVSSE41(void);
-extern void WebPInitConvertARGBToYUVNEON(void);
-extern void WebPInitSharpYUVSSE2(void);
-extern void WebPInitSharpYUVNEON(void);
-
-WEBP_DSP_INIT_FUNC(WebPInitConvertARGBToYUV) {
-  WebPConvertARGBToY = ConvertARGBToY_C;
-  WebPConvertARGBToUV = WebPConvertARGBToUV_C;
-
-  WebPConvertRGB24ToY = ConvertRGB24ToY_C;
-  WebPConvertBGR24ToY = ConvertBGR24ToY_C;
-
-  WebPConvertRGBA32ToUV = WebPConvertRGBA32ToUV_C;
-
-#if !WEBP_NEON_OMIT_C_CODE
-  WebPSharpYUVUpdateY = SharpYUVUpdateY_C;
-  WebPSharpYUVUpdateRGB = SharpYUVUpdateRGB_C;
-  WebPSharpYUVFilterRow = SharpYUVFilterRow_C;
-#endif
-
-  if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
-    if (VP8GetCPUInfo(kSSE2)) {
-      WebPInitConvertARGBToYUVSSE2();
-      WebPInitSharpYUVSSE2();
-    }
-#endif  // WEBP_USE_SSE2
-#if defined(WEBP_USE_SSE41)
-    if (VP8GetCPUInfo(kSSE4_1)) {
-      WebPInitConvertARGBToYUVSSE41();
-    }
-#endif  // WEBP_USE_SSE41
-  }
-
-#if defined(WEBP_USE_NEON)
-  if (WEBP_NEON_OMIT_C_CODE ||
-      (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
-    WebPInitConvertARGBToYUVNEON();
-    WebPInitSharpYUVNEON();
-  }
-#endif  // WEBP_USE_NEON
-
-  assert(WebPConvertARGBToY != NULL);
-  assert(WebPConvertARGBToUV != NULL);
-  assert(WebPConvertRGB24ToY != NULL);
-  assert(WebPConvertBGR24ToY != NULL);
-  assert(WebPConvertRGBA32ToUV != NULL);
-  assert(WebPSharpYUVUpdateY != NULL);
-  assert(WebPSharpYUVUpdateRGB != NULL);
-  assert(WebPSharpYUVFilterRow != NULL);
-}
diff --git a/ios/Pods/libwebp/src/dsp/yuv.h b/ios/Pods/libwebp/src/dsp/yuv.h
deleted file mode 100644
index c12be1d..0000000
--- a/ios/Pods/libwebp/src/dsp/yuv.h
+++ /dev/null
@@ -1,210 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// inline YUV<->RGB conversion function
-//
-// The exact naming is Y'CbCr, following the ITU-R BT.601 standard.
-// More information at: http://en.wikipedia.org/wiki/YCbCr
-// Y = 0.2569 * R + 0.5044 * G + 0.0979 * B + 16
-// U = -0.1483 * R - 0.2911 * G + 0.4394 * B + 128
-// V = 0.4394 * R - 0.3679 * G - 0.0715 * B + 128
-// We use 16bit fixed point operations for RGB->YUV conversion (YUV_FIX).
-//
-// For the Y'CbCr to RGB conversion, the BT.601 specification reads:
-//   R = 1.164 * (Y-16) + 1.596 * (V-128)
-//   G = 1.164 * (Y-16) - 0.813 * (V-128) - 0.391 * (U-128)
-//   B = 1.164 * (Y-16)                   + 2.018 * (U-128)
-// where Y is in the [16,235] range, and U/V in the [16,240] range.
-//
-// The fixed-point implementation used here is:
-//  R = (19077 . y             + 26149 . v - 14234) >> 6
-//  G = (19077 . y -  6419 . u - 13320 . v +  8708) >> 6
-//  B = (19077 . y + 33050 . u             - 17685) >> 6
-// where the '.' operator is the mulhi_epu16 variant:
-//   a . b = ((a << 8) * b) >> 16
-// that preserves 8 bits of fractional precision before final descaling.
-
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_DSP_YUV_H_
-#define WEBP_DSP_YUV_H_
-
-#include "src/dsp/dsp.h"
-#include "src/dec/vp8_dec.h"
-
-//------------------------------------------------------------------------------
-// YUV -> RGB conversion
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum {
-  YUV_FIX = 16,                    // fixed-point precision for RGB->YUV
-  YUV_HALF = 1 << (YUV_FIX - 1),
-
-  YUV_FIX2 = 6,                   // fixed-point precision for YUV->RGB
-  YUV_MASK2 = (256 << YUV_FIX2) - 1
-};
-
-//------------------------------------------------------------------------------
-// slower on x86 by ~7-8%, but bit-exact with the SSE2/NEON version
-
-static WEBP_INLINE int MultHi(int v, int coeff) {   // _mm_mulhi_epu16 emulation
-  return (v * coeff) >> 8;
-}
-
-static WEBP_INLINE int VP8Clip8(int v) {
-  return ((v & ~YUV_MASK2) == 0) ? (v >> YUV_FIX2) : (v < 0) ? 0 : 255;
-}
-
-static WEBP_INLINE int VP8YUVToR(int y, int v) {
-  return VP8Clip8(MultHi(y, 19077) + MultHi(v, 26149) - 14234);
-}
-
-static WEBP_INLINE int VP8YUVToG(int y, int u, int v) {
-  return VP8Clip8(MultHi(y, 19077) - MultHi(u, 6419) - MultHi(v, 13320) + 8708);
-}
-
-static WEBP_INLINE int VP8YUVToB(int y, int u) {
-  return VP8Clip8(MultHi(y, 19077) + MultHi(u, 33050) - 17685);
-}
-
-static WEBP_INLINE void VP8YuvToRgb(int y, int u, int v,
-                                    uint8_t* const rgb) {
-  rgb[0] = VP8YUVToR(y, v);
-  rgb[1] = VP8YUVToG(y, u, v);
-  rgb[2] = VP8YUVToB(y, u);
-}
-
-static WEBP_INLINE void VP8YuvToBgr(int y, int u, int v,
-                                    uint8_t* const bgr) {
-  bgr[0] = VP8YUVToB(y, u);
-  bgr[1] = VP8YUVToG(y, u, v);
-  bgr[2] = VP8YUVToR(y, v);
-}
-
-static WEBP_INLINE void VP8YuvToRgb565(int y, int u, int v,
-                                       uint8_t* const rgb) {
-  const int r = VP8YUVToR(y, v);      // 5 usable bits
-  const int g = VP8YUVToG(y, u, v);   // 6 usable bits
-  const int b = VP8YUVToB(y, u);      // 5 usable bits
-  const int rg = (r & 0xf8) | (g >> 5);
-  const int gb = ((g << 3) & 0xe0) | (b >> 3);
-#if (WEBP_SWAP_16BIT_CSP == 1)
-  rgb[0] = gb;
-  rgb[1] = rg;
-#else
-  rgb[0] = rg;
-  rgb[1] = gb;
-#endif
-}
-
-static WEBP_INLINE void VP8YuvToRgba4444(int y, int u, int v,
-                                         uint8_t* const argb) {
-  const int r = VP8YUVToR(y, v);        // 4 usable bits
-  const int g = VP8YUVToG(y, u, v);     // 4 usable bits
-  const int b = VP8YUVToB(y, u);        // 4 usable bits
-  const int rg = (r & 0xf0) | (g >> 4);
-  const int ba = (b & 0xf0) | 0x0f;     // overwrite the lower 4 bits
-#if (WEBP_SWAP_16BIT_CSP == 1)
-  argb[0] = ba;
-  argb[1] = rg;
-#else
-  argb[0] = rg;
-  argb[1] = ba;
-#endif
-}
-
-//-----------------------------------------------------------------------------
-// Alpha handling variants
-
-static WEBP_INLINE void VP8YuvToArgb(uint8_t y, uint8_t u, uint8_t v,
-                                     uint8_t* const argb) {
-  argb[0] = 0xff;
-  VP8YuvToRgb(y, u, v, argb + 1);
-}
-
-static WEBP_INLINE void VP8YuvToBgra(uint8_t y, uint8_t u, uint8_t v,
-                                     uint8_t* const bgra) {
-  VP8YuvToBgr(y, u, v, bgra);
-  bgra[3] = 0xff;
-}
-
-static WEBP_INLINE void VP8YuvToRgba(uint8_t y, uint8_t u, uint8_t v,
-                                     uint8_t* const rgba) {
-  VP8YuvToRgb(y, u, v, rgba);
-  rgba[3] = 0xff;
-}
-
-//-----------------------------------------------------------------------------
-// SSE2 extra functions (mostly for upsampling_sse2.c)
-
-#if defined(WEBP_USE_SSE2)
-
-// Process 32 pixels and store the result (16b, 24b or 32b per pixel) in *dst.
-void VP8YuvToRgba32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst);
-void VP8YuvToRgb32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                        uint8_t* dst);
-void VP8YuvToBgra32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst);
-void VP8YuvToBgr32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                        uint8_t* dst);
-void VP8YuvToArgb32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst);
-void VP8YuvToRgba444432_SSE2(const uint8_t* y, const uint8_t* u,
-                             const uint8_t* v, uint8_t* dst);
-void VP8YuvToRgb56532_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                           uint8_t* dst);
-
-#endif    // WEBP_USE_SSE2
-
-//-----------------------------------------------------------------------------
-// SSE41 extra functions (mostly for upsampling_sse41.c)
-
-#if defined(WEBP_USE_SSE41)
-
-// Process 32 pixels and store the result (16b, 24b or 32b per pixel) in *dst.
-void VP8YuvToRgb32_SSE41(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst);
-void VP8YuvToBgr32_SSE41(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst);
-
-#endif    // WEBP_USE_SSE41
-
-//------------------------------------------------------------------------------
-// RGB -> YUV conversion
-
-// Stub functions that can be called with various rounding values:
-static WEBP_INLINE int VP8ClipUV(int uv, int rounding) {
-  uv = (uv + rounding + (128 << (YUV_FIX + 2))) >> (YUV_FIX + 2);
-  return ((uv & ~0xff) == 0) ? uv : (uv < 0) ? 0 : 255;
-}
-
-static WEBP_INLINE int VP8RGBToY(int r, int g, int b, int rounding) {
-  const int luma = 16839 * r + 33059 * g + 6420 * b;
-  return (luma + rounding + (16 << YUV_FIX)) >> YUV_FIX;  // no need to clip
-}
-
-static WEBP_INLINE int VP8RGBToU(int r, int g, int b, int rounding) {
-  const int u = -9719 * r - 19081 * g + 28800 * b;
-  return VP8ClipUV(u, rounding);
-}
-
-static WEBP_INLINE int VP8RGBToV(int r, int g, int b, int rounding) {
-  const int v = +28800 * r - 24116 * g - 4684 * b;
-  return VP8ClipUV(v, rounding);
-}
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_DSP_YUV_H_
diff --git a/ios/Pods/libwebp/src/dsp/yuv_mips32.c b/ios/Pods/libwebp/src/dsp/yuv_mips32.c
deleted file mode 100644
index 9d0a887..0000000
--- a/ios/Pods/libwebp/src/dsp/yuv_mips32.c
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS version of YUV to RGB upsampling functions.
-//
-// Author(s):  Djordje Pesut    (djordje.pesut@imgtec.com)
-//             Jovan Zelincevic (jovan.zelincevic@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS32)
-
-#include "src/dsp/yuv.h"
-
-//------------------------------------------------------------------------------
-// simple point-sampling
-
-#define ROW_FUNC(FUNC_NAME, XSTEP, R, G, B, A)                                 \
-static void FUNC_NAME(const uint8_t* y,                                        \
-                      const uint8_t* u, const uint8_t* v,                      \
-                      uint8_t* dst, int len) {                                 \
-  int i, r, g, b;                                                              \
-  int temp0, temp1, temp2, temp3, temp4;                                       \
-  for (i = 0; i < (len >> 1); i++) {                                           \
-    temp1 = MultHi(v[0], 26149);                                               \
-    temp3 = MultHi(v[0], 13320);                                               \
-    temp2 = MultHi(u[0], 6419);                                                \
-    temp4 = MultHi(u[0], 33050);                                               \
-    temp0 = MultHi(y[0], 19077);                                               \
-    temp1 -= 14234;                                                            \
-    temp3 -= 8708;                                                             \
-    temp2 += temp3;                                                            \
-    temp4 -= 17685;                                                            \
-    r = VP8Clip8(temp0 + temp1);                                               \
-    g = VP8Clip8(temp0 - temp2);                                               \
-    b = VP8Clip8(temp0 + temp4);                                               \
-    temp0 = MultHi(y[1], 19077);                                               \
-    dst[R] = r;                                                                \
-    dst[G] = g;                                                                \
-    dst[B] = b;                                                                \
-    if (A) dst[A] = 0xff;                                                      \
-    r = VP8Clip8(temp0 + temp1);                                               \
-    g = VP8Clip8(temp0 - temp2);                                               \
-    b = VP8Clip8(temp0 + temp4);                                               \
-    dst[R + XSTEP] = r;                                                        \
-    dst[G + XSTEP] = g;                                                        \
-    dst[B + XSTEP] = b;                                                        \
-    if (A) dst[A + XSTEP] = 0xff;                                              \
-    y += 2;                                                                    \
-    ++u;                                                                       \
-    ++v;                                                                       \
-    dst += 2 * XSTEP;                                                          \
-  }                                                                            \
-  if (len & 1) {                                                               \
-    temp1 = MultHi(v[0], 26149);                                               \
-    temp3 = MultHi(v[0], 13320);                                               \
-    temp2 = MultHi(u[0], 6419);                                                \
-    temp4 = MultHi(u[0], 33050);                                               \
-    temp0 = MultHi(y[0], 19077);                                               \
-    temp1 -= 14234;                                                            \
-    temp3 -= 8708;                                                             \
-    temp2 += temp3;                                                            \
-    temp4 -= 17685;                                                            \
-    r = VP8Clip8(temp0 + temp1);                                               \
-    g = VP8Clip8(temp0 - temp2);                                               \
-    b = VP8Clip8(temp0 + temp4);                                               \
-    dst[R] = r;                                                                \
-    dst[G] = g;                                                                \
-    dst[B] = b;                                                                \
-    if (A) dst[A] = 0xff;                                                      \
-  }                                                                            \
-}
-
-ROW_FUNC(YuvToRgbRow_MIPS32,      3, 0, 1, 2, 0)
-ROW_FUNC(YuvToRgbaRow_MIPS32,     4, 0, 1, 2, 3)
-ROW_FUNC(YuvToBgrRow_MIPS32,      3, 2, 1, 0, 0)
-ROW_FUNC(YuvToBgraRow_MIPS32,     4, 2, 1, 0, 3)
-
-#undef ROW_FUNC
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitSamplersMIPS32(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersMIPS32(void) {
-  WebPSamplers[MODE_RGB]  = YuvToRgbRow_MIPS32;
-  WebPSamplers[MODE_RGBA] = YuvToRgbaRow_MIPS32;
-  WebPSamplers[MODE_BGR]  = YuvToBgrRow_MIPS32;
-  WebPSamplers[MODE_BGRA] = YuvToBgraRow_MIPS32;
-}
-
-#else  // !WEBP_USE_MIPS32
-
-WEBP_DSP_INIT_STUB(WebPInitSamplersMIPS32)
-
-#endif  // WEBP_USE_MIPS32
diff --git a/ios/Pods/libwebp/src/dsp/yuv_mips_dsp_r2.c b/ios/Pods/libwebp/src/dsp/yuv_mips_dsp_r2.c
deleted file mode 100644
index cc8afcc..0000000
--- a/ios/Pods/libwebp/src/dsp/yuv_mips_dsp_r2.c
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// MIPS DSPr2 version of YUV to RGB upsampling functions.
-//
-// Author(s):  Branimir Vasic (branimir.vasic@imgtec.com)
-//             Djordje Pesut  (djordje.pesut@imgtec.com)
-
-#include "src/dsp/dsp.h"
-
-#if defined(WEBP_USE_MIPS_DSP_R2)
-
-#include "src/dsp/yuv.h"
-
-//------------------------------------------------------------------------------
-// simple point-sampling
-
-#define ROW_FUNC_PART_1()                                                      \
-  "lbu              %[temp3],   0(%[v])                         \n\t"          \
-  "lbu              %[temp4],   0(%[u])                         \n\t"          \
-  "lbu              %[temp0],   0(%[y])                         \n\t"          \
-  "mul              %[temp1],   %[t_con_1],     %[temp3]        \n\t"          \
-  "mul              %[temp3],   %[t_con_2],     %[temp3]        \n\t"          \
-  "mul              %[temp2],   %[t_con_3],     %[temp4]        \n\t"          \
-  "mul              %[temp4],   %[t_con_4],     %[temp4]        \n\t"          \
-  "mul              %[temp0],   %[t_con_5],     %[temp0]        \n\t"          \
-  "subu             %[temp1],   %[temp1],       %[t_con_6]      \n\t"          \
-  "subu             %[temp3],   %[temp3],       %[t_con_7]      \n\t"          \
-  "addu             %[temp2],   %[temp2],       %[temp3]        \n\t"          \
-  "subu             %[temp4],   %[temp4],       %[t_con_8]      \n\t"          \
-
-#define ROW_FUNC_PART_2(R, G, B, K)                                            \
-  "addu             %[temp5],   %[temp0],       %[temp1]        \n\t"          \
-  "subu             %[temp6],   %[temp0],       %[temp2]        \n\t"          \
-  "addu             %[temp7],   %[temp0],       %[temp4]        \n\t"          \
-".if " #K "                                                     \n\t"          \
-  "lbu              %[temp0],   1(%[y])                         \n\t"          \
-".endif                                                         \n\t"          \
-  "shll_s.w         %[temp5],   %[temp5],       17              \n\t"          \
-  "shll_s.w         %[temp6],   %[temp6],       17              \n\t"          \
-".if " #K "                                                     \n\t"          \
-  "mul              %[temp0],   %[t_con_5],     %[temp0]        \n\t"          \
-".endif                                                         \n\t"          \
-  "shll_s.w         %[temp7],   %[temp7],       17              \n\t"          \
-  "precrqu_s.qb.ph  %[temp5],   %[temp5],       $zero           \n\t"          \
-  "precrqu_s.qb.ph  %[temp6],   %[temp6],       $zero           \n\t"          \
-  "precrqu_s.qb.ph  %[temp7],   %[temp7],       $zero           \n\t"          \
-  "srl              %[temp5],   %[temp5],       24              \n\t"          \
-  "srl              %[temp6],   %[temp6],       24              \n\t"          \
-  "srl              %[temp7],   %[temp7],       24              \n\t"          \
-  "sb               %[temp5],   " #R "(%[dst])                  \n\t"          \
-  "sb               %[temp6],   " #G "(%[dst])                  \n\t"          \
-  "sb               %[temp7],   " #B "(%[dst])                  \n\t"          \
-
-#define ASM_CLOBBER_LIST()                                                     \
-  : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),             \
-    [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5),             \
-    [temp6]"=&r"(temp6), [temp7]"=&r"(temp7)                                   \
-  : [t_con_1]"r"(t_con_1), [t_con_2]"r"(t_con_2), [t_con_3]"r"(t_con_3),       \
-    [t_con_4]"r"(t_con_4), [t_con_5]"r"(t_con_5), [t_con_6]"r"(t_con_6),       \
-    [u]"r"(u), [v]"r"(v), [y]"r"(y), [dst]"r"(dst),                            \
-    [t_con_7]"r"(t_con_7), [t_con_8]"r"(t_con_8)                               \
-  : "memory", "hi", "lo"                                                       \
-
-#define ROW_FUNC(FUNC_NAME, XSTEP, R, G, B, A)                                 \
-static void FUNC_NAME(const uint8_t* y,                                        \
-                      const uint8_t* u, const uint8_t* v,                      \
-                      uint8_t* dst, int len) {                                 \
-  int i;                                                                       \
-  uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;             \
-  const int t_con_1 = 26149;                                                   \
-  const int t_con_2 = 13320;                                                   \
-  const int t_con_3 = 6419;                                                    \
-  const int t_con_4 = 33050;                                                   \
-  const int t_con_5 = 19077;                                                   \
-  const int t_con_6 = 14234;                                                   \
-  const int t_con_7 = 8708;                                                    \
-  const int t_con_8 = 17685;                                                   \
-  for (i = 0; i < (len >> 1); i++) {                                           \
-    __asm__ volatile (                                                         \
-      ROW_FUNC_PART_1()                                                        \
-      ROW_FUNC_PART_2(R, G, B, 1)                                              \
-      ROW_FUNC_PART_2(R + XSTEP, G + XSTEP, B + XSTEP, 0)                      \
-      ASM_CLOBBER_LIST()                                                       \
-    );                                                                         \
-    if (A) dst[A] = dst[A + XSTEP] = 0xff;                                     \
-    y += 2;                                                                    \
-    ++u;                                                                       \
-    ++v;                                                                       \
-    dst += 2 * XSTEP;                                                          \
-  }                                                                            \
-  if (len & 1) {                                                               \
-    __asm__ volatile (                                                         \
-      ROW_FUNC_PART_1()                                                        \
-      ROW_FUNC_PART_2(R, G, B, 0)                                              \
-      ASM_CLOBBER_LIST()                                                       \
-    );                                                                         \
-    if (A) dst[A] = 0xff;                                                      \
-  }                                                                            \
-}
-
-ROW_FUNC(YuvToRgbRow_MIPSdspR2,      3, 0, 1, 2, 0)
-ROW_FUNC(YuvToRgbaRow_MIPSdspR2,     4, 0, 1, 2, 3)
-ROW_FUNC(YuvToBgrRow_MIPSdspR2,      3, 2, 1, 0, 0)
-ROW_FUNC(YuvToBgraRow_MIPSdspR2,     4, 2, 1, 0, 3)
-
-#undef ROW_FUNC
-#undef ASM_CLOBBER_LIST
-#undef ROW_FUNC_PART_2
-#undef ROW_FUNC_PART_1
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitSamplersMIPSdspR2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersMIPSdspR2(void) {
-  WebPSamplers[MODE_RGB]  = YuvToRgbRow_MIPSdspR2;
-  WebPSamplers[MODE_RGBA] = YuvToRgbaRow_MIPSdspR2;
-  WebPSamplers[MODE_BGR]  = YuvToBgrRow_MIPSdspR2;
-  WebPSamplers[MODE_BGRA] = YuvToBgraRow_MIPSdspR2;
-}
-
-#else  // !WEBP_USE_MIPS_DSP_R2
-
-WEBP_DSP_INIT_STUB(WebPInitSamplersMIPSdspR2)
-
-#endif  // WEBP_USE_MIPS_DSP_R2
diff --git a/ios/Pods/libwebp/src/dsp/yuv_neon.c b/ios/Pods/libwebp/src/dsp/yuv_neon.c
deleted file mode 100644
index a34d602..0000000
--- a/ios/Pods/libwebp/src/dsp/yuv_neon.c
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// YUV->RGB conversion functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/yuv.h"
-
-#if defined(WEBP_USE_NEON)
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "src/dsp/neon.h"
-
-//-----------------------------------------------------------------------------
-
-static uint8x8_t ConvertRGBToY_NEON(const uint8x8_t R,
-                                    const uint8x8_t G,
-                                    const uint8x8_t B) {
-  const uint16x8_t r = vmovl_u8(R);
-  const uint16x8_t g = vmovl_u8(G);
-  const uint16x8_t b = vmovl_u8(B);
-  const uint16x4_t r_lo = vget_low_u16(r);
-  const uint16x4_t r_hi = vget_high_u16(r);
-  const uint16x4_t g_lo = vget_low_u16(g);
-  const uint16x4_t g_hi = vget_high_u16(g);
-  const uint16x4_t b_lo = vget_low_u16(b);
-  const uint16x4_t b_hi = vget_high_u16(b);
-  const uint32x4_t tmp0_lo = vmull_n_u16(         r_lo, 16839u);
-  const uint32x4_t tmp0_hi = vmull_n_u16(         r_hi, 16839u);
-  const uint32x4_t tmp1_lo = vmlal_n_u16(tmp0_lo, g_lo, 33059u);
-  const uint32x4_t tmp1_hi = vmlal_n_u16(tmp0_hi, g_hi, 33059u);
-  const uint32x4_t tmp2_lo = vmlal_n_u16(tmp1_lo, b_lo, 6420u);
-  const uint32x4_t tmp2_hi = vmlal_n_u16(tmp1_hi, b_hi, 6420u);
-  const uint16x8_t Y1 = vcombine_u16(vrshrn_n_u32(tmp2_lo, 16),
-                                     vrshrn_n_u32(tmp2_hi, 16));
-  const uint16x8_t Y2 = vaddq_u16(Y1, vdupq_n_u16(16));
-  return vqmovn_u16(Y2);
-}
-
-static void ConvertRGB24ToY_NEON(const uint8_t* rgb, uint8_t* y, int width) {
-  int i;
-  for (i = 0; i + 8 <= width; i += 8, rgb += 3 * 8) {
-    const uint8x8x3_t RGB = vld3_u8(rgb);
-    const uint8x8_t Y = ConvertRGBToY_NEON(RGB.val[0], RGB.val[1], RGB.val[2]);
-    vst1_u8(y + i, Y);
-  }
-  for (; i < width; ++i, rgb += 3) {   // left-over
-    y[i] = VP8RGBToY(rgb[0], rgb[1], rgb[2], YUV_HALF);
-  }
-}
-
-static void ConvertBGR24ToY_NEON(const uint8_t* bgr, uint8_t* y, int width) {
-  int i;
-  for (i = 0; i + 8 <= width; i += 8, bgr += 3 * 8) {
-    const uint8x8x3_t BGR = vld3_u8(bgr);
-    const uint8x8_t Y = ConvertRGBToY_NEON(BGR.val[2], BGR.val[1], BGR.val[0]);
-    vst1_u8(y + i, Y);
-  }
-  for (; i < width; ++i, bgr += 3) {  // left-over
-    y[i] = VP8RGBToY(bgr[2], bgr[1], bgr[0], YUV_HALF);
-  }
-}
-
-static void ConvertARGBToY_NEON(const uint32_t* argb, uint8_t* y, int width) {
-  int i;
-  for (i = 0; i + 8 <= width; i += 8) {
-    const uint8x8x4_t RGB = vld4_u8((const uint8_t*)&argb[i]);
-    const uint8x8_t Y = ConvertRGBToY_NEON(RGB.val[2], RGB.val[1], RGB.val[0]);
-    vst1_u8(y + i, Y);
-  }
-  for (; i < width; ++i) {   // left-over
-    const uint32_t p = argb[i];
-    y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >>  0) & 0xff,
-                     YUV_HALF);
-  }
-}
-
-//-----------------------------------------------------------------------------
-
-// computes: DST_s16 = [(C0 * r + C1 * g + C2 * b) >> 16] + CST
-#define MULTIPLY_16b_PREAMBLE(r, g, b)                           \
-  const int16x4_t r_lo = vreinterpret_s16_u16(vget_low_u16(r));  \
-  const int16x4_t r_hi = vreinterpret_s16_u16(vget_high_u16(r)); \
-  const int16x4_t g_lo = vreinterpret_s16_u16(vget_low_u16(g));  \
-  const int16x4_t g_hi = vreinterpret_s16_u16(vget_high_u16(g)); \
-  const int16x4_t b_lo = vreinterpret_s16_u16(vget_low_u16(b));  \
-  const int16x4_t b_hi = vreinterpret_s16_u16(vget_high_u16(b))
-
-#define MULTIPLY_16b(C0, C1, C2, CST, DST_s16) do {              \
-  const int32x4_t tmp0_lo = vmull_n_s16(         r_lo, C0);      \
-  const int32x4_t tmp0_hi = vmull_n_s16(         r_hi, C0);      \
-  const int32x4_t tmp1_lo = vmlal_n_s16(tmp0_lo, g_lo, C1);      \
-  const int32x4_t tmp1_hi = vmlal_n_s16(tmp0_hi, g_hi, C1);      \
-  const int32x4_t tmp2_lo = vmlal_n_s16(tmp1_lo, b_lo, C2);      \
-  const int32x4_t tmp2_hi = vmlal_n_s16(tmp1_hi, b_hi, C2);      \
-  const int16x8_t tmp3 = vcombine_s16(vshrn_n_s32(tmp2_lo, 16),  \
-                                      vshrn_n_s32(tmp2_hi, 16)); \
-  DST_s16 = vaddq_s16(tmp3, vdupq_n_s16(CST));                   \
-} while (0)
-
-// This needs to be a macro, since (128 << SHIFT) needs to be an immediate.
-#define CONVERT_RGB_TO_UV(r, g, b, SHIFT, U_DST, V_DST) do {     \
-  MULTIPLY_16b_PREAMBLE(r, g, b);                                \
-  MULTIPLY_16b(-9719, -19081, 28800, 128 << SHIFT, U_DST);       \
-  MULTIPLY_16b(28800, -24116, -4684, 128 << SHIFT, V_DST);       \
-} while (0)
-
-static void ConvertRGBA32ToUV_NEON(const uint16_t* rgb,
-                                   uint8_t* u, uint8_t* v, int width) {
-  int i;
-  for (i = 0; i + 8 <= width; i += 8, rgb += 4 * 8) {
-    const uint16x8x4_t RGB = vld4q_u16((const uint16_t*)rgb);
-    int16x8_t U, V;
-    CONVERT_RGB_TO_UV(RGB.val[0], RGB.val[1], RGB.val[2], 2, U, V);
-    vst1_u8(u + i, vqrshrun_n_s16(U, 2));
-    vst1_u8(v + i, vqrshrun_n_s16(V, 2));
-  }
-  for (; i < width; i += 1, rgb += 4) {
-    const int r = rgb[0], g = rgb[1], b = rgb[2];
-    u[i] = VP8RGBToU(r, g, b, YUV_HALF << 2);
-    v[i] = VP8RGBToV(r, g, b, YUV_HALF << 2);
-  }
-}
-
-static void ConvertARGBToUV_NEON(const uint32_t* argb, uint8_t* u, uint8_t* v,
-                                 int src_width, int do_store) {
-  int i;
-  for (i = 0; i + 16 <= src_width; i += 16, u += 8, v += 8) {
-    const uint8x16x4_t RGB = vld4q_u8((const uint8_t*)&argb[i]);
-    const uint16x8_t R = vpaddlq_u8(RGB.val[2]);  // pair-wise adds
-    const uint16x8_t G = vpaddlq_u8(RGB.val[1]);
-    const uint16x8_t B = vpaddlq_u8(RGB.val[0]);
-    int16x8_t U_tmp, V_tmp;
-    CONVERT_RGB_TO_UV(R, G, B, 1, U_tmp, V_tmp);
-    {
-      const uint8x8_t U = vqrshrun_n_s16(U_tmp, 1);
-      const uint8x8_t V = vqrshrun_n_s16(V_tmp, 1);
-      if (do_store) {
-        vst1_u8(u, U);
-        vst1_u8(v, V);
-      } else {
-        const uint8x8_t prev_u = vld1_u8(u);
-        const uint8x8_t prev_v = vld1_u8(v);
-        vst1_u8(u, vrhadd_u8(U, prev_u));
-        vst1_u8(v, vrhadd_u8(V, prev_v));
-      }
-    }
-  }
-  if (i < src_width) {  // left-over
-    WebPConvertARGBToUV_C(argb + i, u, v, src_width - i, do_store);
-  }
-}
-
-
-//------------------------------------------------------------------------------
-
-extern void WebPInitConvertARGBToYUVNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitConvertARGBToYUVNEON(void) {
-  WebPConvertRGB24ToY = ConvertRGB24ToY_NEON;
-  WebPConvertBGR24ToY = ConvertBGR24ToY_NEON;
-  WebPConvertARGBToY = ConvertARGBToY_NEON;
-  WebPConvertARGBToUV = ConvertARGBToUV_NEON;
-  WebPConvertRGBA32ToUV = ConvertRGBA32ToUV_NEON;
-}
-
-//------------------------------------------------------------------------------
-
-#define MAX_Y ((1 << 10) - 1)    // 10b precision over 16b-arithmetic
-static uint16_t clip_y_NEON(int v) {
-  return (v < 0) ? 0 : (v > MAX_Y) ? MAX_Y : (uint16_t)v;
-}
-
-static uint64_t SharpYUVUpdateY_NEON(const uint16_t* ref, const uint16_t* src,
-                                     uint16_t* dst, int len) {
-  int i;
-  const int16x8_t zero = vdupq_n_s16(0);
-  const int16x8_t max = vdupq_n_s16(MAX_Y);
-  uint64x2_t sum = vdupq_n_u64(0);
-  uint64_t diff;
-
-  for (i = 0; i + 8 <= len; i += 8) {
-    const int16x8_t A = vreinterpretq_s16_u16(vld1q_u16(ref + i));
-    const int16x8_t B = vreinterpretq_s16_u16(vld1q_u16(src + i));
-    const int16x8_t C = vreinterpretq_s16_u16(vld1q_u16(dst + i));
-    const int16x8_t D = vsubq_s16(A, B);       // diff_y
-    const int16x8_t F = vaddq_s16(C, D);       // new_y
-    const uint16x8_t H =
-        vreinterpretq_u16_s16(vmaxq_s16(vminq_s16(F, max), zero));
-    const int16x8_t I = vabsq_s16(D);          // abs(diff_y)
-    vst1q_u16(dst + i, H);
-    sum = vpadalq_u32(sum, vpaddlq_u16(vreinterpretq_u16_s16(I)));
-  }
-  diff = vgetq_lane_u64(sum, 0) + vgetq_lane_u64(sum, 1);
-  for (; i < len; ++i) {
-    const int diff_y = ref[i] - src[i];
-    const int new_y = (int)(dst[i]) + diff_y;
-    dst[i] = clip_y_NEON(new_y);
-    diff += (uint64_t)(abs(diff_y));
-  }
-  return diff;
-}
-
-static void SharpYUVUpdateRGB_NEON(const int16_t* ref, const int16_t* src,
-                                   int16_t* dst, int len) {
-  int i;
-  for (i = 0; i + 8 <= len; i += 8) {
-    const int16x8_t A = vld1q_s16(ref + i);
-    const int16x8_t B = vld1q_s16(src + i);
-    const int16x8_t C = vld1q_s16(dst + i);
-    const int16x8_t D = vsubq_s16(A, B);   // diff_uv
-    const int16x8_t E = vaddq_s16(C, D);   // new_uv
-    vst1q_s16(dst + i, E);
-  }
-  for (; i < len; ++i) {
-    const int diff_uv = ref[i] - src[i];
-    dst[i] += diff_uv;
-  }
-}
-
-static void SharpYUVFilterRow_NEON(const int16_t* A, const int16_t* B, int len,
-                                   const uint16_t* best_y, uint16_t* out) {
-  int i;
-  const int16x8_t max = vdupq_n_s16(MAX_Y);
-  const int16x8_t zero = vdupq_n_s16(0);
-  for (i = 0; i + 8 <= len; i += 8) {
-    const int16x8_t a0 = vld1q_s16(A + i + 0);
-    const int16x8_t a1 = vld1q_s16(A + i + 1);
-    const int16x8_t b0 = vld1q_s16(B + i + 0);
-    const int16x8_t b1 = vld1q_s16(B + i + 1);
-    const int16x8_t a0b1 = vaddq_s16(a0, b1);
-    const int16x8_t a1b0 = vaddq_s16(a1, b0);
-    const int16x8_t a0a1b0b1 = vaddq_s16(a0b1, a1b0);  // A0+A1+B0+B1
-    const int16x8_t a0b1_2 = vaddq_s16(a0b1, a0b1);    // 2*(A0+B1)
-    const int16x8_t a1b0_2 = vaddq_s16(a1b0, a1b0);    // 2*(A1+B0)
-    const int16x8_t c0 = vshrq_n_s16(vaddq_s16(a0b1_2, a0a1b0b1), 3);
-    const int16x8_t c1 = vshrq_n_s16(vaddq_s16(a1b0_2, a0a1b0b1), 3);
-    const int16x8_t d0 = vaddq_s16(c1, a0);
-    const int16x8_t d1 = vaddq_s16(c0, a1);
-    const int16x8_t e0 = vrshrq_n_s16(d0, 1);
-    const int16x8_t e1 = vrshrq_n_s16(d1, 1);
-    const int16x8x2_t f = vzipq_s16(e0, e1);
-    const int16x8_t g0 = vreinterpretq_s16_u16(vld1q_u16(best_y + 2 * i + 0));
-    const int16x8_t g1 = vreinterpretq_s16_u16(vld1q_u16(best_y + 2 * i + 8));
-    const int16x8_t h0 = vaddq_s16(g0, f.val[0]);
-    const int16x8_t h1 = vaddq_s16(g1, f.val[1]);
-    const int16x8_t i0 = vmaxq_s16(vminq_s16(h0, max), zero);
-    const int16x8_t i1 = vmaxq_s16(vminq_s16(h1, max), zero);
-    vst1q_u16(out + 2 * i + 0, vreinterpretq_u16_s16(i0));
-    vst1q_u16(out + 2 * i + 8, vreinterpretq_u16_s16(i1));
-  }
-  for (; i < len; ++i) {
-    const int a0b1 = A[i + 0] + B[i + 1];
-    const int a1b0 = A[i + 1] + B[i + 0];
-    const int a0a1b0b1 = a0b1 + a1b0 + 8;
-    const int v0 = (8 * A[i + 0] + 2 * a1b0 + a0a1b0b1) >> 4;
-    const int v1 = (8 * A[i + 1] + 2 * a0b1 + a0a1b0b1) >> 4;
-    out[2 * i + 0] = clip_y_NEON(best_y[2 * i + 0] + v0);
-    out[2 * i + 1] = clip_y_NEON(best_y[2 * i + 1] + v1);
-  }
-}
-#undef MAX_Y
-
-//------------------------------------------------------------------------------
-
-extern void WebPInitSharpYUVNEON(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitSharpYUVNEON(void) {
-  WebPSharpYUVUpdateY = SharpYUVUpdateY_NEON;
-  WebPSharpYUVUpdateRGB = SharpYUVUpdateRGB_NEON;
-  WebPSharpYUVFilterRow = SharpYUVFilterRow_NEON;
-}
-
-#else  // !WEBP_USE_NEON
-
-WEBP_DSP_INIT_STUB(WebPInitConvertARGBToYUVNEON)
-WEBP_DSP_INIT_STUB(WebPInitSharpYUVNEON)
-
-#endif  // WEBP_USE_NEON
diff --git a/ios/Pods/libwebp/src/dsp/yuv_sse2.c b/ios/Pods/libwebp/src/dsp/yuv_sse2.c
deleted file mode 100644
index baa48d5..0000000
--- a/ios/Pods/libwebp/src/dsp/yuv_sse2.c
+++ /dev/null
@@ -1,874 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// YUV->RGB conversion functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/yuv.h"
-
-#if defined(WEBP_USE_SSE2)
-
-#include "src/dsp/common_sse2.h"
-#include <stdlib.h>
-#include <emmintrin.h>
-
-//-----------------------------------------------------------------------------
-// Convert spans of 32 pixels to various RGB formats for the fancy upsampler.
-
-// These constants are 14b fixed-point version of ITU-R BT.601 constants.
-// R = (19077 * y             + 26149 * v - 14234) >> 6
-// G = (19077 * y -  6419 * u - 13320 * v +  8708) >> 6
-// B = (19077 * y + 33050 * u             - 17685) >> 6
-static void ConvertYUV444ToRGB_SSE2(const __m128i* const Y0,
-                                    const __m128i* const U0,
-                                    const __m128i* const V0,
-                                    __m128i* const R,
-                                    __m128i* const G,
-                                    __m128i* const B) {
-  const __m128i k19077 = _mm_set1_epi16(19077);
-  const __m128i k26149 = _mm_set1_epi16(26149);
-  const __m128i k14234 = _mm_set1_epi16(14234);
-  // 33050 doesn't fit in a signed short: only use this with unsigned arithmetic
-  const __m128i k33050 = _mm_set1_epi16((short)33050);
-  const __m128i k17685 = _mm_set1_epi16(17685);
-  const __m128i k6419  = _mm_set1_epi16(6419);
-  const __m128i k13320 = _mm_set1_epi16(13320);
-  const __m128i k8708  = _mm_set1_epi16(8708);
-
-  const __m128i Y1 = _mm_mulhi_epu16(*Y0, k19077);
-
-  const __m128i R0 = _mm_mulhi_epu16(*V0, k26149);
-  const __m128i R1 = _mm_sub_epi16(Y1, k14234);
-  const __m128i R2 = _mm_add_epi16(R1, R0);
-
-  const __m128i G0 = _mm_mulhi_epu16(*U0, k6419);
-  const __m128i G1 = _mm_mulhi_epu16(*V0, k13320);
-  const __m128i G2 = _mm_add_epi16(Y1, k8708);
-  const __m128i G3 = _mm_add_epi16(G0, G1);
-  const __m128i G4 = _mm_sub_epi16(G2, G3);
-
-  // be careful with the saturated *unsigned* arithmetic here!
-  const __m128i B0 = _mm_mulhi_epu16(*U0, k33050);
-  const __m128i B1 = _mm_adds_epu16(B0, Y1);
-  const __m128i B2 = _mm_subs_epu16(B1, k17685);
-
-  // use logical shift for B2, which can be larger than 32767
-  *R = _mm_srai_epi16(R2, 6);   // range: [-14234, 30815]
-  *G = _mm_srai_epi16(G4, 6);   // range: [-10953, 27710]
-  *B = _mm_srli_epi16(B2, 6);   // range: [0, 34238]
-}
-
-// Load the bytes into the *upper* part of 16b words. That's "<< 8", basically.
-static WEBP_INLINE __m128i Load_HI_16_SSE2(const uint8_t* src) {
-  const __m128i zero = _mm_setzero_si128();
-  return _mm_unpacklo_epi8(zero, _mm_loadl_epi64((const __m128i*)src));
-}
-
-// Load and replicate the U/V samples
-static WEBP_INLINE __m128i Load_UV_HI_8_SSE2(const uint8_t* src) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i tmp0 = _mm_cvtsi32_si128(*(const uint32_t*)src);
-  const __m128i tmp1 = _mm_unpacklo_epi8(zero, tmp0);
-  return _mm_unpacklo_epi16(tmp1, tmp1);   // replicate samples
-}
-
-// Convert 32 samples of YUV444 to R/G/B
-static void YUV444ToRGB_SSE2(const uint8_t* const y,
-                             const uint8_t* const u,
-                             const uint8_t* const v,
-                             __m128i* const R, __m128i* const G,
-                             __m128i* const B) {
-  const __m128i Y0 = Load_HI_16_SSE2(y), U0 = Load_HI_16_SSE2(u),
-                V0 = Load_HI_16_SSE2(v);
-  ConvertYUV444ToRGB_SSE2(&Y0, &U0, &V0, R, G, B);
-}
-
-// Convert 32 samples of YUV420 to R/G/B
-static void YUV420ToRGB_SSE2(const uint8_t* const y,
-                             const uint8_t* const u,
-                             const uint8_t* const v,
-                             __m128i* const R, __m128i* const G,
-                             __m128i* const B) {
-  const __m128i Y0 = Load_HI_16_SSE2(y), U0 = Load_UV_HI_8_SSE2(u),
-                V0 = Load_UV_HI_8_SSE2(v);
-  ConvertYUV444ToRGB_SSE2(&Y0, &U0, &V0, R, G, B);
-}
-
-// Pack R/G/B/A results into 32b output.
-static WEBP_INLINE void PackAndStore4_SSE2(const __m128i* const R,
-                                           const __m128i* const G,
-                                           const __m128i* const B,
-                                           const __m128i* const A,
-                                           uint8_t* const dst) {
-  const __m128i rb = _mm_packus_epi16(*R, *B);
-  const __m128i ga = _mm_packus_epi16(*G, *A);
-  const __m128i rg = _mm_unpacklo_epi8(rb, ga);
-  const __m128i ba = _mm_unpackhi_epi8(rb, ga);
-  const __m128i RGBA_lo = _mm_unpacklo_epi16(rg, ba);
-  const __m128i RGBA_hi = _mm_unpackhi_epi16(rg, ba);
-  _mm_storeu_si128((__m128i*)(dst +  0), RGBA_lo);
-  _mm_storeu_si128((__m128i*)(dst + 16), RGBA_hi);
-}
-
-// Pack R/G/B/A results into 16b output.
-static WEBP_INLINE void PackAndStore4444_SSE2(const __m128i* const R,
-                                              const __m128i* const G,
-                                              const __m128i* const B,
-                                              const __m128i* const A,
-                                              uint8_t* const dst) {
-#if (WEBP_SWAP_16BIT_CSP == 0)
-  const __m128i rg0 = _mm_packus_epi16(*R, *G);
-  const __m128i ba0 = _mm_packus_epi16(*B, *A);
-#else
-  const __m128i rg0 = _mm_packus_epi16(*B, *A);
-  const __m128i ba0 = _mm_packus_epi16(*R, *G);
-#endif
-  const __m128i mask_0xf0 = _mm_set1_epi8(0xf0);
-  const __m128i rb1 = _mm_unpacklo_epi8(rg0, ba0);  // rbrbrbrbrb...
-  const __m128i ga1 = _mm_unpackhi_epi8(rg0, ba0);  // gagagagaga...
-  const __m128i rb2 = _mm_and_si128(rb1, mask_0xf0);
-  const __m128i ga2 = _mm_srli_epi16(_mm_and_si128(ga1, mask_0xf0), 4);
-  const __m128i rgba4444 = _mm_or_si128(rb2, ga2);
-  _mm_storeu_si128((__m128i*)dst, rgba4444);
-}
-
-// Pack R/G/B results into 16b output.
-static WEBP_INLINE void PackAndStore565_SSE2(const __m128i* const R,
-                                             const __m128i* const G,
-                                             const __m128i* const B,
-                                             uint8_t* const dst) {
-  const __m128i r0 = _mm_packus_epi16(*R, *R);
-  const __m128i g0 = _mm_packus_epi16(*G, *G);
-  const __m128i b0 = _mm_packus_epi16(*B, *B);
-  const __m128i r1 = _mm_and_si128(r0, _mm_set1_epi8(0xf8));
-  const __m128i b1 = _mm_and_si128(_mm_srli_epi16(b0, 3), _mm_set1_epi8(0x1f));
-  const __m128i g1 = _mm_srli_epi16(_mm_and_si128(g0, _mm_set1_epi8(0xe0)), 5);
-  const __m128i g2 = _mm_slli_epi16(_mm_and_si128(g0, _mm_set1_epi8(0x1c)), 3);
-  const __m128i rg = _mm_or_si128(r1, g1);
-  const __m128i gb = _mm_or_si128(g2, b1);
-#if (WEBP_SWAP_16BIT_CSP == 0)
-  const __m128i rgb565 = _mm_unpacklo_epi8(rg, gb);
-#else
-  const __m128i rgb565 = _mm_unpacklo_epi8(gb, rg);
-#endif
-  _mm_storeu_si128((__m128i*)dst, rgb565);
-}
-
-// Pack the planar buffers
-// rrrr... rrrr... gggg... gggg... bbbb... bbbb....
-// triplet by triplet in the output buffer rgb as rgbrgbrgbrgb ...
-static WEBP_INLINE void PlanarTo24b_SSE2(__m128i* const in0, __m128i* const in1,
-                                         __m128i* const in2, __m128i* const in3,
-                                         __m128i* const in4, __m128i* const in5,
-                                         uint8_t* const rgb) {
-  // The input is 6 registers of sixteen 8b but for the sake of explanation,
-  // let's take 6 registers of four 8b values.
-  // To pack, we will keep taking one every two 8b integer and move it
-  // around as follows:
-  // Input:
-  //   r0r1r2r3 | r4r5r6r7 | g0g1g2g3 | g4g5g6g7 | b0b1b2b3 | b4b5b6b7
-  // Split the 6 registers in two sets of 3 registers: the first set as the even
-  // 8b bytes, the second the odd ones:
-  //   r0r2r4r6 | g0g2g4g6 | b0b2b4b6 | r1r3r5r7 | g1g3g5g7 | b1b3b5b7
-  // Repeat the same permutations twice more:
-  //   r0r4g0g4 | b0b4r1r5 | g1g5b1b5 | r2r6g2g6 | b2b6r3r7 | g3g7b3b7
-  //   r0g0b0r1 | g1b1r2g2 | b2r3g3b3 | r4g4b4r5 | g5b5r6g6 | b6r7g7b7
-  VP8PlanarTo24b_SSE2(in0, in1, in2, in3, in4, in5);
-
-  _mm_storeu_si128((__m128i*)(rgb +  0), *in0);
-  _mm_storeu_si128((__m128i*)(rgb + 16), *in1);
-  _mm_storeu_si128((__m128i*)(rgb + 32), *in2);
-  _mm_storeu_si128((__m128i*)(rgb + 48), *in3);
-  _mm_storeu_si128((__m128i*)(rgb + 64), *in4);
-  _mm_storeu_si128((__m128i*)(rgb + 80), *in5);
-}
-
-void VP8YuvToRgba32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst) {
-  const __m128i kAlpha = _mm_set1_epi16(255);
-  int n;
-  for (n = 0; n < 32; n += 8, dst += 32) {
-    __m128i R, G, B;
-    YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B);
-    PackAndStore4_SSE2(&R, &G, &B, &kAlpha, dst);
-  }
-}
-
-void VP8YuvToBgra32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst) {
-  const __m128i kAlpha = _mm_set1_epi16(255);
-  int n;
-  for (n = 0; n < 32; n += 8, dst += 32) {
-    __m128i R, G, B;
-    YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B);
-    PackAndStore4_SSE2(&B, &G, &R, &kAlpha, dst);
-  }
-}
-
-void VP8YuvToArgb32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst) {
-  const __m128i kAlpha = _mm_set1_epi16(255);
-  int n;
-  for (n = 0; n < 32; n += 8, dst += 32) {
-    __m128i R, G, B;
-    YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B);
-    PackAndStore4_SSE2(&kAlpha, &R, &G, &B, dst);
-  }
-}
-
-void VP8YuvToRgba444432_SSE2(const uint8_t* y, const uint8_t* u,
-                             const uint8_t* v, uint8_t* dst) {
-  const __m128i kAlpha = _mm_set1_epi16(255);
-  int n;
-  for (n = 0; n < 32; n += 8, dst += 16) {
-    __m128i R, G, B;
-    YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B);
-    PackAndStore4444_SSE2(&R, &G, &B, &kAlpha, dst);
-  }
-}
-
-void VP8YuvToRgb56532_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                           uint8_t* dst) {
-  int n;
-  for (n = 0; n < 32; n += 8, dst += 16) {
-    __m128i R, G, B;
-    YUV444ToRGB_SSE2(y + n, u + n, v + n, &R, &G, &B);
-    PackAndStore565_SSE2(&R, &G, &B, dst);
-  }
-}
-
-void VP8YuvToRgb32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                        uint8_t* dst) {
-  __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3;
-  __m128i rgb0, rgb1, rgb2, rgb3, rgb4, rgb5;
-
-  YUV444ToRGB_SSE2(y + 0, u + 0, v + 0, &R0, &G0, &B0);
-  YUV444ToRGB_SSE2(y + 8, u + 8, v + 8, &R1, &G1, &B1);
-  YUV444ToRGB_SSE2(y + 16, u + 16, v + 16, &R2, &G2, &B2);
-  YUV444ToRGB_SSE2(y + 24, u + 24, v + 24, &R3, &G3, &B3);
-
-  // Cast to 8b and store as RRRRGGGGBBBB.
-  rgb0 = _mm_packus_epi16(R0, R1);
-  rgb1 = _mm_packus_epi16(R2, R3);
-  rgb2 = _mm_packus_epi16(G0, G1);
-  rgb3 = _mm_packus_epi16(G2, G3);
-  rgb4 = _mm_packus_epi16(B0, B1);
-  rgb5 = _mm_packus_epi16(B2, B3);
-
-  // Pack as RGBRGBRGBRGB.
-  PlanarTo24b_SSE2(&rgb0, &rgb1, &rgb2, &rgb3, &rgb4, &rgb5, dst);
-}
-
-void VP8YuvToBgr32_SSE2(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                        uint8_t* dst) {
-  __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3;
-  __m128i bgr0, bgr1, bgr2, bgr3, bgr4, bgr5;
-
-  YUV444ToRGB_SSE2(y +  0, u +  0, v +  0, &R0, &G0, &B0);
-  YUV444ToRGB_SSE2(y +  8, u +  8, v +  8, &R1, &G1, &B1);
-  YUV444ToRGB_SSE2(y + 16, u + 16, v + 16, &R2, &G2, &B2);
-  YUV444ToRGB_SSE2(y + 24, u + 24, v + 24, &R3, &G3, &B3);
-
-  // Cast to 8b and store as BBBBGGGGRRRR.
-  bgr0 = _mm_packus_epi16(B0, B1);
-  bgr1 = _mm_packus_epi16(B2, B3);
-  bgr2 = _mm_packus_epi16(G0, G1);
-  bgr3 = _mm_packus_epi16(G2, G3);
-  bgr4 = _mm_packus_epi16(R0, R1);
-  bgr5= _mm_packus_epi16(R2, R3);
-
-  // Pack as BGRBGRBGRBGR.
-  PlanarTo24b_SSE2(&bgr0, &bgr1, &bgr2, &bgr3, &bgr4, &bgr5, dst);
-}
-
-//-----------------------------------------------------------------------------
-// Arbitrary-length row conversion functions
-
-static void YuvToRgbaRow_SSE2(const uint8_t* y,
-                              const uint8_t* u, const uint8_t* v,
-                              uint8_t* dst, int len) {
-  const __m128i kAlpha = _mm_set1_epi16(255);
-  int n;
-  for (n = 0; n + 8 <= len; n += 8, dst += 32) {
-    __m128i R, G, B;
-    YUV420ToRGB_SSE2(y, u, v, &R, &G, &B);
-    PackAndStore4_SSE2(&R, &G, &B, &kAlpha, dst);
-    y += 8;
-    u += 4;
-    v += 4;
-  }
-  for (; n < len; ++n) {   // Finish off
-    VP8YuvToRgba(y[0], u[0], v[0], dst);
-    dst += 4;
-    y += 1;
-    u += (n & 1);
-    v += (n & 1);
-  }
-}
-
-static void YuvToBgraRow_SSE2(const uint8_t* y,
-                              const uint8_t* u, const uint8_t* v,
-                              uint8_t* dst, int len) {
-  const __m128i kAlpha = _mm_set1_epi16(255);
-  int n;
-  for (n = 0; n + 8 <= len; n += 8, dst += 32) {
-    __m128i R, G, B;
-    YUV420ToRGB_SSE2(y, u, v, &R, &G, &B);
-    PackAndStore4_SSE2(&B, &G, &R, &kAlpha, dst);
-    y += 8;
-    u += 4;
-    v += 4;
-  }
-  for (; n < len; ++n) {   // Finish off
-    VP8YuvToBgra(y[0], u[0], v[0], dst);
-    dst += 4;
-    y += 1;
-    u += (n & 1);
-    v += (n & 1);
-  }
-}
-
-static void YuvToArgbRow_SSE2(const uint8_t* y,
-                              const uint8_t* u, const uint8_t* v,
-                              uint8_t* dst, int len) {
-  const __m128i kAlpha = _mm_set1_epi16(255);
-  int n;
-  for (n = 0; n + 8 <= len; n += 8, dst += 32) {
-    __m128i R, G, B;
-    YUV420ToRGB_SSE2(y, u, v, &R, &G, &B);
-    PackAndStore4_SSE2(&kAlpha, &R, &G, &B, dst);
-    y += 8;
-    u += 4;
-    v += 4;
-  }
-  for (; n < len; ++n) {   // Finish off
-    VP8YuvToArgb(y[0], u[0], v[0], dst);
-    dst += 4;
-    y += 1;
-    u += (n & 1);
-    v += (n & 1);
-  }
-}
-
-static void YuvToRgbRow_SSE2(const uint8_t* y,
-                             const uint8_t* u, const uint8_t* v,
-                             uint8_t* dst, int len) {
-  int n;
-  for (n = 0; n + 32 <= len; n += 32, dst += 32 * 3) {
-    __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3;
-    __m128i rgb0, rgb1, rgb2, rgb3, rgb4, rgb5;
-
-    YUV420ToRGB_SSE2(y +  0, u +  0, v +  0, &R0, &G0, &B0);
-    YUV420ToRGB_SSE2(y +  8, u +  4, v +  4, &R1, &G1, &B1);
-    YUV420ToRGB_SSE2(y + 16, u +  8, v +  8, &R2, &G2, &B2);
-    YUV420ToRGB_SSE2(y + 24, u + 12, v + 12, &R3, &G3, &B3);
-
-    // Cast to 8b and store as RRRRGGGGBBBB.
-    rgb0 = _mm_packus_epi16(R0, R1);
-    rgb1 = _mm_packus_epi16(R2, R3);
-    rgb2 = _mm_packus_epi16(G0, G1);
-    rgb3 = _mm_packus_epi16(G2, G3);
-    rgb4 = _mm_packus_epi16(B0, B1);
-    rgb5 = _mm_packus_epi16(B2, B3);
-
-    // Pack as RGBRGBRGBRGB.
-    PlanarTo24b_SSE2(&rgb0, &rgb1, &rgb2, &rgb3, &rgb4, &rgb5, dst);
-
-    y += 32;
-    u += 16;
-    v += 16;
-  }
-  for (; n < len; ++n) {   // Finish off
-    VP8YuvToRgb(y[0], u[0], v[0], dst);
-    dst += 3;
-    y += 1;
-    u += (n & 1);
-    v += (n & 1);
-  }
-}
-
-static void YuvToBgrRow_SSE2(const uint8_t* y,
-                             const uint8_t* u, const uint8_t* v,
-                             uint8_t* dst, int len) {
-  int n;
-  for (n = 0; n + 32 <= len; n += 32, dst += 32 * 3) {
-    __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3;
-    __m128i bgr0, bgr1, bgr2, bgr3, bgr4, bgr5;
-
-    YUV420ToRGB_SSE2(y +  0, u +  0, v +  0, &R0, &G0, &B0);
-    YUV420ToRGB_SSE2(y +  8, u +  4, v +  4, &R1, &G1, &B1);
-    YUV420ToRGB_SSE2(y + 16, u +  8, v +  8, &R2, &G2, &B2);
-    YUV420ToRGB_SSE2(y + 24, u + 12, v + 12, &R3, &G3, &B3);
-
-    // Cast to 8b and store as BBBBGGGGRRRR.
-    bgr0 = _mm_packus_epi16(B0, B1);
-    bgr1 = _mm_packus_epi16(B2, B3);
-    bgr2 = _mm_packus_epi16(G0, G1);
-    bgr3 = _mm_packus_epi16(G2, G3);
-    bgr4 = _mm_packus_epi16(R0, R1);
-    bgr5 = _mm_packus_epi16(R2, R3);
-
-    // Pack as BGRBGRBGRBGR.
-    PlanarTo24b_SSE2(&bgr0, &bgr1, &bgr2, &bgr3, &bgr4, &bgr5, dst);
-
-    y += 32;
-    u += 16;
-    v += 16;
-  }
-  for (; n < len; ++n) {   // Finish off
-    VP8YuvToBgr(y[0], u[0], v[0], dst);
-    dst += 3;
-    y += 1;
-    u += (n & 1);
-    v += (n & 1);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitSamplersSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersSSE2(void) {
-  WebPSamplers[MODE_RGB]  = YuvToRgbRow_SSE2;
-  WebPSamplers[MODE_RGBA] = YuvToRgbaRow_SSE2;
-  WebPSamplers[MODE_BGR]  = YuvToBgrRow_SSE2;
-  WebPSamplers[MODE_BGRA] = YuvToBgraRow_SSE2;
-  WebPSamplers[MODE_ARGB] = YuvToArgbRow_SSE2;
-}
-
-//------------------------------------------------------------------------------
-// RGB24/32 -> YUV converters
-
-// Load eight 16b-words from *src.
-#define LOAD_16(src) _mm_loadu_si128((const __m128i*)(src))
-// Store either 16b-words into *dst
-#define STORE_16(V, dst) _mm_storeu_si128((__m128i*)(dst), (V))
-
-// Function that inserts a value of the second half of the in buffer in between
-// every two char of the first half.
-static WEBP_INLINE void RGB24PackedToPlanarHelper_SSE2(
-    const __m128i* const in /*in[6]*/, __m128i* const out /*out[6]*/) {
-  out[0] = _mm_unpacklo_epi8(in[0], in[3]);
-  out[1] = _mm_unpackhi_epi8(in[0], in[3]);
-  out[2] = _mm_unpacklo_epi8(in[1], in[4]);
-  out[3] = _mm_unpackhi_epi8(in[1], in[4]);
-  out[4] = _mm_unpacklo_epi8(in[2], in[5]);
-  out[5] = _mm_unpackhi_epi8(in[2], in[5]);
-}
-
-// Unpack the 8b input rgbrgbrgbrgb ... as contiguous registers:
-// rrrr... rrrr... gggg... gggg... bbbb... bbbb....
-// Similar to PlanarTo24bHelper(), but in reverse order.
-static WEBP_INLINE void RGB24PackedToPlanar_SSE2(
-    const uint8_t* const rgb, __m128i* const out /*out[6]*/) {
-  __m128i tmp[6];
-  tmp[0] = _mm_loadu_si128((const __m128i*)(rgb +  0));
-  tmp[1] = _mm_loadu_si128((const __m128i*)(rgb + 16));
-  tmp[2] = _mm_loadu_si128((const __m128i*)(rgb + 32));
-  tmp[3] = _mm_loadu_si128((const __m128i*)(rgb + 48));
-  tmp[4] = _mm_loadu_si128((const __m128i*)(rgb + 64));
-  tmp[5] = _mm_loadu_si128((const __m128i*)(rgb + 80));
-
-  RGB24PackedToPlanarHelper_SSE2(tmp, out);
-  RGB24PackedToPlanarHelper_SSE2(out, tmp);
-  RGB24PackedToPlanarHelper_SSE2(tmp, out);
-  RGB24PackedToPlanarHelper_SSE2(out, tmp);
-  RGB24PackedToPlanarHelper_SSE2(tmp, out);
-}
-
-// Convert 8 packed ARGB to r[], g[], b[]
-static WEBP_INLINE void RGB32PackedToPlanar_SSE2(const uint32_t* const argb,
-                                                 __m128i* const rgb /*in[6]*/) {
-  const __m128i zero = _mm_setzero_si128();
-  __m128i a0 = LOAD_16(argb + 0);
-  __m128i a1 = LOAD_16(argb + 4);
-  __m128i a2 = LOAD_16(argb + 8);
-  __m128i a3 = LOAD_16(argb + 12);
-  VP8L32bToPlanar_SSE2(&a0, &a1, &a2, &a3);
-  rgb[0] = _mm_unpacklo_epi8(a1, zero);
-  rgb[1] = _mm_unpackhi_epi8(a1, zero);
-  rgb[2] = _mm_unpacklo_epi8(a2, zero);
-  rgb[3] = _mm_unpackhi_epi8(a2, zero);
-  rgb[4] = _mm_unpacklo_epi8(a3, zero);
-  rgb[5] = _mm_unpackhi_epi8(a3, zero);
-}
-
-// This macro computes (RG * MULT_RG + GB * MULT_GB + ROUNDER) >> DESCALE_FIX
-// It's a macro and not a function because we need to use immediate values with
-// srai_epi32, e.g.
-#define TRANSFORM(RG_LO, RG_HI, GB_LO, GB_HI, MULT_RG, MULT_GB, \
-                  ROUNDER, DESCALE_FIX, OUT) do {               \
-  const __m128i V0_lo = _mm_madd_epi16(RG_LO, MULT_RG);         \
-  const __m128i V0_hi = _mm_madd_epi16(RG_HI, MULT_RG);         \
-  const __m128i V1_lo = _mm_madd_epi16(GB_LO, MULT_GB);         \
-  const __m128i V1_hi = _mm_madd_epi16(GB_HI, MULT_GB);         \
-  const __m128i V2_lo = _mm_add_epi32(V0_lo, V1_lo);            \
-  const __m128i V2_hi = _mm_add_epi32(V0_hi, V1_hi);            \
-  const __m128i V3_lo = _mm_add_epi32(V2_lo, ROUNDER);          \
-  const __m128i V3_hi = _mm_add_epi32(V2_hi, ROUNDER);          \
-  const __m128i V5_lo = _mm_srai_epi32(V3_lo, DESCALE_FIX);     \
-  const __m128i V5_hi = _mm_srai_epi32(V3_hi, DESCALE_FIX);     \
-  (OUT) = _mm_packs_epi32(V5_lo, V5_hi);                        \
-} while (0)
-
-#define MK_CST_16(A, B) _mm_set_epi16((B), (A), (B), (A), (B), (A), (B), (A))
-static WEBP_INLINE void ConvertRGBToY_SSE2(const __m128i* const R,
-                                           const __m128i* const G,
-                                           const __m128i* const B,
-                                           __m128i* const Y) {
-  const __m128i kRG_y = MK_CST_16(16839, 33059 - 16384);
-  const __m128i kGB_y = MK_CST_16(16384, 6420);
-  const __m128i kHALF_Y = _mm_set1_epi32((16 << YUV_FIX) + YUV_HALF);
-
-  const __m128i RG_lo = _mm_unpacklo_epi16(*R, *G);
-  const __m128i RG_hi = _mm_unpackhi_epi16(*R, *G);
-  const __m128i GB_lo = _mm_unpacklo_epi16(*G, *B);
-  const __m128i GB_hi = _mm_unpackhi_epi16(*G, *B);
-  TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_y, kGB_y, kHALF_Y, YUV_FIX, *Y);
-}
-
-static WEBP_INLINE void ConvertRGBToUV_SSE2(const __m128i* const R,
-                                            const __m128i* const G,
-                                            const __m128i* const B,
-                                            __m128i* const U,
-                                            __m128i* const V) {
-  const __m128i kRG_u = MK_CST_16(-9719, -19081);
-  const __m128i kGB_u = MK_CST_16(0, 28800);
-  const __m128i kRG_v = MK_CST_16(28800, 0);
-  const __m128i kGB_v = MK_CST_16(-24116, -4684);
-  const __m128i kHALF_UV = _mm_set1_epi32(((128 << YUV_FIX) + YUV_HALF) << 2);
-
-  const __m128i RG_lo = _mm_unpacklo_epi16(*R, *G);
-  const __m128i RG_hi = _mm_unpackhi_epi16(*R, *G);
-  const __m128i GB_lo = _mm_unpacklo_epi16(*G, *B);
-  const __m128i GB_hi = _mm_unpackhi_epi16(*G, *B);
-  TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_u, kGB_u,
-            kHALF_UV, YUV_FIX + 2, *U);
-  TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_v, kGB_v,
-            kHALF_UV, YUV_FIX + 2, *V);
-}
-
-#undef MK_CST_16
-#undef TRANSFORM
-
-static void ConvertRGB24ToY_SSE2(const uint8_t* rgb, uint8_t* y, int width) {
-  const int max_width = width & ~31;
-  int i;
-  for (i = 0; i < max_width; rgb += 3 * 16 * 2) {
-    __m128i rgb_plane[6];
-    int j;
-
-    RGB24PackedToPlanar_SSE2(rgb, rgb_plane);
-
-    for (j = 0; j < 2; ++j, i += 16) {
-      const __m128i zero = _mm_setzero_si128();
-      __m128i r, g, b, Y0, Y1;
-
-      // Convert to 16-bit Y.
-      r = _mm_unpacklo_epi8(rgb_plane[0 + j], zero);
-      g = _mm_unpacklo_epi8(rgb_plane[2 + j], zero);
-      b = _mm_unpacklo_epi8(rgb_plane[4 + j], zero);
-      ConvertRGBToY_SSE2(&r, &g, &b, &Y0);
-
-      // Convert to 16-bit Y.
-      r = _mm_unpackhi_epi8(rgb_plane[0 + j], zero);
-      g = _mm_unpackhi_epi8(rgb_plane[2 + j], zero);
-      b = _mm_unpackhi_epi8(rgb_plane[4 + j], zero);
-      ConvertRGBToY_SSE2(&r, &g, &b, &Y1);
-
-      // Cast to 8-bit and store.
-      STORE_16(_mm_packus_epi16(Y0, Y1), y + i);
-    }
-  }
-  for (; i < width; ++i, rgb += 3) {   // left-over
-    y[i] = VP8RGBToY(rgb[0], rgb[1], rgb[2], YUV_HALF);
-  }
-}
-
-static void ConvertBGR24ToY_SSE2(const uint8_t* bgr, uint8_t* y, int width) {
-  const int max_width = width & ~31;
-  int i;
-  for (i = 0; i < max_width; bgr += 3 * 16 * 2) {
-    __m128i bgr_plane[6];
-    int j;
-
-    RGB24PackedToPlanar_SSE2(bgr, bgr_plane);
-
-    for (j = 0; j < 2; ++j, i += 16) {
-      const __m128i zero = _mm_setzero_si128();
-      __m128i r, g, b, Y0, Y1;
-
-      // Convert to 16-bit Y.
-      b = _mm_unpacklo_epi8(bgr_plane[0 + j], zero);
-      g = _mm_unpacklo_epi8(bgr_plane[2 + j], zero);
-      r = _mm_unpacklo_epi8(bgr_plane[4 + j], zero);
-      ConvertRGBToY_SSE2(&r, &g, &b, &Y0);
-
-      // Convert to 16-bit Y.
-      b = _mm_unpackhi_epi8(bgr_plane[0 + j], zero);
-      g = _mm_unpackhi_epi8(bgr_plane[2 + j], zero);
-      r = _mm_unpackhi_epi8(bgr_plane[4 + j], zero);
-      ConvertRGBToY_SSE2(&r, &g, &b, &Y1);
-
-      // Cast to 8-bit and store.
-      STORE_16(_mm_packus_epi16(Y0, Y1), y + i);
-    }
-  }
-  for (; i < width; ++i, bgr += 3) {  // left-over
-    y[i] = VP8RGBToY(bgr[2], bgr[1], bgr[0], YUV_HALF);
-  }
-}
-
-static void ConvertARGBToY_SSE2(const uint32_t* argb, uint8_t* y, int width) {
-  const int max_width = width & ~15;
-  int i;
-  for (i = 0; i < max_width; i += 16) {
-    __m128i Y0, Y1, rgb[6];
-    RGB32PackedToPlanar_SSE2(&argb[i], rgb);
-    ConvertRGBToY_SSE2(&rgb[0], &rgb[2], &rgb[4], &Y0);
-    ConvertRGBToY_SSE2(&rgb[1], &rgb[3], &rgb[5], &Y1);
-    STORE_16(_mm_packus_epi16(Y0, Y1), y + i);
-  }
-  for (; i < width; ++i) {   // left-over
-    const uint32_t p = argb[i];
-    y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >>  0) & 0xff,
-                     YUV_HALF);
-  }
-}
-
-// Horizontal add (doubled) of two 16b values, result is 16b.
-// in: A | B | C | D | ... -> out: 2*(A+B) | 2*(C+D) | ...
-static void HorizontalAddPack_SSE2(const __m128i* const A,
-                                   const __m128i* const B,
-                                   __m128i* const out) {
-  const __m128i k2 = _mm_set1_epi16(2);
-  const __m128i C = _mm_madd_epi16(*A, k2);
-  const __m128i D = _mm_madd_epi16(*B, k2);
-  *out = _mm_packs_epi32(C, D);
-}
-
-static void ConvertARGBToUV_SSE2(const uint32_t* argb,
-                                 uint8_t* u, uint8_t* v,
-                                 int src_width, int do_store) {
-  const int max_width = src_width & ~31;
-  int i;
-  for (i = 0; i < max_width; i += 32, u += 16, v += 16) {
-    __m128i rgb[6], U0, V0, U1, V1;
-    RGB32PackedToPlanar_SSE2(&argb[i], rgb);
-    HorizontalAddPack_SSE2(&rgb[0], &rgb[1], &rgb[0]);
-    HorizontalAddPack_SSE2(&rgb[2], &rgb[3], &rgb[2]);
-    HorizontalAddPack_SSE2(&rgb[4], &rgb[5], &rgb[4]);
-    ConvertRGBToUV_SSE2(&rgb[0], &rgb[2], &rgb[4], &U0, &V0);
-
-    RGB32PackedToPlanar_SSE2(&argb[i + 16], rgb);
-    HorizontalAddPack_SSE2(&rgb[0], &rgb[1], &rgb[0]);
-    HorizontalAddPack_SSE2(&rgb[2], &rgb[3], &rgb[2]);
-    HorizontalAddPack_SSE2(&rgb[4], &rgb[5], &rgb[4]);
-    ConvertRGBToUV_SSE2(&rgb[0], &rgb[2], &rgb[4], &U1, &V1);
-
-    U0 = _mm_packus_epi16(U0, U1);
-    V0 = _mm_packus_epi16(V0, V1);
-    if (!do_store) {
-      const __m128i prev_u = LOAD_16(u);
-      const __m128i prev_v = LOAD_16(v);
-      U0 = _mm_avg_epu8(U0, prev_u);
-      V0 = _mm_avg_epu8(V0, prev_v);
-    }
-    STORE_16(U0, u);
-    STORE_16(V0, v);
-  }
-  if (i < src_width) {  // left-over
-    WebPConvertARGBToUV_C(argb + i, u, v, src_width - i, do_store);
-  }
-}
-
-// Convert 16 packed ARGB 16b-values to r[], g[], b[]
-static WEBP_INLINE void RGBA32PackedToPlanar_16b_SSE2(
-    const uint16_t* const rgbx,
-    __m128i* const r, __m128i* const g, __m128i* const b) {
-  const __m128i in0 = LOAD_16(rgbx +  0);  // r0 | g0 | b0 |x| r1 | g1 | b1 |x
-  const __m128i in1 = LOAD_16(rgbx +  8);  // r2 | g2 | b2 |x| r3 | g3 | b3 |x
-  const __m128i in2 = LOAD_16(rgbx + 16);  // r4 | ...
-  const __m128i in3 = LOAD_16(rgbx + 24);  // r6 | ...
-  // column-wise transpose
-  const __m128i A0 = _mm_unpacklo_epi16(in0, in1);
-  const __m128i A1 = _mm_unpackhi_epi16(in0, in1);
-  const __m128i A2 = _mm_unpacklo_epi16(in2, in3);
-  const __m128i A3 = _mm_unpackhi_epi16(in2, in3);
-  const __m128i B0 = _mm_unpacklo_epi16(A0, A1);  // r0 r1 r2 r3 | g0 g1 ..
-  const __m128i B1 = _mm_unpackhi_epi16(A0, A1);  // b0 b1 b2 b3 | x x x x
-  const __m128i B2 = _mm_unpacklo_epi16(A2, A3);  // r4 r5 r6 r7 | g4 g5 ..
-  const __m128i B3 = _mm_unpackhi_epi16(A2, A3);  // b4 b5 b6 b7 | x x x x
-  *r = _mm_unpacklo_epi64(B0, B2);
-  *g = _mm_unpackhi_epi64(B0, B2);
-  *b = _mm_unpacklo_epi64(B1, B3);
-}
-
-static void ConvertRGBA32ToUV_SSE2(const uint16_t* rgb,
-                                   uint8_t* u, uint8_t* v, int width) {
-  const int max_width = width & ~15;
-  const uint16_t* const last_rgb = rgb + 4 * max_width;
-  while (rgb < last_rgb) {
-    __m128i r, g, b, U0, V0, U1, V1;
-    RGBA32PackedToPlanar_16b_SSE2(rgb +  0, &r, &g, &b);
-    ConvertRGBToUV_SSE2(&r, &g, &b, &U0, &V0);
-    RGBA32PackedToPlanar_16b_SSE2(rgb + 32, &r, &g, &b);
-    ConvertRGBToUV_SSE2(&r, &g, &b, &U1, &V1);
-    STORE_16(_mm_packus_epi16(U0, U1), u);
-    STORE_16(_mm_packus_epi16(V0, V1), v);
-    u += 16;
-    v += 16;
-    rgb += 2 * 32;
-  }
-  if (max_width < width) {  // left-over
-    WebPConvertRGBA32ToUV_C(rgb, u, v, width - max_width);
-  }
-}
-
-//------------------------------------------------------------------------------
-
-extern void WebPInitConvertARGBToYUVSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitConvertARGBToYUVSSE2(void) {
-  WebPConvertARGBToY = ConvertARGBToY_SSE2;
-  WebPConvertARGBToUV = ConvertARGBToUV_SSE2;
-
-  WebPConvertRGB24ToY = ConvertRGB24ToY_SSE2;
-  WebPConvertBGR24ToY = ConvertBGR24ToY_SSE2;
-
-  WebPConvertRGBA32ToUV = ConvertRGBA32ToUV_SSE2;
-}
-
-//------------------------------------------------------------------------------
-
-#define MAX_Y ((1 << 10) - 1)    // 10b precision over 16b-arithmetic
-static uint16_t clip_y(int v) {
-  return (v < 0) ? 0 : (v > MAX_Y) ? MAX_Y : (uint16_t)v;
-}
-
-static uint64_t SharpYUVUpdateY_SSE2(const uint16_t* ref, const uint16_t* src,
-                                     uint16_t* dst, int len) {
-  uint64_t diff = 0;
-  uint32_t tmp[4];
-  int i;
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i max = _mm_set1_epi16(MAX_Y);
-  const __m128i one = _mm_set1_epi16(1);
-  __m128i sum = zero;
-
-  for (i = 0; i + 8 <= len; i += 8) {
-    const __m128i A = _mm_loadu_si128((const __m128i*)(ref + i));
-    const __m128i B = _mm_loadu_si128((const __m128i*)(src + i));
-    const __m128i C = _mm_loadu_si128((const __m128i*)(dst + i));
-    const __m128i D = _mm_sub_epi16(A, B);       // diff_y
-    const __m128i E = _mm_cmpgt_epi16(zero, D);  // sign (-1 or 0)
-    const __m128i F = _mm_add_epi16(C, D);       // new_y
-    const __m128i G = _mm_or_si128(E, one);      // -1 or 1
-    const __m128i H = _mm_max_epi16(_mm_min_epi16(F, max), zero);
-    const __m128i I = _mm_madd_epi16(D, G);      // sum(abs(...))
-    _mm_storeu_si128((__m128i*)(dst + i), H);
-    sum = _mm_add_epi32(sum, I);
-  }
-  _mm_storeu_si128((__m128i*)tmp, sum);
-  diff = tmp[3] + tmp[2] + tmp[1] + tmp[0];
-  for (; i < len; ++i) {
-    const int diff_y = ref[i] - src[i];
-    const int new_y = (int)dst[i] + diff_y;
-    dst[i] = clip_y(new_y);
-    diff += (uint64_t)abs(diff_y);
-  }
-  return diff;
-}
-
-static void SharpYUVUpdateRGB_SSE2(const int16_t* ref, const int16_t* src,
-                                   int16_t* dst, int len) {
-  int i = 0;
-  for (i = 0; i + 8 <= len; i += 8) {
-    const __m128i A = _mm_loadu_si128((const __m128i*)(ref + i));
-    const __m128i B = _mm_loadu_si128((const __m128i*)(src + i));
-    const __m128i C = _mm_loadu_si128((const __m128i*)(dst + i));
-    const __m128i D = _mm_sub_epi16(A, B);   // diff_uv
-    const __m128i E = _mm_add_epi16(C, D);   // new_uv
-    _mm_storeu_si128((__m128i*)(dst + i), E);
-  }
-  for (; i < len; ++i) {
-    const int diff_uv = ref[i] - src[i];
-    dst[i] += diff_uv;
-  }
-}
-
-static void SharpYUVFilterRow_SSE2(const int16_t* A, const int16_t* B, int len,
-                                   const uint16_t* best_y, uint16_t* out) {
-  int i;
-  const __m128i kCst8 = _mm_set1_epi16(8);
-  const __m128i max = _mm_set1_epi16(MAX_Y);
-  const __m128i zero = _mm_setzero_si128();
-  for (i = 0; i + 8 <= len; i += 8) {
-    const __m128i a0 = _mm_loadu_si128((const __m128i*)(A + i + 0));
-    const __m128i a1 = _mm_loadu_si128((const __m128i*)(A + i + 1));
-    const __m128i b0 = _mm_loadu_si128((const __m128i*)(B + i + 0));
-    const __m128i b1 = _mm_loadu_si128((const __m128i*)(B + i + 1));
-    const __m128i a0b1 = _mm_add_epi16(a0, b1);
-    const __m128i a1b0 = _mm_add_epi16(a1, b0);
-    const __m128i a0a1b0b1 = _mm_add_epi16(a0b1, a1b0);  // A0+A1+B0+B1
-    const __m128i a0a1b0b1_8 = _mm_add_epi16(a0a1b0b1, kCst8);
-    const __m128i a0b1_2 = _mm_add_epi16(a0b1, a0b1);    // 2*(A0+B1)
-    const __m128i a1b0_2 = _mm_add_epi16(a1b0, a1b0);    // 2*(A1+B0)
-    const __m128i c0 = _mm_srai_epi16(_mm_add_epi16(a0b1_2, a0a1b0b1_8), 3);
-    const __m128i c1 = _mm_srai_epi16(_mm_add_epi16(a1b0_2, a0a1b0b1_8), 3);
-    const __m128i d0 = _mm_add_epi16(c1, a0);
-    const __m128i d1 = _mm_add_epi16(c0, a1);
-    const __m128i e0 = _mm_srai_epi16(d0, 1);
-    const __m128i e1 = _mm_srai_epi16(d1, 1);
-    const __m128i f0 = _mm_unpacklo_epi16(e0, e1);
-    const __m128i f1 = _mm_unpackhi_epi16(e0, e1);
-    const __m128i g0 = _mm_loadu_si128((const __m128i*)(best_y + 2 * i + 0));
-    const __m128i g1 = _mm_loadu_si128((const __m128i*)(best_y + 2 * i + 8));
-    const __m128i h0 = _mm_add_epi16(g0, f0);
-    const __m128i h1 = _mm_add_epi16(g1, f1);
-    const __m128i i0 = _mm_max_epi16(_mm_min_epi16(h0, max), zero);
-    const __m128i i1 = _mm_max_epi16(_mm_min_epi16(h1, max), zero);
-    _mm_storeu_si128((__m128i*)(out + 2 * i + 0), i0);
-    _mm_storeu_si128((__m128i*)(out + 2 * i + 8), i1);
-  }
-  for (; i < len; ++i) {
-    //   (9 * A0 + 3 * A1 + 3 * B0 + B1 + 8) >> 4 =
-    // = (8 * A0 + 2 * (A1 + B0) + (A0 + A1 + B0 + B1 + 8)) >> 4
-    // We reuse the common sub-expressions.
-    const int a0b1 = A[i + 0] + B[i + 1];
-    const int a1b0 = A[i + 1] + B[i + 0];
-    const int a0a1b0b1 = a0b1 + a1b0 + 8;
-    const int v0 = (8 * A[i + 0] + 2 * a1b0 + a0a1b0b1) >> 4;
-    const int v1 = (8 * A[i + 1] + 2 * a0b1 + a0a1b0b1) >> 4;
-    out[2 * i + 0] = clip_y(best_y[2 * i + 0] + v0);
-    out[2 * i + 1] = clip_y(best_y[2 * i + 1] + v1);
-  }
-}
-
-#undef MAX_Y
-
-//------------------------------------------------------------------------------
-
-extern void WebPInitSharpYUVSSE2(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitSharpYUVSSE2(void) {
-  WebPSharpYUVUpdateY = SharpYUVUpdateY_SSE2;
-  WebPSharpYUVUpdateRGB = SharpYUVUpdateRGB_SSE2;
-  WebPSharpYUVFilterRow = SharpYUVFilterRow_SSE2;
-}
-
-#else  // !WEBP_USE_SSE2
-
-WEBP_DSP_INIT_STUB(WebPInitSamplersSSE2)
-WEBP_DSP_INIT_STUB(WebPInitConvertARGBToYUVSSE2)
-WEBP_DSP_INIT_STUB(WebPInitSharpYUVSSE2)
-
-#endif  // WEBP_USE_SSE2
diff --git a/ios/Pods/libwebp/src/dsp/yuv_sse41.c b/ios/Pods/libwebp/src/dsp/yuv_sse41.c
deleted file mode 100644
index 579d1f7..0000000
--- a/ios/Pods/libwebp/src/dsp/yuv_sse41.c
+++ /dev/null
@@ -1,613 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// YUV->RGB conversion functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/dsp/yuv.h"
-
-#if defined(WEBP_USE_SSE41)
-
-#include "src/dsp/common_sse41.h"
-#include <stdlib.h>
-#include <smmintrin.h>
-
-//-----------------------------------------------------------------------------
-// Convert spans of 32 pixels to various RGB formats for the fancy upsampler.
-
-// These constants are 14b fixed-point version of ITU-R BT.601 constants.
-// R = (19077 * y             + 26149 * v - 14234) >> 6
-// G = (19077 * y -  6419 * u - 13320 * v +  8708) >> 6
-// B = (19077 * y + 33050 * u             - 17685) >> 6
-static void ConvertYUV444ToRGB_SSE41(const __m128i* const Y0,
-                                     const __m128i* const U0,
-                                     const __m128i* const V0,
-                                     __m128i* const R,
-                                     __m128i* const G,
-                                     __m128i* const B) {
-  const __m128i k19077 = _mm_set1_epi16(19077);
-  const __m128i k26149 = _mm_set1_epi16(26149);
-  const __m128i k14234 = _mm_set1_epi16(14234);
-  // 33050 doesn't fit in a signed short: only use this with unsigned arithmetic
-  const __m128i k33050 = _mm_set1_epi16((short)33050);
-  const __m128i k17685 = _mm_set1_epi16(17685);
-  const __m128i k6419  = _mm_set1_epi16(6419);
-  const __m128i k13320 = _mm_set1_epi16(13320);
-  const __m128i k8708  = _mm_set1_epi16(8708);
-
-  const __m128i Y1 = _mm_mulhi_epu16(*Y0, k19077);
-
-  const __m128i R0 = _mm_mulhi_epu16(*V0, k26149);
-  const __m128i R1 = _mm_sub_epi16(Y1, k14234);
-  const __m128i R2 = _mm_add_epi16(R1, R0);
-
-  const __m128i G0 = _mm_mulhi_epu16(*U0, k6419);
-  const __m128i G1 = _mm_mulhi_epu16(*V0, k13320);
-  const __m128i G2 = _mm_add_epi16(Y1, k8708);
-  const __m128i G3 = _mm_add_epi16(G0, G1);
-  const __m128i G4 = _mm_sub_epi16(G2, G3);
-
-  // be careful with the saturated *unsigned* arithmetic here!
-  const __m128i B0 = _mm_mulhi_epu16(*U0, k33050);
-  const __m128i B1 = _mm_adds_epu16(B0, Y1);
-  const __m128i B2 = _mm_subs_epu16(B1, k17685);
-
-  // use logical shift for B2, which can be larger than 32767
-  *R = _mm_srai_epi16(R2, 6);   // range: [-14234, 30815]
-  *G = _mm_srai_epi16(G4, 6);   // range: [-10953, 27710]
-  *B = _mm_srli_epi16(B2, 6);   // range: [0, 34238]
-}
-
-// Load the bytes into the *upper* part of 16b words. That's "<< 8", basically.
-static WEBP_INLINE __m128i Load_HI_16_SSE41(const uint8_t* src) {
-  const __m128i zero = _mm_setzero_si128();
-  return _mm_unpacklo_epi8(zero, _mm_loadl_epi64((const __m128i*)src));
-}
-
-// Load and replicate the U/V samples
-static WEBP_INLINE __m128i Load_UV_HI_8_SSE41(const uint8_t* src) {
-  const __m128i zero = _mm_setzero_si128();
-  const __m128i tmp0 = _mm_cvtsi32_si128(*(const uint32_t*)src);
-  const __m128i tmp1 = _mm_unpacklo_epi8(zero, tmp0);
-  return _mm_unpacklo_epi16(tmp1, tmp1);   // replicate samples
-}
-
-// Convert 32 samples of YUV444 to R/G/B
-static void YUV444ToRGB_SSE41(const uint8_t* const y,
-                              const uint8_t* const u,
-                              const uint8_t* const v,
-                              __m128i* const R, __m128i* const G,
-                              __m128i* const B) {
-  const __m128i Y0 = Load_HI_16_SSE41(y), U0 = Load_HI_16_SSE41(u),
-                V0 = Load_HI_16_SSE41(v);
-  ConvertYUV444ToRGB_SSE41(&Y0, &U0, &V0, R, G, B);
-}
-
-// Convert 32 samples of YUV420 to R/G/B
-static void YUV420ToRGB_SSE41(const uint8_t* const y,
-                              const uint8_t* const u,
-                              const uint8_t* const v,
-                              __m128i* const R, __m128i* const G,
-                              __m128i* const B) {
-  const __m128i Y0 = Load_HI_16_SSE41(y), U0 = Load_UV_HI_8_SSE41(u),
-                V0 = Load_UV_HI_8_SSE41(v);
-  ConvertYUV444ToRGB_SSE41(&Y0, &U0, &V0, R, G, B);
-}
-
-// Pack the planar buffers
-// rrrr... rrrr... gggg... gggg... bbbb... bbbb....
-// triplet by triplet in the output buffer rgb as rgbrgbrgbrgb ...
-static WEBP_INLINE void PlanarTo24b_SSE41(
-    __m128i* const in0, __m128i* const in1, __m128i* const in2,
-    __m128i* const in3, __m128i* const in4, __m128i* const in5,
-    uint8_t* const rgb) {
-  // The input is 6 registers of sixteen 8b but for the sake of explanation,
-  // let's take 6 registers of four 8b values.
-  // To pack, we will keep taking one every two 8b integer and move it
-  // around as follows:
-  // Input:
-  //   r0r1r2r3 | r4r5r6r7 | g0g1g2g3 | g4g5g6g7 | b0b1b2b3 | b4b5b6b7
-  // Split the 6 registers in two sets of 3 registers: the first set as the even
-  // 8b bytes, the second the odd ones:
-  //   r0r2r4r6 | g0g2g4g6 | b0b2b4b6 | r1r3r5r7 | g1g3g5g7 | b1b3b5b7
-  // Repeat the same permutations twice more:
-  //   r0r4g0g4 | b0b4r1r5 | g1g5b1b5 | r2r6g2g6 | b2b6r3r7 | g3g7b3b7
-  //   r0g0b0r1 | g1b1r2g2 | b2r3g3b3 | r4g4b4r5 | g5b5r6g6 | b6r7g7b7
-  VP8PlanarTo24b_SSE41(in0, in1, in2, in3, in4, in5);
-
-  _mm_storeu_si128((__m128i*)(rgb +  0), *in0);
-  _mm_storeu_si128((__m128i*)(rgb + 16), *in1);
-  _mm_storeu_si128((__m128i*)(rgb + 32), *in2);
-  _mm_storeu_si128((__m128i*)(rgb + 48), *in3);
-  _mm_storeu_si128((__m128i*)(rgb + 64), *in4);
-  _mm_storeu_si128((__m128i*)(rgb + 80), *in5);
-}
-
-void VP8YuvToRgb32_SSE41(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst) {
-  __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3;
-  __m128i rgb0, rgb1, rgb2, rgb3, rgb4, rgb5;
-
-  YUV444ToRGB_SSE41(y + 0, u + 0, v + 0, &R0, &G0, &B0);
-  YUV444ToRGB_SSE41(y + 8, u + 8, v + 8, &R1, &G1, &B1);
-  YUV444ToRGB_SSE41(y + 16, u + 16, v + 16, &R2, &G2, &B2);
-  YUV444ToRGB_SSE41(y + 24, u + 24, v + 24, &R3, &G3, &B3);
-
-  // Cast to 8b and store as RRRRGGGGBBBB.
-  rgb0 = _mm_packus_epi16(R0, R1);
-  rgb1 = _mm_packus_epi16(R2, R3);
-  rgb2 = _mm_packus_epi16(G0, G1);
-  rgb3 = _mm_packus_epi16(G2, G3);
-  rgb4 = _mm_packus_epi16(B0, B1);
-  rgb5 = _mm_packus_epi16(B2, B3);
-
-  // Pack as RGBRGBRGBRGB.
-  PlanarTo24b_SSE41(&rgb0, &rgb1, &rgb2, &rgb3, &rgb4, &rgb5, dst);
-}
-
-void VP8YuvToBgr32_SSE41(const uint8_t* y, const uint8_t* u, const uint8_t* v,
-                         uint8_t* dst) {
-  __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3;
-  __m128i bgr0, bgr1, bgr2, bgr3, bgr4, bgr5;
-
-  YUV444ToRGB_SSE41(y +  0, u +  0, v +  0, &R0, &G0, &B0);
-  YUV444ToRGB_SSE41(y +  8, u +  8, v +  8, &R1, &G1, &B1);
-  YUV444ToRGB_SSE41(y + 16, u + 16, v + 16, &R2, &G2, &B2);
-  YUV444ToRGB_SSE41(y + 24, u + 24, v + 24, &R3, &G3, &B3);
-
-  // Cast to 8b and store as BBBBGGGGRRRR.
-  bgr0 = _mm_packus_epi16(B0, B1);
-  bgr1 = _mm_packus_epi16(B2, B3);
-  bgr2 = _mm_packus_epi16(G0, G1);
-  bgr3 = _mm_packus_epi16(G2, G3);
-  bgr4 = _mm_packus_epi16(R0, R1);
-  bgr5= _mm_packus_epi16(R2, R3);
-
-  // Pack as BGRBGRBGRBGR.
-  PlanarTo24b_SSE41(&bgr0, &bgr1, &bgr2, &bgr3, &bgr4, &bgr5, dst);
-}
-
-//-----------------------------------------------------------------------------
-// Arbitrary-length row conversion functions
-
-static void YuvToRgbRow_SSE41(const uint8_t* y,
-                              const uint8_t* u, const uint8_t* v,
-                              uint8_t* dst, int len) {
-  int n;
-  for (n = 0; n + 32 <= len; n += 32, dst += 32 * 3) {
-    __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3;
-    __m128i rgb0, rgb1, rgb2, rgb3, rgb4, rgb5;
-
-    YUV420ToRGB_SSE41(y +  0, u +  0, v +  0, &R0, &G0, &B0);
-    YUV420ToRGB_SSE41(y +  8, u +  4, v +  4, &R1, &G1, &B1);
-    YUV420ToRGB_SSE41(y + 16, u +  8, v +  8, &R2, &G2, &B2);
-    YUV420ToRGB_SSE41(y + 24, u + 12, v + 12, &R3, &G3, &B3);
-
-    // Cast to 8b and store as RRRRGGGGBBBB.
-    rgb0 = _mm_packus_epi16(R0, R1);
-    rgb1 = _mm_packus_epi16(R2, R3);
-    rgb2 = _mm_packus_epi16(G0, G1);
-    rgb3 = _mm_packus_epi16(G2, G3);
-    rgb4 = _mm_packus_epi16(B0, B1);
-    rgb5 = _mm_packus_epi16(B2, B3);
-
-    // Pack as RGBRGBRGBRGB.
-    PlanarTo24b_SSE41(&rgb0, &rgb1, &rgb2, &rgb3, &rgb4, &rgb5, dst);
-
-    y += 32;
-    u += 16;
-    v += 16;
-  }
-  for (; n < len; ++n) {   // Finish off
-    VP8YuvToRgb(y[0], u[0], v[0], dst);
-    dst += 3;
-    y += 1;
-    u += (n & 1);
-    v += (n & 1);
-  }
-}
-
-static void YuvToBgrRow_SSE41(const uint8_t* y,
-                              const uint8_t* u, const uint8_t* v,
-                              uint8_t* dst, int len) {
-  int n;
-  for (n = 0; n + 32 <= len; n += 32, dst += 32 * 3) {
-    __m128i R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3;
-    __m128i bgr0, bgr1, bgr2, bgr3, bgr4, bgr5;
-
-    YUV420ToRGB_SSE41(y +  0, u +  0, v +  0, &R0, &G0, &B0);
-    YUV420ToRGB_SSE41(y +  8, u +  4, v +  4, &R1, &G1, &B1);
-    YUV420ToRGB_SSE41(y + 16, u +  8, v +  8, &R2, &G2, &B2);
-    YUV420ToRGB_SSE41(y + 24, u + 12, v + 12, &R3, &G3, &B3);
-
-    // Cast to 8b and store as BBBBGGGGRRRR.
-    bgr0 = _mm_packus_epi16(B0, B1);
-    bgr1 = _mm_packus_epi16(B2, B3);
-    bgr2 = _mm_packus_epi16(G0, G1);
-    bgr3 = _mm_packus_epi16(G2, G3);
-    bgr4 = _mm_packus_epi16(R0, R1);
-    bgr5 = _mm_packus_epi16(R2, R3);
-
-    // Pack as BGRBGRBGRBGR.
-    PlanarTo24b_SSE41(&bgr0, &bgr1, &bgr2, &bgr3, &bgr4, &bgr5, dst);
-
-    y += 32;
-    u += 16;
-    v += 16;
-  }
-  for (; n < len; ++n) {   // Finish off
-    VP8YuvToBgr(y[0], u[0], v[0], dst);
-    dst += 3;
-    y += 1;
-    u += (n & 1);
-    v += (n & 1);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-extern void WebPInitSamplersSSE41(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersSSE41(void) {
-  WebPSamplers[MODE_RGB]  = YuvToRgbRow_SSE41;
-  WebPSamplers[MODE_BGR]  = YuvToBgrRow_SSE41;
-}
-
-//------------------------------------------------------------------------------
-// RGB24/32 -> YUV converters
-
-// Load eight 16b-words from *src.
-#define LOAD_16(src) _mm_loadu_si128((const __m128i*)(src))
-// Store either 16b-words into *dst
-#define STORE_16(V, dst) _mm_storeu_si128((__m128i*)(dst), (V))
-
-#define WEBP_SSE41_SHUFF(OUT)  do {                  \
-  const __m128i tmp0 = _mm_shuffle_epi8(A0, shuff0); \
-  const __m128i tmp1 = _mm_shuffle_epi8(A1, shuff1); \
-  const __m128i tmp2 = _mm_shuffle_epi8(A2, shuff2); \
-  const __m128i tmp3 = _mm_shuffle_epi8(A3, shuff0); \
-  const __m128i tmp4 = _mm_shuffle_epi8(A4, shuff1); \
-  const __m128i tmp5 = _mm_shuffle_epi8(A5, shuff2); \
-                                                     \
-  /* OR everything to get one channel */             \
-  const __m128i tmp6 = _mm_or_si128(tmp0, tmp1);     \
-  const __m128i tmp7 = _mm_or_si128(tmp3, tmp4);     \
-  out[OUT + 0] = _mm_or_si128(tmp6, tmp2);           \
-  out[OUT + 1] = _mm_or_si128(tmp7, tmp5);           \
-} while (0);
-
-// Unpack the 8b input rgbrgbrgbrgb ... as contiguous registers:
-// rrrr... rrrr... gggg... gggg... bbbb... bbbb....
-// Similar to PlanarTo24bHelper(), but in reverse order.
-static WEBP_INLINE void RGB24PackedToPlanar_SSE41(
-    const uint8_t* const rgb, __m128i* const out /*out[6]*/) {
-  const __m128i A0 = _mm_loadu_si128((const __m128i*)(rgb +  0));
-  const __m128i A1 = _mm_loadu_si128((const __m128i*)(rgb + 16));
-  const __m128i A2 = _mm_loadu_si128((const __m128i*)(rgb + 32));
-  const __m128i A3 = _mm_loadu_si128((const __m128i*)(rgb + 48));
-  const __m128i A4 = _mm_loadu_si128((const __m128i*)(rgb + 64));
-  const __m128i A5 = _mm_loadu_si128((const __m128i*)(rgb + 80));
-
-  // Compute RR.
-  {
-    const __m128i shuff0 = _mm_set_epi8(
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, 12, 9, 6, 3, 0);
-    const __m128i shuff1 = _mm_set_epi8(
-        -1, -1, -1, -1, -1, 14, 11, 8, 5, 2, -1, -1, -1, -1, -1, -1);
-    const __m128i shuff2 = _mm_set_epi8(
-        13, 10, 7, 4, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
-    WEBP_SSE41_SHUFF(0)
-  }
-  // Compute GG.
-  {
-    const __m128i shuff0 = _mm_set_epi8(
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13, 10, 7, 4, 1);
-    const __m128i shuff1 = _mm_set_epi8(
-        -1, -1, -1, -1, -1, 15, 12, 9, 6, 3, 0, -1, -1, -1, -1, -1);
-    const __m128i shuff2 = _mm_set_epi8(
-        14, 11, 8, 5, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
-    WEBP_SSE41_SHUFF(2)
-  }
-  // Compute BB.
-  {
-    const __m128i shuff0 = _mm_set_epi8(
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14, 11, 8, 5, 2);
-    const __m128i shuff1 = _mm_set_epi8(
-        -1, -1, -1, -1, -1, -1, 13, 10, 7, 4, 1, -1, -1, -1, -1, -1);
-    const __m128i shuff2 = _mm_set_epi8(
-        15, 12, 9, 6, 3, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
-    WEBP_SSE41_SHUFF(4)
-  }
-}
-
-#undef WEBP_SSE41_SHUFF
-
-// Convert 8 packed ARGB to r[], g[], b[]
-static WEBP_INLINE void RGB32PackedToPlanar_SSE41(
-    const uint32_t* const argb, __m128i* const rgb /*in[6]*/) {
-  const __m128i zero = _mm_setzero_si128();
-  __m128i a0 = LOAD_16(argb + 0);
-  __m128i a1 = LOAD_16(argb + 4);
-  __m128i a2 = LOAD_16(argb + 8);
-  __m128i a3 = LOAD_16(argb + 12);
-  VP8L32bToPlanar_SSE41(&a0, &a1, &a2, &a3);
-  rgb[0] = _mm_unpacklo_epi8(a1, zero);
-  rgb[1] = _mm_unpackhi_epi8(a1, zero);
-  rgb[2] = _mm_unpacklo_epi8(a2, zero);
-  rgb[3] = _mm_unpackhi_epi8(a2, zero);
-  rgb[4] = _mm_unpacklo_epi8(a3, zero);
-  rgb[5] = _mm_unpackhi_epi8(a3, zero);
-}
-
-// This macro computes (RG * MULT_RG + GB * MULT_GB + ROUNDER) >> DESCALE_FIX
-// It's a macro and not a function because we need to use immediate values with
-// srai_epi32, e.g.
-#define TRANSFORM(RG_LO, RG_HI, GB_LO, GB_HI, MULT_RG, MULT_GB, \
-                  ROUNDER, DESCALE_FIX, OUT) do {               \
-  const __m128i V0_lo = _mm_madd_epi16(RG_LO, MULT_RG);         \
-  const __m128i V0_hi = _mm_madd_epi16(RG_HI, MULT_RG);         \
-  const __m128i V1_lo = _mm_madd_epi16(GB_LO, MULT_GB);         \
-  const __m128i V1_hi = _mm_madd_epi16(GB_HI, MULT_GB);         \
-  const __m128i V2_lo = _mm_add_epi32(V0_lo, V1_lo);            \
-  const __m128i V2_hi = _mm_add_epi32(V0_hi, V1_hi);            \
-  const __m128i V3_lo = _mm_add_epi32(V2_lo, ROUNDER);          \
-  const __m128i V3_hi = _mm_add_epi32(V2_hi, ROUNDER);          \
-  const __m128i V5_lo = _mm_srai_epi32(V3_lo, DESCALE_FIX);     \
-  const __m128i V5_hi = _mm_srai_epi32(V3_hi, DESCALE_FIX);     \
-  (OUT) = _mm_packs_epi32(V5_lo, V5_hi);                        \
-} while (0)
-
-#define MK_CST_16(A, B) _mm_set_epi16((B), (A), (B), (A), (B), (A), (B), (A))
-static WEBP_INLINE void ConvertRGBToY_SSE41(const __m128i* const R,
-                                            const __m128i* const G,
-                                            const __m128i* const B,
-                                            __m128i* const Y) {
-  const __m128i kRG_y = MK_CST_16(16839, 33059 - 16384);
-  const __m128i kGB_y = MK_CST_16(16384, 6420);
-  const __m128i kHALF_Y = _mm_set1_epi32((16 << YUV_FIX) + YUV_HALF);
-
-  const __m128i RG_lo = _mm_unpacklo_epi16(*R, *G);
-  const __m128i RG_hi = _mm_unpackhi_epi16(*R, *G);
-  const __m128i GB_lo = _mm_unpacklo_epi16(*G, *B);
-  const __m128i GB_hi = _mm_unpackhi_epi16(*G, *B);
-  TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_y, kGB_y, kHALF_Y, YUV_FIX, *Y);
-}
-
-static WEBP_INLINE void ConvertRGBToUV_SSE41(const __m128i* const R,
-                                             const __m128i* const G,
-                                             const __m128i* const B,
-                                             __m128i* const U,
-                                             __m128i* const V) {
-  const __m128i kRG_u = MK_CST_16(-9719, -19081);
-  const __m128i kGB_u = MK_CST_16(0, 28800);
-  const __m128i kRG_v = MK_CST_16(28800, 0);
-  const __m128i kGB_v = MK_CST_16(-24116, -4684);
-  const __m128i kHALF_UV = _mm_set1_epi32(((128 << YUV_FIX) + YUV_HALF) << 2);
-
-  const __m128i RG_lo = _mm_unpacklo_epi16(*R, *G);
-  const __m128i RG_hi = _mm_unpackhi_epi16(*R, *G);
-  const __m128i GB_lo = _mm_unpacklo_epi16(*G, *B);
-  const __m128i GB_hi = _mm_unpackhi_epi16(*G, *B);
-  TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_u, kGB_u,
-            kHALF_UV, YUV_FIX + 2, *U);
-  TRANSFORM(RG_lo, RG_hi, GB_lo, GB_hi, kRG_v, kGB_v,
-            kHALF_UV, YUV_FIX + 2, *V);
-}
-
-#undef MK_CST_16
-#undef TRANSFORM
-
-static void ConvertRGB24ToY_SSE41(const uint8_t* rgb, uint8_t* y, int width) {
-  const int max_width = width & ~31;
-  int i;
-  for (i = 0; i < max_width; rgb += 3 * 16 * 2) {
-    __m128i rgb_plane[6];
-    int j;
-
-    RGB24PackedToPlanar_SSE41(rgb, rgb_plane);
-
-    for (j = 0; j < 2; ++j, i += 16) {
-      const __m128i zero = _mm_setzero_si128();
-      __m128i r, g, b, Y0, Y1;
-
-      // Convert to 16-bit Y.
-      r = _mm_unpacklo_epi8(rgb_plane[0 + j], zero);
-      g = _mm_unpacklo_epi8(rgb_plane[2 + j], zero);
-      b = _mm_unpacklo_epi8(rgb_plane[4 + j], zero);
-      ConvertRGBToY_SSE41(&r, &g, &b, &Y0);
-
-      // Convert to 16-bit Y.
-      r = _mm_unpackhi_epi8(rgb_plane[0 + j], zero);
-      g = _mm_unpackhi_epi8(rgb_plane[2 + j], zero);
-      b = _mm_unpackhi_epi8(rgb_plane[4 + j], zero);
-      ConvertRGBToY_SSE41(&r, &g, &b, &Y1);
-
-      // Cast to 8-bit and store.
-      STORE_16(_mm_packus_epi16(Y0, Y1), y + i);
-    }
-  }
-  for (; i < width; ++i, rgb += 3) {   // left-over
-    y[i] = VP8RGBToY(rgb[0], rgb[1], rgb[2], YUV_HALF);
-  }
-}
-
-static void ConvertBGR24ToY_SSE41(const uint8_t* bgr, uint8_t* y, int width) {
-  const int max_width = width & ~31;
-  int i;
-  for (i = 0; i < max_width; bgr += 3 * 16 * 2) {
-    __m128i bgr_plane[6];
-    int j;
-
-    RGB24PackedToPlanar_SSE41(bgr, bgr_plane);
-
-    for (j = 0; j < 2; ++j, i += 16) {
-      const __m128i zero = _mm_setzero_si128();
-      __m128i r, g, b, Y0, Y1;
-
-      // Convert to 16-bit Y.
-      b = _mm_unpacklo_epi8(bgr_plane[0 + j], zero);
-      g = _mm_unpacklo_epi8(bgr_plane[2 + j], zero);
-      r = _mm_unpacklo_epi8(bgr_plane[4 + j], zero);
-      ConvertRGBToY_SSE41(&r, &g, &b, &Y0);
-
-      // Convert to 16-bit Y.
-      b = _mm_unpackhi_epi8(bgr_plane[0 + j], zero);
-      g = _mm_unpackhi_epi8(bgr_plane[2 + j], zero);
-      r = _mm_unpackhi_epi8(bgr_plane[4 + j], zero);
-      ConvertRGBToY_SSE41(&r, &g, &b, &Y1);
-
-      // Cast to 8-bit and store.
-      STORE_16(_mm_packus_epi16(Y0, Y1), y + i);
-    }
-  }
-  for (; i < width; ++i, bgr += 3) {  // left-over
-    y[i] = VP8RGBToY(bgr[2], bgr[1], bgr[0], YUV_HALF);
-  }
-}
-
-static void ConvertARGBToY_SSE41(const uint32_t* argb, uint8_t* y, int width) {
-  const int max_width = width & ~15;
-  int i;
-  for (i = 0; i < max_width; i += 16) {
-    __m128i Y0, Y1, rgb[6];
-    RGB32PackedToPlanar_SSE41(&argb[i], rgb);
-    ConvertRGBToY_SSE41(&rgb[0], &rgb[2], &rgb[4], &Y0);
-    ConvertRGBToY_SSE41(&rgb[1], &rgb[3], &rgb[5], &Y1);
-    STORE_16(_mm_packus_epi16(Y0, Y1), y + i);
-  }
-  for (; i < width; ++i) {   // left-over
-    const uint32_t p = argb[i];
-    y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >>  0) & 0xff,
-                     YUV_HALF);
-  }
-}
-
-// Horizontal add (doubled) of two 16b values, result is 16b.
-// in: A | B | C | D | ... -> out: 2*(A+B) | 2*(C+D) | ...
-static void HorizontalAddPack_SSE41(const __m128i* const A,
-                                    const __m128i* const B,
-                                    __m128i* const out) {
-  const __m128i k2 = _mm_set1_epi16(2);
-  const __m128i C = _mm_madd_epi16(*A, k2);
-  const __m128i D = _mm_madd_epi16(*B, k2);
-  *out = _mm_packs_epi32(C, D);
-}
-
-static void ConvertARGBToUV_SSE41(const uint32_t* argb,
-                                  uint8_t* u, uint8_t* v,
-                                  int src_width, int do_store) {
-  const int max_width = src_width & ~31;
-  int i;
-  for (i = 0; i < max_width; i += 32, u += 16, v += 16) {
-    __m128i rgb[6], U0, V0, U1, V1;
-    RGB32PackedToPlanar_SSE41(&argb[i], rgb);
-    HorizontalAddPack_SSE41(&rgb[0], &rgb[1], &rgb[0]);
-    HorizontalAddPack_SSE41(&rgb[2], &rgb[3], &rgb[2]);
-    HorizontalAddPack_SSE41(&rgb[4], &rgb[5], &rgb[4]);
-    ConvertRGBToUV_SSE41(&rgb[0], &rgb[2], &rgb[4], &U0, &V0);
-
-    RGB32PackedToPlanar_SSE41(&argb[i + 16], rgb);
-    HorizontalAddPack_SSE41(&rgb[0], &rgb[1], &rgb[0]);
-    HorizontalAddPack_SSE41(&rgb[2], &rgb[3], &rgb[2]);
-    HorizontalAddPack_SSE41(&rgb[4], &rgb[5], &rgb[4]);
-    ConvertRGBToUV_SSE41(&rgb[0], &rgb[2], &rgb[4], &U1, &V1);
-
-    U0 = _mm_packus_epi16(U0, U1);
-    V0 = _mm_packus_epi16(V0, V1);
-    if (!do_store) {
-      const __m128i prev_u = LOAD_16(u);
-      const __m128i prev_v = LOAD_16(v);
-      U0 = _mm_avg_epu8(U0, prev_u);
-      V0 = _mm_avg_epu8(V0, prev_v);
-    }
-    STORE_16(U0, u);
-    STORE_16(V0, v);
-  }
-  if (i < src_width) {  // left-over
-    WebPConvertARGBToUV_C(argb + i, u, v, src_width - i, do_store);
-  }
-}
-
-// Convert 16 packed ARGB 16b-values to r[], g[], b[]
-static WEBP_INLINE void RGBA32PackedToPlanar_16b_SSE41(
-    const uint16_t* const rgbx,
-    __m128i* const r, __m128i* const g, __m128i* const b) {
-  const __m128i in0 = LOAD_16(rgbx +  0);  // r0 | g0 | b0 |x| r1 | g1 | b1 |x
-  const __m128i in1 = LOAD_16(rgbx +  8);  // r2 | g2 | b2 |x| r3 | g3 | b3 |x
-  const __m128i in2 = LOAD_16(rgbx + 16);  // r4 | ...
-  const __m128i in3 = LOAD_16(rgbx + 24);  // r6 | ...
-  // aarrggbb as 16-bit.
-  const __m128i shuff0 =
-      _mm_set_epi8(-1, -1, -1, -1, 13, 12, 5, 4, 11, 10, 3, 2, 9, 8, 1, 0);
-  const __m128i shuff1 =
-      _mm_set_epi8(13, 12, 5, 4, -1, -1, -1, -1, 11, 10, 3, 2, 9, 8, 1, 0);
-  const __m128i A0 = _mm_shuffle_epi8(in0, shuff0);
-  const __m128i A1 = _mm_shuffle_epi8(in1, shuff1);
-  const __m128i A2 = _mm_shuffle_epi8(in2, shuff0);
-  const __m128i A3 = _mm_shuffle_epi8(in3, shuff1);
-  // R0R1G0G1
-  // B0B1****
-  // R2R3G2G3
-  // B2B3****
-  // (OR is used to free port 5 for the unpack)
-  const __m128i B0 = _mm_unpacklo_epi32(A0, A1);
-  const __m128i B1 = _mm_or_si128(A0, A1);
-  const __m128i B2 = _mm_unpacklo_epi32(A2, A3);
-  const __m128i B3 = _mm_or_si128(A2, A3);
-  // Gather the channels.
-  *r = _mm_unpacklo_epi64(B0, B2);
-  *g = _mm_unpackhi_epi64(B0, B2);
-  *b = _mm_unpackhi_epi64(B1, B3);
-}
-
-static void ConvertRGBA32ToUV_SSE41(const uint16_t* rgb,
-                                    uint8_t* u, uint8_t* v, int width) {
-  const int max_width = width & ~15;
-  const uint16_t* const last_rgb = rgb + 4 * max_width;
-  while (rgb < last_rgb) {
-    __m128i r, g, b, U0, V0, U1, V1;
-    RGBA32PackedToPlanar_16b_SSE41(rgb +  0, &r, &g, &b);
-    ConvertRGBToUV_SSE41(&r, &g, &b, &U0, &V0);
-    RGBA32PackedToPlanar_16b_SSE41(rgb + 32, &r, &g, &b);
-    ConvertRGBToUV_SSE41(&r, &g, &b, &U1, &V1);
-    STORE_16(_mm_packus_epi16(U0, U1), u);
-    STORE_16(_mm_packus_epi16(V0, V1), v);
-    u += 16;
-    v += 16;
-    rgb += 2 * 32;
-  }
-  if (max_width < width) {  // left-over
-    WebPConvertRGBA32ToUV_C(rgb, u, v, width - max_width);
-  }
-}
-
-//------------------------------------------------------------------------------
-
-extern void WebPInitConvertARGBToYUVSSE41(void);
-
-WEBP_TSAN_IGNORE_FUNCTION void WebPInitConvertARGBToYUVSSE41(void) {
-  WebPConvertARGBToY = ConvertARGBToY_SSE41;
-  WebPConvertARGBToUV = ConvertARGBToUV_SSE41;
-
-  WebPConvertRGB24ToY = ConvertRGB24ToY_SSE41;
-  WebPConvertBGR24ToY = ConvertBGR24ToY_SSE41;
-
-  WebPConvertRGBA32ToUV = ConvertRGBA32ToUV_SSE41;
-}
-
-//------------------------------------------------------------------------------
-
-#else  // !WEBP_USE_SSE41
-
-WEBP_DSP_INIT_STUB(WebPInitSamplersSSE41)
-WEBP_DSP_INIT_STUB(WebPInitConvertARGBToYUVSSE41)
-
-#endif  // WEBP_USE_SSE41
diff --git a/ios/Pods/libwebp/src/enc/alpha_enc.c b/ios/Pods/libwebp/src/enc/alpha_enc.c
deleted file mode 100644
index dce9ca9..0000000
--- a/ios/Pods/libwebp/src/enc/alpha_enc.c
+++ /dev/null
@@ -1,443 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Alpha-plane compression.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "src/enc/vp8i_enc.h"
-#include "src/dsp/dsp.h"
-#include "src/utils/filters_utils.h"
-#include "src/utils/quant_levels_utils.h"
-#include "src/utils/utils.h"
-#include "src/webp/format_constants.h"
-
-// -----------------------------------------------------------------------------
-// Encodes the given alpha data via specified compression method 'method'.
-// The pre-processing (quantization) is performed if 'quality' is less than 100.
-// For such cases, the encoding is lossy. The valid range is [0, 100] for
-// 'quality' and [0, 1] for 'method':
-//   'method = 0' - No compression;
-//   'method = 1' - Use lossless coder on the alpha plane only
-// 'filter' values [0, 4] correspond to prediction modes none, horizontal,
-// vertical & gradient filters. The prediction mode 4 will try all the
-// prediction modes 0 to 3 and pick the best one.
-// 'effort_level': specifies how much effort must be spent to try and reduce
-//  the compressed output size. In range 0 (quick) to 6 (slow).
-//
-// 'output' corresponds to the buffer containing compressed alpha data.
-//          This buffer is allocated by this method and caller should call
-//          WebPSafeFree(*output) when done.
-// 'output_size' corresponds to size of this compressed alpha buffer.
-//
-// Returns 1 on successfully encoding the alpha and
-//         0 if either:
-//           invalid quality or method, or
-//           memory allocation for the compressed data fails.
-
-#include "src/enc/vp8li_enc.h"
-
-static int EncodeLossless(const uint8_t* const data, int width, int height,
-                          int effort_level,  // in [0..6] range
-                          int use_quality_100, VP8LBitWriter* const bw,
-                          WebPAuxStats* const stats) {
-  int ok = 0;
-  WebPConfig config;
-  WebPPicture picture;
-
-  WebPPictureInit(&picture);
-  picture.width = width;
-  picture.height = height;
-  picture.use_argb = 1;
-  picture.stats = stats;
-  if (!WebPPictureAlloc(&picture)) return 0;
-
-  // Transfer the alpha values to the green channel.
-  WebPDispatchAlphaToGreen(data, width, picture.width, picture.height,
-                           picture.argb, picture.argb_stride);
-
-  WebPConfigInit(&config);
-  config.lossless = 1;
-  // Enable exact, or it would alter RGB values of transparent alpha, which is
-  // normally OK but not here since we are not encoding the input image but  an
-  // internal encoding-related image containing necessary exact information in
-  // RGB channels.
-  config.exact = 1;
-  config.method = effort_level;  // impact is very small
-  // Set a low default quality for encoding alpha. Ensure that Alpha quality at
-  // lower methods (3 and below) is less than the threshold for triggering
-  // costly 'BackwardReferencesTraceBackwards'.
-  // If the alpha quality is set to 100 and the method to 6, allow for a high
-  // lossless quality to trigger the cruncher.
-  config.quality =
-      (use_quality_100 && effort_level == 6) ? 100 : 8.f * effort_level;
-  assert(config.quality >= 0 && config.quality <= 100.f);
-
-  // TODO(urvang): Temporary fix to avoid generating images that trigger
-  // a decoder bug related to alpha with color cache.
-  // See: https://code.google.com/p/webp/issues/detail?id=239
-  // Need to re-enable this later.
-  ok = (VP8LEncodeStream(&config, &picture, bw, 0 /*use_cache*/) == VP8_ENC_OK);
-  WebPPictureFree(&picture);
-  ok = ok && !bw->error_;
-  if (!ok) {
-    VP8LBitWriterWipeOut(bw);
-    return 0;
-  }
-  return 1;
-}
-
-// -----------------------------------------------------------------------------
-
-// Small struct to hold the result of a filter mode compression attempt.
-typedef struct {
-  size_t score;
-  VP8BitWriter bw;
-  WebPAuxStats stats;
-} FilterTrial;
-
-// This function always returns an initialized 'bw' object, even upon error.
-static int EncodeAlphaInternal(const uint8_t* const data, int width, int height,
-                               int method, int filter, int reduce_levels,
-                               int effort_level,  // in [0..6] range
-                               uint8_t* const tmp_alpha,
-                               FilterTrial* result) {
-  int ok = 0;
-  const uint8_t* alpha_src;
-  WebPFilterFunc filter_func;
-  uint8_t header;
-  const size_t data_size = width * height;
-  const uint8_t* output = NULL;
-  size_t output_size = 0;
-  VP8LBitWriter tmp_bw;
-
-  assert((uint64_t)data_size == (uint64_t)width * height);  // as per spec
-  assert(filter >= 0 && filter < WEBP_FILTER_LAST);
-  assert(method >= ALPHA_NO_COMPRESSION);
-  assert(method <= ALPHA_LOSSLESS_COMPRESSION);
-  assert(sizeof(header) == ALPHA_HEADER_LEN);
-
-  filter_func = WebPFilters[filter];
-  if (filter_func != NULL) {
-    filter_func(data, width, height, width, tmp_alpha);
-    alpha_src = tmp_alpha;
-  }  else {
-    alpha_src = data;
-  }
-
-  if (method != ALPHA_NO_COMPRESSION) {
-    ok = VP8LBitWriterInit(&tmp_bw, data_size >> 3);
-    ok = ok && EncodeLossless(alpha_src, width, height, effort_level,
-                              !reduce_levels, &tmp_bw, &result->stats);
-    if (ok) {
-      output = VP8LBitWriterFinish(&tmp_bw);
-      output_size = VP8LBitWriterNumBytes(&tmp_bw);
-      if (output_size > data_size) {
-        // compressed size is larger than source! Revert to uncompressed mode.
-        method = ALPHA_NO_COMPRESSION;
-        VP8LBitWriterWipeOut(&tmp_bw);
-      }
-    } else {
-      VP8LBitWriterWipeOut(&tmp_bw);
-      return 0;
-    }
-  }
-
-  if (method == ALPHA_NO_COMPRESSION) {
-    output = alpha_src;
-    output_size = data_size;
-    ok = 1;
-  }
-
-  // Emit final result.
-  header = method | (filter << 2);
-  if (reduce_levels) header |= ALPHA_PREPROCESSED_LEVELS << 4;
-
-  VP8BitWriterInit(&result->bw, ALPHA_HEADER_LEN + output_size);
-  ok = ok && VP8BitWriterAppend(&result->bw, &header, ALPHA_HEADER_LEN);
-  ok = ok && VP8BitWriterAppend(&result->bw, output, output_size);
-
-  if (method != ALPHA_NO_COMPRESSION) {
-    VP8LBitWriterWipeOut(&tmp_bw);
-  }
-  ok = ok && !result->bw.error_;
-  result->score = VP8BitWriterSize(&result->bw);
-  return ok;
-}
-
-// -----------------------------------------------------------------------------
-
-static int GetNumColors(const uint8_t* data, int width, int height,
-                        int stride) {
-  int j;
-  int colors = 0;
-  uint8_t color[256] = { 0 };
-
-  for (j = 0; j < height; ++j) {
-    int i;
-    const uint8_t* const p = data + j * stride;
-    for (i = 0; i < width; ++i) {
-      color[p[i]] = 1;
-    }
-  }
-  for (j = 0; j < 256; ++j) {
-    if (color[j] > 0) ++colors;
-  }
-  return colors;
-}
-
-#define FILTER_TRY_NONE (1 << WEBP_FILTER_NONE)
-#define FILTER_TRY_ALL ((1 << WEBP_FILTER_LAST) - 1)
-
-// Given the input 'filter' option, return an OR'd bit-set of filters to try.
-static uint32_t GetFilterMap(const uint8_t* alpha, int width, int height,
-                             int filter, int effort_level) {
-  uint32_t bit_map = 0U;
-  if (filter == WEBP_FILTER_FAST) {
-    // Quick estimate of the best candidate.
-    int try_filter_none = (effort_level > 3);
-    const int kMinColorsForFilterNone = 16;
-    const int kMaxColorsForFilterNone = 192;
-    const int num_colors = GetNumColors(alpha, width, height, width);
-    // For low number of colors, NONE yields better compression.
-    filter = (num_colors <= kMinColorsForFilterNone)
-        ? WEBP_FILTER_NONE
-        : WebPEstimateBestFilter(alpha, width, height, width);
-    bit_map |= 1 << filter;
-    // For large number of colors, try FILTER_NONE in addition to the best
-    // filter as well.
-    if (try_filter_none || num_colors > kMaxColorsForFilterNone) {
-      bit_map |= FILTER_TRY_NONE;
-    }
-  } else if (filter == WEBP_FILTER_NONE) {
-    bit_map = FILTER_TRY_NONE;
-  } else {  // WEBP_FILTER_BEST -> try all
-    bit_map = FILTER_TRY_ALL;
-  }
-  return bit_map;
-}
-
-static void InitFilterTrial(FilterTrial* const score) {
-  score->score = (size_t)~0U;
-  VP8BitWriterInit(&score->bw, 0);
-}
-
-static int ApplyFiltersAndEncode(const uint8_t* alpha, int width, int height,
-                                 size_t data_size, int method, int filter,
-                                 int reduce_levels, int effort_level,
-                                 uint8_t** const output,
-                                 size_t* const output_size,
-                                 WebPAuxStats* const stats) {
-  int ok = 1;
-  FilterTrial best;
-  uint32_t try_map =
-      GetFilterMap(alpha, width, height, filter, effort_level);
-  InitFilterTrial(&best);
-
-  if (try_map != FILTER_TRY_NONE) {
-    uint8_t* filtered_alpha =  (uint8_t*)WebPSafeMalloc(1ULL, data_size);
-    if (filtered_alpha == NULL) return 0;
-
-    for (filter = WEBP_FILTER_NONE; ok && try_map; ++filter, try_map >>= 1) {
-      if (try_map & 1) {
-        FilterTrial trial;
-        ok = EncodeAlphaInternal(alpha, width, height, method, filter,
-                                 reduce_levels, effort_level, filtered_alpha,
-                                 &trial);
-        if (ok && trial.score < best.score) {
-          VP8BitWriterWipeOut(&best.bw);
-          best = trial;
-        } else {
-          VP8BitWriterWipeOut(&trial.bw);
-        }
-      }
-    }
-    WebPSafeFree(filtered_alpha);
-  } else {
-    ok = EncodeAlphaInternal(alpha, width, height, method, WEBP_FILTER_NONE,
-                             reduce_levels, effort_level, NULL, &best);
-  }
-  if (ok) {
-#if !defined(WEBP_DISABLE_STATS)
-    if (stats != NULL) {
-      stats->lossless_features = best.stats.lossless_features;
-      stats->histogram_bits = best.stats.histogram_bits;
-      stats->transform_bits = best.stats.transform_bits;
-      stats->cache_bits = best.stats.cache_bits;
-      stats->palette_size = best.stats.palette_size;
-      stats->lossless_size = best.stats.lossless_size;
-      stats->lossless_hdr_size = best.stats.lossless_hdr_size;
-      stats->lossless_data_size = best.stats.lossless_data_size;
-    }
-#else
-    (void)stats;
-#endif
-    *output_size = VP8BitWriterSize(&best.bw);
-    *output = VP8BitWriterBuf(&best.bw);
-  } else {
-    VP8BitWriterWipeOut(&best.bw);
-  }
-  return ok;
-}
-
-static int EncodeAlpha(VP8Encoder* const enc,
-                       int quality, int method, int filter,
-                       int effort_level,
-                       uint8_t** const output, size_t* const output_size) {
-  const WebPPicture* const pic = enc->pic_;
-  const int width = pic->width;
-  const int height = pic->height;
-
-  uint8_t* quant_alpha = NULL;
-  const size_t data_size = width * height;
-  uint64_t sse = 0;
-  int ok = 1;
-  const int reduce_levels = (quality < 100);
-
-  // quick sanity checks
-  assert((uint64_t)data_size == (uint64_t)width * height);  // as per spec
-  assert(enc != NULL && pic != NULL && pic->a != NULL);
-  assert(output != NULL && output_size != NULL);
-  assert(width > 0 && height > 0);
-  assert(pic->a_stride >= width);
-  assert(filter >= WEBP_FILTER_NONE && filter <= WEBP_FILTER_FAST);
-
-  if (quality < 0 || quality > 100) {
-    return 0;
-  }
-
-  if (method < ALPHA_NO_COMPRESSION || method > ALPHA_LOSSLESS_COMPRESSION) {
-    return 0;
-  }
-
-  if (method == ALPHA_NO_COMPRESSION) {
-    // Don't filter, as filtering will make no impact on compressed size.
-    filter = WEBP_FILTER_NONE;
-  }
-
-  quant_alpha = (uint8_t*)WebPSafeMalloc(1ULL, data_size);
-  if (quant_alpha == NULL) {
-    return 0;
-  }
-
-  // Extract alpha data (width x height) from raw_data (stride x height).
-  WebPCopyPlane(pic->a, pic->a_stride, quant_alpha, width, width, height);
-
-  if (reduce_levels) {  // No Quantization required for 'quality = 100'.
-    // 16 alpha levels gives quite a low MSE w.r.t original alpha plane hence
-    // mapped to moderate quality 70. Hence Quality:[0, 70] -> Levels:[2, 16]
-    // and Quality:]70, 100] -> Levels:]16, 256].
-    const int alpha_levels = (quality <= 70) ? (2 + quality / 5)
-                                             : (16 + (quality - 70) * 8);
-    ok = QuantizeLevels(quant_alpha, width, height, alpha_levels, &sse);
-  }
-
-  if (ok) {
-    VP8FiltersInit();
-    ok = ApplyFiltersAndEncode(quant_alpha, width, height, data_size, method,
-                               filter, reduce_levels, effort_level, output,
-                               output_size, pic->stats);
-#if !defined(WEBP_DISABLE_STATS)
-    if (pic->stats != NULL) {  // need stats?
-      pic->stats->coded_size += (int)(*output_size);
-      enc->sse_[3] = sse;
-    }
-#endif
-  }
-
-  WebPSafeFree(quant_alpha);
-  return ok;
-}
-
-//------------------------------------------------------------------------------
-// Main calls
-
-static int CompressAlphaJob(void* arg1, void* dummy) {
-  VP8Encoder* const enc = (VP8Encoder*)arg1;
-  const WebPConfig* config = enc->config_;
-  uint8_t* alpha_data = NULL;
-  size_t alpha_size = 0;
-  const int effort_level = config->method;  // maps to [0..6]
-  const WEBP_FILTER_TYPE filter =
-      (config->alpha_filtering == 0) ? WEBP_FILTER_NONE :
-      (config->alpha_filtering == 1) ? WEBP_FILTER_FAST :
-                                       WEBP_FILTER_BEST;
-  if (!EncodeAlpha(enc, config->alpha_quality, config->alpha_compression,
-                   filter, effort_level, &alpha_data, &alpha_size)) {
-    return 0;
-  }
-  if (alpha_size != (uint32_t)alpha_size) {  // Sanity check.
-    WebPSafeFree(alpha_data);
-    return 0;
-  }
-  enc->alpha_data_size_ = (uint32_t)alpha_size;
-  enc->alpha_data_ = alpha_data;
-  (void)dummy;
-  return 1;
-}
-
-void VP8EncInitAlpha(VP8Encoder* const enc) {
-  WebPInitAlphaProcessing();
-  enc->has_alpha_ = WebPPictureHasTransparency(enc->pic_);
-  enc->alpha_data_ = NULL;
-  enc->alpha_data_size_ = 0;
-  if (enc->thread_level_ > 0) {
-    WebPWorker* const worker = &enc->alpha_worker_;
-    WebPGetWorkerInterface()->Init(worker);
-    worker->data1 = enc;
-    worker->data2 = NULL;
-    worker->hook = CompressAlphaJob;
-  }
-}
-
-int VP8EncStartAlpha(VP8Encoder* const enc) {
-  if (enc->has_alpha_) {
-    if (enc->thread_level_ > 0) {
-      WebPWorker* const worker = &enc->alpha_worker_;
-      // Makes sure worker is good to go.
-      if (!WebPGetWorkerInterface()->Reset(worker)) {
-        return 0;
-      }
-      WebPGetWorkerInterface()->Launch(worker);
-      return 1;
-    } else {
-      return CompressAlphaJob(enc, NULL);   // just do the job right away
-    }
-  }
-  return 1;
-}
-
-int VP8EncFinishAlpha(VP8Encoder* const enc) {
-  if (enc->has_alpha_) {
-    if (enc->thread_level_ > 0) {
-      WebPWorker* const worker = &enc->alpha_worker_;
-      if (!WebPGetWorkerInterface()->Sync(worker)) return 0;  // error
-    }
-  }
-  return WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_);
-}
-
-int VP8EncDeleteAlpha(VP8Encoder* const enc) {
-  int ok = 1;
-  if (enc->thread_level_ > 0) {
-    WebPWorker* const worker = &enc->alpha_worker_;
-    // finish anything left in flight
-    ok = WebPGetWorkerInterface()->Sync(worker);
-    // still need to end the worker, even if !ok
-    WebPGetWorkerInterface()->End(worker);
-  }
-  WebPSafeFree(enc->alpha_data_);
-  enc->alpha_data_ = NULL;
-  enc->alpha_data_size_ = 0;
-  enc->has_alpha_ = 0;
-  return ok;
-}
diff --git a/ios/Pods/libwebp/src/enc/analysis_enc.c b/ios/Pods/libwebp/src/enc/analysis_enc.c
deleted file mode 100644
index 687757a..0000000
--- a/ios/Pods/libwebp/src/enc/analysis_enc.c
+++ /dev/null
@@ -1,535 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Macroblock analysis
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "src/enc/vp8i_enc.h"
-#include "src/enc/cost_enc.h"
-#include "src/utils/utils.h"
-
-#define MAX_ITERS_K_MEANS  6
-
-//------------------------------------------------------------------------------
-// Smooth the segment map by replacing isolated block by the majority of its
-// neighbours.
-
-static void SmoothSegmentMap(VP8Encoder* const enc) {
-  int n, x, y;
-  const int w = enc->mb_w_;
-  const int h = enc->mb_h_;
-  const int majority_cnt_3_x_3_grid = 5;
-  uint8_t* const tmp = (uint8_t*)WebPSafeMalloc(w * h, sizeof(*tmp));
-  assert((uint64_t)(w * h) == (uint64_t)w * h);   // no overflow, as per spec
-
-  if (tmp == NULL) return;
-  for (y = 1; y < h - 1; ++y) {
-    for (x = 1; x < w - 1; ++x) {
-      int cnt[NUM_MB_SEGMENTS] = { 0 };
-      const VP8MBInfo* const mb = &enc->mb_info_[x + w * y];
-      int majority_seg = mb->segment_;
-      // Check the 8 neighbouring segment values.
-      cnt[mb[-w - 1].segment_]++;  // top-left
-      cnt[mb[-w + 0].segment_]++;  // top
-      cnt[mb[-w + 1].segment_]++;  // top-right
-      cnt[mb[   - 1].segment_]++;  // left
-      cnt[mb[   + 1].segment_]++;  // right
-      cnt[mb[ w - 1].segment_]++;  // bottom-left
-      cnt[mb[ w + 0].segment_]++;  // bottom
-      cnt[mb[ w + 1].segment_]++;  // bottom-right
-      for (n = 0; n < NUM_MB_SEGMENTS; ++n) {
-        if (cnt[n] >= majority_cnt_3_x_3_grid) {
-          majority_seg = n;
-          break;
-        }
-      }
-      tmp[x + y * w] = majority_seg;
-    }
-  }
-  for (y = 1; y < h - 1; ++y) {
-    for (x = 1; x < w - 1; ++x) {
-      VP8MBInfo* const mb = &enc->mb_info_[x + w * y];
-      mb->segment_ = tmp[x + y * w];
-    }
-  }
-  WebPSafeFree(tmp);
-}
-
-//------------------------------------------------------------------------------
-// set segment susceptibility alpha_ / beta_
-
-static WEBP_INLINE int clip(int v, int m, int M) {
-  return (v < m) ? m : (v > M) ? M : v;
-}
-
-static void SetSegmentAlphas(VP8Encoder* const enc,
-                             const int centers[NUM_MB_SEGMENTS],
-                             int mid) {
-  const int nb = enc->segment_hdr_.num_segments_;
-  int min = centers[0], max = centers[0];
-  int n;
-
-  if (nb > 1) {
-    for (n = 0; n < nb; ++n) {
-      if (min > centers[n]) min = centers[n];
-      if (max < centers[n]) max = centers[n];
-    }
-  }
-  if (max == min) max = min + 1;
-  assert(mid <= max && mid >= min);
-  for (n = 0; n < nb; ++n) {
-    const int alpha = 255 * (centers[n] - mid) / (max - min);
-    const int beta = 255 * (centers[n] - min) / (max - min);
-    enc->dqm_[n].alpha_ = clip(alpha, -127, 127);
-    enc->dqm_[n].beta_ = clip(beta, 0, 255);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Compute susceptibility based on DCT-coeff histograms:
-// the higher, the "easier" the macroblock is to compress.
-
-#define MAX_ALPHA 255                // 8b of precision for susceptibilities.
-#define ALPHA_SCALE (2 * MAX_ALPHA)  // scaling factor for alpha.
-#define DEFAULT_ALPHA (-1)
-#define IS_BETTER_ALPHA(alpha, best_alpha) ((alpha) > (best_alpha))
-
-static int FinalAlphaValue(int alpha) {
-  alpha = MAX_ALPHA - alpha;
-  return clip(alpha, 0, MAX_ALPHA);
-}
-
-static int GetAlpha(const VP8Histogram* const histo) {
-  // 'alpha' will later be clipped to [0..MAX_ALPHA] range, clamping outer
-  // values which happen to be mostly noise. This leaves the maximum precision
-  // for handling the useful small values which contribute most.
-  const int max_value = histo->max_value;
-  const int last_non_zero = histo->last_non_zero;
-  const int alpha =
-      (max_value > 1) ? ALPHA_SCALE * last_non_zero / max_value : 0;
-  return alpha;
-}
-
-static void InitHistogram(VP8Histogram* const histo) {
-  histo->max_value = 0;
-  histo->last_non_zero = 1;
-}
-
-static void MergeHistograms(const VP8Histogram* const in,
-                            VP8Histogram* const out) {
-  if (in->max_value > out->max_value) {
-    out->max_value = in->max_value;
-  }
-  if (in->last_non_zero > out->last_non_zero) {
-    out->last_non_zero = in->last_non_zero;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Simplified k-Means, to assign Nb segments based on alpha-histogram
-
-static void AssignSegments(VP8Encoder* const enc,
-                           const int alphas[MAX_ALPHA + 1]) {
-  // 'num_segments_' is previously validated and <= NUM_MB_SEGMENTS, but an
-  // explicit check is needed to avoid spurious warning about 'n + 1' exceeding
-  // array bounds of 'centers' with some compilers (noticed with gcc-4.9).
-  const int nb = (enc->segment_hdr_.num_segments_ < NUM_MB_SEGMENTS) ?
-                 enc->segment_hdr_.num_segments_ : NUM_MB_SEGMENTS;
-  int centers[NUM_MB_SEGMENTS];
-  int weighted_average = 0;
-  int map[MAX_ALPHA + 1];
-  int a, n, k;
-  int min_a = 0, max_a = MAX_ALPHA, range_a;
-  // 'int' type is ok for histo, and won't overflow
-  int accum[NUM_MB_SEGMENTS], dist_accum[NUM_MB_SEGMENTS];
-
-  assert(nb >= 1);
-  assert(nb <= NUM_MB_SEGMENTS);
-
-  // bracket the input
-  for (n = 0; n <= MAX_ALPHA && alphas[n] == 0; ++n) {}
-  min_a = n;
-  for (n = MAX_ALPHA; n > min_a && alphas[n] == 0; --n) {}
-  max_a = n;
-  range_a = max_a - min_a;
-
-  // Spread initial centers evenly
-  for (k = 0, n = 1; k < nb; ++k, n += 2) {
-    assert(n < 2 * nb);
-    centers[k] = min_a + (n * range_a) / (2 * nb);
-  }
-
-  for (k = 0; k < MAX_ITERS_K_MEANS; ++k) {     // few iters are enough
-    int total_weight;
-    int displaced;
-    // Reset stats
-    for (n = 0; n < nb; ++n) {
-      accum[n] = 0;
-      dist_accum[n] = 0;
-    }
-    // Assign nearest center for each 'a'
-    n = 0;    // track the nearest center for current 'a'
-    for (a = min_a; a <= max_a; ++a) {
-      if (alphas[a]) {
-        while (n + 1 < nb && abs(a - centers[n + 1]) < abs(a - centers[n])) {
-          n++;
-        }
-        map[a] = n;
-        // accumulate contribution into best centroid
-        dist_accum[n] += a * alphas[a];
-        accum[n] += alphas[a];
-      }
-    }
-    // All point are classified. Move the centroids to the
-    // center of their respective cloud.
-    displaced = 0;
-    weighted_average = 0;
-    total_weight = 0;
-    for (n = 0; n < nb; ++n) {
-      if (accum[n]) {
-        const int new_center = (dist_accum[n] + accum[n] / 2) / accum[n];
-        displaced += abs(centers[n] - new_center);
-        centers[n] = new_center;
-        weighted_average += new_center * accum[n];
-        total_weight += accum[n];
-      }
-    }
-    weighted_average = (weighted_average + total_weight / 2) / total_weight;
-    if (displaced < 5) break;   // no need to keep on looping...
-  }
-
-  // Map each original value to the closest centroid
-  for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) {
-    VP8MBInfo* const mb = &enc->mb_info_[n];
-    const int alpha = mb->alpha_;
-    mb->segment_ = map[alpha];
-    mb->alpha_ = centers[map[alpha]];  // for the record.
-  }
-
-  if (nb > 1) {
-    const int smooth = (enc->config_->preprocessing & 1);
-    if (smooth) SmoothSegmentMap(enc);
-  }
-
-  SetSegmentAlphas(enc, centers, weighted_average);  // pick some alphas.
-}
-
-//------------------------------------------------------------------------------
-// Macroblock analysis: collect histogram for each mode, deduce the maximal
-// susceptibility and set best modes for this macroblock.
-// Segment assignment is done later.
-
-// Number of modes to inspect for alpha_ evaluation. We don't need to test all
-// the possible modes during the analysis phase: we risk falling into a local
-// optimum, or be subject to boundary effect
-#define MAX_INTRA16_MODE 2
-#define MAX_INTRA4_MODE  2
-#define MAX_UV_MODE      2
-
-static int MBAnalyzeBestIntra16Mode(VP8EncIterator* const it) {
-  const int max_mode = MAX_INTRA16_MODE;
-  int mode;
-  int best_alpha = DEFAULT_ALPHA;
-  int best_mode = 0;
-
-  VP8MakeLuma16Preds(it);
-  for (mode = 0; mode < max_mode; ++mode) {
-    VP8Histogram histo;
-    int alpha;
-
-    InitHistogram(&histo);
-    VP8CollectHistogram(it->yuv_in_ + Y_OFF_ENC,
-                        it->yuv_p_ + VP8I16ModeOffsets[mode],
-                        0, 16, &histo);
-    alpha = GetAlpha(&histo);
-    if (IS_BETTER_ALPHA(alpha, best_alpha)) {
-      best_alpha = alpha;
-      best_mode = mode;
-    }
-  }
-  VP8SetIntra16Mode(it, best_mode);
-  return best_alpha;
-}
-
-static int FastMBAnalyze(VP8EncIterator* const it) {
-  // Empirical cut-off value, should be around 16 (~=block size). We use the
-  // [8-17] range and favor intra4 at high quality, intra16 for low quality.
-  const int q = (int)it->enc_->config_->quality;
-  const uint32_t kThreshold = 8 + (17 - 8) * q / 100;
-  int k;
-  uint32_t dc[16], m, m2;
-  for (k = 0; k < 16; k += 4) {
-    VP8Mean16x4(it->yuv_in_ + Y_OFF_ENC + k * BPS, &dc[k]);
-  }
-  for (m = 0, m2 = 0, k = 0; k < 16; ++k) {
-    m += dc[k];
-    m2 += dc[k] * dc[k];
-  }
-  if (kThreshold * m2 < m * m) {
-    VP8SetIntra16Mode(it, 0);   // DC16
-  } else {
-    const uint8_t modes[16] = { 0 };  // DC4
-    VP8SetIntra4Mode(it, modes);
-  }
-  return 0;
-}
-
-static int MBAnalyzeBestIntra4Mode(VP8EncIterator* const it,
-                                   int best_alpha) {
-  uint8_t modes[16];
-  const int max_mode = MAX_INTRA4_MODE;
-  int i4_alpha;
-  VP8Histogram total_histo;
-  int cur_histo = 0;
-  InitHistogram(&total_histo);
-
-  VP8IteratorStartI4(it);
-  do {
-    int mode;
-    int best_mode_alpha = DEFAULT_ALPHA;
-    VP8Histogram histos[2];
-    const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_];
-
-    VP8MakeIntra4Preds(it);
-    for (mode = 0; mode < max_mode; ++mode) {
-      int alpha;
-
-      InitHistogram(&histos[cur_histo]);
-      VP8CollectHistogram(src, it->yuv_p_ + VP8I4ModeOffsets[mode],
-                          0, 1, &histos[cur_histo]);
-      alpha = GetAlpha(&histos[cur_histo]);
-      if (IS_BETTER_ALPHA(alpha, best_mode_alpha)) {
-        best_mode_alpha = alpha;
-        modes[it->i4_] = mode;
-        cur_histo ^= 1;   // keep track of best histo so far.
-      }
-    }
-    // accumulate best histogram
-    MergeHistograms(&histos[cur_histo ^ 1], &total_histo);
-    // Note: we reuse the original samples for predictors
-  } while (VP8IteratorRotateI4(it, it->yuv_in_ + Y_OFF_ENC));
-
-  i4_alpha = GetAlpha(&total_histo);
-  if (IS_BETTER_ALPHA(i4_alpha, best_alpha)) {
-    VP8SetIntra4Mode(it, modes);
-    best_alpha = i4_alpha;
-  }
-  return best_alpha;
-}
-
-static int MBAnalyzeBestUVMode(VP8EncIterator* const it) {
-  int best_alpha = DEFAULT_ALPHA;
-  int smallest_alpha = 0;
-  int best_mode = 0;
-  const int max_mode = MAX_UV_MODE;
-  int mode;
-
-  VP8MakeChroma8Preds(it);
-  for (mode = 0; mode < max_mode; ++mode) {
-    VP8Histogram histo;
-    int alpha;
-    InitHistogram(&histo);
-    VP8CollectHistogram(it->yuv_in_ + U_OFF_ENC,
-                        it->yuv_p_ + VP8UVModeOffsets[mode],
-                        16, 16 + 4 + 4, &histo);
-    alpha = GetAlpha(&histo);
-    if (IS_BETTER_ALPHA(alpha, best_alpha)) {
-      best_alpha = alpha;
-    }
-    // The best prediction mode tends to be the one with the smallest alpha.
-    if (mode == 0 || alpha < smallest_alpha) {
-      smallest_alpha = alpha;
-      best_mode = mode;
-    }
-  }
-  VP8SetIntraUVMode(it, best_mode);
-  return best_alpha;
-}
-
-static void MBAnalyze(VP8EncIterator* const it,
-                      int alphas[MAX_ALPHA + 1],
-                      int* const alpha, int* const uv_alpha) {
-  const VP8Encoder* const enc = it->enc_;
-  int best_alpha, best_uv_alpha;
-
-  VP8SetIntra16Mode(it, 0);  // default: Intra16, DC_PRED
-  VP8SetSkip(it, 0);         // not skipped
-  VP8SetSegment(it, 0);      // default segment, spec-wise.
-
-  if (enc->method_ <= 1) {
-    best_alpha = FastMBAnalyze(it);
-  } else {
-    best_alpha = MBAnalyzeBestIntra16Mode(it);
-    if (enc->method_ >= 5) {
-      // We go and make a fast decision for intra4/intra16.
-      // It's usually not a good and definitive pick, but helps seeding the
-      // stats about level bit-cost.
-      // TODO(skal): improve criterion.
-      best_alpha = MBAnalyzeBestIntra4Mode(it, best_alpha);
-    }
-  }
-  best_uv_alpha = MBAnalyzeBestUVMode(it);
-
-  // Final susceptibility mix
-  best_alpha = (3 * best_alpha + best_uv_alpha + 2) >> 2;
-  best_alpha = FinalAlphaValue(best_alpha);
-  alphas[best_alpha]++;
-  it->mb_->alpha_ = best_alpha;   // for later remapping.
-
-  // Accumulate for later complexity analysis.
-  *alpha += best_alpha;   // mixed susceptibility (not just luma)
-  *uv_alpha += best_uv_alpha;
-}
-
-static void DefaultMBInfo(VP8MBInfo* const mb) {
-  mb->type_ = 1;     // I16x16
-  mb->uv_mode_ = 0;
-  mb->skip_ = 0;     // not skipped
-  mb->segment_ = 0;  // default segment
-  mb->alpha_ = 0;
-}
-
-//------------------------------------------------------------------------------
-// Main analysis loop:
-// Collect all susceptibilities for each macroblock and record their
-// distribution in alphas[]. Segments is assigned a-posteriori, based on
-// this histogram.
-// We also pick an intra16 prediction mode, which shouldn't be considered
-// final except for fast-encode settings. We can also pick some intra4 modes
-// and decide intra4/intra16, but that's usually almost always a bad choice at
-// this stage.
-
-static void ResetAllMBInfo(VP8Encoder* const enc) {
-  int n;
-  for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) {
-    DefaultMBInfo(&enc->mb_info_[n]);
-  }
-  // Default susceptibilities.
-  enc->dqm_[0].alpha_ = 0;
-  enc->dqm_[0].beta_ = 0;
-  // Note: we can't compute this alpha_ / uv_alpha_ -> set to default value.
-  enc->alpha_ = 0;
-  enc->uv_alpha_ = 0;
-  WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_);
-}
-
-// struct used to collect job result
-typedef struct {
-  WebPWorker worker;
-  int alphas[MAX_ALPHA + 1];
-  int alpha, uv_alpha;
-  VP8EncIterator it;
-  int delta_progress;
-} SegmentJob;
-
-// main work call
-static int DoSegmentsJob(void* arg1, void* arg2) {
-  SegmentJob* const job = (SegmentJob*)arg1;
-  VP8EncIterator* const it = (VP8EncIterator*)arg2;
-  int ok = 1;
-  if (!VP8IteratorIsDone(it)) {
-    uint8_t tmp[32 + WEBP_ALIGN_CST];
-    uint8_t* const scratch = (uint8_t*)WEBP_ALIGN(tmp);
-    do {
-      // Let's pretend we have perfect lossless reconstruction.
-      VP8IteratorImport(it, scratch);
-      MBAnalyze(it, job->alphas, &job->alpha, &job->uv_alpha);
-      ok = VP8IteratorProgress(it, job->delta_progress);
-    } while (ok && VP8IteratorNext(it));
-  }
-  return ok;
-}
-
-static void MergeJobs(const SegmentJob* const src, SegmentJob* const dst) {
-  int i;
-  for (i = 0; i <= MAX_ALPHA; ++i) dst->alphas[i] += src->alphas[i];
-  dst->alpha += src->alpha;
-  dst->uv_alpha += src->uv_alpha;
-}
-
-// initialize the job struct with some tasks to perform
-static void InitSegmentJob(VP8Encoder* const enc, SegmentJob* const job,
-                           int start_row, int end_row) {
-  WebPGetWorkerInterface()->Init(&job->worker);
-  job->worker.data1 = job;
-  job->worker.data2 = &job->it;
-  job->worker.hook = DoSegmentsJob;
-  VP8IteratorInit(enc, &job->it);
-  VP8IteratorSetRow(&job->it, start_row);
-  VP8IteratorSetCountDown(&job->it, (end_row - start_row) * enc->mb_w_);
-  memset(job->alphas, 0, sizeof(job->alphas));
-  job->alpha = 0;
-  job->uv_alpha = 0;
-  // only one of both jobs can record the progress, since we don't
-  // expect the user's hook to be multi-thread safe
-  job->delta_progress = (start_row == 0) ? 20 : 0;
-}
-
-// main entry point
-int VP8EncAnalyze(VP8Encoder* const enc) {
-  int ok = 1;
-  const int do_segments =
-      enc->config_->emulate_jpeg_size ||   // We need the complexity evaluation.
-      (enc->segment_hdr_.num_segments_ > 1) ||
-      (enc->method_ <= 1);  // for method 0 - 1, we need preds_[] to be filled.
-  if (do_segments) {
-    const int last_row = enc->mb_h_;
-    // We give a little more than a half work to the main thread.
-    const int split_row = (9 * last_row + 15) >> 4;
-    const int total_mb = last_row * enc->mb_w_;
-#ifdef WEBP_USE_THREAD
-    const int kMinSplitRow = 2;  // minimal rows needed for mt to be worth it
-    const int do_mt = (enc->thread_level_ > 0) && (split_row >= kMinSplitRow);
-#else
-    const int do_mt = 0;
-#endif
-    const WebPWorkerInterface* const worker_interface =
-        WebPGetWorkerInterface();
-    SegmentJob main_job;
-    if (do_mt) {
-      SegmentJob side_job;
-      // Note the use of '&' instead of '&&' because we must call the functions
-      // no matter what.
-      InitSegmentJob(enc, &main_job, 0, split_row);
-      InitSegmentJob(enc, &side_job, split_row, last_row);
-      // we don't need to call Reset() on main_job.worker, since we're calling
-      // WebPWorkerExecute() on it
-      ok &= worker_interface->Reset(&side_job.worker);
-      // launch the two jobs in parallel
-      if (ok) {
-        worker_interface->Launch(&side_job.worker);
-        worker_interface->Execute(&main_job.worker);
-        ok &= worker_interface->Sync(&side_job.worker);
-        ok &= worker_interface->Sync(&main_job.worker);
-      }
-      worker_interface->End(&side_job.worker);
-      if (ok) MergeJobs(&side_job, &main_job);  // merge results together
-    } else {
-      // Even for single-thread case, we use the generic Worker tools.
-      InitSegmentJob(enc, &main_job, 0, last_row);
-      worker_interface->Execute(&main_job.worker);
-      ok &= worker_interface->Sync(&main_job.worker);
-    }
-    worker_interface->End(&main_job.worker);
-    if (ok) {
-      enc->alpha_ = main_job.alpha / total_mb;
-      enc->uv_alpha_ = main_job.uv_alpha / total_mb;
-      AssignSegments(enc, main_job.alphas);
-    }
-  } else {   // Use only one default segment.
-    ResetAllMBInfo(enc);
-  }
-  return ok;
-}
-
diff --git a/ios/Pods/libwebp/src/enc/backward_references_cost_enc.c b/ios/Pods/libwebp/src/enc/backward_references_cost_enc.c
deleted file mode 100644
index 516abd7..0000000
--- a/ios/Pods/libwebp/src/enc/backward_references_cost_enc.c
+++ /dev/null
@@ -1,790 +0,0 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Improves a given set of backward references by analyzing its bit cost.
-// The algorithm is similar to the Zopfli compression algorithm but tailored to
-// images.
-//
-// Author: Vincent Rabaud (vrabaud@google.com)
-//
-
-#include <assert.h>
-
-#include "src/enc/backward_references_enc.h"
-#include "src/enc/histogram_enc.h"
-#include "src/dsp/lossless_common.h"
-#include "src/utils/color_cache_utils.h"
-#include "src/utils/utils.h"
-
-#define VALUES_IN_BYTE 256
-
-extern void VP8LClearBackwardRefs(VP8LBackwardRefs* const refs);
-extern int VP8LDistanceToPlaneCode(int xsize, int dist);
-extern void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs,
-                                      const PixOrCopy v);
-
-typedef struct {
-  double alpha_[VALUES_IN_BYTE];
-  double red_[VALUES_IN_BYTE];
-  double blue_[VALUES_IN_BYTE];
-  double distance_[NUM_DISTANCE_CODES];
-  double* literal_;
-} CostModel;
-
-static void ConvertPopulationCountTableToBitEstimates(
-    int num_symbols, const uint32_t population_counts[], double output[]) {
-  uint32_t sum = 0;
-  int nonzeros = 0;
-  int i;
-  for (i = 0; i < num_symbols; ++i) {
-    sum += population_counts[i];
-    if (population_counts[i] > 0) {
-      ++nonzeros;
-    }
-  }
-  if (nonzeros <= 1) {
-    memset(output, 0, num_symbols * sizeof(*output));
-  } else {
-    const double logsum = VP8LFastLog2(sum);
-    for (i = 0; i < num_symbols; ++i) {
-      output[i] = logsum - VP8LFastLog2(population_counts[i]);
-    }
-  }
-}
-
-static int CostModelBuild(CostModel* const m, int xsize, int cache_bits,
-                          const VP8LBackwardRefs* const refs) {
-  int ok = 0;
-  VP8LRefsCursor c = VP8LRefsCursorInit(refs);
-  VP8LHistogram* const histo = VP8LAllocateHistogram(cache_bits);
-  if (histo == NULL) goto Error;
-
-  // The following code is similar to VP8LHistogramCreate but converts the
-  // distance to plane code.
-  VP8LHistogramInit(histo, cache_bits, /*init_arrays=*/ 1);
-  while (VP8LRefsCursorOk(&c)) {
-    VP8LHistogramAddSinglePixOrCopy(histo, c.cur_pos, VP8LDistanceToPlaneCode,
-                                    xsize);
-    VP8LRefsCursorNext(&c);
-  }
-
-  ConvertPopulationCountTableToBitEstimates(
-      VP8LHistogramNumCodes(histo->palette_code_bits_),
-      histo->literal_, m->literal_);
-  ConvertPopulationCountTableToBitEstimates(
-      VALUES_IN_BYTE, histo->red_, m->red_);
-  ConvertPopulationCountTableToBitEstimates(
-      VALUES_IN_BYTE, histo->blue_, m->blue_);
-  ConvertPopulationCountTableToBitEstimates(
-      VALUES_IN_BYTE, histo->alpha_, m->alpha_);
-  ConvertPopulationCountTableToBitEstimates(
-      NUM_DISTANCE_CODES, histo->distance_, m->distance_);
-  ok = 1;
-
- Error:
-  VP8LFreeHistogram(histo);
-  return ok;
-}
-
-static WEBP_INLINE double GetLiteralCost(const CostModel* const m, uint32_t v) {
-  return m->alpha_[v >> 24] +
-         m->red_[(v >> 16) & 0xff] +
-         m->literal_[(v >> 8) & 0xff] +
-         m->blue_[v & 0xff];
-}
-
-static WEBP_INLINE double GetCacheCost(const CostModel* const m, uint32_t idx) {
-  const int literal_idx = VALUES_IN_BYTE + NUM_LENGTH_CODES + idx;
-  return m->literal_[literal_idx];
-}
-
-static WEBP_INLINE double GetLengthCost(const CostModel* const m,
-                                        uint32_t length) {
-  int code, extra_bits;
-  VP8LPrefixEncodeBits(length, &code, &extra_bits);
-  return m->literal_[VALUES_IN_BYTE + code] + extra_bits;
-}
-
-static WEBP_INLINE double GetDistanceCost(const CostModel* const m,
-                                          uint32_t distance) {
-  int code, extra_bits;
-  VP8LPrefixEncodeBits(distance, &code, &extra_bits);
-  return m->distance_[code] + extra_bits;
-}
-
-static WEBP_INLINE void AddSingleLiteralWithCostModel(
-    const uint32_t* const argb, VP8LColorCache* const hashers,
-    const CostModel* const cost_model, int idx, int use_color_cache,
-    float prev_cost, float* const cost, uint16_t* const dist_array) {
-  double cost_val = prev_cost;
-  const uint32_t color = argb[idx];
-  const int ix = use_color_cache ? VP8LColorCacheContains(hashers, color) : -1;
-  if (ix >= 0) {
-    // use_color_cache is true and hashers contains color
-    const double mul0 = 0.68;
-    cost_val += GetCacheCost(cost_model, ix) * mul0;
-  } else {
-    const double mul1 = 0.82;
-    if (use_color_cache) VP8LColorCacheInsert(hashers, color);
-    cost_val += GetLiteralCost(cost_model, color) * mul1;
-  }
-  if (cost[idx] > cost_val) {
-    cost[idx] = (float)cost_val;
-    dist_array[idx] = 1;  // only one is inserted.
-  }
-}
-
-// -----------------------------------------------------------------------------
-// CostManager and interval handling
-
-// Empirical value to avoid high memory consumption but good for performance.
-#define COST_CACHE_INTERVAL_SIZE_MAX 500
-
-// To perform backward reference every pixel at index index_ is considered and
-// the cost for the MAX_LENGTH following pixels computed. Those following pixels
-// at index index_ + k (k from 0 to MAX_LENGTH) have a cost of:
-//     cost_ = distance cost at index + GetLengthCost(cost_model, k)
-// and the minimum value is kept. GetLengthCost(cost_model, k) is cached in an
-// array of size MAX_LENGTH.
-// Instead of performing MAX_LENGTH comparisons per pixel, we keep track of the
-// minimal values using intervals of constant cost.
-// An interval is defined by the index_ of the pixel that generated it and
-// is only useful in a range of indices from start_ to end_ (exclusive), i.e.
-// it contains the minimum value for pixels between start_ and end_.
-// Intervals are stored in a linked list and ordered by start_. When a new
-// interval has a better value, old intervals are split or removed. There are
-// therefore no overlapping intervals.
-typedef struct CostInterval CostInterval;
-struct CostInterval {
-  float cost_;
-  int start_;
-  int end_;
-  int index_;
-  CostInterval* previous_;
-  CostInterval* next_;
-};
-
-// The GetLengthCost(cost_model, k) are cached in a CostCacheInterval.
-typedef struct {
-  double cost_;
-  int start_;
-  int end_;       // Exclusive.
-} CostCacheInterval;
-
-// This structure is in charge of managing intervals and costs.
-// It caches the different CostCacheInterval, caches the different
-// GetLengthCost(cost_model, k) in cost_cache_ and the CostInterval's (whose
-// count_ is limited by COST_CACHE_INTERVAL_SIZE_MAX).
-#define COST_MANAGER_MAX_FREE_LIST 10
-typedef struct {
-  CostInterval* head_;
-  int count_;  // The number of stored intervals.
-  CostCacheInterval* cache_intervals_;
-  size_t cache_intervals_size_;
-  double cost_cache_[MAX_LENGTH];  // Contains the GetLengthCost(cost_model, k).
-  float* costs_;
-  uint16_t* dist_array_;
-  // Most of the time, we only need few intervals -> use a free-list, to avoid
-  // fragmentation with small allocs in most common cases.
-  CostInterval intervals_[COST_MANAGER_MAX_FREE_LIST];
-  CostInterval* free_intervals_;
-  // These are regularly malloc'd remains. This list can't grow larger than than
-  // size COST_CACHE_INTERVAL_SIZE_MAX - COST_MANAGER_MAX_FREE_LIST, note.
-  CostInterval* recycled_intervals_;
-} CostManager;
-
-static void CostIntervalAddToFreeList(CostManager* const manager,
-                                      CostInterval* const interval) {
-  interval->next_ = manager->free_intervals_;
-  manager->free_intervals_ = interval;
-}
-
-static int CostIntervalIsInFreeList(const CostManager* const manager,
-                                    const CostInterval* const interval) {
-  return (interval >= &manager->intervals_[0] &&
-          interval <= &manager->intervals_[COST_MANAGER_MAX_FREE_LIST - 1]);
-}
-
-static void CostManagerInitFreeList(CostManager* const manager) {
-  int i;
-  manager->free_intervals_ = NULL;
-  for (i = 0; i < COST_MANAGER_MAX_FREE_LIST; ++i) {
-    CostIntervalAddToFreeList(manager, &manager->intervals_[i]);
-  }
-}
-
-static void DeleteIntervalList(CostManager* const manager,
-                               const CostInterval* interval) {
-  while (interval != NULL) {
-    const CostInterval* const next = interval->next_;
-    if (!CostIntervalIsInFreeList(manager, interval)) {
-      WebPSafeFree((void*)interval);
-    }  // else: do nothing
-    interval = next;
-  }
-}
-
-static void CostManagerClear(CostManager* const manager) {
-  if (manager == NULL) return;
-
-  WebPSafeFree(manager->costs_);
-  WebPSafeFree(manager->cache_intervals_);
-
-  // Clear the interval lists.
-  DeleteIntervalList(manager, manager->head_);
-  manager->head_ = NULL;
-  DeleteIntervalList(manager, manager->recycled_intervals_);
-  manager->recycled_intervals_ = NULL;
-
-  // Reset pointers, count_ and cache_intervals_size_.
-  memset(manager, 0, sizeof(*manager));
-  CostManagerInitFreeList(manager);
-}
-
-static int CostManagerInit(CostManager* const manager,
-                           uint16_t* const dist_array, int pix_count,
-                           const CostModel* const cost_model) {
-  int i;
-  const int cost_cache_size = (pix_count > MAX_LENGTH) ? MAX_LENGTH : pix_count;
-
-  manager->costs_ = NULL;
-  manager->cache_intervals_ = NULL;
-  manager->head_ = NULL;
-  manager->recycled_intervals_ = NULL;
-  manager->count_ = 0;
-  manager->dist_array_ = dist_array;
-  CostManagerInitFreeList(manager);
-
-  // Fill in the cost_cache_.
-  manager->cache_intervals_size_ = 1;
-  manager->cost_cache_[0] = GetLengthCost(cost_model, 0);
-  for (i = 1; i < cost_cache_size; ++i) {
-    manager->cost_cache_[i] = GetLengthCost(cost_model, i);
-    // Get the number of bound intervals.
-    if (manager->cost_cache_[i] != manager->cost_cache_[i - 1]) {
-      ++manager->cache_intervals_size_;
-    }
-  }
-
-  // With the current cost model, we usually have below 20 intervals.
-  // The worst case scenario with a cost model would be if every length has a
-  // different cost, hence MAX_LENGTH but that is impossible with the current
-  // implementation that spirals around a pixel.
-  assert(manager->cache_intervals_size_ <= MAX_LENGTH);
-  manager->cache_intervals_ = (CostCacheInterval*)WebPSafeMalloc(
-      manager->cache_intervals_size_, sizeof(*manager->cache_intervals_));
-  if (manager->cache_intervals_ == NULL) {
-    CostManagerClear(manager);
-    return 0;
-  }
-
-  // Fill in the cache_intervals_.
-  {
-    CostCacheInterval* cur = manager->cache_intervals_;
-
-    // Consecutive values in cost_cache_ are compared and if a big enough
-    // difference is found, a new interval is created and bounded.
-    cur->start_ = 0;
-    cur->end_ = 1;
-    cur->cost_ = manager->cost_cache_[0];
-    for (i = 1; i < cost_cache_size; ++i) {
-      const double cost_val = manager->cost_cache_[i];
-      if (cost_val != cur->cost_) {
-        ++cur;
-        // Initialize an interval.
-        cur->start_ = i;
-        cur->cost_ = cost_val;
-      }
-      cur->end_ = i + 1;
-    }
-  }
-
-  manager->costs_ = (float*)WebPSafeMalloc(pix_count, sizeof(*manager->costs_));
-  if (manager->costs_ == NULL) {
-    CostManagerClear(manager);
-    return 0;
-  }
-  // Set the initial costs_ high for every pixel as we will keep the minimum.
-  for (i = 0; i < pix_count; ++i) manager->costs_[i] = 1e38f;
-
-  return 1;
-}
-
-// Given the cost and the position that define an interval, update the cost at
-// pixel 'i' if it is smaller than the previously computed value.
-static WEBP_INLINE void UpdateCost(CostManager* const manager, int i,
-                                   int position, float cost) {
-  const int k = i - position;
-  assert(k >= 0 && k < MAX_LENGTH);
-
-  if (manager->costs_[i] > cost) {
-    manager->costs_[i] = cost;
-    manager->dist_array_[i] = k + 1;
-  }
-}
-
-// Given the cost and the position that define an interval, update the cost for
-// all the pixels between 'start' and 'end' excluded.
-static WEBP_INLINE void UpdateCostPerInterval(CostManager* const manager,
-                                              int start, int end, int position,
-                                              float cost) {
-  int i;
-  for (i = start; i < end; ++i) UpdateCost(manager, i, position, cost);
-}
-
-// Given two intervals, make 'prev' be the previous one of 'next' in 'manager'.
-static WEBP_INLINE void ConnectIntervals(CostManager* const manager,
-                                         CostInterval* const prev,
-                                         CostInterval* const next) {
-  if (prev != NULL) {
-    prev->next_ = next;
-  } else {
-    manager->head_ = next;
-  }
-
-  if (next != NULL) next->previous_ = prev;
-}
-
-// Pop an interval in the manager.
-static WEBP_INLINE void PopInterval(CostManager* const manager,
-                                    CostInterval* const interval) {
-  if (interval == NULL) return;
-
-  ConnectIntervals(manager, interval->previous_, interval->next_);
-  if (CostIntervalIsInFreeList(manager, interval)) {
-    CostIntervalAddToFreeList(manager, interval);
-  } else {  // recycle regularly malloc'd intervals too
-    interval->next_ = manager->recycled_intervals_;
-    manager->recycled_intervals_ = interval;
-  }
-  --manager->count_;
-  assert(manager->count_ >= 0);
-}
-
-// Update the cost at index i by going over all the stored intervals that
-// overlap with i.
-// If 'do_clean_intervals' is set to something different than 0, intervals that
-// end before 'i' will be popped.
-static WEBP_INLINE void UpdateCostAtIndex(CostManager* const manager, int i,
-                                          int do_clean_intervals) {
-  CostInterval* current = manager->head_;
-
-  while (current != NULL && current->start_ <= i) {
-    CostInterval* const next = current->next_;
-    if (current->end_ <= i) {
-      if (do_clean_intervals) {
-        // We have an outdated interval, remove it.
-        PopInterval(manager, current);
-      }
-    } else {
-      UpdateCost(manager, i, current->index_, current->cost_);
-    }
-    current = next;
-  }
-}
-
-// Given a current orphan interval and its previous interval, before
-// it was orphaned (which can be NULL), set it at the right place in the list
-// of intervals using the start_ ordering and the previous interval as a hint.
-static WEBP_INLINE void PositionOrphanInterval(CostManager* const manager,
-                                               CostInterval* const current,
-                                               CostInterval* previous) {
-  assert(current != NULL);
-
-  if (previous == NULL) previous = manager->head_;
-  while (previous != NULL && current->start_ < previous->start_) {
-    previous = previous->previous_;
-  }
-  while (previous != NULL && previous->next_ != NULL &&
-         previous->next_->start_ < current->start_) {
-    previous = previous->next_;
-  }
-
-  if (previous != NULL) {
-    ConnectIntervals(manager, current, previous->next_);
-  } else {
-    ConnectIntervals(manager, current, manager->head_);
-  }
-  ConnectIntervals(manager, previous, current);
-}
-
-// Insert an interval in the list contained in the manager by starting at
-// interval_in as a hint. The intervals are sorted by start_ value.
-static WEBP_INLINE void InsertInterval(CostManager* const manager,
-                                       CostInterval* const interval_in,
-                                       float cost, int position, int start,
-                                       int end) {
-  CostInterval* interval_new;
-
-  if (start >= end) return;
-  if (manager->count_ >= COST_CACHE_INTERVAL_SIZE_MAX) {
-    // Serialize the interval if we cannot store it.
-    UpdateCostPerInterval(manager, start, end, position, cost);
-    return;
-  }
-  if (manager->free_intervals_ != NULL) {
-    interval_new = manager->free_intervals_;
-    manager->free_intervals_ = interval_new->next_;
-  } else if (manager->recycled_intervals_ != NULL) {
-    interval_new = manager->recycled_intervals_;
-    manager->recycled_intervals_ = interval_new->next_;
-  } else {  // malloc for good
-    interval_new = (CostInterval*)WebPSafeMalloc(1, sizeof(*interval_new));
-    if (interval_new == NULL) {
-      // Write down the interval if we cannot create it.
-      UpdateCostPerInterval(manager, start, end, position, cost);
-      return;
-    }
-  }
-
-  interval_new->cost_ = cost;
-  interval_new->index_ = position;
-  interval_new->start_ = start;
-  interval_new->end_ = end;
-  PositionOrphanInterval(manager, interval_new, interval_in);
-
-  ++manager->count_;
-}
-
-// Given a new cost interval defined by its start at position, its length value
-// and distance_cost, add its contributions to the previous intervals and costs.
-// If handling the interval or one of its subintervals becomes to heavy, its
-// contribution is added to the costs right away.
-static WEBP_INLINE void PushInterval(CostManager* const manager,
-                                     double distance_cost, int position,
-                                     int len) {
-  size_t i;
-  CostInterval* interval = manager->head_;
-  CostInterval* interval_next;
-  const CostCacheInterval* const cost_cache_intervals =
-      manager->cache_intervals_;
-  // If the interval is small enough, no need to deal with the heavy
-  // interval logic, just serialize it right away. This constant is empirical.
-  const int kSkipDistance = 10;
-
-  if (len < kSkipDistance) {
-    int j;
-    for (j = position; j < position + len; ++j) {
-      const int k = j - position;
-      float cost_tmp;
-      assert(k >= 0 && k < MAX_LENGTH);
-      cost_tmp = (float)(distance_cost + manager->cost_cache_[k]);
-
-      if (manager->costs_[j] > cost_tmp) {
-        manager->costs_[j] = cost_tmp;
-        manager->dist_array_[j] = k + 1;
-      }
-    }
-    return;
-  }
-
-  for (i = 0; i < manager->cache_intervals_size_ &&
-              cost_cache_intervals[i].start_ < len;
-       ++i) {
-    // Define the intersection of the ith interval with the new one.
-    int start = position + cost_cache_intervals[i].start_;
-    const int end = position + (cost_cache_intervals[i].end_ > len
-                                 ? len
-                                 : cost_cache_intervals[i].end_);
-    const float cost = (float)(distance_cost + cost_cache_intervals[i].cost_);
-
-    for (; interval != NULL && interval->start_ < end;
-         interval = interval_next) {
-      interval_next = interval->next_;
-
-      // Make sure we have some overlap
-      if (start >= interval->end_) continue;
-
-      if (cost >= interval->cost_) {
-        // When intervals are represented, the lower, the better.
-        // [**********************************************************[
-        // start                                                    end
-        //                   [----------------------------------[
-        //                   interval->start_       interval->end_
-        // If we are worse than what we already have, add whatever we have so
-        // far up to interval.
-        const int start_new = interval->end_;
-        InsertInterval(manager, interval, cost, position, start,
-                       interval->start_);
-        start = start_new;
-        if (start >= end) break;
-        continue;
-      }
-
-      if (start <= interval->start_) {
-        if (interval->end_ <= end) {
-          //                   [----------------------------------[
-          //                   interval->start_       interval->end_
-          // [**************************************************************[
-          // start                                                        end
-          // We can safely remove the old interval as it is fully included.
-          PopInterval(manager, interval);
-        } else {
-          //              [------------------------------------[
-          //              interval->start_        interval->end_
-          // [*****************************[
-          // start                       end
-          interval->start_ = end;
-          break;
-        }
-      } else {
-        if (end < interval->end_) {
-          // [--------------------------------------------------------------[
-          // interval->start_                                  interval->end_
-          //                     [*****************************[
-          //                     start                       end
-          // We have to split the old interval as it fully contains the new one.
-          const int end_original = interval->end_;
-          interval->end_ = start;
-          InsertInterval(manager, interval, interval->cost_, interval->index_,
-                         end, end_original);
-          interval = interval->next_;
-          break;
-        } else {
-          // [------------------------------------[
-          // interval->start_        interval->end_
-          //                     [*****************************[
-          //                     start                       end
-          interval->end_ = start;
-        }
-      }
-    }
-    // Insert the remaining interval from start to end.
-    InsertInterval(manager, interval, cost, position, start, end);
-  }
-}
-
-static int BackwardReferencesHashChainDistanceOnly(
-    int xsize, int ysize, const uint32_t* const argb, int cache_bits,
-    const VP8LHashChain* const hash_chain, const VP8LBackwardRefs* const refs,
-    uint16_t* const dist_array) {
-  int i;
-  int ok = 0;
-  int cc_init = 0;
-  const int pix_count = xsize * ysize;
-  const int use_color_cache = (cache_bits > 0);
-  const size_t literal_array_size =
-      sizeof(double) * (NUM_LITERAL_CODES + NUM_LENGTH_CODES +
-                        ((cache_bits > 0) ? (1 << cache_bits) : 0));
-  const size_t cost_model_size = sizeof(CostModel) + literal_array_size;
-  CostModel* const cost_model =
-      (CostModel*)WebPSafeCalloc(1ULL, cost_model_size);
-  VP8LColorCache hashers;
-  CostManager* cost_manager =
-      (CostManager*)WebPSafeMalloc(1ULL, sizeof(*cost_manager));
-  int offset_prev = -1, len_prev = -1;
-  double offset_cost = -1;
-  int first_offset_is_constant = -1;  // initialized with 'impossible' value
-  int reach = 0;
-
-  if (cost_model == NULL || cost_manager == NULL) goto Error;
-
-  cost_model->literal_ = (double*)(cost_model + 1);
-  if (use_color_cache) {
-    cc_init = VP8LColorCacheInit(&hashers, cache_bits);
-    if (!cc_init) goto Error;
-  }
-
-  if (!CostModelBuild(cost_model, xsize, cache_bits, refs)) {
-    goto Error;
-  }
-
-  if (!CostManagerInit(cost_manager, dist_array, pix_count, cost_model)) {
-    goto Error;
-  }
-
-  // We loop one pixel at a time, but store all currently best points to
-  // non-processed locations from this point.
-  dist_array[0] = 0;
-  // Add first pixel as literal.
-  AddSingleLiteralWithCostModel(argb, &hashers, cost_model, 0, use_color_cache,
-                                0.f, cost_manager->costs_, dist_array);
-
-  for (i = 1; i < pix_count; ++i) {
-    const float prev_cost = cost_manager->costs_[i - 1];
-    int offset, len;
-    VP8LHashChainFindCopy(hash_chain, i, &offset, &len);
-
-    // Try adding the pixel as a literal.
-    AddSingleLiteralWithCostModel(argb, &hashers, cost_model, i,
-                                  use_color_cache, prev_cost,
-                                  cost_manager->costs_, dist_array);
-
-    // If we are dealing with a non-literal.
-    if (len >= 2) {
-      if (offset != offset_prev) {
-        const int code = VP8LDistanceToPlaneCode(xsize, offset);
-        offset_cost = GetDistanceCost(cost_model, code);
-        first_offset_is_constant = 1;
-        PushInterval(cost_manager, prev_cost + offset_cost, i, len);
-      } else {
-        assert(offset_cost >= 0);
-        assert(len_prev >= 0);
-        assert(first_offset_is_constant == 0 || first_offset_is_constant == 1);
-        // Instead of considering all contributions from a pixel i by calling:
-        //         PushInterval(cost_manager, prev_cost + offset_cost, i, len);
-        // we optimize these contributions in case offset_cost stays the same
-        // for consecutive pixels. This describes a set of pixels similar to a
-        // previous set (e.g. constant color regions).
-        if (first_offset_is_constant) {
-          reach = i - 1 + len_prev - 1;
-          first_offset_is_constant = 0;
-        }
-
-        if (i + len - 1 > reach) {
-          // We can only be go further with the same offset if the previous
-          // length was maxed, hence len_prev == len == MAX_LENGTH.
-          // TODO(vrabaud), bump i to the end right away (insert cache and
-          // update cost).
-          // TODO(vrabaud), check if one of the points in between does not have
-          // a lower cost.
-          // Already consider the pixel at "reach" to add intervals that are
-          // better than whatever we add.
-          int offset_j, len_j = 0;
-          int j;
-          assert(len == MAX_LENGTH || len == pix_count - i);
-          // Figure out the last consecutive pixel within [i, reach + 1] with
-          // the same offset.
-          for (j = i; j <= reach; ++j) {
-            VP8LHashChainFindCopy(hash_chain, j + 1, &offset_j, &len_j);
-            if (offset_j != offset) {
-              VP8LHashChainFindCopy(hash_chain, j, &offset_j, &len_j);
-              break;
-            }
-          }
-          // Update the cost at j - 1 and j.
-          UpdateCostAtIndex(cost_manager, j - 1, 0);
-          UpdateCostAtIndex(cost_manager, j, 0);
-
-          PushInterval(cost_manager, cost_manager->costs_[j - 1] + offset_cost,
-                       j, len_j);
-          reach = j + len_j - 1;
-        }
-      }
-    }
-
-    UpdateCostAtIndex(cost_manager, i, 1);
-    offset_prev = offset;
-    len_prev = len;
-  }
-
-  ok = !refs->error_;
-Error:
-  if (cc_init) VP8LColorCacheClear(&hashers);
-  CostManagerClear(cost_manager);
-  WebPSafeFree(cost_model);
-  WebPSafeFree(cost_manager);
-  return ok;
-}
-
-// We pack the path at the end of *dist_array and return
-// a pointer to this part of the array. Example:
-// dist_array = [1x2xx3x2] => packed [1x2x1232], chosen_path = [1232]
-static void TraceBackwards(uint16_t* const dist_array,
-                           int dist_array_size,
-                           uint16_t** const chosen_path,
-                           int* const chosen_path_size) {
-  uint16_t* path = dist_array + dist_array_size;
-  uint16_t* cur = dist_array + dist_array_size - 1;
-  while (cur >= dist_array) {
-    const int k = *cur;
-    --path;
-    *path = k;
-    cur -= k;
-  }
-  *chosen_path = path;
-  *chosen_path_size = (int)(dist_array + dist_array_size - path);
-}
-
-static int BackwardReferencesHashChainFollowChosenPath(
-    const uint32_t* const argb, int cache_bits,
-    const uint16_t* const chosen_path, int chosen_path_size,
-    const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs) {
-  const int use_color_cache = (cache_bits > 0);
-  int ix;
-  int i = 0;
-  int ok = 0;
-  int cc_init = 0;
-  VP8LColorCache hashers;
-
-  if (use_color_cache) {
-    cc_init = VP8LColorCacheInit(&hashers, cache_bits);
-    if (!cc_init) goto Error;
-  }
-
-  VP8LClearBackwardRefs(refs);
-  for (ix = 0; ix < chosen_path_size; ++ix) {
-    const int len = chosen_path[ix];
-    if (len != 1) {
-      int k;
-      const int offset = VP8LHashChainFindOffset(hash_chain, i);
-      VP8LBackwardRefsCursorAdd(refs, PixOrCopyCreateCopy(offset, len));
-      if (use_color_cache) {
-        for (k = 0; k < len; ++k) {
-          VP8LColorCacheInsert(&hashers, argb[i + k]);
-        }
-      }
-      i += len;
-    } else {
-      PixOrCopy v;
-      const int idx =
-          use_color_cache ? VP8LColorCacheContains(&hashers, argb[i]) : -1;
-      if (idx >= 0) {
-        // use_color_cache is true and hashers contains argb[i]
-        // push pixel as a color cache index
-        v = PixOrCopyCreateCacheIdx(idx);
-      } else {
-        if (use_color_cache) VP8LColorCacheInsert(&hashers, argb[i]);
-        v = PixOrCopyCreateLiteral(argb[i]);
-      }
-      VP8LBackwardRefsCursorAdd(refs, v);
-      ++i;
-    }
-  }
-  ok = !refs->error_;
- Error:
-  if (cc_init) VP8LColorCacheClear(&hashers);
-  return ok;
-}
-
-// Returns 1 on success.
-extern int VP8LBackwardReferencesTraceBackwards(
-    int xsize, int ysize, const uint32_t* const argb, int cache_bits,
-    const VP8LHashChain* const hash_chain,
-    const VP8LBackwardRefs* const refs_src, VP8LBackwardRefs* const refs_dst);
-int VP8LBackwardReferencesTraceBackwards(int xsize, int ysize,
-                                         const uint32_t* const argb,
-                                         int cache_bits,
-                                         const VP8LHashChain* const hash_chain,
-                                         const VP8LBackwardRefs* const refs_src,
-                                         VP8LBackwardRefs* const refs_dst) {
-  int ok = 0;
-  const int dist_array_size = xsize * ysize;
-  uint16_t* chosen_path = NULL;
-  int chosen_path_size = 0;
-  uint16_t* dist_array =
-      (uint16_t*)WebPSafeMalloc(dist_array_size, sizeof(*dist_array));
-
-  if (dist_array == NULL) goto Error;
-
-  if (!BackwardReferencesHashChainDistanceOnly(
-          xsize, ysize, argb, cache_bits, hash_chain, refs_src, dist_array)) {
-    goto Error;
-  }
-  TraceBackwards(dist_array, dist_array_size, &chosen_path, &chosen_path_size);
-  if (!BackwardReferencesHashChainFollowChosenPath(
-          argb, cache_bits, chosen_path, chosen_path_size, hash_chain,
-          refs_dst)) {
-    goto Error;
-  }
-  ok = 1;
- Error:
-  WebPSafeFree(dist_array);
-  return ok;
-}
diff --git a/ios/Pods/libwebp/src/enc/backward_references_enc.c b/ios/Pods/libwebp/src/enc/backward_references_enc.c
deleted file mode 100644
index 3ab7b0a..0000000
--- a/ios/Pods/libwebp/src/enc/backward_references_enc.c
+++ /dev/null
@@ -1,944 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Jyrki Alakuijala (jyrki@google.com)
-//
-
-#include <assert.h>
-#include <math.h>
-
-#include "src/enc/backward_references_enc.h"
-#include "src/enc/histogram_enc.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-#include "src/dsp/dsp.h"
-#include "src/utils/color_cache_utils.h"
-#include "src/utils/utils.h"
-
-#define MIN_BLOCK_SIZE 256  // minimum block size for backward references
-
-#define MAX_ENTROPY    (1e30f)
-
-// 1M window (4M bytes) minus 120 special codes for short distances.
-#define WINDOW_SIZE ((1 << WINDOW_SIZE_BITS) - 120)
-
-// Minimum number of pixels for which it is cheaper to encode a
-// distance + length instead of each pixel as a literal.
-#define MIN_LENGTH 4
-
-// -----------------------------------------------------------------------------
-
-static const uint8_t plane_to_code_lut[128] = {
- 96,   73,  55,  39,  23,  13,   5,  1,  255, 255, 255, 255, 255, 255, 255, 255,
- 101,  78,  58,  42,  26,  16,   8,  2,    0,   3,  9,   17,  27,  43,  59,  79,
- 102,  86,  62,  46,  32,  20,  10,  6,    4,   7,  11,  21,  33,  47,  63,  87,
- 105,  90,  70,  52,  37,  28,  18,  14,  12,  15,  19,  29,  38,  53,  71,  91,
- 110,  99,  82,  66,  48,  35,  30,  24,  22,  25,  31,  36,  49,  67,  83, 100,
- 115, 108,  94,  76,  64,  50,  44,  40,  34,  41,  45,  51,  65,  77,  95, 109,
- 118, 113, 103,  92,  80,  68,  60,  56,  54,  57,  61,  69,  81,  93, 104, 114,
- 119, 116, 111, 106,  97,  88,  84,  74,  72,  75,  85,  89,  98, 107, 112, 117
-};
-
-extern int VP8LDistanceToPlaneCode(int xsize, int dist);
-int VP8LDistanceToPlaneCode(int xsize, int dist) {
-  const int yoffset = dist / xsize;
-  const int xoffset = dist - yoffset * xsize;
-  if (xoffset <= 8 && yoffset < 8) {
-    return plane_to_code_lut[yoffset * 16 + 8 - xoffset] + 1;
-  } else if (xoffset > xsize - 8 && yoffset < 7) {
-    return plane_to_code_lut[(yoffset + 1) * 16 + 8 + (xsize - xoffset)] + 1;
-  }
-  return dist + 120;
-}
-
-// Returns the exact index where array1 and array2 are different. For an index
-// inferior or equal to best_len_match, the return value just has to be strictly
-// inferior to best_len_match. The current behavior is to return 0 if this index
-// is best_len_match, and the index itself otherwise.
-// If no two elements are the same, it returns max_limit.
-static WEBP_INLINE int FindMatchLength(const uint32_t* const array1,
-                                       const uint32_t* const array2,
-                                       int best_len_match, int max_limit) {
-  // Before 'expensive' linear match, check if the two arrays match at the
-  // current best length index.
-  if (array1[best_len_match] != array2[best_len_match]) return 0;
-
-  return VP8LVectorMismatch(array1, array2, max_limit);
-}
-
-// -----------------------------------------------------------------------------
-//  VP8LBackwardRefs
-
-struct PixOrCopyBlock {
-  PixOrCopyBlock* next_;   // next block (or NULL)
-  PixOrCopy* start_;       // data start
-  int size_;               // currently used size
-};
-
-extern void VP8LClearBackwardRefs(VP8LBackwardRefs* const refs);
-void VP8LClearBackwardRefs(VP8LBackwardRefs* const refs) {
-  assert(refs != NULL);
-  if (refs->tail_ != NULL) {
-    *refs->tail_ = refs->free_blocks_;  // recycle all blocks at once
-  }
-  refs->free_blocks_ = refs->refs_;
-  refs->tail_ = &refs->refs_;
-  refs->last_block_ = NULL;
-  refs->refs_ = NULL;
-}
-
-void VP8LBackwardRefsClear(VP8LBackwardRefs* const refs) {
-  assert(refs != NULL);
-  VP8LClearBackwardRefs(refs);
-  while (refs->free_blocks_ != NULL) {
-    PixOrCopyBlock* const next = refs->free_blocks_->next_;
-    WebPSafeFree(refs->free_blocks_);
-    refs->free_blocks_ = next;
-  }
-}
-
-void VP8LBackwardRefsInit(VP8LBackwardRefs* const refs, int block_size) {
-  assert(refs != NULL);
-  memset(refs, 0, sizeof(*refs));
-  refs->tail_ = &refs->refs_;
-  refs->block_size_ =
-      (block_size < MIN_BLOCK_SIZE) ? MIN_BLOCK_SIZE : block_size;
-}
-
-VP8LRefsCursor VP8LRefsCursorInit(const VP8LBackwardRefs* const refs) {
-  VP8LRefsCursor c;
-  c.cur_block_ = refs->refs_;
-  if (refs->refs_ != NULL) {
-    c.cur_pos = c.cur_block_->start_;
-    c.last_pos_ = c.cur_pos + c.cur_block_->size_;
-  } else {
-    c.cur_pos = NULL;
-    c.last_pos_ = NULL;
-  }
-  return c;
-}
-
-void VP8LRefsCursorNextBlock(VP8LRefsCursor* const c) {
-  PixOrCopyBlock* const b = c->cur_block_->next_;
-  c->cur_pos = (b == NULL) ? NULL : b->start_;
-  c->last_pos_ = (b == NULL) ? NULL : b->start_ + b->size_;
-  c->cur_block_ = b;
-}
-
-// Create a new block, either from the free list or allocated
-static PixOrCopyBlock* BackwardRefsNewBlock(VP8LBackwardRefs* const refs) {
-  PixOrCopyBlock* b = refs->free_blocks_;
-  if (b == NULL) {   // allocate new memory chunk
-    const size_t total_size =
-        sizeof(*b) + refs->block_size_ * sizeof(*b->start_);
-    b = (PixOrCopyBlock*)WebPSafeMalloc(1ULL, total_size);
-    if (b == NULL) {
-      refs->error_ |= 1;
-      return NULL;
-    }
-    b->start_ = (PixOrCopy*)((uint8_t*)b + sizeof(*b));  // not always aligned
-  } else {  // recycle from free-list
-    refs->free_blocks_ = b->next_;
-  }
-  *refs->tail_ = b;
-  refs->tail_ = &b->next_;
-  refs->last_block_ = b;
-  b->next_ = NULL;
-  b->size_ = 0;
-  return b;
-}
-
-extern void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs,
-                                      const PixOrCopy v);
-void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs,
-                               const PixOrCopy v) {
-  PixOrCopyBlock* b = refs->last_block_;
-  if (b == NULL || b->size_ == refs->block_size_) {
-    b = BackwardRefsNewBlock(refs);
-    if (b == NULL) return;   // refs->error_ is set
-  }
-  b->start_[b->size_++] = v;
-}
-
-// -----------------------------------------------------------------------------
-// Hash chains
-
-int VP8LHashChainInit(VP8LHashChain* const p, int size) {
-  assert(p->size_ == 0);
-  assert(p->offset_length_ == NULL);
-  assert(size > 0);
-  p->offset_length_ =
-      (uint32_t*)WebPSafeMalloc(size, sizeof(*p->offset_length_));
-  if (p->offset_length_ == NULL) return 0;
-  p->size_ = size;
-
-  return 1;
-}
-
-void VP8LHashChainClear(VP8LHashChain* const p) {
-  assert(p != NULL);
-  WebPSafeFree(p->offset_length_);
-
-  p->size_ = 0;
-  p->offset_length_ = NULL;
-}
-
-// -----------------------------------------------------------------------------
-
-#define HASH_MULTIPLIER_HI (0xc6a4a793ULL)
-#define HASH_MULTIPLIER_LO (0x5bd1e996ULL)
-
-static WEBP_INLINE uint32_t GetPixPairHash64(const uint32_t* const argb) {
-  uint32_t key;
-  key  = (argb[1] * HASH_MULTIPLIER_HI) & 0xffffffffu;
-  key += (argb[0] * HASH_MULTIPLIER_LO) & 0xffffffffu;
-  key = key >> (32 - HASH_BITS);
-  return key;
-}
-
-// Returns the maximum number of hash chain lookups to do for a
-// given compression quality. Return value in range [8, 86].
-static int GetMaxItersForQuality(int quality) {
-  return 8 + (quality * quality) / 128;
-}
-
-static int GetWindowSizeForHashChain(int quality, int xsize) {
-  const int max_window_size = (quality > 75) ? WINDOW_SIZE
-                            : (quality > 50) ? (xsize << 8)
-                            : (quality > 25) ? (xsize << 6)
-                            : (xsize << 4);
-  assert(xsize > 0);
-  return (max_window_size > WINDOW_SIZE) ? WINDOW_SIZE : max_window_size;
-}
-
-static WEBP_INLINE int MaxFindCopyLength(int len) {
-  return (len < MAX_LENGTH) ? len : MAX_LENGTH;
-}
-
-int VP8LHashChainFill(VP8LHashChain* const p, int quality,
-                      const uint32_t* const argb, int xsize, int ysize,
-                      int low_effort) {
-  const int size = xsize * ysize;
-  const int iter_max = GetMaxItersForQuality(quality);
-  const uint32_t window_size = GetWindowSizeForHashChain(quality, xsize);
-  int pos;
-  int argb_comp;
-  uint32_t base_position;
-  int32_t* hash_to_first_index;
-  // Temporarily use the p->offset_length_ as a hash chain.
-  int32_t* chain = (int32_t*)p->offset_length_;
-  assert(size > 0);
-  assert(p->size_ != 0);
-  assert(p->offset_length_ != NULL);
-
-  if (size <= 2) {
-    p->offset_length_[0] = p->offset_length_[size - 1] = 0;
-    return 1;
-  }
-
-  hash_to_first_index =
-      (int32_t*)WebPSafeMalloc(HASH_SIZE, sizeof(*hash_to_first_index));
-  if (hash_to_first_index == NULL) return 0;
-
-  // Set the int32_t array to -1.
-  memset(hash_to_first_index, 0xff, HASH_SIZE * sizeof(*hash_to_first_index));
-  // Fill the chain linking pixels with the same hash.
-  argb_comp = (argb[0] == argb[1]);
-  for (pos = 0; pos < size - 2;) {
-    uint32_t hash_code;
-    const int argb_comp_next = (argb[pos + 1] == argb[pos + 2]);
-    if (argb_comp && argb_comp_next) {
-      // Consecutive pixels with the same color will share the same hash.
-      // We therefore use a different hash: the color and its repetition
-      // length.
-      uint32_t tmp[2];
-      uint32_t len = 1;
-      tmp[0] = argb[pos];
-      // Figure out how far the pixels are the same.
-      // The last pixel has a different 64 bit hash, as its next pixel does
-      // not have the same color, so we just need to get to the last pixel equal
-      // to its follower.
-      while (pos + (int)len + 2 < size && argb[pos + len + 2] == argb[pos]) {
-        ++len;
-      }
-      if (len > MAX_LENGTH) {
-        // Skip the pixels that match for distance=1 and length>MAX_LENGTH
-        // because they are linked to their predecessor and we automatically
-        // check that in the main for loop below. Skipping means setting no
-        // predecessor in the chain, hence -1.
-        memset(chain + pos, 0xff, (len - MAX_LENGTH) * sizeof(*chain));
-        pos += len - MAX_LENGTH;
-        len = MAX_LENGTH;
-      }
-      // Process the rest of the hash chain.
-      while (len) {
-        tmp[1] = len--;
-        hash_code = GetPixPairHash64(tmp);
-        chain[pos] = hash_to_first_index[hash_code];
-        hash_to_first_index[hash_code] = pos++;
-      }
-      argb_comp = 0;
-    } else {
-      // Just move one pixel forward.
-      hash_code = GetPixPairHash64(argb + pos);
-      chain[pos] = hash_to_first_index[hash_code];
-      hash_to_first_index[hash_code] = pos++;
-      argb_comp = argb_comp_next;
-    }
-  }
-  // Process the penultimate pixel.
-  chain[pos] = hash_to_first_index[GetPixPairHash64(argb + pos)];
-
-  WebPSafeFree(hash_to_first_index);
-
-  // Find the best match interval at each pixel, defined by an offset to the
-  // pixel and a length. The right-most pixel cannot match anything to the right
-  // (hence a best length of 0) and the left-most pixel nothing to the left
-  // (hence an offset of 0).
-  assert(size > 2);
-  p->offset_length_[0] = p->offset_length_[size - 1] = 0;
-  for (base_position = size - 2; base_position > 0;) {
-    const int max_len = MaxFindCopyLength(size - 1 - base_position);
-    const uint32_t* const argb_start = argb + base_position;
-    int iter = iter_max;
-    int best_length = 0;
-    uint32_t best_distance = 0;
-    uint32_t best_argb;
-    const int min_pos =
-        (base_position > window_size) ? base_position - window_size : 0;
-    const int length_max = (max_len < 256) ? max_len : 256;
-    uint32_t max_base_position;
-
-    pos = chain[base_position];
-    if (!low_effort) {
-      int curr_length;
-      // Heuristic: use the comparison with the above line as an initialization.
-      if (base_position >= (uint32_t)xsize) {
-        curr_length = FindMatchLength(argb_start - xsize, argb_start,
-                                      best_length, max_len);
-        if (curr_length > best_length) {
-          best_length = curr_length;
-          best_distance = xsize;
-        }
-        --iter;
-      }
-      // Heuristic: compare to the previous pixel.
-      curr_length =
-          FindMatchLength(argb_start - 1, argb_start, best_length, max_len);
-      if (curr_length > best_length) {
-        best_length = curr_length;
-        best_distance = 1;
-      }
-      --iter;
-      // Skip the for loop if we already have the maximum.
-      if (best_length == MAX_LENGTH) pos = min_pos - 1;
-    }
-    best_argb = argb_start[best_length];
-
-    for (; pos >= min_pos && --iter; pos = chain[pos]) {
-      int curr_length;
-      assert(base_position > (uint32_t)pos);
-
-      if (argb[pos + best_length] != best_argb) continue;
-
-      curr_length = VP8LVectorMismatch(argb + pos, argb_start, max_len);
-      if (best_length < curr_length) {
-        best_length = curr_length;
-        best_distance = base_position - pos;
-        best_argb = argb_start[best_length];
-        // Stop if we have reached a good enough length.
-        if (best_length >= length_max) break;
-      }
-    }
-    // We have the best match but in case the two intervals continue matching
-    // to the left, we have the best matches for the left-extended pixels.
-    max_base_position = base_position;
-    while (1) {
-      assert(best_length <= MAX_LENGTH);
-      assert(best_distance <= WINDOW_SIZE);
-      p->offset_length_[base_position] =
-          (best_distance << MAX_LENGTH_BITS) | (uint32_t)best_length;
-      --base_position;
-      // Stop if we don't have a match or if we are out of bounds.
-      if (best_distance == 0 || base_position == 0) break;
-      // Stop if we cannot extend the matching intervals to the left.
-      if (base_position < best_distance ||
-          argb[base_position - best_distance] != argb[base_position]) {
-        break;
-      }
-      // Stop if we are matching at its limit because there could be a closer
-      // matching interval with the same maximum length. Then again, if the
-      // matching interval is as close as possible (best_distance == 1), we will
-      // never find anything better so let's continue.
-      if (best_length == MAX_LENGTH && best_distance != 1 &&
-          base_position + MAX_LENGTH < max_base_position) {
-        break;
-      }
-      if (best_length < MAX_LENGTH) {
-        ++best_length;
-        max_base_position = base_position;
-      }
-    }
-  }
-  return 1;
-}
-
-static WEBP_INLINE void AddSingleLiteral(uint32_t pixel, int use_color_cache,
-                                         VP8LColorCache* const hashers,
-                                         VP8LBackwardRefs* const refs) {
-  PixOrCopy v;
-  if (use_color_cache) {
-    const uint32_t key = VP8LColorCacheGetIndex(hashers, pixel);
-    if (VP8LColorCacheLookup(hashers, key) == pixel) {
-      v = PixOrCopyCreateCacheIdx(key);
-    } else {
-      v = PixOrCopyCreateLiteral(pixel);
-      VP8LColorCacheSet(hashers, key, pixel);
-    }
-  } else {
-    v = PixOrCopyCreateLiteral(pixel);
-  }
-  VP8LBackwardRefsCursorAdd(refs, v);
-}
-
-static int BackwardReferencesRle(int xsize, int ysize,
-                                 const uint32_t* const argb,
-                                 int cache_bits, VP8LBackwardRefs* const refs) {
-  const int pix_count = xsize * ysize;
-  int i, k;
-  const int use_color_cache = (cache_bits > 0);
-  VP8LColorCache hashers;
-
-  if (use_color_cache && !VP8LColorCacheInit(&hashers, cache_bits)) {
-    return 0;
-  }
-  VP8LClearBackwardRefs(refs);
-  // Add first pixel as literal.
-  AddSingleLiteral(argb[0], use_color_cache, &hashers, refs);
-  i = 1;
-  while (i < pix_count) {
-    const int max_len = MaxFindCopyLength(pix_count - i);
-    const int rle_len = FindMatchLength(argb + i, argb + i - 1, 0, max_len);
-    const int prev_row_len = (i < xsize) ? 0 :
-        FindMatchLength(argb + i, argb + i - xsize, 0, max_len);
-    if (rle_len >= prev_row_len && rle_len >= MIN_LENGTH) {
-      VP8LBackwardRefsCursorAdd(refs, PixOrCopyCreateCopy(1, rle_len));
-      // We don't need to update the color cache here since it is always the
-      // same pixel being copied, and that does not change the color cache
-      // state.
-      i += rle_len;
-    } else if (prev_row_len >= MIN_LENGTH) {
-      VP8LBackwardRefsCursorAdd(refs, PixOrCopyCreateCopy(xsize, prev_row_len));
-      if (use_color_cache) {
-        for (k = 0; k < prev_row_len; ++k) {
-          VP8LColorCacheInsert(&hashers, argb[i + k]);
-        }
-      }
-      i += prev_row_len;
-    } else {
-      AddSingleLiteral(argb[i], use_color_cache, &hashers, refs);
-      i++;
-    }
-  }
-  if (use_color_cache) VP8LColorCacheClear(&hashers);
-  return !refs->error_;
-}
-
-static int BackwardReferencesLz77(int xsize, int ysize,
-                                  const uint32_t* const argb, int cache_bits,
-                                  const VP8LHashChain* const hash_chain,
-                                  VP8LBackwardRefs* const refs) {
-  int i;
-  int i_last_check = -1;
-  int ok = 0;
-  int cc_init = 0;
-  const int use_color_cache = (cache_bits > 0);
-  const int pix_count = xsize * ysize;
-  VP8LColorCache hashers;
-
-  if (use_color_cache) {
-    cc_init = VP8LColorCacheInit(&hashers, cache_bits);
-    if (!cc_init) goto Error;
-  }
-  VP8LClearBackwardRefs(refs);
-  for (i = 0; i < pix_count;) {
-    // Alternative#1: Code the pixels starting at 'i' using backward reference.
-    int offset = 0;
-    int len = 0;
-    int j;
-    VP8LHashChainFindCopy(hash_chain, i, &offset, &len);
-    if (len >= MIN_LENGTH) {
-      const int len_ini = len;
-      int max_reach = 0;
-      const int j_max =
-          (i + len_ini >= pix_count) ? pix_count - 1 : i + len_ini;
-      // Only start from what we have not checked already.
-      i_last_check = (i > i_last_check) ? i : i_last_check;
-      // We know the best match for the current pixel but we try to find the
-      // best matches for the current pixel AND the next one combined.
-      // The naive method would use the intervals:
-      // [i,i+len) + [i+len, length of best match at i+len)
-      // while we check if we can use:
-      // [i,j) (where j<=i+len) + [j, length of best match at j)
-      for (j = i_last_check + 1; j <= j_max; ++j) {
-        const int len_j = VP8LHashChainFindLength(hash_chain, j);
-        const int reach =
-            j + (len_j >= MIN_LENGTH ? len_j : 1);  // 1 for single literal.
-        if (reach > max_reach) {
-          len = j - i;
-          max_reach = reach;
-          if (max_reach >= pix_count) break;
-        }
-      }
-    } else {
-      len = 1;
-    }
-    // Go with literal or backward reference.
-    assert(len > 0);
-    if (len == 1) {
-      AddSingleLiteral(argb[i], use_color_cache, &hashers, refs);
-    } else {
-      VP8LBackwardRefsCursorAdd(refs, PixOrCopyCreateCopy(offset, len));
-      if (use_color_cache) {
-        for (j = i; j < i + len; ++j) VP8LColorCacheInsert(&hashers, argb[j]);
-      }
-    }
-    i += len;
-  }
-
-  ok = !refs->error_;
- Error:
-  if (cc_init) VP8LColorCacheClear(&hashers);
-  return ok;
-}
-
-// Compute an LZ77 by forcing matches to happen within a given distance cost.
-// We therefore limit the algorithm to the lowest 32 values in the PlaneCode
-// definition.
-#define WINDOW_OFFSETS_SIZE_MAX 32
-static int BackwardReferencesLz77Box(int xsize, int ysize,
-                                     const uint32_t* const argb, int cache_bits,
-                                     const VP8LHashChain* const hash_chain_best,
-                                     VP8LHashChain* hash_chain,
-                                     VP8LBackwardRefs* const refs) {
-  int i;
-  const int pix_count = xsize * ysize;
-  uint16_t* counts;
-  int window_offsets[WINDOW_OFFSETS_SIZE_MAX] = {0};
-  int window_offsets_new[WINDOW_OFFSETS_SIZE_MAX] = {0};
-  int window_offsets_size = 0;
-  int window_offsets_new_size = 0;
-  uint16_t* const counts_ini =
-      (uint16_t*)WebPSafeMalloc(xsize * ysize, sizeof(*counts_ini));
-  int best_offset_prev = -1, best_length_prev = -1;
-  if (counts_ini == NULL) return 0;
-
-  // counts[i] counts how many times a pixel is repeated starting at position i.
-  i = pix_count - 2;
-  counts = counts_ini + i;
-  counts[1] = 1;
-  for (; i >= 0; --i, --counts) {
-    if (argb[i] == argb[i + 1]) {
-      // Max out the counts to MAX_LENGTH.
-      counts[0] = counts[1] + (counts[1] != MAX_LENGTH);
-    } else {
-      counts[0] = 1;
-    }
-  }
-
-  // Figure out the window offsets around a pixel. They are stored in a
-  // spiraling order around the pixel as defined by VP8LDistanceToPlaneCode.
-  {
-    int x, y;
-    for (y = 0; y <= 6; ++y) {
-      for (x = -6; x <= 6; ++x) {
-        const int offset = y * xsize + x;
-        int plane_code;
-        // Ignore offsets that bring us after the pixel.
-        if (offset <= 0) continue;
-        plane_code = VP8LDistanceToPlaneCode(xsize, offset) - 1;
-        if (plane_code >= WINDOW_OFFSETS_SIZE_MAX) continue;
-        window_offsets[plane_code] = offset;
-      }
-    }
-    // For narrow images, not all plane codes are reached, so remove those.
-    for (i = 0; i < WINDOW_OFFSETS_SIZE_MAX; ++i) {
-      if (window_offsets[i] == 0) continue;
-      window_offsets[window_offsets_size++] = window_offsets[i];
-    }
-    // Given a pixel P, find the offsets that reach pixels unreachable from P-1
-    // with any of the offsets in window_offsets[].
-    for (i = 0; i < window_offsets_size; ++i) {
-      int j;
-      int is_reachable = 0;
-      for (j = 0; j < window_offsets_size && !is_reachable; ++j) {
-        is_reachable |= (window_offsets[i] == window_offsets[j] + 1);
-      }
-      if (!is_reachable) {
-        window_offsets_new[window_offsets_new_size] = window_offsets[i];
-        ++window_offsets_new_size;
-      }
-    }
-  }
-
-  hash_chain->offset_length_[0] = 0;
-  for (i = 1; i < pix_count; ++i) {
-    int ind;
-    int best_length = VP8LHashChainFindLength(hash_chain_best, i);
-    int best_offset;
-    int do_compute = 1;
-
-    if (best_length >= MAX_LENGTH) {
-      // Do not recompute the best match if we already have a maximal one in the
-      // window.
-      best_offset = VP8LHashChainFindOffset(hash_chain_best, i);
-      for (ind = 0; ind < window_offsets_size; ++ind) {
-        if (best_offset == window_offsets[ind]) {
-          do_compute = 0;
-          break;
-        }
-      }
-    }
-    if (do_compute) {
-      // Figure out if we should use the offset/length from the previous pixel
-      // as an initial guess and therefore only inspect the offsets in
-      // window_offsets_new[].
-      const int use_prev =
-          (best_length_prev > 1) && (best_length_prev < MAX_LENGTH);
-      const int num_ind =
-          use_prev ? window_offsets_new_size : window_offsets_size;
-      best_length = use_prev ? best_length_prev - 1 : 0;
-      best_offset = use_prev ? best_offset_prev : 0;
-      // Find the longest match in a window around the pixel.
-      for (ind = 0; ind < num_ind; ++ind) {
-        int curr_length = 0;
-        int j = i;
-        int j_offset =
-            use_prev ? i - window_offsets_new[ind] : i - window_offsets[ind];
-        if (j_offset < 0 || argb[j_offset] != argb[i]) continue;
-        // The longest match is the sum of how many times each pixel is
-        // repeated.
-        do {
-          const int counts_j_offset = counts_ini[j_offset];
-          const int counts_j = counts_ini[j];
-          if (counts_j_offset != counts_j) {
-            curr_length +=
-                (counts_j_offset < counts_j) ? counts_j_offset : counts_j;
-            break;
-          }
-          // The same color is repeated counts_pos times at j_offset and j.
-          curr_length += counts_j_offset;
-          j_offset += counts_j_offset;
-          j += counts_j_offset;
-        } while (curr_length <= MAX_LENGTH && j < pix_count &&
-                 argb[j_offset] == argb[j]);
-        if (best_length < curr_length) {
-          best_offset =
-              use_prev ? window_offsets_new[ind] : window_offsets[ind];
-          if (curr_length >= MAX_LENGTH) {
-            best_length = MAX_LENGTH;
-            break;
-          } else {
-            best_length = curr_length;
-          }
-        }
-      }
-    }
-
-    assert(i + best_length <= pix_count);
-    assert(best_length <= MAX_LENGTH);
-    if (best_length <= MIN_LENGTH) {
-      hash_chain->offset_length_[i] = 0;
-      best_offset_prev = 0;
-      best_length_prev = 0;
-    } else {
-      hash_chain->offset_length_[i] =
-          (best_offset << MAX_LENGTH_BITS) | (uint32_t)best_length;
-      best_offset_prev = best_offset;
-      best_length_prev = best_length;
-    }
-  }
-  hash_chain->offset_length_[0] = 0;
-  WebPSafeFree(counts_ini);
-
-  return BackwardReferencesLz77(xsize, ysize, argb, cache_bits, hash_chain,
-                                refs);
-}
-
-// -----------------------------------------------------------------------------
-
-static void BackwardReferences2DLocality(int xsize,
-                                         const VP8LBackwardRefs* const refs) {
-  VP8LRefsCursor c = VP8LRefsCursorInit(refs);
-  while (VP8LRefsCursorOk(&c)) {
-    if (PixOrCopyIsCopy(c.cur_pos)) {
-      const int dist = c.cur_pos->argb_or_distance;
-      const int transformed_dist = VP8LDistanceToPlaneCode(xsize, dist);
-      c.cur_pos->argb_or_distance = transformed_dist;
-    }
-    VP8LRefsCursorNext(&c);
-  }
-}
-
-// Evaluate optimal cache bits for the local color cache.
-// The input *best_cache_bits sets the maximum cache bits to use (passing 0
-// implies disabling the local color cache). The local color cache is also
-// disabled for the lower (<= 25) quality.
-// Returns 0 in case of memory error.
-static int CalculateBestCacheSize(const uint32_t* argb, int quality,
-                                  const VP8LBackwardRefs* const refs,
-                                  int* const best_cache_bits) {
-  int i;
-  const int cache_bits_max = (quality <= 25) ? 0 : *best_cache_bits;
-  double entropy_min = MAX_ENTROPY;
-  int cc_init[MAX_COLOR_CACHE_BITS + 1] = { 0 };
-  VP8LColorCache hashers[MAX_COLOR_CACHE_BITS + 1];
-  VP8LRefsCursor c = VP8LRefsCursorInit(refs);
-  VP8LHistogram* histos[MAX_COLOR_CACHE_BITS + 1] = { NULL };
-  int ok = 0;
-
-  assert(cache_bits_max >= 0 && cache_bits_max <= MAX_COLOR_CACHE_BITS);
-
-  if (cache_bits_max == 0) {
-    *best_cache_bits = 0;
-    // Local color cache is disabled.
-    return 1;
-  }
-
-  // Allocate data.
-  for (i = 0; i <= cache_bits_max; ++i) {
-    histos[i] = VP8LAllocateHistogram(i);
-    if (histos[i] == NULL) goto Error;
-    VP8LHistogramInit(histos[i], i, /*init_arrays=*/ 1);
-    if (i == 0) continue;
-    cc_init[i] = VP8LColorCacheInit(&hashers[i], i);
-    if (!cc_init[i]) goto Error;
-  }
-
-  // Find the cache_bits giving the lowest entropy. The search is done in a
-  // brute-force way as the function (entropy w.r.t cache_bits) can be
-  // anything in practice.
-  while (VP8LRefsCursorOk(&c)) {
-    const PixOrCopy* const v = c.cur_pos;
-    if (PixOrCopyIsLiteral(v)) {
-      const uint32_t pix = *argb++;
-      const uint32_t a = (pix >> 24) & 0xff;
-      const uint32_t r = (pix >> 16) & 0xff;
-      const uint32_t g = (pix >>  8) & 0xff;
-      const uint32_t b = (pix >>  0) & 0xff;
-      // The keys of the caches can be derived from the longest one.
-      int key = VP8LHashPix(pix, 32 - cache_bits_max);
-      // Do not use the color cache for cache_bits = 0.
-      ++histos[0]->blue_[b];
-      ++histos[0]->literal_[g];
-      ++histos[0]->red_[r];
-      ++histos[0]->alpha_[a];
-      // Deal with cache_bits > 0.
-      for (i = cache_bits_max; i >= 1; --i, key >>= 1) {
-        if (VP8LColorCacheLookup(&hashers[i], key) == pix) {
-          ++histos[i]->literal_[NUM_LITERAL_CODES + NUM_LENGTH_CODES + key];
-        } else {
-          VP8LColorCacheSet(&hashers[i], key, pix);
-          ++histos[i]->blue_[b];
-          ++histos[i]->literal_[g];
-          ++histos[i]->red_[r];
-          ++histos[i]->alpha_[a];
-        }
-      }
-    } else {
-      // We should compute the contribution of the (distance,length)
-      // histograms but those are the same independently from the cache size.
-      // As those constant contributions are in the end added to the other
-      // histogram contributions, we can safely ignore them.
-      int len = PixOrCopyLength(v);
-      uint32_t argb_prev = *argb ^ 0xffffffffu;
-      // Update the color caches.
-      do {
-        if (*argb != argb_prev) {
-          // Efficiency: insert only if the color changes.
-          int key = VP8LHashPix(*argb, 32 - cache_bits_max);
-          for (i = cache_bits_max; i >= 1; --i, key >>= 1) {
-            hashers[i].colors_[key] = *argb;
-          }
-          argb_prev = *argb;
-        }
-        argb++;
-      } while (--len != 0);
-    }
-    VP8LRefsCursorNext(&c);
-  }
-
-  for (i = 0; i <= cache_bits_max; ++i) {
-    const double entropy = VP8LHistogramEstimateBits(histos[i]);
-    if (i == 0 || entropy < entropy_min) {
-      entropy_min = entropy;
-      *best_cache_bits = i;
-    }
-  }
-  ok = 1;
-Error:
-  for (i = 0; i <= cache_bits_max; ++i) {
-    if (cc_init[i]) VP8LColorCacheClear(&hashers[i]);
-    VP8LFreeHistogram(histos[i]);
-  }
-  return ok;
-}
-
-// Update (in-place) backward references for specified cache_bits.
-static int BackwardRefsWithLocalCache(const uint32_t* const argb,
-                                      int cache_bits,
-                                      VP8LBackwardRefs* const refs) {
-  int pixel_index = 0;
-  VP8LColorCache hashers;
-  VP8LRefsCursor c = VP8LRefsCursorInit(refs);
-  if (!VP8LColorCacheInit(&hashers, cache_bits)) return 0;
-
-  while (VP8LRefsCursorOk(&c)) {
-    PixOrCopy* const v = c.cur_pos;
-    if (PixOrCopyIsLiteral(v)) {
-      const uint32_t argb_literal = v->argb_or_distance;
-      const int ix = VP8LColorCacheContains(&hashers, argb_literal);
-      if (ix >= 0) {
-        // hashers contains argb_literal
-        *v = PixOrCopyCreateCacheIdx(ix);
-      } else {
-        VP8LColorCacheInsert(&hashers, argb_literal);
-      }
-      ++pixel_index;
-    } else {
-      // refs was created without local cache, so it can not have cache indexes.
-      int k;
-      assert(PixOrCopyIsCopy(v));
-      for (k = 0; k < v->len; ++k) {
-        VP8LColorCacheInsert(&hashers, argb[pixel_index++]);
-      }
-    }
-    VP8LRefsCursorNext(&c);
-  }
-  VP8LColorCacheClear(&hashers);
-  return 1;
-}
-
-static VP8LBackwardRefs* GetBackwardReferencesLowEffort(
-    int width, int height, const uint32_t* const argb,
-    int* const cache_bits, const VP8LHashChain* const hash_chain,
-    VP8LBackwardRefs* const refs_lz77) {
-  *cache_bits = 0;
-  if (!BackwardReferencesLz77(width, height, argb, 0, hash_chain, refs_lz77)) {
-    return NULL;
-  }
-  BackwardReferences2DLocality(width, refs_lz77);
-  return refs_lz77;
-}
-
-extern int VP8LBackwardReferencesTraceBackwards(
-    int xsize, int ysize, const uint32_t* const argb, int cache_bits,
-    const VP8LHashChain* const hash_chain,
-    const VP8LBackwardRefs* const refs_src, VP8LBackwardRefs* const refs_dst);
-static VP8LBackwardRefs* GetBackwardReferences(
-    int width, int height, const uint32_t* const argb, int quality,
-    int lz77_types_to_try, int* const cache_bits,
-    const VP8LHashChain* const hash_chain, VP8LBackwardRefs* best,
-    VP8LBackwardRefs* worst) {
-  const int cache_bits_initial = *cache_bits;
-  double bit_cost_best = -1;
-  VP8LHistogram* histo = NULL;
-  int lz77_type, lz77_type_best = 0;
-  VP8LHashChain hash_chain_box;
-  memset(&hash_chain_box, 0, sizeof(hash_chain_box));
-
-  histo = VP8LAllocateHistogram(MAX_COLOR_CACHE_BITS);
-  if (histo == NULL) goto Error;
-
-  for (lz77_type = 1; lz77_types_to_try;
-       lz77_types_to_try &= ~lz77_type, lz77_type <<= 1) {
-    int res = 0;
-    double bit_cost;
-    int cache_bits_tmp = cache_bits_initial;
-    if ((lz77_types_to_try & lz77_type) == 0) continue;
-    switch (lz77_type) {
-      case kLZ77RLE:
-        res = BackwardReferencesRle(width, height, argb, 0, worst);
-        break;
-      case kLZ77Standard:
-        // Compute LZ77 with no cache (0 bits), as the ideal LZ77 with a color
-        // cache is not that different in practice.
-        res = BackwardReferencesLz77(width, height, argb, 0, hash_chain, worst);
-        break;
-      case kLZ77Box:
-        if (!VP8LHashChainInit(&hash_chain_box, width * height)) goto Error;
-        res = BackwardReferencesLz77Box(width, height, argb, 0, hash_chain,
-                                        &hash_chain_box, worst);
-        break;
-      default:
-        assert(0);
-    }
-    if (!res) goto Error;
-
-    // Next, try with a color cache and update the references.
-    if (!CalculateBestCacheSize(argb, quality, worst, &cache_bits_tmp)) {
-      goto Error;
-    }
-    if (cache_bits_tmp > 0) {
-      if (!BackwardRefsWithLocalCache(argb, cache_bits_tmp, worst)) {
-        goto Error;
-      }
-    }
-
-    // Keep the best backward references.
-    VP8LHistogramCreate(histo, worst, cache_bits_tmp);
-    bit_cost = VP8LHistogramEstimateBits(histo);
-    if (lz77_type_best == 0 || bit_cost < bit_cost_best) {
-      VP8LBackwardRefs* const tmp = worst;
-      worst = best;
-      best = tmp;
-      bit_cost_best = bit_cost;
-      *cache_bits = cache_bits_tmp;
-      lz77_type_best = lz77_type;
-    }
-  }
-  assert(lz77_type_best > 0);
-
-  // Improve on simple LZ77 but only for high quality (TraceBackwards is
-  // costly).
-  if ((lz77_type_best == kLZ77Standard || lz77_type_best == kLZ77Box) &&
-      quality >= 25) {
-    const VP8LHashChain* const hash_chain_tmp =
-        (lz77_type_best == kLZ77Standard) ? hash_chain : &hash_chain_box;
-    if (VP8LBackwardReferencesTraceBackwards(width, height, argb, *cache_bits,
-                                             hash_chain_tmp, best, worst)) {
-      double bit_cost_trace;
-      VP8LHistogramCreate(histo, worst, *cache_bits);
-      bit_cost_trace = VP8LHistogramEstimateBits(histo);
-      if (bit_cost_trace < bit_cost_best) best = worst;
-    }
-  }
-
-  BackwardReferences2DLocality(width, best);
-
-Error:
-  VP8LHashChainClear(&hash_chain_box);
-  VP8LFreeHistogram(histo);
-  return best;
-}
-
-VP8LBackwardRefs* VP8LGetBackwardReferences(
-    int width, int height, const uint32_t* const argb, int quality,
-    int low_effort, int lz77_types_to_try, int* const cache_bits,
-    const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1,
-    VP8LBackwardRefs* const refs_tmp2) {
-  if (low_effort) {
-    return GetBackwardReferencesLowEffort(width, height, argb, cache_bits,
-                                          hash_chain, refs_tmp1);
-  } else {
-    return GetBackwardReferences(width, height, argb, quality,
-                                 lz77_types_to_try, cache_bits, hash_chain,
-                                 refs_tmp1, refs_tmp2);
-  }
-}
diff --git a/ios/Pods/libwebp/src/enc/backward_references_enc.h b/ios/Pods/libwebp/src/enc/backward_references_enc.h
deleted file mode 100644
index 103ddfd..0000000
--- a/ios/Pods/libwebp/src/enc/backward_references_enc.h
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Jyrki Alakuijala (jyrki@google.com)
-//
-
-#ifndef WEBP_ENC_BACKWARD_REFERENCES_ENC_H_
-#define WEBP_ENC_BACKWARD_REFERENCES_ENC_H_
-
-#include <assert.h>
-#include <stdlib.h>
-#include "src/webp/types.h"
-#include "src/webp/format_constants.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// The maximum allowed limit is 11.
-#define MAX_COLOR_CACHE_BITS 10
-
-// -----------------------------------------------------------------------------
-// PixOrCopy
-
-enum Mode {
-  kLiteral,
-  kCacheIdx,
-  kCopy,
-  kNone
-};
-
-typedef struct {
-  // mode as uint8_t to make the memory layout to be exactly 8 bytes.
-  uint8_t mode;
-  uint16_t len;
-  uint32_t argb_or_distance;
-} PixOrCopy;
-
-static WEBP_INLINE PixOrCopy PixOrCopyCreateCopy(uint32_t distance,
-                                                 uint16_t len) {
-  PixOrCopy retval;
-  retval.mode = kCopy;
-  retval.argb_or_distance = distance;
-  retval.len = len;
-  return retval;
-}
-
-static WEBP_INLINE PixOrCopy PixOrCopyCreateCacheIdx(int idx) {
-  PixOrCopy retval;
-  assert(idx >= 0);
-  assert(idx < (1 << MAX_COLOR_CACHE_BITS));
-  retval.mode = kCacheIdx;
-  retval.argb_or_distance = idx;
-  retval.len = 1;
-  return retval;
-}
-
-static WEBP_INLINE PixOrCopy PixOrCopyCreateLiteral(uint32_t argb) {
-  PixOrCopy retval;
-  retval.mode = kLiteral;
-  retval.argb_or_distance = argb;
-  retval.len = 1;
-  return retval;
-}
-
-static WEBP_INLINE int PixOrCopyIsLiteral(const PixOrCopy* const p) {
-  return (p->mode == kLiteral);
-}
-
-static WEBP_INLINE int PixOrCopyIsCacheIdx(const PixOrCopy* const p) {
-  return (p->mode == kCacheIdx);
-}
-
-static WEBP_INLINE int PixOrCopyIsCopy(const PixOrCopy* const p) {
-  return (p->mode == kCopy);
-}
-
-static WEBP_INLINE uint32_t PixOrCopyLiteral(const PixOrCopy* const p,
-                                             int component) {
-  assert(p->mode == kLiteral);
-  return (p->argb_or_distance >> (component * 8)) & 0xff;
-}
-
-static WEBP_INLINE uint32_t PixOrCopyLength(const PixOrCopy* const p) {
-  return p->len;
-}
-
-static WEBP_INLINE uint32_t PixOrCopyCacheIdx(const PixOrCopy* const p) {
-  assert(p->mode == kCacheIdx);
-  assert(p->argb_or_distance < (1U << MAX_COLOR_CACHE_BITS));
-  return p->argb_or_distance;
-}
-
-static WEBP_INLINE uint32_t PixOrCopyDistance(const PixOrCopy* const p) {
-  assert(p->mode == kCopy);
-  return p->argb_or_distance;
-}
-
-// -----------------------------------------------------------------------------
-// VP8LHashChain
-
-#define HASH_BITS 18
-#define HASH_SIZE (1 << HASH_BITS)
-
-// If you change this, you need MAX_LENGTH_BITS + WINDOW_SIZE_BITS <= 32 as it
-// is used in VP8LHashChain.
-#define MAX_LENGTH_BITS 12
-#define WINDOW_SIZE_BITS 20
-// We want the max value to be attainable and stored in MAX_LENGTH_BITS bits.
-#define MAX_LENGTH ((1 << MAX_LENGTH_BITS) - 1)
-#if MAX_LENGTH_BITS + WINDOW_SIZE_BITS > 32
-#error "MAX_LENGTH_BITS + WINDOW_SIZE_BITS > 32"
-#endif
-
-typedef struct VP8LHashChain VP8LHashChain;
-struct VP8LHashChain {
-  // The 20 most significant bits contain the offset at which the best match
-  // is found. These 20 bits are the limit defined by GetWindowSizeForHashChain
-  // (through WINDOW_SIZE = 1<<20).
-  // The lower 12 bits contain the length of the match. The 12 bit limit is
-  // defined in MaxFindCopyLength with MAX_LENGTH=4096.
-  uint32_t* offset_length_;
-  // This is the maximum size of the hash_chain that can be constructed.
-  // Typically this is the pixel count (width x height) for a given image.
-  int size_;
-};
-
-// Must be called first, to set size.
-int VP8LHashChainInit(VP8LHashChain* const p, int size);
-// Pre-compute the best matches for argb.
-int VP8LHashChainFill(VP8LHashChain* const p, int quality,
-                      const uint32_t* const argb, int xsize, int ysize,
-                      int low_effort);
-void VP8LHashChainClear(VP8LHashChain* const p);  // release memory
-
-static WEBP_INLINE int VP8LHashChainFindOffset(const VP8LHashChain* const p,
-                                               const int base_position) {
-  return p->offset_length_[base_position] >> MAX_LENGTH_BITS;
-}
-
-static WEBP_INLINE int VP8LHashChainFindLength(const VP8LHashChain* const p,
-                                               const int base_position) {
-  return p->offset_length_[base_position] & ((1U << MAX_LENGTH_BITS) - 1);
-}
-
-static WEBP_INLINE void VP8LHashChainFindCopy(const VP8LHashChain* const p,
-                                              int base_position,
-                                              int* const offset_ptr,
-                                              int* const length_ptr) {
-  *offset_ptr = VP8LHashChainFindOffset(p, base_position);
-  *length_ptr = VP8LHashChainFindLength(p, base_position);
-}
-
-// -----------------------------------------------------------------------------
-// VP8LBackwardRefs (block-based backward-references storage)
-
-// maximum number of reference blocks the image will be segmented into
-#define MAX_REFS_BLOCK_PER_IMAGE 16
-
-typedef struct PixOrCopyBlock PixOrCopyBlock;   // forward declaration
-typedef struct VP8LBackwardRefs VP8LBackwardRefs;
-
-// Container for blocks chain
-struct VP8LBackwardRefs {
-  int block_size_;               // common block-size
-  int error_;                    // set to true if some memory error occurred
-  PixOrCopyBlock* refs_;         // list of currently used blocks
-  PixOrCopyBlock** tail_;        // for list recycling
-  PixOrCopyBlock* free_blocks_;  // free-list
-  PixOrCopyBlock* last_block_;   // used for adding new refs (internal)
-};
-
-// Initialize the object. 'block_size' is the common block size to store
-// references (typically, width * height / MAX_REFS_BLOCK_PER_IMAGE).
-void VP8LBackwardRefsInit(VP8LBackwardRefs* const refs, int block_size);
-// Release memory for backward references.
-void VP8LBackwardRefsClear(VP8LBackwardRefs* const refs);
-
-// Cursor for iterating on references content
-typedef struct {
-  // public:
-  PixOrCopy* cur_pos;           // current position
-  // private:
-  PixOrCopyBlock* cur_block_;   // current block in the refs list
-  const PixOrCopy* last_pos_;   // sentinel for switching to next block
-} VP8LRefsCursor;
-
-// Returns a cursor positioned at the beginning of the references list.
-VP8LRefsCursor VP8LRefsCursorInit(const VP8LBackwardRefs* const refs);
-// Returns true if cursor is pointing at a valid position.
-static WEBP_INLINE int VP8LRefsCursorOk(const VP8LRefsCursor* const c) {
-  return (c->cur_pos != NULL);
-}
-// Move to next block of references. Internal, not to be called directly.
-void VP8LRefsCursorNextBlock(VP8LRefsCursor* const c);
-// Move to next position, or NULL. Should not be called if !VP8LRefsCursorOk().
-static WEBP_INLINE void VP8LRefsCursorNext(VP8LRefsCursor* const c) {
-  assert(c != NULL);
-  assert(VP8LRefsCursorOk(c));
-  if (++c->cur_pos == c->last_pos_) VP8LRefsCursorNextBlock(c);
-}
-
-// -----------------------------------------------------------------------------
-// Main entry points
-
-enum VP8LLZ77Type {
-  kLZ77Standard = 1,
-  kLZ77RLE = 2,
-  kLZ77Box = 4
-};
-
-// Evaluates best possible backward references for specified quality.
-// The input cache_bits to 'VP8LGetBackwardReferences' sets the maximum cache
-// bits to use (passing 0 implies disabling the local color cache).
-// The optimal cache bits is evaluated and set for the *cache_bits parameter.
-// The return value is the pointer to the best of the two backward refs viz,
-// refs[0] or refs[1].
-VP8LBackwardRefs* VP8LGetBackwardReferences(
-    int width, int height, const uint32_t* const argb, int quality,
-    int low_effort, int lz77_types_to_try, int* const cache_bits,
-    const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1,
-    VP8LBackwardRefs* const refs_tmp2);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // WEBP_ENC_BACKWARD_REFERENCES_ENC_H_
diff --git a/ios/Pods/libwebp/src/enc/config_enc.c b/ios/Pods/libwebp/src/enc/config_enc.c
deleted file mode 100644
index 9d48289..0000000
--- a/ios/Pods/libwebp/src/enc/config_enc.c
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Coding tools configuration
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include "src/webp/encode.h"
-
-//------------------------------------------------------------------------------
-// WebPConfig
-//------------------------------------------------------------------------------
-
-int WebPConfigInitInternal(WebPConfig* config,
-                           WebPPreset preset, float quality, int version) {
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_ENCODER_ABI_VERSION)) {
-    return 0;   // caller/system version mismatch!
-  }
-  if (config == NULL) return 0;
-
-  config->quality = quality;
-  config->target_size = 0;
-  config->target_PSNR = 0.;
-  config->method = 4;
-  config->sns_strength = 50;
-  config->filter_strength = 60;   // mid-filtering
-  config->filter_sharpness = 0;
-  config->filter_type = 1;        // default: strong (so U/V is filtered too)
-  config->partitions = 0;
-  config->segments = 4;
-  config->pass = 1;
-  config->show_compressed = 0;
-  config->preprocessing = 0;
-  config->autofilter = 0;
-  config->partition_limit = 0;
-  config->alpha_compression = 1;
-  config->alpha_filtering = 1;
-  config->alpha_quality = 100;
-  config->lossless = 0;
-  config->exact = 0;
-  config->image_hint = WEBP_HINT_DEFAULT;
-  config->emulate_jpeg_size = 0;
-  config->thread_level = 0;
-  config->low_memory = 0;
-  config->near_lossless = 100;
-  config->use_delta_palette = 0;
-  config->use_sharp_yuv = 0;
-
-  // TODO(skal): tune.
-  switch (preset) {
-    case WEBP_PRESET_PICTURE:
-      config->sns_strength = 80;
-      config->filter_sharpness = 4;
-      config->filter_strength = 35;
-      config->preprocessing &= ~2;   // no dithering
-      break;
-    case WEBP_PRESET_PHOTO:
-      config->sns_strength = 80;
-      config->filter_sharpness = 3;
-      config->filter_strength = 30;
-      config->preprocessing |= 2;
-      break;
-    case WEBP_PRESET_DRAWING:
-      config->sns_strength = 25;
-      config->filter_sharpness = 6;
-      config->filter_strength = 10;
-      break;
-    case WEBP_PRESET_ICON:
-      config->sns_strength = 0;
-      config->filter_strength = 0;   // disable filtering to retain sharpness
-      config->preprocessing &= ~2;   // no dithering
-      break;
-    case WEBP_PRESET_TEXT:
-      config->sns_strength = 0;
-      config->filter_strength = 0;   // disable filtering to retain sharpness
-      config->preprocessing &= ~2;   // no dithering
-      config->segments = 2;
-      break;
-    case WEBP_PRESET_DEFAULT:
-    default:
-      break;
-  }
-  return WebPValidateConfig(config);
-}
-
-int WebPValidateConfig(const WebPConfig* config) {
-  if (config == NULL) return 0;
-  if (config->quality < 0 || config->quality > 100) return 0;
-  if (config->target_size < 0) return 0;
-  if (config->target_PSNR < 0) return 0;
-  if (config->method < 0 || config->method > 6) return 0;
-  if (config->segments < 1 || config->segments > 4) return 0;
-  if (config->sns_strength < 0 || config->sns_strength > 100) return 0;
-  if (config->filter_strength < 0 || config->filter_strength > 100) return 0;
-  if (config->filter_sharpness < 0 || config->filter_sharpness > 7) return 0;
-  if (config->filter_type < 0 || config->filter_type > 1) return 0;
-  if (config->autofilter < 0 || config->autofilter > 1) return 0;
-  if (config->pass < 1 || config->pass > 10) return 0;
-  if (config->show_compressed < 0 || config->show_compressed > 1) return 0;
-  if (config->preprocessing < 0 || config->preprocessing > 7) return 0;
-  if (config->partitions < 0 || config->partitions > 3) return 0;
-  if (config->partition_limit < 0 || config->partition_limit > 100) return 0;
-  if (config->alpha_compression < 0) return 0;
-  if (config->alpha_filtering < 0) return 0;
-  if (config->alpha_quality < 0 || config->alpha_quality > 100) return 0;
-  if (config->lossless < 0 || config->lossless > 1) return 0;
-  if (config->near_lossless < 0 || config->near_lossless > 100) return 0;
-  if (config->image_hint >= WEBP_HINT_LAST) return 0;
-  if (config->emulate_jpeg_size < 0 || config->emulate_jpeg_size > 1) return 0;
-  if (config->thread_level < 0 || config->thread_level > 1) return 0;
-  if (config->low_memory < 0 || config->low_memory > 1) return 0;
-  if (config->exact < 0 || config->exact > 1) return 0;
-  if (config->use_delta_palette < 0 || config->use_delta_palette > 1) {
-    return 0;
-  }
-  if (config->use_sharp_yuv < 0 || config->use_sharp_yuv > 1) return 0;
-
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-
-#define MAX_LEVEL 9
-
-// Mapping between -z level and -m / -q parameter settings.
-static const struct {
-  uint8_t method_;
-  uint8_t quality_;
-} kLosslessPresets[MAX_LEVEL + 1] = {
-  { 0,  0 }, { 1, 20 }, { 2, 25 }, { 3, 30 }, { 3, 50 },
-  { 4, 50 }, { 4, 75 }, { 4, 90 }, { 5, 90 }, { 6, 100 }
-};
-
-int WebPConfigLosslessPreset(WebPConfig* config, int level) {
-  if (config == NULL || level < 0 || level > MAX_LEVEL) return 0;
-  config->lossless = 1;
-  config->method = kLosslessPresets[level].method_;
-  config->quality = kLosslessPresets[level].quality_;
-  return 1;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/cost_enc.c b/ios/Pods/libwebp/src/enc/cost_enc.c
deleted file mode 100644
index 48fd9bc..0000000
--- a/ios/Pods/libwebp/src/enc/cost_enc.c
+++ /dev/null
@@ -1,342 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Cost tables for level and modes
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/enc/cost_enc.h"
-
-//------------------------------------------------------------------------------
-// Level cost tables
-
-// For each given level, the following table gives the pattern of contexts to
-// use for coding it (in [][0]) as well as the bit value to use for each
-// context (in [][1]).
-const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2] = {
-                  {0x001, 0x000}, {0x007, 0x001}, {0x00f, 0x005},
-  {0x00f, 0x00d}, {0x033, 0x003}, {0x033, 0x003}, {0x033, 0x023},
-  {0x033, 0x023}, {0x033, 0x023}, {0x033, 0x023}, {0x0d3, 0x013},
-  {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013},
-  {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x013}, {0x0d3, 0x093},
-  {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
-  {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
-  {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093},
-  {0x0d3, 0x093}, {0x0d3, 0x093}, {0x0d3, 0x093}, {0x153, 0x053},
-  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
-  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
-  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
-  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
-  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
-  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
-  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053},
-  {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x053}, {0x153, 0x153}
-};
-
-static int VariableLevelCost(int level, const uint8_t probas[NUM_PROBAS]) {
-  int pattern = VP8LevelCodes[level - 1][0];
-  int bits = VP8LevelCodes[level - 1][1];
-  int cost = 0;
-  int i;
-  for (i = 2; pattern; ++i) {
-    if (pattern & 1) {
-      cost += VP8BitCost(bits & 1, probas[i]);
-    }
-    bits >>= 1;
-    pattern >>= 1;
-  }
-  return cost;
-}
-
-//------------------------------------------------------------------------------
-// Pre-calc level costs once for all
-
-void VP8CalculateLevelCosts(VP8EncProba* const proba) {
-  int ctype, band, ctx;
-
-  if (!proba->dirty_) return;  // nothing to do.
-
-  for (ctype = 0; ctype < NUM_TYPES; ++ctype) {
-    int n;
-    for (band = 0; band < NUM_BANDS; ++band) {
-      for (ctx = 0; ctx < NUM_CTX; ++ctx) {
-        const uint8_t* const p = proba->coeffs_[ctype][band][ctx];
-        uint16_t* const table = proba->level_cost_[ctype][band][ctx];
-        const int cost0 = (ctx > 0) ? VP8BitCost(1, p[0]) : 0;
-        const int cost_base = VP8BitCost(1, p[1]) + cost0;
-        int v;
-        table[0] = VP8BitCost(0, p[1]) + cost0;
-        for (v = 1; v <= MAX_VARIABLE_LEVEL; ++v) {
-          table[v] = cost_base + VariableLevelCost(v, p);
-        }
-        // Starting at level 67 and up, the variable part of the cost is
-        // actually constant.
-      }
-    }
-    for (n = 0; n < 16; ++n) {    // replicate bands. We don't need to sentinel.
-      for (ctx = 0; ctx < NUM_CTX; ++ctx) {
-        proba->remapped_costs_[ctype][n][ctx] =
-            proba->level_cost_[ctype][VP8EncBands[n]][ctx];
-      }
-    }
-  }
-  proba->dirty_ = 0;
-}
-
-//------------------------------------------------------------------------------
-// Mode cost tables.
-
-// These are the fixed probabilities (in the coding trees) turned into bit-cost
-// by calling VP8BitCost().
-const uint16_t VP8FixedCostsUV[4] = { 302, 984, 439, 642 };
-// note: these values include the fixed VP8BitCost(1, 145) mode selection cost.
-const uint16_t VP8FixedCostsI16[4] = { 663, 919, 872, 919 };
-const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES] = {
-  { {   40, 1151, 1723, 1874, 2103, 2019, 1628, 1777, 2226, 2137 },
-    {  192,  469, 1296, 1308, 1849, 1794, 1781, 1703, 1713, 1522 },
-    {  142,  910,  762, 1684, 1849, 1576, 1460, 1305, 1801, 1657 },
-    {  559,  641, 1370,  421, 1182, 1569, 1612, 1725,  863, 1007 },
-    {  299, 1059, 1256, 1108,  636, 1068, 1581, 1883,  869, 1142 },
-    {  277, 1111,  707, 1362, 1089,  672, 1603, 1541, 1545, 1291 },
-    {  214,  781, 1609, 1303, 1632, 2229,  726, 1560, 1713,  918 },
-    {  152, 1037, 1046, 1759, 1983, 2174, 1358,  742, 1740, 1390 },
-    {  512, 1046, 1420,  753,  752, 1297, 1486, 1613,  460, 1207 },
-    {  424,  827, 1362,  719, 1462, 1202, 1199, 1476, 1199,  538 } },
-  { {  240,  402, 1134, 1491, 1659, 1505, 1517, 1555, 1979, 2099 },
-    {  467,  242,  960, 1232, 1714, 1620, 1834, 1570, 1676, 1391 },
-    {  500,  455,  463, 1507, 1699, 1282, 1564,  982, 2114, 2114 },
-    {  672,  643, 1372,  331, 1589, 1667, 1453, 1938,  996,  876 },
-    {  458,  783, 1037,  911,  738,  968, 1165, 1518,  859, 1033 },
-    {  504,  815,  504, 1139, 1219,  719, 1506, 1085, 1268, 1268 },
-    {  333,  630, 1445, 1239, 1883, 3672,  799, 1548, 1865,  598 },
-    {  399,  644,  746, 1342, 1856, 1350, 1493,  613, 1855, 1015 },
-    {  622,  749, 1205,  608, 1066, 1408, 1290, 1406,  546,  971 },
-    {  500,  753, 1041,  668, 1230, 1617, 1297, 1425, 1383,  523 } },
-  { {  394,  553,  523, 1502, 1536,  981, 1608, 1142, 1666, 2181 },
-    {  655,  430,  375, 1411, 1861, 1220, 1677, 1135, 1978, 1553 },
-    {  690,  640,  245, 1954, 2070, 1194, 1528,  982, 1972, 2232 },
-    {  559,  834,  741,  867, 1131,  980, 1225,  852, 1092,  784 },
-    {  690,  875,  516,  959,  673,  894, 1056, 1190, 1528, 1126 },
-    {  740,  951,  384, 1277, 1177,  492, 1579, 1155, 1846, 1513 },
-    {  323,  775, 1062, 1776, 3062, 1274,  813, 1188, 1372,  655 },
-    {  488,  971,  484, 1767, 1515, 1775, 1115,  503, 1539, 1461 },
-    {  740, 1006,  998,  709,  851, 1230, 1337,  788,  741,  721 },
-    {  522, 1073,  573, 1045, 1346,  887, 1046, 1146, 1203,  697 } },
-  { {  105,  864, 1442, 1009, 1934, 1840, 1519, 1920, 1673, 1579 },
-    {  534,  305, 1193,  683, 1388, 2164, 1802, 1894, 1264, 1170 },
-    {  305,  518,  877, 1108, 1426, 3215, 1425, 1064, 1320, 1242 },
-    {  683,  732, 1927,  257, 1493, 2048, 1858, 1552, 1055,  947 },
-    {  394,  814, 1024,  660,  959, 1556, 1282, 1289,  893, 1047 },
-    {  528,  615,  996,  940, 1201,  635, 1094, 2515,  803, 1358 },
-    {  347,  614, 1609, 1187, 3133, 1345, 1007, 1339, 1017,  667 },
-    {  218,  740,  878, 1605, 3650, 3650, 1345,  758, 1357, 1617 },
-    {  672,  750, 1541,  558, 1257, 1599, 1870, 2135,  402, 1087 },
-    {  592,  684, 1161,  430, 1092, 1497, 1475, 1489, 1095,  822 } },
-  { {  228, 1056, 1059, 1368,  752,  982, 1512, 1518,  987, 1782 },
-    {  494,  514,  818,  942,  965,  892, 1610, 1356, 1048, 1363 },
-    {  512,  648,  591, 1042,  761,  991, 1196, 1454, 1309, 1463 },
-    {  683,  749, 1043,  676,  841, 1396, 1133, 1138,  654,  939 },
-    {  622, 1101, 1126,  994,  361, 1077, 1203, 1318,  877, 1219 },
-    {  631, 1068,  857, 1650,  651,  477, 1650, 1419,  828, 1170 },
-    {  555,  727, 1068, 1335, 3127, 1339,  820, 1331, 1077,  429 },
-    {  504,  879,  624, 1398,  889,  889, 1392,  808,  891, 1406 },
-    {  683, 1602, 1289,  977,  578,  983, 1280, 1708,  406, 1122 },
-    {  399,  865, 1433, 1070, 1072,  764,  968, 1477, 1223,  678 } },
-  { {  333,  760,  935, 1638, 1010,  529, 1646, 1410, 1472, 2219 },
-    {  512,  494,  750, 1160, 1215,  610, 1870, 1868, 1628, 1169 },
-    {  572,  646,  492, 1934, 1208,  603, 1580, 1099, 1398, 1995 },
-    {  786,  789,  942,  581, 1018,  951, 1599, 1207,  731,  768 },
-    {  690, 1015,  672, 1078,  582,  504, 1693, 1438, 1108, 2897 },
-    {  768, 1267,  571, 2005, 1243,  244, 2881, 1380, 1786, 1453 },
-    {  452,  899, 1293,  903, 1311, 3100,  465, 1311, 1319,  813 },
-    {  394,  927,  942, 1103, 1358, 1104,  946,  593, 1363, 1109 },
-    {  559, 1005, 1007, 1016,  658, 1173, 1021, 1164,  623, 1028 },
-    {  564,  796,  632, 1005, 1014,  863, 2316, 1268,  938,  764 } },
-  { {  266,  606, 1098, 1228, 1497, 1243,  948, 1030, 1734, 1461 },
-    {  366,  585,  901, 1060, 1407, 1247,  876, 1134, 1620, 1054 },
-    {  452,  565,  542, 1729, 1479, 1479, 1016,  886, 2938, 1150 },
-    {  555, 1088, 1533,  950, 1354,  895,  834, 1019, 1021,  496 },
-    {  704,  815, 1193,  971,  973,  640, 1217, 2214,  832,  578 },
-    {  672, 1245,  579,  871,  875,  774,  872, 1273, 1027,  949 },
-    {  296, 1134, 2050, 1784, 1636, 3425,  442, 1550, 2076,  722 },
-    {  342,  982, 1259, 1846, 1848, 1848,  622,  568, 1847, 1052 },
-    {  555, 1064, 1304,  828,  746, 1343, 1075, 1329, 1078,  494 },
-    {  288, 1167, 1285, 1174, 1639, 1639,  833, 2254, 1304,  509 } },
-  { {  342,  719,  767, 1866, 1757, 1270, 1246,  550, 1746, 2151 },
-    {  483,  653,  694, 1509, 1459, 1410, 1218,  507, 1914, 1266 },
-    {  488,  757,  447, 2979, 1813, 1268, 1654,  539, 1849, 2109 },
-    {  522, 1097, 1085,  851, 1365, 1111,  851,  901,  961,  605 },
-    {  709,  716,  841,  728,  736,  945,  941,  862, 2845, 1057 },
-    {  512, 1323,  500, 1336, 1083,  681, 1342,  717, 1604, 1350 },
-    {  452, 1155, 1372, 1900, 1501, 3290,  311,  944, 1919,  922 },
-    {  403, 1520,  977, 2132, 1733, 3522, 1076,  276, 3335, 1547 },
-    {  559, 1374, 1101,  615,  673, 2462,  974,  795,  984,  984 },
-    {  547, 1122, 1062,  812, 1410,  951, 1140,  622, 1268,  651 } },
-  { {  165,  982, 1235,  938, 1334, 1366, 1659, 1578,  964, 1612 },
-    {  592,  422,  925,  847, 1139, 1112, 1387, 2036,  861, 1041 },
-    {  403,  837,  732,  770,  941, 1658, 1250,  809, 1407, 1407 },
-    {  896,  874, 1071,  381, 1568, 1722, 1437, 2192,  480, 1035 },
-    {  640, 1098, 1012, 1032,  684, 1382, 1581, 2106,  416,  865 },
-    {  559, 1005,  819,  914,  710,  770, 1418,  920,  838, 1435 },
-    {  415, 1258, 1245,  870, 1278, 3067,  770, 1021, 1287,  522 },
-    {  406,  990,  601, 1009, 1265, 1265, 1267,  759, 1017, 1277 },
-    {  968, 1182, 1329,  788, 1032, 1292, 1705, 1714,  203, 1403 },
-    {  732,  877, 1279,  471,  901, 1161, 1545, 1294,  755,  755 } },
-  { {  111,  931, 1378, 1185, 1933, 1648, 1148, 1714, 1873, 1307 },
-    {  406,  414, 1030, 1023, 1910, 1404, 1313, 1647, 1509,  793 },
-    {  342,  640,  575, 1088, 1241, 1349, 1161, 1350, 1756, 1502 },
-    {  559,  766, 1185,  357, 1682, 1428, 1329, 1897, 1219,  802 },
-    {  473,  909, 1164,  771,  719, 2508, 1427, 1432,  722,  782 },
-    {  342,  892,  785, 1145, 1150,  794, 1296, 1550,  973, 1057 },
-    {  208, 1036, 1326, 1343, 1606, 3395,  815, 1455, 1618,  712 },
-    {  228,  928,  890, 1046, 3499, 1711,  994,  829, 1720, 1318 },
-    {  768,  724, 1058,  636,  991, 1075, 1319, 1324,  616,  825 },
-    {  305, 1167, 1358,  899, 1587, 1587,  987, 1988, 1332,  501 } }
-};
-
-//------------------------------------------------------------------------------
-// helper functions for residuals struct VP8Residual.
-
-void VP8InitResidual(int first, int coeff_type,
-                     VP8Encoder* const enc, VP8Residual* const res) {
-  res->coeff_type = coeff_type;
-  res->prob  = enc->proba_.coeffs_[coeff_type];
-  res->stats = enc->proba_.stats_[coeff_type];
-  res->costs = enc->proba_.remapped_costs_[coeff_type];
-  res->first = first;
-}
-
-//------------------------------------------------------------------------------
-// Mode costs
-
-int VP8GetCostLuma4(VP8EncIterator* const it, const int16_t levels[16]) {
-  const int x = (it->i4_ & 3), y = (it->i4_ >> 2);
-  VP8Residual res;
-  VP8Encoder* const enc = it->enc_;
-  int R = 0;
-  int ctx;
-
-  VP8InitResidual(0, 3, enc, &res);
-  ctx = it->top_nz_[x] + it->left_nz_[y];
-  VP8SetResidualCoeffs(levels, &res);
-  R += VP8GetResidualCost(ctx, &res);
-  return R;
-}
-
-int VP8GetCostLuma16(VP8EncIterator* const it, const VP8ModeScore* const rd) {
-  VP8Residual res;
-  VP8Encoder* const enc = it->enc_;
-  int x, y;
-  int R = 0;
-
-  VP8IteratorNzToBytes(it);   // re-import the non-zero context
-
-  // DC
-  VP8InitResidual(0, 1, enc, &res);
-  VP8SetResidualCoeffs(rd->y_dc_levels, &res);
-  R += VP8GetResidualCost(it->top_nz_[8] + it->left_nz_[8], &res);
-
-  // AC
-  VP8InitResidual(1, 0, enc, &res);
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x) {
-      const int ctx = it->top_nz_[x] + it->left_nz_[y];
-      VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res);
-      R += VP8GetResidualCost(ctx, &res);
-      it->top_nz_[x] = it->left_nz_[y] = (res.last >= 0);
-    }
-  }
-  return R;
-}
-
-int VP8GetCostUV(VP8EncIterator* const it, const VP8ModeScore* const rd) {
-  VP8Residual res;
-  VP8Encoder* const enc = it->enc_;
-  int ch, x, y;
-  int R = 0;
-
-  VP8IteratorNzToBytes(it);  // re-import the non-zero context
-
-  VP8InitResidual(0, 2, enc, &res);
-  for (ch = 0; ch <= 2; ch += 2) {
-    for (y = 0; y < 2; ++y) {
-      for (x = 0; x < 2; ++x) {
-        const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y];
-        VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res);
-        R += VP8GetResidualCost(ctx, &res);
-        it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = (res.last >= 0);
-      }
-    }
-  }
-  return R;
-}
-
-
-//------------------------------------------------------------------------------
-// Recording of token probabilities.
-
-// We keep the table-free variant around for reference, in case.
-#define USE_LEVEL_CODE_TABLE
-
-// Simulate block coding, but only record statistics.
-// Note: no need to record the fixed probas.
-int VP8RecordCoeffs(int ctx, const VP8Residual* const res) {
-  int n = res->first;
-  // should be stats[VP8EncBands[n]], but it's equivalent for n=0 or 1
-  proba_t* s = res->stats[n][ctx];
-  if (res->last  < 0) {
-    VP8RecordStats(0, s + 0);
-    return 0;
-  }
-  while (n <= res->last) {
-    int v;
-    VP8RecordStats(1, s + 0);  // order of record doesn't matter
-    while ((v = res->coeffs[n++]) == 0) {
-      VP8RecordStats(0, s + 1);
-      s = res->stats[VP8EncBands[n]][0];
-    }
-    VP8RecordStats(1, s + 1);
-    if (!VP8RecordStats(2u < (unsigned int)(v + 1), s + 2)) {  // v = -1 or 1
-      s = res->stats[VP8EncBands[n]][1];
-    } else {
-      v = abs(v);
-#if !defined(USE_LEVEL_CODE_TABLE)
-      if (!VP8RecordStats(v > 4, s + 3)) {
-        if (VP8RecordStats(v != 2, s + 4))
-          VP8RecordStats(v == 4, s + 5);
-      } else if (!VP8RecordStats(v > 10, s + 6)) {
-        VP8RecordStats(v > 6, s + 7);
-      } else if (!VP8RecordStats((v >= 3 + (8 << 2)), s + 8)) {
-        VP8RecordStats((v >= 3 + (8 << 1)), s + 9);
-      } else {
-        VP8RecordStats((v >= 3 + (8 << 3)), s + 10);
-      }
-#else
-      if (v > MAX_VARIABLE_LEVEL) {
-        v = MAX_VARIABLE_LEVEL;
-      }
-
-      {
-        const int bits = VP8LevelCodes[v - 1][1];
-        int pattern = VP8LevelCodes[v - 1][0];
-        int i;
-        for (i = 0; (pattern >>= 1) != 0; ++i) {
-          const int mask = 2 << i;
-          if (pattern & 1) VP8RecordStats(!!(bits & mask), s + 3 + i);
-        }
-      }
-#endif
-      s = res->stats[VP8EncBands[n]][2];
-    }
-  }
-  if (n < 16) VP8RecordStats(0, s + 0);
-  return 1;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/cost_enc.h b/ios/Pods/libwebp/src/enc/cost_enc.h
deleted file mode 100644
index a4b177b..0000000
--- a/ios/Pods/libwebp/src/enc/cost_enc.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Cost tables for level and modes.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_ENC_COST_ENC_H_
-#define WEBP_ENC_COST_ENC_H_
-
-#include <assert.h>
-#include <stdlib.h>
-#include "src/enc/vp8i_enc.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// On-the-fly info about the current set of residuals. Handy to avoid
-// passing zillions of params.
-typedef struct VP8Residual VP8Residual;
-struct VP8Residual {
-  int first;
-  int last;
-  const int16_t* coeffs;
-
-  int coeff_type;
-  ProbaArray*   prob;
-  StatsArray*   stats;
-  CostArrayPtr  costs;
-};
-
-void VP8InitResidual(int first, int coeff_type,
-                     VP8Encoder* const enc, VP8Residual* const res);
-
-int VP8RecordCoeffs(int ctx, const VP8Residual* const res);
-
-// Record proba context used.
-static WEBP_INLINE int VP8RecordStats(int bit, proba_t* const stats) {
-  proba_t p = *stats;
-  // An overflow is inbound. Note we handle this at 0xfffe0000u instead of
-  // 0xffff0000u to make sure p + 1u does not overflow.
-  if (p >= 0xfffe0000u) {
-    p = ((p + 1u) >> 1) & 0x7fff7fffu;  // -> divide the stats by 2.
-  }
-  // record bit count (lower 16 bits) and increment total count (upper 16 bits).
-  p += 0x00010000u + bit;
-  *stats = p;
-  return bit;
-}
-
-// Cost of coding one event with probability 'proba'.
-static WEBP_INLINE int VP8BitCost(int bit, uint8_t proba) {
-  return !bit ? VP8EntropyCost[proba] : VP8EntropyCost[255 - proba];
-}
-
-// Level cost calculations
-extern const uint16_t VP8LevelCodes[MAX_VARIABLE_LEVEL][2];
-void VP8CalculateLevelCosts(VP8EncProba* const proba);
-static WEBP_INLINE int VP8LevelCost(const uint16_t* const table, int level) {
-  return VP8LevelFixedCosts[level]
-       + table[(level > MAX_VARIABLE_LEVEL) ? MAX_VARIABLE_LEVEL : level];
-}
-
-// Mode costs
-extern const uint16_t VP8FixedCostsUV[4];
-extern const uint16_t VP8FixedCostsI16[4];
-extern const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES];
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_ENC_COST_ENC_H_
diff --git a/ios/Pods/libwebp/src/enc/filter_enc.c b/ios/Pods/libwebp/src/enc/filter_enc.c
deleted file mode 100644
index 580800b..0000000
--- a/ios/Pods/libwebp/src/enc/filter_enc.c
+++ /dev/null
@@ -1,235 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Selecting filter level
-//
-// Author: somnath@google.com (Somnath Banerjee)
-
-#include <assert.h>
-#include "src/enc/vp8i_enc.h"
-#include "src/dsp/dsp.h"
-
-// This table gives, for a given sharpness, the filtering strength to be
-// used (at least) in order to filter a given edge step delta.
-// This is constructed by brute force inspection: for all delta, we iterate
-// over all possible filtering strength / thresh until needs_filter() returns
-// true.
-#define MAX_DELTA_SIZE 64
-static const uint8_t kLevelsFromDelta[8][MAX_DELTA_SIZE] = {
-  { 0,   1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
-    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 },
-  { 0,  1,  2,  3,  5,  6,  7,  8,  9, 11, 12, 13, 14, 15, 17, 18,
-    20, 21, 23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 41, 42,
-    44, 45, 47, 48, 50, 51, 53, 54, 56, 57, 59, 60, 62, 63, 63, 63,
-    63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 },
-  {  0,  1,  2,  3,  5,  6,  7,  8,  9, 11, 12, 13, 14, 16, 17, 19,
-    20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43,
-    44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 63, 63, 63,
-    63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 },
-  {  0,  1,  2,  3,  5,  6,  7,  8,  9, 11, 12, 13, 15, 16, 18, 19,
-    21, 22, 24, 25, 27, 28, 30, 31, 33, 34, 36, 37, 39, 40, 42, 43,
-    45, 46, 48, 49, 51, 52, 54, 55, 57, 58, 60, 61, 63, 63, 63, 63,
-    63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 },
-  {  0,  1,  2,  3,  5,  6,  7,  8,  9, 11, 12, 14, 15, 17, 18, 20,
-    21, 23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 41, 42, 44,
-    45, 47, 48, 50, 51, 53, 54, 56, 57, 59, 60, 62, 63, 63, 63, 63,
-    63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 },
-  {  0,  1,  2,  4,  5,  7,  8,  9, 11, 12, 13, 15, 16, 17, 19, 20,
-    22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44,
-    46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 63, 63, 63, 63,
-    63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 },
-  {  0,  1,  2,  4,  5,  7,  8,  9, 11, 12, 13, 15, 16, 18, 19, 21,
-    22, 24, 25, 27, 28, 30, 31, 33, 34, 36, 37, 39, 40, 42, 43, 45,
-    46, 48, 49, 51, 52, 54, 55, 57, 58, 60, 61, 63, 63, 63, 63, 63,
-    63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 },
-  {  0,  1,  2,  4,  5,  7,  8,  9, 11, 12, 14, 15, 17, 18, 20, 21,
-    23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 38, 39, 41, 42, 44, 45,
-    47, 48, 50, 51, 53, 54, 56, 57, 59, 60, 62, 63, 63, 63, 63, 63,
-    63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }
-};
-
-int VP8FilterStrengthFromDelta(int sharpness, int delta) {
-  const int pos = (delta < MAX_DELTA_SIZE) ? delta : MAX_DELTA_SIZE - 1;
-  assert(sharpness >= 0 && sharpness <= 7);
-  return kLevelsFromDelta[sharpness][pos];
-}
-
-//------------------------------------------------------------------------------
-// Paragraph 15.4: compute the inner-edge filtering strength
-
-#if !defined(WEBP_REDUCE_SIZE)
-
-static int GetILevel(int sharpness, int level) {
-  if (sharpness > 0) {
-    if (sharpness > 4) {
-      level >>= 2;
-    } else {
-      level >>= 1;
-    }
-    if (level > 9 - sharpness) {
-      level = 9 - sharpness;
-    }
-  }
-  if (level < 1) level = 1;
-  return level;
-}
-
-static void DoFilter(const VP8EncIterator* const it, int level) {
-  const VP8Encoder* const enc = it->enc_;
-  const int ilevel = GetILevel(enc->config_->filter_sharpness, level);
-  const int limit = 2 * level + ilevel;
-
-  uint8_t* const y_dst = it->yuv_out2_ + Y_OFF_ENC;
-  uint8_t* const u_dst = it->yuv_out2_ + U_OFF_ENC;
-  uint8_t* const v_dst = it->yuv_out2_ + V_OFF_ENC;
-
-  // copy current block to yuv_out2_
-  memcpy(y_dst, it->yuv_out_, YUV_SIZE_ENC * sizeof(uint8_t));
-
-  if (enc->filter_hdr_.simple_ == 1) {   // simple
-    VP8SimpleHFilter16i(y_dst, BPS, limit);
-    VP8SimpleVFilter16i(y_dst, BPS, limit);
-  } else {    // complex
-    const int hev_thresh = (level >= 40) ? 2 : (level >= 15) ? 1 : 0;
-    VP8HFilter16i(y_dst, BPS, limit, ilevel, hev_thresh);
-    VP8HFilter8i(u_dst, v_dst, BPS, limit, ilevel, hev_thresh);
-    VP8VFilter16i(y_dst, BPS, limit, ilevel, hev_thresh);
-    VP8VFilter8i(u_dst, v_dst, BPS, limit, ilevel, hev_thresh);
-  }
-}
-
-//------------------------------------------------------------------------------
-// SSIM metric for one macroblock
-
-static double GetMBSSIM(const uint8_t* yuv1, const uint8_t* yuv2) {
-  int x, y;
-  double sum = 0.;
-
-  // compute SSIM in a 10 x 10 window
-  for (y = VP8_SSIM_KERNEL; y < 16 - VP8_SSIM_KERNEL; y++) {
-    for (x = VP8_SSIM_KERNEL; x < 16 - VP8_SSIM_KERNEL; x++) {
-      sum += VP8SSIMGetClipped(yuv1 + Y_OFF_ENC, BPS, yuv2 + Y_OFF_ENC, BPS,
-                               x, y, 16, 16);
-    }
-  }
-  for (x = 1; x < 7; x++) {
-    for (y = 1; y < 7; y++) {
-      sum += VP8SSIMGetClipped(yuv1 + U_OFF_ENC, BPS, yuv2 + U_OFF_ENC, BPS,
-                               x, y, 8, 8);
-      sum += VP8SSIMGetClipped(yuv1 + V_OFF_ENC, BPS, yuv2 + V_OFF_ENC, BPS,
-                               x, y, 8, 8);
-    }
-  }
-  return sum;
-}
-
-#endif  // !defined(WEBP_REDUCE_SIZE)
-
-//------------------------------------------------------------------------------
-// Exposed APIs: Encoder should call the following 3 functions to adjust
-// loop filter strength
-
-void VP8InitFilter(VP8EncIterator* const it) {
-#if !defined(WEBP_REDUCE_SIZE)
-  if (it->lf_stats_ != NULL) {
-    int s, i;
-    for (s = 0; s < NUM_MB_SEGMENTS; s++) {
-      for (i = 0; i < MAX_LF_LEVELS; i++) {
-        (*it->lf_stats_)[s][i] = 0;
-      }
-    }
-    VP8SSIMDspInit();
-  }
-#else
-  (void)it;
-#endif
-}
-
-void VP8StoreFilterStats(VP8EncIterator* const it) {
-#if !defined(WEBP_REDUCE_SIZE)
-  int d;
-  VP8Encoder* const enc = it->enc_;
-  const int s = it->mb_->segment_;
-  const int level0 = enc->dqm_[s].fstrength_;
-
-  // explore +/-quant range of values around level0
-  const int delta_min = -enc->dqm_[s].quant_;
-  const int delta_max = enc->dqm_[s].quant_;
-  const int step_size = (delta_max - delta_min >= 4) ? 4 : 1;
-
-  if (it->lf_stats_ == NULL) return;
-
-  // NOTE: Currently we are applying filter only across the sublock edges
-  // There are two reasons for that.
-  // 1. Applying filter on macro block edges will change the pixels in
-  // the left and top macro blocks. That will be hard to restore
-  // 2. Macro Blocks on the bottom and right are not yet compressed. So we
-  // cannot apply filter on the right and bottom macro block edges.
-  if (it->mb_->type_ == 1 && it->mb_->skip_) return;
-
-  // Always try filter level  zero
-  (*it->lf_stats_)[s][0] += GetMBSSIM(it->yuv_in_, it->yuv_out_);
-
-  for (d = delta_min; d <= delta_max; d += step_size) {
-    const int level = level0 + d;
-    if (level <= 0 || level >= MAX_LF_LEVELS) {
-      continue;
-    }
-    DoFilter(it, level);
-    (*it->lf_stats_)[s][level] += GetMBSSIM(it->yuv_in_, it->yuv_out2_);
-  }
-#else  // defined(WEBP_REDUCE_SIZE)
-  (void)it;
-#endif  // !defined(WEBP_REDUCE_SIZE)
-}
-
-void VP8AdjustFilterStrength(VP8EncIterator* const it) {
-  VP8Encoder* const enc = it->enc_;
-#if !defined(WEBP_REDUCE_SIZE)
-  if (it->lf_stats_ != NULL) {
-    int s;
-    for (s = 0; s < NUM_MB_SEGMENTS; s++) {
-      int i, best_level = 0;
-      // Improvement over filter level 0 should be at least 1e-5 (relatively)
-      double best_v = 1.00001 * (*it->lf_stats_)[s][0];
-      for (i = 1; i < MAX_LF_LEVELS; i++) {
-        const double v = (*it->lf_stats_)[s][i];
-        if (v > best_v) {
-          best_v = v;
-          best_level = i;
-        }
-      }
-      enc->dqm_[s].fstrength_ = best_level;
-    }
-    return;
-  }
-#endif  // !defined(WEBP_REDUCE_SIZE)
-  if (enc->config_->filter_strength > 0) {
-    int max_level = 0;
-    int s;
-    for (s = 0; s < NUM_MB_SEGMENTS; s++) {
-      VP8SegmentInfo* const dqm = &enc->dqm_[s];
-      // this '>> 3' accounts for some inverse WHT scaling
-      const int delta = (dqm->max_edge_ * dqm->y2_.q_[1]) >> 3;
-      const int level =
-          VP8FilterStrengthFromDelta(enc->filter_hdr_.sharpness_, delta);
-      if (level > dqm->fstrength_) {
-        dqm->fstrength_ = level;
-      }
-      if (max_level < dqm->fstrength_) {
-        max_level = dqm->fstrength_;
-      }
-    }
-    enc->filter_hdr_.level_ = max_level;
-  }
-}
-
-// -----------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/frame_enc.c b/ios/Pods/libwebp/src/enc/frame_enc.c
deleted file mode 100644
index 1aec376..0000000
--- a/ios/Pods/libwebp/src/enc/frame_enc.c
+++ /dev/null
@@ -1,890 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//   frame coding and analysis
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <string.h>
-#include <math.h>
-
-#include "src/enc/cost_enc.h"
-#include "src/enc/vp8i_enc.h"
-#include "src/dsp/dsp.h"
-#include "src/webp/format_constants.h"  // RIFF constants
-
-#define SEGMENT_VISU 0
-#define DEBUG_SEARCH 0    // useful to track search convergence
-
-//------------------------------------------------------------------------------
-// multi-pass convergence
-
-#define HEADER_SIZE_ESTIMATE (RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE +  \
-                              VP8_FRAME_HEADER_SIZE)
-#define DQ_LIMIT 0.4  // convergence is considered reached if dq < DQ_LIMIT
-// we allow 2k of extra head-room in PARTITION0 limit.
-#define PARTITION0_SIZE_LIMIT ((VP8_MAX_PARTITION0_SIZE - 2048ULL) << 11)
-
-typedef struct {  // struct for organizing convergence in either size or PSNR
-  int is_first;
-  float dq;
-  float q, last_q;
-  double value, last_value;   // PSNR or size
-  double target;
-  int do_size_search;
-} PassStats;
-
-static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) {
-  const uint64_t target_size = (uint64_t)enc->config_->target_size;
-  const int do_size_search = (target_size != 0);
-  const float target_PSNR = enc->config_->target_PSNR;
-
-  s->is_first = 1;
-  s->dq = 10.f;
-  s->q = s->last_q = enc->config_->quality;
-  s->target = do_size_search ? (double)target_size
-            : (target_PSNR > 0.) ? target_PSNR
-            : 40.;   // default, just in case
-  s->value = s->last_value = 0.;
-  s->do_size_search = do_size_search;
-  return do_size_search;
-}
-
-static float Clamp(float v, float min, float max) {
-  return (v < min) ? min : (v > max) ? max : v;
-}
-
-static float ComputeNextQ(PassStats* const s) {
-  float dq;
-  if (s->is_first) {
-    dq = (s->value > s->target) ? -s->dq : s->dq;
-    s->is_first = 0;
-  } else if (s->value != s->last_value) {
-    const double slope = (s->target - s->value) / (s->last_value - s->value);
-    dq = (float)(slope * (s->last_q - s->q));
-  } else {
-    dq = 0.;  // we're done?!
-  }
-  // Limit variable to avoid large swings.
-  s->dq = Clamp(dq, -30.f, 30.f);
-  s->last_q = s->q;
-  s->last_value = s->value;
-  s->q = Clamp(s->q + s->dq, 0.f, 100.f);
-  return s->q;
-}
-
-//------------------------------------------------------------------------------
-// Tables for level coding
-
-const uint8_t VP8Cat3[] = { 173, 148, 140 };
-const uint8_t VP8Cat4[] = { 176, 155, 140, 135 };
-const uint8_t VP8Cat5[] = { 180, 157, 141, 134, 130 };
-const uint8_t VP8Cat6[] =
-    { 254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129 };
-
-//------------------------------------------------------------------------------
-// Reset the statistics about: number of skips, token proba, level cost,...
-
-static void ResetStats(VP8Encoder* const enc) {
-  VP8EncProba* const proba = &enc->proba_;
-  VP8CalculateLevelCosts(proba);
-  proba->nb_skip_ = 0;
-}
-
-//------------------------------------------------------------------------------
-// Skip decision probability
-
-#define SKIP_PROBA_THRESHOLD 250  // value below which using skip_proba is OK.
-
-static int CalcSkipProba(uint64_t nb, uint64_t total) {
-  return (int)(total ? (total - nb) * 255 / total : 255);
-}
-
-// Returns the bit-cost for coding the skip probability.
-static int FinalizeSkipProba(VP8Encoder* const enc) {
-  VP8EncProba* const proba = &enc->proba_;
-  const int nb_mbs = enc->mb_w_ * enc->mb_h_;
-  const int nb_events = proba->nb_skip_;
-  int size;
-  proba->skip_proba_ = CalcSkipProba(nb_events, nb_mbs);
-  proba->use_skip_proba_ = (proba->skip_proba_ < SKIP_PROBA_THRESHOLD);
-  size = 256;   // 'use_skip_proba' bit
-  if (proba->use_skip_proba_) {
-    size +=  nb_events * VP8BitCost(1, proba->skip_proba_)
-         + (nb_mbs - nb_events) * VP8BitCost(0, proba->skip_proba_);
-    size += 8 * 256;   // cost of signaling the skip_proba_ itself.
-  }
-  return size;
-}
-
-// Collect statistics and deduce probabilities for next coding pass.
-// Return the total bit-cost for coding the probability updates.
-static int CalcTokenProba(int nb, int total) {
-  assert(nb <= total);
-  return nb ? (255 - nb * 255 / total) : 255;
-}
-
-// Cost of coding 'nb' 1's and 'total-nb' 0's using 'proba' probability.
-static int BranchCost(int nb, int total, int proba) {
-  return nb * VP8BitCost(1, proba) + (total - nb) * VP8BitCost(0, proba);
-}
-
-static void ResetTokenStats(VP8Encoder* const enc) {
-  VP8EncProba* const proba = &enc->proba_;
-  memset(proba->stats_, 0, sizeof(proba->stats_));
-}
-
-static int FinalizeTokenProbas(VP8EncProba* const proba) {
-  int has_changed = 0;
-  int size = 0;
-  int t, b, c, p;
-  for (t = 0; t < NUM_TYPES; ++t) {
-    for (b = 0; b < NUM_BANDS; ++b) {
-      for (c = 0; c < NUM_CTX; ++c) {
-        for (p = 0; p < NUM_PROBAS; ++p) {
-          const proba_t stats = proba->stats_[t][b][c][p];
-          const int nb = (stats >> 0) & 0xffff;
-          const int total = (stats >> 16) & 0xffff;
-          const int update_proba = VP8CoeffsUpdateProba[t][b][c][p];
-          const int old_p = VP8CoeffsProba0[t][b][c][p];
-          const int new_p = CalcTokenProba(nb, total);
-          const int old_cost = BranchCost(nb, total, old_p)
-                             + VP8BitCost(0, update_proba);
-          const int new_cost = BranchCost(nb, total, new_p)
-                             + VP8BitCost(1, update_proba)
-                             + 8 * 256;
-          const int use_new_p = (old_cost > new_cost);
-          size += VP8BitCost(use_new_p, update_proba);
-          if (use_new_p) {  // only use proba that seem meaningful enough.
-            proba->coeffs_[t][b][c][p] = new_p;
-            has_changed |= (new_p != old_p);
-            size += 8 * 256;
-          } else {
-            proba->coeffs_[t][b][c][p] = old_p;
-          }
-        }
-      }
-    }
-  }
-  proba->dirty_ = has_changed;
-  return size;
-}
-
-//------------------------------------------------------------------------------
-// Finalize Segment probability based on the coding tree
-
-static int GetProba(int a, int b) {
-  const int total = a + b;
-  return (total == 0) ? 255     // that's the default probability.
-                      : (255 * a + total / 2) / total;  // rounded proba
-}
-
-static void ResetSegments(VP8Encoder* const enc) {
-  int n;
-  for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) {
-    enc->mb_info_[n].segment_ = 0;
-  }
-}
-
-static void SetSegmentProbas(VP8Encoder* const enc) {
-  int p[NUM_MB_SEGMENTS] = { 0 };
-  int n;
-
-  for (n = 0; n < enc->mb_w_ * enc->mb_h_; ++n) {
-    const VP8MBInfo* const mb = &enc->mb_info_[n];
-    ++p[mb->segment_];
-  }
-#if !defined(WEBP_DISABLE_STATS)
-  if (enc->pic_->stats != NULL) {
-    for (n = 0; n < NUM_MB_SEGMENTS; ++n) {
-      enc->pic_->stats->segment_size[n] = p[n];
-    }
-  }
-#endif
-  if (enc->segment_hdr_.num_segments_ > 1) {
-    uint8_t* const probas = enc->proba_.segments_;
-    probas[0] = GetProba(p[0] + p[1], p[2] + p[3]);
-    probas[1] = GetProba(p[0], p[1]);
-    probas[2] = GetProba(p[2], p[3]);
-
-    enc->segment_hdr_.update_map_ =
-        (probas[0] != 255) || (probas[1] != 255) || (probas[2] != 255);
-    if (!enc->segment_hdr_.update_map_) ResetSegments(enc);
-    enc->segment_hdr_.size_ =
-        p[0] * (VP8BitCost(0, probas[0]) + VP8BitCost(0, probas[1])) +
-        p[1] * (VP8BitCost(0, probas[0]) + VP8BitCost(1, probas[1])) +
-        p[2] * (VP8BitCost(1, probas[0]) + VP8BitCost(0, probas[2])) +
-        p[3] * (VP8BitCost(1, probas[0]) + VP8BitCost(1, probas[2]));
-  } else {
-    enc->segment_hdr_.update_map_ = 0;
-    enc->segment_hdr_.size_ = 0;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Coefficient coding
-
-static int PutCoeffs(VP8BitWriter* const bw, int ctx, const VP8Residual* res) {
-  int n = res->first;
-  // should be prob[VP8EncBands[n]], but it's equivalent for n=0 or 1
-  const uint8_t* p = res->prob[n][ctx];
-  if (!VP8PutBit(bw, res->last >= 0, p[0])) {
-    return 0;
-  }
-
-  while (n < 16) {
-    const int c = res->coeffs[n++];
-    const int sign = c < 0;
-    int v = sign ? -c : c;
-    if (!VP8PutBit(bw, v != 0, p[1])) {
-      p = res->prob[VP8EncBands[n]][0];
-      continue;
-    }
-    if (!VP8PutBit(bw, v > 1, p[2])) {
-      p = res->prob[VP8EncBands[n]][1];
-    } else {
-      if (!VP8PutBit(bw, v > 4, p[3])) {
-        if (VP8PutBit(bw, v != 2, p[4])) {
-          VP8PutBit(bw, v == 4, p[5]);
-        }
-      } else if (!VP8PutBit(bw, v > 10, p[6])) {
-        if (!VP8PutBit(bw, v > 6, p[7])) {
-          VP8PutBit(bw, v == 6, 159);
-        } else {
-          VP8PutBit(bw, v >= 9, 165);
-          VP8PutBit(bw, !(v & 1), 145);
-        }
-      } else {
-        int mask;
-        const uint8_t* tab;
-        if (v < 3 + (8 << 1)) {          // VP8Cat3  (3b)
-          VP8PutBit(bw, 0, p[8]);
-          VP8PutBit(bw, 0, p[9]);
-          v -= 3 + (8 << 0);
-          mask = 1 << 2;
-          tab = VP8Cat3;
-        } else if (v < 3 + (8 << 2)) {   // VP8Cat4  (4b)
-          VP8PutBit(bw, 0, p[8]);
-          VP8PutBit(bw, 1, p[9]);
-          v -= 3 + (8 << 1);
-          mask = 1 << 3;
-          tab = VP8Cat4;
-        } else if (v < 3 + (8 << 3)) {   // VP8Cat5  (5b)
-          VP8PutBit(bw, 1, p[8]);
-          VP8PutBit(bw, 0, p[10]);
-          v -= 3 + (8 << 2);
-          mask = 1 << 4;
-          tab = VP8Cat5;
-        } else {                         // VP8Cat6 (11b)
-          VP8PutBit(bw, 1, p[8]);
-          VP8PutBit(bw, 1, p[10]);
-          v -= 3 + (8 << 3);
-          mask = 1 << 10;
-          tab = VP8Cat6;
-        }
-        while (mask) {
-          VP8PutBit(bw, !!(v & mask), *tab++);
-          mask >>= 1;
-        }
-      }
-      p = res->prob[VP8EncBands[n]][2];
-    }
-    VP8PutBitUniform(bw, sign);
-    if (n == 16 || !VP8PutBit(bw, n <= res->last, p[0])) {
-      return 1;   // EOB
-    }
-  }
-  return 1;
-}
-
-static void CodeResiduals(VP8BitWriter* const bw, VP8EncIterator* const it,
-                          const VP8ModeScore* const rd) {
-  int x, y, ch;
-  VP8Residual res;
-  uint64_t pos1, pos2, pos3;
-  const int i16 = (it->mb_->type_ == 1);
-  const int segment = it->mb_->segment_;
-  VP8Encoder* const enc = it->enc_;
-
-  VP8IteratorNzToBytes(it);
-
-  pos1 = VP8BitWriterPos(bw);
-  if (i16) {
-    VP8InitResidual(0, 1, enc, &res);
-    VP8SetResidualCoeffs(rd->y_dc_levels, &res);
-    it->top_nz_[8] = it->left_nz_[8] =
-      PutCoeffs(bw, it->top_nz_[8] + it->left_nz_[8], &res);
-    VP8InitResidual(1, 0, enc, &res);
-  } else {
-    VP8InitResidual(0, 3, enc, &res);
-  }
-
-  // luma-AC
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x) {
-      const int ctx = it->top_nz_[x] + it->left_nz_[y];
-      VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res);
-      it->top_nz_[x] = it->left_nz_[y] = PutCoeffs(bw, ctx, &res);
-    }
-  }
-  pos2 = VP8BitWriterPos(bw);
-
-  // U/V
-  VP8InitResidual(0, 2, enc, &res);
-  for (ch = 0; ch <= 2; ch += 2) {
-    for (y = 0; y < 2; ++y) {
-      for (x = 0; x < 2; ++x) {
-        const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y];
-        VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res);
-        it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] =
-            PutCoeffs(bw, ctx, &res);
-      }
-    }
-  }
-  pos3 = VP8BitWriterPos(bw);
-  it->luma_bits_ = pos2 - pos1;
-  it->uv_bits_ = pos3 - pos2;
-  it->bit_count_[segment][i16] += it->luma_bits_;
-  it->bit_count_[segment][2] += it->uv_bits_;
-  VP8IteratorBytesToNz(it);
-}
-
-// Same as CodeResiduals, but doesn't actually write anything.
-// Instead, it just records the event distribution.
-static void RecordResiduals(VP8EncIterator* const it,
-                            const VP8ModeScore* const rd) {
-  int x, y, ch;
-  VP8Residual res;
-  VP8Encoder* const enc = it->enc_;
-
-  VP8IteratorNzToBytes(it);
-
-  if (it->mb_->type_ == 1) {   // i16x16
-    VP8InitResidual(0, 1, enc, &res);
-    VP8SetResidualCoeffs(rd->y_dc_levels, &res);
-    it->top_nz_[8] = it->left_nz_[8] =
-      VP8RecordCoeffs(it->top_nz_[8] + it->left_nz_[8], &res);
-    VP8InitResidual(1, 0, enc, &res);
-  } else {
-    VP8InitResidual(0, 3, enc, &res);
-  }
-
-  // luma-AC
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x) {
-      const int ctx = it->top_nz_[x] + it->left_nz_[y];
-      VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res);
-      it->top_nz_[x] = it->left_nz_[y] = VP8RecordCoeffs(ctx, &res);
-    }
-  }
-
-  // U/V
-  VP8InitResidual(0, 2, enc, &res);
-  for (ch = 0; ch <= 2; ch += 2) {
-    for (y = 0; y < 2; ++y) {
-      for (x = 0; x < 2; ++x) {
-        const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y];
-        VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res);
-        it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] =
-            VP8RecordCoeffs(ctx, &res);
-      }
-    }
-  }
-
-  VP8IteratorBytesToNz(it);
-}
-
-//------------------------------------------------------------------------------
-// Token buffer
-
-#if !defined(DISABLE_TOKEN_BUFFER)
-
-static int RecordTokens(VP8EncIterator* const it, const VP8ModeScore* const rd,
-                        VP8TBuffer* const tokens) {
-  int x, y, ch;
-  VP8Residual res;
-  VP8Encoder* const enc = it->enc_;
-
-  VP8IteratorNzToBytes(it);
-  if (it->mb_->type_ == 1) {   // i16x16
-    const int ctx = it->top_nz_[8] + it->left_nz_[8];
-    VP8InitResidual(0, 1, enc, &res);
-    VP8SetResidualCoeffs(rd->y_dc_levels, &res);
-    it->top_nz_[8] = it->left_nz_[8] =
-        VP8RecordCoeffTokens(ctx, &res, tokens);
-    VP8InitResidual(1, 0, enc, &res);
-  } else {
-    VP8InitResidual(0, 3, enc, &res);
-  }
-
-  // luma-AC
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x) {
-      const int ctx = it->top_nz_[x] + it->left_nz_[y];
-      VP8SetResidualCoeffs(rd->y_ac_levels[x + y * 4], &res);
-      it->top_nz_[x] = it->left_nz_[y] =
-          VP8RecordCoeffTokens(ctx, &res, tokens);
-    }
-  }
-
-  // U/V
-  VP8InitResidual(0, 2, enc, &res);
-  for (ch = 0; ch <= 2; ch += 2) {
-    for (y = 0; y < 2; ++y) {
-      for (x = 0; x < 2; ++x) {
-        const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y];
-        VP8SetResidualCoeffs(rd->uv_levels[ch * 2 + x + y * 2], &res);
-        it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] =
-            VP8RecordCoeffTokens(ctx, &res, tokens);
-      }
-    }
-  }
-  VP8IteratorBytesToNz(it);
-  return !tokens->error_;
-}
-
-#endif    // !DISABLE_TOKEN_BUFFER
-
-//------------------------------------------------------------------------------
-// ExtraInfo map / Debug function
-
-#if !defined(WEBP_DISABLE_STATS)
-
-#if SEGMENT_VISU
-static void SetBlock(uint8_t* p, int value, int size) {
-  int y;
-  for (y = 0; y < size; ++y) {
-    memset(p, value, size);
-    p += BPS;
-  }
-}
-#endif
-
-static void ResetSSE(VP8Encoder* const enc) {
-  enc->sse_[0] = 0;
-  enc->sse_[1] = 0;
-  enc->sse_[2] = 0;
-  // Note: enc->sse_[3] is managed by alpha.c
-  enc->sse_count_ = 0;
-}
-
-static void StoreSSE(const VP8EncIterator* const it) {
-  VP8Encoder* const enc = it->enc_;
-  const uint8_t* const in = it->yuv_in_;
-  const uint8_t* const out = it->yuv_out_;
-  // Note: not totally accurate at boundary. And doesn't include in-loop filter.
-  enc->sse_[0] += VP8SSE16x16(in + Y_OFF_ENC, out + Y_OFF_ENC);
-  enc->sse_[1] += VP8SSE8x8(in + U_OFF_ENC, out + U_OFF_ENC);
-  enc->sse_[2] += VP8SSE8x8(in + V_OFF_ENC, out + V_OFF_ENC);
-  enc->sse_count_ += 16 * 16;
-}
-
-static void StoreSideInfo(const VP8EncIterator* const it) {
-  VP8Encoder* const enc = it->enc_;
-  const VP8MBInfo* const mb = it->mb_;
-  WebPPicture* const pic = enc->pic_;
-
-  if (pic->stats != NULL) {
-    StoreSSE(it);
-    enc->block_count_[0] += (mb->type_ == 0);
-    enc->block_count_[1] += (mb->type_ == 1);
-    enc->block_count_[2] += (mb->skip_ != 0);
-  }
-
-  if (pic->extra_info != NULL) {
-    uint8_t* const info = &pic->extra_info[it->x_ + it->y_ * enc->mb_w_];
-    switch (pic->extra_info_type) {
-      case 1: *info = mb->type_; break;
-      case 2: *info = mb->segment_; break;
-      case 3: *info = enc->dqm_[mb->segment_].quant_; break;
-      case 4: *info = (mb->type_ == 1) ? it->preds_[0] : 0xff; break;
-      case 5: *info = mb->uv_mode_; break;
-      case 6: {
-        const int b = (int)((it->luma_bits_ + it->uv_bits_ + 7) >> 3);
-        *info = (b > 255) ? 255 : b; break;
-      }
-      case 7: *info = mb->alpha_; break;
-      default: *info = 0; break;
-    }
-  }
-#if SEGMENT_VISU  // visualize segments and prediction modes
-  SetBlock(it->yuv_out_ + Y_OFF_ENC, mb->segment_ * 64, 16);
-  SetBlock(it->yuv_out_ + U_OFF_ENC, it->preds_[0] * 64, 8);
-  SetBlock(it->yuv_out_ + V_OFF_ENC, mb->uv_mode_ * 64, 8);
-#endif
-}
-
-static void ResetSideInfo(const VP8EncIterator* const it) {
-  VP8Encoder* const enc = it->enc_;
-  WebPPicture* const pic = enc->pic_;
-  if (pic->stats != NULL) {
-    memset(enc->block_count_, 0, sizeof(enc->block_count_));
-  }
-  ResetSSE(enc);
-}
-#else  // defined(WEBP_DISABLE_STATS)
-static void ResetSSE(VP8Encoder* const enc) {
-  (void)enc;
-}
-static void StoreSideInfo(const VP8EncIterator* const it) {
-  VP8Encoder* const enc = it->enc_;
-  WebPPicture* const pic = enc->pic_;
-  if (pic->extra_info != NULL) {
-    if (it->x_ == 0 && it->y_ == 0) {   // only do it once, at start
-      memset(pic->extra_info, 0,
-             enc->mb_w_ * enc->mb_h_ * sizeof(*pic->extra_info));
-    }
-  }
-}
-
-static void ResetSideInfo(const VP8EncIterator* const it) {
-  (void)it;
-}
-#endif  // !defined(WEBP_DISABLE_STATS)
-
-static double GetPSNR(uint64_t mse, uint64_t size) {
-  return (mse > 0 && size > 0) ? 10. * log10(255. * 255. * size / mse) : 99;
-}
-
-//------------------------------------------------------------------------------
-//  StatLoop(): only collect statistics (number of skips, token usage, ...).
-//  This is used for deciding optimal probabilities. It also modifies the
-//  quantizer value if some target (size, PSNR) was specified.
-
-static void SetLoopParams(VP8Encoder* const enc, float q) {
-  // Make sure the quality parameter is inside valid bounds
-  q = Clamp(q, 0.f, 100.f);
-
-  VP8SetSegmentParams(enc, q);      // setup segment quantizations and filters
-  SetSegmentProbas(enc);            // compute segment probabilities
-
-  ResetStats(enc);
-  ResetSSE(enc);
-}
-
-static uint64_t OneStatPass(VP8Encoder* const enc, VP8RDLevel rd_opt,
-                            int nb_mbs, int percent_delta,
-                            PassStats* const s) {
-  VP8EncIterator it;
-  uint64_t size = 0;
-  uint64_t size_p0 = 0;
-  uint64_t distortion = 0;
-  const uint64_t pixel_count = nb_mbs * 384;
-
-  VP8IteratorInit(enc, &it);
-  SetLoopParams(enc, s->q);
-  do {
-    VP8ModeScore info;
-    VP8IteratorImport(&it, NULL);
-    if (VP8Decimate(&it, &info, rd_opt)) {
-      // Just record the number of skips and act like skip_proba is not used.
-      ++enc->proba_.nb_skip_;
-    }
-    RecordResiduals(&it, &info);
-    size += info.R + info.H;
-    size_p0 += info.H;
-    distortion += info.D;
-    if (percent_delta && !VP8IteratorProgress(&it, percent_delta)) {
-      return 0;
-    }
-    VP8IteratorSaveBoundary(&it);
-  } while (VP8IteratorNext(&it) && --nb_mbs > 0);
-
-  size_p0 += enc->segment_hdr_.size_;
-  if (s->do_size_search) {
-    size += FinalizeSkipProba(enc);
-    size += FinalizeTokenProbas(&enc->proba_);
-    size = ((size + size_p0 + 1024) >> 11) + HEADER_SIZE_ESTIMATE;
-    s->value = (double)size;
-  } else {
-    s->value = GetPSNR(distortion, pixel_count);
-  }
-  return size_p0;
-}
-
-static int StatLoop(VP8Encoder* const enc) {
-  const int method = enc->method_;
-  const int do_search = enc->do_search_;
-  const int fast_probe = ((method == 0 || method == 3) && !do_search);
-  int num_pass_left = enc->config_->pass;
-  const int task_percent = 20;
-  const int percent_per_pass =
-      (task_percent + num_pass_left / 2) / num_pass_left;
-  const int final_percent = enc->percent_ + task_percent;
-  const VP8RDLevel rd_opt =
-      (method >= 3 || do_search) ? RD_OPT_BASIC : RD_OPT_NONE;
-  int nb_mbs = enc->mb_w_ * enc->mb_h_;
-  PassStats stats;
-
-  InitPassStats(enc, &stats);
-  ResetTokenStats(enc);
-
-  // Fast mode: quick analysis pass over few mbs. Better than nothing.
-  if (fast_probe) {
-    if (method == 3) {  // we need more stats for method 3 to be reliable.
-      nb_mbs = (nb_mbs > 200) ? nb_mbs >> 1 : 100;
-    } else {
-      nb_mbs = (nb_mbs > 200) ? nb_mbs >> 2 : 50;
-    }
-  }
-
-  while (num_pass_left-- > 0) {
-    const int is_last_pass = (fabs(stats.dq) <= DQ_LIMIT) ||
-                             (num_pass_left == 0) ||
-                             (enc->max_i4_header_bits_ == 0);
-    const uint64_t size_p0 =
-        OneStatPass(enc, rd_opt, nb_mbs, percent_per_pass, &stats);
-    if (size_p0 == 0) return 0;
-#if (DEBUG_SEARCH > 0)
-    printf("#%d value:%.1lf -> %.1lf   q:%.2f -> %.2f\n",
-           num_pass_left, stats.last_value, stats.value, stats.last_q, stats.q);
-#endif
-    if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) {
-      ++num_pass_left;
-      enc->max_i4_header_bits_ >>= 1;  // strengthen header bit limitation...
-      continue;                        // ...and start over
-    }
-    if (is_last_pass) {
-      break;
-    }
-    // If no target size: just do several pass without changing 'q'
-    if (do_search) {
-      ComputeNextQ(&stats);
-      if (fabs(stats.dq) <= DQ_LIMIT) break;
-    }
-  }
-  if (!do_search || !stats.do_size_search) {
-    // Need to finalize probas now, since it wasn't done during the search.
-    FinalizeSkipProba(enc);
-    FinalizeTokenProbas(&enc->proba_);
-  }
-  VP8CalculateLevelCosts(&enc->proba_);  // finalize costs
-  return WebPReportProgress(enc->pic_, final_percent, &enc->percent_);
-}
-
-//------------------------------------------------------------------------------
-// Main loops
-//
-
-static const uint8_t kAverageBytesPerMB[8] = { 50, 24, 16, 9, 7, 5, 3, 2 };
-
-static int PreLoopInitialize(VP8Encoder* const enc) {
-  int p;
-  int ok = 1;
-  const int average_bytes_per_MB = kAverageBytesPerMB[enc->base_quant_ >> 4];
-  const int bytes_per_parts =
-      enc->mb_w_ * enc->mb_h_ * average_bytes_per_MB / enc->num_parts_;
-  // Initialize the bit-writers
-  for (p = 0; ok && p < enc->num_parts_; ++p) {
-    ok = VP8BitWriterInit(enc->parts_ + p, bytes_per_parts);
-  }
-  if (!ok) {
-    VP8EncFreeBitWriters(enc);  // malloc error occurred
-    WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY);
-  }
-  return ok;
-}
-
-static int PostLoopFinalize(VP8EncIterator* const it, int ok) {
-  VP8Encoder* const enc = it->enc_;
-  if (ok) {      // Finalize the partitions, check for extra errors.
-    int p;
-    for (p = 0; p < enc->num_parts_; ++p) {
-      VP8BitWriterFinish(enc->parts_ + p);
-      ok &= !enc->parts_[p].error_;
-    }
-  }
-
-  if (ok) {      // All good. Finish up.
-#if !defined(WEBP_DISABLE_STATS)
-    if (enc->pic_->stats != NULL) {  // finalize byte counters...
-      int i, s;
-      for (i = 0; i <= 2; ++i) {
-        for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
-          enc->residual_bytes_[i][s] = (int)((it->bit_count_[s][i] + 7) >> 3);
-        }
-      }
-    }
-#endif
-    VP8AdjustFilterStrength(it);     // ...and store filter stats.
-  } else {
-    // Something bad happened -> need to do some memory cleanup.
-    VP8EncFreeBitWriters(enc);
-  }
-  return ok;
-}
-
-//------------------------------------------------------------------------------
-//  VP8EncLoop(): does the final bitstream coding.
-
-static void ResetAfterSkip(VP8EncIterator* const it) {
-  if (it->mb_->type_ == 1) {
-    *it->nz_ = 0;  // reset all predictors
-    it->left_nz_[8] = 0;
-  } else {
-    *it->nz_ &= (1 << 24);  // preserve the dc_nz bit
-  }
-}
-
-int VP8EncLoop(VP8Encoder* const enc) {
-  VP8EncIterator it;
-  int ok = PreLoopInitialize(enc);
-  if (!ok) return 0;
-
-  StatLoop(enc);  // stats-collection loop
-
-  VP8IteratorInit(enc, &it);
-  VP8InitFilter(&it);
-  do {
-    VP8ModeScore info;
-    const int dont_use_skip = !enc->proba_.use_skip_proba_;
-    const VP8RDLevel rd_opt = enc->rd_opt_level_;
-
-    VP8IteratorImport(&it, NULL);
-    // Warning! order is important: first call VP8Decimate() and
-    // *then* decide how to code the skip decision if there's one.
-    if (!VP8Decimate(&it, &info, rd_opt) || dont_use_skip) {
-      CodeResiduals(it.bw_, &it, &info);
-    } else {   // reset predictors after a skip
-      ResetAfterSkip(&it);
-    }
-    StoreSideInfo(&it);
-    VP8StoreFilterStats(&it);
-    VP8IteratorExport(&it);
-    ok = VP8IteratorProgress(&it, 20);
-    VP8IteratorSaveBoundary(&it);
-  } while (ok && VP8IteratorNext(&it));
-
-  return PostLoopFinalize(&it, ok);
-}
-
-//------------------------------------------------------------------------------
-// Single pass using Token Buffer.
-
-#if !defined(DISABLE_TOKEN_BUFFER)
-
-#define MIN_COUNT 96  // minimum number of macroblocks before updating stats
-
-int VP8EncTokenLoop(VP8Encoder* const enc) {
-  // Roughly refresh the proba eight times per pass
-  int max_count = (enc->mb_w_ * enc->mb_h_) >> 3;
-  int num_pass_left = enc->config_->pass;
-  const int do_search = enc->do_search_;
-  VP8EncIterator it;
-  VP8EncProba* const proba = &enc->proba_;
-  const VP8RDLevel rd_opt = enc->rd_opt_level_;
-  const uint64_t pixel_count = enc->mb_w_ * enc->mb_h_ * 384;
-  PassStats stats;
-  int ok;
-
-  InitPassStats(enc, &stats);
-  ok = PreLoopInitialize(enc);
-  if (!ok) return 0;
-
-  if (max_count < MIN_COUNT) max_count = MIN_COUNT;
-
-  assert(enc->num_parts_ == 1);
-  assert(enc->use_tokens_);
-  assert(proba->use_skip_proba_ == 0);
-  assert(rd_opt >= RD_OPT_BASIC);   // otherwise, token-buffer won't be useful
-  assert(num_pass_left > 0);
-
-  while (ok && num_pass_left-- > 0) {
-    const int is_last_pass = (fabs(stats.dq) <= DQ_LIMIT) ||
-                             (num_pass_left == 0) ||
-                             (enc->max_i4_header_bits_ == 0);
-    uint64_t size_p0 = 0;
-    uint64_t distortion = 0;
-    int cnt = max_count;
-    VP8IteratorInit(enc, &it);
-    SetLoopParams(enc, stats.q);
-    if (is_last_pass) {
-      ResetTokenStats(enc);
-      VP8InitFilter(&it);  // don't collect stats until last pass (too costly)
-    }
-    VP8TBufferClear(&enc->tokens_);
-    do {
-      VP8ModeScore info;
-      VP8IteratorImport(&it, NULL);
-      if (--cnt < 0) {
-        FinalizeTokenProbas(proba);
-        VP8CalculateLevelCosts(proba);  // refresh cost tables for rd-opt
-        cnt = max_count;
-      }
-      VP8Decimate(&it, &info, rd_opt);
-      ok = RecordTokens(&it, &info, &enc->tokens_);
-      if (!ok) {
-        WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY);
-        break;
-      }
-      size_p0 += info.H;
-      distortion += info.D;
-      if (is_last_pass) {
-        StoreSideInfo(&it);
-        VP8StoreFilterStats(&it);
-        VP8IteratorExport(&it);
-        ok = VP8IteratorProgress(&it, 20);
-      }
-      VP8IteratorSaveBoundary(&it);
-    } while (ok && VP8IteratorNext(&it));
-    if (!ok) break;
-
-    size_p0 += enc->segment_hdr_.size_;
-    if (stats.do_size_search) {
-      uint64_t size = FinalizeTokenProbas(&enc->proba_);
-      size += VP8EstimateTokenSize(&enc->tokens_,
-                                   (const uint8_t*)proba->coeffs_);
-      size = (size + size_p0 + 1024) >> 11;  // -> size in bytes
-      size += HEADER_SIZE_ESTIMATE;
-      stats.value = (double)size;
-    } else {  // compute and store PSNR
-      stats.value = GetPSNR(distortion, pixel_count);
-    }
-
-#if (DEBUG_SEARCH > 0)
-    printf("#%2d metric:%.1lf -> %.1lf   last_q=%.2lf q=%.2lf dq=%.2lf\n",
-           num_pass_left, stats.last_value, stats.value,
-           stats.last_q, stats.q, stats.dq);
-#endif
-    if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) {
-      ++num_pass_left;
-      enc->max_i4_header_bits_ >>= 1;  // strengthen header bit limitation...
-      if (is_last_pass) {
-        ResetSideInfo(&it);
-      }
-      continue;                        // ...and start over
-    }
-    if (is_last_pass) {
-      break;   // done
-    }
-    if (do_search) {
-      ComputeNextQ(&stats);  // Adjust q
-    }
-  }
-  if (ok) {
-    if (!stats.do_size_search) {
-      FinalizeTokenProbas(&enc->proba_);
-    }
-    ok = VP8EmitTokens(&enc->tokens_, enc->parts_ + 0,
-                       (const uint8_t*)proba->coeffs_, 1);
-  }
-  ok = ok && WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_);
-  return PostLoopFinalize(&it, ok);
-}
-
-#else
-
-int VP8EncTokenLoop(VP8Encoder* const enc) {
-  (void)enc;
-  return 0;   // we shouldn't be here.
-}
-
-#endif    // DISABLE_TOKEN_BUFFER
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/histogram_enc.c b/ios/Pods/libwebp/src/enc/histogram_enc.c
deleted file mode 100644
index 8ac6fa8..0000000
--- a/ios/Pods/libwebp/src/enc/histogram_enc.c
+++ /dev/null
@@ -1,1250 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Jyrki Alakuijala (jyrki@google.com)
-//
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include <math.h>
-
-#include "src/enc/backward_references_enc.h"
-#include "src/enc/histogram_enc.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-#include "src/utils/utils.h"
-
-#define MAX_COST 1.e38
-
-// Number of partitions for the three dominant (literal, red and blue) symbol
-// costs.
-#define NUM_PARTITIONS 4
-// The size of the bin-hash corresponding to the three dominant costs.
-#define BIN_SIZE (NUM_PARTITIONS * NUM_PARTITIONS * NUM_PARTITIONS)
-// Maximum number of histograms allowed in greedy combining algorithm.
-#define MAX_HISTO_GREEDY 100
-
-static void HistogramClear(VP8LHistogram* const p) {
-  uint32_t* const literal = p->literal_;
-  const int cache_bits = p->palette_code_bits_;
-  const int histo_size = VP8LGetHistogramSize(cache_bits);
-  memset(p, 0, histo_size);
-  p->palette_code_bits_ = cache_bits;
-  p->literal_ = literal;
-}
-
-// Swap two histogram pointers.
-static void HistogramSwap(VP8LHistogram** const A, VP8LHistogram** const B) {
-  VP8LHistogram* const tmp = *A;
-  *A = *B;
-  *B = tmp;
-}
-
-static void HistogramCopy(const VP8LHistogram* const src,
-                          VP8LHistogram* const dst) {
-  uint32_t* const dst_literal = dst->literal_;
-  const int dst_cache_bits = dst->palette_code_bits_;
-  const int literal_size = VP8LHistogramNumCodes(dst_cache_bits);
-  const int histo_size = VP8LGetHistogramSize(dst_cache_bits);
-  assert(src->palette_code_bits_ == dst_cache_bits);
-  memcpy(dst, src, histo_size);
-  dst->literal_ = dst_literal;
-  memcpy(dst->literal_, src->literal_, literal_size * sizeof(*dst->literal_));
-}
-
-int VP8LGetHistogramSize(int cache_bits) {
-  const int literal_size = VP8LHistogramNumCodes(cache_bits);
-  const size_t total_size = sizeof(VP8LHistogram) + sizeof(int) * literal_size;
-  assert(total_size <= (size_t)0x7fffffff);
-  return (int)total_size;
-}
-
-void VP8LFreeHistogram(VP8LHistogram* const histo) {
-  WebPSafeFree(histo);
-}
-
-void VP8LFreeHistogramSet(VP8LHistogramSet* const histo) {
-  WebPSafeFree(histo);
-}
-
-void VP8LHistogramStoreRefs(const VP8LBackwardRefs* const refs,
-                            VP8LHistogram* const histo) {
-  VP8LRefsCursor c = VP8LRefsCursorInit(refs);
-  while (VP8LRefsCursorOk(&c)) {
-    VP8LHistogramAddSinglePixOrCopy(histo, c.cur_pos, NULL, 0);
-    VP8LRefsCursorNext(&c);
-  }
-}
-
-void VP8LHistogramCreate(VP8LHistogram* const p,
-                         const VP8LBackwardRefs* const refs,
-                         int palette_code_bits) {
-  if (palette_code_bits >= 0) {
-    p->palette_code_bits_ = palette_code_bits;
-  }
-  HistogramClear(p);
-  VP8LHistogramStoreRefs(refs, p);
-}
-
-void VP8LHistogramInit(VP8LHistogram* const p, int palette_code_bits,
-                       int init_arrays) {
-  p->palette_code_bits_ = palette_code_bits;
-  if (init_arrays) {
-    HistogramClear(p);
-  } else {
-    p->trivial_symbol_ = 0;
-    p->bit_cost_ = 0.;
-    p->literal_cost_ = 0.;
-    p->red_cost_ = 0.;
-    p->blue_cost_ = 0.;
-    memset(p->is_used_, 0, sizeof(p->is_used_));
-  }
-}
-
-VP8LHistogram* VP8LAllocateHistogram(int cache_bits) {
-  VP8LHistogram* histo = NULL;
-  const int total_size = VP8LGetHistogramSize(cache_bits);
-  uint8_t* const memory = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*memory));
-  if (memory == NULL) return NULL;
-  histo = (VP8LHistogram*)memory;
-  // literal_ won't necessary be aligned.
-  histo->literal_ = (uint32_t*)(memory + sizeof(VP8LHistogram));
-  VP8LHistogramInit(histo, cache_bits, /*init_arrays=*/ 0);
-  return histo;
-}
-
-// Resets the pointers of the histograms to point to the bit buffer in the set.
-static void HistogramSetResetPointers(VP8LHistogramSet* const set,
-                                      int cache_bits) {
-  int i;
-  const int histo_size = VP8LGetHistogramSize(cache_bits);
-  uint8_t* memory = (uint8_t*) (set->histograms);
-  memory += set->max_size * sizeof(*set->histograms);
-  for (i = 0; i < set->max_size; ++i) {
-    memory = (uint8_t*) WEBP_ALIGN(memory);
-    set->histograms[i] = (VP8LHistogram*) memory;
-    // literal_ won't necessary be aligned.
-    set->histograms[i]->literal_ = (uint32_t*)(memory + sizeof(VP8LHistogram));
-    memory += histo_size;
-  }
-}
-
-// Returns the total size of the VP8LHistogramSet.
-static size_t HistogramSetTotalSize(int size, int cache_bits) {
-  const int histo_size = VP8LGetHistogramSize(cache_bits);
-  return (sizeof(VP8LHistogramSet) + size * (sizeof(VP8LHistogram*) +
-          histo_size + WEBP_ALIGN_CST));
-}
-
-VP8LHistogramSet* VP8LAllocateHistogramSet(int size, int cache_bits) {
-  int i;
-  VP8LHistogramSet* set;
-  const size_t total_size = HistogramSetTotalSize(size, cache_bits);
-  uint8_t* memory = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*memory));
-  if (memory == NULL) return NULL;
-
-  set = (VP8LHistogramSet*)memory;
-  memory += sizeof(*set);
-  set->histograms = (VP8LHistogram**)memory;
-  set->max_size = size;
-  set->size = size;
-  HistogramSetResetPointers(set, cache_bits);
-  for (i = 0; i < size; ++i) {
-    VP8LHistogramInit(set->histograms[i], cache_bits, /*init_arrays=*/ 0);
-  }
-  return set;
-}
-
-void VP8LHistogramSetClear(VP8LHistogramSet* const set) {
-  int i;
-  const int cache_bits = set->histograms[0]->palette_code_bits_;
-  const int size = set->max_size;
-  const size_t total_size = HistogramSetTotalSize(size, cache_bits);
-  uint8_t* memory = (uint8_t*)set;
-
-  memset(memory, 0, total_size);
-  memory += sizeof(*set);
-  set->histograms = (VP8LHistogram**)memory;
-  set->max_size = size;
-  set->size = size;
-  HistogramSetResetPointers(set, cache_bits);
-  for (i = 0; i < size; ++i) {
-    set->histograms[i]->palette_code_bits_ = cache_bits;
-  }
-}
-
-// Removes the histogram 'i' from 'set' by setting it to NULL.
-static void HistogramSetRemoveHistogram(VP8LHistogramSet* const set, int i,
-                                        int* const num_used) {
-  assert(set->histograms[i] != NULL);
-  set->histograms[i] = NULL;
-  --*num_used;
-  // If we remove the last valid one, shrink until the next valid one.
-  if (i == set->size - 1) {
-    while (set->size >= 1 && set->histograms[set->size - 1] == NULL) {
-      --set->size;
-    }
-  }
-}
-
-// -----------------------------------------------------------------------------
-
-void VP8LHistogramAddSinglePixOrCopy(VP8LHistogram* const histo,
-                                     const PixOrCopy* const v,
-                                     int (*const distance_modifier)(int, int),
-                                     int distance_modifier_arg0) {
-  if (PixOrCopyIsLiteral(v)) {
-    ++histo->alpha_[PixOrCopyLiteral(v, 3)];
-    ++histo->red_[PixOrCopyLiteral(v, 2)];
-    ++histo->literal_[PixOrCopyLiteral(v, 1)];
-    ++histo->blue_[PixOrCopyLiteral(v, 0)];
-  } else if (PixOrCopyIsCacheIdx(v)) {
-    const int literal_ix =
-        NUM_LITERAL_CODES + NUM_LENGTH_CODES + PixOrCopyCacheIdx(v);
-    ++histo->literal_[literal_ix];
-  } else {
-    int code, extra_bits;
-    VP8LPrefixEncodeBits(PixOrCopyLength(v), &code, &extra_bits);
-    ++histo->literal_[NUM_LITERAL_CODES + code];
-    if (distance_modifier == NULL) {
-      VP8LPrefixEncodeBits(PixOrCopyDistance(v), &code, &extra_bits);
-    } else {
-      VP8LPrefixEncodeBits(
-          distance_modifier(distance_modifier_arg0, PixOrCopyDistance(v)),
-          &code, &extra_bits);
-    }
-    ++histo->distance_[code];
-  }
-}
-
-// -----------------------------------------------------------------------------
-// Entropy-related functions.
-
-static WEBP_INLINE double BitsEntropyRefine(const VP8LBitEntropy* entropy) {
-  double mix;
-  if (entropy->nonzeros < 5) {
-    if (entropy->nonzeros <= 1) {
-      return 0;
-    }
-    // Two symbols, they will be 0 and 1 in a Huffman code.
-    // Let's mix in a bit of entropy to favor good clustering when
-    // distributions of these are combined.
-    if (entropy->nonzeros == 2) {
-      return 0.99 * entropy->sum + 0.01 * entropy->entropy;
-    }
-    // No matter what the entropy says, we cannot be better than min_limit
-    // with Huffman coding. I am mixing a bit of entropy into the
-    // min_limit since it produces much better (~0.5 %) compression results
-    // perhaps because of better entropy clustering.
-    if (entropy->nonzeros == 3) {
-      mix = 0.95;
-    } else {
-      mix = 0.7;  // nonzeros == 4.
-    }
-  } else {
-    mix = 0.627;
-  }
-
-  {
-    double min_limit = 2 * entropy->sum - entropy->max_val;
-    min_limit = mix * min_limit + (1.0 - mix) * entropy->entropy;
-    return (entropy->entropy < min_limit) ? min_limit : entropy->entropy;
-  }
-}
-
-double VP8LBitsEntropy(const uint32_t* const array, int n) {
-  VP8LBitEntropy entropy;
-  VP8LBitsEntropyUnrefined(array, n, &entropy);
-
-  return BitsEntropyRefine(&entropy);
-}
-
-static double InitialHuffmanCost(void) {
-  // Small bias because Huffman code length is typically not stored in
-  // full length.
-  static const int kHuffmanCodeOfHuffmanCodeSize = CODE_LENGTH_CODES * 3;
-  static const double kSmallBias = 9.1;
-  return kHuffmanCodeOfHuffmanCodeSize - kSmallBias;
-}
-
-// Finalize the Huffman cost based on streak numbers and length type (<3 or >=3)
-static double FinalHuffmanCost(const VP8LStreaks* const stats) {
-  // The constants in this function are experimental and got rounded from
-  // their original values in 1/8 when switched to 1/1024.
-  double retval = InitialHuffmanCost();
-  // Second coefficient: Many zeros in the histogram are covered efficiently
-  // by a run-length encode. Originally 2/8.
-  retval += stats->counts[0] * 1.5625 + 0.234375 * stats->streaks[0][1];
-  // Second coefficient: Constant values are encoded less efficiently, but still
-  // RLE'ed. Originally 6/8.
-  retval += stats->counts[1] * 2.578125 + 0.703125 * stats->streaks[1][1];
-  // 0s are usually encoded more efficiently than non-0s.
-  // Originally 15/8.
-  retval += 1.796875 * stats->streaks[0][0];
-  // Originally 26/8.
-  retval += 3.28125 * stats->streaks[1][0];
-  return retval;
-}
-
-// Get the symbol entropy for the distribution 'population'.
-// Set 'trivial_sym', if there's only one symbol present in the distribution.
-static double PopulationCost(const uint32_t* const population, int length,
-                             uint32_t* const trivial_sym,
-                             uint8_t* const is_used) {
-  VP8LBitEntropy bit_entropy;
-  VP8LStreaks stats;
-  VP8LGetEntropyUnrefined(population, length, &bit_entropy, &stats);
-  if (trivial_sym != NULL) {
-    *trivial_sym = (bit_entropy.nonzeros == 1) ? bit_entropy.nonzero_code
-                                               : VP8L_NON_TRIVIAL_SYM;
-  }
-  // The histogram is used if there is at least one non-zero streak.
-  *is_used = (stats.streaks[1][0] != 0 || stats.streaks[1][1] != 0);
-
-  return BitsEntropyRefine(&bit_entropy) + FinalHuffmanCost(&stats);
-}
-
-// trivial_at_end is 1 if the two histograms only have one element that is
-// non-zero: both the zero-th one, or both the last one.
-static WEBP_INLINE double GetCombinedEntropy(const uint32_t* const X,
-                                             const uint32_t* const Y,
-                                             int length, int is_X_used,
-                                             int is_Y_used,
-                                             int trivial_at_end) {
-  VP8LStreaks stats;
-  if (trivial_at_end) {
-    // This configuration is due to palettization that transforms an indexed
-    // pixel into 0xff000000 | (pixel << 8) in VP8LBundleColorMap.
-    // BitsEntropyRefine is 0 for histograms with only one non-zero value.
-    // Only FinalHuffmanCost needs to be evaluated.
-    memset(&stats, 0, sizeof(stats));
-    // Deal with the non-zero value at index 0 or length-1.
-    stats.streaks[1][0] = 1;
-    // Deal with the following/previous zero streak.
-    stats.counts[0] = 1;
-    stats.streaks[0][1] = length - 1;
-    return FinalHuffmanCost(&stats);
-  } else {
-    VP8LBitEntropy bit_entropy;
-    if (is_X_used) {
-      if (is_Y_used) {
-        VP8LGetCombinedEntropyUnrefined(X, Y, length, &bit_entropy, &stats);
-      } else {
-        VP8LGetEntropyUnrefined(X, length, &bit_entropy, &stats);
-      }
-    } else {
-      if (is_Y_used) {
-        VP8LGetEntropyUnrefined(Y, length, &bit_entropy, &stats);
-      } else {
-        memset(&stats, 0, sizeof(stats));
-        stats.counts[0] = 1;
-        stats.streaks[0][length > 3] = length;
-        VP8LBitEntropyInit(&bit_entropy);
-      }
-    }
-
-    return BitsEntropyRefine(&bit_entropy) + FinalHuffmanCost(&stats);
-  }
-}
-
-// Estimates the Entropy + Huffman + other block overhead size cost.
-double VP8LHistogramEstimateBits(VP8LHistogram* const p) {
-  return
-      PopulationCost(p->literal_, VP8LHistogramNumCodes(p->palette_code_bits_),
-                     NULL, &p->is_used_[0])
-      + PopulationCost(p->red_, NUM_LITERAL_CODES, NULL, &p->is_used_[1])
-      + PopulationCost(p->blue_, NUM_LITERAL_CODES, NULL, &p->is_used_[2])
-      + PopulationCost(p->alpha_, NUM_LITERAL_CODES, NULL, &p->is_used_[3])
-      + PopulationCost(p->distance_, NUM_DISTANCE_CODES, NULL, &p->is_used_[4])
-      + VP8LExtraCost(p->literal_ + NUM_LITERAL_CODES, NUM_LENGTH_CODES)
-      + VP8LExtraCost(p->distance_, NUM_DISTANCE_CODES);
-}
-
-// -----------------------------------------------------------------------------
-// Various histogram combine/cost-eval functions
-
-static int GetCombinedHistogramEntropy(const VP8LHistogram* const a,
-                                       const VP8LHistogram* const b,
-                                       double cost_threshold,
-                                       double* cost) {
-  const int palette_code_bits = a->palette_code_bits_;
-  int trivial_at_end = 0;
-  assert(a->palette_code_bits_ == b->palette_code_bits_);
-  *cost += GetCombinedEntropy(a->literal_, b->literal_,
-                              VP8LHistogramNumCodes(palette_code_bits),
-                              a->is_used_[0], b->is_used_[0], 0);
-  *cost += VP8LExtraCostCombined(a->literal_ + NUM_LITERAL_CODES,
-                                 b->literal_ + NUM_LITERAL_CODES,
-                                 NUM_LENGTH_CODES);
-  if (*cost > cost_threshold) return 0;
-
-  if (a->trivial_symbol_ != VP8L_NON_TRIVIAL_SYM &&
-      a->trivial_symbol_ == b->trivial_symbol_) {
-    // A, R and B are all 0 or 0xff.
-    const uint32_t color_a = (a->trivial_symbol_ >> 24) & 0xff;
-    const uint32_t color_r = (a->trivial_symbol_ >> 16) & 0xff;
-    const uint32_t color_b = (a->trivial_symbol_ >> 0) & 0xff;
-    if ((color_a == 0 || color_a == 0xff) &&
-        (color_r == 0 || color_r == 0xff) &&
-        (color_b == 0 || color_b == 0xff)) {
-      trivial_at_end = 1;
-    }
-  }
-
-  *cost +=
-      GetCombinedEntropy(a->red_, b->red_, NUM_LITERAL_CODES, a->is_used_[1],
-                         b->is_used_[1], trivial_at_end);
-  if (*cost > cost_threshold) return 0;
-
-  *cost +=
-      GetCombinedEntropy(a->blue_, b->blue_, NUM_LITERAL_CODES, a->is_used_[2],
-                         b->is_used_[2], trivial_at_end);
-  if (*cost > cost_threshold) return 0;
-
-  *cost +=
-      GetCombinedEntropy(a->alpha_, b->alpha_, NUM_LITERAL_CODES,
-                         a->is_used_[3], b->is_used_[3], trivial_at_end);
-  if (*cost > cost_threshold) return 0;
-
-  *cost +=
-      GetCombinedEntropy(a->distance_, b->distance_, NUM_DISTANCE_CODES,
-                         a->is_used_[4], b->is_used_[4], 0);
-  *cost +=
-      VP8LExtraCostCombined(a->distance_, b->distance_, NUM_DISTANCE_CODES);
-  if (*cost > cost_threshold) return 0;
-
-  return 1;
-}
-
-static WEBP_INLINE void HistogramAdd(const VP8LHistogram* const a,
-                                     const VP8LHistogram* const b,
-                                     VP8LHistogram* const out) {
-  VP8LHistogramAdd(a, b, out);
-  out->trivial_symbol_ = (a->trivial_symbol_ == b->trivial_symbol_)
-                       ? a->trivial_symbol_
-                       : VP8L_NON_TRIVIAL_SYM;
-}
-
-// Performs out = a + b, computing the cost C(a+b) - C(a) - C(b) while comparing
-// to the threshold value 'cost_threshold'. The score returned is
-//  Score = C(a+b) - C(a) - C(b), where C(a) + C(b) is known and fixed.
-// Since the previous score passed is 'cost_threshold', we only need to compare
-// the partial cost against 'cost_threshold + C(a) + C(b)' to possibly bail-out
-// early.
-static double HistogramAddEval(const VP8LHistogram* const a,
-                               const VP8LHistogram* const b,
-                               VP8LHistogram* const out,
-                               double cost_threshold) {
-  double cost = 0;
-  const double sum_cost = a->bit_cost_ + b->bit_cost_;
-  cost_threshold += sum_cost;
-
-  if (GetCombinedHistogramEntropy(a, b, cost_threshold, &cost)) {
-    HistogramAdd(a, b, out);
-    out->bit_cost_ = cost;
-    out->palette_code_bits_ = a->palette_code_bits_;
-  }
-
-  return cost - sum_cost;
-}
-
-// Same as HistogramAddEval(), except that the resulting histogram
-// is not stored. Only the cost C(a+b) - C(a) is evaluated. We omit
-// the term C(b) which is constant over all the evaluations.
-static double HistogramAddThresh(const VP8LHistogram* const a,
-                                 const VP8LHistogram* const b,
-                                 double cost_threshold) {
-  double cost;
-  assert(a != NULL && b != NULL);
-  cost = -a->bit_cost_;
-  GetCombinedHistogramEntropy(a, b, cost_threshold, &cost);
-  return cost;
-}
-
-// -----------------------------------------------------------------------------
-
-// The structure to keep track of cost range for the three dominant entropy
-// symbols.
-// TODO(skal): Evaluate if float can be used here instead of double for
-// representing the entropy costs.
-typedef struct {
-  double literal_max_;
-  double literal_min_;
-  double red_max_;
-  double red_min_;
-  double blue_max_;
-  double blue_min_;
-} DominantCostRange;
-
-static void DominantCostRangeInit(DominantCostRange* const c) {
-  c->literal_max_ = 0.;
-  c->literal_min_ = MAX_COST;
-  c->red_max_ = 0.;
-  c->red_min_ = MAX_COST;
-  c->blue_max_ = 0.;
-  c->blue_min_ = MAX_COST;
-}
-
-static void UpdateDominantCostRange(
-    const VP8LHistogram* const h, DominantCostRange* const c) {
-  if (c->literal_max_ < h->literal_cost_) c->literal_max_ = h->literal_cost_;
-  if (c->literal_min_ > h->literal_cost_) c->literal_min_ = h->literal_cost_;
-  if (c->red_max_ < h->red_cost_) c->red_max_ = h->red_cost_;
-  if (c->red_min_ > h->red_cost_) c->red_min_ = h->red_cost_;
-  if (c->blue_max_ < h->blue_cost_) c->blue_max_ = h->blue_cost_;
-  if (c->blue_min_ > h->blue_cost_) c->blue_min_ = h->blue_cost_;
-}
-
-static void UpdateHistogramCost(VP8LHistogram* const h) {
-  uint32_t alpha_sym, red_sym, blue_sym;
-  const double alpha_cost =
-      PopulationCost(h->alpha_, NUM_LITERAL_CODES, &alpha_sym,
-                     &h->is_used_[3]);
-  const double distance_cost =
-      PopulationCost(h->distance_, NUM_DISTANCE_CODES, NULL, &h->is_used_[4]) +
-      VP8LExtraCost(h->distance_, NUM_DISTANCE_CODES);
-  const int num_codes = VP8LHistogramNumCodes(h->palette_code_bits_);
-  h->literal_cost_ =
-      PopulationCost(h->literal_, num_codes, NULL, &h->is_used_[0]) +
-          VP8LExtraCost(h->literal_ + NUM_LITERAL_CODES, NUM_LENGTH_CODES);
-  h->red_cost_ =
-      PopulationCost(h->red_, NUM_LITERAL_CODES, &red_sym, &h->is_used_[1]);
-  h->blue_cost_ =
-      PopulationCost(h->blue_, NUM_LITERAL_CODES, &blue_sym, &h->is_used_[2]);
-  h->bit_cost_ = h->literal_cost_ + h->red_cost_ + h->blue_cost_ +
-                 alpha_cost + distance_cost;
-  if ((alpha_sym | red_sym | blue_sym) == VP8L_NON_TRIVIAL_SYM) {
-    h->trivial_symbol_ = VP8L_NON_TRIVIAL_SYM;
-  } else {
-    h->trivial_symbol_ =
-        ((uint32_t)alpha_sym << 24) | (red_sym << 16) | (blue_sym << 0);
-  }
-}
-
-static int GetBinIdForEntropy(double min, double max, double val) {
-  const double range = max - min;
-  if (range > 0.) {
-    const double delta = val - min;
-    return (int)((NUM_PARTITIONS - 1e-6) * delta / range);
-  } else {
-    return 0;
-  }
-}
-
-static int GetHistoBinIndex(const VP8LHistogram* const h,
-                            const DominantCostRange* const c, int low_effort) {
-  int bin_id = GetBinIdForEntropy(c->literal_min_, c->literal_max_,
-                                  h->literal_cost_);
-  assert(bin_id < NUM_PARTITIONS);
-  if (!low_effort) {
-    bin_id = bin_id * NUM_PARTITIONS
-           + GetBinIdForEntropy(c->red_min_, c->red_max_, h->red_cost_);
-    bin_id = bin_id * NUM_PARTITIONS
-           + GetBinIdForEntropy(c->blue_min_, c->blue_max_, h->blue_cost_);
-    assert(bin_id < BIN_SIZE);
-  }
-  return bin_id;
-}
-
-// Construct the histograms from backward references.
-static void HistogramBuild(
-    int xsize, int histo_bits, const VP8LBackwardRefs* const backward_refs,
-    VP8LHistogramSet* const image_histo) {
-  int x = 0, y = 0;
-  const int histo_xsize = VP8LSubSampleSize(xsize, histo_bits);
-  VP8LHistogram** const histograms = image_histo->histograms;
-  VP8LRefsCursor c = VP8LRefsCursorInit(backward_refs);
-  assert(histo_bits > 0);
-  VP8LHistogramSetClear(image_histo);
-  while (VP8LRefsCursorOk(&c)) {
-    const PixOrCopy* const v = c.cur_pos;
-    const int ix = (y >> histo_bits) * histo_xsize + (x >> histo_bits);
-    VP8LHistogramAddSinglePixOrCopy(histograms[ix], v, NULL, 0);
-    x += PixOrCopyLength(v);
-    while (x >= xsize) {
-      x -= xsize;
-      ++y;
-    }
-    VP8LRefsCursorNext(&c);
-  }
-}
-
-// Copies the histograms and computes its bit_cost.
-static const uint16_t kInvalidHistogramSymbol = (uint16_t)(-1);
-static void HistogramCopyAndAnalyze(VP8LHistogramSet* const orig_histo,
-                                    VP8LHistogramSet* const image_histo,
-                                    int* const num_used,
-                                    uint16_t* const histogram_symbols) {
-  int i, cluster_id;
-  int num_used_orig = *num_used;
-  VP8LHistogram** const orig_histograms = orig_histo->histograms;
-  VP8LHistogram** const histograms = image_histo->histograms;
-  assert(image_histo->max_size == orig_histo->max_size);
-  for (cluster_id = 0, i = 0; i < orig_histo->max_size; ++i) {
-    VP8LHistogram* const histo = orig_histograms[i];
-    UpdateHistogramCost(histo);
-
-    // Skip the histogram if it is completely empty, which can happen for tiles
-    // with no information (when they are skipped because of LZ77).
-    if (!histo->is_used_[0] && !histo->is_used_[1] && !histo->is_used_[2]
-        && !histo->is_used_[3] && !histo->is_used_[4]) {
-      // The first histogram is always used. If an histogram is empty, we set
-      // its id to be the same as the previous one: this will improve
-      // compressibility for later LZ77.
-      assert(i > 0);
-      HistogramSetRemoveHistogram(image_histo, i, num_used);
-      HistogramSetRemoveHistogram(orig_histo, i, &num_used_orig);
-      histogram_symbols[i] = kInvalidHistogramSymbol;
-    } else {
-      // Copy histograms from orig_histo[] to image_histo[].
-      HistogramCopy(histo, histograms[i]);
-      histogram_symbols[i] = cluster_id++;
-      assert(cluster_id <= image_histo->max_size);
-    }
-  }
-}
-
-// Partition histograms to different entropy bins for three dominant (literal,
-// red and blue) symbol costs and compute the histogram aggregate bit_cost.
-static void HistogramAnalyzeEntropyBin(VP8LHistogramSet* const image_histo,
-                                       uint16_t* const bin_map,
-                                       int low_effort) {
-  int i;
-  VP8LHistogram** const histograms = image_histo->histograms;
-  const int histo_size = image_histo->size;
-  DominantCostRange cost_range;
-  DominantCostRangeInit(&cost_range);
-
-  // Analyze the dominant (literal, red and blue) entropy costs.
-  for (i = 0; i < histo_size; ++i) {
-    if (histograms[i] == NULL) continue;
-    UpdateDominantCostRange(histograms[i], &cost_range);
-  }
-
-  // bin-hash histograms on three of the dominant (literal, red and blue)
-  // symbol costs and store the resulting bin_id for each histogram.
-  for (i = 0; i < histo_size; ++i) {
-    // bin_map[i] is not set to a special value as its use will later be guarded
-    // by another (histograms[i] == NULL).
-    if (histograms[i] == NULL) continue;
-    bin_map[i] = GetHistoBinIndex(histograms[i], &cost_range, low_effort);
-  }
-}
-
-// Merges some histograms with same bin_id together if it's advantageous.
-// Sets the remaining histograms to NULL.
-static void HistogramCombineEntropyBin(VP8LHistogramSet* const image_histo,
-                                       int *num_used,
-                                       const uint16_t* const clusters,
-                                       uint16_t* const cluster_mappings,
-                                       VP8LHistogram* cur_combo,
-                                       const uint16_t* const bin_map,
-                                       int num_bins,
-                                       double combine_cost_factor,
-                                       int low_effort) {
-  VP8LHistogram** const histograms = image_histo->histograms;
-  int idx;
-  struct {
-    int16_t first;    // position of the histogram that accumulates all
-                      // histograms with the same bin_id
-    uint16_t num_combine_failures;   // number of combine failures per bin_id
-  } bin_info[BIN_SIZE];
-
-  assert(num_bins <= BIN_SIZE);
-  for (idx = 0; idx < num_bins; ++idx) {
-    bin_info[idx].first = -1;
-    bin_info[idx].num_combine_failures = 0;
-  }
-
-  // By default, a cluster matches itself.
-  for (idx = 0; idx < *num_used; ++idx) cluster_mappings[idx] = idx;
-  for (idx = 0; idx < image_histo->size; ++idx) {
-    int bin_id, first;
-    if (histograms[idx] == NULL) continue;
-    bin_id = bin_map[idx];
-    first = bin_info[bin_id].first;
-    if (first == -1) {
-      bin_info[bin_id].first = idx;
-    } else if (low_effort) {
-      HistogramAdd(histograms[idx], histograms[first], histograms[first]);
-      HistogramSetRemoveHistogram(image_histo, idx, num_used);
-      cluster_mappings[clusters[idx]] = clusters[first];
-    } else {
-      // try to merge #idx into #first (both share the same bin_id)
-      const double bit_cost = histograms[idx]->bit_cost_;
-      const double bit_cost_thresh = -bit_cost * combine_cost_factor;
-      const double curr_cost_diff =
-          HistogramAddEval(histograms[first], histograms[idx],
-                           cur_combo, bit_cost_thresh);
-      if (curr_cost_diff < bit_cost_thresh) {
-        // Try to merge two histograms only if the combo is a trivial one or
-        // the two candidate histograms are already non-trivial.
-        // For some images, 'try_combine' turns out to be false for a lot of
-        // histogram pairs. In that case, we fallback to combining
-        // histograms as usual to avoid increasing the header size.
-        const int try_combine =
-            (cur_combo->trivial_symbol_ != VP8L_NON_TRIVIAL_SYM) ||
-            ((histograms[idx]->trivial_symbol_ == VP8L_NON_TRIVIAL_SYM) &&
-             (histograms[first]->trivial_symbol_ == VP8L_NON_TRIVIAL_SYM));
-        const int max_combine_failures = 32;
-        if (try_combine ||
-            bin_info[bin_id].num_combine_failures >= max_combine_failures) {
-          // move the (better) merged histogram to its final slot
-          HistogramSwap(&cur_combo, &histograms[first]);
-          HistogramSetRemoveHistogram(image_histo, idx, num_used);
-          cluster_mappings[clusters[idx]] = clusters[first];
-        } else {
-          ++bin_info[bin_id].num_combine_failures;
-        }
-      }
-    }
-  }
-  if (low_effort) {
-    // for low_effort case, update the final cost when everything is merged
-    for (idx = 0; idx < image_histo->size; ++idx) {
-      if (histograms[idx] == NULL) continue;
-      UpdateHistogramCost(histograms[idx]);
-    }
-  }
-}
-
-// Implement a Lehmer random number generator with a multiplicative constant of
-// 48271 and a modulo constant of 2^31 - 1.
-static uint32_t MyRand(uint32_t* const seed) {
-  *seed = (uint32_t)(((uint64_t)(*seed) * 48271u) % 2147483647u);
-  assert(*seed > 0);
-  return *seed;
-}
-
-// -----------------------------------------------------------------------------
-// Histogram pairs priority queue
-
-// Pair of histograms. Negative idx1 value means that pair is out-of-date.
-typedef struct {
-  int idx1;
-  int idx2;
-  double cost_diff;
-  double cost_combo;
-} HistogramPair;
-
-typedef struct {
-  HistogramPair* queue;
-  int size;
-  int max_size;
-} HistoQueue;
-
-static int HistoQueueInit(HistoQueue* const histo_queue, const int max_size) {
-  histo_queue->size = 0;
-  histo_queue->max_size = max_size;
-  // We allocate max_size + 1 because the last element at index "size" is
-  // used as temporary data (and it could be up to max_size).
-  histo_queue->queue = (HistogramPair*)WebPSafeMalloc(
-      histo_queue->max_size + 1, sizeof(*histo_queue->queue));
-  return histo_queue->queue != NULL;
-}
-
-static void HistoQueueClear(HistoQueue* const histo_queue) {
-  assert(histo_queue != NULL);
-  WebPSafeFree(histo_queue->queue);
-  histo_queue->size = 0;
-  histo_queue->max_size = 0;
-}
-
-// Pop a specific pair in the queue by replacing it with the last one
-// and shrinking the queue.
-static void HistoQueuePopPair(HistoQueue* const histo_queue,
-                              HistogramPair* const pair) {
-  assert(pair >= histo_queue->queue &&
-         pair < (histo_queue->queue + histo_queue->size));
-  assert(histo_queue->size > 0);
-  *pair = histo_queue->queue[histo_queue->size - 1];
-  --histo_queue->size;
-}
-
-// Check whether a pair in the queue should be updated as head or not.
-static void HistoQueueUpdateHead(HistoQueue* const histo_queue,
-                                 HistogramPair* const pair) {
-  assert(pair->cost_diff < 0.);
-  assert(pair >= histo_queue->queue &&
-         pair < (histo_queue->queue + histo_queue->size));
-  assert(histo_queue->size > 0);
-  if (pair->cost_diff < histo_queue->queue[0].cost_diff) {
-    // Replace the best pair.
-    const HistogramPair tmp = histo_queue->queue[0];
-    histo_queue->queue[0] = *pair;
-    *pair = tmp;
-  }
-}
-
-// Update the cost diff and combo of a pair of histograms. This needs to be
-// called when the the histograms have been merged with a third one.
-static void HistoQueueUpdatePair(const VP8LHistogram* const h1,
-                                 const VP8LHistogram* const h2,
-                                 double threshold,
-                                 HistogramPair* const pair) {
-  const double sum_cost = h1->bit_cost_ + h2->bit_cost_;
-  pair->cost_combo = 0.;
-  GetCombinedHistogramEntropy(h1, h2, sum_cost + threshold, &pair->cost_combo);
-  pair->cost_diff = pair->cost_combo - sum_cost;
-}
-
-// Create a pair from indices "idx1" and "idx2" provided its cost
-// is inferior to "threshold", a negative entropy.
-// It returns the cost of the pair, or 0. if it superior to threshold.
-static double HistoQueuePush(HistoQueue* const histo_queue,
-                             VP8LHistogram** const histograms, int idx1,
-                             int idx2, double threshold) {
-  const VP8LHistogram* h1;
-  const VP8LHistogram* h2;
-  HistogramPair pair;
-
-  // Stop here if the queue is full.
-  if (histo_queue->size == histo_queue->max_size) return 0.;
-  assert(threshold <= 0.);
-  if (idx1 > idx2) {
-    const int tmp = idx2;
-    idx2 = idx1;
-    idx1 = tmp;
-  }
-  pair.idx1 = idx1;
-  pair.idx2 = idx2;
-  h1 = histograms[idx1];
-  h2 = histograms[idx2];
-
-  HistoQueueUpdatePair(h1, h2, threshold, &pair);
-
-  // Do not even consider the pair if it does not improve the entropy.
-  if (pair.cost_diff >= threshold) return 0.;
-
-  histo_queue->queue[histo_queue->size++] = pair;
-  HistoQueueUpdateHead(histo_queue, &histo_queue->queue[histo_queue->size - 1]);
-
-  return pair.cost_diff;
-}
-
-// -----------------------------------------------------------------------------
-
-// Combines histograms by continuously choosing the one with the highest cost
-// reduction.
-static int HistogramCombineGreedy(VP8LHistogramSet* const image_histo,
-                                  int* const num_used) {
-  int ok = 0;
-  const int image_histo_size = image_histo->size;
-  int i, j;
-  VP8LHistogram** const histograms = image_histo->histograms;
-  // Priority queue of histogram pairs.
-  HistoQueue histo_queue;
-
-  // image_histo_size^2 for the queue size is safe. If you look at
-  // HistogramCombineGreedy, and imagine that UpdateQueueFront always pushes
-  // data to the queue, you insert at most:
-  // - image_histo_size*(image_histo_size-1)/2 (the first two for loops)
-  // - image_histo_size - 1 in the last for loop at the first iteration of
-  //   the while loop, image_histo_size - 2 at the second iteration ...
-  //   therefore image_histo_size*(image_histo_size-1)/2 overall too
-  if (!HistoQueueInit(&histo_queue, image_histo_size * image_histo_size)) {
-    goto End;
-  }
-
-  for (i = 0; i < image_histo_size; ++i) {
-    if (image_histo->histograms[i] == NULL) continue;
-    for (j = i + 1; j < image_histo_size; ++j) {
-      // Initialize queue.
-      if (image_histo->histograms[j] == NULL) continue;
-      HistoQueuePush(&histo_queue, histograms, i, j, 0.);
-    }
-  }
-
-  while (histo_queue.size > 0) {
-    const int idx1 = histo_queue.queue[0].idx1;
-    const int idx2 = histo_queue.queue[0].idx2;
-    HistogramAdd(histograms[idx2], histograms[idx1], histograms[idx1]);
-    histograms[idx1]->bit_cost_ = histo_queue.queue[0].cost_combo;
-
-    // Remove merged histogram.
-    HistogramSetRemoveHistogram(image_histo, idx2, num_used);
-
-    // Remove pairs intersecting the just combined best pair.
-    for (i = 0; i < histo_queue.size;) {
-      HistogramPair* const p = histo_queue.queue + i;
-      if (p->idx1 == idx1 || p->idx2 == idx1 ||
-          p->idx1 == idx2 || p->idx2 == idx2) {
-        HistoQueuePopPair(&histo_queue, p);
-      } else {
-        HistoQueueUpdateHead(&histo_queue, p);
-        ++i;
-      }
-    }
-
-    // Push new pairs formed with combined histogram to the queue.
-    for (i = 0; i < image_histo->size; ++i) {
-      if (i == idx1 || image_histo->histograms[i] == NULL) continue;
-      HistoQueuePush(&histo_queue, image_histo->histograms, idx1, i, 0.);
-    }
-  }
-
-  ok = 1;
-
- End:
-  HistoQueueClear(&histo_queue);
-  return ok;
-}
-
-// Perform histogram aggregation using a stochastic approach.
-// 'do_greedy' is set to 1 if a greedy approach needs to be performed
-// afterwards, 0 otherwise.
-static int PairComparison(const void* idx1, const void* idx2) {
-  // To be used with bsearch: <0 when *idx1<*idx2, >0 if >, 0 when ==.
-  return (*(int*) idx1 - *(int*) idx2);
-}
-static int HistogramCombineStochastic(VP8LHistogramSet* const image_histo,
-                                      int* const num_used, int min_cluster_size,
-                                      int* const do_greedy) {
-  int j, iter;
-  uint32_t seed = 1;
-  int tries_with_no_success = 0;
-  const int outer_iters = *num_used;
-  const int num_tries_no_success = outer_iters / 2;
-  VP8LHistogram** const histograms = image_histo->histograms;
-  // Priority queue of histogram pairs. Its size of 'kHistoQueueSize'
-  // impacts the quality of the compression and the speed: the smaller the
-  // faster but the worse for the compression.
-  HistoQueue histo_queue;
-  const int kHistoQueueSize = 9;
-  int ok = 0;
-  // mapping from an index in image_histo with no NULL histogram to the full
-  // blown image_histo.
-  int* mappings;
-
-  if (*num_used < min_cluster_size) {
-    *do_greedy = 1;
-    return 1;
-  }
-
-  mappings = (int*) WebPSafeMalloc(*num_used, sizeof(*mappings));
-  if (mappings == NULL || !HistoQueueInit(&histo_queue, kHistoQueueSize)) {
-    goto End;
-  }
-  // Fill the initial mapping.
-  for (j = 0, iter = 0; iter < image_histo->size; ++iter) {
-    if (histograms[iter] == NULL) continue;
-    mappings[j++] = iter;
-  }
-  assert(j == *num_used);
-
-  // Collapse similar histograms in 'image_histo'.
-  for (iter = 0;
-       iter < outer_iters && *num_used >= min_cluster_size &&
-           ++tries_with_no_success < num_tries_no_success;
-       ++iter) {
-    int* mapping_index;
-    double best_cost =
-        (histo_queue.size == 0) ? 0. : histo_queue.queue[0].cost_diff;
-    int best_idx1 = -1, best_idx2 = 1;
-    const uint32_t rand_range = (*num_used - 1) * (*num_used);
-    // (*num_used) / 2 was chosen empirically. Less means faster but worse
-    // compression.
-    const int num_tries = (*num_used) / 2;
-
-    // Pick random samples.
-    for (j = 0; *num_used >= 2 && j < num_tries; ++j) {
-      double curr_cost;
-      // Choose two different histograms at random and try to combine them.
-      const uint32_t tmp = MyRand(&seed) % rand_range;
-      uint32_t idx1 = tmp / (*num_used - 1);
-      uint32_t idx2 = tmp % (*num_used - 1);
-      if (idx2 >= idx1) ++idx2;
-      idx1 = mappings[idx1];
-      idx2 = mappings[idx2];
-
-      // Calculate cost reduction on combination.
-      curr_cost =
-          HistoQueuePush(&histo_queue, histograms, idx1, idx2, best_cost);
-      if (curr_cost < 0) {  // found a better pair?
-        best_cost = curr_cost;
-        // Empty the queue if we reached full capacity.
-        if (histo_queue.size == histo_queue.max_size) break;
-      }
-    }
-    if (histo_queue.size == 0) continue;
-
-    // Get the best histograms.
-    best_idx1 = histo_queue.queue[0].idx1;
-    best_idx2 = histo_queue.queue[0].idx2;
-    assert(best_idx1 < best_idx2);
-    // Pop best_idx2 from mappings.
-    mapping_index = (int*) bsearch(&best_idx2, mappings, *num_used,
-                                   sizeof(best_idx2), &PairComparison);
-    assert(mapping_index != NULL);
-    memmove(mapping_index, mapping_index + 1, sizeof(*mapping_index) *
-        ((*num_used) - (mapping_index - mappings) - 1));
-    // Merge the histograms and remove best_idx2 from the queue.
-    HistogramAdd(histograms[best_idx2], histograms[best_idx1],
-                 histograms[best_idx1]);
-    histograms[best_idx1]->bit_cost_ = histo_queue.queue[0].cost_combo;
-    HistogramSetRemoveHistogram(image_histo, best_idx2, num_used);
-    // Parse the queue and update each pair that deals with best_idx1,
-    // best_idx2 or image_histo_size.
-    for (j = 0; j < histo_queue.size;) {
-      HistogramPair* const p = histo_queue.queue + j;
-      const int is_idx1_best = p->idx1 == best_idx1 || p->idx1 == best_idx2;
-      const int is_idx2_best = p->idx2 == best_idx1 || p->idx2 == best_idx2;
-      int do_eval = 0;
-      // The front pair could have been duplicated by a random pick so
-      // check for it all the time nevertheless.
-      if (is_idx1_best && is_idx2_best) {
-        HistoQueuePopPair(&histo_queue, p);
-        continue;
-      }
-      // Any pair containing one of the two best indices should only refer to
-      // best_idx1. Its cost should also be updated.
-      if (is_idx1_best) {
-        p->idx1 = best_idx1;
-        do_eval = 1;
-      } else if (is_idx2_best) {
-        p->idx2 = best_idx1;
-        do_eval = 1;
-      }
-      // Make sure the index order is respected.
-      if (p->idx1 > p->idx2) {
-        const int tmp = p->idx2;
-        p->idx2 = p->idx1;
-        p->idx1 = tmp;
-      }
-      if (do_eval) {
-        // Re-evaluate the cost of an updated pair.
-        HistoQueueUpdatePair(histograms[p->idx1], histograms[p->idx2], 0., p);
-        if (p->cost_diff >= 0.) {
-          HistoQueuePopPair(&histo_queue, p);
-          continue;
-        }
-      }
-      HistoQueueUpdateHead(&histo_queue, p);
-      ++j;
-    }
-    tries_with_no_success = 0;
-  }
-  *do_greedy = (*num_used <= min_cluster_size);
-  ok = 1;
-
-End:
-  HistoQueueClear(&histo_queue);
-  WebPSafeFree(mappings);
-  return ok;
-}
-
-// -----------------------------------------------------------------------------
-// Histogram refinement
-
-// Find the best 'out' histogram for each of the 'in' histograms.
-// At call-time, 'out' contains the histograms of the clusters.
-// Note: we assume that out[]->bit_cost_ is already up-to-date.
-static void HistogramRemap(const VP8LHistogramSet* const in,
-                           VP8LHistogramSet* const out,
-                           uint16_t* const symbols) {
-  int i;
-  VP8LHistogram** const in_histo = in->histograms;
-  VP8LHistogram** const out_histo = out->histograms;
-  const int in_size = out->max_size;
-  const int out_size = out->size;
-  if (out_size > 1) {
-    for (i = 0; i < in_size; ++i) {
-      int best_out = 0;
-      double best_bits = MAX_COST;
-      int k;
-      if (in_histo[i] == NULL) {
-        // Arbitrarily set to the previous value if unused to help future LZ77.
-        symbols[i] = symbols[i - 1];
-        continue;
-      }
-      for (k = 0; k < out_size; ++k) {
-        double cur_bits;
-        cur_bits = HistogramAddThresh(out_histo[k], in_histo[i], best_bits);
-        if (k == 0 || cur_bits < best_bits) {
-          best_bits = cur_bits;
-          best_out = k;
-        }
-      }
-      symbols[i] = best_out;
-    }
-  } else {
-    assert(out_size == 1);
-    for (i = 0; i < in_size; ++i) {
-      symbols[i] = 0;
-    }
-  }
-
-  // Recompute each out based on raw and symbols.
-  VP8LHistogramSetClear(out);
-  out->size = out_size;
-
-  for (i = 0; i < in_size; ++i) {
-    int idx;
-    if (in_histo[i] == NULL) continue;
-    idx = symbols[i];
-    HistogramAdd(in_histo[i], out_histo[idx], out_histo[idx]);
-  }
-}
-
-static double GetCombineCostFactor(int histo_size, int quality) {
-  double combine_cost_factor = 0.16;
-  if (quality < 90) {
-    if (histo_size > 256) combine_cost_factor /= 2.;
-    if (histo_size > 512) combine_cost_factor /= 2.;
-    if (histo_size > 1024) combine_cost_factor /= 2.;
-    if (quality <= 50) combine_cost_factor /= 2.;
-  }
-  return combine_cost_factor;
-}
-
-// Given a HistogramSet 'set', the mapping of clusters 'cluster_mapping' and the
-// current assignment of the cells in 'symbols', merge the clusters and
-// assign the smallest possible clusters values.
-static void OptimizeHistogramSymbols(const VP8LHistogramSet* const set,
-                                     uint16_t* const cluster_mappings,
-                                     int num_clusters,
-                                     uint16_t* const cluster_mappings_tmp,
-                                     uint16_t* const symbols) {
-  int i, cluster_max;
-  int do_continue = 1;
-  // First, assign the lowest cluster to each pixel.
-  while (do_continue) {
-    do_continue = 0;
-    for (i = 0; i < num_clusters; ++i) {
-      int k;
-      k = cluster_mappings[i];
-      while (k != cluster_mappings[k]) {
-        cluster_mappings[k] = cluster_mappings[cluster_mappings[k]];
-        k = cluster_mappings[k];
-      }
-      if (k != cluster_mappings[i]) {
-        do_continue = 1;
-        cluster_mappings[i] = k;
-      }
-    }
-  }
-  // Create a mapping from a cluster id to its minimal version.
-  cluster_max = 0;
-  memset(cluster_mappings_tmp, 0,
-         set->max_size * sizeof(*cluster_mappings_tmp));
-  assert(cluster_mappings[0] == 0);
-  // Re-map the ids.
-  for (i = 0; i < set->max_size; ++i) {
-    int cluster;
-    if (symbols[i] == kInvalidHistogramSymbol) continue;
-    cluster = cluster_mappings[symbols[i]];
-    assert(symbols[i] < num_clusters);
-    if (cluster > 0 && cluster_mappings_tmp[cluster] == 0) {
-      ++cluster_max;
-      cluster_mappings_tmp[cluster] = cluster_max;
-    }
-    symbols[i] = cluster_mappings_tmp[cluster];
-  }
-
-  // Make sure all cluster values are used.
-  cluster_max = 0;
-  for (i = 0; i < set->max_size; ++i) {
-    if (symbols[i] == kInvalidHistogramSymbol) continue;
-    if (symbols[i] <= cluster_max) continue;
-    ++cluster_max;
-    assert(symbols[i] == cluster_max);
-  }
-}
-
-static void RemoveEmptyHistograms(VP8LHistogramSet* const image_histo) {
-  uint32_t size;
-  int i;
-  for (i = 0, size = 0; i < image_histo->size; ++i) {
-    if (image_histo->histograms[i] == NULL) continue;
-    image_histo->histograms[size++] = image_histo->histograms[i];
-  }
-  image_histo->size = size;
-}
-
-int VP8LGetHistoImageSymbols(int xsize, int ysize,
-                             const VP8LBackwardRefs* const refs,
-                             int quality, int low_effort,
-                             int histo_bits, int cache_bits,
-                             VP8LHistogramSet* const image_histo,
-                             VP8LHistogram* const tmp_histo,
-                             uint16_t* const histogram_symbols) {
-  int ok = 0;
-  const int histo_xsize = histo_bits ? VP8LSubSampleSize(xsize, histo_bits) : 1;
-  const int histo_ysize = histo_bits ? VP8LSubSampleSize(ysize, histo_bits) : 1;
-  const int image_histo_raw_size = histo_xsize * histo_ysize;
-  VP8LHistogramSet* const orig_histo =
-      VP8LAllocateHistogramSet(image_histo_raw_size, cache_bits);
-  // Don't attempt linear bin-partition heuristic for
-  // histograms of small sizes (as bin_map will be very sparse) and
-  // maximum quality q==100 (to preserve the compression gains at that level).
-  const int entropy_combine_num_bins = low_effort ? NUM_PARTITIONS : BIN_SIZE;
-  int entropy_combine;
-  uint16_t* const map_tmp =
-      WebPSafeMalloc(2 * image_histo_raw_size, sizeof(map_tmp));
-  uint16_t* const cluster_mappings = map_tmp + image_histo_raw_size;
-  int num_used = image_histo_raw_size;
-  if (orig_histo == NULL || map_tmp == NULL) goto Error;
-
-  // Construct the histograms from backward references.
-  HistogramBuild(xsize, histo_bits, refs, orig_histo);
-  // Copies the histograms and computes its bit_cost.
-  // histogram_symbols is optimized
-  HistogramCopyAndAnalyze(orig_histo, image_histo, &num_used,
-                          histogram_symbols);
-
-  entropy_combine =
-      (num_used > entropy_combine_num_bins * 2) && (quality < 100);
-
-  if (entropy_combine) {
-    uint16_t* const bin_map = map_tmp;
-    const double combine_cost_factor =
-        GetCombineCostFactor(image_histo_raw_size, quality);
-    const uint32_t num_clusters = num_used;
-
-    HistogramAnalyzeEntropyBin(image_histo, bin_map, low_effort);
-    // Collapse histograms with similar entropy.
-    HistogramCombineEntropyBin(image_histo, &num_used, histogram_symbols,
-                               cluster_mappings, tmp_histo, bin_map,
-                               entropy_combine_num_bins, combine_cost_factor,
-                               low_effort);
-    OptimizeHistogramSymbols(image_histo, cluster_mappings, num_clusters,
-                             map_tmp, histogram_symbols);
-  }
-
-  // Don't combine the histograms using stochastic and greedy heuristics for
-  // low-effort compression mode.
-  if (!low_effort || !entropy_combine) {
-    const float x = quality / 100.f;
-    // cubic ramp between 1 and MAX_HISTO_GREEDY:
-    const int threshold_size = (int)(1 + (x * x * x) * (MAX_HISTO_GREEDY - 1));
-    int do_greedy;
-    if (!HistogramCombineStochastic(image_histo, &num_used, threshold_size,
-                                    &do_greedy)) {
-      goto Error;
-    }
-    if (do_greedy) {
-      RemoveEmptyHistograms(image_histo);
-      if (!HistogramCombineGreedy(image_histo, &num_used)) {
-        goto Error;
-      }
-    }
-  }
-
-  // Find the optimal map from original histograms to the final ones.
-  RemoveEmptyHistograms(image_histo);
-  HistogramRemap(orig_histo, image_histo, histogram_symbols);
-
-  ok = 1;
-
- Error:
-  VP8LFreeHistogramSet(orig_histo);
-  WebPSafeFree(map_tmp);
-  return ok;
-}
diff --git a/ios/Pods/libwebp/src/enc/histogram_enc.h b/ios/Pods/libwebp/src/enc/histogram_enc.h
deleted file mode 100644
index 54c2d21..0000000
--- a/ios/Pods/libwebp/src/enc/histogram_enc.h
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Jyrki Alakuijala (jyrki@google.com)
-//
-// Models the histograms of literal and distance codes.
-
-#ifndef WEBP_ENC_HISTOGRAM_ENC_H_
-#define WEBP_ENC_HISTOGRAM_ENC_H_
-
-#include <string.h>
-
-#include "src/enc/backward_references_enc.h"
-#include "src/webp/format_constants.h"
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Not a trivial literal symbol.
-#define VP8L_NON_TRIVIAL_SYM (0xffffffff)
-
-// A simple container for histograms of data.
-typedef struct {
-  // literal_ contains green literal, palette-code and
-  // copy-length-prefix histogram
-  uint32_t* literal_;         // Pointer to the allocated buffer for literal.
-  uint32_t red_[NUM_LITERAL_CODES];
-  uint32_t blue_[NUM_LITERAL_CODES];
-  uint32_t alpha_[NUM_LITERAL_CODES];
-  // Backward reference prefix-code histogram.
-  uint32_t distance_[NUM_DISTANCE_CODES];
-  int palette_code_bits_;
-  uint32_t trivial_symbol_;  // True, if histograms for Red, Blue & Alpha
-                             // literal symbols are single valued.
-  double bit_cost_;          // cached value of bit cost.
-  double literal_cost_;      // Cached values of dominant entropy costs:
-  double red_cost_;          // literal, red & blue.
-  double blue_cost_;
-  uint8_t is_used_[5];       // 5 for literal, red, blue, alpha, distance
-} VP8LHistogram;
-
-// Collection of histograms with fixed capacity, allocated as one
-// big memory chunk. Can be destroyed by calling WebPSafeFree().
-typedef struct {
-  int size;         // number of slots currently in use
-  int max_size;     // maximum capacity
-  VP8LHistogram** histograms;
-} VP8LHistogramSet;
-
-// Create the histogram.
-//
-// The input data is the PixOrCopy data, which models the literals, stop
-// codes and backward references (both distances and lengths).  Also: if
-// palette_code_bits is >= 0, initialize the histogram with this value.
-void VP8LHistogramCreate(VP8LHistogram* const p,
-                         const VP8LBackwardRefs* const refs,
-                         int palette_code_bits);
-
-// Return the size of the histogram for a given palette_code_bits.
-int VP8LGetHistogramSize(int palette_code_bits);
-
-// Set the palette_code_bits and reset the stats.
-// If init_arrays is true, the arrays are also filled with 0's.
-void VP8LHistogramInit(VP8LHistogram* const p, int palette_code_bits,
-                       int init_arrays);
-
-// Collect all the references into a histogram (without reset)
-void VP8LHistogramStoreRefs(const VP8LBackwardRefs* const refs,
-                            VP8LHistogram* const histo);
-
-// Free the memory allocated for the histogram.
-void VP8LFreeHistogram(VP8LHistogram* const histo);
-
-// Free the memory allocated for the histogram set.
-void VP8LFreeHistogramSet(VP8LHistogramSet* const histo);
-
-// Allocate an array of pointer to histograms, allocated and initialized
-// using 'cache_bits'. Return NULL in case of memory error.
-VP8LHistogramSet* VP8LAllocateHistogramSet(int size, int cache_bits);
-
-// Set the histograms in set to 0.
-void VP8LHistogramSetClear(VP8LHistogramSet* const set);
-
-// Allocate and initialize histogram object with specified 'cache_bits'.
-// Returns NULL in case of memory error.
-// Special case of VP8LAllocateHistogramSet, with size equals 1.
-VP8LHistogram* VP8LAllocateHistogram(int cache_bits);
-
-// Accumulate a token 'v' into a histogram.
-void VP8LHistogramAddSinglePixOrCopy(VP8LHistogram* const histo,
-                                     const PixOrCopy* const v,
-                                     int (*const distance_modifier)(int, int),
-                                     int distance_modifier_arg0);
-
-static WEBP_INLINE int VP8LHistogramNumCodes(int palette_code_bits) {
-  return NUM_LITERAL_CODES + NUM_LENGTH_CODES +
-      ((palette_code_bits > 0) ? (1 << palette_code_bits) : 0);
-}
-
-// Builds the histogram image.
-int VP8LGetHistoImageSymbols(int xsize, int ysize,
-                             const VP8LBackwardRefs* const refs,
-                             int quality, int low_effort,
-                             int histogram_bits, int cache_bits,
-                             VP8LHistogramSet* const image_in,
-                             VP8LHistogram* const tmp_histo,
-                             uint16_t* const histogram_symbols);
-
-// Returns the entropy for the symbols in the input array.
-double VP8LBitsEntropy(const uint32_t* const array, int n);
-
-// Estimate how many bits the combined entropy of literals and distance
-// approximately maps to.
-double VP8LHistogramEstimateBits(VP8LHistogram* const p);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // WEBP_ENC_HISTOGRAM_ENC_H_
diff --git a/ios/Pods/libwebp/src/enc/iterator_enc.c b/ios/Pods/libwebp/src/enc/iterator_enc.c
deleted file mode 100644
index 29f91d8..0000000
--- a/ios/Pods/libwebp/src/enc/iterator_enc.c
+++ /dev/null
@@ -1,459 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// VP8Iterator: block iterator
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <string.h>
-
-#include "src/enc/vp8i_enc.h"
-
-//------------------------------------------------------------------------------
-// VP8Iterator
-//------------------------------------------------------------------------------
-
-static void InitLeft(VP8EncIterator* const it) {
-  it->y_left_[-1] = it->u_left_[-1] = it->v_left_[-1] =
-      (it->y_ > 0) ? 129 : 127;
-  memset(it->y_left_, 129, 16);
-  memset(it->u_left_, 129, 8);
-  memset(it->v_left_, 129, 8);
-  it->left_nz_[8] = 0;
-  if (it->top_derr_ != NULL) {
-    memset(&it->left_derr_, 0, sizeof(it->left_derr_));
-  }
-}
-
-static void InitTop(VP8EncIterator* const it) {
-  const VP8Encoder* const enc = it->enc_;
-  const size_t top_size = enc->mb_w_ * 16;
-  memset(enc->y_top_, 127, 2 * top_size);
-  memset(enc->nz_, 0, enc->mb_w_ * sizeof(*enc->nz_));
-  if (enc->top_derr_ != NULL) {
-    memset(enc->top_derr_, 0, enc->mb_w_ * sizeof(*enc->top_derr_));
-  }
-}
-
-void VP8IteratorSetRow(VP8EncIterator* const it, int y) {
-  VP8Encoder* const enc = it->enc_;
-  it->x_ = 0;
-  it->y_ = y;
-  it->bw_ = &enc->parts_[y & (enc->num_parts_ - 1)];
-  it->preds_ = enc->preds_ + y * 4 * enc->preds_w_;
-  it->nz_ = enc->nz_;
-  it->mb_ = enc->mb_info_ + y * enc->mb_w_;
-  it->y_top_ = enc->y_top_;
-  it->uv_top_ = enc->uv_top_;
-  InitLeft(it);
-}
-
-void VP8IteratorReset(VP8EncIterator* const it) {
-  VP8Encoder* const enc = it->enc_;
-  VP8IteratorSetRow(it, 0);
-  VP8IteratorSetCountDown(it, enc->mb_w_ * enc->mb_h_);  // default
-  InitTop(it);
-  memset(it->bit_count_, 0, sizeof(it->bit_count_));
-  it->do_trellis_ = 0;
-}
-
-void VP8IteratorSetCountDown(VP8EncIterator* const it, int count_down) {
-  it->count_down_ = it->count_down0_ = count_down;
-}
-
-int VP8IteratorIsDone(const VP8EncIterator* const it) {
-  return (it->count_down_ <= 0);
-}
-
-void VP8IteratorInit(VP8Encoder* const enc, VP8EncIterator* const it) {
-  it->enc_ = enc;
-  it->yuv_in_   = (uint8_t*)WEBP_ALIGN(it->yuv_mem_);
-  it->yuv_out_  = it->yuv_in_ + YUV_SIZE_ENC;
-  it->yuv_out2_ = it->yuv_out_ + YUV_SIZE_ENC;
-  it->yuv_p_    = it->yuv_out2_ + YUV_SIZE_ENC;
-  it->lf_stats_ = enc->lf_stats_;
-  it->percent0_ = enc->percent_;
-  it->y_left_ = (uint8_t*)WEBP_ALIGN(it->yuv_left_mem_ + 1);
-  it->u_left_ = it->y_left_ + 16 + 16;
-  it->v_left_ = it->u_left_ + 16;
-  it->top_derr_ = enc->top_derr_;
-  VP8IteratorReset(it);
-}
-
-int VP8IteratorProgress(const VP8EncIterator* const it, int delta) {
-  VP8Encoder* const enc = it->enc_;
-  if (delta && enc->pic_->progress_hook != NULL) {
-    const int done = it->count_down0_ - it->count_down_;
-    const int percent = (it->count_down0_ <= 0)
-                      ? it->percent0_
-                      : it->percent0_ + delta * done / it->count_down0_;
-    return WebPReportProgress(enc->pic_, percent, &enc->percent_);
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-// Import the source samples into the cache. Takes care of replicating
-// boundary pixels if necessary.
-
-static WEBP_INLINE int MinSize(int a, int b) { return (a < b) ? a : b; }
-
-static void ImportBlock(const uint8_t* src, int src_stride,
-                        uint8_t* dst, int w, int h, int size) {
-  int i;
-  for (i = 0; i < h; ++i) {
-    memcpy(dst, src, w);
-    if (w < size) {
-      memset(dst + w, dst[w - 1], size - w);
-    }
-    dst += BPS;
-    src += src_stride;
-  }
-  for (i = h; i < size; ++i) {
-    memcpy(dst, dst - BPS, size);
-    dst += BPS;
-  }
-}
-
-static void ImportLine(const uint8_t* src, int src_stride,
-                       uint8_t* dst, int len, int total_len) {
-  int i;
-  for (i = 0; i < len; ++i, src += src_stride) dst[i] = *src;
-  for (; i < total_len; ++i) dst[i] = dst[len - 1];
-}
-
-void VP8IteratorImport(VP8EncIterator* const it, uint8_t* const tmp_32) {
-  const VP8Encoder* const enc = it->enc_;
-  const int x = it->x_, y = it->y_;
-  const WebPPicture* const pic = enc->pic_;
-  const uint8_t* const ysrc = pic->y + (y * pic->y_stride  + x) * 16;
-  const uint8_t* const usrc = pic->u + (y * pic->uv_stride + x) * 8;
-  const uint8_t* const vsrc = pic->v + (y * pic->uv_stride + x) * 8;
-  const int w = MinSize(pic->width - x * 16, 16);
-  const int h = MinSize(pic->height - y * 16, 16);
-  const int uv_w = (w + 1) >> 1;
-  const int uv_h = (h + 1) >> 1;
-
-  ImportBlock(ysrc, pic->y_stride,  it->yuv_in_ + Y_OFF_ENC, w, h, 16);
-  ImportBlock(usrc, pic->uv_stride, it->yuv_in_ + U_OFF_ENC, uv_w, uv_h, 8);
-  ImportBlock(vsrc, pic->uv_stride, it->yuv_in_ + V_OFF_ENC, uv_w, uv_h, 8);
-
-  if (tmp_32 == NULL) return;
-
-  // Import source (uncompressed) samples into boundary.
-  if (x == 0) {
-    InitLeft(it);
-  } else {
-    if (y == 0) {
-      it->y_left_[-1] = it->u_left_[-1] = it->v_left_[-1] = 127;
-    } else {
-      it->y_left_[-1] = ysrc[- 1 - pic->y_stride];
-      it->u_left_[-1] = usrc[- 1 - pic->uv_stride];
-      it->v_left_[-1] = vsrc[- 1 - pic->uv_stride];
-    }
-    ImportLine(ysrc - 1, pic->y_stride,  it->y_left_, h,   16);
-    ImportLine(usrc - 1, pic->uv_stride, it->u_left_, uv_h, 8);
-    ImportLine(vsrc - 1, pic->uv_stride, it->v_left_, uv_h, 8);
-  }
-
-  it->y_top_  = tmp_32 + 0;
-  it->uv_top_ = tmp_32 + 16;
-  if (y == 0) {
-    memset(tmp_32, 127, 32 * sizeof(*tmp_32));
-  } else {
-    ImportLine(ysrc - pic->y_stride,  1, tmp_32,          w,   16);
-    ImportLine(usrc - pic->uv_stride, 1, tmp_32 + 16,     uv_w, 8);
-    ImportLine(vsrc - pic->uv_stride, 1, tmp_32 + 16 + 8, uv_w, 8);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Copy back the compressed samples into user space if requested.
-
-static void ExportBlock(const uint8_t* src, uint8_t* dst, int dst_stride,
-                        int w, int h) {
-  while (h-- > 0) {
-    memcpy(dst, src, w);
-    dst += dst_stride;
-    src += BPS;
-  }
-}
-
-void VP8IteratorExport(const VP8EncIterator* const it) {
-  const VP8Encoder* const enc = it->enc_;
-  if (enc->config_->show_compressed) {
-    const int x = it->x_, y = it->y_;
-    const uint8_t* const ysrc = it->yuv_out_ + Y_OFF_ENC;
-    const uint8_t* const usrc = it->yuv_out_ + U_OFF_ENC;
-    const uint8_t* const vsrc = it->yuv_out_ + V_OFF_ENC;
-    const WebPPicture* const pic = enc->pic_;
-    uint8_t* const ydst = pic->y + (y * pic->y_stride + x) * 16;
-    uint8_t* const udst = pic->u + (y * pic->uv_stride + x) * 8;
-    uint8_t* const vdst = pic->v + (y * pic->uv_stride + x) * 8;
-    int w = (pic->width - x * 16);
-    int h = (pic->height - y * 16);
-
-    if (w > 16) w = 16;
-    if (h > 16) h = 16;
-
-    // Luma plane
-    ExportBlock(ysrc, ydst, pic->y_stride, w, h);
-
-    {   // U/V planes
-      const int uv_w = (w + 1) >> 1;
-      const int uv_h = (h + 1) >> 1;
-      ExportBlock(usrc, udst, pic->uv_stride, uv_w, uv_h);
-      ExportBlock(vsrc, vdst, pic->uv_stride, uv_w, uv_h);
-    }
-  }
-}
-
-//------------------------------------------------------------------------------
-// Non-zero contexts setup/teardown
-
-// Nz bits:
-//  0  1  2  3  Y
-//  4  5  6  7
-//  8  9 10 11
-// 12 13 14 15
-// 16 17        U
-// 18 19
-// 20 21        V
-// 22 23
-// 24           DC-intra16
-
-// Convert packed context to byte array
-#define BIT(nz, n) (!!((nz) & (1 << (n))))
-
-void VP8IteratorNzToBytes(VP8EncIterator* const it) {
-  const int tnz = it->nz_[0], lnz = it->nz_[-1];
-  int* const top_nz = it->top_nz_;
-  int* const left_nz = it->left_nz_;
-
-  // Top-Y
-  top_nz[0] = BIT(tnz, 12);
-  top_nz[1] = BIT(tnz, 13);
-  top_nz[2] = BIT(tnz, 14);
-  top_nz[3] = BIT(tnz, 15);
-  // Top-U
-  top_nz[4] = BIT(tnz, 18);
-  top_nz[5] = BIT(tnz, 19);
-  // Top-V
-  top_nz[6] = BIT(tnz, 22);
-  top_nz[7] = BIT(tnz, 23);
-  // DC
-  top_nz[8] = BIT(tnz, 24);
-
-  // left-Y
-  left_nz[0] = BIT(lnz,  3);
-  left_nz[1] = BIT(lnz,  7);
-  left_nz[2] = BIT(lnz, 11);
-  left_nz[3] = BIT(lnz, 15);
-  // left-U
-  left_nz[4] = BIT(lnz, 17);
-  left_nz[5] = BIT(lnz, 19);
-  // left-V
-  left_nz[6] = BIT(lnz, 21);
-  left_nz[7] = BIT(lnz, 23);
-  // left-DC is special, iterated separately
-}
-
-void VP8IteratorBytesToNz(VP8EncIterator* const it) {
-  uint32_t nz = 0;
-  const int* const top_nz = it->top_nz_;
-  const int* const left_nz = it->left_nz_;
-  // top
-  nz |= (top_nz[0] << 12) | (top_nz[1] << 13);
-  nz |= (top_nz[2] << 14) | (top_nz[3] << 15);
-  nz |= (top_nz[4] << 18) | (top_nz[5] << 19);
-  nz |= (top_nz[6] << 22) | (top_nz[7] << 23);
-  nz |= (top_nz[8] << 24);  // we propagate the _top_ bit, esp. for intra4
-  // left
-  nz |= (left_nz[0] << 3) | (left_nz[1] << 7);
-  nz |= (left_nz[2] << 11);
-  nz |= (left_nz[4] << 17) | (left_nz[6] << 21);
-
-  *it->nz_ = nz;
-}
-
-#undef BIT
-
-//------------------------------------------------------------------------------
-// Advance to the next position, doing the bookkeeping.
-
-void VP8IteratorSaveBoundary(VP8EncIterator* const it) {
-  VP8Encoder* const enc = it->enc_;
-  const int x = it->x_, y = it->y_;
-  const uint8_t* const ysrc = it->yuv_out_ + Y_OFF_ENC;
-  const uint8_t* const uvsrc = it->yuv_out_ + U_OFF_ENC;
-  if (x < enc->mb_w_ - 1) {   // left
-    int i;
-    for (i = 0; i < 16; ++i) {
-      it->y_left_[i] = ysrc[15 + i * BPS];
-    }
-    for (i = 0; i < 8; ++i) {
-      it->u_left_[i] = uvsrc[7 + i * BPS];
-      it->v_left_[i] = uvsrc[15 + i * BPS];
-    }
-    // top-left (before 'top'!)
-    it->y_left_[-1] = it->y_top_[15];
-    it->u_left_[-1] = it->uv_top_[0 + 7];
-    it->v_left_[-1] = it->uv_top_[8 + 7];
-  }
-  if (y < enc->mb_h_ - 1) {  // top
-    memcpy(it->y_top_, ysrc + 15 * BPS, 16);
-    memcpy(it->uv_top_, uvsrc + 7 * BPS, 8 + 8);
-  }
-}
-
-int VP8IteratorNext(VP8EncIterator* const it) {
-  if (++it->x_ == it->enc_->mb_w_) {
-    VP8IteratorSetRow(it, ++it->y_);
-  } else {
-    it->preds_ += 4;
-    it->mb_ += 1;
-    it->nz_ += 1;
-    it->y_top_ += 16;
-    it->uv_top_ += 16;
-  }
-  return (0 < --it->count_down_);
-}
-
-//------------------------------------------------------------------------------
-// Helper function to set mode properties
-
-void VP8SetIntra16Mode(const VP8EncIterator* const it, int mode) {
-  uint8_t* preds = it->preds_;
-  int y;
-  for (y = 0; y < 4; ++y) {
-    memset(preds, mode, 4);
-    preds += it->enc_->preds_w_;
-  }
-  it->mb_->type_ = 1;
-}
-
-void VP8SetIntra4Mode(const VP8EncIterator* const it, const uint8_t* modes) {
-  uint8_t* preds = it->preds_;
-  int y;
-  for (y = 4; y > 0; --y) {
-    memcpy(preds, modes, 4 * sizeof(*modes));
-    preds += it->enc_->preds_w_;
-    modes += 4;
-  }
-  it->mb_->type_ = 0;
-}
-
-void VP8SetIntraUVMode(const VP8EncIterator* const it, int mode) {
-  it->mb_->uv_mode_ = mode;
-}
-
-void VP8SetSkip(const VP8EncIterator* const it, int skip) {
-  it->mb_->skip_ = skip;
-}
-
-void VP8SetSegment(const VP8EncIterator* const it, int segment) {
-  it->mb_->segment_ = segment;
-}
-
-//------------------------------------------------------------------------------
-// Intra4x4 sub-blocks iteration
-//
-//  We store and update the boundary samples into an array of 37 pixels. They
-//  are updated as we iterate and reconstructs each intra4x4 blocks in turn.
-//  The position of the samples has the following snake pattern:
-//
-// 16|17 18 19 20|21 22 23 24|25 26 27 28|29 30 31 32|33 34 35 36  <- Top-right
-// --+-----------+-----------+-----------+-----------+
-// 15|         19|         23|         27|         31|
-// 14|         18|         22|         26|         30|
-// 13|         17|         21|         25|         29|
-// 12|13 14 15 16|17 18 19 20|21 22 23 24|25 26 27 28|
-// --+-----------+-----------+-----------+-----------+
-// 11|         15|         19|         23|         27|
-// 10|         14|         18|         22|         26|
-//  9|         13|         17|         21|         25|
-//  8| 9 10 11 12|13 14 15 16|17 18 19 20|21 22 23 24|
-// --+-----------+-----------+-----------+-----------+
-//  7|         11|         15|         19|         23|
-//  6|         10|         14|         18|         22|
-//  5|          9|         13|         17|         21|
-//  4| 5  6  7  8| 9 10 11 12|13 14 15 16|17 18 19 20|
-// --+-----------+-----------+-----------+-----------+
-//  3|          7|         11|         15|         19|
-//  2|          6|         10|         14|         18|
-//  1|          5|          9|         13|         17|
-//  0| 1  2  3  4| 5  6  7  8| 9 10 11 12|13 14 15 16|
-// --+-----------+-----------+-----------+-----------+
-
-// Array to record the position of the top sample to pass to the prediction
-// functions in dsp.c.
-static const uint8_t VP8TopLeftI4[16] = {
-  17, 21, 25, 29,
-  13, 17, 21, 25,
-  9,  13, 17, 21,
-  5,   9, 13, 17
-};
-
-void VP8IteratorStartI4(VP8EncIterator* const it) {
-  const VP8Encoder* const enc = it->enc_;
-  int i;
-
-  it->i4_ = 0;    // first 4x4 sub-block
-  it->i4_top_ = it->i4_boundary_ + VP8TopLeftI4[0];
-
-  // Import the boundary samples
-  for (i = 0; i < 17; ++i) {    // left
-    it->i4_boundary_[i] = it->y_left_[15 - i];
-  }
-  for (i = 0; i < 16; ++i) {    // top
-    it->i4_boundary_[17 + i] = it->y_top_[i];
-  }
-  // top-right samples have a special case on the far right of the picture
-  if (it->x_ < enc->mb_w_ - 1) {
-    for (i = 16; i < 16 + 4; ++i) {
-      it->i4_boundary_[17 + i] = it->y_top_[i];
-    }
-  } else {    // else, replicate the last valid pixel four times
-    for (i = 16; i < 16 + 4; ++i) {
-      it->i4_boundary_[17 + i] = it->i4_boundary_[17 + 15];
-    }
-  }
-  VP8IteratorNzToBytes(it);  // import the non-zero context
-}
-
-int VP8IteratorRotateI4(VP8EncIterator* const it,
-                        const uint8_t* const yuv_out) {
-  const uint8_t* const blk = yuv_out + VP8Scan[it->i4_];
-  uint8_t* const top = it->i4_top_;
-  int i;
-
-  // Update the cache with 7 fresh samples
-  for (i = 0; i <= 3; ++i) {
-    top[-4 + i] = blk[i + 3 * BPS];   // store future top samples
-  }
-  if ((it->i4_ & 3) != 3) {  // if not on the right sub-blocks #3, #7, #11, #15
-    for (i = 0; i <= 2; ++i) {        // store future left samples
-      top[i] = blk[3 + (2 - i) * BPS];
-    }
-  } else {  // else replicate top-right samples, as says the specs.
-    for (i = 0; i <= 3; ++i) {
-      top[i] = top[i + 4];
-    }
-  }
-  // move pointers to next sub-block
-  ++it->i4_;
-  if (it->i4_ == 16) {    // we're done
-    return 0;
-  }
-
-  it->i4_top_ = it->i4_boundary_ + VP8TopLeftI4[it->i4_];
-  return 1;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/near_lossless_enc.c b/ios/Pods/libwebp/src/enc/near_lossless_enc.c
deleted file mode 100644
index 5517a7e..0000000
--- a/ios/Pods/libwebp/src/enc/near_lossless_enc.c
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Near-lossless image preprocessing adjusts pixel values to help
-// compressibility with a guarantee of maximum deviation between original and
-// resulting pixel values.
-//
-// Author: Jyrki Alakuijala (jyrki@google.com)
-// Converted to C by Aleksander Kramarz (akramarz@google.com)
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "src/dsp/lossless_common.h"
-#include "src/utils/utils.h"
-#include "src/enc/vp8li_enc.h"
-
-#if (WEBP_NEAR_LOSSLESS == 1)
-
-#define MIN_DIM_FOR_NEAR_LOSSLESS 64
-#define MAX_LIMIT_BITS             5
-
-// Quantizes the value up or down to a multiple of 1<<bits (or to 255),
-// choosing the closer one, resolving ties using bankers' rounding.
-static uint32_t FindClosestDiscretized(uint32_t a, int bits) {
-  const uint32_t mask = (1u << bits) - 1;
-  const uint32_t biased = a + (mask >> 1) + ((a >> bits) & 1);
-  assert(bits > 0);
-  if (biased > 0xff) return 0xff;
-  return biased & ~mask;
-}
-
-// Applies FindClosestDiscretized to all channels of pixel.
-static uint32_t ClosestDiscretizedArgb(uint32_t a, int bits) {
-  return
-      (FindClosestDiscretized(a >> 24, bits) << 24) |
-      (FindClosestDiscretized((a >> 16) & 0xff, bits) << 16) |
-      (FindClosestDiscretized((a >> 8) & 0xff, bits) << 8) |
-      (FindClosestDiscretized(a & 0xff, bits));
-}
-
-// Checks if distance between corresponding channel values of pixels a and b
-// is within the given limit.
-static int IsNear(uint32_t a, uint32_t b, int limit) {
-  int k;
-  for (k = 0; k < 4; ++k) {
-    const int delta =
-        (int)((a >> (k * 8)) & 0xff) - (int)((b >> (k * 8)) & 0xff);
-    if (delta >= limit || delta <= -limit) {
-      return 0;
-    }
-  }
-  return 1;
-}
-
-static int IsSmooth(const uint32_t* const prev_row,
-                    const uint32_t* const curr_row,
-                    const uint32_t* const next_row,
-                    int ix, int limit) {
-  // Check that all pixels in 4-connected neighborhood are smooth.
-  return (IsNear(curr_row[ix], curr_row[ix - 1], limit) &&
-          IsNear(curr_row[ix], curr_row[ix + 1], limit) &&
-          IsNear(curr_row[ix], prev_row[ix], limit) &&
-          IsNear(curr_row[ix], next_row[ix], limit));
-}
-
-// Adjusts pixel values of image with given maximum error.
-static void NearLossless(int xsize, int ysize, const uint32_t* argb_src,
-                         int stride, int limit_bits, uint32_t* copy_buffer,
-                         uint32_t* argb_dst) {
-  int x, y;
-  const int limit = 1 << limit_bits;
-  uint32_t* prev_row = copy_buffer;
-  uint32_t* curr_row = prev_row + xsize;
-  uint32_t* next_row = curr_row + xsize;
-  memcpy(curr_row, argb_src, xsize * sizeof(argb_src[0]));
-  memcpy(next_row, argb_src + stride, xsize * sizeof(argb_src[0]));
-
-  for (y = 0; y < ysize; ++y, argb_src += stride, argb_dst += xsize) {
-    if (y == 0 || y == ysize - 1) {
-      memcpy(argb_dst, argb_src, xsize * sizeof(argb_src[0]));
-    } else {
-      memcpy(next_row, argb_src + stride, xsize * sizeof(argb_src[0]));
-      argb_dst[0] = argb_src[0];
-      argb_dst[xsize - 1] = argb_src[xsize - 1];
-      for (x = 1; x < xsize - 1; ++x) {
-        if (IsSmooth(prev_row, curr_row, next_row, x, limit)) {
-          argb_dst[x] = curr_row[x];
-        } else {
-          argb_dst[x] = ClosestDiscretizedArgb(curr_row[x], limit_bits);
-        }
-      }
-    }
-    {
-      // Three-way swap.
-      uint32_t* const temp = prev_row;
-      prev_row = curr_row;
-      curr_row = next_row;
-      next_row = temp;
-    }
-  }
-}
-
-int VP8ApplyNearLossless(const WebPPicture* const picture, int quality,
-                         uint32_t* const argb_dst) {
-  int i;
-  const int xsize = picture->width;
-  const int ysize = picture->height;
-  const int stride = picture->argb_stride;
-  uint32_t* const copy_buffer =
-      (uint32_t*)WebPSafeMalloc(xsize * 3, sizeof(*copy_buffer));
-  const int limit_bits = VP8LNearLosslessBits(quality);
-  assert(argb_dst != NULL);
-  assert(limit_bits > 0);
-  assert(limit_bits <= MAX_LIMIT_BITS);
-  if (copy_buffer == NULL) {
-    return 0;
-  }
-  // For small icon images, don't attempt to apply near-lossless compression.
-  if ((xsize < MIN_DIM_FOR_NEAR_LOSSLESS &&
-       ysize < MIN_DIM_FOR_NEAR_LOSSLESS) ||
-      ysize < 3) {
-    for (i = 0; i < ysize; ++i) {
-      memcpy(argb_dst + i * xsize, picture->argb + i * picture->argb_stride,
-             xsize * sizeof(*argb_dst));
-    }
-    WebPSafeFree(copy_buffer);
-    return 1;
-  }
-
-  NearLossless(xsize, ysize, picture->argb, stride, limit_bits, copy_buffer,
-               argb_dst);
-  for (i = limit_bits - 1; i != 0; --i) {
-    NearLossless(xsize, ysize, argb_dst, xsize, i, copy_buffer, argb_dst);
-  }
-  WebPSafeFree(copy_buffer);
-  return 1;
-}
-#else  // (WEBP_NEAR_LOSSLESS == 1)
-
-// Define a stub to suppress compiler warnings.
-extern void VP8LNearLosslessStub(void);
-void VP8LNearLosslessStub(void) {}
-
-#endif  // (WEBP_NEAR_LOSSLESS == 1)
diff --git a/ios/Pods/libwebp/src/enc/picture_csp_enc.c b/ios/Pods/libwebp/src/enc/picture_csp_enc.c
deleted file mode 100644
index 02d9df7..0000000
--- a/ios/Pods/libwebp/src/enc/picture_csp_enc.c
+++ /dev/null
@@ -1,1206 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// WebPPicture utils for colorspace conversion
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include "src/enc/vp8i_enc.h"
-#include "src/utils/random_utils.h"
-#include "src/utils/utils.h"
-#include "src/dsp/dsp.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/yuv.h"
-
-// Uncomment to disable gamma-compression during RGB->U/V averaging
-#define USE_GAMMA_COMPRESSION
-
-// If defined, use table to compute x / alpha.
-#define USE_INVERSE_ALPHA_TABLE
-
-#ifdef WORDS_BIGENDIAN
-#define ALPHA_OFFSET 0   // uint32_t 0xff000000 is 0xff,00,00,00 in memory
-#else
-#define ALPHA_OFFSET 3   // uint32_t 0xff000000 is 0x00,00,00,ff in memory
-#endif
-
-//------------------------------------------------------------------------------
-// Detection of non-trivial transparency
-
-// Returns true if alpha[] has non-0xff values.
-static int CheckNonOpaque(const uint8_t* alpha, int width, int height,
-                          int x_step, int y_step) {
-  if (alpha == NULL) return 0;
-  WebPInitAlphaProcessing();
-  if (x_step == 1) {
-    for (; height-- > 0; alpha += y_step) {
-      if (WebPHasAlpha8b(alpha, width)) return 1;
-    }
-  } else {
-    for (; height-- > 0; alpha += y_step) {
-      if (WebPHasAlpha32b(alpha, width)) return 1;
-    }
-  }
-  return 0;
-}
-
-// Checking for the presence of non-opaque alpha.
-int WebPPictureHasTransparency(const WebPPicture* picture) {
-  if (picture == NULL) return 0;
-  if (!picture->use_argb) {
-    return CheckNonOpaque(picture->a, picture->width, picture->height,
-                          1, picture->a_stride);
-  } else {
-    const int alpha_offset = ALPHA_OFFSET;
-    return CheckNonOpaque((const uint8_t*)picture->argb + alpha_offset,
-                          picture->width, picture->height,
-                          4, picture->argb_stride * sizeof(*picture->argb));
-  }
-  return 0;
-}
-
-//------------------------------------------------------------------------------
-// Code for gamma correction
-
-#if defined(USE_GAMMA_COMPRESSION)
-
-// gamma-compensates loss of resolution during chroma subsampling
-#define kGamma 0.80      // for now we use a different gamma value than kGammaF
-#define kGammaFix 12     // fixed-point precision for linear values
-#define kGammaScale ((1 << kGammaFix) - 1)
-#define kGammaTabFix 7   // fixed-point fractional bits precision
-#define kGammaTabScale (1 << kGammaTabFix)
-#define kGammaTabRounder (kGammaTabScale >> 1)
-#define kGammaTabSize (1 << (kGammaFix - kGammaTabFix))
-
-static int kLinearToGammaTab[kGammaTabSize + 1];
-static uint16_t kGammaToLinearTab[256];
-static volatile int kGammaTablesOk = 0;
-
-static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTables(void) {
-  if (!kGammaTablesOk) {
-    int v;
-    const double scale = (double)(1 << kGammaTabFix) / kGammaScale;
-    const double norm = 1. / 255.;
-    for (v = 0; v <= 255; ++v) {
-      kGammaToLinearTab[v] =
-          (uint16_t)(pow(norm * v, kGamma) * kGammaScale + .5);
-    }
-    for (v = 0; v <= kGammaTabSize; ++v) {
-      kLinearToGammaTab[v] = (int)(255. * pow(scale * v, 1. / kGamma) + .5);
-    }
-    kGammaTablesOk = 1;
-  }
-}
-
-static WEBP_INLINE uint32_t GammaToLinear(uint8_t v) {
-  return kGammaToLinearTab[v];
-}
-
-static WEBP_INLINE int Interpolate(int v) {
-  const int tab_pos = v >> (kGammaTabFix + 2);    // integer part
-  const int x = v & ((kGammaTabScale << 2) - 1);  // fractional part
-  const int v0 = kLinearToGammaTab[tab_pos];
-  const int v1 = kLinearToGammaTab[tab_pos + 1];
-  const int y = v1 * x + v0 * ((kGammaTabScale << 2) - x);   // interpolate
-  assert(tab_pos + 1 < kGammaTabSize + 1);
-  return y;
-}
-
-// Convert a linear value 'v' to YUV_FIX+2 fixed-point precision
-// U/V value, suitable for RGBToU/V calls.
-static WEBP_INLINE int LinearToGamma(uint32_t base_value, int shift) {
-  const int y = Interpolate(base_value << shift);   // final uplifted value
-  return (y + kGammaTabRounder) >> kGammaTabFix;    // descale
-}
-
-#else
-
-static void InitGammaTables(void) {}
-static WEBP_INLINE uint32_t GammaToLinear(uint8_t v) { return v; }
-static WEBP_INLINE int LinearToGamma(uint32_t base_value, int shift) {
-  return (int)(base_value << shift);
-}
-
-#endif    // USE_GAMMA_COMPRESSION
-
-//------------------------------------------------------------------------------
-// RGB -> YUV conversion
-
-static int RGBToY(int r, int g, int b, VP8Random* const rg) {
-  return (rg == NULL) ? VP8RGBToY(r, g, b, YUV_HALF)
-                      : VP8RGBToY(r, g, b, VP8RandomBits(rg, YUV_FIX));
-}
-
-static int RGBToU(int r, int g, int b, VP8Random* const rg) {
-  return (rg == NULL) ? VP8RGBToU(r, g, b, YUV_HALF << 2)
-                      : VP8RGBToU(r, g, b, VP8RandomBits(rg, YUV_FIX + 2));
-}
-
-static int RGBToV(int r, int g, int b, VP8Random* const rg) {
-  return (rg == NULL) ? VP8RGBToV(r, g, b, YUV_HALF << 2)
-                      : VP8RGBToV(r, g, b, VP8RandomBits(rg, YUV_FIX + 2));
-}
-
-//------------------------------------------------------------------------------
-// Sharp RGB->YUV conversion
-
-static const int kNumIterations = 4;
-static const int kMinDimensionIterativeConversion = 4;
-
-// We could use SFIX=0 and only uint8_t for fixed_y_t, but it produces some
-// banding sometimes. Better use extra precision.
-#define SFIX 2                // fixed-point precision of RGB and Y/W
-typedef int16_t fixed_t;      // signed type with extra SFIX precision for UV
-typedef uint16_t fixed_y_t;   // unsigned type with extra SFIX precision for W
-
-#define SHALF (1 << SFIX >> 1)
-#define MAX_Y_T ((256 << SFIX) - 1)
-#define SROUNDER (1 << (YUV_FIX + SFIX - 1))
-
-#if defined(USE_GAMMA_COMPRESSION)
-
-// We use tables of different size and precision for the Rec709 / BT2020
-// transfer function.
-#define kGammaF (1./0.45)
-static uint32_t kLinearToGammaTabS[kGammaTabSize + 2];
-#define GAMMA_TO_LINEAR_BITS 14
-static uint32_t kGammaToLinearTabS[MAX_Y_T + 1];   // size scales with Y_FIX
-static volatile int kGammaTablesSOk = 0;
-
-static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTablesS(void) {
-  assert(2 * GAMMA_TO_LINEAR_BITS < 32);  // we use uint32_t intermediate values
-  if (!kGammaTablesSOk) {
-    int v;
-    const double norm = 1. / MAX_Y_T;
-    const double scale = 1. / kGammaTabSize;
-    const double a = 0.09929682680944;
-    const double thresh = 0.018053968510807;
-    const double final_scale = 1 << GAMMA_TO_LINEAR_BITS;
-    for (v = 0; v <= MAX_Y_T; ++v) {
-      const double g = norm * v;
-      double value;
-      if (g <= thresh * 4.5) {
-        value = g / 4.5;
-      } else {
-        const double a_rec = 1. / (1. + a);
-        value = pow(a_rec * (g + a), kGammaF);
-      }
-      kGammaToLinearTabS[v] = (uint32_t)(value * final_scale + .5);
-    }
-    for (v = 0; v <= kGammaTabSize; ++v) {
-      const double g = scale * v;
-      double value;
-      if (g <= thresh) {
-        value = 4.5 * g;
-      } else {
-        value = (1. + a) * pow(g, 1. / kGammaF) - a;
-      }
-      // we already incorporate the 1/2 rounding constant here
-      kLinearToGammaTabS[v] =
-          (uint32_t)(MAX_Y_T * value) + (1 << GAMMA_TO_LINEAR_BITS >> 1);
-    }
-    // to prevent small rounding errors to cause read-overflow:
-    kLinearToGammaTabS[kGammaTabSize + 1] = kLinearToGammaTabS[kGammaTabSize];
-    kGammaTablesSOk = 1;
-  }
-}
-
-// return value has a fixed-point precision of GAMMA_TO_LINEAR_BITS
-static WEBP_INLINE uint32_t GammaToLinearS(int v) {
-  return kGammaToLinearTabS[v];
-}
-
-static WEBP_INLINE uint32_t LinearToGammaS(uint32_t value) {
-  // 'value' is in GAMMA_TO_LINEAR_BITS fractional precision
-  const uint32_t v = value * kGammaTabSize;
-  const uint32_t tab_pos = v >> GAMMA_TO_LINEAR_BITS;
-  // fractional part, in GAMMA_TO_LINEAR_BITS fixed-point precision
-  const uint32_t x = v - (tab_pos << GAMMA_TO_LINEAR_BITS);  // fractional part
-  // v0 / v1 are in GAMMA_TO_LINEAR_BITS fixed-point precision (range [0..1])
-  const uint32_t v0 = kLinearToGammaTabS[tab_pos + 0];
-  const uint32_t v1 = kLinearToGammaTabS[tab_pos + 1];
-  // Final interpolation. Note that rounding is already included.
-  const uint32_t v2 = (v1 - v0) * x;    // note: v1 >= v0.
-  const uint32_t result = v0 + (v2 >> GAMMA_TO_LINEAR_BITS);
-  return result;
-}
-
-#else
-
-static void InitGammaTablesS(void) {}
-static WEBP_INLINE uint32_t GammaToLinearS(int v) {
-  return (v << GAMMA_TO_LINEAR_BITS) / MAX_Y_T;
-}
-static WEBP_INLINE uint32_t LinearToGammaS(uint32_t value) {
-  return (MAX_Y_T * value) >> GAMMA_TO_LINEAR_BITS;
-}
-
-#endif    // USE_GAMMA_COMPRESSION
-
-//------------------------------------------------------------------------------
-
-static uint8_t clip_8b(fixed_t v) {
-  return (!(v & ~0xff)) ? (uint8_t)v : (v < 0) ? 0u : 255u;
-}
-
-static fixed_y_t clip_y(int y) {
-  return (!(y & ~MAX_Y_T)) ? (fixed_y_t)y : (y < 0) ? 0 : MAX_Y_T;
-}
-
-//------------------------------------------------------------------------------
-
-static int RGBToGray(int r, int g, int b) {
-  const int luma = 13933 * r + 46871 * g + 4732 * b + YUV_HALF;
-  return (luma >> YUV_FIX);
-}
-
-static uint32_t ScaleDown(int a, int b, int c, int d) {
-  const uint32_t A = GammaToLinearS(a);
-  const uint32_t B = GammaToLinearS(b);
-  const uint32_t C = GammaToLinearS(c);
-  const uint32_t D = GammaToLinearS(d);
-  return LinearToGammaS((A + B + C + D + 2) >> 2);
-}
-
-static WEBP_INLINE void UpdateW(const fixed_y_t* src, fixed_y_t* dst, int w) {
-  int i;
-  for (i = 0; i < w; ++i) {
-    const uint32_t R = GammaToLinearS(src[0 * w + i]);
-    const uint32_t G = GammaToLinearS(src[1 * w + i]);
-    const uint32_t B = GammaToLinearS(src[2 * w + i]);
-    const uint32_t Y = RGBToGray(R, G, B);
-    dst[i] = (fixed_y_t)LinearToGammaS(Y);
-  }
-}
-
-static void UpdateChroma(const fixed_y_t* src1, const fixed_y_t* src2,
-                         fixed_t* dst, int uv_w) {
-  int i;
-  for (i = 0; i < uv_w; ++i) {
-    const int r = ScaleDown(src1[0 * uv_w + 0], src1[0 * uv_w + 1],
-                            src2[0 * uv_w + 0], src2[0 * uv_w + 1]);
-    const int g = ScaleDown(src1[2 * uv_w + 0], src1[2 * uv_w + 1],
-                            src2[2 * uv_w + 0], src2[2 * uv_w + 1]);
-    const int b = ScaleDown(src1[4 * uv_w + 0], src1[4 * uv_w + 1],
-                            src2[4 * uv_w + 0], src2[4 * uv_w + 1]);
-    const int W = RGBToGray(r, g, b);
-    dst[0 * uv_w] = (fixed_t)(r - W);
-    dst[1 * uv_w] = (fixed_t)(g - W);
-    dst[2 * uv_w] = (fixed_t)(b - W);
-    dst  += 1;
-    src1 += 2;
-    src2 += 2;
-  }
-}
-
-static void StoreGray(const fixed_y_t* rgb, fixed_y_t* y, int w) {
-  int i;
-  for (i = 0; i < w; ++i) {
-    y[i] = RGBToGray(rgb[0 * w + i], rgb[1 * w + i], rgb[2 * w + i]);
-  }
-}
-
-//------------------------------------------------------------------------------
-
-static WEBP_INLINE fixed_y_t Filter2(int A, int B, int W0) {
-  const int v0 = (A * 3 + B + 2) >> 2;
-  return clip_y(v0 + W0);
-}
-
-//------------------------------------------------------------------------------
-
-static WEBP_INLINE fixed_y_t UpLift(uint8_t a) {  // 8bit -> SFIX
-  return ((fixed_y_t)a << SFIX) | SHALF;
-}
-
-static void ImportOneRow(const uint8_t* const r_ptr,
-                         const uint8_t* const g_ptr,
-                         const uint8_t* const b_ptr,
-                         int step,
-                         int pic_width,
-                         fixed_y_t* const dst) {
-  int i;
-  const int w = (pic_width + 1) & ~1;
-  for (i = 0; i < pic_width; ++i) {
-    const int off = i * step;
-    dst[i + 0 * w] = UpLift(r_ptr[off]);
-    dst[i + 1 * w] = UpLift(g_ptr[off]);
-    dst[i + 2 * w] = UpLift(b_ptr[off]);
-  }
-  if (pic_width & 1) {  // replicate rightmost pixel
-    dst[pic_width + 0 * w] = dst[pic_width + 0 * w - 1];
-    dst[pic_width + 1 * w] = dst[pic_width + 1 * w - 1];
-    dst[pic_width + 2 * w] = dst[pic_width + 2 * w - 1];
-  }
-}
-
-static void InterpolateTwoRows(const fixed_y_t* const best_y,
-                               const fixed_t* prev_uv,
-                               const fixed_t* cur_uv,
-                               const fixed_t* next_uv,
-                               int w,
-                               fixed_y_t* out1,
-                               fixed_y_t* out2) {
-  const int uv_w = w >> 1;
-  const int len = (w - 1) >> 1;   // length to filter
-  int k = 3;
-  while (k-- > 0) {   // process each R/G/B segments in turn
-    // special boundary case for i==0
-    out1[0] = Filter2(cur_uv[0], prev_uv[0], best_y[0]);
-    out2[0] = Filter2(cur_uv[0], next_uv[0], best_y[w]);
-
-    WebPSharpYUVFilterRow(cur_uv, prev_uv, len, best_y + 0 + 1, out1 + 1);
-    WebPSharpYUVFilterRow(cur_uv, next_uv, len, best_y + w + 1, out2 + 1);
-
-    // special boundary case for i == w - 1 when w is even
-    if (!(w & 1)) {
-      out1[w - 1] = Filter2(cur_uv[uv_w - 1], prev_uv[uv_w - 1],
-                            best_y[w - 1 + 0]);
-      out2[w - 1] = Filter2(cur_uv[uv_w - 1], next_uv[uv_w - 1],
-                            best_y[w - 1 + w]);
-    }
-    out1 += w;
-    out2 += w;
-    prev_uv += uv_w;
-    cur_uv  += uv_w;
-    next_uv += uv_w;
-  }
-}
-
-static WEBP_INLINE uint8_t ConvertRGBToY(int r, int g, int b) {
-  const int luma = 16839 * r + 33059 * g + 6420 * b + SROUNDER;
-  return clip_8b(16 + (luma >> (YUV_FIX + SFIX)));
-}
-
-static WEBP_INLINE uint8_t ConvertRGBToU(int r, int g, int b) {
-  const int u =  -9719 * r - 19081 * g + 28800 * b + SROUNDER;
-  return clip_8b(128 + (u >> (YUV_FIX + SFIX)));
-}
-
-static WEBP_INLINE uint8_t ConvertRGBToV(int r, int g, int b) {
-  const int v = +28800 * r - 24116 * g -  4684 * b + SROUNDER;
-  return clip_8b(128 + (v >> (YUV_FIX + SFIX)));
-}
-
-static int ConvertWRGBToYUV(const fixed_y_t* best_y, const fixed_t* best_uv,
-                            WebPPicture* const picture) {
-  int i, j;
-  uint8_t* dst_y = picture->y;
-  uint8_t* dst_u = picture->u;
-  uint8_t* dst_v = picture->v;
-  const fixed_t* const best_uv_base = best_uv;
-  const int w = (picture->width + 1) & ~1;
-  const int h = (picture->height + 1) & ~1;
-  const int uv_w = w >> 1;
-  const int uv_h = h >> 1;
-  for (best_uv = best_uv_base, j = 0; j < picture->height; ++j) {
-    for (i = 0; i < picture->width; ++i) {
-      const int off = (i >> 1);
-      const int W = best_y[i];
-      const int r = best_uv[off + 0 * uv_w] + W;
-      const int g = best_uv[off + 1 * uv_w] + W;
-      const int b = best_uv[off + 2 * uv_w] + W;
-      dst_y[i] = ConvertRGBToY(r, g, b);
-    }
-    best_y += w;
-    best_uv += (j & 1) * 3 * uv_w;
-    dst_y += picture->y_stride;
-  }
-  for (best_uv = best_uv_base, j = 0; j < uv_h; ++j) {
-    for (i = 0; i < uv_w; ++i) {
-      const int off = i;
-      const int r = best_uv[off + 0 * uv_w];
-      const int g = best_uv[off + 1 * uv_w];
-      const int b = best_uv[off + 2 * uv_w];
-      dst_u[i] = ConvertRGBToU(r, g, b);
-      dst_v[i] = ConvertRGBToV(r, g, b);
-    }
-    best_uv += 3 * uv_w;
-    dst_u += picture->uv_stride;
-    dst_v += picture->uv_stride;
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-// Main function
-
-#define SAFE_ALLOC(W, H, T) ((T*)WebPSafeMalloc((W) * (H), sizeof(T)))
-
-static int PreprocessARGB(const uint8_t* r_ptr,
-                          const uint8_t* g_ptr,
-                          const uint8_t* b_ptr,
-                          int step, int rgb_stride,
-                          WebPPicture* const picture) {
-  // we expand the right/bottom border if needed
-  const int w = (picture->width + 1) & ~1;
-  const int h = (picture->height + 1) & ~1;
-  const int uv_w = w >> 1;
-  const int uv_h = h >> 1;
-  uint64_t prev_diff_y_sum = ~0;
-  int j, iter;
-
-  // TODO(skal): allocate one big memory chunk. But for now, it's easier
-  // for valgrind debugging to have several chunks.
-  fixed_y_t* const tmp_buffer = SAFE_ALLOC(w * 3, 2, fixed_y_t);   // scratch
-  fixed_y_t* const best_y_base = SAFE_ALLOC(w, h, fixed_y_t);
-  fixed_y_t* const target_y_base = SAFE_ALLOC(w, h, fixed_y_t);
-  fixed_y_t* const best_rgb_y = SAFE_ALLOC(w, 2, fixed_y_t);
-  fixed_t* const best_uv_base = SAFE_ALLOC(uv_w * 3, uv_h, fixed_t);
-  fixed_t* const target_uv_base = SAFE_ALLOC(uv_w * 3, uv_h, fixed_t);
-  fixed_t* const best_rgb_uv = SAFE_ALLOC(uv_w * 3, 1, fixed_t);
-  fixed_y_t* best_y = best_y_base;
-  fixed_y_t* target_y = target_y_base;
-  fixed_t* best_uv = best_uv_base;
-  fixed_t* target_uv = target_uv_base;
-  const uint64_t diff_y_threshold = (uint64_t)(3.0 * w * h);
-  int ok;
-
-  if (best_y_base == NULL || best_uv_base == NULL ||
-      target_y_base == NULL || target_uv_base == NULL ||
-      best_rgb_y == NULL || best_rgb_uv == NULL ||
-      tmp_buffer == NULL) {
-    ok = WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY);
-    goto End;
-  }
-  assert(picture->width >= kMinDimensionIterativeConversion);
-  assert(picture->height >= kMinDimensionIterativeConversion);
-
-  WebPInitConvertARGBToYUV();
-
-  // Import RGB samples to W/RGB representation.
-  for (j = 0; j < picture->height; j += 2) {
-    const int is_last_row = (j == picture->height - 1);
-    fixed_y_t* const src1 = tmp_buffer + 0 * w;
-    fixed_y_t* const src2 = tmp_buffer + 3 * w;
-
-    // prepare two rows of input
-    ImportOneRow(r_ptr, g_ptr, b_ptr, step, picture->width, src1);
-    if (!is_last_row) {
-      ImportOneRow(r_ptr + rgb_stride, g_ptr + rgb_stride, b_ptr + rgb_stride,
-                   step, picture->width, src2);
-    } else {
-      memcpy(src2, src1, 3 * w * sizeof(*src2));
-    }
-    StoreGray(src1, best_y + 0, w);
-    StoreGray(src2, best_y + w, w);
-
-    UpdateW(src1, target_y, w);
-    UpdateW(src2, target_y + w, w);
-    UpdateChroma(src1, src2, target_uv, uv_w);
-    memcpy(best_uv, target_uv, 3 * uv_w * sizeof(*best_uv));
-    best_y += 2 * w;
-    best_uv += 3 * uv_w;
-    target_y += 2 * w;
-    target_uv += 3 * uv_w;
-    r_ptr += 2 * rgb_stride;
-    g_ptr += 2 * rgb_stride;
-    b_ptr += 2 * rgb_stride;
-  }
-
-  // Iterate and resolve clipping conflicts.
-  for (iter = 0; iter < kNumIterations; ++iter) {
-    const fixed_t* cur_uv = best_uv_base;
-    const fixed_t* prev_uv = best_uv_base;
-    uint64_t diff_y_sum = 0;
-
-    best_y = best_y_base;
-    best_uv = best_uv_base;
-    target_y = target_y_base;
-    target_uv = target_uv_base;
-    for (j = 0; j < h; j += 2) {
-      fixed_y_t* const src1 = tmp_buffer + 0 * w;
-      fixed_y_t* const src2 = tmp_buffer + 3 * w;
-      {
-        const fixed_t* const next_uv = cur_uv + ((j < h - 2) ? 3 * uv_w : 0);
-        InterpolateTwoRows(best_y, prev_uv, cur_uv, next_uv, w, src1, src2);
-        prev_uv = cur_uv;
-        cur_uv = next_uv;
-      }
-
-      UpdateW(src1, best_rgb_y + 0 * w, w);
-      UpdateW(src2, best_rgb_y + 1 * w, w);
-      UpdateChroma(src1, src2, best_rgb_uv, uv_w);
-
-      // update two rows of Y and one row of RGB
-      diff_y_sum += WebPSharpYUVUpdateY(target_y, best_rgb_y, best_y, 2 * w);
-      WebPSharpYUVUpdateRGB(target_uv, best_rgb_uv, best_uv, 3 * uv_w);
-
-      best_y += 2 * w;
-      best_uv += 3 * uv_w;
-      target_y += 2 * w;
-      target_uv += 3 * uv_w;
-    }
-    // test exit condition
-    if (iter > 0) {
-      if (diff_y_sum < diff_y_threshold) break;
-      if (diff_y_sum > prev_diff_y_sum) break;
-    }
-    prev_diff_y_sum = diff_y_sum;
-  }
-  // final reconstruction
-  ok = ConvertWRGBToYUV(best_y_base, best_uv_base, picture);
-
- End:
-  WebPSafeFree(best_y_base);
-  WebPSafeFree(best_uv_base);
-  WebPSafeFree(target_y_base);
-  WebPSafeFree(target_uv_base);
-  WebPSafeFree(best_rgb_y);
-  WebPSafeFree(best_rgb_uv);
-  WebPSafeFree(tmp_buffer);
-  return ok;
-}
-#undef SAFE_ALLOC
-
-//------------------------------------------------------------------------------
-// "Fast" regular RGB->YUV
-
-#define SUM4(ptr, step) LinearToGamma(                     \
-    GammaToLinear((ptr)[0]) +                              \
-    GammaToLinear((ptr)[(step)]) +                         \
-    GammaToLinear((ptr)[rgb_stride]) +                     \
-    GammaToLinear((ptr)[rgb_stride + (step)]), 0)          \
-
-#define SUM2(ptr) \
-    LinearToGamma(GammaToLinear((ptr)[0]) + GammaToLinear((ptr)[rgb_stride]), 1)
-
-#define SUM2ALPHA(ptr) ((ptr)[0] + (ptr)[rgb_stride])
-#define SUM4ALPHA(ptr) (SUM2ALPHA(ptr) + SUM2ALPHA((ptr) + 4))
-
-#if defined(USE_INVERSE_ALPHA_TABLE)
-
-static const int kAlphaFix = 19;
-// Following table is (1 << kAlphaFix) / a. The (v * kInvAlpha[a]) >> kAlphaFix
-// formula is then equal to v / a in most (99.6%) cases. Note that this table
-// and constant are adjusted very tightly to fit 32b arithmetic.
-// In particular, they use the fact that the operands for 'v / a' are actually
-// derived as v = (a0.p0 + a1.p1 + a2.p2 + a3.p3) and a = a0 + a1 + a2 + a3
-// with ai in [0..255] and pi in [0..1<<kGammaFix). The constraint to avoid
-// overflow is: kGammaFix + kAlphaFix <= 31.
-static const uint32_t kInvAlpha[4 * 0xff + 1] = {
-  0,  /* alpha = 0 */
-  524288, 262144, 174762, 131072, 104857, 87381, 74898, 65536,
-  58254, 52428, 47662, 43690, 40329, 37449, 34952, 32768,
-  30840, 29127, 27594, 26214, 24966, 23831, 22795, 21845,
-  20971, 20164, 19418, 18724, 18078, 17476, 16912, 16384,
-  15887, 15420, 14979, 14563, 14169, 13797, 13443, 13107,
-  12787, 12483, 12192, 11915, 11650, 11397, 11155, 10922,
-  10699, 10485, 10280, 10082, 9892, 9709, 9532, 9362,
-  9198, 9039, 8886, 8738, 8594, 8456, 8322, 8192,
-  8065, 7943, 7825, 7710, 7598, 7489, 7384, 7281,
-  7182, 7084, 6990, 6898, 6808, 6721, 6636, 6553,
-  6472, 6393, 6316, 6241, 6168, 6096, 6026, 5957,
-  5890, 5825, 5761, 5698, 5637, 5577, 5518, 5461,
-  5405, 5349, 5295, 5242, 5190, 5140, 5090, 5041,
-  4993, 4946, 4899, 4854, 4809, 4766, 4723, 4681,
-  4639, 4599, 4559, 4519, 4481, 4443, 4405, 4369,
-  4332, 4297, 4262, 4228, 4194, 4161, 4128, 4096,
-  4064, 4032, 4002, 3971, 3942, 3912, 3883, 3855,
-  3826, 3799, 3771, 3744, 3718, 3692, 3666, 3640,
-  3615, 3591, 3566, 3542, 3518, 3495, 3472, 3449,
-  3426, 3404, 3382, 3360, 3339, 3318, 3297, 3276,
-  3256, 3236, 3216, 3196, 3177, 3158, 3139, 3120,
-  3102, 3084, 3066, 3048, 3030, 3013, 2995, 2978,
-  2962, 2945, 2928, 2912, 2896, 2880, 2864, 2849,
-  2833, 2818, 2803, 2788, 2774, 2759, 2744, 2730,
-  2716, 2702, 2688, 2674, 2661, 2647, 2634, 2621,
-  2608, 2595, 2582, 2570, 2557, 2545, 2532, 2520,
-  2508, 2496, 2484, 2473, 2461, 2449, 2438, 2427,
-  2416, 2404, 2394, 2383, 2372, 2361, 2351, 2340,
-  2330, 2319, 2309, 2299, 2289, 2279, 2269, 2259,
-  2250, 2240, 2231, 2221, 2212, 2202, 2193, 2184,
-  2175, 2166, 2157, 2148, 2139, 2131, 2122, 2114,
-  2105, 2097, 2088, 2080, 2072, 2064, 2056, 2048,
-  2040, 2032, 2024, 2016, 2008, 2001, 1993, 1985,
-  1978, 1971, 1963, 1956, 1949, 1941, 1934, 1927,
-  1920, 1913, 1906, 1899, 1892, 1885, 1879, 1872,
-  1865, 1859, 1852, 1846, 1839, 1833, 1826, 1820,
-  1814, 1807, 1801, 1795, 1789, 1783, 1777, 1771,
-  1765, 1759, 1753, 1747, 1741, 1736, 1730, 1724,
-  1718, 1713, 1707, 1702, 1696, 1691, 1685, 1680,
-  1675, 1669, 1664, 1659, 1653, 1648, 1643, 1638,
-  1633, 1628, 1623, 1618, 1613, 1608, 1603, 1598,
-  1593, 1588, 1583, 1579, 1574, 1569, 1565, 1560,
-  1555, 1551, 1546, 1542, 1537, 1533, 1528, 1524,
-  1519, 1515, 1510, 1506, 1502, 1497, 1493, 1489,
-  1485, 1481, 1476, 1472, 1468, 1464, 1460, 1456,
-  1452, 1448, 1444, 1440, 1436, 1432, 1428, 1424,
-  1420, 1416, 1413, 1409, 1405, 1401, 1398, 1394,
-  1390, 1387, 1383, 1379, 1376, 1372, 1368, 1365,
-  1361, 1358, 1354, 1351, 1347, 1344, 1340, 1337,
-  1334, 1330, 1327, 1323, 1320, 1317, 1314, 1310,
-  1307, 1304, 1300, 1297, 1294, 1291, 1288, 1285,
-  1281, 1278, 1275, 1272, 1269, 1266, 1263, 1260,
-  1257, 1254, 1251, 1248, 1245, 1242, 1239, 1236,
-  1233, 1230, 1227, 1224, 1222, 1219, 1216, 1213,
-  1210, 1208, 1205, 1202, 1199, 1197, 1194, 1191,
-  1188, 1186, 1183, 1180, 1178, 1175, 1172, 1170,
-  1167, 1165, 1162, 1159, 1157, 1154, 1152, 1149,
-  1147, 1144, 1142, 1139, 1137, 1134, 1132, 1129,
-  1127, 1125, 1122, 1120, 1117, 1115, 1113, 1110,
-  1108, 1106, 1103, 1101, 1099, 1096, 1094, 1092,
-  1089, 1087, 1085, 1083, 1081, 1078, 1076, 1074,
-  1072, 1069, 1067, 1065, 1063, 1061, 1059, 1057,
-  1054, 1052, 1050, 1048, 1046, 1044, 1042, 1040,
-  1038, 1036, 1034, 1032, 1030, 1028, 1026, 1024,
-  1022, 1020, 1018, 1016, 1014, 1012, 1010, 1008,
-  1006, 1004, 1002, 1000, 998, 996, 994, 992,
-  991, 989, 987, 985, 983, 981, 979, 978,
-  976, 974, 972, 970, 969, 967, 965, 963,
-  961, 960, 958, 956, 954, 953, 951, 949,
-  948, 946, 944, 942, 941, 939, 937, 936,
-  934, 932, 931, 929, 927, 926, 924, 923,
-  921, 919, 918, 916, 914, 913, 911, 910,
-  908, 907, 905, 903, 902, 900, 899, 897,
-  896, 894, 893, 891, 890, 888, 887, 885,
-  884, 882, 881, 879, 878, 876, 875, 873,
-  872, 870, 869, 868, 866, 865, 863, 862,
-  860, 859, 858, 856, 855, 853, 852, 851,
-  849, 848, 846, 845, 844, 842, 841, 840,
-  838, 837, 836, 834, 833, 832, 830, 829,
-  828, 826, 825, 824, 823, 821, 820, 819,
-  817, 816, 815, 814, 812, 811, 810, 809,
-  807, 806, 805, 804, 802, 801, 800, 799,
-  798, 796, 795, 794, 793, 791, 790, 789,
-  788, 787, 786, 784, 783, 782, 781, 780,
-  779, 777, 776, 775, 774, 773, 772, 771,
-  769, 768, 767, 766, 765, 764, 763, 762,
-  760, 759, 758, 757, 756, 755, 754, 753,
-  752, 751, 750, 748, 747, 746, 745, 744,
-  743, 742, 741, 740, 739, 738, 737, 736,
-  735, 734, 733, 732, 731, 730, 729, 728,
-  727, 726, 725, 724, 723, 722, 721, 720,
-  719, 718, 717, 716, 715, 714, 713, 712,
-  711, 710, 709, 708, 707, 706, 705, 704,
-  703, 702, 701, 700, 699, 699, 698, 697,
-  696, 695, 694, 693, 692, 691, 690, 689,
-  688, 688, 687, 686, 685, 684, 683, 682,
-  681, 680, 680, 679, 678, 677, 676, 675,
-  674, 673, 673, 672, 671, 670, 669, 668,
-  667, 667, 666, 665, 664, 663, 662, 661,
-  661, 660, 659, 658, 657, 657, 656, 655,
-  654, 653, 652, 652, 651, 650, 649, 648,
-  648, 647, 646, 645, 644, 644, 643, 642,
-  641, 640, 640, 639, 638, 637, 637, 636,
-  635, 634, 633, 633, 632, 631, 630, 630,
-  629, 628, 627, 627, 626, 625, 624, 624,
-  623, 622, 621, 621, 620, 619, 618, 618,
-  617, 616, 616, 615, 614, 613, 613, 612,
-  611, 611, 610, 609, 608, 608, 607, 606,
-  606, 605, 604, 604, 603, 602, 601, 601,
-  600, 599, 599, 598, 597, 597, 596, 595,
-  595, 594, 593, 593, 592, 591, 591, 590,
-  589, 589, 588, 587, 587, 586, 585, 585,
-  584, 583, 583, 582, 581, 581, 580, 579,
-  579, 578, 578, 577, 576, 576, 575, 574,
-  574, 573, 572, 572, 571, 571, 570, 569,
-  569, 568, 568, 567, 566, 566, 565, 564,
-  564, 563, 563, 562, 561, 561, 560, 560,
-  559, 558, 558, 557, 557, 556, 555, 555,
-  554, 554, 553, 553, 552, 551, 551, 550,
-  550, 549, 548, 548, 547, 547, 546, 546,
-  545, 544, 544, 543, 543, 542, 542, 541,
-  541, 540, 539, 539, 538, 538, 537, 537,
-  536, 536, 535, 534, 534, 533, 533, 532,
-  532, 531, 531, 530, 530, 529, 529, 528,
-  527, 527, 526, 526, 525, 525, 524, 524,
-  523, 523, 522, 522, 521, 521, 520, 520,
-  519, 519, 518, 518, 517, 517, 516, 516,
-  515, 515, 514, 514
-};
-
-// Note that LinearToGamma() expects the values to be premultiplied by 4,
-// so we incorporate this factor 4 inside the DIVIDE_BY_ALPHA macro directly.
-#define DIVIDE_BY_ALPHA(sum, a)  (((sum) * kInvAlpha[(a)]) >> (kAlphaFix - 2))
-
-#else
-
-#define DIVIDE_BY_ALPHA(sum, a) (4 * (sum) / (a))
-
-#endif  // USE_INVERSE_ALPHA_TABLE
-
-static WEBP_INLINE int LinearToGammaWeighted(const uint8_t* src,
-                                             const uint8_t* a_ptr,
-                                             uint32_t total_a, int step,
-                                             int rgb_stride) {
-  const uint32_t sum =
-      a_ptr[0] * GammaToLinear(src[0]) +
-      a_ptr[step] * GammaToLinear(src[step]) +
-      a_ptr[rgb_stride] * GammaToLinear(src[rgb_stride]) +
-      a_ptr[rgb_stride + step] * GammaToLinear(src[rgb_stride + step]);
-  assert(total_a > 0 && total_a <= 4 * 0xff);
-#if defined(USE_INVERSE_ALPHA_TABLE)
-  assert((uint64_t)sum * kInvAlpha[total_a] < ((uint64_t)1 << 32));
-#endif
-  return LinearToGamma(DIVIDE_BY_ALPHA(sum, total_a), 0);
-}
-
-static WEBP_INLINE void ConvertRowToY(const uint8_t* const r_ptr,
-                                      const uint8_t* const g_ptr,
-                                      const uint8_t* const b_ptr,
-                                      int step,
-                                      uint8_t* const dst_y,
-                                      int width,
-                                      VP8Random* const rg) {
-  int i, j;
-  for (i = 0, j = 0; i < width; i += 1, j += step) {
-    dst_y[i] = RGBToY(r_ptr[j], g_ptr[j], b_ptr[j], rg);
-  }
-}
-
-static WEBP_INLINE void AccumulateRGBA(const uint8_t* const r_ptr,
-                                       const uint8_t* const g_ptr,
-                                       const uint8_t* const b_ptr,
-                                       const uint8_t* const a_ptr,
-                                       int rgb_stride,
-                                       uint16_t* dst, int width) {
-  int i, j;
-  // we loop over 2x2 blocks and produce one R/G/B/A value for each.
-  for (i = 0, j = 0; i < (width >> 1); i += 1, j += 2 * 4, dst += 4) {
-    const uint32_t a = SUM4ALPHA(a_ptr + j);
-    int r, g, b;
-    if (a == 4 * 0xff || a == 0) {
-      r = SUM4(r_ptr + j, 4);
-      g = SUM4(g_ptr + j, 4);
-      b = SUM4(b_ptr + j, 4);
-    } else {
-      r = LinearToGammaWeighted(r_ptr + j, a_ptr + j, a, 4, rgb_stride);
-      g = LinearToGammaWeighted(g_ptr + j, a_ptr + j, a, 4, rgb_stride);
-      b = LinearToGammaWeighted(b_ptr + j, a_ptr + j, a, 4, rgb_stride);
-    }
-    dst[0] = r;
-    dst[1] = g;
-    dst[2] = b;
-    dst[3] = a;
-  }
-  if (width & 1) {
-    const uint32_t a = 2u * SUM2ALPHA(a_ptr + j);
-    int r, g, b;
-    if (a == 4 * 0xff || a == 0) {
-      r = SUM2(r_ptr + j);
-      g = SUM2(g_ptr + j);
-      b = SUM2(b_ptr + j);
-    } else {
-      r = LinearToGammaWeighted(r_ptr + j, a_ptr + j, a, 0, rgb_stride);
-      g = LinearToGammaWeighted(g_ptr + j, a_ptr + j, a, 0, rgb_stride);
-      b = LinearToGammaWeighted(b_ptr + j, a_ptr + j, a, 0, rgb_stride);
-    }
-    dst[0] = r;
-    dst[1] = g;
-    dst[2] = b;
-    dst[3] = a;
-  }
-}
-
-static WEBP_INLINE void AccumulateRGB(const uint8_t* const r_ptr,
-                                      const uint8_t* const g_ptr,
-                                      const uint8_t* const b_ptr,
-                                      int step, int rgb_stride,
-                                      uint16_t* dst, int width) {
-  int i, j;
-  for (i = 0, j = 0; i < (width >> 1); i += 1, j += 2 * step, dst += 4) {
-    dst[0] = SUM4(r_ptr + j, step);
-    dst[1] = SUM4(g_ptr + j, step);
-    dst[2] = SUM4(b_ptr + j, step);
-  }
-  if (width & 1) {
-    dst[0] = SUM2(r_ptr + j);
-    dst[1] = SUM2(g_ptr + j);
-    dst[2] = SUM2(b_ptr + j);
-  }
-}
-
-static WEBP_INLINE void ConvertRowsToUV(const uint16_t* rgb,
-                                        uint8_t* const dst_u,
-                                        uint8_t* const dst_v,
-                                        int width,
-                                        VP8Random* const rg) {
-  int i;
-  for (i = 0; i < width; i += 1, rgb += 4) {
-    const int r = rgb[0], g = rgb[1], b = rgb[2];
-    dst_u[i] = RGBToU(r, g, b, rg);
-    dst_v[i] = RGBToV(r, g, b, rg);
-  }
-}
-
-static int ImportYUVAFromRGBA(const uint8_t* r_ptr,
-                              const uint8_t* g_ptr,
-                              const uint8_t* b_ptr,
-                              const uint8_t* a_ptr,
-                              int step,         // bytes per pixel
-                              int rgb_stride,   // bytes per scanline
-                              float dithering,
-                              int use_iterative_conversion,
-                              WebPPicture* const picture) {
-  int y;
-  const int width = picture->width;
-  const int height = picture->height;
-  const int has_alpha = CheckNonOpaque(a_ptr, width, height, step, rgb_stride);
-  const int is_rgb = (r_ptr < b_ptr);  // otherwise it's bgr
-
-  picture->colorspace = has_alpha ? WEBP_YUV420A : WEBP_YUV420;
-  picture->use_argb = 0;
-
-  // disable smart conversion if source is too small (overkill).
-  if (width < kMinDimensionIterativeConversion ||
-      height < kMinDimensionIterativeConversion) {
-    use_iterative_conversion = 0;
-  }
-
-  if (!WebPPictureAllocYUVA(picture, width, height)) {
-    return 0;
-  }
-  if (has_alpha) {
-    assert(step == 4);
-#if defined(USE_GAMMA_COMPRESSION) && defined(USE_INVERSE_ALPHA_TABLE)
-    assert(kAlphaFix + kGammaFix <= 31);
-#endif
-  }
-
-  if (use_iterative_conversion) {
-    InitGammaTablesS();
-    if (!PreprocessARGB(r_ptr, g_ptr, b_ptr, step, rgb_stride, picture)) {
-      return 0;
-    }
-    if (has_alpha) {
-      WebPExtractAlpha(a_ptr, rgb_stride, width, height,
-                       picture->a, picture->a_stride);
-    }
-  } else {
-    const int uv_width = (width + 1) >> 1;
-    int use_dsp = (step == 3);  // use special function in this case
-    // temporary storage for accumulated R/G/B values during conversion to U/V
-    uint16_t* const tmp_rgb =
-        (uint16_t*)WebPSafeMalloc(4 * uv_width, sizeof(*tmp_rgb));
-    uint8_t* dst_y = picture->y;
-    uint8_t* dst_u = picture->u;
-    uint8_t* dst_v = picture->v;
-    uint8_t* dst_a = picture->a;
-
-    VP8Random base_rg;
-    VP8Random* rg = NULL;
-    if (dithering > 0.) {
-      VP8InitRandom(&base_rg, dithering);
-      rg = &base_rg;
-      use_dsp = 0;   // can't use dsp in this case
-    }
-    WebPInitConvertARGBToYUV();
-    InitGammaTables();
-
-    if (tmp_rgb == NULL) return 0;  // malloc error
-
-    // Downsample Y/U/V planes, two rows at a time
-    for (y = 0; y < (height >> 1); ++y) {
-      int rows_have_alpha = has_alpha;
-      if (use_dsp) {
-        if (is_rgb) {
-          WebPConvertRGB24ToY(r_ptr, dst_y, width);
-          WebPConvertRGB24ToY(r_ptr + rgb_stride,
-                              dst_y + picture->y_stride, width);
-        } else {
-          WebPConvertBGR24ToY(b_ptr, dst_y, width);
-          WebPConvertBGR24ToY(b_ptr + rgb_stride,
-                              dst_y + picture->y_stride, width);
-        }
-      } else {
-        ConvertRowToY(r_ptr, g_ptr, b_ptr, step, dst_y, width, rg);
-        ConvertRowToY(r_ptr + rgb_stride,
-                      g_ptr + rgb_stride,
-                      b_ptr + rgb_stride, step,
-                      dst_y + picture->y_stride, width, rg);
-      }
-      dst_y += 2 * picture->y_stride;
-      if (has_alpha) {
-        rows_have_alpha &= !WebPExtractAlpha(a_ptr, rgb_stride, width, 2,
-                                             dst_a, picture->a_stride);
-        dst_a += 2 * picture->a_stride;
-      }
-      // Collect averaged R/G/B(/A)
-      if (!rows_have_alpha) {
-        AccumulateRGB(r_ptr, g_ptr, b_ptr, step, rgb_stride, tmp_rgb, width);
-      } else {
-        AccumulateRGBA(r_ptr, g_ptr, b_ptr, a_ptr, rgb_stride, tmp_rgb, width);
-      }
-      // Convert to U/V
-      if (rg == NULL) {
-        WebPConvertRGBA32ToUV(tmp_rgb, dst_u, dst_v, uv_width);
-      } else {
-        ConvertRowsToUV(tmp_rgb, dst_u, dst_v, uv_width, rg);
-      }
-      dst_u += picture->uv_stride;
-      dst_v += picture->uv_stride;
-      r_ptr += 2 * rgb_stride;
-      b_ptr += 2 * rgb_stride;
-      g_ptr += 2 * rgb_stride;
-      if (has_alpha) a_ptr += 2 * rgb_stride;
-    }
-    if (height & 1) {    // extra last row
-      int row_has_alpha = has_alpha;
-      if (use_dsp) {
-        if (r_ptr < b_ptr) {
-          WebPConvertRGB24ToY(r_ptr, dst_y, width);
-        } else {
-          WebPConvertBGR24ToY(b_ptr, dst_y, width);
-        }
-      } else {
-        ConvertRowToY(r_ptr, g_ptr, b_ptr, step, dst_y, width, rg);
-      }
-      if (row_has_alpha) {
-        row_has_alpha &= !WebPExtractAlpha(a_ptr, 0, width, 1, dst_a, 0);
-      }
-      // Collect averaged R/G/B(/A)
-      if (!row_has_alpha) {
-        // Collect averaged R/G/B
-        AccumulateRGB(r_ptr, g_ptr, b_ptr, step, /* rgb_stride = */ 0,
-                      tmp_rgb, width);
-      } else {
-        AccumulateRGBA(r_ptr, g_ptr, b_ptr, a_ptr, /* rgb_stride = */ 0,
-                       tmp_rgb, width);
-      }
-      if (rg == NULL) {
-        WebPConvertRGBA32ToUV(tmp_rgb, dst_u, dst_v, uv_width);
-      } else {
-        ConvertRowsToUV(tmp_rgb, dst_u, dst_v, uv_width, rg);
-      }
-    }
-    WebPSafeFree(tmp_rgb);
-  }
-  return 1;
-}
-
-#undef SUM4
-#undef SUM2
-#undef SUM4ALPHA
-#undef SUM2ALPHA
-
-//------------------------------------------------------------------------------
-// call for ARGB->YUVA conversion
-
-static int PictureARGBToYUVA(WebPPicture* picture, WebPEncCSP colorspace,
-                             float dithering, int use_iterative_conversion) {
-  if (picture == NULL) return 0;
-  if (picture->argb == NULL) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_NULL_PARAMETER);
-  } else if ((colorspace & WEBP_CSP_UV_MASK) != WEBP_YUV420) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_INVALID_CONFIGURATION);
-  } else {
-    const uint8_t* const argb = (const uint8_t*)picture->argb;
-    const uint8_t* const a = argb + (0 ^ ALPHA_OFFSET);
-    const uint8_t* const r = argb + (1 ^ ALPHA_OFFSET);
-    const uint8_t* const g = argb + (2 ^ ALPHA_OFFSET);
-    const uint8_t* const b = argb + (3 ^ ALPHA_OFFSET);
-
-    picture->colorspace = WEBP_YUV420;
-    return ImportYUVAFromRGBA(r, g, b, a, 4, 4 * picture->argb_stride,
-                              dithering, use_iterative_conversion, picture);
-  }
-}
-
-int WebPPictureARGBToYUVADithered(WebPPicture* picture, WebPEncCSP colorspace,
-                                  float dithering) {
-  return PictureARGBToYUVA(picture, colorspace, dithering, 0);
-}
-
-int WebPPictureARGBToYUVA(WebPPicture* picture, WebPEncCSP colorspace) {
-  return PictureARGBToYUVA(picture, colorspace, 0.f, 0);
-}
-
-int WebPPictureSharpARGBToYUVA(WebPPicture* picture) {
-  return PictureARGBToYUVA(picture, WEBP_YUV420, 0.f, 1);
-}
-// for backward compatibility
-int WebPPictureSmartARGBToYUVA(WebPPicture* picture) {
-  return WebPPictureSharpARGBToYUVA(picture);
-}
-
-//------------------------------------------------------------------------------
-// call for YUVA -> ARGB conversion
-
-int WebPPictureYUVAToARGB(WebPPicture* picture) {
-  if (picture == NULL) return 0;
-  if (picture->y == NULL || picture->u == NULL || picture->v == NULL) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_NULL_PARAMETER);
-  }
-  if ((picture->colorspace & WEBP_CSP_ALPHA_BIT) && picture->a == NULL) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_NULL_PARAMETER);
-  }
-  if ((picture->colorspace & WEBP_CSP_UV_MASK) != WEBP_YUV420) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_INVALID_CONFIGURATION);
-  }
-  // Allocate a new argb buffer (discarding the previous one).
-  if (!WebPPictureAllocARGB(picture, picture->width, picture->height)) return 0;
-  picture->use_argb = 1;
-
-  // Convert
-  {
-    int y;
-    const int width = picture->width;
-    const int height = picture->height;
-    const int argb_stride = 4 * picture->argb_stride;
-    uint8_t* dst = (uint8_t*)picture->argb;
-    const uint8_t *cur_u = picture->u, *cur_v = picture->v, *cur_y = picture->y;
-    WebPUpsampleLinePairFunc upsample =
-        WebPGetLinePairConverter(ALPHA_OFFSET > 0);
-
-    // First row, with replicated top samples.
-    upsample(cur_y, NULL, cur_u, cur_v, cur_u, cur_v, dst, NULL, width);
-    cur_y += picture->y_stride;
-    dst += argb_stride;
-    // Center rows.
-    for (y = 1; y + 1 < height; y += 2) {
-      const uint8_t* const top_u = cur_u;
-      const uint8_t* const top_v = cur_v;
-      cur_u += picture->uv_stride;
-      cur_v += picture->uv_stride;
-      upsample(cur_y, cur_y + picture->y_stride, top_u, top_v, cur_u, cur_v,
-               dst, dst + argb_stride, width);
-      cur_y += 2 * picture->y_stride;
-      dst += 2 * argb_stride;
-    }
-    // Last row (if needed), with replicated bottom samples.
-    if (height > 1 && !(height & 1)) {
-      upsample(cur_y, NULL, cur_u, cur_v, cur_u, cur_v, dst, NULL, width);
-    }
-    // Insert alpha values if needed, in replacement for the default 0xff ones.
-    if (picture->colorspace & WEBP_CSP_ALPHA_BIT) {
-      for (y = 0; y < height; ++y) {
-        uint32_t* const argb_dst = picture->argb + y * picture->argb_stride;
-        const uint8_t* const src = picture->a + y * picture->a_stride;
-        int x;
-        for (x = 0; x < width; ++x) {
-          argb_dst[x] = (argb_dst[x] & 0x00ffffffu) | ((uint32_t)src[x] << 24);
-        }
-      }
-    }
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-// automatic import / conversion
-
-static int Import(WebPPicture* const picture,
-                  const uint8_t* rgb, int rgb_stride,
-                  int step, int swap_rb, int import_alpha) {
-  int y;
-  // swap_rb -> b,g,r,a , !swap_rb -> r,g,b,a
-  const uint8_t* r_ptr = rgb + (swap_rb ? 2 : 0);
-  const uint8_t* g_ptr = rgb + 1;
-  const uint8_t* b_ptr = rgb + (swap_rb ? 0 : 2);
-  const int width = picture->width;
-  const int height = picture->height;
-
-  if (!picture->use_argb) {
-    const uint8_t* a_ptr = import_alpha ? rgb + 3 : NULL;
-    return ImportYUVAFromRGBA(r_ptr, g_ptr, b_ptr, a_ptr, step, rgb_stride,
-                              0.f /* no dithering */, 0, picture);
-  }
-  if (!WebPPictureAlloc(picture)) return 0;
-
-  VP8LDspInit();
-  WebPInitAlphaProcessing();
-
-  if (import_alpha) {
-    // dst[] byte order is {a,r,g,b} for big-endian, {b,g,r,a} for little endian
-    uint32_t* dst = picture->argb;
-    const int do_copy = (ALPHA_OFFSET == 3) && swap_rb;
-    assert(step == 4);
-    if (do_copy) {
-      for (y = 0; y < height; ++y) {
-        memcpy(dst, rgb, width * 4);
-        rgb += rgb_stride;
-        dst += picture->argb_stride;
-      }
-    } else {
-      for (y = 0; y < height; ++y) {
-#ifdef WORDS_BIGENDIAN
-        // BGRA or RGBA input order.
-        const uint8_t* a_ptr = rgb + 3;
-        WebPPackARGB(a_ptr, r_ptr, g_ptr, b_ptr, width, dst);
-        r_ptr += rgb_stride;
-        g_ptr += rgb_stride;
-        b_ptr += rgb_stride;
-#else
-        // RGBA input order. Need to swap R and B.
-        VP8LConvertBGRAToRGBA((const uint32_t*)rgb, width, (uint8_t*)dst);
-#endif
-        rgb += rgb_stride;
-        dst += picture->argb_stride;
-      }
-    }
-  } else {
-    uint32_t* dst = picture->argb;
-    assert(step >= 3);
-    for (y = 0; y < height; ++y) {
-      WebPPackRGB(r_ptr, g_ptr, b_ptr, width, step, dst);
-      r_ptr += rgb_stride;
-      g_ptr += rgb_stride;
-      b_ptr += rgb_stride;
-      dst += picture->argb_stride;
-    }
-  }
-  return 1;
-}
-
-// Public API
-
-#if !defined(WEBP_REDUCE_CSP)
-
-int WebPPictureImportBGR(WebPPicture* picture,
-                         const uint8_t* rgb, int rgb_stride) {
-  return (picture != NULL && rgb != NULL)
-             ? Import(picture, rgb, rgb_stride, 3, 1, 0)
-             : 0;
-}
-
-int WebPPictureImportBGRA(WebPPicture* picture,
-                          const uint8_t* rgba, int rgba_stride) {
-  return (picture != NULL && rgba != NULL)
-             ? Import(picture, rgba, rgba_stride, 4, 1, 1)
-             : 0;
-}
-
-
-int WebPPictureImportBGRX(WebPPicture* picture,
-                          const uint8_t* rgba, int rgba_stride) {
-  return (picture != NULL && rgba != NULL)
-             ? Import(picture, rgba, rgba_stride, 4, 1, 0)
-             : 0;
-}
-
-#endif   // WEBP_REDUCE_CSP
-
-int WebPPictureImportRGB(WebPPicture* picture,
-                         const uint8_t* rgb, int rgb_stride) {
-  return (picture != NULL && rgb != NULL)
-             ? Import(picture, rgb, rgb_stride, 3, 0, 0)
-             : 0;
-}
-
-int WebPPictureImportRGBA(WebPPicture* picture,
-                          const uint8_t* rgba, int rgba_stride) {
-  return (picture != NULL && rgba != NULL)
-             ? Import(picture, rgba, rgba_stride, 4, 0, 1)
-             : 0;
-}
-
-int WebPPictureImportRGBX(WebPPicture* picture,
-                          const uint8_t* rgba, int rgba_stride) {
-  return (picture != NULL && rgba != NULL)
-             ? Import(picture, rgba, rgba_stride, 4, 0, 0)
-             : 0;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/picture_enc.c b/ios/Pods/libwebp/src/enc/picture_enc.c
deleted file mode 100644
index c691622..0000000
--- a/ios/Pods/libwebp/src/enc/picture_enc.c
+++ /dev/null
@@ -1,296 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// WebPPicture class basis
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "src/enc/vp8i_enc.h"
-#include "src/dsp/dsp.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// WebPPicture
-//------------------------------------------------------------------------------
-
-static int DummyWriter(const uint8_t* data, size_t data_size,
-                       const WebPPicture* const picture) {
-  // The following are to prevent 'unused variable' error message.
-  (void)data;
-  (void)data_size;
-  (void)picture;
-  return 1;
-}
-
-int WebPPictureInitInternal(WebPPicture* picture, int version) {
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_ENCODER_ABI_VERSION)) {
-    return 0;   // caller/system version mismatch!
-  }
-  if (picture != NULL) {
-    memset(picture, 0, sizeof(*picture));
-    picture->writer = DummyWriter;
-    WebPEncodingSetError(picture, VP8_ENC_OK);
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-
-static void WebPPictureResetBufferARGB(WebPPicture* const picture) {
-  picture->memory_argb_ = NULL;
-  picture->argb = NULL;
-  picture->argb_stride = 0;
-}
-
-static void WebPPictureResetBufferYUVA(WebPPicture* const picture) {
-  picture->memory_ = NULL;
-  picture->y = picture->u = picture->v = picture->a = NULL;
-  picture->y_stride = picture->uv_stride = 0;
-  picture->a_stride = 0;
-}
-
-void WebPPictureResetBuffers(WebPPicture* const picture) {
-  WebPPictureResetBufferARGB(picture);
-  WebPPictureResetBufferYUVA(picture);
-}
-
-int WebPPictureAllocARGB(WebPPicture* const picture, int width, int height) {
-  void* memory;
-  const uint64_t argb_size = (uint64_t)width * height;
-
-  assert(picture != NULL);
-
-  WebPSafeFree(picture->memory_argb_);
-  WebPPictureResetBufferARGB(picture);
-
-  if (width <= 0 || height <= 0) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_BAD_DIMENSION);
-  }
-  // allocate a new buffer.
-  memory = WebPSafeMalloc(argb_size + WEBP_ALIGN_CST, sizeof(*picture->argb));
-  if (memory == NULL) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY);
-  }
-  picture->memory_argb_ = memory;
-  picture->argb = (uint32_t*)WEBP_ALIGN(memory);
-  picture->argb_stride = width;
-  return 1;
-}
-
-int WebPPictureAllocYUVA(WebPPicture* const picture, int width, int height) {
-  const WebPEncCSP uv_csp =
-      (WebPEncCSP)((int)picture->colorspace & WEBP_CSP_UV_MASK);
-  const int has_alpha = (int)picture->colorspace & WEBP_CSP_ALPHA_BIT;
-  const int y_stride = width;
-  const int uv_width = (int)(((int64_t)width + 1) >> 1);
-  const int uv_height = (int)(((int64_t)height + 1) >> 1);
-  const int uv_stride = uv_width;
-  int a_width, a_stride;
-  uint64_t y_size, uv_size, a_size, total_size;
-  uint8_t* mem;
-
-  assert(picture != NULL);
-
-  WebPSafeFree(picture->memory_);
-  WebPPictureResetBufferYUVA(picture);
-
-  if (uv_csp != WEBP_YUV420) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_INVALID_CONFIGURATION);
-  }
-
-  // alpha
-  a_width = has_alpha ? width : 0;
-  a_stride = a_width;
-  y_size = (uint64_t)y_stride * height;
-  uv_size = (uint64_t)uv_stride * uv_height;
-  a_size =  (uint64_t)a_stride * height;
-
-  total_size = y_size + a_size + 2 * uv_size;
-
-  // Security and validation checks
-  if (width <= 0 || height <= 0 ||           // luma/alpha param error
-      uv_width <= 0 || uv_height <= 0) {     // u/v param error
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_BAD_DIMENSION);
-  }
-  // allocate a new buffer.
-  mem = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*mem));
-  if (mem == NULL) {
-    return WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY);
-  }
-
-  // From now on, we're in the clear, we can no longer fail...
-  picture->memory_ = (void*)mem;
-  picture->y_stride  = y_stride;
-  picture->uv_stride = uv_stride;
-  picture->a_stride  = a_stride;
-
-  // TODO(skal): we could align the y/u/v planes and adjust stride.
-  picture->y = mem;
-  mem += y_size;
-
-  picture->u = mem;
-  mem += uv_size;
-  picture->v = mem;
-  mem += uv_size;
-
-  if (a_size > 0) {
-    picture->a = mem;
-    mem += a_size;
-  }
-  (void)mem;  // makes the static analyzer happy
-  return 1;
-}
-
-int WebPPictureAlloc(WebPPicture* picture) {
-  if (picture != NULL) {
-    const int width = picture->width;
-    const int height = picture->height;
-
-    WebPPictureFree(picture);   // erase previous buffer
-
-    if (!picture->use_argb) {
-      return WebPPictureAllocYUVA(picture, width, height);
-    } else {
-      return WebPPictureAllocARGB(picture, width, height);
-    }
-  }
-  return 1;
-}
-
-void WebPPictureFree(WebPPicture* picture) {
-  if (picture != NULL) {
-    WebPSafeFree(picture->memory_);
-    WebPSafeFree(picture->memory_argb_);
-    WebPPictureResetBuffers(picture);
-  }
-}
-
-//------------------------------------------------------------------------------
-// WebPMemoryWriter: Write-to-memory
-
-void WebPMemoryWriterInit(WebPMemoryWriter* writer) {
-  writer->mem = NULL;
-  writer->size = 0;
-  writer->max_size = 0;
-}
-
-int WebPMemoryWrite(const uint8_t* data, size_t data_size,
-                    const WebPPicture* picture) {
-  WebPMemoryWriter* const w = (WebPMemoryWriter*)picture->custom_ptr;
-  uint64_t next_size;
-  if (w == NULL) {
-    return 1;
-  }
-  next_size = (uint64_t)w->size + data_size;
-  if (next_size > w->max_size) {
-    uint8_t* new_mem;
-    uint64_t next_max_size = 2ULL * w->max_size;
-    if (next_max_size < next_size) next_max_size = next_size;
-    if (next_max_size < 8192ULL) next_max_size = 8192ULL;
-    new_mem = (uint8_t*)WebPSafeMalloc(next_max_size, 1);
-    if (new_mem == NULL) {
-      return 0;
-    }
-    if (w->size > 0) {
-      memcpy(new_mem, w->mem, w->size);
-    }
-    WebPSafeFree(w->mem);
-    w->mem = new_mem;
-    // down-cast is ok, thanks to WebPSafeMalloc
-    w->max_size = (size_t)next_max_size;
-  }
-  if (data_size > 0) {
-    memcpy(w->mem + w->size, data, data_size);
-    w->size += data_size;
-  }
-  return 1;
-}
-
-void WebPMemoryWriterClear(WebPMemoryWriter* writer) {
-  if (writer != NULL) {
-    WebPSafeFree(writer->mem);
-    writer->mem = NULL;
-    writer->size = 0;
-    writer->max_size = 0;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Simplest high-level calls:
-
-typedef int (*Importer)(WebPPicture* const, const uint8_t* const, int);
-
-static size_t Encode(const uint8_t* rgba, int width, int height, int stride,
-                     Importer import, float quality_factor, int lossless,
-                     uint8_t** output) {
-  WebPPicture pic;
-  WebPConfig config;
-  WebPMemoryWriter wrt;
-  int ok;
-
-  if (output == NULL) return 0;
-
-  if (!WebPConfigPreset(&config, WEBP_PRESET_DEFAULT, quality_factor) ||
-      !WebPPictureInit(&pic)) {
-    return 0;  // shouldn't happen, except if system installation is broken
-  }
-
-  config.lossless = !!lossless;
-  pic.use_argb = !!lossless;
-  pic.width = width;
-  pic.height = height;
-  pic.writer = WebPMemoryWrite;
-  pic.custom_ptr = &wrt;
-  WebPMemoryWriterInit(&wrt);
-
-  ok = import(&pic, rgba, stride) && WebPEncode(&config, &pic);
-  WebPPictureFree(&pic);
-  if (!ok) {
-    WebPMemoryWriterClear(&wrt);
-    *output = NULL;
-    return 0;
-  }
-  *output = wrt.mem;
-  return wrt.size;
-}
-
-#define ENCODE_FUNC(NAME, IMPORTER)                                     \
-size_t NAME(const uint8_t* in, int w, int h, int bps, float q,          \
-            uint8_t** out) {                                            \
-  return Encode(in, w, h, bps, IMPORTER, q, 0, out);                    \
-}
-
-ENCODE_FUNC(WebPEncodeRGB, WebPPictureImportRGB)
-ENCODE_FUNC(WebPEncodeRGBA, WebPPictureImportRGBA)
-#if !defined(WEBP_REDUCE_CSP)
-ENCODE_FUNC(WebPEncodeBGR, WebPPictureImportBGR)
-ENCODE_FUNC(WebPEncodeBGRA, WebPPictureImportBGRA)
-#endif  // WEBP_REDUCE_CSP
-
-#undef ENCODE_FUNC
-
-#define LOSSLESS_DEFAULT_QUALITY 70.
-#define LOSSLESS_ENCODE_FUNC(NAME, IMPORTER)                                 \
-size_t NAME(const uint8_t* in, int w, int h, int bps, uint8_t** out) {       \
-  return Encode(in, w, h, bps, IMPORTER, LOSSLESS_DEFAULT_QUALITY, 1, out);  \
-}
-
-LOSSLESS_ENCODE_FUNC(WebPEncodeLosslessRGB, WebPPictureImportRGB)
-LOSSLESS_ENCODE_FUNC(WebPEncodeLosslessRGBA, WebPPictureImportRGBA)
-#if !defined(WEBP_REDUCE_CSP)
-LOSSLESS_ENCODE_FUNC(WebPEncodeLosslessBGR, WebPPictureImportBGR)
-LOSSLESS_ENCODE_FUNC(WebPEncodeLosslessBGRA, WebPPictureImportBGRA)
-#endif  // WEBP_REDUCE_CSP
-
-#undef LOSSLESS_ENCODE_FUNC
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/picture_psnr_enc.c b/ios/Pods/libwebp/src/enc/picture_psnr_enc.c
deleted file mode 100644
index 1a2f0be..0000000
--- a/ios/Pods/libwebp/src/enc/picture_psnr_enc.c
+++ /dev/null
@@ -1,258 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// WebPPicture tools for measuring distortion
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/webp/encode.h"
-
-#if !(defined(WEBP_DISABLE_STATS) || defined(WEBP_REDUCE_SIZE))
-
-#include <math.h>
-#include <stdlib.h>
-
-#include "src/dsp/dsp.h"
-#include "src/enc/vp8i_enc.h"
-#include "src/utils/utils.h"
-
-typedef double (*AccumulateFunc)(const uint8_t* src, int src_stride,
-                                 const uint8_t* ref, int ref_stride,
-                                 int w, int h);
-
-//------------------------------------------------------------------------------
-// local-min distortion
-//
-// For every pixel in the *reference* picture, we search for the local best
-// match in the compressed image. This is not a symmetrical measure.
-
-#define RADIUS 2  // search radius. Shouldn't be too large.
-
-static double AccumulateLSIM(const uint8_t* src, int src_stride,
-                             const uint8_t* ref, int ref_stride,
-                             int w, int h) {
-  int x, y;
-  double total_sse = 0.;
-  for (y = 0; y < h; ++y) {
-    const int y_0 = (y - RADIUS < 0) ? 0 : y - RADIUS;
-    const int y_1 = (y + RADIUS + 1 >= h) ? h : y + RADIUS + 1;
-    for (x = 0; x < w; ++x) {
-      const int x_0 = (x - RADIUS < 0) ? 0 : x - RADIUS;
-      const int x_1 = (x + RADIUS + 1 >= w) ? w : x + RADIUS + 1;
-      double best_sse = 255. * 255.;
-      const double value = (double)ref[y * ref_stride + x];
-      int i, j;
-      for (j = y_0; j < y_1; ++j) {
-        const uint8_t* const s = src + j * src_stride;
-        for (i = x_0; i < x_1; ++i) {
-          const double diff = s[i] - value;
-          const double sse = diff * diff;
-          if (sse < best_sse) best_sse = sse;
-        }
-      }
-      total_sse += best_sse;
-    }
-  }
-  return total_sse;
-}
-#undef RADIUS
-
-static double AccumulateSSE(const uint8_t* src, int src_stride,
-                            const uint8_t* ref, int ref_stride,
-                            int w, int h) {
-  int y;
-  double total_sse = 0.;
-  for (y = 0; y < h; ++y) {
-    total_sse += VP8AccumulateSSE(src, ref, w);
-    src += src_stride;
-    ref += ref_stride;
-  }
-  return total_sse;
-}
-
-//------------------------------------------------------------------------------
-
-static double AccumulateSSIM(const uint8_t* src, int src_stride,
-                             const uint8_t* ref, int ref_stride,
-                             int w, int h) {
-  const int w0 = (w < VP8_SSIM_KERNEL) ? w : VP8_SSIM_KERNEL;
-  const int w1 = w - VP8_SSIM_KERNEL - 1;
-  const int h0 = (h < VP8_SSIM_KERNEL) ? h : VP8_SSIM_KERNEL;
-  const int h1 = h - VP8_SSIM_KERNEL - 1;
-  int x, y;
-  double sum = 0.;
-  for (y = 0; y < h0; ++y) {
-    for (x = 0; x < w; ++x) {
-      sum += VP8SSIMGetClipped(src, src_stride, ref, ref_stride, x, y, w, h);
-    }
-  }
-  for (; y < h1; ++y) {
-    for (x = 0; x < w0; ++x) {
-      sum += VP8SSIMGetClipped(src, src_stride, ref, ref_stride, x, y, w, h);
-    }
-    for (; x < w1; ++x) {
-      const int off1 = x - VP8_SSIM_KERNEL + (y - VP8_SSIM_KERNEL) * src_stride;
-      const int off2 = x - VP8_SSIM_KERNEL + (y - VP8_SSIM_KERNEL) * ref_stride;
-      sum += VP8SSIMGet(src + off1, src_stride, ref + off2, ref_stride);
-    }
-    for (; x < w; ++x) {
-      sum += VP8SSIMGetClipped(src, src_stride, ref, ref_stride, x, y, w, h);
-    }
-  }
-  for (; y < h; ++y) {
-    for (x = 0; x < w; ++x) {
-      sum += VP8SSIMGetClipped(src, src_stride, ref, ref_stride, x, y, w, h);
-    }
-  }
-  return sum;
-}
-
-//------------------------------------------------------------------------------
-// Distortion
-
-// Max value returned in case of exact similarity.
-static const double kMinDistortion_dB = 99.;
-
-static double GetPSNR(double v, double size) {
-  return (v > 0. && size > 0.) ? -4.3429448 * log(v / (size * 255 * 255.))
-                               : kMinDistortion_dB;
-}
-
-static double GetLogSSIM(double v, double size) {
-  v = (size > 0.) ? v / size : 1.;
-  return (v < 1.) ? -10.0 * log10(1. - v) : kMinDistortion_dB;
-}
-
-int WebPPlaneDistortion(const uint8_t* src, size_t src_stride,
-                        const uint8_t* ref, size_t ref_stride,
-                        int width, int height, size_t x_step,
-                        int type, float* distortion, float* result) {
-  uint8_t* allocated = NULL;
-  const AccumulateFunc metric = (type == 0) ? AccumulateSSE :
-                                (type == 1) ? AccumulateSSIM :
-                                              AccumulateLSIM;
-  if (src == NULL || ref == NULL ||
-      src_stride < x_step * width || ref_stride < x_step * width ||
-      result == NULL || distortion == NULL) {
-    return 0;
-  }
-
-  VP8SSIMDspInit();
-  if (x_step != 1) {   // extract a packed plane if needed
-    int x, y;
-    uint8_t* tmp1;
-    uint8_t* tmp2;
-    allocated =
-        (uint8_t*)WebPSafeMalloc(2ULL * width * height, sizeof(*allocated));
-    if (allocated == NULL) return 0;
-    tmp1 = allocated;
-    tmp2 = tmp1 + (size_t)width * height;
-    for (y = 0; y < height; ++y) {
-      for (x = 0; x < width; ++x) {
-        tmp1[x + y * width] = src[x * x_step + y * src_stride];
-        tmp2[x + y * width] = ref[x * x_step + y * ref_stride];
-      }
-    }
-    src = tmp1;
-    ref = tmp2;
-  }
-  *distortion = (float)metric(src, width, ref, width, width, height);
-  WebPSafeFree(allocated);
-
-  *result = (type == 1) ? (float)GetLogSSIM(*distortion, (double)width * height)
-                        : (float)GetPSNR(*distortion, (double)width * height);
-  return 1;
-}
-
-#ifdef WORDS_BIGENDIAN
-#define BLUE_OFFSET 3   // uint32_t 0x000000ff is 0x00,00,00,ff in memory
-#else
-#define BLUE_OFFSET 0   // uint32_t 0x000000ff is 0xff,00,00,00 in memory
-#endif
-
-int WebPPictureDistortion(const WebPPicture* src, const WebPPicture* ref,
-                          int type, float results[5]) {
-  int w, h, c;
-  int ok = 0;
-  WebPPicture p0, p1;
-  double total_size = 0., total_distortion = 0.;
-  if (src == NULL || ref == NULL ||
-      src->width != ref->width || src->height != ref->height ||
-      results == NULL) {
-    return 0;
-  }
-
-  VP8SSIMDspInit();
-  if (!WebPPictureInit(&p0) || !WebPPictureInit(&p1)) return 0;
-  w = src->width;
-  h = src->height;
-  if (!WebPPictureView(src, 0, 0, w, h, &p0)) goto Error;
-  if (!WebPPictureView(ref, 0, 0, w, h, &p1)) goto Error;
-
-  // We always measure distortion in ARGB space.
-  if (p0.use_argb == 0 && !WebPPictureYUVAToARGB(&p0)) goto Error;
-  if (p1.use_argb == 0 && !WebPPictureYUVAToARGB(&p1)) goto Error;
-  for (c = 0; c < 4; ++c) {
-    float distortion;
-    const size_t stride0 = 4 * (size_t)p0.argb_stride;
-    const size_t stride1 = 4 * (size_t)p1.argb_stride;
-    // results are reported as BGRA
-    const int offset = c ^ BLUE_OFFSET;
-    if (!WebPPlaneDistortion((const uint8_t*)p0.argb + offset, stride0,
-                             (const uint8_t*)p1.argb + offset, stride1,
-                             w, h, 4, type, &distortion, results + c)) {
-      goto Error;
-    }
-    total_distortion += distortion;
-    total_size += w * h;
-  }
-
-  results[4] = (type == 1) ? (float)GetLogSSIM(total_distortion, total_size)
-                           : (float)GetPSNR(total_distortion, total_size);
-  ok = 1;
-
- Error:
-  WebPPictureFree(&p0);
-  WebPPictureFree(&p1);
-  return ok;
-}
-
-#undef BLUE_OFFSET
-
-#else  // defined(WEBP_DISABLE_STATS)
-int WebPPlaneDistortion(const uint8_t* src, size_t src_stride,
-                        const uint8_t* ref, size_t ref_stride,
-                        int width, int height, size_t x_step,
-                        int type, float* distortion, float* result) {
-  (void)src;
-  (void)src_stride;
-  (void)ref;
-  (void)ref_stride;
-  (void)width;
-  (void)height;
-  (void)x_step;
-  (void)type;
-  if (distortion == NULL || result == NULL) return 0;
-  *distortion = 0.f;
-  *result = 0.f;
-  return 1;
-}
-
-int WebPPictureDistortion(const WebPPicture* src, const WebPPicture* ref,
-                          int type, float results[5]) {
-  int i;
-  (void)src;
-  (void)ref;
-  (void)type;
-  if (results == NULL) return 0;
-  for (i = 0; i < 5; ++i) results[i] = 0.f;
-  return 1;
-}
-
-#endif  // !defined(WEBP_DISABLE_STATS)
diff --git a/ios/Pods/libwebp/src/enc/picture_rescale_enc.c b/ios/Pods/libwebp/src/enc/picture_rescale_enc.c
deleted file mode 100644
index 58a6ae7..0000000
--- a/ios/Pods/libwebp/src/enc/picture_rescale_enc.c
+++ /dev/null
@@ -1,309 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// WebPPicture tools: copy, crop, rescaling and view.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/webp/encode.h"
-
-#if !defined(WEBP_REDUCE_SIZE)
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "src/enc/vp8i_enc.h"
-#include "src/utils/rescaler_utils.h"
-#include "src/utils/utils.h"
-
-#define HALVE(x) (((x) + 1) >> 1)
-
-// Grab the 'specs' (writer, *opaque, width, height...) from 'src' and copy them
-// into 'dst'. Mark 'dst' as not owning any memory.
-static void PictureGrabSpecs(const WebPPicture* const src,
-                             WebPPicture* const dst) {
-  assert(src != NULL && dst != NULL);
-  *dst = *src;
-  WebPPictureResetBuffers(dst);
-}
-
-//------------------------------------------------------------------------------
-
-// Adjust top-left corner to chroma sample position.
-static void SnapTopLeftPosition(const WebPPicture* const pic,
-                                int* const left, int* const top) {
-  if (!pic->use_argb) {
-    *left &= ~1;
-    *top &= ~1;
-  }
-}
-
-// Adjust top-left corner and verify that the sub-rectangle is valid.
-static int AdjustAndCheckRectangle(const WebPPicture* const pic,
-                                   int* const left, int* const top,
-                                   int width, int height) {
-  SnapTopLeftPosition(pic, left, top);
-  if ((*left) < 0 || (*top) < 0) return 0;
-  if (width <= 0 || height <= 0) return 0;
-  if ((*left) + width > pic->width) return 0;
-  if ((*top) + height > pic->height) return 0;
-  return 1;
-}
-
-int WebPPictureCopy(const WebPPicture* src, WebPPicture* dst) {
-  if (src == NULL || dst == NULL) return 0;
-  if (src == dst) return 1;
-
-  PictureGrabSpecs(src, dst);
-  if (!WebPPictureAlloc(dst)) return 0;
-
-  if (!src->use_argb) {
-    WebPCopyPlane(src->y, src->y_stride,
-                  dst->y, dst->y_stride, dst->width, dst->height);
-    WebPCopyPlane(src->u, src->uv_stride, dst->u, dst->uv_stride,
-                  HALVE(dst->width), HALVE(dst->height));
-    WebPCopyPlane(src->v, src->uv_stride, dst->v, dst->uv_stride,
-                  HALVE(dst->width), HALVE(dst->height));
-    if (dst->a != NULL)  {
-      WebPCopyPlane(src->a, src->a_stride,
-                    dst->a, dst->a_stride, dst->width, dst->height);
-    }
-  } else {
-    WebPCopyPlane((const uint8_t*)src->argb, 4 * src->argb_stride,
-                  (uint8_t*)dst->argb, 4 * dst->argb_stride,
-                  4 * dst->width, dst->height);
-  }
-  return 1;
-}
-
-int WebPPictureIsView(const WebPPicture* picture) {
-  if (picture == NULL) return 0;
-  if (picture->use_argb) {
-    return (picture->memory_argb_ == NULL);
-  }
-  return (picture->memory_ == NULL);
-}
-
-int WebPPictureView(const WebPPicture* src,
-                    int left, int top, int width, int height,
-                    WebPPicture* dst) {
-  if (src == NULL || dst == NULL) return 0;
-
-  // verify rectangle position.
-  if (!AdjustAndCheckRectangle(src, &left, &top, width, height)) return 0;
-
-  if (src != dst) {  // beware of aliasing! We don't want to leak 'memory_'.
-    PictureGrabSpecs(src, dst);
-  }
-  dst->width = width;
-  dst->height = height;
-  if (!src->use_argb) {
-    dst->y = src->y + top * src->y_stride + left;
-    dst->u = src->u + (top >> 1) * src->uv_stride + (left >> 1);
-    dst->v = src->v + (top >> 1) * src->uv_stride + (left >> 1);
-    dst->y_stride = src->y_stride;
-    dst->uv_stride = src->uv_stride;
-    if (src->a != NULL) {
-      dst->a = src->a + top * src->a_stride + left;
-      dst->a_stride = src->a_stride;
-    }
-  } else {
-    dst->argb = src->argb + top * src->argb_stride + left;
-    dst->argb_stride = src->argb_stride;
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-// Picture cropping
-
-int WebPPictureCrop(WebPPicture* pic,
-                    int left, int top, int width, int height) {
-  WebPPicture tmp;
-
-  if (pic == NULL) return 0;
-  if (!AdjustAndCheckRectangle(pic, &left, &top, width, height)) return 0;
-
-  PictureGrabSpecs(pic, &tmp);
-  tmp.width = width;
-  tmp.height = height;
-  if (!WebPPictureAlloc(&tmp)) return 0;
-
-  if (!pic->use_argb) {
-    const int y_offset = top * pic->y_stride + left;
-    const int uv_offset = (top / 2) * pic->uv_stride + left / 2;
-    WebPCopyPlane(pic->y + y_offset, pic->y_stride,
-                  tmp.y, tmp.y_stride, width, height);
-    WebPCopyPlane(pic->u + uv_offset, pic->uv_stride,
-                  tmp.u, tmp.uv_stride, HALVE(width), HALVE(height));
-    WebPCopyPlane(pic->v + uv_offset, pic->uv_stride,
-                  tmp.v, tmp.uv_stride, HALVE(width), HALVE(height));
-
-    if (tmp.a != NULL) {
-      const int a_offset = top * pic->a_stride + left;
-      WebPCopyPlane(pic->a + a_offset, pic->a_stride,
-                    tmp.a, tmp.a_stride, width, height);
-    }
-  } else {
-    const uint8_t* const src =
-        (const uint8_t*)(pic->argb + top * pic->argb_stride + left);
-    WebPCopyPlane(src, pic->argb_stride * 4, (uint8_t*)tmp.argb,
-                  tmp.argb_stride * 4, width * 4, height);
-  }
-  WebPPictureFree(pic);
-  *pic = tmp;
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-// Simple picture rescaler
-
-static void RescalePlane(const uint8_t* src,
-                         int src_width, int src_height, int src_stride,
-                         uint8_t* dst,
-                         int dst_width, int dst_height, int dst_stride,
-                         rescaler_t* const work,
-                         int num_channels) {
-  WebPRescaler rescaler;
-  int y = 0;
-  WebPRescalerInit(&rescaler, src_width, src_height,
-                   dst, dst_width, dst_height, dst_stride,
-                   num_channels, work);
-  while (y < src_height) {
-    y += WebPRescalerImport(&rescaler, src_height - y,
-                            src + y * src_stride, src_stride);
-    WebPRescalerExport(&rescaler);
-  }
-}
-
-static void AlphaMultiplyARGB(WebPPicture* const pic, int inverse) {
-  assert(pic->argb != NULL);
-  WebPMultARGBRows((uint8_t*)pic->argb, pic->argb_stride * sizeof(*pic->argb),
-                   pic->width, pic->height, inverse);
-}
-
-static void AlphaMultiplyY(WebPPicture* const pic, int inverse) {
-  if (pic->a != NULL) {
-    WebPMultRows(pic->y, pic->y_stride, pic->a, pic->a_stride,
-                 pic->width, pic->height, inverse);
-  }
-}
-
-int WebPPictureRescale(WebPPicture* pic, int width, int height) {
-  WebPPicture tmp;
-  int prev_width, prev_height;
-  rescaler_t* work;
-
-  if (pic == NULL) return 0;
-  prev_width = pic->width;
-  prev_height = pic->height;
-  if (!WebPRescalerGetScaledDimensions(
-          prev_width, prev_height, &width, &height)) {
-    return 0;
-  }
-
-  PictureGrabSpecs(pic, &tmp);
-  tmp.width = width;
-  tmp.height = height;
-  if (!WebPPictureAlloc(&tmp)) return 0;
-
-  if (!pic->use_argb) {
-    work = (rescaler_t*)WebPSafeMalloc(2ULL * width, sizeof(*work));
-    if (work == NULL) {
-      WebPPictureFree(&tmp);
-      return 0;
-    }
-    // If present, we need to rescale alpha first (for AlphaMultiplyY).
-    if (pic->a != NULL) {
-      WebPInitAlphaProcessing();
-      RescalePlane(pic->a, prev_width, prev_height, pic->a_stride,
-                   tmp.a, width, height, tmp.a_stride, work, 1);
-    }
-
-    // We take transparency into account on the luma plane only. That's not
-    // totally exact blending, but still is a good approximation.
-    AlphaMultiplyY(pic, 0);
-    RescalePlane(pic->y, prev_width, prev_height, pic->y_stride,
-                 tmp.y, width, height, tmp.y_stride, work, 1);
-    AlphaMultiplyY(&tmp, 1);
-
-    RescalePlane(pic->u,
-                 HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
-                 tmp.u,
-                 HALVE(width), HALVE(height), tmp.uv_stride, work, 1);
-    RescalePlane(pic->v,
-                 HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
-                 tmp.v,
-                 HALVE(width), HALVE(height), tmp.uv_stride, work, 1);
-  } else {
-    work = (rescaler_t*)WebPSafeMalloc(2ULL * width * 4, sizeof(*work));
-    if (work == NULL) {
-      WebPPictureFree(&tmp);
-      return 0;
-    }
-    // In order to correctly interpolate colors, we need to apply the alpha
-    // weighting first (black-matting), scale the RGB values, and remove
-    // the premultiplication afterward (while preserving the alpha channel).
-    WebPInitAlphaProcessing();
-    AlphaMultiplyARGB(pic, 0);
-    RescalePlane((const uint8_t*)pic->argb, prev_width, prev_height,
-                 pic->argb_stride * 4,
-                 (uint8_t*)tmp.argb, width, height,
-                 tmp.argb_stride * 4,
-                 work, 4);
-    AlphaMultiplyARGB(&tmp, 1);
-  }
-  WebPPictureFree(pic);
-  WebPSafeFree(work);
-  *pic = tmp;
-  return 1;
-}
-
-#else  // defined(WEBP_REDUCE_SIZE)
-
-int WebPPictureCopy(const WebPPicture* src, WebPPicture* dst) {
-  (void)src;
-  (void)dst;
-  return 0;
-}
-
-int WebPPictureIsView(const WebPPicture* picture) {
-  (void)picture;
-  return 0;
-}
-
-int WebPPictureView(const WebPPicture* src,
-                    int left, int top, int width, int height,
-                    WebPPicture* dst) {
-  (void)src;
-  (void)left;
-  (void)top;
-  (void)width;
-  (void)height;
-  (void)dst;
-  return 0;
-}
-
-int WebPPictureCrop(WebPPicture* pic,
-                    int left, int top, int width, int height) {
-  (void)pic;
-  (void)left;
-  (void)top;
-  (void)width;
-  (void)height;
-  return 0;
-}
-
-int WebPPictureRescale(WebPPicture* pic, int width, int height) {
-  (void)pic;
-  (void)width;
-  (void)height;
-  return 0;
-}
-#endif  // !defined(WEBP_REDUCE_SIZE)
diff --git a/ios/Pods/libwebp/src/enc/picture_tools_enc.c b/ios/Pods/libwebp/src/enc/picture_tools_enc.c
deleted file mode 100644
index d0e8a49..0000000
--- a/ios/Pods/libwebp/src/enc/picture_tools_enc.c
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// WebPPicture tools: alpha handling, etc.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-
-#include "src/enc/vp8i_enc.h"
-#include "src/dsp/yuv.h"
-
-//------------------------------------------------------------------------------
-// Helper: clean up fully transparent area to help compressibility.
-
-#define SIZE 8
-#define SIZE2 (SIZE / 2)
-static int IsTransparentARGBArea(const uint32_t* ptr, int stride, int size) {
-  int y, x;
-  for (y = 0; y < size; ++y) {
-    for (x = 0; x < size; ++x) {
-      if (ptr[x] & 0xff000000u) {
-        return 0;
-      }
-    }
-    ptr += stride;
-  }
-  return 1;
-}
-
-static void Flatten(uint8_t* ptr, int v, int stride, int size) {
-  int y;
-  for (y = 0; y < size; ++y) {
-    memset(ptr, v, size);
-    ptr += stride;
-  }
-}
-
-static void FlattenARGB(uint32_t* ptr, uint32_t v, int stride, int size) {
-  int x, y;
-  for (y = 0; y < size; ++y) {
-    for (x = 0; x < size; ++x) ptr[x] = v;
-    ptr += stride;
-  }
-}
-
-// Smoothen the luma components of transparent pixels. Return true if the whole
-// block is transparent.
-static int SmoothenBlock(const uint8_t* a_ptr, int a_stride, uint8_t* y_ptr,
-                         int y_stride, int width, int height) {
-  int sum = 0, count = 0;
-  int x, y;
-  const uint8_t* alpha_ptr = a_ptr;
-  uint8_t* luma_ptr = y_ptr;
-  for (y = 0; y < height; ++y) {
-    for (x = 0; x < width; ++x) {
-      if (alpha_ptr[x] != 0) {
-        ++count;
-        sum += luma_ptr[x];
-      }
-    }
-    alpha_ptr += a_stride;
-    luma_ptr += y_stride;
-  }
-  if (count > 0 && count < width * height) {
-    const uint8_t avg_u8 = (uint8_t)(sum / count);
-    alpha_ptr = a_ptr;
-    luma_ptr = y_ptr;
-    for (y = 0; y < height; ++y) {
-      for (x = 0; x < width; ++x) {
-        if (alpha_ptr[x] == 0) luma_ptr[x] = avg_u8;
-      }
-      alpha_ptr += a_stride;
-      luma_ptr += y_stride;
-    }
-  }
-  return (count == 0);
-}
-
-void WebPCleanupTransparentArea(WebPPicture* pic) {
-  int x, y, w, h;
-  if (pic == NULL) return;
-  w = pic->width / SIZE;
-  h = pic->height / SIZE;
-
-  // note: we ignore the left-overs on right/bottom, except for SmoothenBlock().
-  if (pic->use_argb) {
-    uint32_t argb_value = 0;
-    for (y = 0; y < h; ++y) {
-      int need_reset = 1;
-      for (x = 0; x < w; ++x) {
-        const int off = (y * pic->argb_stride + x) * SIZE;
-        if (IsTransparentARGBArea(pic->argb + off, pic->argb_stride, SIZE)) {
-          if (need_reset) {
-            argb_value = pic->argb[off];
-            need_reset = 0;
-          }
-          FlattenARGB(pic->argb + off, argb_value, pic->argb_stride, SIZE);
-        } else {
-          need_reset = 1;
-        }
-      }
-    }
-  } else {
-    const int width = pic->width;
-    const int height = pic->height;
-    const int y_stride = pic->y_stride;
-    const int uv_stride = pic->uv_stride;
-    const int a_stride = pic->a_stride;
-    uint8_t* y_ptr = pic->y;
-    uint8_t* u_ptr = pic->u;
-    uint8_t* v_ptr = pic->v;
-    const uint8_t* a_ptr = pic->a;
-    int values[3] = { 0 };
-    if (a_ptr == NULL || y_ptr == NULL || u_ptr == NULL || v_ptr == NULL) {
-      return;
-    }
-    for (y = 0; y + SIZE <= height; y += SIZE) {
-      int need_reset = 1;
-      for (x = 0; x + SIZE <= width; x += SIZE) {
-        if (SmoothenBlock(a_ptr + x, a_stride, y_ptr + x, y_stride,
-                          SIZE, SIZE)) {
-          if (need_reset) {
-            values[0] = y_ptr[x];
-            values[1] = u_ptr[x >> 1];
-            values[2] = v_ptr[x >> 1];
-            need_reset = 0;
-          }
-          Flatten(y_ptr + x,        values[0], y_stride,  SIZE);
-          Flatten(u_ptr + (x >> 1), values[1], uv_stride, SIZE2);
-          Flatten(v_ptr + (x >> 1), values[2], uv_stride, SIZE2);
-        } else {
-          need_reset = 1;
-        }
-      }
-      if (x < width) {
-        SmoothenBlock(a_ptr + x, a_stride, y_ptr + x, y_stride,
-                      width - x, SIZE);
-      }
-      a_ptr += SIZE * a_stride;
-      y_ptr += SIZE * y_stride;
-      u_ptr += SIZE2 * uv_stride;
-      v_ptr += SIZE2 * uv_stride;
-    }
-    if (y < height) {
-      const int sub_height = height - y;
-      for (x = 0; x + SIZE <= width; x += SIZE) {
-        SmoothenBlock(a_ptr + x, a_stride, y_ptr + x, y_stride,
-                      SIZE, sub_height);
-      }
-      if (x < width) {
-        SmoothenBlock(a_ptr + x, a_stride, y_ptr + x, y_stride,
-                      width - x, sub_height);
-      }
-    }
-  }
-}
-
-#undef SIZE
-#undef SIZE2
-
-void WebPCleanupTransparentAreaLossless(WebPPicture* const pic) {
-  int x, y, w, h;
-  uint32_t* argb;
-  assert(pic != NULL && pic->use_argb);
-  w = pic->width;
-  h = pic->height;
-  argb = pic->argb;
-
-  for (y = 0; y < h; ++y) {
-    for (x = 0; x < w; ++x) {
-      if ((argb[x] & 0xff000000) == 0) {
-        argb[x] = 0x00000000;
-      }
-    }
-    argb += pic->argb_stride;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Blend color and remove transparency info
-
-#define BLEND(V0, V1, ALPHA) \
-    ((((V0) * (255 - (ALPHA)) + (V1) * (ALPHA)) * 0x101 + 256) >> 16)
-#define BLEND_10BIT(V0, V1, ALPHA) \
-    ((((V0) * (1020 - (ALPHA)) + (V1) * (ALPHA)) * 0x101 + 1024) >> 18)
-
-static WEBP_INLINE uint32_t MakeARGB32(int r, int g, int b) {
-  return (0xff000000u | (r << 16) | (g << 8) | b);
-}
-
-void WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb) {
-  const int red = (background_rgb >> 16) & 0xff;
-  const int green = (background_rgb >> 8) & 0xff;
-  const int blue = (background_rgb >> 0) & 0xff;
-  int x, y;
-  if (pic == NULL) return;
-  if (!pic->use_argb) {
-    const int uv_width = (pic->width >> 1);  // omit last pixel during u/v loop
-    const int Y0 = VP8RGBToY(red, green, blue, YUV_HALF);
-    // VP8RGBToU/V expects the u/v values summed over four pixels
-    const int U0 = VP8RGBToU(4 * red, 4 * green, 4 * blue, 4 * YUV_HALF);
-    const int V0 = VP8RGBToV(4 * red, 4 * green, 4 * blue, 4 * YUV_HALF);
-    const int has_alpha = pic->colorspace & WEBP_CSP_ALPHA_BIT;
-    uint8_t* y_ptr = pic->y;
-    uint8_t* u_ptr = pic->u;
-    uint8_t* v_ptr = pic->v;
-    uint8_t* a_ptr = pic->a;
-    if (!has_alpha || a_ptr == NULL) return;    // nothing to do
-    for (y = 0; y < pic->height; ++y) {
-      // Luma blending
-      for (x = 0; x < pic->width; ++x) {
-        const uint8_t alpha = a_ptr[x];
-        if (alpha < 0xff) {
-          y_ptr[x] = BLEND(Y0, y_ptr[x], alpha);
-        }
-      }
-      // Chroma blending every even line
-      if ((y & 1) == 0) {
-        uint8_t* const a_ptr2 =
-            (y + 1 == pic->height) ? a_ptr : a_ptr + pic->a_stride;
-        for (x = 0; x < uv_width; ++x) {
-          // Average four alpha values into a single blending weight.
-          // TODO(skal): might lead to visible contouring. Can we do better?
-          const uint32_t alpha =
-              a_ptr[2 * x + 0] + a_ptr[2 * x + 1] +
-              a_ptr2[2 * x + 0] + a_ptr2[2 * x + 1];
-          u_ptr[x] = BLEND_10BIT(U0, u_ptr[x], alpha);
-          v_ptr[x] = BLEND_10BIT(V0, v_ptr[x], alpha);
-        }
-        if (pic->width & 1) {   // rightmost pixel
-          const uint32_t alpha = 2 * (a_ptr[2 * x + 0] + a_ptr2[2 * x + 0]);
-          u_ptr[x] = BLEND_10BIT(U0, u_ptr[x], alpha);
-          v_ptr[x] = BLEND_10BIT(V0, v_ptr[x], alpha);
-        }
-      } else {
-        u_ptr += pic->uv_stride;
-        v_ptr += pic->uv_stride;
-      }
-      memset(a_ptr, 0xff, pic->width);  // reset alpha value to opaque
-      a_ptr += pic->a_stride;
-      y_ptr += pic->y_stride;
-    }
-  } else {
-    uint32_t* argb = pic->argb;
-    const uint32_t background = MakeARGB32(red, green, blue);
-    for (y = 0; y < pic->height; ++y) {
-      for (x = 0; x < pic->width; ++x) {
-        const int alpha = (argb[x] >> 24) & 0xff;
-        if (alpha != 0xff) {
-          if (alpha > 0) {
-            int r = (argb[x] >> 16) & 0xff;
-            int g = (argb[x] >>  8) & 0xff;
-            int b = (argb[x] >>  0) & 0xff;
-            r = BLEND(red, r, alpha);
-            g = BLEND(green, g, alpha);
-            b = BLEND(blue, b, alpha);
-            argb[x] = MakeARGB32(r, g, b);
-          } else {
-            argb[x] = background;
-          }
-        }
-      }
-      argb += pic->argb_stride;
-    }
-  }
-}
-
-#undef BLEND
-#undef BLEND_10BIT
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/predictor_enc.c b/ios/Pods/libwebp/src/enc/predictor_enc.c
deleted file mode 100644
index 802e896..0000000
--- a/ios/Pods/libwebp/src/enc/predictor_enc.c
+++ /dev/null
@@ -1,772 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Image transform methods for lossless encoder.
-//
-// Authors: Vikas Arora (vikaas.arora@gmail.com)
-//          Jyrki Alakuijala (jyrki@google.com)
-//          Urvang Joshi (urvang@google.com)
-//          Vincent Rabaud (vrabaud@google.com)
-
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-#include "src/enc/vp8li_enc.h"
-
-#define MAX_DIFF_COST (1e30f)
-
-static const float kSpatialPredictorBias = 15.f;
-static const int kPredLowEffort = 11;
-static const uint32_t kMaskAlpha = 0xff000000;
-
-// Mostly used to reduce code size + readability
-static WEBP_INLINE int GetMin(int a, int b) { return (a > b) ? b : a; }
-
-//------------------------------------------------------------------------------
-// Methods to calculate Entropy (Shannon).
-
-static float PredictionCostSpatial(const int counts[256], int weight_0,
-                                   double exp_val) {
-  const int significant_symbols = 256 >> 4;
-  const double exp_decay_factor = 0.6;
-  double bits = weight_0 * counts[0];
-  int i;
-  for (i = 1; i < significant_symbols; ++i) {
-    bits += exp_val * (counts[i] + counts[256 - i]);
-    exp_val *= exp_decay_factor;
-  }
-  return (float)(-0.1 * bits);
-}
-
-static float PredictionCostSpatialHistogram(const int accumulated[4][256],
-                                            const int tile[4][256]) {
-  int i;
-  double retval = 0;
-  for (i = 0; i < 4; ++i) {
-    const double kExpValue = 0.94;
-    retval += PredictionCostSpatial(tile[i], 1, kExpValue);
-    retval += VP8LCombinedShannonEntropy(tile[i], accumulated[i]);
-  }
-  return (float)retval;
-}
-
-static WEBP_INLINE void UpdateHisto(int histo_argb[4][256], uint32_t argb) {
-  ++histo_argb[0][argb >> 24];
-  ++histo_argb[1][(argb >> 16) & 0xff];
-  ++histo_argb[2][(argb >> 8) & 0xff];
-  ++histo_argb[3][argb & 0xff];
-}
-
-//------------------------------------------------------------------------------
-// Spatial transform functions.
-
-static WEBP_INLINE void PredictBatch(int mode, int x_start, int y,
-                                     int num_pixels, const uint32_t* current,
-                                     const uint32_t* upper, uint32_t* out) {
-  if (x_start == 0) {
-    if (y == 0) {
-      // ARGB_BLACK.
-      VP8LPredictorsSub[0](current, NULL, 1, out);
-    } else {
-      // Top one.
-      VP8LPredictorsSub[2](current, upper, 1, out);
-    }
-    ++x_start;
-    ++out;
-    --num_pixels;
-  }
-  if (y == 0) {
-    // Left one.
-    VP8LPredictorsSub[1](current + x_start, NULL, num_pixels, out);
-  } else {
-    VP8LPredictorsSub[mode](current + x_start, upper + x_start, num_pixels,
-                            out);
-  }
-}
-
-#if (WEBP_NEAR_LOSSLESS == 1)
-static WEBP_INLINE int GetMax(int a, int b) { return (a < b) ? b : a; }
-
-static int MaxDiffBetweenPixels(uint32_t p1, uint32_t p2) {
-  const int diff_a = abs((int)(p1 >> 24) - (int)(p2 >> 24));
-  const int diff_r = abs((int)((p1 >> 16) & 0xff) - (int)((p2 >> 16) & 0xff));
-  const int diff_g = abs((int)((p1 >> 8) & 0xff) - (int)((p2 >> 8) & 0xff));
-  const int diff_b = abs((int)(p1 & 0xff) - (int)(p2 & 0xff));
-  return GetMax(GetMax(diff_a, diff_r), GetMax(diff_g, diff_b));
-}
-
-static int MaxDiffAroundPixel(uint32_t current, uint32_t up, uint32_t down,
-                              uint32_t left, uint32_t right) {
-  const int diff_up = MaxDiffBetweenPixels(current, up);
-  const int diff_down = MaxDiffBetweenPixels(current, down);
-  const int diff_left = MaxDiffBetweenPixels(current, left);
-  const int diff_right = MaxDiffBetweenPixels(current, right);
-  return GetMax(GetMax(diff_up, diff_down), GetMax(diff_left, diff_right));
-}
-
-static uint32_t AddGreenToBlueAndRed(uint32_t argb) {
-  const uint32_t green = (argb >> 8) & 0xff;
-  uint32_t red_blue = argb & 0x00ff00ffu;
-  red_blue += (green << 16) | green;
-  red_blue &= 0x00ff00ffu;
-  return (argb & 0xff00ff00u) | red_blue;
-}
-
-static void MaxDiffsForRow(int width, int stride, const uint32_t* const argb,
-                           uint8_t* const max_diffs, int used_subtract_green) {
-  uint32_t current, up, down, left, right;
-  int x;
-  if (width <= 2) return;
-  current = argb[0];
-  right = argb[1];
-  if (used_subtract_green) {
-    current = AddGreenToBlueAndRed(current);
-    right = AddGreenToBlueAndRed(right);
-  }
-  // max_diffs[0] and max_diffs[width - 1] are never used.
-  for (x = 1; x < width - 1; ++x) {
-    up = argb[-stride + x];
-    down = argb[stride + x];
-    left = current;
-    current = right;
-    right = argb[x + 1];
-    if (used_subtract_green) {
-      up = AddGreenToBlueAndRed(up);
-      down = AddGreenToBlueAndRed(down);
-      right = AddGreenToBlueAndRed(right);
-    }
-    max_diffs[x] = MaxDiffAroundPixel(current, up, down, left, right);
-  }
-}
-
-// Quantize the difference between the actual component value and its prediction
-// to a multiple of quantization, working modulo 256, taking care not to cross
-// a boundary (inclusive upper limit).
-static uint8_t NearLosslessComponent(uint8_t value, uint8_t predict,
-                                     uint8_t boundary, int quantization) {
-  const int residual = (value - predict) & 0xff;
-  const int boundary_residual = (boundary - predict) & 0xff;
-  const int lower = residual & ~(quantization - 1);
-  const int upper = lower + quantization;
-  // Resolve ties towards a value closer to the prediction (i.e. towards lower
-  // if value comes after prediction and towards upper otherwise).
-  const int bias = ((boundary - value) & 0xff) < boundary_residual;
-  if (residual - lower < upper - residual + bias) {
-    // lower is closer to residual than upper.
-    if (residual > boundary_residual && lower <= boundary_residual) {
-      // Halve quantization step to avoid crossing boundary. This midpoint is
-      // on the same side of boundary as residual because midpoint >= residual
-      // (since lower is closer than upper) and residual is above the boundary.
-      return lower + (quantization >> 1);
-    }
-    return lower;
-  } else {
-    // upper is closer to residual than lower.
-    if (residual <= boundary_residual && upper > boundary_residual) {
-      // Halve quantization step to avoid crossing boundary. This midpoint is
-      // on the same side of boundary as residual because midpoint <= residual
-      // (since upper is closer than lower) and residual is below the boundary.
-      return lower + (quantization >> 1);
-    }
-    return upper & 0xff;
-  }
-}
-
-static WEBP_INLINE uint8_t NearLosslessDiff(uint8_t a, uint8_t b) {
-  return (uint8_t)((((int)(a) - (int)(b))) & 0xff);
-}
-
-// Quantize every component of the difference between the actual pixel value and
-// its prediction to a multiple of a quantization (a power of 2, not larger than
-// max_quantization which is a power of 2, smaller than max_diff). Take care if
-// value and predict have undergone subtract green, which means that red and
-// blue are represented as offsets from green.
-static uint32_t NearLossless(uint32_t value, uint32_t predict,
-                             int max_quantization, int max_diff,
-                             int used_subtract_green) {
-  int quantization;
-  uint8_t new_green = 0;
-  uint8_t green_diff = 0;
-  uint8_t a, r, g, b;
-  if (max_diff <= 2) {
-    return VP8LSubPixels(value, predict);
-  }
-  quantization = max_quantization;
-  while (quantization >= max_diff) {
-    quantization >>= 1;
-  }
-  if ((value >> 24) == 0 || (value >> 24) == 0xff) {
-    // Preserve transparency of fully transparent or fully opaque pixels.
-    a = NearLosslessDiff(value >> 24, predict >> 24);
-  } else {
-    a = NearLosslessComponent(value >> 24, predict >> 24, 0xff, quantization);
-  }
-  g = NearLosslessComponent((value >> 8) & 0xff, (predict >> 8) & 0xff, 0xff,
-                            quantization);
-  if (used_subtract_green) {
-    // The green offset will be added to red and blue components during decoding
-    // to obtain the actual red and blue values.
-    new_green = ((predict >> 8) + g) & 0xff;
-    // The amount by which green has been adjusted during quantization. It is
-    // subtracted from red and blue for compensation, to avoid accumulating two
-    // quantization errors in them.
-    green_diff = NearLosslessDiff(new_green, value >> 8);
-  }
-  r = NearLosslessComponent(NearLosslessDiff(value >> 16, green_diff),
-                            (predict >> 16) & 0xff, 0xff - new_green,
-                            quantization);
-  b = NearLosslessComponent(NearLosslessDiff(value, green_diff),
-                            predict & 0xff, 0xff - new_green, quantization);
-  return ((uint32_t)a << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
-}
-#endif  // (WEBP_NEAR_LOSSLESS == 1)
-
-// Stores the difference between the pixel and its prediction in "out".
-// In case of a lossy encoding, updates the source image to avoid propagating
-// the deviation further to pixels which depend on the current pixel for their
-// predictions.
-static WEBP_INLINE void GetResidual(
-    int width, int height, uint32_t* const upper_row,
-    uint32_t* const current_row, const uint8_t* const max_diffs, int mode,
-    int x_start, int x_end, int y, int max_quantization, int exact,
-    int used_subtract_green, uint32_t* const out) {
-  if (exact) {
-    PredictBatch(mode, x_start, y, x_end - x_start, current_row, upper_row,
-                 out);
-  } else {
-    const VP8LPredictorFunc pred_func = VP8LPredictors[mode];
-    int x;
-    for (x = x_start; x < x_end; ++x) {
-      uint32_t predict;
-      uint32_t residual;
-      if (y == 0) {
-        predict = (x == 0) ? ARGB_BLACK : current_row[x - 1];  // Left.
-      } else if (x == 0) {
-        predict = upper_row[x];  // Top.
-      } else {
-        predict = pred_func(current_row[x - 1], upper_row + x);
-      }
-#if (WEBP_NEAR_LOSSLESS == 1)
-      if (max_quantization == 1 || mode == 0 || y == 0 || y == height - 1 ||
-          x == 0 || x == width - 1) {
-        residual = VP8LSubPixels(current_row[x], predict);
-      } else {
-        residual = NearLossless(current_row[x], predict, max_quantization,
-                                max_diffs[x], used_subtract_green);
-        // Update the source image.
-        current_row[x] = VP8LAddPixels(predict, residual);
-        // x is never 0 here so we do not need to update upper_row like below.
-      }
-#else
-      (void)max_diffs;
-      (void)height;
-      (void)max_quantization;
-      (void)used_subtract_green;
-      residual = VP8LSubPixels(current_row[x], predict);
-#endif
-      if ((current_row[x] & kMaskAlpha) == 0) {
-        // If alpha is 0, cleanup RGB. We can choose the RGB values of the
-        // residual for best compression. The prediction of alpha itself can be
-        // non-zero and must be kept though. We choose RGB of the residual to be
-        // 0.
-        residual &= kMaskAlpha;
-        // Update the source image.
-        current_row[x] = predict & ~kMaskAlpha;
-        // The prediction for the rightmost pixel in a row uses the leftmost
-        // pixel
-        // in that row as its top-right context pixel. Hence if we change the
-        // leftmost pixel of current_row, the corresponding change must be
-        // applied
-        // to upper_row as well where top-right context is being read from.
-        if (x == 0 && y != 0) upper_row[width] = current_row[0];
-      }
-      out[x - x_start] = residual;
-    }
-  }
-}
-
-// Returns best predictor and updates the accumulated histogram.
-// If max_quantization > 1, assumes that near lossless processing will be
-// applied, quantizing residuals to multiples of quantization levels up to
-// max_quantization (the actual quantization level depends on smoothness near
-// the given pixel).
-static int GetBestPredictorForTile(int width, int height,
-                                   int tile_x, int tile_y, int bits,
-                                   int accumulated[4][256],
-                                   uint32_t* const argb_scratch,
-                                   const uint32_t* const argb,
-                                   int max_quantization,
-                                   int exact, int used_subtract_green,
-                                   const uint32_t* const modes) {
-  const int kNumPredModes = 14;
-  const int start_x = tile_x << bits;
-  const int start_y = tile_y << bits;
-  const int tile_size = 1 << bits;
-  const int max_y = GetMin(tile_size, height - start_y);
-  const int max_x = GetMin(tile_size, width - start_x);
-  // Whether there exist columns just outside the tile.
-  const int have_left = (start_x > 0);
-  // Position and size of the strip covering the tile and adjacent columns if
-  // they exist.
-  const int context_start_x = start_x - have_left;
-#if (WEBP_NEAR_LOSSLESS == 1)
-  const int context_width = max_x + have_left + (max_x < width - start_x);
-#endif
-  const int tiles_per_row = VP8LSubSampleSize(width, bits);
-  // Prediction modes of the left and above neighbor tiles.
-  const int left_mode = (tile_x > 0) ?
-      (modes[tile_y * tiles_per_row + tile_x - 1] >> 8) & 0xff : 0xff;
-  const int above_mode = (tile_y > 0) ?
-      (modes[(tile_y - 1) * tiles_per_row + tile_x] >> 8) & 0xff : 0xff;
-  // The width of upper_row and current_row is one pixel larger than image width
-  // to allow the top right pixel to point to the leftmost pixel of the next row
-  // when at the right edge.
-  uint32_t* upper_row = argb_scratch;
-  uint32_t* current_row = upper_row + width + 1;
-  uint8_t* const max_diffs = (uint8_t*)(current_row + width + 1);
-  float best_diff = MAX_DIFF_COST;
-  int best_mode = 0;
-  int mode;
-  int histo_stack_1[4][256];
-  int histo_stack_2[4][256];
-  // Need pointers to be able to swap arrays.
-  int (*histo_argb)[256] = histo_stack_1;
-  int (*best_histo)[256] = histo_stack_2;
-  int i, j;
-  uint32_t residuals[1 << MAX_TRANSFORM_BITS];
-  assert(bits <= MAX_TRANSFORM_BITS);
-  assert(max_x <= (1 << MAX_TRANSFORM_BITS));
-
-  for (mode = 0; mode < kNumPredModes; ++mode) {
-    float cur_diff;
-    int relative_y;
-    memset(histo_argb, 0, sizeof(histo_stack_1));
-    if (start_y > 0) {
-      // Read the row above the tile which will become the first upper_row.
-      // Include a pixel to the left if it exists; include a pixel to the right
-      // in all cases (wrapping to the leftmost pixel of the next row if it does
-      // not exist).
-      memcpy(current_row + context_start_x,
-             argb + (start_y - 1) * width + context_start_x,
-             sizeof(*argb) * (max_x + have_left + 1));
-    }
-    for (relative_y = 0; relative_y < max_y; ++relative_y) {
-      const int y = start_y + relative_y;
-      int relative_x;
-      uint32_t* tmp = upper_row;
-      upper_row = current_row;
-      current_row = tmp;
-      // Read current_row. Include a pixel to the left if it exists; include a
-      // pixel to the right in all cases except at the bottom right corner of
-      // the image (wrapping to the leftmost pixel of the next row if it does
-      // not exist in the current row).
-      memcpy(current_row + context_start_x,
-             argb + y * width + context_start_x,
-             sizeof(*argb) * (max_x + have_left + (y + 1 < height)));
-#if (WEBP_NEAR_LOSSLESS == 1)
-      if (max_quantization > 1 && y >= 1 && y + 1 < height) {
-        MaxDiffsForRow(context_width, width, argb + y * width + context_start_x,
-                       max_diffs + context_start_x, used_subtract_green);
-      }
-#endif
-
-      GetResidual(width, height, upper_row, current_row, max_diffs, mode,
-                  start_x, start_x + max_x, y, max_quantization, exact,
-                  used_subtract_green, residuals);
-      for (relative_x = 0; relative_x < max_x; ++relative_x) {
-        UpdateHisto(histo_argb, residuals[relative_x]);
-      }
-    }
-    cur_diff = PredictionCostSpatialHistogram(
-        (const int (*)[256])accumulated, (const int (*)[256])histo_argb);
-    // Favor keeping the areas locally similar.
-    if (mode == left_mode) cur_diff -= kSpatialPredictorBias;
-    if (mode == above_mode) cur_diff -= kSpatialPredictorBias;
-
-    if (cur_diff < best_diff) {
-      int (*tmp)[256] = histo_argb;
-      histo_argb = best_histo;
-      best_histo = tmp;
-      best_diff = cur_diff;
-      best_mode = mode;
-    }
-  }
-
-  for (i = 0; i < 4; i++) {
-    for (j = 0; j < 256; j++) {
-      accumulated[i][j] += best_histo[i][j];
-    }
-  }
-
-  return best_mode;
-}
-
-// Converts pixels of the image to residuals with respect to predictions.
-// If max_quantization > 1, applies near lossless processing, quantizing
-// residuals to multiples of quantization levels up to max_quantization
-// (the actual quantization level depends on smoothness near the given pixel).
-static void CopyImageWithPrediction(int width, int height,
-                                    int bits, uint32_t* const modes,
-                                    uint32_t* const argb_scratch,
-                                    uint32_t* const argb,
-                                    int low_effort, int max_quantization,
-                                    int exact, int used_subtract_green) {
-  const int tiles_per_row = VP8LSubSampleSize(width, bits);
-  // The width of upper_row and current_row is one pixel larger than image width
-  // to allow the top right pixel to point to the leftmost pixel of the next row
-  // when at the right edge.
-  uint32_t* upper_row = argb_scratch;
-  uint32_t* current_row = upper_row + width + 1;
-  uint8_t* current_max_diffs = (uint8_t*)(current_row + width + 1);
-#if (WEBP_NEAR_LOSSLESS == 1)
-  uint8_t* lower_max_diffs = current_max_diffs + width;
-#endif
-  int y;
-
-  for (y = 0; y < height; ++y) {
-    int x;
-    uint32_t* const tmp32 = upper_row;
-    upper_row = current_row;
-    current_row = tmp32;
-    memcpy(current_row, argb + y * width,
-           sizeof(*argb) * (width + (y + 1 < height)));
-
-    if (low_effort) {
-      PredictBatch(kPredLowEffort, 0, y, width, current_row, upper_row,
-                   argb + y * width);
-    } else {
-#if (WEBP_NEAR_LOSSLESS == 1)
-      if (max_quantization > 1) {
-        // Compute max_diffs for the lower row now, because that needs the
-        // contents of argb for the current row, which we will overwrite with
-        // residuals before proceeding with the next row.
-        uint8_t* const tmp8 = current_max_diffs;
-        current_max_diffs = lower_max_diffs;
-        lower_max_diffs = tmp8;
-        if (y + 2 < height) {
-          MaxDiffsForRow(width, width, argb + (y + 1) * width, lower_max_diffs,
-                         used_subtract_green);
-        }
-      }
-#endif
-      for (x = 0; x < width;) {
-        const int mode =
-            (modes[(y >> bits) * tiles_per_row + (x >> bits)] >> 8) & 0xff;
-        int x_end = x + (1 << bits);
-        if (x_end > width) x_end = width;
-        GetResidual(width, height, upper_row, current_row, current_max_diffs,
-                    mode, x, x_end, y, max_quantization, exact,
-                    used_subtract_green, argb + y * width + x);
-        x = x_end;
-      }
-    }
-  }
-}
-
-// Finds the best predictor for each tile, and converts the image to residuals
-// with respect to predictions. If near_lossless_quality < 100, applies
-// near lossless processing, shaving off more bits of residuals for lower
-// qualities.
-void VP8LResidualImage(int width, int height, int bits, int low_effort,
-                       uint32_t* const argb, uint32_t* const argb_scratch,
-                       uint32_t* const image, int near_lossless_quality,
-                       int exact, int used_subtract_green) {
-  const int tiles_per_row = VP8LSubSampleSize(width, bits);
-  const int tiles_per_col = VP8LSubSampleSize(height, bits);
-  int tile_y;
-  int histo[4][256];
-  const int max_quantization = 1 << VP8LNearLosslessBits(near_lossless_quality);
-  if (low_effort) {
-    int i;
-    for (i = 0; i < tiles_per_row * tiles_per_col; ++i) {
-      image[i] = ARGB_BLACK | (kPredLowEffort << 8);
-    }
-  } else {
-    memset(histo, 0, sizeof(histo));
-    for (tile_y = 0; tile_y < tiles_per_col; ++tile_y) {
-      int tile_x;
-      for (tile_x = 0; tile_x < tiles_per_row; ++tile_x) {
-        const int pred = GetBestPredictorForTile(width, height, tile_x, tile_y,
-            bits, histo, argb_scratch, argb, max_quantization, exact,
-            used_subtract_green, image);
-        image[tile_y * tiles_per_row + tile_x] = ARGB_BLACK | (pred << 8);
-      }
-    }
-  }
-
-  CopyImageWithPrediction(width, height, bits, image, argb_scratch, argb,
-                          low_effort, max_quantization, exact,
-                          used_subtract_green);
-}
-
-//------------------------------------------------------------------------------
-// Color transform functions.
-
-static WEBP_INLINE void MultipliersClear(VP8LMultipliers* const m) {
-  m->green_to_red_ = 0;
-  m->green_to_blue_ = 0;
-  m->red_to_blue_ = 0;
-}
-
-static WEBP_INLINE void ColorCodeToMultipliers(uint32_t color_code,
-                                               VP8LMultipliers* const m) {
-  m->green_to_red_  = (color_code >>  0) & 0xff;
-  m->green_to_blue_ = (color_code >>  8) & 0xff;
-  m->red_to_blue_   = (color_code >> 16) & 0xff;
-}
-
-static WEBP_INLINE uint32_t MultipliersToColorCode(
-    const VP8LMultipliers* const m) {
-  return 0xff000000u |
-         ((uint32_t)(m->red_to_blue_) << 16) |
-         ((uint32_t)(m->green_to_blue_) << 8) |
-         m->green_to_red_;
-}
-
-static float PredictionCostCrossColor(const int accumulated[256],
-                                      const int counts[256]) {
-  // Favor low entropy, locally and globally.
-  // Favor small absolute values for PredictionCostSpatial
-  static const double kExpValue = 2.4;
-  return VP8LCombinedShannonEntropy(counts, accumulated) +
-         PredictionCostSpatial(counts, 3, kExpValue);
-}
-
-static float GetPredictionCostCrossColorRed(
-    const uint32_t* argb, int stride, int tile_width, int tile_height,
-    VP8LMultipliers prev_x, VP8LMultipliers prev_y, int green_to_red,
-    const int accumulated_red_histo[256]) {
-  int histo[256] = { 0 };
-  float cur_diff;
-
-  VP8LCollectColorRedTransforms(argb, stride, tile_width, tile_height,
-                                green_to_red, histo);
-
-  cur_diff = PredictionCostCrossColor(accumulated_red_histo, histo);
-  if ((uint8_t)green_to_red == prev_x.green_to_red_) {
-    cur_diff -= 3;  // favor keeping the areas locally similar
-  }
-  if ((uint8_t)green_to_red == prev_y.green_to_red_) {
-    cur_diff -= 3;  // favor keeping the areas locally similar
-  }
-  if (green_to_red == 0) {
-    cur_diff -= 3;
-  }
-  return cur_diff;
-}
-
-static void GetBestGreenToRed(
-    const uint32_t* argb, int stride, int tile_width, int tile_height,
-    VP8LMultipliers prev_x, VP8LMultipliers prev_y, int quality,
-    const int accumulated_red_histo[256], VP8LMultipliers* const best_tx) {
-  const int kMaxIters = 4 + ((7 * quality) >> 8);  // in range [4..6]
-  int green_to_red_best = 0;
-  int iter, offset;
-  float best_diff = GetPredictionCostCrossColorRed(
-      argb, stride, tile_width, tile_height, prev_x, prev_y,
-      green_to_red_best, accumulated_red_histo);
-  for (iter = 0; iter < kMaxIters; ++iter) {
-    // ColorTransformDelta is a 3.5 bit fixed point, so 32 is equal to
-    // one in color computation. Having initial delta here as 1 is sufficient
-    // to explore the range of (-2, 2).
-    const int delta = 32 >> iter;
-    // Try a negative and a positive delta from the best known value.
-    for (offset = -delta; offset <= delta; offset += 2 * delta) {
-      const int green_to_red_cur = offset + green_to_red_best;
-      const float cur_diff = GetPredictionCostCrossColorRed(
-          argb, stride, tile_width, tile_height, prev_x, prev_y,
-          green_to_red_cur, accumulated_red_histo);
-      if (cur_diff < best_diff) {
-        best_diff = cur_diff;
-        green_to_red_best = green_to_red_cur;
-      }
-    }
-  }
-  best_tx->green_to_red_ = green_to_red_best;
-}
-
-static float GetPredictionCostCrossColorBlue(
-    const uint32_t* argb, int stride, int tile_width, int tile_height,
-    VP8LMultipliers prev_x, VP8LMultipliers prev_y,
-    int green_to_blue, int red_to_blue, const int accumulated_blue_histo[256]) {
-  int histo[256] = { 0 };
-  float cur_diff;
-
-  VP8LCollectColorBlueTransforms(argb, stride, tile_width, tile_height,
-                                 green_to_blue, red_to_blue, histo);
-
-  cur_diff = PredictionCostCrossColor(accumulated_blue_histo, histo);
-  if ((uint8_t)green_to_blue == prev_x.green_to_blue_) {
-    cur_diff -= 3;  // favor keeping the areas locally similar
-  }
-  if ((uint8_t)green_to_blue == prev_y.green_to_blue_) {
-    cur_diff -= 3;  // favor keeping the areas locally similar
-  }
-  if ((uint8_t)red_to_blue == prev_x.red_to_blue_) {
-    cur_diff -= 3;  // favor keeping the areas locally similar
-  }
-  if ((uint8_t)red_to_blue == prev_y.red_to_blue_) {
-    cur_diff -= 3;  // favor keeping the areas locally similar
-  }
-  if (green_to_blue == 0) {
-    cur_diff -= 3;
-  }
-  if (red_to_blue == 0) {
-    cur_diff -= 3;
-  }
-  return cur_diff;
-}
-
-#define kGreenRedToBlueNumAxis 8
-#define kGreenRedToBlueMaxIters 7
-static void GetBestGreenRedToBlue(
-    const uint32_t* argb, int stride, int tile_width, int tile_height,
-    VP8LMultipliers prev_x, VP8LMultipliers prev_y, int quality,
-    const int accumulated_blue_histo[256],
-    VP8LMultipliers* const best_tx) {
-  const int8_t offset[kGreenRedToBlueNumAxis][2] =
-      {{0, -1}, {0, 1}, {-1, 0}, {1, 0}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}};
-  const int8_t delta_lut[kGreenRedToBlueMaxIters] = { 16, 16, 8, 4, 2, 2, 2 };
-  const int iters =
-      (quality < 25) ? 1 : (quality > 50) ? kGreenRedToBlueMaxIters : 4;
-  int green_to_blue_best = 0;
-  int red_to_blue_best = 0;
-  int iter;
-  // Initial value at origin:
-  float best_diff = GetPredictionCostCrossColorBlue(
-      argb, stride, tile_width, tile_height, prev_x, prev_y,
-      green_to_blue_best, red_to_blue_best, accumulated_blue_histo);
-  for (iter = 0; iter < iters; ++iter) {
-    const int delta = delta_lut[iter];
-    int axis;
-    for (axis = 0; axis < kGreenRedToBlueNumAxis; ++axis) {
-      const int green_to_blue_cur =
-          offset[axis][0] * delta + green_to_blue_best;
-      const int red_to_blue_cur = offset[axis][1] * delta + red_to_blue_best;
-      const float cur_diff = GetPredictionCostCrossColorBlue(
-          argb, stride, tile_width, tile_height, prev_x, prev_y,
-          green_to_blue_cur, red_to_blue_cur, accumulated_blue_histo);
-      if (cur_diff < best_diff) {
-        best_diff = cur_diff;
-        green_to_blue_best = green_to_blue_cur;
-        red_to_blue_best = red_to_blue_cur;
-      }
-      if (quality < 25 && iter == 4) {
-        // Only axis aligned diffs for lower quality.
-        break;  // next iter.
-      }
-    }
-    if (delta == 2 && green_to_blue_best == 0 && red_to_blue_best == 0) {
-      // Further iterations would not help.
-      break;  // out of iter-loop.
-    }
-  }
-  best_tx->green_to_blue_ = green_to_blue_best;
-  best_tx->red_to_blue_ = red_to_blue_best;
-}
-#undef kGreenRedToBlueMaxIters
-#undef kGreenRedToBlueNumAxis
-
-static VP8LMultipliers GetBestColorTransformForTile(
-    int tile_x, int tile_y, int bits,
-    VP8LMultipliers prev_x,
-    VP8LMultipliers prev_y,
-    int quality, int xsize, int ysize,
-    const int accumulated_red_histo[256],
-    const int accumulated_blue_histo[256],
-    const uint32_t* const argb) {
-  const int max_tile_size = 1 << bits;
-  const int tile_y_offset = tile_y * max_tile_size;
-  const int tile_x_offset = tile_x * max_tile_size;
-  const int all_x_max = GetMin(tile_x_offset + max_tile_size, xsize);
-  const int all_y_max = GetMin(tile_y_offset + max_tile_size, ysize);
-  const int tile_width = all_x_max - tile_x_offset;
-  const int tile_height = all_y_max - tile_y_offset;
-  const uint32_t* const tile_argb = argb + tile_y_offset * xsize
-                                  + tile_x_offset;
-  VP8LMultipliers best_tx;
-  MultipliersClear(&best_tx);
-
-  GetBestGreenToRed(tile_argb, xsize, tile_width, tile_height,
-                    prev_x, prev_y, quality, accumulated_red_histo, &best_tx);
-  GetBestGreenRedToBlue(tile_argb, xsize, tile_width, tile_height,
-                        prev_x, prev_y, quality, accumulated_blue_histo,
-                        &best_tx);
-  return best_tx;
-}
-
-static void CopyTileWithColorTransform(int xsize, int ysize,
-                                       int tile_x, int tile_y,
-                                       int max_tile_size,
-                                       VP8LMultipliers color_transform,
-                                       uint32_t* argb) {
-  const int xscan = GetMin(max_tile_size, xsize - tile_x);
-  int yscan = GetMin(max_tile_size, ysize - tile_y);
-  argb += tile_y * xsize + tile_x;
-  while (yscan-- > 0) {
-    VP8LTransformColor(&color_transform, argb, xscan);
-    argb += xsize;
-  }
-}
-
-void VP8LColorSpaceTransform(int width, int height, int bits, int quality,
-                             uint32_t* const argb, uint32_t* image) {
-  const int max_tile_size = 1 << bits;
-  const int tile_xsize = VP8LSubSampleSize(width, bits);
-  const int tile_ysize = VP8LSubSampleSize(height, bits);
-  int accumulated_red_histo[256] = { 0 };
-  int accumulated_blue_histo[256] = { 0 };
-  int tile_x, tile_y;
-  VP8LMultipliers prev_x, prev_y;
-  MultipliersClear(&prev_y);
-  MultipliersClear(&prev_x);
-  for (tile_y = 0; tile_y < tile_ysize; ++tile_y) {
-    for (tile_x = 0; tile_x < tile_xsize; ++tile_x) {
-      int y;
-      const int tile_x_offset = tile_x * max_tile_size;
-      const int tile_y_offset = tile_y * max_tile_size;
-      const int all_x_max = GetMin(tile_x_offset + max_tile_size, width);
-      const int all_y_max = GetMin(tile_y_offset + max_tile_size, height);
-      const int offset = tile_y * tile_xsize + tile_x;
-      if (tile_y != 0) {
-        ColorCodeToMultipliers(image[offset - tile_xsize], &prev_y);
-      }
-      prev_x = GetBestColorTransformForTile(tile_x, tile_y, bits,
-                                            prev_x, prev_y,
-                                            quality, width, height,
-                                            accumulated_red_histo,
-                                            accumulated_blue_histo,
-                                            argb);
-      image[offset] = MultipliersToColorCode(&prev_x);
-      CopyTileWithColorTransform(width, height, tile_x_offset, tile_y_offset,
-                                 max_tile_size, prev_x, argb);
-
-      // Gather accumulated histogram data.
-      for (y = tile_y_offset; y < all_y_max; ++y) {
-        int ix = y * width + tile_x_offset;
-        const int ix_end = ix + all_x_max - tile_x_offset;
-        for (; ix < ix_end; ++ix) {
-          const uint32_t pix = argb[ix];
-          if (ix >= 2 &&
-              pix == argb[ix - 2] &&
-              pix == argb[ix - 1]) {
-            continue;  // repeated pixels are handled by backward references
-          }
-          if (ix >= width + 2 &&
-              argb[ix - 2] == argb[ix - width - 2] &&
-              argb[ix - 1] == argb[ix - width - 1] &&
-              pix == argb[ix - width]) {
-            continue;  // repeated pixels are handled by backward references
-          }
-          ++accumulated_red_histo[(pix >> 16) & 0xff];
-          ++accumulated_blue_histo[(pix >> 0) & 0xff];
-        }
-      }
-    }
-  }
-}
diff --git a/ios/Pods/libwebp/src/enc/quant_enc.c b/ios/Pods/libwebp/src/enc/quant_enc.c
deleted file mode 100644
index 03c682e..0000000
--- a/ios/Pods/libwebp/src/enc/quant_enc.c
+++ /dev/null
@@ -1,1358 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//   Quantization
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <math.h>
-#include <stdlib.h>  // for abs()
-
-#include "src/dsp/quant.h"
-#include "src/enc/vp8i_enc.h"
-#include "src/enc/cost_enc.h"
-
-#define DO_TRELLIS_I4  1
-#define DO_TRELLIS_I16 1   // not a huge gain, but ok at low bitrate.
-#define DO_TRELLIS_UV  0   // disable trellis for UV. Risky. Not worth.
-#define USE_TDISTO 1
-
-#define MID_ALPHA 64      // neutral value for susceptibility
-#define MIN_ALPHA 30      // lowest usable value for susceptibility
-#define MAX_ALPHA 100     // higher meaningful value for susceptibility
-
-#define SNS_TO_DQ 0.9     // Scaling constant between the sns value and the QP
-                          // power-law modulation. Must be strictly less than 1.
-
-// number of non-zero coeffs below which we consider the block very flat
-// (and apply a penalty to complex predictions)
-#define FLATNESS_LIMIT_I16 10      // I16 mode
-#define FLATNESS_LIMIT_I4  3       // I4 mode
-#define FLATNESS_LIMIT_UV  2       // UV mode
-#define FLATNESS_PENALTY   140     // roughly ~1bit per block
-
-#define MULT_8B(a, b) (((a) * (b) + 128) >> 8)
-
-#define RD_DISTO_MULT      256  // distortion multiplier (equivalent of lambda)
-
-// #define DEBUG_BLOCK
-
-//------------------------------------------------------------------------------
-
-#if defined(DEBUG_BLOCK)
-
-#include <stdio.h>
-#include <stdlib.h>
-
-static void PrintBlockInfo(const VP8EncIterator* const it,
-                           const VP8ModeScore* const rd) {
-  int i, j;
-  const int is_i16 = (it->mb_->type_ == 1);
-  const uint8_t* const y_in = it->yuv_in_ + Y_OFF_ENC;
-  const uint8_t* const y_out = it->yuv_out_ + Y_OFF_ENC;
-  const uint8_t* const uv_in = it->yuv_in_ + U_OFF_ENC;
-  const uint8_t* const uv_out = it->yuv_out_ + U_OFF_ENC;
-  printf("SOURCE / OUTPUT / ABS DELTA\n");
-  for (j = 0; j < 16; ++j) {
-    for (i = 0; i < 16; ++i) printf("%3d ", y_in[i + j * BPS]);
-    printf("     ");
-    for (i = 0; i < 16; ++i) printf("%3d ", y_out[i + j * BPS]);
-    printf("     ");
-    for (i = 0; i < 16; ++i) {
-      printf("%1d ", abs(y_in[i + j * BPS] - y_out[i + j * BPS]));
-    }
-    printf("\n");
-  }
-  printf("\n");   // newline before the U/V block
-  for (j = 0; j < 8; ++j) {
-    for (i = 0; i < 8; ++i) printf("%3d ", uv_in[i + j * BPS]);
-    printf(" ");
-    for (i = 8; i < 16; ++i) printf("%3d ", uv_in[i + j * BPS]);
-    printf("    ");
-    for (i = 0; i < 8; ++i) printf("%3d ", uv_out[i + j * BPS]);
-    printf(" ");
-    for (i = 8; i < 16; ++i) printf("%3d ", uv_out[i + j * BPS]);
-    printf("   ");
-    for (i = 0; i < 8; ++i) {
-      printf("%1d ", abs(uv_out[i + j * BPS] - uv_in[i + j * BPS]));
-    }
-    printf(" ");
-    for (i = 8; i < 16; ++i) {
-      printf("%1d ", abs(uv_out[i + j * BPS] - uv_in[i + j * BPS]));
-    }
-    printf("\n");
-  }
-  printf("\nD:%d SD:%d R:%d H:%d nz:0x%x score:%d\n",
-    (int)rd->D, (int)rd->SD, (int)rd->R, (int)rd->H, (int)rd->nz,
-    (int)rd->score);
-  if (is_i16) {
-    printf("Mode: %d\n", rd->mode_i16);
-    printf("y_dc_levels:");
-    for (i = 0; i < 16; ++i) printf("%3d ", rd->y_dc_levels[i]);
-    printf("\n");
-  } else {
-    printf("Modes[16]: ");
-    for (i = 0; i < 16; ++i) printf("%d ", rd->modes_i4[i]);
-    printf("\n");
-  }
-  printf("y_ac_levels:\n");
-  for (j = 0; j < 16; ++j) {
-    for (i = is_i16 ? 1 : 0; i < 16; ++i) {
-      printf("%4d ", rd->y_ac_levels[j][i]);
-    }
-    printf("\n");
-  }
-  printf("\n");
-  printf("uv_levels (mode=%d):\n", rd->mode_uv);
-  for (j = 0; j < 8; ++j) {
-    for (i = 0; i < 16; ++i) {
-      printf("%4d ", rd->uv_levels[j][i]);
-    }
-    printf("\n");
-  }
-}
-
-#endif   // DEBUG_BLOCK
-
-//------------------------------------------------------------------------------
-
-static WEBP_INLINE int clip(int v, int m, int M) {
-  return v < m ? m : v > M ? M : v;
-}
-
-static const uint8_t kZigzag[16] = {
-  0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15
-};
-
-static const uint8_t kDcTable[128] = {
-  4,     5,   6,   7,   8,   9,  10,  10,
-  11,   12,  13,  14,  15,  16,  17,  17,
-  18,   19,  20,  20,  21,  21,  22,  22,
-  23,   23,  24,  25,  25,  26,  27,  28,
-  29,   30,  31,  32,  33,  34,  35,  36,
-  37,   37,  38,  39,  40,  41,  42,  43,
-  44,   45,  46,  46,  47,  48,  49,  50,
-  51,   52,  53,  54,  55,  56,  57,  58,
-  59,   60,  61,  62,  63,  64,  65,  66,
-  67,   68,  69,  70,  71,  72,  73,  74,
-  75,   76,  76,  77,  78,  79,  80,  81,
-  82,   83,  84,  85,  86,  87,  88,  89,
-  91,   93,  95,  96,  98, 100, 101, 102,
-  104, 106, 108, 110, 112, 114, 116, 118,
-  122, 124, 126, 128, 130, 132, 134, 136,
-  138, 140, 143, 145, 148, 151, 154, 157
-};
-
-static const uint16_t kAcTable[128] = {
-  4,     5,   6,   7,   8,   9,  10,  11,
-  12,   13,  14,  15,  16,  17,  18,  19,
-  20,   21,  22,  23,  24,  25,  26,  27,
-  28,   29,  30,  31,  32,  33,  34,  35,
-  36,   37,  38,  39,  40,  41,  42,  43,
-  44,   45,  46,  47,  48,  49,  50,  51,
-  52,   53,  54,  55,  56,  57,  58,  60,
-  62,   64,  66,  68,  70,  72,  74,  76,
-  78,   80,  82,  84,  86,  88,  90,  92,
-  94,   96,  98, 100, 102, 104, 106, 108,
-  110, 112, 114, 116, 119, 122, 125, 128,
-  131, 134, 137, 140, 143, 146, 149, 152,
-  155, 158, 161, 164, 167, 170, 173, 177,
-  181, 185, 189, 193, 197, 201, 205, 209,
-  213, 217, 221, 225, 229, 234, 239, 245,
-  249, 254, 259, 264, 269, 274, 279, 284
-};
-
-static const uint16_t kAcTable2[128] = {
-  8,     8,   9,  10,  12,  13,  15,  17,
-  18,   20,  21,  23,  24,  26,  27,  29,
-  31,   32,  34,  35,  37,  38,  40,  41,
-  43,   44,  46,  48,  49,  51,  52,  54,
-  55,   57,  58,  60,  62,  63,  65,  66,
-  68,   69,  71,  72,  74,  75,  77,  79,
-  80,   82,  83,  85,  86,  88,  89,  93,
-  96,   99, 102, 105, 108, 111, 114, 117,
-  120, 124, 127, 130, 133, 136, 139, 142,
-  145, 148, 151, 155, 158, 161, 164, 167,
-  170, 173, 176, 179, 184, 189, 193, 198,
-  203, 207, 212, 217, 221, 226, 230, 235,
-  240, 244, 249, 254, 258, 263, 268, 274,
-  280, 286, 292, 299, 305, 311, 317, 323,
-  330, 336, 342, 348, 354, 362, 370, 379,
-  385, 393, 401, 409, 416, 424, 432, 440
-};
-
-static const uint8_t kBiasMatrices[3][2] = {  // [luma-ac,luma-dc,chroma][dc,ac]
-  { 96, 110 }, { 96, 108 }, { 110, 115 }
-};
-
-// Sharpening by (slightly) raising the hi-frequency coeffs.
-// Hack-ish but helpful for mid-bitrate range. Use with care.
-#define SHARPEN_BITS 11  // number of descaling bits for sharpening bias
-static const uint8_t kFreqSharpening[16] = {
-  0,  30, 60, 90,
-  30, 60, 90, 90,
-  60, 90, 90, 90,
-  90, 90, 90, 90
-};
-
-//------------------------------------------------------------------------------
-// Initialize quantization parameters in VP8Matrix
-
-// Returns the average quantizer
-static int ExpandMatrix(VP8Matrix* const m, int type) {
-  int i, sum;
-  for (i = 0; i < 2; ++i) {
-    const int is_ac_coeff = (i > 0);
-    const int bias = kBiasMatrices[type][is_ac_coeff];
-    m->iq_[i] = (1 << QFIX) / m->q_[i];
-    m->bias_[i] = BIAS(bias);
-    // zthresh_ is the exact value such that QUANTDIV(coeff, iQ, B) is:
-    //   * zero if coeff <= zthresh
-    //   * non-zero if coeff > zthresh
-    m->zthresh_[i] = ((1 << QFIX) - 1 - m->bias_[i]) / m->iq_[i];
-  }
-  for (i = 2; i < 16; ++i) {
-    m->q_[i] = m->q_[1];
-    m->iq_[i] = m->iq_[1];
-    m->bias_[i] = m->bias_[1];
-    m->zthresh_[i] = m->zthresh_[1];
-  }
-  for (sum = 0, i = 0; i < 16; ++i) {
-    if (type == 0) {  // we only use sharpening for AC luma coeffs
-      m->sharpen_[i] = (kFreqSharpening[i] * m->q_[i]) >> SHARPEN_BITS;
-    } else {
-      m->sharpen_[i] = 0;
-    }
-    sum += m->q_[i];
-  }
-  return (sum + 8) >> 4;
-}
-
-static void CheckLambdaValue(int* const v) { if (*v < 1) *v = 1; }
-
-static void SetupMatrices(VP8Encoder* enc) {
-  int i;
-  const int tlambda_scale =
-    (enc->method_ >= 4) ? enc->config_->sns_strength
-                        : 0;
-  const int num_segments = enc->segment_hdr_.num_segments_;
-  for (i = 0; i < num_segments; ++i) {
-    VP8SegmentInfo* const m = &enc->dqm_[i];
-    const int q = m->quant_;
-    int q_i4, q_i16, q_uv;
-    m->y1_.q_[0] = kDcTable[clip(q + enc->dq_y1_dc_, 0, 127)];
-    m->y1_.q_[1] = kAcTable[clip(q,                  0, 127)];
-
-    m->y2_.q_[0] = kDcTable[ clip(q + enc->dq_y2_dc_, 0, 127)] * 2;
-    m->y2_.q_[1] = kAcTable2[clip(q + enc->dq_y2_ac_, 0, 127)];
-
-    m->uv_.q_[0] = kDcTable[clip(q + enc->dq_uv_dc_, 0, 117)];
-    m->uv_.q_[1] = kAcTable[clip(q + enc->dq_uv_ac_, 0, 127)];
-
-    q_i4  = ExpandMatrix(&m->y1_, 0);
-    q_i16 = ExpandMatrix(&m->y2_, 1);
-    q_uv  = ExpandMatrix(&m->uv_, 2);
-
-    m->lambda_i4_          = (3 * q_i4 * q_i4) >> 7;
-    m->lambda_i16_         = (3 * q_i16 * q_i16);
-    m->lambda_uv_          = (3 * q_uv * q_uv) >> 6;
-    m->lambda_mode_        = (1 * q_i4 * q_i4) >> 7;
-    m->lambda_trellis_i4_  = (7 * q_i4 * q_i4) >> 3;
-    m->lambda_trellis_i16_ = (q_i16 * q_i16) >> 2;
-    m->lambda_trellis_uv_  = (q_uv * q_uv) << 1;
-    m->tlambda_            = (tlambda_scale * q_i4) >> 5;
-
-    // none of these constants should be < 1
-    CheckLambdaValue(&m->lambda_i4_);
-    CheckLambdaValue(&m->lambda_i16_);
-    CheckLambdaValue(&m->lambda_uv_);
-    CheckLambdaValue(&m->lambda_mode_);
-    CheckLambdaValue(&m->lambda_trellis_i4_);
-    CheckLambdaValue(&m->lambda_trellis_i16_);
-    CheckLambdaValue(&m->lambda_trellis_uv_);
-    CheckLambdaValue(&m->tlambda_);
-
-    m->min_disto_ = 20 * m->y1_.q_[0];   // quantization-aware min disto
-    m->max_edge_  = 0;
-
-    m->i4_penalty_ = 1000 * q_i4 * q_i4;
-  }
-}
-
-//------------------------------------------------------------------------------
-// Initialize filtering parameters
-
-// Very small filter-strength values have close to no visual effect. So we can
-// save a little decoding-CPU by turning filtering off for these.
-#define FSTRENGTH_CUTOFF 2
-
-static void SetupFilterStrength(VP8Encoder* const enc) {
-  int i;
-  // level0 is in [0..500]. Using '-f 50' as filter_strength is mid-filtering.
-  const int level0 = 5 * enc->config_->filter_strength;
-  for (i = 0; i < NUM_MB_SEGMENTS; ++i) {
-    VP8SegmentInfo* const m = &enc->dqm_[i];
-    // We focus on the quantization of AC coeffs.
-    const int qstep = kAcTable[clip(m->quant_, 0, 127)] >> 2;
-    const int base_strength =
-        VP8FilterStrengthFromDelta(enc->filter_hdr_.sharpness_, qstep);
-    // Segments with lower complexity ('beta') will be less filtered.
-    const int f = base_strength * level0 / (256 + m->beta_);
-    m->fstrength_ = (f < FSTRENGTH_CUTOFF) ? 0 : (f > 63) ? 63 : f;
-  }
-  // We record the initial strength (mainly for the case of 1-segment only).
-  enc->filter_hdr_.level_ = enc->dqm_[0].fstrength_;
-  enc->filter_hdr_.simple_ = (enc->config_->filter_type == 0);
-  enc->filter_hdr_.sharpness_ = enc->config_->filter_sharpness;
-}
-
-//------------------------------------------------------------------------------
-
-// Note: if you change the values below, remember that the max range
-// allowed by the syntax for DQ_UV is [-16,16].
-#define MAX_DQ_UV (6)
-#define MIN_DQ_UV (-4)
-
-// We want to emulate jpeg-like behaviour where the expected "good" quality
-// is around q=75. Internally, our "good" middle is around c=50. So we
-// map accordingly using linear piece-wise function
-static double QualityToCompression(double c) {
-  const double linear_c = (c < 0.75) ? c * (2. / 3.) : 2. * c - 1.;
-  // The file size roughly scales as pow(quantizer, 3.). Actually, the
-  // exponent is somewhere between 2.8 and 3.2, but we're mostly interested
-  // in the mid-quant range. So we scale the compressibility inversely to
-  // this power-law: quant ~= compression ^ 1/3. This law holds well for
-  // low quant. Finer modeling for high-quant would make use of kAcTable[]
-  // more explicitly.
-  const double v = pow(linear_c, 1 / 3.);
-  return v;
-}
-
-static double QualityToJPEGCompression(double c, double alpha) {
-  // We map the complexity 'alpha' and quality setting 'c' to a compression
-  // exponent empirically matched to the compression curve of libjpeg6b.
-  // On average, the WebP output size will be roughly similar to that of a
-  // JPEG file compressed with same quality factor.
-  const double amin = 0.30;
-  const double amax = 0.85;
-  const double exp_min = 0.4;
-  const double exp_max = 0.9;
-  const double slope = (exp_min - exp_max) / (amax - amin);
-  // Linearly interpolate 'expn' from exp_min to exp_max
-  // in the [amin, amax] range.
-  const double expn = (alpha > amax) ? exp_min
-                    : (alpha < amin) ? exp_max
-                    : exp_max + slope * (alpha - amin);
-  const double v = pow(c, expn);
-  return v;
-}
-
-static int SegmentsAreEquivalent(const VP8SegmentInfo* const S1,
-                                 const VP8SegmentInfo* const S2) {
-  return (S1->quant_ == S2->quant_) && (S1->fstrength_ == S2->fstrength_);
-}
-
-static void SimplifySegments(VP8Encoder* const enc) {
-  int map[NUM_MB_SEGMENTS] = { 0, 1, 2, 3 };
-  // 'num_segments_' is previously validated and <= NUM_MB_SEGMENTS, but an
-  // explicit check is needed to avoid a spurious warning about 'i' exceeding
-  // array bounds of 'dqm_' with some compilers (noticed with gcc-4.9).
-  const int num_segments = (enc->segment_hdr_.num_segments_ < NUM_MB_SEGMENTS)
-                               ? enc->segment_hdr_.num_segments_
-                               : NUM_MB_SEGMENTS;
-  int num_final_segments = 1;
-  int s1, s2;
-  for (s1 = 1; s1 < num_segments; ++s1) {    // find similar segments
-    const VP8SegmentInfo* const S1 = &enc->dqm_[s1];
-    int found = 0;
-    // check if we already have similar segment
-    for (s2 = 0; s2 < num_final_segments; ++s2) {
-      const VP8SegmentInfo* const S2 = &enc->dqm_[s2];
-      if (SegmentsAreEquivalent(S1, S2)) {
-        found = 1;
-        break;
-      }
-    }
-    map[s1] = s2;
-    if (!found) {
-      if (num_final_segments != s1) {
-        enc->dqm_[num_final_segments] = enc->dqm_[s1];
-      }
-      ++num_final_segments;
-    }
-  }
-  if (num_final_segments < num_segments) {  // Remap
-    int i = enc->mb_w_ * enc->mb_h_;
-    while (i-- > 0) enc->mb_info_[i].segment_ = map[enc->mb_info_[i].segment_];
-    enc->segment_hdr_.num_segments_ = num_final_segments;
-    // Replicate the trailing segment infos (it's mostly cosmetics)
-    for (i = num_final_segments; i < num_segments; ++i) {
-      enc->dqm_[i] = enc->dqm_[num_final_segments - 1];
-    }
-  }
-}
-
-void VP8SetSegmentParams(VP8Encoder* const enc, float quality) {
-  int i;
-  int dq_uv_ac, dq_uv_dc;
-  const int num_segments = enc->segment_hdr_.num_segments_;
-  const double amp = SNS_TO_DQ * enc->config_->sns_strength / 100. / 128.;
-  const double Q = quality / 100.;
-  const double c_base = enc->config_->emulate_jpeg_size ?
-      QualityToJPEGCompression(Q, enc->alpha_ / 255.) :
-      QualityToCompression(Q);
-  for (i = 0; i < num_segments; ++i) {
-    // We modulate the base coefficient to accommodate for the quantization
-    // susceptibility and allow denser segments to be quantized more.
-    const double expn = 1. - amp * enc->dqm_[i].alpha_;
-    const double c = pow(c_base, expn);
-    const int q = (int)(127. * (1. - c));
-    assert(expn > 0.);
-    enc->dqm_[i].quant_ = clip(q, 0, 127);
-  }
-
-  // purely indicative in the bitstream (except for the 1-segment case)
-  enc->base_quant_ = enc->dqm_[0].quant_;
-
-  // fill-in values for the unused segments (required by the syntax)
-  for (i = num_segments; i < NUM_MB_SEGMENTS; ++i) {
-    enc->dqm_[i].quant_ = enc->base_quant_;
-  }
-
-  // uv_alpha_ is normally spread around ~60. The useful range is
-  // typically ~30 (quite bad) to ~100 (ok to decimate UV more).
-  // We map it to the safe maximal range of MAX/MIN_DQ_UV for dq_uv.
-  dq_uv_ac = (enc->uv_alpha_ - MID_ALPHA) * (MAX_DQ_UV - MIN_DQ_UV)
-                                          / (MAX_ALPHA - MIN_ALPHA);
-  // we rescale by the user-defined strength of adaptation
-  dq_uv_ac = dq_uv_ac * enc->config_->sns_strength / 100;
-  // and make it safe.
-  dq_uv_ac = clip(dq_uv_ac, MIN_DQ_UV, MAX_DQ_UV);
-  // We also boost the dc-uv-quant a little, based on sns-strength, since
-  // U/V channels are quite more reactive to high quants (flat DC-blocks
-  // tend to appear, and are unpleasant).
-  dq_uv_dc = -4 * enc->config_->sns_strength / 100;
-  dq_uv_dc = clip(dq_uv_dc, -15, 15);   // 4bit-signed max allowed
-
-  enc->dq_y1_dc_ = 0;       // TODO(skal): dq-lum
-  enc->dq_y2_dc_ = 0;
-  enc->dq_y2_ac_ = 0;
-  enc->dq_uv_dc_ = dq_uv_dc;
-  enc->dq_uv_ac_ = dq_uv_ac;
-
-  SetupFilterStrength(enc);   // initialize segments' filtering, eventually
-
-  if (num_segments > 1) SimplifySegments(enc);
-
-  SetupMatrices(enc);         // finalize quantization matrices
-}
-
-//------------------------------------------------------------------------------
-// Form the predictions in cache
-
-// Must be ordered using {DC_PRED, TM_PRED, V_PRED, H_PRED} as index
-const uint16_t VP8I16ModeOffsets[4] = { I16DC16, I16TM16, I16VE16, I16HE16 };
-const uint16_t VP8UVModeOffsets[4] = { C8DC8, C8TM8, C8VE8, C8HE8 };
-
-// Must be indexed using {B_DC_PRED -> B_HU_PRED} as index
-const uint16_t VP8I4ModeOffsets[NUM_BMODES] = {
-  I4DC4, I4TM4, I4VE4, I4HE4, I4RD4, I4VR4, I4LD4, I4VL4, I4HD4, I4HU4
-};
-
-void VP8MakeLuma16Preds(const VP8EncIterator* const it) {
-  const uint8_t* const left = it->x_ ? it->y_left_ : NULL;
-  const uint8_t* const top = it->y_ ? it->y_top_ : NULL;
-  VP8EncPredLuma16(it->yuv_p_, left, top);
-}
-
-void VP8MakeChroma8Preds(const VP8EncIterator* const it) {
-  const uint8_t* const left = it->x_ ? it->u_left_ : NULL;
-  const uint8_t* const top = it->y_ ? it->uv_top_ : NULL;
-  VP8EncPredChroma8(it->yuv_p_, left, top);
-}
-
-void VP8MakeIntra4Preds(const VP8EncIterator* const it) {
-  VP8EncPredLuma4(it->yuv_p_, it->i4_top_);
-}
-
-//------------------------------------------------------------------------------
-// Quantize
-
-// Layout:
-// +----+----+
-// |YYYY|UUVV| 0
-// |YYYY|UUVV| 4
-// |YYYY|....| 8
-// |YYYY|....| 12
-// +----+----+
-
-const uint16_t VP8Scan[16] = {  // Luma
-  0 +  0 * BPS,  4 +  0 * BPS, 8 +  0 * BPS, 12 +  0 * BPS,
-  0 +  4 * BPS,  4 +  4 * BPS, 8 +  4 * BPS, 12 +  4 * BPS,
-  0 +  8 * BPS,  4 +  8 * BPS, 8 +  8 * BPS, 12 +  8 * BPS,
-  0 + 12 * BPS,  4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS,
-};
-
-static const uint16_t VP8ScanUV[4 + 4] = {
-  0 + 0 * BPS,   4 + 0 * BPS, 0 + 4 * BPS,  4 + 4 * BPS,    // U
-  8 + 0 * BPS,  12 + 0 * BPS, 8 + 4 * BPS, 12 + 4 * BPS     // V
-};
-
-//------------------------------------------------------------------------------
-// Distortion measurement
-
-static const uint16_t kWeightY[16] = {
-  38, 32, 20, 9, 32, 28, 17, 7, 20, 17, 10, 4, 9, 7, 4, 2
-};
-
-static const uint16_t kWeightTrellis[16] = {
-#if USE_TDISTO == 0
-  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
-#else
-  30, 27, 19, 11,
-  27, 24, 17, 10,
-  19, 17, 12,  8,
-  11, 10,  8,  6
-#endif
-};
-
-// Init/Copy the common fields in score.
-static void InitScore(VP8ModeScore* const rd) {
-  rd->D  = 0;
-  rd->SD = 0;
-  rd->R  = 0;
-  rd->H  = 0;
-  rd->nz = 0;
-  rd->score = MAX_COST;
-}
-
-static void CopyScore(VP8ModeScore* const dst, const VP8ModeScore* const src) {
-  dst->D  = src->D;
-  dst->SD = src->SD;
-  dst->R  = src->R;
-  dst->H  = src->H;
-  dst->nz = src->nz;      // note that nz is not accumulated, but just copied.
-  dst->score = src->score;
-}
-
-static void AddScore(VP8ModeScore* const dst, const VP8ModeScore* const src) {
-  dst->D  += src->D;
-  dst->SD += src->SD;
-  dst->R  += src->R;
-  dst->H  += src->H;
-  dst->nz |= src->nz;     // here, new nz bits are accumulated.
-  dst->score += src->score;
-}
-
-//------------------------------------------------------------------------------
-// Performs trellis-optimized quantization.
-
-// Trellis node
-typedef struct {
-  int8_t prev;            // best previous node
-  int8_t sign;            // sign of coeff_i
-  int16_t level;          // level
-} Node;
-
-// Score state
-typedef struct {
-  score_t score;          // partial RD score
-  const uint16_t* costs;  // shortcut to cost tables
-} ScoreState;
-
-// If a coefficient was quantized to a value Q (using a neutral bias),
-// we test all alternate possibilities between [Q-MIN_DELTA, Q+MAX_DELTA]
-// We don't test negative values though.
-#define MIN_DELTA 0   // how much lower level to try
-#define MAX_DELTA 1   // how much higher
-#define NUM_NODES (MIN_DELTA + 1 + MAX_DELTA)
-#define NODE(n, l) (nodes[(n)][(l) + MIN_DELTA])
-#define SCORE_STATE(n, l) (score_states[n][(l) + MIN_DELTA])
-
-static WEBP_INLINE void SetRDScore(int lambda, VP8ModeScore* const rd) {
-  rd->score = (rd->R + rd->H) * lambda + RD_DISTO_MULT * (rd->D + rd->SD);
-}
-
-static WEBP_INLINE score_t RDScoreTrellis(int lambda, score_t rate,
-                                          score_t distortion) {
-  return rate * lambda + RD_DISTO_MULT * distortion;
-}
-
-static int TrellisQuantizeBlock(const VP8Encoder* const enc,
-                                int16_t in[16], int16_t out[16],
-                                int ctx0, int coeff_type,
-                                const VP8Matrix* const mtx,
-                                int lambda) {
-  const ProbaArray* const probas = enc->proba_.coeffs_[coeff_type];
-  CostArrayPtr const costs =
-      (CostArrayPtr)enc->proba_.remapped_costs_[coeff_type];
-  const int first = (coeff_type == 0) ? 1 : 0;
-  Node nodes[16][NUM_NODES];
-  ScoreState score_states[2][NUM_NODES];
-  ScoreState* ss_cur = &SCORE_STATE(0, MIN_DELTA);
-  ScoreState* ss_prev = &SCORE_STATE(1, MIN_DELTA);
-  int best_path[3] = {-1, -1, -1};   // store best-last/best-level/best-previous
-  score_t best_score;
-  int n, m, p, last;
-
-  {
-    score_t cost;
-    const int thresh = mtx->q_[1] * mtx->q_[1] / 4;
-    const int last_proba = probas[VP8EncBands[first]][ctx0][0];
-
-    // compute the position of the last interesting coefficient
-    last = first - 1;
-    for (n = 15; n >= first; --n) {
-      const int j = kZigzag[n];
-      const int err = in[j] * in[j];
-      if (err > thresh) {
-        last = n;
-        break;
-      }
-    }
-    // we don't need to go inspect up to n = 16 coeffs. We can just go up
-    // to last + 1 (inclusive) without losing much.
-    if (last < 15) ++last;
-
-    // compute 'skip' score. This is the max score one can do.
-    cost = VP8BitCost(0, last_proba);
-    best_score = RDScoreTrellis(lambda, cost, 0);
-
-    // initialize source node.
-    for (m = -MIN_DELTA; m <= MAX_DELTA; ++m) {
-      const score_t rate = (ctx0 == 0) ? VP8BitCost(1, last_proba) : 0;
-      ss_cur[m].score = RDScoreTrellis(lambda, rate, 0);
-      ss_cur[m].costs = costs[first][ctx0];
-    }
-  }
-
-  // traverse trellis.
-  for (n = first; n <= last; ++n) {
-    const int j = kZigzag[n];
-    const uint32_t Q  = mtx->q_[j];
-    const uint32_t iQ = mtx->iq_[j];
-    const uint32_t B = BIAS(0x00);     // neutral bias
-    // note: it's important to take sign of the _original_ coeff,
-    // so we don't have to consider level < 0 afterward.
-    const int sign = (in[j] < 0);
-    const uint32_t coeff0 = (sign ? -in[j] : in[j]) + mtx->sharpen_[j];
-    int level0 = QUANTDIV(coeff0, iQ, B);
-    int thresh_level = QUANTDIV(coeff0, iQ, BIAS(0x80));
-    if (thresh_level > MAX_LEVEL) thresh_level = MAX_LEVEL;
-    if (level0 > MAX_LEVEL) level0 = MAX_LEVEL;
-
-    {   // Swap current and previous score states
-      ScoreState* const tmp = ss_cur;
-      ss_cur = ss_prev;
-      ss_prev = tmp;
-    }
-
-    // test all alternate level values around level0.
-    for (m = -MIN_DELTA; m <= MAX_DELTA; ++m) {
-      Node* const cur = &NODE(n, m);
-      int level = level0 + m;
-      const int ctx = (level > 2) ? 2 : level;
-      const int band = VP8EncBands[n + 1];
-      score_t base_score;
-      score_t best_cur_score = MAX_COST;
-      int best_prev = 0;   // default, in case
-
-      ss_cur[m].score = MAX_COST;
-      ss_cur[m].costs = costs[n + 1][ctx];
-      if (level < 0 || level > thresh_level) {
-        // Node is dead.
-        continue;
-      }
-
-      {
-        // Compute delta_error = how much coding this level will
-        // subtract to max_error as distortion.
-        // Here, distortion = sum of (|coeff_i| - level_i * Q_i)^2
-        const int new_error = coeff0 - level * Q;
-        const int delta_error =
-            kWeightTrellis[j] * (new_error * new_error - coeff0 * coeff0);
-        base_score = RDScoreTrellis(lambda, 0, delta_error);
-      }
-
-      // Inspect all possible non-dead predecessors. Retain only the best one.
-      for (p = -MIN_DELTA; p <= MAX_DELTA; ++p) {
-        // Dead nodes (with ss_prev[p].score >= MAX_COST) are automatically
-        // eliminated since their score can't be better than the current best.
-        const score_t cost = VP8LevelCost(ss_prev[p].costs, level);
-        // Examine node assuming it's a non-terminal one.
-        const score_t score =
-            base_score + ss_prev[p].score + RDScoreTrellis(lambda, cost, 0);
-        if (score < best_cur_score) {
-          best_cur_score = score;
-          best_prev = p;
-        }
-      }
-      // Store best finding in current node.
-      cur->sign = sign;
-      cur->level = level;
-      cur->prev = best_prev;
-      ss_cur[m].score = best_cur_score;
-
-      // Now, record best terminal node (and thus best entry in the graph).
-      if (level != 0) {
-        const score_t last_pos_cost =
-            (n < 15) ? VP8BitCost(0, probas[band][ctx][0]) : 0;
-        const score_t last_pos_score = RDScoreTrellis(lambda, last_pos_cost, 0);
-        const score_t score = best_cur_score + last_pos_score;
-        if (score < best_score) {
-          best_score = score;
-          best_path[0] = n;                     // best eob position
-          best_path[1] = m;                     // best node index
-          best_path[2] = best_prev;             // best predecessor
-        }
-      }
-    }
-  }
-
-  // Fresh start
-  memset(in + first, 0, (16 - first) * sizeof(*in));
-  memset(out + first, 0, (16 - first) * sizeof(*out));
-  if (best_path[0] == -1) {
-    return 0;   // skip!
-  }
-
-  {
-    // Unwind the best path.
-    // Note: best-prev on terminal node is not necessarily equal to the
-    // best_prev for non-terminal. So we patch best_path[2] in.
-    int nz = 0;
-    int best_node = best_path[1];
-    n = best_path[0];
-    NODE(n, best_node).prev = best_path[2];   // force best-prev for terminal
-
-    for (; n >= first; --n) {
-      const Node* const node = &NODE(n, best_node);
-      const int j = kZigzag[n];
-      out[n] = node->sign ? -node->level : node->level;
-      nz |= node->level;
-      in[j] = out[n] * mtx->q_[j];
-      best_node = node->prev;
-    }
-    return (nz != 0);
-  }
-}
-
-#undef NODE
-
-//------------------------------------------------------------------------------
-// Performs: difference, transform, quantize, back-transform, add
-// all at once. Output is the reconstructed block in *yuv_out, and the
-// quantized levels in *levels.
-
-static int ReconstructIntra16(VP8EncIterator* const it,
-                              VP8ModeScore* const rd,
-                              uint8_t* const yuv_out,
-                              int mode) {
-  const VP8Encoder* const enc = it->enc_;
-  const uint8_t* const ref = it->yuv_p_ + VP8I16ModeOffsets[mode];
-  const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC;
-  const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_];
-  int nz = 0;
-  int n;
-  int16_t tmp[16][16], dc_tmp[16];
-
-  for (n = 0; n < 16; n += 2) {
-    VP8FTransform2(src + VP8Scan[n], ref + VP8Scan[n], tmp[n]);
-  }
-  VP8FTransformWHT(tmp[0], dc_tmp);
-  nz |= VP8EncQuantizeBlockWHT(dc_tmp, rd->y_dc_levels, &dqm->y2_) << 24;
-
-  if (DO_TRELLIS_I16 && it->do_trellis_) {
-    int x, y;
-    VP8IteratorNzToBytes(it);
-    for (y = 0, n = 0; y < 4; ++y) {
-      for (x = 0; x < 4; ++x, ++n) {
-        const int ctx = it->top_nz_[x] + it->left_nz_[y];
-        const int non_zero =
-            TrellisQuantizeBlock(enc, tmp[n], rd->y_ac_levels[n], ctx, 0,
-                                 &dqm->y1_, dqm->lambda_trellis_i16_);
-        it->top_nz_[x] = it->left_nz_[y] = non_zero;
-        rd->y_ac_levels[n][0] = 0;
-        nz |= non_zero << n;
-      }
-    }
-  } else {
-    for (n = 0; n < 16; n += 2) {
-      // Zero-out the first coeff, so that: a) nz is correct below, and
-      // b) finding 'last' non-zero coeffs in SetResidualCoeffs() is simplified.
-      tmp[n][0] = tmp[n + 1][0] = 0;
-      nz |= VP8EncQuantize2Blocks(tmp[n], rd->y_ac_levels[n], &dqm->y1_) << n;
-      assert(rd->y_ac_levels[n + 0][0] == 0);
-      assert(rd->y_ac_levels[n + 1][0] == 0);
-    }
-  }
-
-  // Transform back
-  VP8TransformWHT(dc_tmp, tmp[0]);
-  for (n = 0; n < 16; n += 2) {
-    VP8ITransform(ref + VP8Scan[n], tmp[n], yuv_out + VP8Scan[n], 1);
-  }
-
-  return nz;
-}
-
-static int ReconstructIntra4(VP8EncIterator* const it,
-                             int16_t levels[16],
-                             const uint8_t* const src,
-                             uint8_t* const yuv_out,
-                             int mode) {
-  const VP8Encoder* const enc = it->enc_;
-  const uint8_t* const ref = it->yuv_p_ + VP8I4ModeOffsets[mode];
-  const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_];
-  int nz = 0;
-  int16_t tmp[16];
-
-  VP8FTransform(src, ref, tmp);
-  if (DO_TRELLIS_I4 && it->do_trellis_) {
-    const int x = it->i4_ & 3, y = it->i4_ >> 2;
-    const int ctx = it->top_nz_[x] + it->left_nz_[y];
-    nz = TrellisQuantizeBlock(enc, tmp, levels, ctx, 3, &dqm->y1_,
-                              dqm->lambda_trellis_i4_);
-  } else {
-    nz = VP8EncQuantizeBlock(tmp, levels, &dqm->y1_);
-  }
-  VP8ITransform(ref, tmp, yuv_out, 0);
-  return nz;
-}
-
-//------------------------------------------------------------------------------
-// DC-error diffusion
-
-// Diffusion weights. We under-correct a bit (15/16th of the error is actually
-// diffused) to avoid 'rainbow' chessboard pattern of blocks at q~=0.
-#define C1 7    // fraction of error sent to the 4x4 block below
-#define C2 8    // fraction of error sent to the 4x4 block on the right
-#define DSHIFT 4
-#define DSCALE 1   // storage descaling, needed to make the error fit int8_t
-
-// Quantize as usual, but also compute and return the quantization error.
-// Error is already divided by DSHIFT.
-static int QuantizeSingle(int16_t* const v, const VP8Matrix* const mtx) {
-  int V = *v;
-  const int sign = (V < 0);
-  if (sign) V = -V;
-  if (V > (int)mtx->zthresh_[0]) {
-    const int qV = QUANTDIV(V, mtx->iq_[0], mtx->bias_[0]) * mtx->q_[0];
-    const int err = (V - qV);
-    *v = sign ? -qV : qV;
-    return (sign ? -err : err) >> DSCALE;
-  }
-  *v = 0;
-  return (sign ? -V : V) >> DSCALE;
-}
-
-static void CorrectDCValues(const VP8EncIterator* const it,
-                            const VP8Matrix* const mtx,
-                            int16_t tmp[][16], VP8ModeScore* const rd) {
-  //         | top[0] | top[1]
-  // --------+--------+---------
-  // left[0] | tmp[0]   tmp[1]  <->   err0 err1
-  // left[1] | tmp[2]   tmp[3]        err2 err3
-  //
-  // Final errors {err1,err2,err3} are preserved and later restored
-  // as top[]/left[] on the next block.
-  int ch;
-  for (ch = 0; ch <= 1; ++ch) {
-    const int8_t* const top = it->top_derr_[it->x_][ch];
-    const int8_t* const left = it->left_derr_[ch];
-    int16_t (* const c)[16] = &tmp[ch * 4];
-    int err0, err1, err2, err3;
-    c[0][0] += (C1 * top[0] + C2 * left[0]) >> (DSHIFT - DSCALE);
-    err0 = QuantizeSingle(&c[0][0], mtx);
-    c[1][0] += (C1 * top[1] + C2 * err0) >> (DSHIFT - DSCALE);
-    err1 = QuantizeSingle(&c[1][0], mtx);
-    c[2][0] += (C1 * err0 + C2 * left[1]) >> (DSHIFT - DSCALE);
-    err2 = QuantizeSingle(&c[2][0], mtx);
-    c[3][0] += (C1 * err1 + C2 * err2) >> (DSHIFT - DSCALE);
-    err3 = QuantizeSingle(&c[3][0], mtx);
-    // error 'err' is bounded by mtx->q_[0] which is 132 at max. Hence
-    // err >> DSCALE will fit in an int8_t type if DSCALE>=1.
-    assert(abs(err1) <= 127 && abs(err2) <= 127 && abs(err3) <= 127);
-    rd->derr[ch][0] = (int8_t)err1;
-    rd->derr[ch][1] = (int8_t)err2;
-    rd->derr[ch][2] = (int8_t)err3;
-  }
-}
-
-static void StoreDiffusionErrors(VP8EncIterator* const it,
-                                 const VP8ModeScore* const rd) {
-  int ch;
-  for (ch = 0; ch <= 1; ++ch) {
-    int8_t* const top = it->top_derr_[it->x_][ch];
-    int8_t* const left = it->left_derr_[ch];
-    left[0] = rd->derr[ch][0];            // restore err1
-    left[1] = 3 * rd->derr[ch][2] >> 2;   //     ... 3/4th of err3
-    top[0]  = rd->derr[ch][1];            //     ... err2
-    top[1]  = rd->derr[ch][2] - left[1];  //     ... 1/4th of err3.
-  }
-}
-
-#undef C1
-#undef C2
-#undef DSHIFT
-#undef DSCALE
-
-//------------------------------------------------------------------------------
-
-static int ReconstructUV(VP8EncIterator* const it, VP8ModeScore* const rd,
-                         uint8_t* const yuv_out, int mode) {
-  const VP8Encoder* const enc = it->enc_;
-  const uint8_t* const ref = it->yuv_p_ + VP8UVModeOffsets[mode];
-  const uint8_t* const src = it->yuv_in_ + U_OFF_ENC;
-  const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_];
-  int nz = 0;
-  int n;
-  int16_t tmp[8][16];
-
-  for (n = 0; n < 8; n += 2) {
-    VP8FTransform2(src + VP8ScanUV[n], ref + VP8ScanUV[n], tmp[n]);
-  }
-  if (it->top_derr_ != NULL) CorrectDCValues(it, &dqm->uv_, tmp, rd);
-
-  if (DO_TRELLIS_UV && it->do_trellis_) {
-    int ch, x, y;
-    for (ch = 0, n = 0; ch <= 2; ch += 2) {
-      for (y = 0; y < 2; ++y) {
-        for (x = 0; x < 2; ++x, ++n) {
-          const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y];
-          const int non_zero =
-              TrellisQuantizeBlock(enc, tmp[n], rd->uv_levels[n], ctx, 2,
-                                   &dqm->uv_, dqm->lambda_trellis_uv_);
-          it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = non_zero;
-          nz |= non_zero << n;
-        }
-      }
-    }
-  } else {
-    for (n = 0; n < 8; n += 2) {
-      nz |= VP8EncQuantize2Blocks(tmp[n], rd->uv_levels[n], &dqm->uv_) << n;
-    }
-  }
-
-  for (n = 0; n < 8; n += 2) {
-    VP8ITransform(ref + VP8ScanUV[n], tmp[n], yuv_out + VP8ScanUV[n], 1);
-  }
-  return (nz << 16);
-}
-
-//------------------------------------------------------------------------------
-// RD-opt decision. Reconstruct each modes, evalue distortion and bit-cost.
-// Pick the mode is lower RD-cost = Rate + lambda * Distortion.
-
-static void StoreMaxDelta(VP8SegmentInfo* const dqm, const int16_t DCs[16]) {
-  // We look at the first three AC coefficients to determine what is the average
-  // delta between each sub-4x4 block.
-  const int v0 = abs(DCs[1]);
-  const int v1 = abs(DCs[2]);
-  const int v2 = abs(DCs[4]);
-  int max_v = (v1 > v0) ? v1 : v0;
-  max_v = (v2 > max_v) ? v2 : max_v;
-  if (max_v > dqm->max_edge_) dqm->max_edge_ = max_v;
-}
-
-static void SwapModeScore(VP8ModeScore** a, VP8ModeScore** b) {
-  VP8ModeScore* const tmp = *a;
-  *a = *b;
-  *b = tmp;
-}
-
-static void SwapPtr(uint8_t** a, uint8_t** b) {
-  uint8_t* const tmp = *a;
-  *a = *b;
-  *b = tmp;
-}
-
-static void SwapOut(VP8EncIterator* const it) {
-  SwapPtr(&it->yuv_out_, &it->yuv_out2_);
-}
-
-static void PickBestIntra16(VP8EncIterator* const it, VP8ModeScore* rd) {
-  const int kNumBlocks = 16;
-  VP8SegmentInfo* const dqm = &it->enc_->dqm_[it->mb_->segment_];
-  const int lambda = dqm->lambda_i16_;
-  const int tlambda = dqm->tlambda_;
-  const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC;
-  VP8ModeScore rd_tmp;
-  VP8ModeScore* rd_cur = &rd_tmp;
-  VP8ModeScore* rd_best = rd;
-  int mode;
-
-  rd->mode_i16 = -1;
-  for (mode = 0; mode < NUM_PRED_MODES; ++mode) {
-    uint8_t* const tmp_dst = it->yuv_out2_ + Y_OFF_ENC;  // scratch buffer
-    rd_cur->mode_i16 = mode;
-
-    // Reconstruct
-    rd_cur->nz = ReconstructIntra16(it, rd_cur, tmp_dst, mode);
-
-    // Measure RD-score
-    rd_cur->D = VP8SSE16x16(src, tmp_dst);
-    rd_cur->SD =
-        tlambda ? MULT_8B(tlambda, VP8TDisto16x16(src, tmp_dst, kWeightY)) : 0;
-    rd_cur->H = VP8FixedCostsI16[mode];
-    rd_cur->R = VP8GetCostLuma16(it, rd_cur);
-    if (mode > 0 &&
-        IsFlat(rd_cur->y_ac_levels[0], kNumBlocks, FLATNESS_LIMIT_I16)) {
-      // penalty to avoid flat area to be mispredicted by complex mode
-      rd_cur->R += FLATNESS_PENALTY * kNumBlocks;
-    }
-
-    // Since we always examine Intra16 first, we can overwrite *rd directly.
-    SetRDScore(lambda, rd_cur);
-    if (mode == 0 || rd_cur->score < rd_best->score) {
-      SwapModeScore(&rd_cur, &rd_best);
-      SwapOut(it);
-    }
-  }
-  if (rd_best != rd) {
-    memcpy(rd, rd_best, sizeof(*rd));
-  }
-  SetRDScore(dqm->lambda_mode_, rd);   // finalize score for mode decision.
-  VP8SetIntra16Mode(it, rd->mode_i16);
-
-  // we have a blocky macroblock (only DCs are non-zero) with fairly high
-  // distortion, record max delta so we can later adjust the minimal filtering
-  // strength needed to smooth these blocks out.
-  if ((rd->nz & 0x100ffff) == 0x1000000 && rd->D > dqm->min_disto_) {
-    StoreMaxDelta(dqm, rd->y_dc_levels);
-  }
-}
-
-//------------------------------------------------------------------------------
-
-// return the cost array corresponding to the surrounding prediction modes.
-static const uint16_t* GetCostModeI4(VP8EncIterator* const it,
-                                     const uint8_t modes[16]) {
-  const int preds_w = it->enc_->preds_w_;
-  const int x = (it->i4_ & 3), y = it->i4_ >> 2;
-  const int left = (x == 0) ? it->preds_[y * preds_w - 1] : modes[it->i4_ - 1];
-  const int top = (y == 0) ? it->preds_[-preds_w + x] : modes[it->i4_ - 4];
-  return VP8FixedCostsI4[top][left];
-}
-
-static int PickBestIntra4(VP8EncIterator* const it, VP8ModeScore* const rd) {
-  const VP8Encoder* const enc = it->enc_;
-  const VP8SegmentInfo* const dqm = &enc->dqm_[it->mb_->segment_];
-  const int lambda = dqm->lambda_i4_;
-  const int tlambda = dqm->tlambda_;
-  const uint8_t* const src0 = it->yuv_in_ + Y_OFF_ENC;
-  uint8_t* const best_blocks = it->yuv_out2_ + Y_OFF_ENC;
-  int total_header_bits = 0;
-  VP8ModeScore rd_best;
-
-  if (enc->max_i4_header_bits_ == 0) {
-    return 0;
-  }
-
-  InitScore(&rd_best);
-  rd_best.H = 211;  // '211' is the value of VP8BitCost(0, 145)
-  SetRDScore(dqm->lambda_mode_, &rd_best);
-  VP8IteratorStartI4(it);
-  do {
-    const int kNumBlocks = 1;
-    VP8ModeScore rd_i4;
-    int mode;
-    int best_mode = -1;
-    const uint8_t* const src = src0 + VP8Scan[it->i4_];
-    const uint16_t* const mode_costs = GetCostModeI4(it, rd->modes_i4);
-    uint8_t* best_block = best_blocks + VP8Scan[it->i4_];
-    uint8_t* tmp_dst = it->yuv_p_ + I4TMP;    // scratch buffer.
-
-    InitScore(&rd_i4);
-    VP8MakeIntra4Preds(it);
-    for (mode = 0; mode < NUM_BMODES; ++mode) {
-      VP8ModeScore rd_tmp;
-      int16_t tmp_levels[16];
-
-      // Reconstruct
-      rd_tmp.nz =
-          ReconstructIntra4(it, tmp_levels, src, tmp_dst, mode) << it->i4_;
-
-      // Compute RD-score
-      rd_tmp.D = VP8SSE4x4(src, tmp_dst);
-      rd_tmp.SD =
-          tlambda ? MULT_8B(tlambda, VP8TDisto4x4(src, tmp_dst, kWeightY))
-                  : 0;
-      rd_tmp.H = mode_costs[mode];
-
-      // Add flatness penalty
-      if (mode > 0 && IsFlat(tmp_levels, kNumBlocks, FLATNESS_LIMIT_I4)) {
-        rd_tmp.R = FLATNESS_PENALTY * kNumBlocks;
-      } else {
-        rd_tmp.R = 0;
-      }
-
-      // early-out check
-      SetRDScore(lambda, &rd_tmp);
-      if (best_mode >= 0 && rd_tmp.score >= rd_i4.score) continue;
-
-      // finish computing score
-      rd_tmp.R += VP8GetCostLuma4(it, tmp_levels);
-      SetRDScore(lambda, &rd_tmp);
-
-      if (best_mode < 0 || rd_tmp.score < rd_i4.score) {
-        CopyScore(&rd_i4, &rd_tmp);
-        best_mode = mode;
-        SwapPtr(&tmp_dst, &best_block);
-        memcpy(rd_best.y_ac_levels[it->i4_], tmp_levels,
-               sizeof(rd_best.y_ac_levels[it->i4_]));
-      }
-    }
-    SetRDScore(dqm->lambda_mode_, &rd_i4);
-    AddScore(&rd_best, &rd_i4);
-    if (rd_best.score >= rd->score) {
-      return 0;
-    }
-    total_header_bits += (int)rd_i4.H;   // <- equal to mode_costs[best_mode];
-    if (total_header_bits > enc->max_i4_header_bits_) {
-      return 0;
-    }
-    // Copy selected samples if not in the right place already.
-    if (best_block != best_blocks + VP8Scan[it->i4_]) {
-      VP8Copy4x4(best_block, best_blocks + VP8Scan[it->i4_]);
-    }
-    rd->modes_i4[it->i4_] = best_mode;
-    it->top_nz_[it->i4_ & 3] = it->left_nz_[it->i4_ >> 2] = (rd_i4.nz ? 1 : 0);
-  } while (VP8IteratorRotateI4(it, best_blocks));
-
-  // finalize state
-  CopyScore(rd, &rd_best);
-  VP8SetIntra4Mode(it, rd->modes_i4);
-  SwapOut(it);
-  memcpy(rd->y_ac_levels, rd_best.y_ac_levels, sizeof(rd->y_ac_levels));
-  return 1;   // select intra4x4 over intra16x16
-}
-
-//------------------------------------------------------------------------------
-
-static void PickBestUV(VP8EncIterator* const it, VP8ModeScore* const rd) {
-  const int kNumBlocks = 8;
-  const VP8SegmentInfo* const dqm = &it->enc_->dqm_[it->mb_->segment_];
-  const int lambda = dqm->lambda_uv_;
-  const uint8_t* const src = it->yuv_in_ + U_OFF_ENC;
-  uint8_t* tmp_dst = it->yuv_out2_ + U_OFF_ENC;  // scratch buffer
-  uint8_t* dst0 = it->yuv_out_ + U_OFF_ENC;
-  uint8_t* dst = dst0;
-  VP8ModeScore rd_best;
-  int mode;
-
-  rd->mode_uv = -1;
-  InitScore(&rd_best);
-  for (mode = 0; mode < NUM_PRED_MODES; ++mode) {
-    VP8ModeScore rd_uv;
-
-    // Reconstruct
-    rd_uv.nz = ReconstructUV(it, &rd_uv, tmp_dst, mode);
-
-    // Compute RD-score
-    rd_uv.D  = VP8SSE16x8(src, tmp_dst);
-    rd_uv.SD = 0;    // not calling TDisto here: it tends to flatten areas.
-    rd_uv.H  = VP8FixedCostsUV[mode];
-    rd_uv.R  = VP8GetCostUV(it, &rd_uv);
-    if (mode > 0 && IsFlat(rd_uv.uv_levels[0], kNumBlocks, FLATNESS_LIMIT_UV)) {
-      rd_uv.R += FLATNESS_PENALTY * kNumBlocks;
-    }
-
-    SetRDScore(lambda, &rd_uv);
-    if (mode == 0 || rd_uv.score < rd_best.score) {
-      CopyScore(&rd_best, &rd_uv);
-      rd->mode_uv = mode;
-      memcpy(rd->uv_levels, rd_uv.uv_levels, sizeof(rd->uv_levels));
-      if (it->top_derr_ != NULL) {
-        memcpy(rd->derr, rd_uv.derr, sizeof(rd_uv.derr));
-      }
-      SwapPtr(&dst, &tmp_dst);
-    }
-  }
-  VP8SetIntraUVMode(it, rd->mode_uv);
-  AddScore(rd, &rd_best);
-  if (dst != dst0) {   // copy 16x8 block if needed
-    VP8Copy16x8(dst, dst0);
-  }
-  if (it->top_derr_ != NULL) {  // store diffusion errors for next block
-    StoreDiffusionErrors(it, rd);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Final reconstruction and quantization.
-
-static void SimpleQuantize(VP8EncIterator* const it, VP8ModeScore* const rd) {
-  const VP8Encoder* const enc = it->enc_;
-  const int is_i16 = (it->mb_->type_ == 1);
-  int nz = 0;
-
-  if (is_i16) {
-    nz = ReconstructIntra16(it, rd, it->yuv_out_ + Y_OFF_ENC, it->preds_[0]);
-  } else {
-    VP8IteratorStartI4(it);
-    do {
-      const int mode =
-          it->preds_[(it->i4_ & 3) + (it->i4_ >> 2) * enc->preds_w_];
-      const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_];
-      uint8_t* const dst = it->yuv_out_ + Y_OFF_ENC + VP8Scan[it->i4_];
-      VP8MakeIntra4Preds(it);
-      nz |= ReconstructIntra4(it, rd->y_ac_levels[it->i4_],
-                              src, dst, mode) << it->i4_;
-    } while (VP8IteratorRotateI4(it, it->yuv_out_ + Y_OFF_ENC));
-  }
-
-  nz |= ReconstructUV(it, rd, it->yuv_out_ + U_OFF_ENC, it->mb_->uv_mode_);
-  rd->nz = nz;
-}
-
-// Refine intra16/intra4 sub-modes based on distortion only (not rate).
-static void RefineUsingDistortion(VP8EncIterator* const it,
-                                  int try_both_modes, int refine_uv_mode,
-                                  VP8ModeScore* const rd) {
-  score_t best_score = MAX_COST;
-  int nz = 0;
-  int mode;
-  int is_i16 = try_both_modes || (it->mb_->type_ == 1);
-
-  const VP8SegmentInfo* const dqm = &it->enc_->dqm_[it->mb_->segment_];
-  // Some empiric constants, of approximate order of magnitude.
-  const int lambda_d_i16 = 106;
-  const int lambda_d_i4 = 11;
-  const int lambda_d_uv = 120;
-  score_t score_i4 = dqm->i4_penalty_;
-  score_t i4_bit_sum = 0;
-  const score_t bit_limit = try_both_modes ? it->enc_->mb_header_limit_
-                                           : MAX_COST;  // no early-out allowed
-
-  if (is_i16) {   // First, evaluate Intra16 distortion
-    int best_mode = -1;
-    const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC;
-    for (mode = 0; mode < NUM_PRED_MODES; ++mode) {
-      const uint8_t* const ref = it->yuv_p_ + VP8I16ModeOffsets[mode];
-      const score_t score = (score_t)VP8SSE16x16(src, ref) * RD_DISTO_MULT
-                          + VP8FixedCostsI16[mode] * lambda_d_i16;
-      if (mode > 0 && VP8FixedCostsI16[mode] > bit_limit) {
-        continue;
-      }
-      if (score < best_score) {
-        best_mode = mode;
-        best_score = score;
-      }
-    }
-    VP8SetIntra16Mode(it, best_mode);
-    // we'll reconstruct later, if i16 mode actually gets selected
-  }
-
-  // Next, evaluate Intra4
-  if (try_both_modes || !is_i16) {
-    // We don't evaluate the rate here, but just account for it through a
-    // constant penalty (i4 mode usually needs more bits compared to i16).
-    is_i16 = 0;
-    VP8IteratorStartI4(it);
-    do {
-      int best_i4_mode = -1;
-      score_t best_i4_score = MAX_COST;
-      const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_];
-      const uint16_t* const mode_costs = GetCostModeI4(it, rd->modes_i4);
-
-      VP8MakeIntra4Preds(it);
-      for (mode = 0; mode < NUM_BMODES; ++mode) {
-        const uint8_t* const ref = it->yuv_p_ + VP8I4ModeOffsets[mode];
-        const score_t score = VP8SSE4x4(src, ref) * RD_DISTO_MULT
-                            + mode_costs[mode] * lambda_d_i4;
-        if (score < best_i4_score) {
-          best_i4_mode = mode;
-          best_i4_score = score;
-        }
-      }
-      i4_bit_sum += mode_costs[best_i4_mode];
-      rd->modes_i4[it->i4_] = best_i4_mode;
-      score_i4 += best_i4_score;
-      if (score_i4 >= best_score || i4_bit_sum > bit_limit) {
-        // Intra4 won't be better than Intra16. Bail out and pick Intra16.
-        is_i16 = 1;
-        break;
-      } else {  // reconstruct partial block inside yuv_out2_ buffer
-        uint8_t* const tmp_dst = it->yuv_out2_ + Y_OFF_ENC + VP8Scan[it->i4_];
-        nz |= ReconstructIntra4(it, rd->y_ac_levels[it->i4_],
-                                src, tmp_dst, best_i4_mode) << it->i4_;
-      }
-    } while (VP8IteratorRotateI4(it, it->yuv_out2_ + Y_OFF_ENC));
-  }
-
-  // Final reconstruction, depending on which mode is selected.
-  if (!is_i16) {
-    VP8SetIntra4Mode(it, rd->modes_i4);
-    SwapOut(it);
-    best_score = score_i4;
-  } else {
-    nz = ReconstructIntra16(it, rd, it->yuv_out_ + Y_OFF_ENC, it->preds_[0]);
-  }
-
-  // ... and UV!
-  if (refine_uv_mode) {
-    int best_mode = -1;
-    score_t best_uv_score = MAX_COST;
-    const uint8_t* const src = it->yuv_in_ + U_OFF_ENC;
-    for (mode = 0; mode < NUM_PRED_MODES; ++mode) {
-      const uint8_t* const ref = it->yuv_p_ + VP8UVModeOffsets[mode];
-      const score_t score = VP8SSE16x8(src, ref) * RD_DISTO_MULT
-                          + VP8FixedCostsUV[mode] * lambda_d_uv;
-      if (score < best_uv_score) {
-        best_mode = mode;
-        best_uv_score = score;
-      }
-    }
-    VP8SetIntraUVMode(it, best_mode);
-  }
-  nz |= ReconstructUV(it, rd, it->yuv_out_ + U_OFF_ENC, it->mb_->uv_mode_);
-
-  rd->nz = nz;
-  rd->score = best_score;
-}
-
-//------------------------------------------------------------------------------
-// Entry point
-
-int VP8Decimate(VP8EncIterator* const it, VP8ModeScore* const rd,
-                VP8RDLevel rd_opt) {
-  int is_skipped;
-  const int method = it->enc_->method_;
-
-  InitScore(rd);
-
-  // We can perform predictions for Luma16x16 and Chroma8x8 already.
-  // Luma4x4 predictions needs to be done as-we-go.
-  VP8MakeLuma16Preds(it);
-  VP8MakeChroma8Preds(it);
-
-  if (rd_opt > RD_OPT_NONE) {
-    it->do_trellis_ = (rd_opt >= RD_OPT_TRELLIS_ALL);
-    PickBestIntra16(it, rd);
-    if (method >= 2) {
-      PickBestIntra4(it, rd);
-    }
-    PickBestUV(it, rd);
-    if (rd_opt == RD_OPT_TRELLIS) {   // finish off with trellis-optim now
-      it->do_trellis_ = 1;
-      SimpleQuantize(it, rd);
-    }
-  } else {
-    // At this point we have heuristically decided intra16 / intra4.
-    // For method >= 2, pick the best intra4/intra16 based on SSE (~tad slower).
-    // For method <= 1, we don't re-examine the decision but just go ahead with
-    // quantization/reconstruction.
-    RefineUsingDistortion(it, (method >= 2), (method >= 1), rd);
-  }
-  is_skipped = (rd->nz == 0);
-  VP8SetSkip(it, is_skipped);
-  return is_skipped;
-}
diff --git a/ios/Pods/libwebp/src/enc/syntax_enc.c b/ios/Pods/libwebp/src/enc/syntax_enc.c
deleted file mode 100644
index a9e5a6c..0000000
--- a/ios/Pods/libwebp/src/enc/syntax_enc.c
+++ /dev/null
@@ -1,388 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Header syntax writing
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-
-#include "src/utils/utils.h"
-#include "src/webp/format_constants.h"  // RIFF constants
-#include "src/webp/mux_types.h"         // ALPHA_FLAG
-#include "src/enc/vp8i_enc.h"
-
-//------------------------------------------------------------------------------
-// Helper functions
-
-static int IsVP8XNeeded(const VP8Encoder* const enc) {
-  return !!enc->has_alpha_;  // Currently the only case when VP8X is needed.
-                             // This could change in the future.
-}
-
-static int PutPaddingByte(const WebPPicture* const pic) {
-  const uint8_t pad_byte[1] = { 0 };
-  return !!pic->writer(pad_byte, 1, pic);
-}
-
-//------------------------------------------------------------------------------
-// Writers for header's various pieces (in order of appearance)
-
-static WebPEncodingError PutRIFFHeader(const VP8Encoder* const enc,
-                                       size_t riff_size) {
-  const WebPPicture* const pic = enc->pic_;
-  uint8_t riff[RIFF_HEADER_SIZE] = {
-    'R', 'I', 'F', 'F', 0, 0, 0, 0, 'W', 'E', 'B', 'P'
-  };
-  assert(riff_size == (uint32_t)riff_size);
-  PutLE32(riff + TAG_SIZE, (uint32_t)riff_size);
-  if (!pic->writer(riff, sizeof(riff), pic)) {
-    return VP8_ENC_ERROR_BAD_WRITE;
-  }
-  return VP8_ENC_OK;
-}
-
-static WebPEncodingError PutVP8XHeader(const VP8Encoder* const enc) {
-  const WebPPicture* const pic = enc->pic_;
-  uint8_t vp8x[CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE] = {
-    'V', 'P', '8', 'X'
-  };
-  uint32_t flags = 0;
-
-  assert(IsVP8XNeeded(enc));
-  assert(pic->width >= 1 && pic->height >= 1);
-  assert(pic->width <= MAX_CANVAS_SIZE && pic->height <= MAX_CANVAS_SIZE);
-
-  if (enc->has_alpha_) {
-    flags |= ALPHA_FLAG;
-  }
-
-  PutLE32(vp8x + TAG_SIZE,              VP8X_CHUNK_SIZE);
-  PutLE32(vp8x + CHUNK_HEADER_SIZE,     flags);
-  PutLE24(vp8x + CHUNK_HEADER_SIZE + 4, pic->width - 1);
-  PutLE24(vp8x + CHUNK_HEADER_SIZE + 7, pic->height - 1);
-  if (!pic->writer(vp8x, sizeof(vp8x), pic)) {
-    return VP8_ENC_ERROR_BAD_WRITE;
-  }
-  return VP8_ENC_OK;
-}
-
-static WebPEncodingError PutAlphaChunk(const VP8Encoder* const enc) {
-  const WebPPicture* const pic = enc->pic_;
-  uint8_t alpha_chunk_hdr[CHUNK_HEADER_SIZE] = {
-    'A', 'L', 'P', 'H'
-  };
-
-  assert(enc->has_alpha_);
-
-  // Alpha chunk header.
-  PutLE32(alpha_chunk_hdr + TAG_SIZE, enc->alpha_data_size_);
-  if (!pic->writer(alpha_chunk_hdr, sizeof(alpha_chunk_hdr), pic)) {
-    return VP8_ENC_ERROR_BAD_WRITE;
-  }
-
-  // Alpha chunk data.
-  if (!pic->writer(enc->alpha_data_, enc->alpha_data_size_, pic)) {
-    return VP8_ENC_ERROR_BAD_WRITE;
-  }
-
-  // Padding.
-  if ((enc->alpha_data_size_ & 1) && !PutPaddingByte(pic)) {
-    return VP8_ENC_ERROR_BAD_WRITE;
-  }
-  return VP8_ENC_OK;
-}
-
-static WebPEncodingError PutVP8Header(const WebPPicture* const pic,
-                                      size_t vp8_size) {
-  uint8_t vp8_chunk_hdr[CHUNK_HEADER_SIZE] = {
-    'V', 'P', '8', ' '
-  };
-  assert(vp8_size == (uint32_t)vp8_size);
-  PutLE32(vp8_chunk_hdr + TAG_SIZE, (uint32_t)vp8_size);
-  if (!pic->writer(vp8_chunk_hdr, sizeof(vp8_chunk_hdr), pic)) {
-    return VP8_ENC_ERROR_BAD_WRITE;
-  }
-  return VP8_ENC_OK;
-}
-
-static WebPEncodingError PutVP8FrameHeader(const WebPPicture* const pic,
-                                           int profile, size_t size0) {
-  uint8_t vp8_frm_hdr[VP8_FRAME_HEADER_SIZE];
-  uint32_t bits;
-
-  if (size0 >= VP8_MAX_PARTITION0_SIZE) {  // partition #0 is too big to fit
-    return VP8_ENC_ERROR_PARTITION0_OVERFLOW;
-  }
-
-  // Paragraph 9.1.
-  bits = 0                         // keyframe (1b)
-       | (profile << 1)            // profile (3b)
-       | (1 << 4)                  // visible (1b)
-       | ((uint32_t)size0 << 5);   // partition length (19b)
-  vp8_frm_hdr[0] = (bits >>  0) & 0xff;
-  vp8_frm_hdr[1] = (bits >>  8) & 0xff;
-  vp8_frm_hdr[2] = (bits >> 16) & 0xff;
-  // signature
-  vp8_frm_hdr[3] = (VP8_SIGNATURE >> 16) & 0xff;
-  vp8_frm_hdr[4] = (VP8_SIGNATURE >>  8) & 0xff;
-  vp8_frm_hdr[5] = (VP8_SIGNATURE >>  0) & 0xff;
-  // dimensions
-  vp8_frm_hdr[6] = pic->width & 0xff;
-  vp8_frm_hdr[7] = pic->width >> 8;
-  vp8_frm_hdr[8] = pic->height & 0xff;
-  vp8_frm_hdr[9] = pic->height >> 8;
-
-  if (!pic->writer(vp8_frm_hdr, sizeof(vp8_frm_hdr), pic)) {
-    return VP8_ENC_ERROR_BAD_WRITE;
-  }
-  return VP8_ENC_OK;
-}
-
-// WebP Headers.
-static int PutWebPHeaders(const VP8Encoder* const enc, size_t size0,
-                          size_t vp8_size, size_t riff_size) {
-  WebPPicture* const pic = enc->pic_;
-  WebPEncodingError err = VP8_ENC_OK;
-
-  // RIFF header.
-  err = PutRIFFHeader(enc, riff_size);
-  if (err != VP8_ENC_OK) goto Error;
-
-  // VP8X.
-  if (IsVP8XNeeded(enc)) {
-    err = PutVP8XHeader(enc);
-    if (err != VP8_ENC_OK) goto Error;
-  }
-
-  // Alpha.
-  if (enc->has_alpha_) {
-    err = PutAlphaChunk(enc);
-    if (err != VP8_ENC_OK) goto Error;
-  }
-
-  // VP8 header.
-  err = PutVP8Header(pic, vp8_size);
-  if (err != VP8_ENC_OK) goto Error;
-
-  // VP8 frame header.
-  err = PutVP8FrameHeader(pic, enc->profile_, size0);
-  if (err != VP8_ENC_OK) goto Error;
-
-  // All OK.
-  return 1;
-
-  // Error.
- Error:
-  return WebPEncodingSetError(pic, err);
-}
-
-// Segmentation header
-static void PutSegmentHeader(VP8BitWriter* const bw,
-                             const VP8Encoder* const enc) {
-  const VP8EncSegmentHeader* const hdr = &enc->segment_hdr_;
-  const VP8EncProba* const proba = &enc->proba_;
-  if (VP8PutBitUniform(bw, (hdr->num_segments_ > 1))) {
-    // We always 'update' the quant and filter strength values
-    const int update_data = 1;
-    int s;
-    VP8PutBitUniform(bw, hdr->update_map_);
-    if (VP8PutBitUniform(bw, update_data)) {
-      // we always use absolute values, not relative ones
-      VP8PutBitUniform(bw, 1);   // (segment_feature_mode = 1. Paragraph 9.3.)
-      for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
-        VP8PutSignedBits(bw, enc->dqm_[s].quant_, 7);
-      }
-      for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
-        VP8PutSignedBits(bw, enc->dqm_[s].fstrength_, 6);
-      }
-    }
-    if (hdr->update_map_) {
-      for (s = 0; s < 3; ++s) {
-        if (VP8PutBitUniform(bw, (proba->segments_[s] != 255u))) {
-          VP8PutBits(bw, proba->segments_[s], 8);
-        }
-      }
-    }
-  }
-}
-
-// Filtering parameters header
-static void PutFilterHeader(VP8BitWriter* const bw,
-                            const VP8EncFilterHeader* const hdr) {
-  const int use_lf_delta = (hdr->i4x4_lf_delta_ != 0);
-  VP8PutBitUniform(bw, hdr->simple_);
-  VP8PutBits(bw, hdr->level_, 6);
-  VP8PutBits(bw, hdr->sharpness_, 3);
-  if (VP8PutBitUniform(bw, use_lf_delta)) {
-    // '0' is the default value for i4x4_lf_delta_ at frame #0.
-    const int need_update = (hdr->i4x4_lf_delta_ != 0);
-    if (VP8PutBitUniform(bw, need_update)) {
-      // we don't use ref_lf_delta => emit four 0 bits
-      VP8PutBits(bw, 0, 4);
-      // we use mode_lf_delta for i4x4
-      VP8PutSignedBits(bw, hdr->i4x4_lf_delta_, 6);
-      VP8PutBits(bw, 0, 3);    // all others unused
-    }
-  }
-}
-
-// Nominal quantization parameters
-static void PutQuant(VP8BitWriter* const bw,
-                     const VP8Encoder* const enc) {
-  VP8PutBits(bw, enc->base_quant_, 7);
-  VP8PutSignedBits(bw, enc->dq_y1_dc_, 4);
-  VP8PutSignedBits(bw, enc->dq_y2_dc_, 4);
-  VP8PutSignedBits(bw, enc->dq_y2_ac_, 4);
-  VP8PutSignedBits(bw, enc->dq_uv_dc_, 4);
-  VP8PutSignedBits(bw, enc->dq_uv_ac_, 4);
-}
-
-// Partition sizes
-static int EmitPartitionsSize(const VP8Encoder* const enc,
-                              WebPPicture* const pic) {
-  uint8_t buf[3 * (MAX_NUM_PARTITIONS - 1)];
-  int p;
-  for (p = 0; p < enc->num_parts_ - 1; ++p) {
-    const size_t part_size = VP8BitWriterSize(enc->parts_ + p);
-    if (part_size >= VP8_MAX_PARTITION_SIZE) {
-      return WebPEncodingSetError(pic, VP8_ENC_ERROR_PARTITION_OVERFLOW);
-    }
-    buf[3 * p + 0] = (part_size >>  0) & 0xff;
-    buf[3 * p + 1] = (part_size >>  8) & 0xff;
-    buf[3 * p + 2] = (part_size >> 16) & 0xff;
-  }
-  return p ? pic->writer(buf, 3 * p, pic) : 1;
-}
-
-//------------------------------------------------------------------------------
-
-static int GeneratePartition0(VP8Encoder* const enc) {
-  VP8BitWriter* const bw = &enc->bw_;
-  const int mb_size = enc->mb_w_ * enc->mb_h_;
-  uint64_t pos1, pos2, pos3;
-
-  pos1 = VP8BitWriterPos(bw);
-  if (!VP8BitWriterInit(bw, mb_size * 7 / 8)) {        // ~7 bits per macroblock
-    return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY);
-  }
-  VP8PutBitUniform(bw, 0);   // colorspace
-  VP8PutBitUniform(bw, 0);   // clamp type
-
-  PutSegmentHeader(bw, enc);
-  PutFilterHeader(bw, &enc->filter_hdr_);
-  VP8PutBits(bw, enc->num_parts_ == 8 ? 3 :
-                 enc->num_parts_ == 4 ? 2 :
-                 enc->num_parts_ == 2 ? 1 : 0, 2);
-  PutQuant(bw, enc);
-  VP8PutBitUniform(bw, 0);   // no proba update
-  VP8WriteProbas(bw, &enc->proba_);
-  pos2 = VP8BitWriterPos(bw);
-  VP8CodeIntraModes(enc);
-  VP8BitWriterFinish(bw);
-
-  pos3 = VP8BitWriterPos(bw);
-
-#if !defined(WEBP_DISABLE_STATS)
-  if (enc->pic_->stats) {
-    enc->pic_->stats->header_bytes[0] = (int)((pos2 - pos1 + 7) >> 3);
-    enc->pic_->stats->header_bytes[1] = (int)((pos3 - pos2 + 7) >> 3);
-    enc->pic_->stats->alpha_data_size = (int)enc->alpha_data_size_;
-  }
-#else
-  (void)pos1;
-  (void)pos2;
-  (void)pos3;
-#endif
-  if (bw->error_) {
-    return WebPEncodingSetError(enc->pic_, VP8_ENC_ERROR_OUT_OF_MEMORY);
-  }
-  return 1;
-}
-
-void VP8EncFreeBitWriters(VP8Encoder* const enc) {
-  int p;
-  VP8BitWriterWipeOut(&enc->bw_);
-  for (p = 0; p < enc->num_parts_; ++p) {
-    VP8BitWriterWipeOut(enc->parts_ + p);
-  }
-}
-
-int VP8EncWrite(VP8Encoder* const enc) {
-  WebPPicture* const pic = enc->pic_;
-  VP8BitWriter* const bw = &enc->bw_;
-  const int task_percent = 19;
-  const int percent_per_part = task_percent / enc->num_parts_;
-  const int final_percent = enc->percent_ + task_percent;
-  int ok = 0;
-  size_t vp8_size, pad, riff_size;
-  int p;
-
-  // Partition #0 with header and partition sizes
-  ok = GeneratePartition0(enc);
-  if (!ok) return 0;
-
-  // Compute VP8 size
-  vp8_size = VP8_FRAME_HEADER_SIZE +
-             VP8BitWriterSize(bw) +
-             3 * (enc->num_parts_ - 1);
-  for (p = 0; p < enc->num_parts_; ++p) {
-    vp8_size += VP8BitWriterSize(enc->parts_ + p);
-  }
-  pad = vp8_size & 1;
-  vp8_size += pad;
-
-  // Compute RIFF size
-  // At the minimum it is: "WEBPVP8 nnnn" + VP8 data size.
-  riff_size = TAG_SIZE + CHUNK_HEADER_SIZE + vp8_size;
-  if (IsVP8XNeeded(enc)) {  // Add size for: VP8X header + data.
-    riff_size += CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE;
-  }
-  if (enc->has_alpha_) {  // Add size for: ALPH header + data.
-    const uint32_t padded_alpha_size = enc->alpha_data_size_ +
-                                       (enc->alpha_data_size_ & 1);
-    riff_size += CHUNK_HEADER_SIZE + padded_alpha_size;
-  }
-  // Sanity check.
-  if (riff_size > 0xfffffffeU) {
-    return WebPEncodingSetError(pic, VP8_ENC_ERROR_FILE_TOO_BIG);
-  }
-
-  // Emit headers and partition #0
-  {
-    const uint8_t* const part0 = VP8BitWriterBuf(bw);
-    const size_t size0 = VP8BitWriterSize(bw);
-    ok = ok && PutWebPHeaders(enc, size0, vp8_size, riff_size)
-            && pic->writer(part0, size0, pic)
-            && EmitPartitionsSize(enc, pic);
-    VP8BitWriterWipeOut(bw);    // will free the internal buffer.
-  }
-
-  // Token partitions
-  for (p = 0; p < enc->num_parts_; ++p) {
-    const uint8_t* const buf = VP8BitWriterBuf(enc->parts_ + p);
-    const size_t size = VP8BitWriterSize(enc->parts_ + p);
-    if (size) ok = ok && pic->writer(buf, size, pic);
-    VP8BitWriterWipeOut(enc->parts_ + p);    // will free the internal buffer.
-    ok = ok && WebPReportProgress(pic, enc->percent_ + percent_per_part,
-                                  &enc->percent_);
-  }
-
-  // Padding byte
-  if (ok && pad) {
-    ok = PutPaddingByte(pic);
-  }
-
-  enc->coded_size_ = (int)(CHUNK_HEADER_SIZE + riff_size);
-  ok = ok && WebPReportProgress(pic, final_percent, &enc->percent_);
-  return ok;
-}
-
-//------------------------------------------------------------------------------
-
diff --git a/ios/Pods/libwebp/src/enc/token_enc.c b/ios/Pods/libwebp/src/enc/token_enc.c
deleted file mode 100644
index 3a2192a..0000000
--- a/ios/Pods/libwebp/src/enc/token_enc.c
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Paginated token buffer
-//
-//  A 'token' is a bit value associated with a probability, either fixed
-// or a later-to-be-determined after statistics have been collected.
-// For dynamic probability, we just record the slot id (idx) for the probability
-// value in the final probability array (uint8_t* probas in VP8EmitTokens).
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "src/enc/cost_enc.h"
-#include "src/enc/vp8i_enc.h"
-#include "src/utils/utils.h"
-
-#if !defined(DISABLE_TOKEN_BUFFER)
-
-// we use pages to reduce the number of memcpy()
-#define MIN_PAGE_SIZE 8192          // minimum number of token per page
-#define FIXED_PROBA_BIT (1u << 14)
-
-typedef uint16_t token_t;  // bit #15: bit value
-                           // bit #14: flags for constant proba or idx
-                           // bits #0..13: slot or constant proba
-struct VP8Tokens {
-  VP8Tokens* next_;        // pointer to next page
-};
-// Token data is located in memory just after the next_ field.
-// This macro is used to return their address and hide the trick.
-#define TOKEN_DATA(p) ((const token_t*)&(p)[1])
-
-//------------------------------------------------------------------------------
-
-void VP8TBufferInit(VP8TBuffer* const b, int page_size) {
-  b->tokens_ = NULL;
-  b->pages_ = NULL;
-  b->last_page_ = &b->pages_;
-  b->left_ = 0;
-  b->page_size_ = (page_size < MIN_PAGE_SIZE) ? MIN_PAGE_SIZE : page_size;
-  b->error_ = 0;
-}
-
-void VP8TBufferClear(VP8TBuffer* const b) {
-  if (b != NULL) {
-    VP8Tokens* p = b->pages_;
-    while (p != NULL) {
-      VP8Tokens* const next = p->next_;
-      WebPSafeFree(p);
-      p = next;
-    }
-    VP8TBufferInit(b, b->page_size_);
-  }
-}
-
-static int TBufferNewPage(VP8TBuffer* const b) {
-  VP8Tokens* page = NULL;
-  if (!b->error_) {
-    const size_t size = sizeof(*page) + b->page_size_ * sizeof(token_t);
-    page = (VP8Tokens*)WebPSafeMalloc(1ULL, size);
-  }
-  if (page == NULL) {
-    b->error_ = 1;
-    return 0;
-  }
-  page->next_ = NULL;
-
-  *b->last_page_ = page;
-  b->last_page_ = &page->next_;
-  b->left_ = b->page_size_;
-  b->tokens_ = (token_t*)TOKEN_DATA(page);
-  return 1;
-}
-
-//------------------------------------------------------------------------------
-
-#define TOKEN_ID(t, b, ctx) \
-    (NUM_PROBAS * ((ctx) + NUM_CTX * ((b) + NUM_BANDS * (t))))
-
-static WEBP_INLINE uint32_t AddToken(VP8TBuffer* const b, uint32_t bit,
-                                     uint32_t proba_idx,
-                                     proba_t* const stats) {
-  assert(proba_idx < FIXED_PROBA_BIT);
-  assert(bit <= 1);
-  if (b->left_ > 0 || TBufferNewPage(b)) {
-    const int slot = --b->left_;
-    b->tokens_[slot] = (bit << 15) | proba_idx;
-  }
-  VP8RecordStats(bit, stats);
-  return bit;
-}
-
-static WEBP_INLINE void AddConstantToken(VP8TBuffer* const b,
-                                         uint32_t bit, uint32_t proba) {
-  assert(proba < 256);
-  assert(bit <= 1);
-  if (b->left_ > 0 || TBufferNewPage(b)) {
-    const int slot = --b->left_;
-    b->tokens_[slot] = (bit << 15) | FIXED_PROBA_BIT | proba;
-  }
-}
-
-int VP8RecordCoeffTokens(int ctx, const struct VP8Residual* const res,
-                         VP8TBuffer* const tokens) {
-  const int16_t* const coeffs = res->coeffs;
-  const int coeff_type = res->coeff_type;
-  const int last = res->last;
-  int n = res->first;
-  uint32_t base_id = TOKEN_ID(coeff_type, n, ctx);
-  // should be stats[VP8EncBands[n]], but it's equivalent for n=0 or 1
-  proba_t* s = res->stats[n][ctx];
-  if (!AddToken(tokens, last >= 0, base_id + 0, s + 0)) {
-    return 0;
-  }
-
-  while (n < 16) {
-    const int c = coeffs[n++];
-    const int sign = c < 0;
-    const uint32_t v = sign ? -c : c;
-    if (!AddToken(tokens, v != 0, base_id + 1, s + 1)) {
-      base_id = TOKEN_ID(coeff_type, VP8EncBands[n], 0);  // ctx=0
-      s = res->stats[VP8EncBands[n]][0];
-      continue;
-    }
-    if (!AddToken(tokens, v > 1, base_id + 2, s + 2)) {
-      base_id = TOKEN_ID(coeff_type, VP8EncBands[n], 1);  // ctx=1
-      s = res->stats[VP8EncBands[n]][1];
-    } else {
-      if (!AddToken(tokens, v > 4, base_id + 3, s + 3)) {
-        if (AddToken(tokens, v != 2, base_id + 4, s + 4)) {
-          AddToken(tokens, v == 4, base_id + 5, s + 5);
-        }
-      } else if (!AddToken(tokens, v > 10, base_id + 6, s + 6)) {
-        if (!AddToken(tokens, v > 6, base_id + 7, s + 7)) {
-          AddConstantToken(tokens, v == 6, 159);
-        } else {
-          AddConstantToken(tokens, v >= 9, 165);
-          AddConstantToken(tokens, !(v & 1), 145);
-        }
-      } else {
-        int mask;
-        const uint8_t* tab;
-        uint32_t residue = v - 3;
-        if (residue < (8 << 1)) {          // VP8Cat3  (3b)
-          AddToken(tokens, 0, base_id + 8, s + 8);
-          AddToken(tokens, 0, base_id + 9, s + 9);
-          residue -= (8 << 0);
-          mask = 1 << 2;
-          tab = VP8Cat3;
-        } else if (residue < (8 << 2)) {   // VP8Cat4  (4b)
-          AddToken(tokens, 0, base_id + 8, s + 8);
-          AddToken(tokens, 1, base_id + 9, s + 9);
-          residue -= (8 << 1);
-          mask = 1 << 3;
-          tab = VP8Cat4;
-        } else if (residue < (8 << 3)) {   // VP8Cat5  (5b)
-          AddToken(tokens, 1, base_id + 8, s + 8);
-          AddToken(tokens, 0, base_id + 10, s + 9);
-          residue -= (8 << 2);
-          mask = 1 << 4;
-          tab = VP8Cat5;
-        } else {                         // VP8Cat6 (11b)
-          AddToken(tokens, 1, base_id + 8, s + 8);
-          AddToken(tokens, 1, base_id + 10, s + 9);
-          residue -= (8 << 3);
-          mask = 1 << 10;
-          tab = VP8Cat6;
-        }
-        while (mask) {
-          AddConstantToken(tokens, !!(residue & mask), *tab++);
-          mask >>= 1;
-        }
-      }
-      base_id = TOKEN_ID(coeff_type, VP8EncBands[n], 2);  // ctx=2
-      s = res->stats[VP8EncBands[n]][2];
-    }
-    AddConstantToken(tokens, sign, 128);
-    if (n == 16 || !AddToken(tokens, n <= last, base_id + 0, s + 0)) {
-      return 1;   // EOB
-    }
-  }
-  return 1;
-}
-
-#undef TOKEN_ID
-
-//------------------------------------------------------------------------------
-// Final coding pass, with known probabilities
-
-int VP8EmitTokens(VP8TBuffer* const b, VP8BitWriter* const bw,
-                  const uint8_t* const probas, int final_pass) {
-  const VP8Tokens* p = b->pages_;
-  assert(!b->error_);
-  while (p != NULL) {
-    const VP8Tokens* const next = p->next_;
-    const int N = (next == NULL) ? b->left_ : 0;
-    int n = b->page_size_;
-    const token_t* const tokens = TOKEN_DATA(p);
-    while (n-- > N) {
-      const token_t token = tokens[n];
-      const int bit = (token >> 15) & 1;
-      if (token & FIXED_PROBA_BIT) {
-        VP8PutBit(bw, bit, token & 0xffu);  // constant proba
-      } else {
-        VP8PutBit(bw, bit, probas[token & 0x3fffu]);
-      }
-    }
-    if (final_pass) WebPSafeFree((void*)p);
-    p = next;
-  }
-  if (final_pass) b->pages_ = NULL;
-  return 1;
-}
-
-// Size estimation
-size_t VP8EstimateTokenSize(VP8TBuffer* const b, const uint8_t* const probas) {
-  size_t size = 0;
-  const VP8Tokens* p = b->pages_;
-  assert(!b->error_);
-  while (p != NULL) {
-    const VP8Tokens* const next = p->next_;
-    const int N = (next == NULL) ? b->left_ : 0;
-    int n = b->page_size_;
-    const token_t* const tokens = TOKEN_DATA(p);
-    while (n-- > N) {
-      const token_t token = tokens[n];
-      const int bit = token & (1 << 15);
-      if (token & FIXED_PROBA_BIT) {
-        size += VP8BitCost(bit, token & 0xffu);
-      } else {
-        size += VP8BitCost(bit, probas[token & 0x3fffu]);
-      }
-    }
-    p = next;
-  }
-  return size;
-}
-
-//------------------------------------------------------------------------------
-
-#else     // DISABLE_TOKEN_BUFFER
-
-void VP8TBufferInit(VP8TBuffer* const b, int page_size) {
-  (void)b;
-  (void)page_size;
-}
-void VP8TBufferClear(VP8TBuffer* const b) {
-  (void)b;
-}
-
-#endif    // !DISABLE_TOKEN_BUFFER
-
diff --git a/ios/Pods/libwebp/src/enc/tree_enc.c b/ios/Pods/libwebp/src/enc/tree_enc.c
deleted file mode 100644
index 64ed283..0000000
--- a/ios/Pods/libwebp/src/enc/tree_enc.c
+++ /dev/null
@@ -1,504 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Coding of token probabilities, intra modes and segments.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/enc/vp8i_enc.h"
-
-//------------------------------------------------------------------------------
-// Default probabilities
-
-// Paragraph 13.5
-const uint8_t
-  VP8CoeffsProba0[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS] = {
-  { { { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 },
-      { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 },
-      { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 },
-      { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 },
-      { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 },
-    },
-    { { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 },
-      { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 },
-      { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 },
-    },
-    { { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 },
-      { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 },
-      { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 },
-      { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 },
-      { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 },
-      { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 },
-      { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
-    }
-  },
-  { { { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 },
-      { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 },
-      { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 }
-    },
-    { { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 },
-      { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 },
-      { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 }
-    },
-    { { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 },
-      { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 },
-      { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 }
-    },
-    { { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 },
-      { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 },
-      { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 },
-      { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 },
-      { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 }
-    },
-    { { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 },
-      { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 },
-      { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 }
-    },
-    { { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 },
-      { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 },
-      { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 }
-    },
-    { { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 },
-      { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 }
-    }
-  },
-  { { { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 },
-      { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 },
-      { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 }
-    },
-    { { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 },
-      { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 },
-      { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 },
-      { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 },
-      { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 }
-    },
-    { { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 },
-      { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 },
-      { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 },
-      { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
-    },
-    { { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
-    }
-  },
-  { { { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 },
-      { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 },
-      { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 }
-    },
-    { { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 },
-      { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 },
-      { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 }
-    },
-    { { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 },
-      { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 },
-      { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 }
-    },
-    { { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 },
-      { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 },
-      { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 }
-    },
-    { { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 },
-      { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 },
-      { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 }
-    },
-    { { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 },
-      { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 },
-      { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 }
-    },
-    { { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 },
-      { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 },
-      { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 }
-    },
-    { { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
-      { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
-    }
-  }
-};
-
-void VP8DefaultProbas(VP8Encoder* const enc) {
-  VP8EncProba* const probas = &enc->proba_;
-  probas->use_skip_proba_ = 0;
-  memset(probas->segments_, 255u, sizeof(probas->segments_));
-  memcpy(probas->coeffs_, VP8CoeffsProba0, sizeof(VP8CoeffsProba0));
-  // Note: we could hard-code the level_costs_ corresponding to VP8CoeffsProba0,
-  // but that's ~11k of static data. Better call VP8CalculateLevelCosts() later.
-  probas->dirty_ = 1;
-}
-
-// Paragraph 11.5.  900bytes.
-static const uint8_t kBModesProba[NUM_BMODES][NUM_BMODES][NUM_BMODES - 1] = {
-  { { 231, 120, 48, 89, 115, 113, 120, 152, 112 },
-    { 152, 179, 64, 126, 170, 118, 46, 70, 95 },
-    { 175, 69, 143, 80, 85, 82, 72, 155, 103 },
-    { 56, 58, 10, 171, 218, 189, 17, 13, 152 },
-    { 114, 26, 17, 163, 44, 195, 21, 10, 173 },
-    { 121, 24, 80, 195, 26, 62, 44, 64, 85 },
-    { 144, 71, 10, 38, 171, 213, 144, 34, 26 },
-    { 170, 46, 55, 19, 136, 160, 33, 206, 71 },
-    { 63, 20, 8, 114, 114, 208, 12, 9, 226 },
-    { 81, 40, 11, 96, 182, 84, 29, 16, 36 } },
-  { { 134, 183, 89, 137, 98, 101, 106, 165, 148 },
-    { 72, 187, 100, 130, 157, 111, 32, 75, 80 },
-    { 66, 102, 167, 99, 74, 62, 40, 234, 128 },
-    { 41, 53, 9, 178, 241, 141, 26, 8, 107 },
-    { 74, 43, 26, 146, 73, 166, 49, 23, 157 },
-    { 65, 38, 105, 160, 51, 52, 31, 115, 128 },
-    { 104, 79, 12, 27, 217, 255, 87, 17, 7 },
-    { 87, 68, 71, 44, 114, 51, 15, 186, 23 },
-    { 47, 41, 14, 110, 182, 183, 21, 17, 194 },
-    { 66, 45, 25, 102, 197, 189, 23, 18, 22 } },
-  { { 88, 88, 147, 150, 42, 46, 45, 196, 205 },
-    { 43, 97, 183, 117, 85, 38, 35, 179, 61 },
-    { 39, 53, 200, 87, 26, 21, 43, 232, 171 },
-    { 56, 34, 51, 104, 114, 102, 29, 93, 77 },
-    { 39, 28, 85, 171, 58, 165, 90, 98, 64 },
-    { 34, 22, 116, 206, 23, 34, 43, 166, 73 },
-    { 107, 54, 32, 26, 51, 1, 81, 43, 31 },
-    { 68, 25, 106, 22, 64, 171, 36, 225, 114 },
-    { 34, 19, 21, 102, 132, 188, 16, 76, 124 },
-    { 62, 18, 78, 95, 85, 57, 50, 48, 51 } },
-  { { 193, 101, 35, 159, 215, 111, 89, 46, 111 },
-    { 60, 148, 31, 172, 219, 228, 21, 18, 111 },
-    { 112, 113, 77, 85, 179, 255, 38, 120, 114 },
-    { 40, 42, 1, 196, 245, 209, 10, 25, 109 },
-    { 88, 43, 29, 140, 166, 213, 37, 43, 154 },
-    { 61, 63, 30, 155, 67, 45, 68, 1, 209 },
-    { 100, 80, 8, 43, 154, 1, 51, 26, 71 },
-    { 142, 78, 78, 16, 255, 128, 34, 197, 171 },
-    { 41, 40, 5, 102, 211, 183, 4, 1, 221 },
-    { 51, 50, 17, 168, 209, 192, 23, 25, 82 } },
-  { { 138, 31, 36, 171, 27, 166, 38, 44, 229 },
-    { 67, 87, 58, 169, 82, 115, 26, 59, 179 },
-    { 63, 59, 90, 180, 59, 166, 93, 73, 154 },
-    { 40, 40, 21, 116, 143, 209, 34, 39, 175 },
-    { 47, 15, 16, 183, 34, 223, 49, 45, 183 },
-    { 46, 17, 33, 183, 6, 98, 15, 32, 183 },
-    { 57, 46, 22, 24, 128, 1, 54, 17, 37 },
-    { 65, 32, 73, 115, 28, 128, 23, 128, 205 },
-    { 40, 3, 9, 115, 51, 192, 18, 6, 223 },
-    { 87, 37, 9, 115, 59, 77, 64, 21, 47 } },
-  { { 104, 55, 44, 218, 9, 54, 53, 130, 226 },
-    { 64, 90, 70, 205, 40, 41, 23, 26, 57 },
-    { 54, 57, 112, 184, 5, 41, 38, 166, 213 },
-    { 30, 34, 26, 133, 152, 116, 10, 32, 134 },
-    { 39, 19, 53, 221, 26, 114, 32, 73, 255 },
-    { 31, 9, 65, 234, 2, 15, 1, 118, 73 },
-    { 75, 32, 12, 51, 192, 255, 160, 43, 51 },
-    { 88, 31, 35, 67, 102, 85, 55, 186, 85 },
-    { 56, 21, 23, 111, 59, 205, 45, 37, 192 },
-    { 55, 38, 70, 124, 73, 102, 1, 34, 98 } },
-  { { 125, 98, 42, 88, 104, 85, 117, 175, 82 },
-    { 95, 84, 53, 89, 128, 100, 113, 101, 45 },
-    { 75, 79, 123, 47, 51, 128, 81, 171, 1 },
-    { 57, 17, 5, 71, 102, 57, 53, 41, 49 },
-    { 38, 33, 13, 121, 57, 73, 26, 1, 85 },
-    { 41, 10, 67, 138, 77, 110, 90, 47, 114 },
-    { 115, 21, 2, 10, 102, 255, 166, 23, 6 },
-    { 101, 29, 16, 10, 85, 128, 101, 196, 26 },
-    { 57, 18, 10, 102, 102, 213, 34, 20, 43 },
-    { 117, 20, 15, 36, 163, 128, 68, 1, 26 } },
-  { { 102, 61, 71, 37, 34, 53, 31, 243, 192 },
-    { 69, 60, 71, 38, 73, 119, 28, 222, 37 },
-    { 68, 45, 128, 34, 1, 47, 11, 245, 171 },
-    { 62, 17, 19, 70, 146, 85, 55, 62, 70 },
-    { 37, 43, 37, 154, 100, 163, 85, 160, 1 },
-    { 63, 9, 92, 136, 28, 64, 32, 201, 85 },
-    { 75, 15, 9, 9, 64, 255, 184, 119, 16 },
-    { 86, 6, 28, 5, 64, 255, 25, 248, 1 },
-    { 56, 8, 17, 132, 137, 255, 55, 116, 128 },
-    { 58, 15, 20, 82, 135, 57, 26, 121, 40 } },
-  { { 164, 50, 31, 137, 154, 133, 25, 35, 218 },
-    { 51, 103, 44, 131, 131, 123, 31, 6, 158 },
-    { 86, 40, 64, 135, 148, 224, 45, 183, 128 },
-    { 22, 26, 17, 131, 240, 154, 14, 1, 209 },
-    { 45, 16, 21, 91, 64, 222, 7, 1, 197 },
-    { 56, 21, 39, 155, 60, 138, 23, 102, 213 },
-    { 83, 12, 13, 54, 192, 255, 68, 47, 28 },
-    { 85, 26, 85, 85, 128, 128, 32, 146, 171 },
-    { 18, 11, 7, 63, 144, 171, 4, 4, 246 },
-    { 35, 27, 10, 146, 174, 171, 12, 26, 128 } },
-  { { 190, 80, 35, 99, 180, 80, 126, 54, 45 },
-    { 85, 126, 47, 87, 176, 51, 41, 20, 32 },
-    { 101, 75, 128, 139, 118, 146, 116, 128, 85 },
-    { 56, 41, 15, 176, 236, 85, 37, 9, 62 },
-    { 71, 30, 17, 119, 118, 255, 17, 18, 138 },
-    { 101, 38, 60, 138, 55, 70, 43, 26, 142 },
-    { 146, 36, 19, 30, 171, 255, 97, 27, 20 },
-    { 138, 45, 61, 62, 219, 1, 81, 188, 64 },
-    { 32, 41, 20, 117, 151, 142, 20, 21, 163 },
-    { 112, 19, 12, 61, 195, 128, 48, 4, 24 } }
-};
-
-static int PutI4Mode(VP8BitWriter* const bw, int mode,
-                     const uint8_t* const prob) {
-  if (VP8PutBit(bw, mode != B_DC_PRED, prob[0])) {
-    if (VP8PutBit(bw, mode != B_TM_PRED, prob[1])) {
-      if (VP8PutBit(bw, mode != B_VE_PRED, prob[2])) {
-        if (!VP8PutBit(bw, mode >= B_LD_PRED, prob[3])) {
-          if (VP8PutBit(bw, mode != B_HE_PRED, prob[4])) {
-            VP8PutBit(bw, mode != B_RD_PRED, prob[5]);
-          }
-        } else {
-          if (VP8PutBit(bw, mode != B_LD_PRED, prob[6])) {
-            if (VP8PutBit(bw, mode != B_VL_PRED, prob[7])) {
-              VP8PutBit(bw, mode != B_HD_PRED, prob[8]);
-            }
-          }
-        }
-      }
-    }
-  }
-  return mode;
-}
-
-static void PutI16Mode(VP8BitWriter* const bw, int mode) {
-  if (VP8PutBit(bw, (mode == TM_PRED || mode == H_PRED), 156)) {
-    VP8PutBit(bw, mode == TM_PRED, 128);    // TM or HE
-  } else {
-    VP8PutBit(bw, mode == V_PRED, 163);     // VE or DC
-  }
-}
-
-static void PutUVMode(VP8BitWriter* const bw, int uv_mode) {
-  if (VP8PutBit(bw, uv_mode != DC_PRED, 142)) {
-    if (VP8PutBit(bw, uv_mode != V_PRED, 114)) {
-      VP8PutBit(bw, uv_mode != H_PRED, 183);    // else: TM_PRED
-    }
-  }
-}
-
-static void PutSegment(VP8BitWriter* const bw, int s, const uint8_t* p) {
-  if (VP8PutBit(bw, s >= 2, p[0])) p += 1;
-  VP8PutBit(bw, s & 1, p[1]);
-}
-
-void VP8CodeIntraModes(VP8Encoder* const enc) {
-  VP8BitWriter* const bw = &enc->bw_;
-  VP8EncIterator it;
-  VP8IteratorInit(enc, &it);
-  do {
-    const VP8MBInfo* const mb = it.mb_;
-    const uint8_t* preds = it.preds_;
-    if (enc->segment_hdr_.update_map_) {
-      PutSegment(bw, mb->segment_, enc->proba_.segments_);
-    }
-    if (enc->proba_.use_skip_proba_) {
-      VP8PutBit(bw, mb->skip_, enc->proba_.skip_proba_);
-    }
-    if (VP8PutBit(bw, (mb->type_ != 0), 145)) {  // i16x16
-      PutI16Mode(bw, preds[0]);
-    } else {
-      const int preds_w = enc->preds_w_;
-      const uint8_t* top_pred = preds - preds_w;
-      int x, y;
-      for (y = 0; y < 4; ++y) {
-        int left = preds[-1];
-        for (x = 0; x < 4; ++x) {
-          const uint8_t* const probas = kBModesProba[top_pred[x]][left];
-          left = PutI4Mode(bw, preds[x], probas);
-        }
-        top_pred = preds;
-        preds += preds_w;
-      }
-    }
-    PutUVMode(bw, mb->uv_mode_);
-  } while (VP8IteratorNext(&it));
-}
-
-//------------------------------------------------------------------------------
-// Paragraph 13
-
-const uint8_t
-    VP8CoeffsUpdateProba[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS] = {
-  { { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 },
-      { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    }
-  },
-  { { { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 },
-      { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 }
-    },
-    { { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    }
-  },
-  { { { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 },
-      { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    }
-  },
-  { { { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 },
-      { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    },
-    { { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 },
-      { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }
-    }
-  }
-};
-
-void VP8WriteProbas(VP8BitWriter* const bw, const VP8EncProba* const probas) {
-  int t, b, c, p;
-  for (t = 0; t < NUM_TYPES; ++t) {
-    for (b = 0; b < NUM_BANDS; ++b) {
-      for (c = 0; c < NUM_CTX; ++c) {
-        for (p = 0; p < NUM_PROBAS; ++p) {
-          const uint8_t p0 = probas->coeffs_[t][b][c][p];
-          const int update = (p0 != VP8CoeffsProba0[t][b][c][p]);
-          if (VP8PutBit(bw, update, VP8CoeffsUpdateProba[t][b][c][p])) {
-            VP8PutBits(bw, p0, 8);
-          }
-        }
-      }
-    }
-  }
-  if (VP8PutBitUniform(bw, probas->use_skip_proba_)) {
-    VP8PutBits(bw, probas->skip_proba_, 8);
-  }
-}
-
diff --git a/ios/Pods/libwebp/src/enc/vp8i_enc.h b/ios/Pods/libwebp/src/enc/vp8i_enc.h
deleted file mode 100644
index 3a1967d..0000000
--- a/ios/Pods/libwebp/src/enc/vp8i_enc.h
+++ /dev/null
@@ -1,518 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//   WebP encoder: internal header.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_ENC_VP8I_ENC_H_
-#define WEBP_ENC_VP8I_ENC_H_
-
-#include <string.h>     // for memcpy()
-#include "src/dec/common_dec.h"
-#include "src/dsp/dsp.h"
-#include "src/utils/bit_writer_utils.h"
-#include "src/utils/thread_utils.h"
-#include "src/utils/utils.h"
-#include "src/webp/encode.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Various defines and enums
-
-// version numbers
-#define ENC_MAJ_VERSION 1
-#define ENC_MIN_VERSION 0
-#define ENC_REV_VERSION 2
-
-enum { MAX_LF_LEVELS = 64,       // Maximum loop filter level
-       MAX_VARIABLE_LEVEL = 67,  // last (inclusive) level with variable cost
-       MAX_LEVEL = 2047          // max level (note: max codable is 2047 + 67)
-     };
-
-typedef enum {   // Rate-distortion optimization levels
-  RD_OPT_NONE        = 0,  // no rd-opt
-  RD_OPT_BASIC       = 1,  // basic scoring (no trellis)
-  RD_OPT_TRELLIS     = 2,  // perform trellis-quant on the final decision only
-  RD_OPT_TRELLIS_ALL = 3   // trellis-quant for every scoring (much slower)
-} VP8RDLevel;
-
-// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline).
-// The original or reconstructed samples can be accessed using VP8Scan[].
-// The predicted blocks can be accessed using offsets to yuv_p_ and
-// the arrays VP8*ModeOffsets[].
-// * YUV Samples area (yuv_in_/yuv_out_/yuv_out2_)
-//   (see VP8Scan[] for accessing the blocks, along with
-//   Y_OFF_ENC/U_OFF_ENC/V_OFF_ENC):
-//             +----+----+
-//  Y_OFF_ENC  |YYYY|UUVV|
-//  U_OFF_ENC  |YYYY|UUVV|
-//  V_OFF_ENC  |YYYY|....| <- 25% wasted U/V area
-//             |YYYY|....|
-//             +----+----+
-// * Prediction area ('yuv_p_', size = PRED_SIZE_ENC)
-//   Intra16 predictions (16x16 block each, two per row):
-//         |I16DC16|I16TM16|
-//         |I16VE16|I16HE16|
-//   Chroma U/V predictions (16x8 block each, two per row):
-//         |C8DC8|C8TM8|
-//         |C8VE8|C8HE8|
-//   Intra 4x4 predictions (4x4 block each)
-//         |I4DC4 I4TM4 I4VE4 I4HE4|I4RD4 I4VR4 I4LD4 I4VL4|
-//         |I4HD4 I4HU4 I4TMP .....|.......................| <- ~31% wasted
-#define YUV_SIZE_ENC (BPS * 16)
-#define PRED_SIZE_ENC (32 * BPS + 16 * BPS + 8 * BPS)   // I16+Chroma+I4 preds
-#define Y_OFF_ENC    (0)
-#define U_OFF_ENC    (16)
-#define V_OFF_ENC    (16 + 8)
-
-extern const uint16_t VP8Scan[16];
-extern const uint16_t VP8UVModeOffsets[4];
-extern const uint16_t VP8I16ModeOffsets[4];
-extern const uint16_t VP8I4ModeOffsets[NUM_BMODES];
-
-// Layout of prediction blocks
-// intra 16x16
-#define I16DC16 (0 * 16 * BPS)
-#define I16TM16 (I16DC16 + 16)
-#define I16VE16 (1 * 16 * BPS)
-#define I16HE16 (I16VE16 + 16)
-// chroma 8x8, two U/V blocks side by side (hence: 16x8 each)
-#define C8DC8 (2 * 16 * BPS)
-#define C8TM8 (C8DC8 + 1 * 16)
-#define C8VE8 (2 * 16 * BPS + 8 * BPS)
-#define C8HE8 (C8VE8 + 1 * 16)
-// intra 4x4
-#define I4DC4 (3 * 16 * BPS +  0)
-#define I4TM4 (I4DC4 +  4)
-#define I4VE4 (I4DC4 +  8)
-#define I4HE4 (I4DC4 + 12)
-#define I4RD4 (I4DC4 + 16)
-#define I4VR4 (I4DC4 + 20)
-#define I4LD4 (I4DC4 + 24)
-#define I4VL4 (I4DC4 + 28)
-#define I4HD4 (3 * 16 * BPS + 4 * BPS)
-#define I4HU4 (I4HD4 + 4)
-#define I4TMP (I4HD4 + 8)
-
-typedef int64_t score_t;     // type used for scores, rate, distortion
-// Note that MAX_COST is not the maximum allowed by sizeof(score_t),
-// in order to allow overflowing computations.
-#define MAX_COST ((score_t)0x7fffffffffffffLL)
-
-#define QFIX 17
-#define BIAS(b)  ((b) << (QFIX - 8))
-// Fun fact: this is the _only_ line where we're actually being lossy and
-// discarding bits.
-static WEBP_INLINE int QUANTDIV(uint32_t n, uint32_t iQ, uint32_t B) {
-  return (int)((n * iQ + B) >> QFIX);
-}
-
-// Uncomment the following to remove token-buffer code:
-// #define DISABLE_TOKEN_BUFFER
-
-// quality below which error-diffusion is enabled
-#define ERROR_DIFFUSION_QUALITY 98
-
-//------------------------------------------------------------------------------
-// Headers
-
-typedef uint32_t proba_t;   // 16b + 16b
-typedef uint8_t ProbaArray[NUM_CTX][NUM_PROBAS];
-typedef proba_t StatsArray[NUM_CTX][NUM_PROBAS];
-typedef uint16_t CostArray[NUM_CTX][MAX_VARIABLE_LEVEL + 1];
-typedef const uint16_t* (*CostArrayPtr)[NUM_CTX];   // for easy casting
-typedef const uint16_t* CostArrayMap[16][NUM_CTX];
-typedef double LFStats[NUM_MB_SEGMENTS][MAX_LF_LEVELS];  // filter stats
-
-typedef struct VP8Encoder VP8Encoder;
-
-// segment features
-typedef struct {
-  int num_segments_;      // Actual number of segments. 1 segment only = unused.
-  int update_map_;        // whether to update the segment map or not.
-                          // must be 0 if there's only 1 segment.
-  int size_;              // bit-cost for transmitting the segment map
-} VP8EncSegmentHeader;
-
-// Struct collecting all frame-persistent probabilities.
-typedef struct {
-  uint8_t segments_[3];     // probabilities for segment tree
-  uint8_t skip_proba_;      // final probability of being skipped.
-  ProbaArray coeffs_[NUM_TYPES][NUM_BANDS];      // 1056 bytes
-  StatsArray stats_[NUM_TYPES][NUM_BANDS];       // 4224 bytes
-  CostArray level_cost_[NUM_TYPES][NUM_BANDS];   // 13056 bytes
-  CostArrayMap remapped_costs_[NUM_TYPES];       // 1536 bytes
-  int dirty_;               // if true, need to call VP8CalculateLevelCosts()
-  int use_skip_proba_;      // Note: we always use skip_proba for now.
-  int nb_skip_;             // number of skipped blocks
-} VP8EncProba;
-
-// Filter parameters. Not actually used in the code (we don't perform
-// the in-loop filtering), but filled from user's config
-typedef struct {
-  int simple_;             // filtering type: 0=complex, 1=simple
-  int level_;              // base filter level [0..63]
-  int sharpness_;          // [0..7]
-  int i4x4_lf_delta_;      // delta filter level for i4x4 relative to i16x16
-} VP8EncFilterHeader;
-
-//------------------------------------------------------------------------------
-// Informations about the macroblocks.
-
-typedef struct {
-  // block type
-  unsigned int type_:2;     // 0=i4x4, 1=i16x16
-  unsigned int uv_mode_:2;
-  unsigned int skip_:1;
-  unsigned int segment_:2;
-  uint8_t alpha_;      // quantization-susceptibility
-} VP8MBInfo;
-
-typedef struct VP8Matrix {
-  uint16_t q_[16];        // quantizer steps
-  uint16_t iq_[16];       // reciprocals, fixed point.
-  uint32_t bias_[16];     // rounding bias
-  uint32_t zthresh_[16];  // value below which a coefficient is zeroed
-  uint16_t sharpen_[16];  // frequency boosters for slight sharpening
-} VP8Matrix;
-
-typedef struct {
-  VP8Matrix y1_, y2_, uv_;  // quantization matrices
-  int alpha_;      // quant-susceptibility, range [-127,127]. Zero is neutral.
-                   // Lower values indicate a lower risk of blurriness.
-  int beta_;       // filter-susceptibility, range [0,255].
-  int quant_;      // final segment quantizer.
-  int fstrength_;  // final in-loop filtering strength
-  int max_edge_;   // max edge delta (for filtering strength)
-  int min_disto_;  // minimum distortion required to trigger filtering record
-  // reactivities
-  int lambda_i16_, lambda_i4_, lambda_uv_;
-  int lambda_mode_, lambda_trellis_, tlambda_;
-  int lambda_trellis_i16_, lambda_trellis_i4_, lambda_trellis_uv_;
-
-  // lambda values for distortion-based evaluation
-  score_t i4_penalty_;   // penalty for using Intra4
-} VP8SegmentInfo;
-
-typedef int8_t DError[2 /* u/v */][2 /* top or left */];
-
-// Handy transient struct to accumulate score and info during RD-optimization
-// and mode evaluation.
-typedef struct {
-  score_t D, SD;              // Distortion, spectral distortion
-  score_t H, R, score;        // header bits, rate, score.
-  int16_t y_dc_levels[16];    // Quantized levels for luma-DC, luma-AC, chroma.
-  int16_t y_ac_levels[16][16];
-  int16_t uv_levels[4 + 4][16];
-  int mode_i16;               // mode number for intra16 prediction
-  uint8_t modes_i4[16];       // mode numbers for intra4 predictions
-  int mode_uv;                // mode number of chroma prediction
-  uint32_t nz;                // non-zero blocks
-  int8_t derr[2][3];          // DC diffusion errors for U/V for blocks #1/2/3
-} VP8ModeScore;
-
-// Iterator structure to iterate through macroblocks, pointing to the
-// right neighbouring data (samples, predictions, contexts, ...)
-typedef struct {
-  int x_, y_;                      // current macroblock
-  uint8_t*      yuv_in_;           // input samples
-  uint8_t*      yuv_out_;          // output samples
-  uint8_t*      yuv_out2_;         // secondary buffer swapped with yuv_out_.
-  uint8_t*      yuv_p_;            // scratch buffer for prediction
-  VP8Encoder*   enc_;              // back-pointer
-  VP8MBInfo*    mb_;               // current macroblock
-  VP8BitWriter* bw_;               // current bit-writer
-  uint8_t*      preds_;            // intra mode predictors (4x4 blocks)
-  uint32_t*     nz_;               // non-zero pattern
-  uint8_t       i4_boundary_[37];  // 32+5 boundary samples needed by intra4x4
-  uint8_t*      i4_top_;           // pointer to the current top boundary sample
-  int           i4_;               // current intra4x4 mode being tested
-  int           top_nz_[9];        // top-non-zero context.
-  int           left_nz_[9];       // left-non-zero. left_nz[8] is independent.
-  uint64_t      bit_count_[4][3];  // bit counters for coded levels.
-  uint64_t      luma_bits_;        // macroblock bit-cost for luma
-  uint64_t      uv_bits_;          // macroblock bit-cost for chroma
-  LFStats*      lf_stats_;         // filter stats (borrowed from enc_)
-  int           do_trellis_;       // if true, perform extra level optimisation
-  int           count_down_;       // number of mb still to be processed
-  int           count_down0_;      // starting counter value (for progress)
-  int           percent0_;         // saved initial progress percent
-
-  DError        left_derr_;        // left error diffusion (u/v)
-  DError       *top_derr_;         // top diffusion error - NULL if disabled
-
-  uint8_t* y_left_;    // left luma samples (addressable from index -1 to 15).
-  uint8_t* u_left_;    // left u samples (addressable from index -1 to 7)
-  uint8_t* v_left_;    // left v samples (addressable from index -1 to 7)
-
-  uint8_t* y_top_;     // top luma samples at position 'x_'
-  uint8_t* uv_top_;    // top u/v samples at position 'x_', packed as 16 bytes
-
-  // memory for storing y/u/v_left_
-  uint8_t yuv_left_mem_[17 + 16 + 16 + 8 + WEBP_ALIGN_CST];
-  // memory for yuv_*
-  uint8_t yuv_mem_[3 * YUV_SIZE_ENC + PRED_SIZE_ENC + WEBP_ALIGN_CST];
-} VP8EncIterator;
-
-  // in iterator.c
-// must be called first
-void VP8IteratorInit(VP8Encoder* const enc, VP8EncIterator* const it);
-// restart a scan
-void VP8IteratorReset(VP8EncIterator* const it);
-// reset iterator position to row 'y'
-void VP8IteratorSetRow(VP8EncIterator* const it, int y);
-// set count down (=number of iterations to go)
-void VP8IteratorSetCountDown(VP8EncIterator* const it, int count_down);
-// return true if iteration is finished
-int VP8IteratorIsDone(const VP8EncIterator* const it);
-// Import uncompressed samples from source.
-// If tmp_32 is not NULL, import boundary samples too.
-// tmp_32 is a 32-bytes scratch buffer that must be aligned in memory.
-void VP8IteratorImport(VP8EncIterator* const it, uint8_t* const tmp_32);
-// export decimated samples
-void VP8IteratorExport(const VP8EncIterator* const it);
-// go to next macroblock. Returns false if not finished.
-int VP8IteratorNext(VP8EncIterator* const it);
-// save the yuv_out_ boundary values to top_/left_ arrays for next iterations.
-void VP8IteratorSaveBoundary(VP8EncIterator* const it);
-// Report progression based on macroblock rows. Return 0 for user-abort request.
-int VP8IteratorProgress(const VP8EncIterator* const it,
-                        int final_delta_percent);
-// Intra4x4 iterations
-void VP8IteratorStartI4(VP8EncIterator* const it);
-// returns true if not done.
-int VP8IteratorRotateI4(VP8EncIterator* const it,
-                        const uint8_t* const yuv_out);
-
-// Non-zero context setup/teardown
-void VP8IteratorNzToBytes(VP8EncIterator* const it);
-void VP8IteratorBytesToNz(VP8EncIterator* const it);
-
-// Helper functions to set mode properties
-void VP8SetIntra16Mode(const VP8EncIterator* const it, int mode);
-void VP8SetIntra4Mode(const VP8EncIterator* const it, const uint8_t* modes);
-void VP8SetIntraUVMode(const VP8EncIterator* const it, int mode);
-void VP8SetSkip(const VP8EncIterator* const it, int skip);
-void VP8SetSegment(const VP8EncIterator* const it, int segment);
-
-//------------------------------------------------------------------------------
-// Paginated token buffer
-
-typedef struct VP8Tokens VP8Tokens;  // struct details in token.c
-
-typedef struct {
-#if !defined(DISABLE_TOKEN_BUFFER)
-  VP8Tokens* pages_;        // first page
-  VP8Tokens** last_page_;   // last page
-  uint16_t* tokens_;        // set to (*last_page_)->tokens_
-  int left_;                // how many free tokens left before the page is full
-  int page_size_;           // number of tokens per page
-#endif
-  int error_;         // true in case of malloc error
-} VP8TBuffer;
-
-// initialize an empty buffer
-void VP8TBufferInit(VP8TBuffer* const b, int page_size);
-void VP8TBufferClear(VP8TBuffer* const b);   // de-allocate pages memory
-
-#if !defined(DISABLE_TOKEN_BUFFER)
-
-// Finalizes bitstream when probabilities are known.
-// Deletes the allocated token memory if final_pass is true.
-int VP8EmitTokens(VP8TBuffer* const b, VP8BitWriter* const bw,
-                  const uint8_t* const probas, int final_pass);
-
-// record the coding of coefficients without knowing the probabilities yet
-int VP8RecordCoeffTokens(int ctx, const struct VP8Residual* const res,
-                         VP8TBuffer* const tokens);
-
-// Estimate the final coded size given a set of 'probas'.
-size_t VP8EstimateTokenSize(VP8TBuffer* const b, const uint8_t* const probas);
-
-#endif  // !DISABLE_TOKEN_BUFFER
-
-//------------------------------------------------------------------------------
-// VP8Encoder
-
-struct VP8Encoder {
-  const WebPConfig* config_;    // user configuration and parameters
-  WebPPicture* pic_;            // input / output picture
-
-  // headers
-  VP8EncFilterHeader   filter_hdr_;     // filtering information
-  VP8EncSegmentHeader  segment_hdr_;    // segment information
-
-  int profile_;                      // VP8's profile, deduced from Config.
-
-  // dimension, in macroblock units.
-  int mb_w_, mb_h_;
-  int preds_w_;   // stride of the *preds_ prediction plane (=4*mb_w + 1)
-
-  // number of partitions (1, 2, 4 or 8 = MAX_NUM_PARTITIONS)
-  int num_parts_;
-
-  // per-partition boolean decoders.
-  VP8BitWriter bw_;                         // part0
-  VP8BitWriter parts_[MAX_NUM_PARTITIONS];  // token partitions
-  VP8TBuffer tokens_;                       // token buffer
-
-  int percent_;                             // for progress
-
-  // transparency blob
-  int has_alpha_;
-  uint8_t* alpha_data_;       // non-NULL if transparency is present
-  uint32_t alpha_data_size_;
-  WebPWorker alpha_worker_;
-
-  // quantization info (one set of DC/AC dequant factor per segment)
-  VP8SegmentInfo dqm_[NUM_MB_SEGMENTS];
-  int base_quant_;                 // nominal quantizer value. Only used
-                                   // for relative coding of segments' quant.
-  int alpha_;                      // global susceptibility (<=> complexity)
-  int uv_alpha_;                   // U/V quantization susceptibility
-  // global offset of quantizers, shared by all segments
-  int dq_y1_dc_;
-  int dq_y2_dc_, dq_y2_ac_;
-  int dq_uv_dc_, dq_uv_ac_;
-
-  // probabilities and statistics
-  VP8EncProba proba_;
-  uint64_t    sse_[4];      // sum of Y/U/V/A squared errors for all macroblocks
-  uint64_t    sse_count_;   // pixel count for the sse_[] stats
-  int         coded_size_;
-  int         residual_bytes_[3][4];
-  int         block_count_[3];
-
-  // quality/speed settings
-  int method_;               // 0=fastest, 6=best/slowest.
-  VP8RDLevel rd_opt_level_;  // Deduced from method_.
-  int max_i4_header_bits_;   // partition #0 safeness factor
-  int mb_header_limit_;      // rough limit for header bits per MB
-  int thread_level_;         // derived from config->thread_level
-  int do_search_;            // derived from config->target_XXX
-  int use_tokens_;           // if true, use token buffer
-
-  // Memory
-  VP8MBInfo* mb_info_;   // contextual macroblock infos (mb_w_ + 1)
-  uint8_t*   preds_;     // predictions modes: (4*mb_w+1) * (4*mb_h+1)
-  uint32_t*  nz_;        // non-zero bit context: mb_w+1
-  uint8_t*   y_top_;     // top luma samples.
-  uint8_t*   uv_top_;    // top u/v samples.
-                         // U and V are packed into 16 bytes (8 U + 8 V)
-  LFStats*   lf_stats_;  // autofilter stats (if NULL, autofilter is off)
-  DError*    top_derr_;  // diffusion error (NULL if disabled)
-};
-
-//------------------------------------------------------------------------------
-// internal functions. Not public.
-
-  // in tree.c
-extern const uint8_t VP8CoeffsProba0[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS];
-extern const uint8_t
-    VP8CoeffsUpdateProba[NUM_TYPES][NUM_BANDS][NUM_CTX][NUM_PROBAS];
-// Reset the token probabilities to their initial (default) values
-void VP8DefaultProbas(VP8Encoder* const enc);
-// Write the token probabilities
-void VP8WriteProbas(VP8BitWriter* const bw, const VP8EncProba* const probas);
-// Writes the partition #0 modes (that is: all intra modes)
-void VP8CodeIntraModes(VP8Encoder* const enc);
-
-  // in syntax.c
-// Generates the final bitstream by coding the partition0 and headers,
-// and appending an assembly of all the pre-coded token partitions.
-// Return true if everything is ok.
-int VP8EncWrite(VP8Encoder* const enc);
-// Release memory allocated for bit-writing in VP8EncLoop & seq.
-void VP8EncFreeBitWriters(VP8Encoder* const enc);
-
-  // in frame.c
-extern const uint8_t VP8Cat3[];
-extern const uint8_t VP8Cat4[];
-extern const uint8_t VP8Cat5[];
-extern const uint8_t VP8Cat6[];
-
-// Form all the four Intra16x16 predictions in the yuv_p_ cache
-void VP8MakeLuma16Preds(const VP8EncIterator* const it);
-// Form all the four Chroma8x8 predictions in the yuv_p_ cache
-void VP8MakeChroma8Preds(const VP8EncIterator* const it);
-// Form all the ten Intra4x4 predictions in the yuv_p_ cache
-// for the 4x4 block it->i4_
-void VP8MakeIntra4Preds(const VP8EncIterator* const it);
-// Rate calculation
-int VP8GetCostLuma16(VP8EncIterator* const it, const VP8ModeScore* const rd);
-int VP8GetCostLuma4(VP8EncIterator* const it, const int16_t levels[16]);
-int VP8GetCostUV(VP8EncIterator* const it, const VP8ModeScore* const rd);
-// Main coding calls
-int VP8EncLoop(VP8Encoder* const enc);
-int VP8EncTokenLoop(VP8Encoder* const enc);
-
-  // in webpenc.c
-// Assign an error code to a picture. Return false for convenience.
-int WebPEncodingSetError(const WebPPicture* const pic, WebPEncodingError error);
-int WebPReportProgress(const WebPPicture* const pic,
-                       int percent, int* const percent_store);
-
-  // in analysis.c
-// Main analysis loop. Decides the segmentations and complexity.
-// Assigns a first guess for Intra16 and uvmode_ prediction modes.
-int VP8EncAnalyze(VP8Encoder* const enc);
-
-  // in quant.c
-// Sets up segment's quantization values, base_quant_ and filter strengths.
-void VP8SetSegmentParams(VP8Encoder* const enc, float quality);
-// Pick best modes and fills the levels. Returns true if skipped.
-int VP8Decimate(VP8EncIterator* const it, VP8ModeScore* const rd,
-                VP8RDLevel rd_opt);
-
-  // in alpha.c
-void VP8EncInitAlpha(VP8Encoder* const enc);    // initialize alpha compression
-int VP8EncStartAlpha(VP8Encoder* const enc);    // start alpha coding process
-int VP8EncFinishAlpha(VP8Encoder* const enc);   // finalize compressed data
-int VP8EncDeleteAlpha(VP8Encoder* const enc);   // delete compressed data
-
-// autofilter
-void VP8InitFilter(VP8EncIterator* const it);
-void VP8StoreFilterStats(VP8EncIterator* const it);
-void VP8AdjustFilterStrength(VP8EncIterator* const it);
-
-// returns the approximate filtering strength needed to smooth a edge
-// step of 'delta', given a sharpness parameter 'sharpness'.
-int VP8FilterStrengthFromDelta(int sharpness, int delta);
-
-  // misc utils for picture_*.c:
-
-// Remove reference to the ARGB/YUVA buffer (doesn't free anything).
-void WebPPictureResetBuffers(WebPPicture* const picture);
-
-// Allocates ARGB buffer of given dimension (previous one is always free'd).
-// Preserves the YUV(A) buffer. Returns false in case of error (invalid param,
-// out-of-memory).
-int WebPPictureAllocARGB(WebPPicture* const picture, int width, int height);
-
-// Allocates YUVA buffer of given dimension (previous one is always free'd).
-// Uses picture->csp to determine whether an alpha buffer is needed.
-// Preserves the ARGB buffer.
-// Returns false in case of error (invalid param, out-of-memory).
-int WebPPictureAllocYUVA(WebPPicture* const picture, int width, int height);
-
-// Clean-up the RGB samples under fully transparent area, to help lossless
-// compressibility (no guarantee, though). Assumes that pic->use_argb is true.
-void WebPCleanupTransparentAreaLossless(WebPPicture* const pic);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_ENC_VP8I_ENC_H_
diff --git a/ios/Pods/libwebp/src/enc/vp8l_enc.c b/ios/Pods/libwebp/src/enc/vp8l_enc.c
deleted file mode 100644
index 2efd403..0000000
--- a/ios/Pods/libwebp/src/enc/vp8l_enc.c
+++ /dev/null
@@ -1,1917 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// main entry for the lossless encoder.
-//
-// Author: Vikas Arora (vikaas.arora@gmail.com)
-//
-
-#include <assert.h>
-#include <stdlib.h>
-
-#include "src/enc/backward_references_enc.h"
-#include "src/enc/histogram_enc.h"
-#include "src/enc/vp8i_enc.h"
-#include "src/enc/vp8li_enc.h"
-#include "src/dsp/lossless.h"
-#include "src/dsp/lossless_common.h"
-#include "src/utils/bit_writer_utils.h"
-#include "src/utils/huffman_encode_utils.h"
-#include "src/utils/utils.h"
-#include "src/webp/format_constants.h"
-
-// Maximum number of histogram images (sub-blocks).
-#define MAX_HUFF_IMAGE_SIZE       2600
-
-// Palette reordering for smaller sum of deltas (and for smaller storage).
-
-static int PaletteCompareColorsForQsort(const void* p1, const void* p2) {
-  const uint32_t a = WebPMemToUint32((uint8_t*)p1);
-  const uint32_t b = WebPMemToUint32((uint8_t*)p2);
-  assert(a != b);
-  return (a < b) ? -1 : 1;
-}
-
-static WEBP_INLINE uint32_t PaletteComponentDistance(uint32_t v) {
-  return (v <= 128) ? v : (256 - v);
-}
-
-// Computes a value that is related to the entropy created by the
-// palette entry diff.
-//
-// Note that the last & 0xff is a no-operation in the next statement, but
-// removed by most compilers and is here only for regularity of the code.
-static WEBP_INLINE uint32_t PaletteColorDistance(uint32_t col1, uint32_t col2) {
-  const uint32_t diff = VP8LSubPixels(col1, col2);
-  const int kMoreWeightForRGBThanForAlpha = 9;
-  uint32_t score;
-  score =  PaletteComponentDistance((diff >>  0) & 0xff);
-  score += PaletteComponentDistance((diff >>  8) & 0xff);
-  score += PaletteComponentDistance((diff >> 16) & 0xff);
-  score *= kMoreWeightForRGBThanForAlpha;
-  score += PaletteComponentDistance((diff >> 24) & 0xff);
-  return score;
-}
-
-static WEBP_INLINE void SwapColor(uint32_t* const col1, uint32_t* const col2) {
-  const uint32_t tmp = *col1;
-  *col1 = *col2;
-  *col2 = tmp;
-}
-
-static void GreedyMinimizeDeltas(uint32_t palette[], int num_colors) {
-  // Find greedily always the closest color of the predicted color to minimize
-  // deltas in the palette. This reduces storage needs since the
-  // palette is stored with delta encoding.
-  uint32_t predict = 0x00000000;
-  int i, k;
-  for (i = 0; i < num_colors; ++i) {
-    int best_ix = i;
-    uint32_t best_score = ~0U;
-    for (k = i; k < num_colors; ++k) {
-      const uint32_t cur_score = PaletteColorDistance(palette[k], predict);
-      if (best_score > cur_score) {
-        best_score = cur_score;
-        best_ix = k;
-      }
-    }
-    SwapColor(&palette[best_ix], &palette[i]);
-    predict = palette[i];
-  }
-}
-
-// The palette has been sorted by alpha. This function checks if the other
-// components of the palette have a monotonic development with regards to
-// position in the palette. If all have monotonic development, there is
-// no benefit to re-organize them greedily. A monotonic development
-// would be spotted in green-only situations (like lossy alpha) or gray-scale
-// images.
-static int PaletteHasNonMonotonousDeltas(uint32_t palette[], int num_colors) {
-  uint32_t predict = 0x000000;
-  int i;
-  uint8_t sign_found = 0x00;
-  for (i = 0; i < num_colors; ++i) {
-    const uint32_t diff = VP8LSubPixels(palette[i], predict);
-    const uint8_t rd = (diff >> 16) & 0xff;
-    const uint8_t gd = (diff >>  8) & 0xff;
-    const uint8_t bd = (diff >>  0) & 0xff;
-    if (rd != 0x00) {
-      sign_found |= (rd < 0x80) ? 1 : 2;
-    }
-    if (gd != 0x00) {
-      sign_found |= (gd < 0x80) ? 8 : 16;
-    }
-    if (bd != 0x00) {
-      sign_found |= (bd < 0x80) ? 64 : 128;
-    }
-    predict = palette[i];
-  }
-  return (sign_found & (sign_found << 1)) != 0;  // two consequent signs.
-}
-
-// -----------------------------------------------------------------------------
-// Palette
-
-// If number of colors in the image is less than or equal to MAX_PALETTE_SIZE,
-// creates a palette and returns true, else returns false.
-static int AnalyzeAndCreatePalette(const WebPPicture* const pic,
-                                   int low_effort,
-                                   uint32_t palette[MAX_PALETTE_SIZE],
-                                   int* const palette_size) {
-  const int num_colors = WebPGetColorPalette(pic, palette);
-  if (num_colors > MAX_PALETTE_SIZE) {
-    *palette_size = 0;
-    return 0;
-  }
-  *palette_size = num_colors;
-  qsort(palette, num_colors, sizeof(*palette), PaletteCompareColorsForQsort);
-  if (!low_effort && PaletteHasNonMonotonousDeltas(palette, num_colors)) {
-    GreedyMinimizeDeltas(palette, num_colors);
-  }
-  return 1;
-}
-
-// These five modes are evaluated and their respective entropy is computed.
-typedef enum {
-  kDirect = 0,
-  kSpatial = 1,
-  kSubGreen = 2,
-  kSpatialSubGreen = 3,
-  kPalette = 4,
-  kNumEntropyIx = 5
-} EntropyIx;
-
-typedef enum {
-  kHistoAlpha = 0,
-  kHistoAlphaPred,
-  kHistoGreen,
-  kHistoGreenPred,
-  kHistoRed,
-  kHistoRedPred,
-  kHistoBlue,
-  kHistoBluePred,
-  kHistoRedSubGreen,
-  kHistoRedPredSubGreen,
-  kHistoBlueSubGreen,
-  kHistoBluePredSubGreen,
-  kHistoPalette,
-  kHistoTotal  // Must be last.
-} HistoIx;
-
-static void AddSingleSubGreen(int p, uint32_t* const r, uint32_t* const b) {
-  const int green = p >> 8;  // The upper bits are masked away later.
-  ++r[((p >> 16) - green) & 0xff];
-  ++b[((p >>  0) - green) & 0xff];
-}
-
-static void AddSingle(uint32_t p,
-                      uint32_t* const a, uint32_t* const r,
-                      uint32_t* const g, uint32_t* const b) {
-  ++a[(p >> 24) & 0xff];
-  ++r[(p >> 16) & 0xff];
-  ++g[(p >>  8) & 0xff];
-  ++b[(p >>  0) & 0xff];
-}
-
-static WEBP_INLINE uint32_t HashPix(uint32_t pix) {
-  // Note that masking with 0xffffffffu is for preventing an
-  // 'unsigned int overflow' warning. Doesn't impact the compiled code.
-  return ((((uint64_t)pix + (pix >> 19)) * 0x39c5fba7ull) & 0xffffffffu) >> 24;
-}
-
-static int AnalyzeEntropy(const uint32_t* argb,
-                          int width, int height, int argb_stride,
-                          int use_palette,
-                          int palette_size, int transform_bits,
-                          EntropyIx* const min_entropy_ix,
-                          int* const red_and_blue_always_zero) {
-  // Allocate histogram set with cache_bits = 0.
-  uint32_t* histo;
-
-  if (use_palette && palette_size <= 16) {
-    // In the case of small palettes, we pack 2, 4 or 8 pixels together. In
-    // practice, small palettes are better than any other transform.
-    *min_entropy_ix = kPalette;
-    *red_and_blue_always_zero = 1;
-    return 1;
-  }
-  histo = (uint32_t*)WebPSafeCalloc(kHistoTotal, sizeof(*histo) * 256);
-  if (histo != NULL) {
-    int i, x, y;
-    const uint32_t* prev_row = NULL;
-    const uint32_t* curr_row = argb;
-    uint32_t pix_prev = argb[0];  // Skip the first pixel.
-    for (y = 0; y < height; ++y) {
-      for (x = 0; x < width; ++x) {
-        const uint32_t pix = curr_row[x];
-        const uint32_t pix_diff = VP8LSubPixels(pix, pix_prev);
-        pix_prev = pix;
-        if ((pix_diff == 0) || (prev_row != NULL && pix == prev_row[x])) {
-          continue;
-        }
-        AddSingle(pix,
-                  &histo[kHistoAlpha * 256],
-                  &histo[kHistoRed * 256],
-                  &histo[kHistoGreen * 256],
-                  &histo[kHistoBlue * 256]);
-        AddSingle(pix_diff,
-                  &histo[kHistoAlphaPred * 256],
-                  &histo[kHistoRedPred * 256],
-                  &histo[kHistoGreenPred * 256],
-                  &histo[kHistoBluePred * 256]);
-        AddSingleSubGreen(pix,
-                          &histo[kHistoRedSubGreen * 256],
-                          &histo[kHistoBlueSubGreen * 256]);
-        AddSingleSubGreen(pix_diff,
-                          &histo[kHistoRedPredSubGreen * 256],
-                          &histo[kHistoBluePredSubGreen * 256]);
-        {
-          // Approximate the palette by the entropy of the multiplicative hash.
-          const uint32_t hash = HashPix(pix);
-          ++histo[kHistoPalette * 256 + hash];
-        }
-      }
-      prev_row = curr_row;
-      curr_row += argb_stride;
-    }
-    {
-      double entropy_comp[kHistoTotal];
-      double entropy[kNumEntropyIx];
-      int k;
-      int last_mode_to_analyze = use_palette ? kPalette : kSpatialSubGreen;
-      int j;
-      // Let's add one zero to the predicted histograms. The zeros are removed
-      // too efficiently by the pix_diff == 0 comparison, at least one of the
-      // zeros is likely to exist.
-      ++histo[kHistoRedPredSubGreen * 256];
-      ++histo[kHistoBluePredSubGreen * 256];
-      ++histo[kHistoRedPred * 256];
-      ++histo[kHistoGreenPred * 256];
-      ++histo[kHistoBluePred * 256];
-      ++histo[kHistoAlphaPred * 256];
-
-      for (j = 0; j < kHistoTotal; ++j) {
-        entropy_comp[j] = VP8LBitsEntropy(&histo[j * 256], 256);
-      }
-      entropy[kDirect] = entropy_comp[kHistoAlpha] +
-          entropy_comp[kHistoRed] +
-          entropy_comp[kHistoGreen] +
-          entropy_comp[kHistoBlue];
-      entropy[kSpatial] = entropy_comp[kHistoAlphaPred] +
-          entropy_comp[kHistoRedPred] +
-          entropy_comp[kHistoGreenPred] +
-          entropy_comp[kHistoBluePred];
-      entropy[kSubGreen] = entropy_comp[kHistoAlpha] +
-          entropy_comp[kHistoRedSubGreen] +
-          entropy_comp[kHistoGreen] +
-          entropy_comp[kHistoBlueSubGreen];
-      entropy[kSpatialSubGreen] = entropy_comp[kHistoAlphaPred] +
-          entropy_comp[kHistoRedPredSubGreen] +
-          entropy_comp[kHistoGreenPred] +
-          entropy_comp[kHistoBluePredSubGreen];
-      entropy[kPalette] = entropy_comp[kHistoPalette];
-
-      // When including transforms, there is an overhead in bits from
-      // storing them. This overhead is small but matters for small images.
-      // For spatial, there are 14 transformations.
-      entropy[kSpatial] += VP8LSubSampleSize(width, transform_bits) *
-                           VP8LSubSampleSize(height, transform_bits) *
-                           VP8LFastLog2(14);
-      // For color transforms: 24 as only 3 channels are considered in a
-      // ColorTransformElement.
-      entropy[kSpatialSubGreen] += VP8LSubSampleSize(width, transform_bits) *
-                                   VP8LSubSampleSize(height, transform_bits) *
-                                   VP8LFastLog2(24);
-      // For palettes, add the cost of storing the palette.
-      // We empirically estimate the cost of a compressed entry as 8 bits.
-      // The palette is differential-coded when compressed hence a much
-      // lower cost than sizeof(uint32_t)*8.
-      entropy[kPalette] += palette_size * 8;
-
-      *min_entropy_ix = kDirect;
-      for (k = kDirect + 1; k <= last_mode_to_analyze; ++k) {
-        if (entropy[*min_entropy_ix] > entropy[k]) {
-          *min_entropy_ix = (EntropyIx)k;
-        }
-      }
-      assert((int)*min_entropy_ix <= last_mode_to_analyze);
-      *red_and_blue_always_zero = 1;
-      // Let's check if the histogram of the chosen entropy mode has
-      // non-zero red and blue values. If all are zero, we can later skip
-      // the cross color optimization.
-      {
-        static const uint8_t kHistoPairs[5][2] = {
-          { kHistoRed, kHistoBlue },
-          { kHistoRedPred, kHistoBluePred },
-          { kHistoRedSubGreen, kHistoBlueSubGreen },
-          { kHistoRedPredSubGreen, kHistoBluePredSubGreen },
-          { kHistoRed, kHistoBlue }
-        };
-        const uint32_t* const red_histo =
-            &histo[256 * kHistoPairs[*min_entropy_ix][0]];
-        const uint32_t* const blue_histo =
-            &histo[256 * kHistoPairs[*min_entropy_ix][1]];
-        for (i = 1; i < 256; ++i) {
-          if ((red_histo[i] | blue_histo[i]) != 0) {
-            *red_and_blue_always_zero = 0;
-            break;
-          }
-        }
-      }
-    }
-    WebPSafeFree(histo);
-    return 1;
-  } else {
-    return 0;
-  }
-}
-
-static int GetHistoBits(int method, int use_palette, int width, int height) {
-  // Make tile size a function of encoding method (Range: 0 to 6).
-  int histo_bits = (use_palette ? 9 : 7) - method;
-  while (1) {
-    const int huff_image_size = VP8LSubSampleSize(width, histo_bits) *
-                                VP8LSubSampleSize(height, histo_bits);
-    if (huff_image_size <= MAX_HUFF_IMAGE_SIZE) break;
-    ++histo_bits;
-  }
-  return (histo_bits < MIN_HUFFMAN_BITS) ? MIN_HUFFMAN_BITS :
-         (histo_bits > MAX_HUFFMAN_BITS) ? MAX_HUFFMAN_BITS : histo_bits;
-}
-
-static int GetTransformBits(int method, int histo_bits) {
-  const int max_transform_bits = (method < 4) ? 6 : (method > 4) ? 4 : 5;
-  const int res =
-      (histo_bits > max_transform_bits) ? max_transform_bits : histo_bits;
-  assert(res <= MAX_TRANSFORM_BITS);
-  return res;
-}
-
-// Set of parameters to be used in each iteration of the cruncher.
-#define CRUNCH_CONFIGS_LZ77_MAX 2
-typedef struct {
-  int entropy_idx_;
-  int lz77s_types_to_try_[CRUNCH_CONFIGS_LZ77_MAX];
-  int lz77s_types_to_try_size_;
-} CrunchConfig;
-
-#define CRUNCH_CONFIGS_MAX kNumEntropyIx
-
-static int EncoderAnalyze(VP8LEncoder* const enc,
-                          CrunchConfig crunch_configs[CRUNCH_CONFIGS_MAX],
-                          int* const crunch_configs_size,
-                          int* const red_and_blue_always_zero) {
-  const WebPPicture* const pic = enc->pic_;
-  const int width = pic->width;
-  const int height = pic->height;
-  const WebPConfig* const config = enc->config_;
-  const int method = config->method;
-  const int low_effort = (config->method == 0);
-  int i;
-  int use_palette;
-  int n_lz77s;
-  assert(pic != NULL && pic->argb != NULL);
-
-  use_palette =
-      AnalyzeAndCreatePalette(pic, low_effort,
-                              enc->palette_, &enc->palette_size_);
-
-  // Empirical bit sizes.
-  enc->histo_bits_ = GetHistoBits(method, use_palette,
-                                  pic->width, pic->height);
-  enc->transform_bits_ = GetTransformBits(method, enc->histo_bits_);
-
-  if (low_effort) {
-    // AnalyzeEntropy is somewhat slow.
-    crunch_configs[0].entropy_idx_ = use_palette ? kPalette : kSpatialSubGreen;
-    n_lz77s = 1;
-    *crunch_configs_size = 1;
-  } else {
-    EntropyIx min_entropy_ix;
-    // Try out multiple LZ77 on images with few colors.
-    n_lz77s = (enc->palette_size_ > 0 && enc->palette_size_ <= 16) ? 2 : 1;
-    if (!AnalyzeEntropy(pic->argb, width, height, pic->argb_stride, use_palette,
-                        enc->palette_size_, enc->transform_bits_,
-                        &min_entropy_ix, red_and_blue_always_zero)) {
-      return 0;
-    }
-    if (method == 6 && config->quality == 100) {
-      // Go brute force on all transforms.
-      *crunch_configs_size = 0;
-      for (i = 0; i < kNumEntropyIx; ++i) {
-        if (i != kPalette || use_palette) {
-          assert(*crunch_configs_size < CRUNCH_CONFIGS_MAX);
-          crunch_configs[(*crunch_configs_size)++].entropy_idx_ = i;
-        }
-      }
-    } else {
-      // Only choose the guessed best transform.
-      *crunch_configs_size = 1;
-      crunch_configs[0].entropy_idx_ = min_entropy_ix;
-    }
-  }
-  // Fill in the different LZ77s.
-  assert(n_lz77s <= CRUNCH_CONFIGS_LZ77_MAX);
-  for (i = 0; i < *crunch_configs_size; ++i) {
-    int j;
-    for (j = 0; j < n_lz77s; ++j) {
-      crunch_configs[i].lz77s_types_to_try_[j] =
-          (j == 0) ? kLZ77Standard | kLZ77RLE : kLZ77Box;
-    }
-    crunch_configs[i].lz77s_types_to_try_size_ = n_lz77s;
-  }
-  return 1;
-}
-
-static int EncoderInit(VP8LEncoder* const enc) {
-  const WebPPicture* const pic = enc->pic_;
-  const int width = pic->width;
-  const int height = pic->height;
-  const int pix_cnt = width * height;
-  // we round the block size up, so we're guaranteed to have
-  // at most MAX_REFS_BLOCK_PER_IMAGE blocks used:
-  const int refs_block_size = (pix_cnt - 1) / MAX_REFS_BLOCK_PER_IMAGE + 1;
-  int i;
-  if (!VP8LHashChainInit(&enc->hash_chain_, pix_cnt)) return 0;
-
-  for (i = 0; i < 3; ++i) VP8LBackwardRefsInit(&enc->refs_[i], refs_block_size);
-
-  return 1;
-}
-
-// Returns false in case of memory error.
-static int GetHuffBitLengthsAndCodes(
-    const VP8LHistogramSet* const histogram_image,
-    HuffmanTreeCode* const huffman_codes) {
-  int i, k;
-  int ok = 0;
-  uint64_t total_length_size = 0;
-  uint8_t* mem_buf = NULL;
-  const int histogram_image_size = histogram_image->size;
-  int max_num_symbols = 0;
-  uint8_t* buf_rle = NULL;
-  HuffmanTree* huff_tree = NULL;
-
-  // Iterate over all histograms and get the aggregate number of codes used.
-  for (i = 0; i < histogram_image_size; ++i) {
-    const VP8LHistogram* const histo = histogram_image->histograms[i];
-    HuffmanTreeCode* const codes = &huffman_codes[5 * i];
-    assert(histo != NULL);
-    for (k = 0; k < 5; ++k) {
-      const int num_symbols =
-          (k == 0) ? VP8LHistogramNumCodes(histo->palette_code_bits_) :
-          (k == 4) ? NUM_DISTANCE_CODES : 256;
-      codes[k].num_symbols = num_symbols;
-      total_length_size += num_symbols;
-    }
-  }
-
-  // Allocate and Set Huffman codes.
-  {
-    uint16_t* codes;
-    uint8_t* lengths;
-    mem_buf = (uint8_t*)WebPSafeCalloc(total_length_size,
-                                       sizeof(*lengths) + sizeof(*codes));
-    if (mem_buf == NULL) goto End;
-
-    codes = (uint16_t*)mem_buf;
-    lengths = (uint8_t*)&codes[total_length_size];
-    for (i = 0; i < 5 * histogram_image_size; ++i) {
-      const int bit_length = huffman_codes[i].num_symbols;
-      huffman_codes[i].codes = codes;
-      huffman_codes[i].code_lengths = lengths;
-      codes += bit_length;
-      lengths += bit_length;
-      if (max_num_symbols < bit_length) {
-        max_num_symbols = bit_length;
-      }
-    }
-  }
-
-  buf_rle = (uint8_t*)WebPSafeMalloc(1ULL, max_num_symbols);
-  huff_tree = (HuffmanTree*)WebPSafeMalloc(3ULL * max_num_symbols,
-                                           sizeof(*huff_tree));
-  if (buf_rle == NULL || huff_tree == NULL) goto End;
-
-  // Create Huffman trees.
-  for (i = 0; i < histogram_image_size; ++i) {
-    HuffmanTreeCode* const codes = &huffman_codes[5 * i];
-    VP8LHistogram* const histo = histogram_image->histograms[i];
-    VP8LCreateHuffmanTree(histo->literal_, 15, buf_rle, huff_tree, codes + 0);
-    VP8LCreateHuffmanTree(histo->red_, 15, buf_rle, huff_tree, codes + 1);
-    VP8LCreateHuffmanTree(histo->blue_, 15, buf_rle, huff_tree, codes + 2);
-    VP8LCreateHuffmanTree(histo->alpha_, 15, buf_rle, huff_tree, codes + 3);
-    VP8LCreateHuffmanTree(histo->distance_, 15, buf_rle, huff_tree, codes + 4);
-  }
-  ok = 1;
- End:
-  WebPSafeFree(huff_tree);
-  WebPSafeFree(buf_rle);
-  if (!ok) {
-    WebPSafeFree(mem_buf);
-    memset(huffman_codes, 0, 5 * histogram_image_size * sizeof(*huffman_codes));
-  }
-  return ok;
-}
-
-static void StoreHuffmanTreeOfHuffmanTreeToBitMask(
-    VP8LBitWriter* const bw, const uint8_t* code_length_bitdepth) {
-  // RFC 1951 will calm you down if you are worried about this funny sequence.
-  // This sequence is tuned from that, but more weighted for lower symbol count,
-  // and more spiking histograms.
-  static const uint8_t kStorageOrder[CODE_LENGTH_CODES] = {
-    17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
-  };
-  int i;
-  // Throw away trailing zeros:
-  int codes_to_store = CODE_LENGTH_CODES;
-  for (; codes_to_store > 4; --codes_to_store) {
-    if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) {
-      break;
-    }
-  }
-  VP8LPutBits(bw, codes_to_store - 4, 4);
-  for (i = 0; i < codes_to_store; ++i) {
-    VP8LPutBits(bw, code_length_bitdepth[kStorageOrder[i]], 3);
-  }
-}
-
-static void ClearHuffmanTreeIfOnlyOneSymbol(
-    HuffmanTreeCode* const huffman_code) {
-  int k;
-  int count = 0;
-  for (k = 0; k < huffman_code->num_symbols; ++k) {
-    if (huffman_code->code_lengths[k] != 0) {
-      ++count;
-      if (count > 1) return;
-    }
-  }
-  for (k = 0; k < huffman_code->num_symbols; ++k) {
-    huffman_code->code_lengths[k] = 0;
-    huffman_code->codes[k] = 0;
-  }
-}
-
-static void StoreHuffmanTreeToBitMask(
-    VP8LBitWriter* const bw,
-    const HuffmanTreeToken* const tokens, const int num_tokens,
-    const HuffmanTreeCode* const huffman_code) {
-  int i;
-  for (i = 0; i < num_tokens; ++i) {
-    const int ix = tokens[i].code;
-    const int extra_bits = tokens[i].extra_bits;
-    VP8LPutBits(bw, huffman_code->codes[ix], huffman_code->code_lengths[ix]);
-    switch (ix) {
-      case 16:
-        VP8LPutBits(bw, extra_bits, 2);
-        break;
-      case 17:
-        VP8LPutBits(bw, extra_bits, 3);
-        break;
-      case 18:
-        VP8LPutBits(bw, extra_bits, 7);
-        break;
-    }
-  }
-}
-
-// 'huff_tree' and 'tokens' are pre-alloacted buffers.
-static void StoreFullHuffmanCode(VP8LBitWriter* const bw,
-                                 HuffmanTree* const huff_tree,
-                                 HuffmanTreeToken* const tokens,
-                                 const HuffmanTreeCode* const tree) {
-  uint8_t code_length_bitdepth[CODE_LENGTH_CODES] = { 0 };
-  uint16_t code_length_bitdepth_symbols[CODE_LENGTH_CODES] = { 0 };
-  const int max_tokens = tree->num_symbols;
-  int num_tokens;
-  HuffmanTreeCode huffman_code;
-  huffman_code.num_symbols = CODE_LENGTH_CODES;
-  huffman_code.code_lengths = code_length_bitdepth;
-  huffman_code.codes = code_length_bitdepth_symbols;
-
-  VP8LPutBits(bw, 0, 1);
-  num_tokens = VP8LCreateCompressedHuffmanTree(tree, tokens, max_tokens);
-  {
-    uint32_t histogram[CODE_LENGTH_CODES] = { 0 };
-    uint8_t buf_rle[CODE_LENGTH_CODES] = { 0 };
-    int i;
-    for (i = 0; i < num_tokens; ++i) {
-      ++histogram[tokens[i].code];
-    }
-
-    VP8LCreateHuffmanTree(histogram, 7, buf_rle, huff_tree, &huffman_code);
-  }
-
-  StoreHuffmanTreeOfHuffmanTreeToBitMask(bw, code_length_bitdepth);
-  ClearHuffmanTreeIfOnlyOneSymbol(&huffman_code);
-  {
-    int trailing_zero_bits = 0;
-    int trimmed_length = num_tokens;
-    int write_trimmed_length;
-    int length;
-    int i = num_tokens;
-    while (i-- > 0) {
-      const int ix = tokens[i].code;
-      if (ix == 0 || ix == 17 || ix == 18) {
-        --trimmed_length;   // discount trailing zeros
-        trailing_zero_bits += code_length_bitdepth[ix];
-        if (ix == 17) {
-          trailing_zero_bits += 3;
-        } else if (ix == 18) {
-          trailing_zero_bits += 7;
-        }
-      } else {
-        break;
-      }
-    }
-    write_trimmed_length = (trimmed_length > 1 && trailing_zero_bits > 12);
-    length = write_trimmed_length ? trimmed_length : num_tokens;
-    VP8LPutBits(bw, write_trimmed_length, 1);
-    if (write_trimmed_length) {
-      if (trimmed_length == 2) {
-        VP8LPutBits(bw, 0, 3 + 2);     // nbitpairs=1, trimmed_length=2
-      } else {
-        const int nbits = BitsLog2Floor(trimmed_length - 2);
-        const int nbitpairs = nbits / 2 + 1;
-        assert(trimmed_length > 2);
-        assert(nbitpairs - 1 < 8);
-        VP8LPutBits(bw, nbitpairs - 1, 3);
-        VP8LPutBits(bw, trimmed_length - 2, nbitpairs * 2);
-      }
-    }
-    StoreHuffmanTreeToBitMask(bw, tokens, length, &huffman_code);
-  }
-}
-
-// 'huff_tree' and 'tokens' are pre-alloacted buffers.
-static void StoreHuffmanCode(VP8LBitWriter* const bw,
-                             HuffmanTree* const huff_tree,
-                             HuffmanTreeToken* const tokens,
-                             const HuffmanTreeCode* const huffman_code) {
-  int i;
-  int count = 0;
-  int symbols[2] = { 0, 0 };
-  const int kMaxBits = 8;
-  const int kMaxSymbol = 1 << kMaxBits;
-
-  // Check whether it's a small tree.
-  for (i = 0; i < huffman_code->num_symbols && count < 3; ++i) {
-    if (huffman_code->code_lengths[i] != 0) {
-      if (count < 2) symbols[count] = i;
-      ++count;
-    }
-  }
-
-  if (count == 0) {   // emit minimal tree for empty cases
-    // bits: small tree marker: 1, count-1: 0, large 8-bit code: 0, code: 0
-    VP8LPutBits(bw, 0x01, 4);
-  } else if (count <= 2 && symbols[0] < kMaxSymbol && symbols[1] < kMaxSymbol) {
-    VP8LPutBits(bw, 1, 1);  // Small tree marker to encode 1 or 2 symbols.
-    VP8LPutBits(bw, count - 1, 1);
-    if (symbols[0] <= 1) {
-      VP8LPutBits(bw, 0, 1);  // Code bit for small (1 bit) symbol value.
-      VP8LPutBits(bw, symbols[0], 1);
-    } else {
-      VP8LPutBits(bw, 1, 1);
-      VP8LPutBits(bw, symbols[0], 8);
-    }
-    if (count == 2) {
-      VP8LPutBits(bw, symbols[1], 8);
-    }
-  } else {
-    StoreFullHuffmanCode(bw, huff_tree, tokens, huffman_code);
-  }
-}
-
-static WEBP_INLINE void WriteHuffmanCode(VP8LBitWriter* const bw,
-                             const HuffmanTreeCode* const code,
-                             int code_index) {
-  const int depth = code->code_lengths[code_index];
-  const int symbol = code->codes[code_index];
-  VP8LPutBits(bw, symbol, depth);
-}
-
-static WEBP_INLINE void WriteHuffmanCodeWithExtraBits(
-    VP8LBitWriter* const bw,
-    const HuffmanTreeCode* const code,
-    int code_index,
-    int bits,
-    int n_bits) {
-  const int depth = code->code_lengths[code_index];
-  const int symbol = code->codes[code_index];
-  VP8LPutBits(bw, (bits << depth) | symbol, depth + n_bits);
-}
-
-static WebPEncodingError StoreImageToBitMask(
-    VP8LBitWriter* const bw, int width, int histo_bits,
-    const VP8LBackwardRefs* const refs,
-    const uint16_t* histogram_symbols,
-    const HuffmanTreeCode* const huffman_codes) {
-  const int histo_xsize = histo_bits ? VP8LSubSampleSize(width, histo_bits) : 1;
-  const int tile_mask = (histo_bits == 0) ? 0 : -(1 << histo_bits);
-  // x and y trace the position in the image.
-  int x = 0;
-  int y = 0;
-  int tile_x = x & tile_mask;
-  int tile_y = y & tile_mask;
-  int histogram_ix = histogram_symbols[0];
-  const HuffmanTreeCode* codes = huffman_codes + 5 * histogram_ix;
-  VP8LRefsCursor c = VP8LRefsCursorInit(refs);
-  while (VP8LRefsCursorOk(&c)) {
-    const PixOrCopy* const v = c.cur_pos;
-    if ((tile_x != (x & tile_mask)) || (tile_y != (y & tile_mask))) {
-      tile_x = x & tile_mask;
-      tile_y = y & tile_mask;
-      histogram_ix = histogram_symbols[(y >> histo_bits) * histo_xsize +
-                                       (x >> histo_bits)];
-      codes = huffman_codes + 5 * histogram_ix;
-    }
-    if (PixOrCopyIsLiteral(v)) {
-      static const uint8_t order[] = { 1, 2, 0, 3 };
-      int k;
-      for (k = 0; k < 4; ++k) {
-        const int code = PixOrCopyLiteral(v, order[k]);
-        WriteHuffmanCode(bw, codes + k, code);
-      }
-    } else if (PixOrCopyIsCacheIdx(v)) {
-      const int code = PixOrCopyCacheIdx(v);
-      const int literal_ix = 256 + NUM_LENGTH_CODES + code;
-      WriteHuffmanCode(bw, codes, literal_ix);
-    } else {
-      int bits, n_bits;
-      int code;
-
-      const int distance = PixOrCopyDistance(v);
-      VP8LPrefixEncode(v->len, &code, &n_bits, &bits);
-      WriteHuffmanCodeWithExtraBits(bw, codes, 256 + code, bits, n_bits);
-
-      // Don't write the distance with the extra bits code since
-      // the distance can be up to 18 bits of extra bits, and the prefix
-      // 15 bits, totaling to 33, and our PutBits only supports up to 32 bits.
-      VP8LPrefixEncode(distance, &code, &n_bits, &bits);
-      WriteHuffmanCode(bw, codes + 4, code);
-      VP8LPutBits(bw, bits, n_bits);
-    }
-    x += PixOrCopyLength(v);
-    while (x >= width) {
-      x -= width;
-      ++y;
-    }
-    VP8LRefsCursorNext(&c);
-  }
-  return bw->error_ ? VP8_ENC_ERROR_OUT_OF_MEMORY : VP8_ENC_OK;
-}
-
-// Special case of EncodeImageInternal() for cache-bits=0, histo_bits=31
-static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw,
-                                              const uint32_t* const argb,
-                                              VP8LHashChain* const hash_chain,
-                                              VP8LBackwardRefs* const refs_tmp1,
-                                              VP8LBackwardRefs* const refs_tmp2,
-                                              int width, int height,
-                                              int quality, int low_effort) {
-  int i;
-  int max_tokens = 0;
-  WebPEncodingError err = VP8_ENC_OK;
-  VP8LBackwardRefs* refs;
-  HuffmanTreeToken* tokens = NULL;
-  HuffmanTreeCode huffman_codes[5] = { { 0, NULL, NULL } };
-  const uint16_t histogram_symbols[1] = { 0 };    // only one tree, one symbol
-  int cache_bits = 0;
-  VP8LHistogramSet* histogram_image = NULL;
-  HuffmanTree* const huff_tree = (HuffmanTree*)WebPSafeMalloc(
-        3ULL * CODE_LENGTH_CODES, sizeof(*huff_tree));
-  if (huff_tree == NULL) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  // Calculate backward references from ARGB image.
-  if (!VP8LHashChainFill(hash_chain, quality, argb, width, height,
-                         low_effort)) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-  refs = VP8LGetBackwardReferences(width, height, argb, quality, 0,
-                                   kLZ77Standard | kLZ77RLE, &cache_bits,
-                                   hash_chain, refs_tmp1, refs_tmp2);
-  if (refs == NULL) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-  histogram_image = VP8LAllocateHistogramSet(1, cache_bits);
-  if (histogram_image == NULL) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-  VP8LHistogramSetClear(histogram_image);
-
-  // Build histogram image and symbols from backward references.
-  VP8LHistogramStoreRefs(refs, histogram_image->histograms[0]);
-
-  // Create Huffman bit lengths and codes for each histogram image.
-  assert(histogram_image->size == 1);
-  if (!GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  // No color cache, no Huffman image.
-  VP8LPutBits(bw, 0, 1);
-
-  // Find maximum number of symbols for the huffman tree-set.
-  for (i = 0; i < 5; ++i) {
-    HuffmanTreeCode* const codes = &huffman_codes[i];
-    if (max_tokens < codes->num_symbols) {
-      max_tokens = codes->num_symbols;
-    }
-  }
-
-  tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens));
-  if (tokens == NULL) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  // Store Huffman codes.
-  for (i = 0; i < 5; ++i) {
-    HuffmanTreeCode* const codes = &huffman_codes[i];
-    StoreHuffmanCode(bw, huff_tree, tokens, codes);
-    ClearHuffmanTreeIfOnlyOneSymbol(codes);
-  }
-
-  // Store actual literals.
-  err = StoreImageToBitMask(bw, width, 0, refs, histogram_symbols,
-                            huffman_codes);
-
- Error:
-  WebPSafeFree(tokens);
-  WebPSafeFree(huff_tree);
-  VP8LFreeHistogramSet(histogram_image);
-  WebPSafeFree(huffman_codes[0].codes);
-  return err;
-}
-
-static WebPEncodingError EncodeImageInternal(
-    VP8LBitWriter* const bw, const uint32_t* const argb,
-    VP8LHashChain* const hash_chain, VP8LBackwardRefs refs_array[3], int width,
-    int height, int quality, int low_effort, int use_cache,
-    const CrunchConfig* const config, int* cache_bits, int histogram_bits,
-    size_t init_byte_position, int* const hdr_size, int* const data_size) {
-  WebPEncodingError err = VP8_ENC_OK;
-  const uint32_t histogram_image_xysize =
-      VP8LSubSampleSize(width, histogram_bits) *
-      VP8LSubSampleSize(height, histogram_bits);
-  VP8LHistogramSet* histogram_image = NULL;
-  VP8LHistogram* tmp_histo = NULL;
-  int histogram_image_size = 0;
-  size_t bit_array_size = 0;
-  HuffmanTree* const huff_tree = (HuffmanTree*)WebPSafeMalloc(
-      3ULL * CODE_LENGTH_CODES, sizeof(*huff_tree));
-  HuffmanTreeToken* tokens = NULL;
-  HuffmanTreeCode* huffman_codes = NULL;
-  VP8LBackwardRefs* refs_best;
-  VP8LBackwardRefs* refs_tmp;
-  uint16_t* const histogram_symbols =
-      (uint16_t*)WebPSafeMalloc(histogram_image_xysize,
-                                sizeof(*histogram_symbols));
-  int lz77s_idx;
-  VP8LBitWriter bw_init = *bw, bw_best;
-  int hdr_size_tmp;
-  assert(histogram_bits >= MIN_HUFFMAN_BITS);
-  assert(histogram_bits <= MAX_HUFFMAN_BITS);
-  assert(hdr_size != NULL);
-  assert(data_size != NULL);
-
-  if (histogram_symbols == NULL) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  if (use_cache) {
-    // If the value is different from zero, it has been set during the
-    // palette analysis.
-    if (*cache_bits == 0) *cache_bits = MAX_COLOR_CACHE_BITS;
-  } else {
-    *cache_bits = 0;
-  }
-  // 'best_refs' is the reference to the best backward refs and points to one
-  // of refs_array[0] or refs_array[1].
-  // Calculate backward references from ARGB image.
-  if (huff_tree == NULL ||
-      !VP8LHashChainFill(hash_chain, quality, argb, width, height,
-                         low_effort) ||
-      !VP8LBitWriterInit(&bw_best, 0) ||
-      (config->lz77s_types_to_try_size_ > 1 &&
-       !VP8LBitWriterClone(bw, &bw_best))) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-  for (lz77s_idx = 0; lz77s_idx < config->lz77s_types_to_try_size_;
-       ++lz77s_idx) {
-    refs_best = VP8LGetBackwardReferences(
-        width, height, argb, quality, low_effort,
-        config->lz77s_types_to_try_[lz77s_idx], cache_bits, hash_chain,
-        &refs_array[0], &refs_array[1]);
-    if (refs_best == NULL) {
-      err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-      goto Error;
-    }
-    // Keep the best references aside and use the other element from the first
-    // two as a temporary for later usage.
-    refs_tmp = &refs_array[refs_best == &refs_array[0] ? 1 : 0];
-
-    histogram_image =
-        VP8LAllocateHistogramSet(histogram_image_xysize, *cache_bits);
-    tmp_histo = VP8LAllocateHistogram(*cache_bits);
-    if (histogram_image == NULL || tmp_histo == NULL) {
-      err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-      goto Error;
-    }
-
-    // Build histogram image and symbols from backward references.
-    if (!VP8LGetHistoImageSymbols(width, height, refs_best, quality, low_effort,
-                                  histogram_bits, *cache_bits, histogram_image,
-                                  tmp_histo, histogram_symbols)) {
-      err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-      goto Error;
-    }
-    // Create Huffman bit lengths and codes for each histogram image.
-    histogram_image_size = histogram_image->size;
-    bit_array_size = 5 * histogram_image_size;
-    huffman_codes = (HuffmanTreeCode*)WebPSafeCalloc(bit_array_size,
-                                                     sizeof(*huffman_codes));
-    // Note: some histogram_image entries may point to tmp_histos[], so the
-    // latter need to outlive the following call to GetHuffBitLengthsAndCodes().
-    if (huffman_codes == NULL ||
-        !GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) {
-      err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-      goto Error;
-    }
-    // Free combined histograms.
-    VP8LFreeHistogramSet(histogram_image);
-    histogram_image = NULL;
-
-    // Free scratch histograms.
-    VP8LFreeHistogram(tmp_histo);
-    tmp_histo = NULL;
-
-    // Color Cache parameters.
-    if (*cache_bits > 0) {
-      VP8LPutBits(bw, 1, 1);
-      VP8LPutBits(bw, *cache_bits, 4);
-    } else {
-      VP8LPutBits(bw, 0, 1);
-    }
-
-    // Huffman image + meta huffman.
-    {
-      const int write_histogram_image = (histogram_image_size > 1);
-      VP8LPutBits(bw, write_histogram_image, 1);
-      if (write_histogram_image) {
-        uint32_t* const histogram_argb =
-            (uint32_t*)WebPSafeMalloc(histogram_image_xysize,
-                                      sizeof(*histogram_argb));
-        int max_index = 0;
-        uint32_t i;
-        if (histogram_argb == NULL) {
-          err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-          goto Error;
-        }
-        for (i = 0; i < histogram_image_xysize; ++i) {
-          const int symbol_index = histogram_symbols[i] & 0xffff;
-          histogram_argb[i] = (symbol_index << 8);
-          if (symbol_index >= max_index) {
-            max_index = symbol_index + 1;
-          }
-        }
-        histogram_image_size = max_index;
-
-        VP8LPutBits(bw, histogram_bits - 2, 3);
-        err = EncodeImageNoHuffman(
-            bw, histogram_argb, hash_chain, refs_tmp, &refs_array[2],
-            VP8LSubSampleSize(width, histogram_bits),
-            VP8LSubSampleSize(height, histogram_bits), quality, low_effort);
-        WebPSafeFree(histogram_argb);
-        if (err != VP8_ENC_OK) goto Error;
-      }
-    }
-
-    // Store Huffman codes.
-    {
-      int i;
-      int max_tokens = 0;
-      // Find maximum number of symbols for the huffman tree-set.
-      for (i = 0; i < 5 * histogram_image_size; ++i) {
-        HuffmanTreeCode* const codes = &huffman_codes[i];
-        if (max_tokens < codes->num_symbols) {
-          max_tokens = codes->num_symbols;
-        }
-      }
-      tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens));
-      if (tokens == NULL) {
-        err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-        goto Error;
-      }
-      for (i = 0; i < 5 * histogram_image_size; ++i) {
-        HuffmanTreeCode* const codes = &huffman_codes[i];
-        StoreHuffmanCode(bw, huff_tree, tokens, codes);
-        ClearHuffmanTreeIfOnlyOneSymbol(codes);
-      }
-    }
-    // Store actual literals.
-    hdr_size_tmp = (int)(VP8LBitWriterNumBytes(bw) - init_byte_position);
-    err = StoreImageToBitMask(bw, width, histogram_bits, refs_best,
-                              histogram_symbols, huffman_codes);
-    // Keep track of the smallest image so far.
-    if (lz77s_idx == 0 ||
-        VP8LBitWriterNumBytes(bw) < VP8LBitWriterNumBytes(&bw_best)) {
-      *hdr_size = hdr_size_tmp;
-      *data_size =
-          (int)(VP8LBitWriterNumBytes(bw) - init_byte_position - *hdr_size);
-      VP8LBitWriterSwap(bw, &bw_best);
-    }
-    // Reset the bit writer for the following iteration if any.
-    if (config->lz77s_types_to_try_size_ > 1) VP8LBitWriterReset(&bw_init, bw);
-    WebPSafeFree(tokens);
-    tokens = NULL;
-    if (huffman_codes != NULL) {
-      WebPSafeFree(huffman_codes->codes);
-      WebPSafeFree(huffman_codes);
-      huffman_codes = NULL;
-    }
-  }
-  VP8LBitWriterSwap(bw, &bw_best);
-
- Error:
-  WebPSafeFree(tokens);
-  WebPSafeFree(huff_tree);
-  VP8LFreeHistogramSet(histogram_image);
-  VP8LFreeHistogram(tmp_histo);
-  if (huffman_codes != NULL) {
-    WebPSafeFree(huffman_codes->codes);
-    WebPSafeFree(huffman_codes);
-  }
-  WebPSafeFree(histogram_symbols);
-  VP8LBitWriterWipeOut(&bw_best);
-  return err;
-}
-
-// -----------------------------------------------------------------------------
-// Transforms
-
-static void ApplySubtractGreen(VP8LEncoder* const enc, int width, int height,
-                               VP8LBitWriter* const bw) {
-  VP8LPutBits(bw, TRANSFORM_PRESENT, 1);
-  VP8LPutBits(bw, SUBTRACT_GREEN, 2);
-  VP8LSubtractGreenFromBlueAndRed(enc->argb_, width * height);
-}
-
-static WebPEncodingError ApplyPredictFilter(const VP8LEncoder* const enc,
-                                            int width, int height,
-                                            int quality, int low_effort,
-                                            int used_subtract_green,
-                                            VP8LBitWriter* const bw) {
-  const int pred_bits = enc->transform_bits_;
-  const int transform_width = VP8LSubSampleSize(width, pred_bits);
-  const int transform_height = VP8LSubSampleSize(height, pred_bits);
-  // we disable near-lossless quantization if palette is used.
-  const int near_lossless_strength = enc->use_palette_ ? 100
-                                   : enc->config_->near_lossless;
-
-  VP8LResidualImage(width, height, pred_bits, low_effort, enc->argb_,
-                    enc->argb_scratch_, enc->transform_data_,
-                    near_lossless_strength, enc->config_->exact,
-                    used_subtract_green);
-  VP8LPutBits(bw, TRANSFORM_PRESENT, 1);
-  VP8LPutBits(bw, PREDICTOR_TRANSFORM, 2);
-  assert(pred_bits >= 2);
-  VP8LPutBits(bw, pred_bits - 2, 3);
-  return EncodeImageNoHuffman(
-      bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_,
-      (VP8LBackwardRefs*)&enc->refs_[0],  // cast const away
-      (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height,
-      quality, low_effort);
-}
-
-static WebPEncodingError ApplyCrossColorFilter(const VP8LEncoder* const enc,
-                                               int width, int height,
-                                               int quality, int low_effort,
-                                               VP8LBitWriter* const bw) {
-  const int ccolor_transform_bits = enc->transform_bits_;
-  const int transform_width = VP8LSubSampleSize(width, ccolor_transform_bits);
-  const int transform_height = VP8LSubSampleSize(height, ccolor_transform_bits);
-
-  VP8LColorSpaceTransform(width, height, ccolor_transform_bits, quality,
-                          enc->argb_, enc->transform_data_);
-  VP8LPutBits(bw, TRANSFORM_PRESENT, 1);
-  VP8LPutBits(bw, CROSS_COLOR_TRANSFORM, 2);
-  assert(ccolor_transform_bits >= 2);
-  VP8LPutBits(bw, ccolor_transform_bits - 2, 3);
-  return EncodeImageNoHuffman(
-      bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_,
-      (VP8LBackwardRefs*)&enc->refs_[0],  // cast const away
-      (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height,
-      quality, low_effort);
-}
-
-// -----------------------------------------------------------------------------
-
-static WebPEncodingError WriteRiffHeader(const WebPPicture* const pic,
-                                         size_t riff_size, size_t vp8l_size) {
-  uint8_t riff[RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE + VP8L_SIGNATURE_SIZE] = {
-    'R', 'I', 'F', 'F', 0, 0, 0, 0, 'W', 'E', 'B', 'P',
-    'V', 'P', '8', 'L', 0, 0, 0, 0, VP8L_MAGIC_BYTE,
-  };
-  PutLE32(riff + TAG_SIZE, (uint32_t)riff_size);
-  PutLE32(riff + RIFF_HEADER_SIZE + TAG_SIZE, (uint32_t)vp8l_size);
-  if (!pic->writer(riff, sizeof(riff), pic)) {
-    return VP8_ENC_ERROR_BAD_WRITE;
-  }
-  return VP8_ENC_OK;
-}
-
-static int WriteImageSize(const WebPPicture* const pic,
-                          VP8LBitWriter* const bw) {
-  const int width = pic->width - 1;
-  const int height = pic->height - 1;
-  assert(width < WEBP_MAX_DIMENSION && height < WEBP_MAX_DIMENSION);
-
-  VP8LPutBits(bw, width, VP8L_IMAGE_SIZE_BITS);
-  VP8LPutBits(bw, height, VP8L_IMAGE_SIZE_BITS);
-  return !bw->error_;
-}
-
-static int WriteRealAlphaAndVersion(VP8LBitWriter* const bw, int has_alpha) {
-  VP8LPutBits(bw, has_alpha, 1);
-  VP8LPutBits(bw, VP8L_VERSION, VP8L_VERSION_BITS);
-  return !bw->error_;
-}
-
-static WebPEncodingError WriteImage(const WebPPicture* const pic,
-                                    VP8LBitWriter* const bw,
-                                    size_t* const coded_size) {
-  WebPEncodingError err = VP8_ENC_OK;
-  const uint8_t* const webpll_data = VP8LBitWriterFinish(bw);
-  const size_t webpll_size = VP8LBitWriterNumBytes(bw);
-  const size_t vp8l_size = VP8L_SIGNATURE_SIZE + webpll_size;
-  const size_t pad = vp8l_size & 1;
-  const size_t riff_size = TAG_SIZE + CHUNK_HEADER_SIZE + vp8l_size + pad;
-
-  err = WriteRiffHeader(pic, riff_size, vp8l_size);
-  if (err != VP8_ENC_OK) goto Error;
-
-  if (!pic->writer(webpll_data, webpll_size, pic)) {
-    err = VP8_ENC_ERROR_BAD_WRITE;
-    goto Error;
-  }
-
-  if (pad) {
-    const uint8_t pad_byte[1] = { 0 };
-    if (!pic->writer(pad_byte, 1, pic)) {
-      err = VP8_ENC_ERROR_BAD_WRITE;
-      goto Error;
-    }
-  }
-  *coded_size = CHUNK_HEADER_SIZE + riff_size;
-  return VP8_ENC_OK;
-
- Error:
-  return err;
-}
-
-// -----------------------------------------------------------------------------
-
-static void ClearTransformBuffer(VP8LEncoder* const enc) {
-  WebPSafeFree(enc->transform_mem_);
-  enc->transform_mem_ = NULL;
-  enc->transform_mem_size_ = 0;
-}
-
-// Allocates the memory for argb (W x H) buffer, 2 rows of context for
-// prediction and transform data.
-// Flags influencing the memory allocated:
-//  enc->transform_bits_
-//  enc->use_predict_, enc->use_cross_color_
-static WebPEncodingError AllocateTransformBuffer(VP8LEncoder* const enc,
-                                                 int width, int height) {
-  WebPEncodingError err = VP8_ENC_OK;
-  const uint64_t image_size = width * height;
-  // VP8LResidualImage needs room for 2 scanlines of uint32 pixels with an extra
-  // pixel in each, plus 2 regular scanlines of bytes.
-  // TODO(skal): Clean up by using arithmetic in bytes instead of words.
-  const uint64_t argb_scratch_size =
-      enc->use_predict_
-          ? (width + 1) * 2 +
-            (width * 2 + sizeof(uint32_t) - 1) / sizeof(uint32_t)
-          : 0;
-  const uint64_t transform_data_size =
-      (enc->use_predict_ || enc->use_cross_color_)
-          ? VP8LSubSampleSize(width, enc->transform_bits_) *
-                VP8LSubSampleSize(height, enc->transform_bits_)
-          : 0;
-  const uint64_t max_alignment_in_words =
-      (WEBP_ALIGN_CST + sizeof(uint32_t) - 1) / sizeof(uint32_t);
-  const uint64_t mem_size =
-      image_size + max_alignment_in_words +
-      argb_scratch_size + max_alignment_in_words +
-      transform_data_size;
-  uint32_t* mem = enc->transform_mem_;
-  if (mem == NULL || mem_size > enc->transform_mem_size_) {
-    ClearTransformBuffer(enc);
-    mem = (uint32_t*)WebPSafeMalloc(mem_size, sizeof(*mem));
-    if (mem == NULL) {
-      err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-      goto Error;
-    }
-    enc->transform_mem_ = mem;
-    enc->transform_mem_size_ = (size_t)mem_size;
-    enc->argb_content_ = kEncoderNone;
-  }
-  enc->argb_ = mem;
-  mem = (uint32_t*)WEBP_ALIGN(mem + image_size);
-  enc->argb_scratch_ = mem;
-  mem = (uint32_t*)WEBP_ALIGN(mem + argb_scratch_size);
-  enc->transform_data_ = mem;
-
-  enc->current_width_ = width;
- Error:
-  return err;
-}
-
-static WebPEncodingError MakeInputImageCopy(VP8LEncoder* const enc) {
-  WebPEncodingError err = VP8_ENC_OK;
-  const WebPPicture* const picture = enc->pic_;
-  const int width = picture->width;
-  const int height = picture->height;
-
-  err = AllocateTransformBuffer(enc, width, height);
-  if (err != VP8_ENC_OK) return err;
-  if (enc->argb_content_ == kEncoderARGB) return VP8_ENC_OK;
-
-  {
-    uint32_t* dst = enc->argb_;
-    const uint32_t* src = picture->argb;
-    int y;
-    for (y = 0; y < height; ++y) {
-      memcpy(dst, src, width * sizeof(*dst));
-      dst += width;
-      src += picture->argb_stride;
-    }
-  }
-  enc->argb_content_ = kEncoderARGB;
-  assert(enc->current_width_ == width);
-  return VP8_ENC_OK;
-}
-
-// -----------------------------------------------------------------------------
-
-static WEBP_INLINE int SearchColorNoIdx(const uint32_t sorted[], uint32_t color,
-                                        int hi) {
-  int low = 0;
-  if (sorted[low] == color) return low;  // loop invariant: sorted[low] != color
-  while (1) {
-    const int mid = (low + hi) >> 1;
-    if (sorted[mid] == color) {
-      return mid;
-    } else if (sorted[mid] < color) {
-      low = mid;
-    } else {
-      hi = mid;
-    }
-  }
-}
-
-#define APPLY_PALETTE_GREEDY_MAX 4
-
-static WEBP_INLINE uint32_t SearchColorGreedy(const uint32_t palette[],
-                                              int palette_size,
-                                              uint32_t color) {
-  (void)palette_size;
-  assert(palette_size < APPLY_PALETTE_GREEDY_MAX);
-  assert(3 == APPLY_PALETTE_GREEDY_MAX - 1);
-  if (color == palette[0]) return 0;
-  if (color == palette[1]) return 1;
-  if (color == palette[2]) return 2;
-  return 3;
-}
-
-static WEBP_INLINE uint32_t ApplyPaletteHash0(uint32_t color) {
-  // Focus on the green color.
-  return (color >> 8) & 0xff;
-}
-
-#define PALETTE_INV_SIZE_BITS 11
-#define PALETTE_INV_SIZE (1 << PALETTE_INV_SIZE_BITS)
-
-static WEBP_INLINE uint32_t ApplyPaletteHash1(uint32_t color) {
-  // Forget about alpha.
-  return ((uint32_t)((color & 0x00ffffffu) * 4222244071ull)) >>
-         (32 - PALETTE_INV_SIZE_BITS);
-}
-
-static WEBP_INLINE uint32_t ApplyPaletteHash2(uint32_t color) {
-  // Forget about alpha.
-  return ((uint32_t)((color & 0x00ffffffu) * ((1ull << 31) - 1))) >>
-         (32 - PALETTE_INV_SIZE_BITS);
-}
-
-// Sort palette in increasing order and prepare an inverse mapping array.
-static void PrepareMapToPalette(const uint32_t palette[], int num_colors,
-                                uint32_t sorted[], uint32_t idx_map[]) {
-  int i;
-  memcpy(sorted, palette, num_colors * sizeof(*sorted));
-  qsort(sorted, num_colors, sizeof(*sorted), PaletteCompareColorsForQsort);
-  for (i = 0; i < num_colors; ++i) {
-    idx_map[SearchColorNoIdx(sorted, palette[i], num_colors)] = i;
-  }
-}
-
-// Use 1 pixel cache for ARGB pixels.
-#define APPLY_PALETTE_FOR(COLOR_INDEX) do {         \
-  uint32_t prev_pix = palette[0];                   \
-  uint32_t prev_idx = 0;                            \
-  for (y = 0; y < height; ++y) {                    \
-    for (x = 0; x < width; ++x) {                   \
-      const uint32_t pix = src[x];                  \
-      if (pix != prev_pix) {                        \
-        prev_idx = COLOR_INDEX;                     \
-        prev_pix = pix;                             \
-      }                                             \
-      tmp_row[x] = prev_idx;                        \
-    }                                               \
-    VP8LBundleColorMap(tmp_row, width, xbits, dst); \
-    src += src_stride;                              \
-    dst += dst_stride;                              \
-  }                                                 \
-} while (0)
-
-// Remap argb values in src[] to packed palettes entries in dst[]
-// using 'row' as a temporary buffer of size 'width'.
-// We assume that all src[] values have a corresponding entry in the palette.
-// Note: src[] can be the same as dst[]
-static WebPEncodingError ApplyPalette(const uint32_t* src, uint32_t src_stride,
-                                      uint32_t* dst, uint32_t dst_stride,
-                                      const uint32_t* palette, int palette_size,
-                                      int width, int height, int xbits) {
-  // TODO(skal): this tmp buffer is not needed if VP8LBundleColorMap() can be
-  // made to work in-place.
-  uint8_t* const tmp_row = (uint8_t*)WebPSafeMalloc(width, sizeof(*tmp_row));
-  int x, y;
-
-  if (tmp_row == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY;
-
-  if (palette_size < APPLY_PALETTE_GREEDY_MAX) {
-    APPLY_PALETTE_FOR(SearchColorGreedy(palette, palette_size, pix));
-  } else {
-    int i, j;
-    uint16_t buffer[PALETTE_INV_SIZE];
-    uint32_t (*const hash_functions[])(uint32_t) = {
-        ApplyPaletteHash0, ApplyPaletteHash1, ApplyPaletteHash2
-    };
-
-    // Try to find a perfect hash function able to go from a color to an index
-    // within 1 << PALETTE_INV_SIZE_BITS in order to build a hash map to go
-    // from color to index in palette.
-    for (i = 0; i < 3; ++i) {
-      int use_LUT = 1;
-      // Set each element in buffer to max uint16_t.
-      memset(buffer, 0xff, sizeof(buffer));
-      for (j = 0; j < palette_size; ++j) {
-        const uint32_t ind = hash_functions[i](palette[j]);
-        if (buffer[ind] != 0xffffu) {
-          use_LUT = 0;
-          break;
-        } else {
-          buffer[ind] = j;
-        }
-      }
-      if (use_LUT) break;
-    }
-
-    if (i == 0) {
-      APPLY_PALETTE_FOR(buffer[ApplyPaletteHash0(pix)]);
-    } else if (i == 1) {
-      APPLY_PALETTE_FOR(buffer[ApplyPaletteHash1(pix)]);
-    } else if (i == 2) {
-      APPLY_PALETTE_FOR(buffer[ApplyPaletteHash2(pix)]);
-    } else {
-      uint32_t idx_map[MAX_PALETTE_SIZE];
-      uint32_t palette_sorted[MAX_PALETTE_SIZE];
-      PrepareMapToPalette(palette, palette_size, palette_sorted, idx_map);
-      APPLY_PALETTE_FOR(
-          idx_map[SearchColorNoIdx(palette_sorted, pix, palette_size)]);
-    }
-  }
-  WebPSafeFree(tmp_row);
-  return VP8_ENC_OK;
-}
-#undef APPLY_PALETTE_FOR
-#undef PALETTE_INV_SIZE_BITS
-#undef PALETTE_INV_SIZE
-#undef APPLY_PALETTE_GREEDY_MAX
-
-// Note: Expects "enc->palette_" to be set properly.
-static WebPEncodingError MapImageFromPalette(VP8LEncoder* const enc,
-                                             int in_place) {
-  WebPEncodingError err = VP8_ENC_OK;
-  const WebPPicture* const pic = enc->pic_;
-  const int width = pic->width;
-  const int height = pic->height;
-  const uint32_t* const palette = enc->palette_;
-  const uint32_t* src = in_place ? enc->argb_ : pic->argb;
-  const int src_stride = in_place ? enc->current_width_ : pic->argb_stride;
-  const int palette_size = enc->palette_size_;
-  int xbits;
-
-  // Replace each input pixel by corresponding palette index.
-  // This is done line by line.
-  if (palette_size <= 4) {
-    xbits = (palette_size <= 2) ? 3 : 2;
-  } else {
-    xbits = (palette_size <= 16) ? 1 : 0;
-  }
-
-  err = AllocateTransformBuffer(enc, VP8LSubSampleSize(width, xbits), height);
-  if (err != VP8_ENC_OK) return err;
-
-  err = ApplyPalette(src, src_stride,
-                     enc->argb_, enc->current_width_,
-                     palette, palette_size, width, height, xbits);
-  enc->argb_content_ = kEncoderPalette;
-  return err;
-}
-
-// Save palette_[] to bitstream.
-static WebPEncodingError EncodePalette(VP8LBitWriter* const bw, int low_effort,
-                                       VP8LEncoder* const enc) {
-  int i;
-  uint32_t tmp_palette[MAX_PALETTE_SIZE];
-  const int palette_size = enc->palette_size_;
-  const uint32_t* const palette = enc->palette_;
-  VP8LPutBits(bw, TRANSFORM_PRESENT, 1);
-  VP8LPutBits(bw, COLOR_INDEXING_TRANSFORM, 2);
-  assert(palette_size >= 1 && palette_size <= MAX_PALETTE_SIZE);
-  VP8LPutBits(bw, palette_size - 1, 8);
-  for (i = palette_size - 1; i >= 1; --i) {
-    tmp_palette[i] = VP8LSubPixels(palette[i], palette[i - 1]);
-  }
-  tmp_palette[0] = palette[0];
-  return EncodeImageNoHuffman(bw, tmp_palette, &enc->hash_chain_,
-                              &enc->refs_[0], &enc->refs_[1], palette_size, 1,
-                              20 /* quality */, low_effort);
-}
-
-// -----------------------------------------------------------------------------
-// VP8LEncoder
-
-static VP8LEncoder* VP8LEncoderNew(const WebPConfig* const config,
-                                   const WebPPicture* const picture) {
-  VP8LEncoder* const enc = (VP8LEncoder*)WebPSafeCalloc(1ULL, sizeof(*enc));
-  if (enc == NULL) {
-    WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY);
-    return NULL;
-  }
-  enc->config_ = config;
-  enc->pic_ = picture;
-  enc->argb_content_ = kEncoderNone;
-
-  VP8LEncDspInit();
-
-  return enc;
-}
-
-static void VP8LEncoderDelete(VP8LEncoder* enc) {
-  if (enc != NULL) {
-    int i;
-    VP8LHashChainClear(&enc->hash_chain_);
-    for (i = 0; i < 3; ++i) VP8LBackwardRefsClear(&enc->refs_[i]);
-    ClearTransformBuffer(enc);
-    WebPSafeFree(enc);
-  }
-}
-
-// -----------------------------------------------------------------------------
-// Main call
-
-typedef struct {
-  const WebPConfig* config_;
-  const WebPPicture* picture_;
-  VP8LBitWriter* bw_;
-  VP8LEncoder* enc_;
-  int use_cache_;
-  CrunchConfig crunch_configs_[CRUNCH_CONFIGS_MAX];
-  int num_crunch_configs_;
-  int red_and_blue_always_zero_;
-  WebPEncodingError err_;
-  WebPAuxStats* stats_;
-} StreamEncodeContext;
-
-static int EncodeStreamHook(void* input, void* data2) {
-  StreamEncodeContext* const params = (StreamEncodeContext*)input;
-  const WebPConfig* const config = params->config_;
-  const WebPPicture* const picture = params->picture_;
-  VP8LBitWriter* const bw = params->bw_;
-  VP8LEncoder* const enc = params->enc_;
-  const int use_cache = params->use_cache_;
-  const CrunchConfig* const crunch_configs = params->crunch_configs_;
-  const int num_crunch_configs = params->num_crunch_configs_;
-  const int red_and_blue_always_zero = params->red_and_blue_always_zero_;
-#if !defined(WEBP_DISABLE_STATS)
-  WebPAuxStats* const stats = params->stats_;
-#endif
-  WebPEncodingError err = VP8_ENC_OK;
-  const int quality = (int)config->quality;
-  const int low_effort = (config->method == 0);
-#if (WEBP_NEAR_LOSSLESS == 1)
-  const int width = picture->width;
-#endif
-  const int height = picture->height;
-  const size_t byte_position = VP8LBitWriterNumBytes(bw);
-#if (WEBP_NEAR_LOSSLESS == 1)
-  int use_near_lossless = 0;
-#endif
-  int hdr_size = 0;
-  int data_size = 0;
-  int use_delta_palette = 0;
-  int idx;
-  size_t best_size = 0;
-  VP8LBitWriter bw_init = *bw, bw_best;
-  (void)data2;
-
-  if (!VP8LBitWriterInit(&bw_best, 0) ||
-      (num_crunch_configs > 1 && !VP8LBitWriterClone(bw, &bw_best))) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  for (idx = 0; idx < num_crunch_configs; ++idx) {
-    const int entropy_idx = crunch_configs[idx].entropy_idx_;
-    enc->use_palette_ = (entropy_idx == kPalette);
-    enc->use_subtract_green_ =
-        (entropy_idx == kSubGreen) || (entropy_idx == kSpatialSubGreen);
-    enc->use_predict_ =
-        (entropy_idx == kSpatial) || (entropy_idx == kSpatialSubGreen);
-    if (low_effort) {
-      enc->use_cross_color_ = 0;
-    } else {
-      enc->use_cross_color_ = red_and_blue_always_zero ? 0 : enc->use_predict_;
-    }
-    // Reset any parameter in the encoder that is set in the previous iteration.
-    enc->cache_bits_ = 0;
-    VP8LBackwardRefsClear(&enc->refs_[0]);
-    VP8LBackwardRefsClear(&enc->refs_[1]);
-
-#if (WEBP_NEAR_LOSSLESS == 1)
-    // Apply near-lossless preprocessing.
-    use_near_lossless = (config->near_lossless < 100) && !enc->use_palette_ &&
-                        !enc->use_predict_;
-    if (use_near_lossless) {
-      err = AllocateTransformBuffer(enc, width, height);
-      if (err != VP8_ENC_OK) goto Error;
-      if ((enc->argb_content_ != kEncoderNearLossless) &&
-          !VP8ApplyNearLossless(picture, config->near_lossless, enc->argb_)) {
-        err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-        goto Error;
-      }
-      enc->argb_content_ = kEncoderNearLossless;
-    } else {
-      enc->argb_content_ = kEncoderNone;
-    }
-#else
-    enc->argb_content_ = kEncoderNone;
-#endif
-
-    // Encode palette
-    if (enc->use_palette_) {
-      err = EncodePalette(bw, low_effort, enc);
-      if (err != VP8_ENC_OK) goto Error;
-      err = MapImageFromPalette(enc, use_delta_palette);
-      if (err != VP8_ENC_OK) goto Error;
-      // If using a color cache, do not have it bigger than the number of
-      // colors.
-      if (use_cache && enc->palette_size_ < (1 << MAX_COLOR_CACHE_BITS)) {
-        enc->cache_bits_ = BitsLog2Floor(enc->palette_size_) + 1;
-      }
-    }
-    if (!use_delta_palette) {
-      // In case image is not packed.
-      if (enc->argb_content_ != kEncoderNearLossless &&
-          enc->argb_content_ != kEncoderPalette) {
-        err = MakeInputImageCopy(enc);
-        if (err != VP8_ENC_OK) goto Error;
-      }
-
-      // -----------------------------------------------------------------------
-      // Apply transforms and write transform data.
-
-      if (enc->use_subtract_green_) {
-        ApplySubtractGreen(enc, enc->current_width_, height, bw);
-      }
-
-      if (enc->use_predict_) {
-        err = ApplyPredictFilter(enc, enc->current_width_, height, quality,
-                                 low_effort, enc->use_subtract_green_, bw);
-        if (err != VP8_ENC_OK) goto Error;
-      }
-
-      if (enc->use_cross_color_) {
-        err = ApplyCrossColorFilter(enc, enc->current_width_, height, quality,
-                                    low_effort, bw);
-        if (err != VP8_ENC_OK) goto Error;
-      }
-    }
-
-    VP8LPutBits(bw, !TRANSFORM_PRESENT, 1);  // No more transforms.
-
-    // -------------------------------------------------------------------------
-    // Encode and write the transformed image.
-    err = EncodeImageInternal(bw, enc->argb_, &enc->hash_chain_, enc->refs_,
-                              enc->current_width_, height, quality, low_effort,
-                              use_cache, &crunch_configs[idx],
-                              &enc->cache_bits_, enc->histo_bits_,
-                              byte_position, &hdr_size, &data_size);
-    if (err != VP8_ENC_OK) goto Error;
-
-    // If we are better than what we already have.
-    if (idx == 0 || VP8LBitWriterNumBytes(bw) < best_size) {
-      best_size = VP8LBitWriterNumBytes(bw);
-      // Store the BitWriter.
-      VP8LBitWriterSwap(bw, &bw_best);
-#if !defined(WEBP_DISABLE_STATS)
-      // Update the stats.
-      if (stats != NULL) {
-        stats->lossless_features = 0;
-        if (enc->use_predict_) stats->lossless_features |= 1;
-        if (enc->use_cross_color_) stats->lossless_features |= 2;
-        if (enc->use_subtract_green_) stats->lossless_features |= 4;
-        if (enc->use_palette_) stats->lossless_features |= 8;
-        stats->histogram_bits = enc->histo_bits_;
-        stats->transform_bits = enc->transform_bits_;
-        stats->cache_bits = enc->cache_bits_;
-        stats->palette_size = enc->palette_size_;
-        stats->lossless_size = (int)(best_size - byte_position);
-        stats->lossless_hdr_size = hdr_size;
-        stats->lossless_data_size = data_size;
-      }
-#endif
-    }
-    // Reset the bit writer for the following iteration if any.
-    if (num_crunch_configs > 1) VP8LBitWriterReset(&bw_init, bw);
-  }
-  VP8LBitWriterSwap(&bw_best, bw);
-
-Error:
-  VP8LBitWriterWipeOut(&bw_best);
-  params->err_ = err;
-  // The hook should return false in case of error.
-  return (err == VP8_ENC_OK);
-}
-
-WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
-                                   const WebPPicture* const picture,
-                                   VP8LBitWriter* const bw_main,
-                                   int use_cache) {
-  WebPEncodingError err = VP8_ENC_OK;
-  VP8LEncoder* const enc_main = VP8LEncoderNew(config, picture);
-  VP8LEncoder* enc_side = NULL;
-  CrunchConfig crunch_configs[CRUNCH_CONFIGS_MAX];
-  int num_crunch_configs_main, num_crunch_configs_side = 0;
-  int idx;
-  int red_and_blue_always_zero = 0;
-  WebPWorker worker_main, worker_side;
-  StreamEncodeContext params_main, params_side;
-  // The main thread uses picture->stats, the side thread uses stats_side.
-  WebPAuxStats stats_side;
-  VP8LBitWriter bw_side;
-  const WebPWorkerInterface* const worker_interface = WebPGetWorkerInterface();
-  int ok_main;
-
-  // Analyze image (entropy, num_palettes etc)
-  if (enc_main == NULL ||
-      !EncoderAnalyze(enc_main, crunch_configs, &num_crunch_configs_main,
-                      &red_and_blue_always_zero) ||
-      !EncoderInit(enc_main) || !VP8LBitWriterInit(&bw_side, 0)) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  // Split the configs between the main and side threads (if any).
-  if (config->thread_level > 0) {
-    num_crunch_configs_side = num_crunch_configs_main / 2;
-    for (idx = 0; idx < num_crunch_configs_side; ++idx) {
-      params_side.crunch_configs_[idx] =
-          crunch_configs[num_crunch_configs_main - num_crunch_configs_side +
-                         idx];
-    }
-    params_side.num_crunch_configs_ = num_crunch_configs_side;
-  }
-  num_crunch_configs_main -= num_crunch_configs_side;
-  for (idx = 0; idx < num_crunch_configs_main; ++idx) {
-    params_main.crunch_configs_[idx] = crunch_configs[idx];
-  }
-  params_main.num_crunch_configs_ = num_crunch_configs_main;
-
-  // Fill in the parameters for the thread workers.
-  {
-    const int params_size = (num_crunch_configs_side > 0) ? 2 : 1;
-    for (idx = 0; idx < params_size; ++idx) {
-      // Create the parameters for each worker.
-      WebPWorker* const worker = (idx == 0) ? &worker_main : &worker_side;
-      StreamEncodeContext* const param =
-          (idx == 0) ? &params_main : &params_side;
-      param->config_ = config;
-      param->picture_ = picture;
-      param->use_cache_ = use_cache;
-      param->red_and_blue_always_zero_ = red_and_blue_always_zero;
-      if (idx == 0) {
-        param->stats_ = picture->stats;
-        param->bw_ = bw_main;
-        param->enc_ = enc_main;
-      } else {
-        param->stats_ = (picture->stats == NULL) ? NULL : &stats_side;
-        // Create a side bit writer.
-        if (!VP8LBitWriterClone(bw_main, &bw_side)) {
-          err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-          goto Error;
-        }
-        param->bw_ = &bw_side;
-        // Create a side encoder.
-        enc_side = VP8LEncoderNew(config, picture);
-        if (enc_side == NULL || !EncoderInit(enc_side)) {
-          err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-          goto Error;
-        }
-        // Copy the values that were computed for the main encoder.
-        enc_side->histo_bits_ = enc_main->histo_bits_;
-        enc_side->transform_bits_ = enc_main->transform_bits_;
-        enc_side->palette_size_ = enc_main->palette_size_;
-        memcpy(enc_side->palette_, enc_main->palette_,
-               sizeof(enc_main->palette_));
-        param->enc_ = enc_side;
-      }
-      // Create the workers.
-      worker_interface->Init(worker);
-      worker->data1 = param;
-      worker->data2 = NULL;
-      worker->hook = EncodeStreamHook;
-    }
-  }
-
-  // Start the second thread if needed.
-  if (num_crunch_configs_side != 0) {
-    if (!worker_interface->Reset(&worker_side)) {
-      err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-      goto Error;
-    }
-#if !defined(WEBP_DISABLE_STATS)
-    // This line is here and not in the param initialization above to remove a
-    // Clang static analyzer warning.
-    if (picture->stats != NULL) {
-      memcpy(&stats_side, picture->stats, sizeof(stats_side));
-    }
-#endif
-    // This line is only useful to remove a Clang static analyzer warning.
-    params_side.err_ = VP8_ENC_OK;
-    worker_interface->Launch(&worker_side);
-  }
-  // Execute the main thread.
-  worker_interface->Execute(&worker_main);
-  ok_main = worker_interface->Sync(&worker_main);
-  worker_interface->End(&worker_main);
-  if (num_crunch_configs_side != 0) {
-    // Wait for the second thread.
-    const int ok_side = worker_interface->Sync(&worker_side);
-    worker_interface->End(&worker_side);
-    if (!ok_main || !ok_side) {
-      err = ok_main ? params_side.err_ : params_main.err_;
-      goto Error;
-    }
-    if (VP8LBitWriterNumBytes(&bw_side) < VP8LBitWriterNumBytes(bw_main)) {
-      VP8LBitWriterSwap(bw_main, &bw_side);
-#if !defined(WEBP_DISABLE_STATS)
-      if (picture->stats != NULL) {
-        memcpy(picture->stats, &stats_side, sizeof(*picture->stats));
-      }
-#endif
-    }
-  } else {
-    if (!ok_main) {
-      err = params_main.err_;
-      goto Error;
-    }
-  }
-
-Error:
-  VP8LBitWriterWipeOut(&bw_side);
-  VP8LEncoderDelete(enc_main);
-  VP8LEncoderDelete(enc_side);
-  return err;
-}
-
-#undef CRUNCH_CONFIGS_MAX
-#undef CRUNCH_CONFIGS_LZ77_MAX
-
-int VP8LEncodeImage(const WebPConfig* const config,
-                    const WebPPicture* const picture) {
-  int width, height;
-  int has_alpha;
-  size_t coded_size;
-  int percent = 0;
-  int initial_size;
-  WebPEncodingError err = VP8_ENC_OK;
-  VP8LBitWriter bw;
-
-  if (picture == NULL) return 0;
-
-  if (config == NULL || picture->argb == NULL) {
-    err = VP8_ENC_ERROR_NULL_PARAMETER;
-    WebPEncodingSetError(picture, err);
-    return 0;
-  }
-
-  width = picture->width;
-  height = picture->height;
-  // Initialize BitWriter with size corresponding to 16 bpp to photo images and
-  // 8 bpp for graphical images.
-  initial_size = (config->image_hint == WEBP_HINT_GRAPH) ?
-      width * height : width * height * 2;
-  if (!VP8LBitWriterInit(&bw, initial_size)) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  if (!WebPReportProgress(picture, 1, &percent)) {
- UserAbort:
-    err = VP8_ENC_ERROR_USER_ABORT;
-    goto Error;
-  }
-  // Reset stats (for pure lossless coding)
-  if (picture->stats != NULL) {
-    WebPAuxStats* const stats = picture->stats;
-    memset(stats, 0, sizeof(*stats));
-    stats->PSNR[0] = 99.f;
-    stats->PSNR[1] = 99.f;
-    stats->PSNR[2] = 99.f;
-    stats->PSNR[3] = 99.f;
-    stats->PSNR[4] = 99.f;
-  }
-
-  // Write image size.
-  if (!WriteImageSize(picture, &bw)) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  has_alpha = WebPPictureHasTransparency(picture);
-  // Write the non-trivial Alpha flag and lossless version.
-  if (!WriteRealAlphaAndVersion(&bw, has_alpha)) {
-    err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-    goto Error;
-  }
-
-  if (!WebPReportProgress(picture, 5, &percent)) goto UserAbort;
-
-  // Encode main image stream.
-  err = VP8LEncodeStream(config, picture, &bw, 1 /*use_cache*/);
-  if (err != VP8_ENC_OK) goto Error;
-
-  if (!WebPReportProgress(picture, 90, &percent)) goto UserAbort;
-
-  // Finish the RIFF chunk.
-  err = WriteImage(picture, &bw, &coded_size);
-  if (err != VP8_ENC_OK) goto Error;
-
-  if (!WebPReportProgress(picture, 100, &percent)) goto UserAbort;
-
-#if !defined(WEBP_DISABLE_STATS)
-  // Save size.
-  if (picture->stats != NULL) {
-    picture->stats->coded_size += (int)coded_size;
-    picture->stats->lossless_size = (int)coded_size;
-  }
-#endif
-
-  if (picture->extra_info != NULL) {
-    const int mb_w = (width + 15) >> 4;
-    const int mb_h = (height + 15) >> 4;
-    memset(picture->extra_info, 0, mb_w * mb_h * sizeof(*picture->extra_info));
-  }
-
- Error:
-  if (bw.error_) err = VP8_ENC_ERROR_OUT_OF_MEMORY;
-  VP8LBitWriterWipeOut(&bw);
-  if (err != VP8_ENC_OK) {
-    WebPEncodingSetError(picture, err);
-    return 0;
-  }
-  return 1;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/enc/vp8li_enc.h b/ios/Pods/libwebp/src/enc/vp8li_enc.h
deleted file mode 100644
index d2d0fc5..0000000
--- a/ios/Pods/libwebp/src/enc/vp8li_enc.h
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Lossless encoder: internal header.
-//
-// Author: Vikas Arora (vikaas.arora@gmail.com)
-
-#ifndef WEBP_ENC_VP8LI_ENC_H_
-#define WEBP_ENC_VP8LI_ENC_H_
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-// Either WEBP_NEAR_LOSSLESS is defined as 0 in config.h when compiling to
-// disable near-lossless, or it is enabled by default.
-#ifndef WEBP_NEAR_LOSSLESS
-#define WEBP_NEAR_LOSSLESS 1
-#endif
-
-#include "src/enc/backward_references_enc.h"
-#include "src/enc/histogram_enc.h"
-#include "src/utils/bit_writer_utils.h"
-#include "src/webp/encode.h"
-#include "src/webp/format_constants.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// maximum value of transform_bits_ in VP8LEncoder.
-#define MAX_TRANSFORM_BITS 6
-
-typedef enum {
-  kEncoderNone = 0,
-  kEncoderARGB,
-  kEncoderNearLossless,
-  kEncoderPalette
-} VP8LEncoderARGBContent;
-
-typedef struct {
-  const WebPConfig* config_;      // user configuration and parameters
-  const WebPPicture* pic_;        // input picture.
-
-  uint32_t* argb_;                       // Transformed argb image data.
-  VP8LEncoderARGBContent argb_content_;  // Content type of the argb buffer.
-  uint32_t* argb_scratch_;               // Scratch memory for argb rows
-                                         // (used for prediction).
-  uint32_t* transform_data_;             // Scratch memory for transform data.
-  uint32_t* transform_mem_;              // Currently allocated memory.
-  size_t    transform_mem_size_;         // Currently allocated memory size.
-
-  int       current_width_;       // Corresponds to packed image width.
-
-  // Encoding parameters derived from quality parameter.
-  int histo_bits_;
-  int transform_bits_;    // <= MAX_TRANSFORM_BITS.
-  int cache_bits_;        // If equal to 0, don't use color cache.
-
-  // Encoding parameters derived from image characteristics.
-  int use_cross_color_;
-  int use_subtract_green_;
-  int use_predict_;
-  int use_palette_;
-  int palette_size_;
-  uint32_t palette_[MAX_PALETTE_SIZE];
-
-  // Some 'scratch' (potentially large) objects.
-  struct VP8LBackwardRefs refs_[3];  // Backward Refs array for temporaries.
-  VP8LHashChain hash_chain_;         // HashChain data for constructing
-                                     // backward references.
-} VP8LEncoder;
-
-//------------------------------------------------------------------------------
-// internal functions. Not public.
-
-// Encodes the picture.
-// Returns 0 if config or picture is NULL or picture doesn't have valid argb
-// input.
-int VP8LEncodeImage(const WebPConfig* const config,
-                    const WebPPicture* const picture);
-
-// Encodes the main image stream using the supplied bit writer.
-// If 'use_cache' is false, disables the use of color cache.
-WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
-                                   const WebPPicture* const picture,
-                                   VP8LBitWriter* const bw, int use_cache);
-
-#if (WEBP_NEAR_LOSSLESS == 1)
-// in near_lossless.c
-// Near lossless preprocessing in RGB color-space.
-int VP8ApplyNearLossless(const WebPPicture* const picture, int quality,
-                         uint32_t* const argb_dst);
-#endif
-
-//------------------------------------------------------------------------------
-// Image transforms in predictor.c.
-
-void VP8LResidualImage(int width, int height, int bits, int low_effort,
-                       uint32_t* const argb, uint32_t* const argb_scratch,
-                       uint32_t* const image, int near_lossless, int exact,
-                       int used_subtract_green);
-
-void VP8LColorSpaceTransform(int width, int height, int bits, int quality,
-                             uint32_t* const argb, uint32_t* image);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_ENC_VP8LI_ENC_H_
diff --git a/ios/Pods/libwebp/src/enc/webp_enc.c b/ios/Pods/libwebp/src/enc/webp_enc.c
deleted file mode 100644
index 9f4b10c..0000000
--- a/ios/Pods/libwebp/src/enc/webp_enc.c
+++ /dev/null
@@ -1,410 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// WebP encoder: main entry point
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "src/enc/cost_enc.h"
-#include "src/enc/vp8i_enc.h"
-#include "src/enc/vp8li_enc.h"
-#include "src/utils/utils.h"
-
-// #define PRINT_MEMORY_INFO
-
-#ifdef PRINT_MEMORY_INFO
-#include <stdio.h>
-#endif
-
-//------------------------------------------------------------------------------
-
-int WebPGetEncoderVersion(void) {
-  return (ENC_MAJ_VERSION << 16) | (ENC_MIN_VERSION << 8) | ENC_REV_VERSION;
-}
-
-//------------------------------------------------------------------------------
-// VP8Encoder
-//------------------------------------------------------------------------------
-
-static void ResetSegmentHeader(VP8Encoder* const enc) {
-  VP8EncSegmentHeader* const hdr = &enc->segment_hdr_;
-  hdr->num_segments_ = enc->config_->segments;
-  hdr->update_map_  = (hdr->num_segments_ > 1);
-  hdr->size_ = 0;
-}
-
-static void ResetFilterHeader(VP8Encoder* const enc) {
-  VP8EncFilterHeader* const hdr = &enc->filter_hdr_;
-  hdr->simple_ = 1;
-  hdr->level_ = 0;
-  hdr->sharpness_ = 0;
-  hdr->i4x4_lf_delta_ = 0;
-}
-
-static void ResetBoundaryPredictions(VP8Encoder* const enc) {
-  // init boundary values once for all
-  // Note: actually, initializing the preds_[] is only needed for intra4.
-  int i;
-  uint8_t* const top = enc->preds_ - enc->preds_w_;
-  uint8_t* const left = enc->preds_ - 1;
-  for (i = -1; i < 4 * enc->mb_w_; ++i) {
-    top[i] = B_DC_PRED;
-  }
-  for (i = 0; i < 4 * enc->mb_h_; ++i) {
-    left[i * enc->preds_w_] = B_DC_PRED;
-  }
-  enc->nz_[-1] = 0;   // constant
-}
-
-// Mapping from config->method_ to coding tools used.
-//-------------------+---+---+---+---+---+---+---+
-//   Method          | 0 | 1 | 2 | 3 |(4)| 5 | 6 |
-//-------------------+---+---+---+---+---+---+---+
-// fast probe        | x |   |   | x |   |   |   |
-//-------------------+---+---+---+---+---+---+---+
-// dynamic proba     | ~ | x | x | x | x | x | x |
-//-------------------+---+---+---+---+---+---+---+
-// fast mode analysis|[x]|[x]|   |   | x | x | x |
-//-------------------+---+---+---+---+---+---+---+
-// basic rd-opt      |   |   |   | x | x | x | x |
-//-------------------+---+---+---+---+---+---+---+
-// disto-refine i4/16| x | x | x |   |   |   |   |
-//-------------------+---+---+---+---+---+---+---+
-// disto-refine uv   |   | x | x |   |   |   |   |
-//-------------------+---+---+---+---+---+---+---+
-// rd-opt i4/16      |   |   | ~ | x | x | x | x |
-//-------------------+---+---+---+---+---+---+---+
-// token buffer (opt)|   |   |   | x | x | x | x |
-//-------------------+---+---+---+---+---+---+---+
-// Trellis           |   |   |   |   |   | x |Ful|
-//-------------------+---+---+---+---+---+---+---+
-// full-SNS          |   |   |   |   | x | x | x |
-//-------------------+---+---+---+---+---+---+---+
-
-static void MapConfigToTools(VP8Encoder* const enc) {
-  const WebPConfig* const config = enc->config_;
-  const int method = config->method;
-  const int limit = 100 - config->partition_limit;
-  enc->method_ = method;
-  enc->rd_opt_level_ = (method >= 6) ? RD_OPT_TRELLIS_ALL
-                     : (method >= 5) ? RD_OPT_TRELLIS
-                     : (method >= 3) ? RD_OPT_BASIC
-                     : RD_OPT_NONE;
-  enc->max_i4_header_bits_ =
-      256 * 16 * 16 *                 // upper bound: up to 16bit per 4x4 block
-      (limit * limit) / (100 * 100);  // ... modulated with a quadratic curve.
-
-  // partition0 = 512k max.
-  enc->mb_header_limit_ =
-      (score_t)256 * 510 * 8 * 1024 / (enc->mb_w_ * enc->mb_h_);
-
-  enc->thread_level_ = config->thread_level;
-
-  enc->do_search_ = (config->target_size > 0 || config->target_PSNR > 0);
-  if (!config->low_memory) {
-#if !defined(DISABLE_TOKEN_BUFFER)
-    enc->use_tokens_ = (enc->rd_opt_level_ >= RD_OPT_BASIC);  // need rd stats
-#endif
-    if (enc->use_tokens_) {
-      enc->num_parts_ = 1;   // doesn't work with multi-partition
-    }
-  }
-}
-
-// Memory scaling with dimensions:
-//  memory (bytes) ~= 2.25 * w + 0.0625 * w * h
-//
-// Typical memory footprint (614x440 picture)
-//              encoder: 22111
-//                 info: 4368
-//                preds: 17741
-//          top samples: 1263
-//             non-zero: 175
-//             lf-stats: 0
-//                total: 45658
-// Transient object sizes:
-//       VP8EncIterator: 3360
-//         VP8ModeScore: 872
-//       VP8SegmentInfo: 732
-//          VP8EncProba: 18352
-//              LFStats: 2048
-// Picture size (yuv): 419328
-
-static VP8Encoder* InitVP8Encoder(const WebPConfig* const config,
-                                  WebPPicture* const picture) {
-  VP8Encoder* enc;
-  const int use_filter =
-      (config->filter_strength > 0) || (config->autofilter > 0);
-  const int mb_w = (picture->width + 15) >> 4;
-  const int mb_h = (picture->height + 15) >> 4;
-  const int preds_w = 4 * mb_w + 1;
-  const int preds_h = 4 * mb_h + 1;
-  const size_t preds_size = preds_w * preds_h * sizeof(*enc->preds_);
-  const int top_stride = mb_w * 16;
-  const size_t nz_size = (mb_w + 1) * sizeof(*enc->nz_) + WEBP_ALIGN_CST;
-  const size_t info_size = mb_w * mb_h * sizeof(*enc->mb_info_);
-  const size_t samples_size =
-      2 * top_stride * sizeof(*enc->y_top_)  // top-luma/u/v
-      + WEBP_ALIGN_CST;                      // align all
-  const size_t lf_stats_size =
-      config->autofilter ? sizeof(*enc->lf_stats_) + WEBP_ALIGN_CST : 0;
-  const size_t top_derr_size =
-      (config->quality <= ERROR_DIFFUSION_QUALITY || config->pass > 1) ?
-          mb_w * sizeof(*enc->top_derr_) : 0;
-  uint8_t* mem;
-  const uint64_t size = (uint64_t)sizeof(*enc)   // main struct
-                      + WEBP_ALIGN_CST           // cache alignment
-                      + info_size                // modes info
-                      + preds_size               // prediction modes
-                      + samples_size             // top/left samples
-                      + top_derr_size            // top diffusion error
-                      + nz_size                  // coeff context bits
-                      + lf_stats_size;           // autofilter stats
-
-#ifdef PRINT_MEMORY_INFO
-  printf("===================================\n");
-  printf("Memory used:\n"
-         "             encoder: %ld\n"
-         "                info: %ld\n"
-         "               preds: %ld\n"
-         "         top samples: %ld\n"
-         "       top diffusion: %ld\n"
-         "            non-zero: %ld\n"
-         "            lf-stats: %ld\n"
-         "               total: %ld\n",
-         sizeof(*enc) + WEBP_ALIGN_CST, info_size,
-         preds_size, samples_size, top_derr_size, nz_size, lf_stats_size, size);
-  printf("Transient object sizes:\n"
-         "      VP8EncIterator: %ld\n"
-         "        VP8ModeScore: %ld\n"
-         "      VP8SegmentInfo: %ld\n"
-         "         VP8EncProba: %ld\n"
-         "             LFStats: %ld\n",
-         sizeof(VP8EncIterator), sizeof(VP8ModeScore),
-         sizeof(VP8SegmentInfo), sizeof(VP8EncProba),
-         sizeof(LFStats));
-  printf("Picture size (yuv): %ld\n",
-         mb_w * mb_h * 384 * sizeof(uint8_t));
-  printf("===================================\n");
-#endif
-  mem = (uint8_t*)WebPSafeMalloc(size, sizeof(*mem));
-  if (mem == NULL) {
-    WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY);
-    return NULL;
-  }
-  enc = (VP8Encoder*)mem;
-  mem = (uint8_t*)WEBP_ALIGN(mem + sizeof(*enc));
-  memset(enc, 0, sizeof(*enc));
-  enc->num_parts_ = 1 << config->partitions;
-  enc->mb_w_ = mb_w;
-  enc->mb_h_ = mb_h;
-  enc->preds_w_ = preds_w;
-  enc->mb_info_ = (VP8MBInfo*)mem;
-  mem += info_size;
-  enc->preds_ = mem + 1 + enc->preds_w_;
-  mem += preds_size;
-  enc->nz_ = 1 + (uint32_t*)WEBP_ALIGN(mem);
-  mem += nz_size;
-  enc->lf_stats_ = lf_stats_size ? (LFStats*)WEBP_ALIGN(mem) : NULL;
-  mem += lf_stats_size;
-
-  // top samples (all 16-aligned)
-  mem = (uint8_t*)WEBP_ALIGN(mem);
-  enc->y_top_ = mem;
-  enc->uv_top_ = enc->y_top_ + top_stride;
-  mem += 2 * top_stride;
-  enc->top_derr_ = top_derr_size ? (DError*)mem : NULL;
-  mem += top_derr_size;
-  assert(mem <= (uint8_t*)enc + size);
-
-  enc->config_ = config;
-  enc->profile_ = use_filter ? ((config->filter_type == 1) ? 0 : 1) : 2;
-  enc->pic_ = picture;
-  enc->percent_ = 0;
-
-  MapConfigToTools(enc);
-  VP8EncDspInit();
-  VP8DefaultProbas(enc);
-  ResetSegmentHeader(enc);
-  ResetFilterHeader(enc);
-  ResetBoundaryPredictions(enc);
-  VP8EncDspCostInit();
-  VP8EncInitAlpha(enc);
-
-  // lower quality means smaller output -> we modulate a little the page
-  // size based on quality. This is just a crude 1rst-order prediction.
-  {
-    const float scale = 1.f + config->quality * 5.f / 100.f;  // in [1,6]
-    VP8TBufferInit(&enc->tokens_, (int)(mb_w * mb_h * 4 * scale));
-  }
-  return enc;
-}
-
-static int DeleteVP8Encoder(VP8Encoder* enc) {
-  int ok = 1;
-  if (enc != NULL) {
-    ok = VP8EncDeleteAlpha(enc);
-    VP8TBufferClear(&enc->tokens_);
-    WebPSafeFree(enc);
-  }
-  return ok;
-}
-
-//------------------------------------------------------------------------------
-
-#if !defined(WEBP_DISABLE_STATS)
-static double GetPSNR(uint64_t err, uint64_t size) {
-  return (err > 0 && size > 0) ? 10. * log10(255. * 255. * size / err) : 99.;
-}
-
-static void FinalizePSNR(const VP8Encoder* const enc) {
-  WebPAuxStats* stats = enc->pic_->stats;
-  const uint64_t size = enc->sse_count_;
-  const uint64_t* const sse = enc->sse_;
-  stats->PSNR[0] = (float)GetPSNR(sse[0], size);
-  stats->PSNR[1] = (float)GetPSNR(sse[1], size / 4);
-  stats->PSNR[2] = (float)GetPSNR(sse[2], size / 4);
-  stats->PSNR[3] = (float)GetPSNR(sse[0] + sse[1] + sse[2], size * 3 / 2);
-  stats->PSNR[4] = (float)GetPSNR(sse[3], size);
-}
-#endif  // !defined(WEBP_DISABLE_STATS)
-
-static void StoreStats(VP8Encoder* const enc) {
-#if !defined(WEBP_DISABLE_STATS)
-  WebPAuxStats* const stats = enc->pic_->stats;
-  if (stats != NULL) {
-    int i, s;
-    for (i = 0; i < NUM_MB_SEGMENTS; ++i) {
-      stats->segment_level[i] = enc->dqm_[i].fstrength_;
-      stats->segment_quant[i] = enc->dqm_[i].quant_;
-      for (s = 0; s <= 2; ++s) {
-        stats->residual_bytes[s][i] = enc->residual_bytes_[s][i];
-      }
-    }
-    FinalizePSNR(enc);
-    stats->coded_size = enc->coded_size_;
-    for (i = 0; i < 3; ++i) {
-      stats->block_count[i] = enc->block_count_[i];
-    }
-  }
-#else  // defined(WEBP_DISABLE_STATS)
-  WebPReportProgress(enc->pic_, 100, &enc->percent_);  // done!
-#endif  // !defined(WEBP_DISABLE_STATS)
-}
-
-int WebPEncodingSetError(const WebPPicture* const pic,
-                         WebPEncodingError error) {
-  assert((int)error < VP8_ENC_ERROR_LAST);
-  assert((int)error >= VP8_ENC_OK);
-  ((WebPPicture*)pic)->error_code = error;
-  return 0;
-}
-
-int WebPReportProgress(const WebPPicture* const pic,
-                       int percent, int* const percent_store) {
-  if (percent_store != NULL && percent != *percent_store) {
-    *percent_store = percent;
-    if (pic->progress_hook && !pic->progress_hook(percent, pic)) {
-      // user abort requested
-      WebPEncodingSetError(pic, VP8_ENC_ERROR_USER_ABORT);
-      return 0;
-    }
-  }
-  return 1;  // ok
-}
-//------------------------------------------------------------------------------
-
-int WebPEncode(const WebPConfig* config, WebPPicture* pic) {
-  int ok = 0;
-  if (pic == NULL) return 0;
-
-  WebPEncodingSetError(pic, VP8_ENC_OK);  // all ok so far
-  if (config == NULL) {  // bad params
-    return WebPEncodingSetError(pic, VP8_ENC_ERROR_NULL_PARAMETER);
-  }
-  if (!WebPValidateConfig(config)) {
-    return WebPEncodingSetError(pic, VP8_ENC_ERROR_INVALID_CONFIGURATION);
-  }
-  if (pic->width <= 0 || pic->height <= 0) {
-    return WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_DIMENSION);
-  }
-  if (pic->width > WEBP_MAX_DIMENSION || pic->height > WEBP_MAX_DIMENSION) {
-    return WebPEncodingSetError(pic, VP8_ENC_ERROR_BAD_DIMENSION);
-  }
-
-  if (pic->stats != NULL) memset(pic->stats, 0, sizeof(*pic->stats));
-
-  if (!config->lossless) {
-    VP8Encoder* enc = NULL;
-
-    if (pic->use_argb || pic->y == NULL || pic->u == NULL || pic->v == NULL) {
-      // Make sure we have YUVA samples.
-      if (config->use_sharp_yuv || (config->preprocessing & 4)) {
-        if (!WebPPictureSharpARGBToYUVA(pic)) {
-          return 0;
-        }
-      } else {
-        float dithering = 0.f;
-        if (config->preprocessing & 2) {
-          const float x = config->quality / 100.f;
-          const float x2 = x * x;
-          // slowly decreasing from max dithering at low quality (q->0)
-          // to 0.5 dithering amplitude at high quality (q->100)
-          dithering = 1.0f + (0.5f - 1.0f) * x2 * x2;
-        }
-        if (!WebPPictureARGBToYUVADithered(pic, WEBP_YUV420, dithering)) {
-          return 0;
-        }
-      }
-    }
-
-    if (!config->exact) {
-      WebPCleanupTransparentArea(pic);
-    }
-
-    enc = InitVP8Encoder(config, pic);
-    if (enc == NULL) return 0;  // pic->error is already set.
-    // Note: each of the tasks below account for 20% in the progress report.
-    ok = VP8EncAnalyze(enc);
-
-    // Analysis is done, proceed to actual coding.
-    ok = ok && VP8EncStartAlpha(enc);   // possibly done in parallel
-    if (!enc->use_tokens_) {
-      ok = ok && VP8EncLoop(enc);
-    } else {
-      ok = ok && VP8EncTokenLoop(enc);
-    }
-    ok = ok && VP8EncFinishAlpha(enc);
-
-    ok = ok && VP8EncWrite(enc);
-    StoreStats(enc);
-    if (!ok) {
-      VP8EncFreeBitWriters(enc);
-    }
-    ok &= DeleteVP8Encoder(enc);  // must always be called, even if !ok
-  } else {
-    // Make sure we have ARGB samples.
-    if (pic->argb == NULL && !WebPPictureYUVAToARGB(pic)) {
-      return 0;
-    }
-
-    if (!config->exact) {
-      WebPCleanupTransparentAreaLossless(pic);
-    }
-
-    ok = VP8LEncodeImage(config, pic);  // Sets pic->error in case of problem.
-  }
-
-  return ok;
-}
diff --git a/ios/Pods/libwebp/src/mux/anim_encode.c b/ios/Pods/libwebp/src/mux/anim_encode.c
deleted file mode 100644
index 7be9906..0000000
--- a/ios/Pods/libwebp/src/mux/anim_encode.c
+++ /dev/null
@@ -1,1581 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  AnimEncoder implementation.
-//
-
-#include <assert.h>
-#include <limits.h>
-#include <math.h>    // for pow()
-#include <stdio.h>
-#include <stdlib.h>  // for abs()
-
-#include "src/mux/animi.h"
-#include "src/utils/utils.h"
-#include "src/webp/decode.h"
-#include "src/webp/encode.h"
-#include "src/webp/format_constants.h"
-#include "src/webp/mux.h"
-
-#if defined(_MSC_VER) && _MSC_VER < 1900
-#define snprintf _snprintf
-#endif
-
-#define ERROR_STR_MAX_LENGTH 100
-
-//------------------------------------------------------------------------------
-// Internal structs.
-
-// Stores frame rectangle dimensions.
-typedef struct {
-  int x_offset_, y_offset_, width_, height_;
-} FrameRectangle;
-
-// Used to store two candidates of encoded data for an animation frame. One of
-// the two will be chosen later.
-typedef struct {
-  WebPMuxFrameInfo sub_frame_;  // Encoded frame rectangle.
-  WebPMuxFrameInfo key_frame_;  // Encoded frame if it is a key-frame.
-  int is_key_frame_;            // True if 'key_frame' has been chosen.
-} EncodedFrame;
-
-struct WebPAnimEncoder {
-  const int canvas_width_;                  // Canvas width.
-  const int canvas_height_;                 // Canvas height.
-  const WebPAnimEncoderOptions options_;    // Global encoding options.
-
-  FrameRectangle prev_rect_;          // Previous WebP frame rectangle.
-  WebPConfig last_config_;            // Cached in case a re-encode is needed.
-  WebPConfig last_config_reversed_;   // If 'last_config_' uses lossless, then
-                                      // this config uses lossy and vice versa;
-                                      // only valid if 'options_.allow_mixed'
-                                      // is true.
-
-  WebPPicture* curr_canvas_;          // Only pointer; we don't own memory.
-
-  // Canvas buffers.
-  WebPPicture curr_canvas_copy_;      // Possibly modified current canvas.
-  int curr_canvas_copy_modified_;     // True if pixels in 'curr_canvas_copy_'
-                                      // differ from those in 'curr_canvas_'.
-
-  WebPPicture prev_canvas_;           // Previous canvas.
-  WebPPicture prev_canvas_disposed_;  // Previous canvas disposed to background.
-
-  // Encoded data.
-  EncodedFrame* encoded_frames_;      // Array of encoded frames.
-  size_t size_;             // Number of allocated frames.
-  size_t start_;            // Frame start index.
-  size_t count_;            // Number of valid frames.
-  size_t flush_count_;      // If >0, 'flush_count' frames starting from
-                            // 'start' are ready to be added to mux.
-
-  // key-frame related.
-  int64_t best_delta_;      // min(canvas size - frame size) over the frames.
-                            // Can be negative in certain cases due to
-                            // transparent pixels in a frame.
-  int keyframe_;            // Index of selected key-frame relative to 'start_'.
-  int count_since_key_frame_;     // Frames seen since the last key-frame.
-
-  int first_timestamp_;           // Timestamp of the first frame.
-  int prev_timestamp_;            // Timestamp of the last added frame.
-  int prev_candidate_undecided_;  // True if it's not yet decided if previous
-                                  // frame would be a sub-frame or a key-frame.
-
-  // Misc.
-  int is_first_frame_;  // True if first frame is yet to be added/being added.
-  int got_null_frame_;  // True if WebPAnimEncoderAdd() has already been called
-                        // with a NULL frame.
-
-  size_t in_frame_count_;   // Number of input frames processed so far.
-  size_t out_frame_count_;  // Number of frames added to mux so far. This may be
-                            // different from 'in_frame_count_' due to merging.
-
-  WebPMux* mux_;        // Muxer to assemble the WebP bitstream.
-  char error_str_[ERROR_STR_MAX_LENGTH];  // Error string. Empty if no error.
-};
-
-// -----------------------------------------------------------------------------
-// Life of WebPAnimEncoder object.
-
-#define DELTA_INFINITY      (1ULL << 32)
-#define KEYFRAME_NONE       (-1)
-
-// Reset the counters in the WebPAnimEncoder.
-static void ResetCounters(WebPAnimEncoder* const enc) {
-  enc->start_ = 0;
-  enc->count_ = 0;
-  enc->flush_count_ = 0;
-  enc->best_delta_ = DELTA_INFINITY;
-  enc->keyframe_ = KEYFRAME_NONE;
-}
-
-static void DisableKeyframes(WebPAnimEncoderOptions* const enc_options) {
-  enc_options->kmax = INT_MAX;
-  enc_options->kmin = enc_options->kmax - 1;
-}
-
-#define MAX_CACHED_FRAMES 30
-
-static void SanitizeEncoderOptions(WebPAnimEncoderOptions* const enc_options) {
-  int print_warning = enc_options->verbose;
-
-  if (enc_options->minimize_size) {
-    DisableKeyframes(enc_options);
-  }
-
-  if (enc_options->kmax == 1) {  // All frames will be key-frames.
-    enc_options->kmin = 0;
-    enc_options->kmax = 0;
-    return;
-  } else if (enc_options->kmax <= 0) {
-    DisableKeyframes(enc_options);
-    print_warning = 0;
-  }
-
-  if (enc_options->kmin >= enc_options->kmax) {
-    enc_options->kmin = enc_options->kmax - 1;
-    if (print_warning) {
-      fprintf(stderr, "WARNING: Setting kmin = %d, so that kmin < kmax.\n",
-              enc_options->kmin);
-    }
-  } else {
-    const int kmin_limit = enc_options->kmax / 2 + 1;
-    if (enc_options->kmin < kmin_limit && kmin_limit < enc_options->kmax) {
-      // This ensures that enc.keyframe + kmin >= kmax is always true. So, we
-      // can flush all the frames in the 'count_since_key_frame == kmax' case.
-      enc_options->kmin = kmin_limit;
-      if (print_warning) {
-        fprintf(stderr,
-                "WARNING: Setting kmin = %d, so that kmin >= kmax / 2 + 1.\n",
-                enc_options->kmin);
-      }
-    }
-  }
-  // Limit the max number of frames that are allocated.
-  if (enc_options->kmax - enc_options->kmin > MAX_CACHED_FRAMES) {
-    enc_options->kmin = enc_options->kmax - MAX_CACHED_FRAMES;
-    if (print_warning) {
-      fprintf(stderr,
-              "WARNING: Setting kmin = %d, so that kmax - kmin <= %d.\n",
-              enc_options->kmin, MAX_CACHED_FRAMES);
-    }
-  }
-  assert(enc_options->kmin < enc_options->kmax);
-}
-
-#undef MAX_CACHED_FRAMES
-
-static void DefaultEncoderOptions(WebPAnimEncoderOptions* const enc_options) {
-  enc_options->anim_params.loop_count = 0;
-  enc_options->anim_params.bgcolor = 0xffffffff;  // White.
-  enc_options->minimize_size = 0;
-  DisableKeyframes(enc_options);
-  enc_options->allow_mixed = 0;
-  enc_options->verbose = 0;
-}
-
-int WebPAnimEncoderOptionsInitInternal(WebPAnimEncoderOptions* enc_options,
-                                       int abi_version) {
-  if (enc_options == NULL ||
-      WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_MUX_ABI_VERSION)) {
-    return 0;
-  }
-  DefaultEncoderOptions(enc_options);
-  return 1;
-}
-
-// This starting value is more fit to WebPCleanupTransparentAreaLossless().
-#define TRANSPARENT_COLOR   0x00000000
-
-static void ClearRectangle(WebPPicture* const picture,
-                           int left, int top, int width, int height) {
-  int j;
-  for (j = top; j < top + height; ++j) {
-    uint32_t* const dst = picture->argb + j * picture->argb_stride;
-    int i;
-    for (i = left; i < left + width; ++i) {
-      dst[i] = TRANSPARENT_COLOR;
-    }
-  }
-}
-
-static void WebPUtilClearPic(WebPPicture* const picture,
-                             const FrameRectangle* const rect) {
-  if (rect != NULL) {
-    ClearRectangle(picture, rect->x_offset_, rect->y_offset_,
-                   rect->width_, rect->height_);
-  } else {
-    ClearRectangle(picture, 0, 0, picture->width, picture->height);
-  }
-}
-
-static void MarkNoError(WebPAnimEncoder* const enc) {
-  enc->error_str_[0] = '\0';  // Empty string.
-}
-
-static void MarkError(WebPAnimEncoder* const enc, const char* str) {
-  if (snprintf(enc->error_str_, ERROR_STR_MAX_LENGTH, "%s.", str) < 0) {
-    assert(0);  // FIX ME!
-  }
-}
-
-static void MarkError2(WebPAnimEncoder* const enc,
-                       const char* str, int error_code) {
-  if (snprintf(enc->error_str_, ERROR_STR_MAX_LENGTH, "%s: %d.", str,
-               error_code) < 0) {
-    assert(0);  // FIX ME!
-  }
-}
-
-WebPAnimEncoder* WebPAnimEncoderNewInternal(
-    int width, int height, const WebPAnimEncoderOptions* enc_options,
-    int abi_version) {
-  WebPAnimEncoder* enc;
-
-  if (WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_MUX_ABI_VERSION)) {
-    return NULL;
-  }
-  if (width <= 0 || height <= 0 ||
-      (width * (uint64_t)height) >= MAX_IMAGE_AREA) {
-    return NULL;
-  }
-
-  enc = (WebPAnimEncoder*)WebPSafeCalloc(1, sizeof(*enc));
-  if (enc == NULL) return NULL;
-  // sanity inits, so we can call WebPAnimEncoderDelete():
-  enc->encoded_frames_ = NULL;
-  enc->mux_ = NULL;
-  MarkNoError(enc);
-
-  // Dimensions and options.
-  *(int*)&enc->canvas_width_ = width;
-  *(int*)&enc->canvas_height_ = height;
-  if (enc_options != NULL) {
-    *(WebPAnimEncoderOptions*)&enc->options_ = *enc_options;
-    SanitizeEncoderOptions((WebPAnimEncoderOptions*)&enc->options_);
-  } else {
-    DefaultEncoderOptions((WebPAnimEncoderOptions*)&enc->options_);
-  }
-
-  // Canvas buffers.
-  if (!WebPPictureInit(&enc->curr_canvas_copy_) ||
-      !WebPPictureInit(&enc->prev_canvas_) ||
-      !WebPPictureInit(&enc->prev_canvas_disposed_)) {
-    goto Err;
-  }
-  enc->curr_canvas_copy_.width = width;
-  enc->curr_canvas_copy_.height = height;
-  enc->curr_canvas_copy_.use_argb = 1;
-  if (!WebPPictureAlloc(&enc->curr_canvas_copy_) ||
-      !WebPPictureCopy(&enc->curr_canvas_copy_, &enc->prev_canvas_) ||
-      !WebPPictureCopy(&enc->curr_canvas_copy_, &enc->prev_canvas_disposed_)) {
-    goto Err;
-  }
-  WebPUtilClearPic(&enc->prev_canvas_, NULL);
-  enc->curr_canvas_copy_modified_ = 1;
-
-  // Encoded frames.
-  ResetCounters(enc);
-  // Note: one extra storage is for the previous frame.
-  enc->size_ = enc->options_.kmax - enc->options_.kmin + 1;
-  // We need space for at least 2 frames. But when kmin, kmax are both zero,
-  // enc->size_ will be 1. So we handle that special case below.
-  if (enc->size_ < 2) enc->size_ = 2;
-  enc->encoded_frames_ =
-      (EncodedFrame*)WebPSafeCalloc(enc->size_, sizeof(*enc->encoded_frames_));
-  if (enc->encoded_frames_ == NULL) goto Err;
-
-  enc->mux_ = WebPMuxNew();
-  if (enc->mux_ == NULL) goto Err;
-
-  enc->count_since_key_frame_ = 0;
-  enc->first_timestamp_ = 0;
-  enc->prev_timestamp_ = 0;
-  enc->prev_candidate_undecided_ = 0;
-  enc->is_first_frame_ = 1;
-  enc->got_null_frame_ = 0;
-
-  return enc;  // All OK.
-
- Err:
-  WebPAnimEncoderDelete(enc);
-  return NULL;
-}
-
-// Release the data contained by 'encoded_frame'.
-static void FrameRelease(EncodedFrame* const encoded_frame) {
-  if (encoded_frame != NULL) {
-    WebPDataClear(&encoded_frame->sub_frame_.bitstream);
-    WebPDataClear(&encoded_frame->key_frame_.bitstream);
-    memset(encoded_frame, 0, sizeof(*encoded_frame));
-  }
-}
-
-void WebPAnimEncoderDelete(WebPAnimEncoder* enc) {
-  if (enc != NULL) {
-    WebPPictureFree(&enc->curr_canvas_copy_);
-    WebPPictureFree(&enc->prev_canvas_);
-    WebPPictureFree(&enc->prev_canvas_disposed_);
-    if (enc->encoded_frames_ != NULL) {
-      size_t i;
-      for (i = 0; i < enc->size_; ++i) {
-        FrameRelease(&enc->encoded_frames_[i]);
-      }
-      WebPSafeFree(enc->encoded_frames_);
-    }
-    WebPMuxDelete(enc->mux_);
-    WebPSafeFree(enc);
-  }
-}
-
-// -----------------------------------------------------------------------------
-// Frame addition.
-
-// Returns cached frame at the given 'position'.
-static EncodedFrame* GetFrame(const WebPAnimEncoder* const enc,
-                              size_t position) {
-  assert(enc->start_ + position < enc->size_);
-  return &enc->encoded_frames_[enc->start_ + position];
-}
-
-typedef int (*ComparePixelsFunc)(const uint32_t*, int, const uint32_t*, int,
-                                 int, int);
-
-// Returns true if 'length' number of pixels in 'src' and 'dst' are equal,
-// assuming the given step sizes between pixels.
-// 'max_allowed_diff' is unused and only there to allow function pointer use.
-static WEBP_INLINE int ComparePixelsLossless(const uint32_t* src, int src_step,
-                                             const uint32_t* dst, int dst_step,
-                                             int length, int max_allowed_diff) {
-  (void)max_allowed_diff;
-  assert(length > 0);
-  while (length-- > 0) {
-    if (*src != *dst) {
-      return 0;
-    }
-    src += src_step;
-    dst += dst_step;
-  }
-  return 1;
-}
-
-// Helper to check if each channel in 'src' and 'dst' is at most off by
-// 'max_allowed_diff'.
-static WEBP_INLINE int PixelsAreSimilar(uint32_t src, uint32_t dst,
-                                        int max_allowed_diff) {
-  const int src_a = (src >> 24) & 0xff;
-  const int src_r = (src >> 16) & 0xff;
-  const int src_g = (src >> 8) & 0xff;
-  const int src_b = (src >> 0) & 0xff;
-  const int dst_a = (dst >> 24) & 0xff;
-  const int dst_r = (dst >> 16) & 0xff;
-  const int dst_g = (dst >> 8) & 0xff;
-  const int dst_b = (dst >> 0) & 0xff;
-
-  return (src_a == dst_a) &&
-         (abs(src_r - dst_r) * dst_a <= (max_allowed_diff * 255)) &&
-         (abs(src_g - dst_g) * dst_a <= (max_allowed_diff * 255)) &&
-         (abs(src_b - dst_b) * dst_a <= (max_allowed_diff * 255));
-}
-
-// Returns true if 'length' number of pixels in 'src' and 'dst' are within an
-// error bound, assuming the given step sizes between pixels.
-static WEBP_INLINE int ComparePixelsLossy(const uint32_t* src, int src_step,
-                                          const uint32_t* dst, int dst_step,
-                                          int length, int max_allowed_diff) {
-  assert(length > 0);
-  while (length-- > 0) {
-    if (!PixelsAreSimilar(*src, *dst, max_allowed_diff)) {
-      return 0;
-    }
-    src += src_step;
-    dst += dst_step;
-  }
-  return 1;
-}
-
-static int IsEmptyRect(const FrameRectangle* const rect) {
-  return (rect->width_ == 0) || (rect->height_ == 0);
-}
-
-static int QualityToMaxDiff(float quality) {
-  const double val = pow(quality / 100., 0.5);
-  const double max_diff = 31 * (1 - val) + 1 * val;
-  return (int)(max_diff + 0.5);
-}
-
-// Assumes that an initial valid guess of change rectangle 'rect' is passed.
-static void MinimizeChangeRectangle(const WebPPicture* const src,
-                                    const WebPPicture* const dst,
-                                    FrameRectangle* const rect,
-                                    int is_lossless, float quality) {
-  int i, j;
-  const ComparePixelsFunc compare_pixels =
-      is_lossless ? ComparePixelsLossless : ComparePixelsLossy;
-  const int max_allowed_diff_lossy = QualityToMaxDiff(quality);
-  const int max_allowed_diff = is_lossless ? 0 : max_allowed_diff_lossy;
-
-  // Sanity checks.
-  assert(src->width == dst->width && src->height == dst->height);
-  assert(rect->x_offset_ + rect->width_ <= dst->width);
-  assert(rect->y_offset_ + rect->height_ <= dst->height);
-
-  // Left boundary.
-  for (i = rect->x_offset_; i < rect->x_offset_ + rect->width_; ++i) {
-    const uint32_t* const src_argb =
-        &src->argb[rect->y_offset_ * src->argb_stride + i];
-    const uint32_t* const dst_argb =
-        &dst->argb[rect->y_offset_ * dst->argb_stride + i];
-    if (compare_pixels(src_argb, src->argb_stride, dst_argb, dst->argb_stride,
-                       rect->height_, max_allowed_diff)) {
-      --rect->width_;  // Redundant column.
-      ++rect->x_offset_;
-    } else {
-      break;
-    }
-  }
-  if (rect->width_ == 0) goto NoChange;
-
-  // Right boundary.
-  for (i = rect->x_offset_ + rect->width_ - 1; i >= rect->x_offset_; --i) {
-    const uint32_t* const src_argb =
-        &src->argb[rect->y_offset_ * src->argb_stride + i];
-    const uint32_t* const dst_argb =
-        &dst->argb[rect->y_offset_ * dst->argb_stride + i];
-    if (compare_pixels(src_argb, src->argb_stride, dst_argb, dst->argb_stride,
-                       rect->height_, max_allowed_diff)) {
-      --rect->width_;  // Redundant column.
-    } else {
-      break;
-    }
-  }
-  if (rect->width_ == 0) goto NoChange;
-
-  // Top boundary.
-  for (j = rect->y_offset_; j < rect->y_offset_ + rect->height_; ++j) {
-    const uint32_t* const src_argb =
-        &src->argb[j * src->argb_stride + rect->x_offset_];
-    const uint32_t* const dst_argb =
-        &dst->argb[j * dst->argb_stride + rect->x_offset_];
-    if (compare_pixels(src_argb, 1, dst_argb, 1, rect->width_,
-                       max_allowed_diff)) {
-      --rect->height_;  // Redundant row.
-      ++rect->y_offset_;
-    } else {
-      break;
-    }
-  }
-  if (rect->height_ == 0) goto NoChange;
-
-  // Bottom boundary.
-  for (j = rect->y_offset_ + rect->height_ - 1; j >= rect->y_offset_; --j) {
-    const uint32_t* const src_argb =
-        &src->argb[j * src->argb_stride + rect->x_offset_];
-    const uint32_t* const dst_argb =
-        &dst->argb[j * dst->argb_stride + rect->x_offset_];
-    if (compare_pixels(src_argb, 1, dst_argb, 1, rect->width_,
-                       max_allowed_diff)) {
-      --rect->height_;  // Redundant row.
-    } else {
-      break;
-    }
-  }
-  if (rect->height_ == 0) goto NoChange;
-
-  if (IsEmptyRect(rect)) {
- NoChange:
-    rect->x_offset_ = 0;
-    rect->y_offset_ = 0;
-    rect->width_ = 0;
-    rect->height_ = 0;
-  }
-}
-
-// Snap rectangle to even offsets (and adjust dimensions if needed).
-static WEBP_INLINE void SnapToEvenOffsets(FrameRectangle* const rect) {
-  rect->width_ += (rect->x_offset_ & 1);
-  rect->height_ += (rect->y_offset_ & 1);
-  rect->x_offset_ &= ~1;
-  rect->y_offset_ &= ~1;
-}
-
-typedef struct {
-  int should_try_;               // Should try this set of parameters.
-  int empty_rect_allowed_;       // Frame with empty rectangle can be skipped.
-  FrameRectangle rect_ll_;       // Frame rectangle for lossless compression.
-  WebPPicture sub_frame_ll_;     // Sub-frame pic for lossless compression.
-  FrameRectangle rect_lossy_;    // Frame rectangle for lossy compression.
-                                 // Could be smaller than rect_ll_ as pixels
-                                 // with small diffs can be ignored.
-  WebPPicture sub_frame_lossy_;  // Sub-frame pic for lossless compression.
-} SubFrameParams;
-
-static int SubFrameParamsInit(SubFrameParams* const params,
-                              int should_try, int empty_rect_allowed) {
-  params->should_try_ = should_try;
-  params->empty_rect_allowed_ = empty_rect_allowed;
-  if (!WebPPictureInit(&params->sub_frame_ll_) ||
-      !WebPPictureInit(&params->sub_frame_lossy_)) {
-    return 0;
-  }
-  return 1;
-}
-
-static void SubFrameParamsFree(SubFrameParams* const params) {
-  WebPPictureFree(&params->sub_frame_ll_);
-  WebPPictureFree(&params->sub_frame_lossy_);
-}
-
-// Given previous and current canvas, picks the optimal rectangle for the
-// current frame based on 'is_lossless' and other parameters. Assumes that the
-// initial guess 'rect' is valid.
-static int GetSubRect(const WebPPicture* const prev_canvas,
-                      const WebPPicture* const curr_canvas, int is_key_frame,
-                      int is_first_frame, int empty_rect_allowed,
-                      int is_lossless, float quality,
-                      FrameRectangle* const rect,
-                      WebPPicture* const sub_frame) {
-  if (!is_key_frame || is_first_frame) {  // Optimize frame rectangle.
-    // Note: This behaves as expected for first frame, as 'prev_canvas' is
-    // initialized to a fully transparent canvas in the beginning.
-    MinimizeChangeRectangle(prev_canvas, curr_canvas, rect,
-                            is_lossless, quality);
-  }
-
-  if (IsEmptyRect(rect)) {
-    if (empty_rect_allowed) {  // No need to get 'sub_frame'.
-      return 1;
-    } else {                   // Force a 1x1 rectangle.
-      rect->width_ = 1;
-      rect->height_ = 1;
-      assert(rect->x_offset_ == 0);
-      assert(rect->y_offset_ == 0);
-    }
-  }
-
-  SnapToEvenOffsets(rect);
-  return WebPPictureView(curr_canvas, rect->x_offset_, rect->y_offset_,
-                         rect->width_, rect->height_, sub_frame);
-}
-
-// Picks optimal frame rectangle for both lossless and lossy compression. The
-// initial guess for frame rectangles will be the full canvas.
-static int GetSubRects(const WebPPicture* const prev_canvas,
-                       const WebPPicture* const curr_canvas, int is_key_frame,
-                       int is_first_frame, float quality,
-                       SubFrameParams* const params) {
-  // Lossless frame rectangle.
-  params->rect_ll_.x_offset_ = 0;
-  params->rect_ll_.y_offset_ = 0;
-  params->rect_ll_.width_ = curr_canvas->width;
-  params->rect_ll_.height_ = curr_canvas->height;
-  if (!GetSubRect(prev_canvas, curr_canvas, is_key_frame, is_first_frame,
-                  params->empty_rect_allowed_, 1, quality,
-                  &params->rect_ll_, &params->sub_frame_ll_)) {
-    return 0;
-  }
-  // Lossy frame rectangle.
-  params->rect_lossy_ = params->rect_ll_;  // seed with lossless rect.
-  return GetSubRect(prev_canvas, curr_canvas, is_key_frame, is_first_frame,
-                    params->empty_rect_allowed_, 0, quality,
-                    &params->rect_lossy_, &params->sub_frame_lossy_);
-}
-
-static WEBP_INLINE int clip(int v, int min_v, int max_v) {
-  return (v < min_v) ? min_v : (v > max_v) ? max_v : v;
-}
-
-int WebPAnimEncoderRefineRect(
-    const WebPPicture* const prev_canvas, const WebPPicture* const curr_canvas,
-    int is_lossless, float quality, int* const x_offset, int* const y_offset,
-    int* const width, int* const height) {
-  FrameRectangle rect;
-  const int right = clip(*x_offset + *width, 0, curr_canvas->width);
-  const int left = clip(*x_offset, 0, curr_canvas->width - 1);
-  const int bottom = clip(*y_offset + *height, 0, curr_canvas->height);
-  const int top = clip(*y_offset, 0, curr_canvas->height - 1);
-  if (prev_canvas == NULL || curr_canvas == NULL ||
-      prev_canvas->width != curr_canvas->width ||
-      prev_canvas->height != curr_canvas->height ||
-      !prev_canvas->use_argb || !curr_canvas->use_argb) {
-    return 0;
-  }
-  rect.x_offset_ = left;
-  rect.y_offset_ = top;
-  rect.width_ = clip(right - left, 0, curr_canvas->width - rect.x_offset_);
-  rect.height_ = clip(bottom - top, 0, curr_canvas->height - rect.y_offset_);
-  MinimizeChangeRectangle(prev_canvas, curr_canvas, &rect, is_lossless,
-                          quality);
-  SnapToEvenOffsets(&rect);
-  *x_offset = rect.x_offset_;
-  *y_offset = rect.y_offset_;
-  *width = rect.width_;
-  *height = rect.height_;
-  return 1;
-}
-
-static void DisposeFrameRectangle(int dispose_method,
-                                  const FrameRectangle* const rect,
-                                  WebPPicture* const curr_canvas) {
-  assert(rect != NULL);
-  if (dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) {
-    WebPUtilClearPic(curr_canvas, rect);
-  }
-}
-
-static uint32_t RectArea(const FrameRectangle* const rect) {
-  return (uint32_t)rect->width_ * rect->height_;
-}
-
-static int IsLosslessBlendingPossible(const WebPPicture* const src,
-                                      const WebPPicture* const dst,
-                                      const FrameRectangle* const rect) {
-  int i, j;
-  assert(src->width == dst->width && src->height == dst->height);
-  assert(rect->x_offset_ + rect->width_ <= dst->width);
-  assert(rect->y_offset_ + rect->height_ <= dst->height);
-  for (j = rect->y_offset_; j < rect->y_offset_ + rect->height_; ++j) {
-    for (i = rect->x_offset_; i < rect->x_offset_ + rect->width_; ++i) {
-      const uint32_t src_pixel = src->argb[j * src->argb_stride + i];
-      const uint32_t dst_pixel = dst->argb[j * dst->argb_stride + i];
-      const uint32_t dst_alpha = dst_pixel >> 24;
-      if (dst_alpha != 0xff && src_pixel != dst_pixel) {
-        // In this case, if we use blending, we can't attain the desired
-        // 'dst_pixel' value for this pixel. So, blending is not possible.
-        return 0;
-      }
-    }
-  }
-  return 1;
-}
-
-static int IsLossyBlendingPossible(const WebPPicture* const src,
-                                   const WebPPicture* const dst,
-                                   const FrameRectangle* const rect,
-                                   float quality) {
-  const int max_allowed_diff_lossy = QualityToMaxDiff(quality);
-  int i, j;
-  assert(src->width == dst->width && src->height == dst->height);
-  assert(rect->x_offset_ + rect->width_ <= dst->width);
-  assert(rect->y_offset_ + rect->height_ <= dst->height);
-  for (j = rect->y_offset_; j < rect->y_offset_ + rect->height_; ++j) {
-    for (i = rect->x_offset_; i < rect->x_offset_ + rect->width_; ++i) {
-      const uint32_t src_pixel = src->argb[j * src->argb_stride + i];
-      const uint32_t dst_pixel = dst->argb[j * dst->argb_stride + i];
-      const uint32_t dst_alpha = dst_pixel >> 24;
-      if (dst_alpha != 0xff &&
-          !PixelsAreSimilar(src_pixel, dst_pixel, max_allowed_diff_lossy)) {
-        // In this case, if we use blending, we can't attain the desired
-        // 'dst_pixel' value for this pixel. So, blending is not possible.
-        return 0;
-      }
-    }
-  }
-  return 1;
-}
-
-// For pixels in 'rect', replace those pixels in 'dst' that are same as 'src' by
-// transparent pixels.
-// Returns true if at least one pixel gets modified.
-static int IncreaseTransparency(const WebPPicture* const src,
-                                const FrameRectangle* const rect,
-                                WebPPicture* const dst) {
-  int i, j;
-  int modified = 0;
-  assert(src != NULL && dst != NULL && rect != NULL);
-  assert(src->width == dst->width && src->height == dst->height);
-  for (j = rect->y_offset_; j < rect->y_offset_ + rect->height_; ++j) {
-    const uint32_t* const psrc = src->argb + j * src->argb_stride;
-    uint32_t* const pdst = dst->argb + j * dst->argb_stride;
-    for (i = rect->x_offset_; i < rect->x_offset_ + rect->width_; ++i) {
-      if (psrc[i] == pdst[i] && pdst[i] != TRANSPARENT_COLOR) {
-        pdst[i] = TRANSPARENT_COLOR;
-        modified = 1;
-      }
-    }
-  }
-  return modified;
-}
-
-#undef TRANSPARENT_COLOR
-
-// Replace similar blocks of pixels by a 'see-through' transparent block
-// with uniform average color.
-// Assumes lossy compression is being used.
-// Returns true if at least one pixel gets modified.
-static int FlattenSimilarBlocks(const WebPPicture* const src,
-                                const FrameRectangle* const rect,
-                                WebPPicture* const dst, float quality) {
-  const int max_allowed_diff_lossy = QualityToMaxDiff(quality);
-  int i, j;
-  int modified = 0;
-  const int block_size = 8;
-  const int y_start = (rect->y_offset_ + block_size) & ~(block_size - 1);
-  const int y_end = (rect->y_offset_ + rect->height_) & ~(block_size - 1);
-  const int x_start = (rect->x_offset_ + block_size) & ~(block_size - 1);
-  const int x_end = (rect->x_offset_ + rect->width_) & ~(block_size - 1);
-  assert(src != NULL && dst != NULL && rect != NULL);
-  assert(src->width == dst->width && src->height == dst->height);
-  assert((block_size & (block_size - 1)) == 0);  // must be a power of 2
-  // Iterate over each block and count similar pixels.
-  for (j = y_start; j < y_end; j += block_size) {
-    for (i = x_start; i < x_end; i += block_size) {
-      int cnt = 0;
-      int avg_r = 0, avg_g = 0, avg_b = 0;
-      int x, y;
-      const uint32_t* const psrc = src->argb + j * src->argb_stride + i;
-      uint32_t* const pdst = dst->argb + j * dst->argb_stride + i;
-      for (y = 0; y < block_size; ++y) {
-        for (x = 0; x < block_size; ++x) {
-          const uint32_t src_pixel = psrc[x + y * src->argb_stride];
-          const int alpha = src_pixel >> 24;
-          if (alpha == 0xff &&
-              PixelsAreSimilar(src_pixel, pdst[x + y * dst->argb_stride],
-                               max_allowed_diff_lossy)) {
-            ++cnt;
-            avg_r += (src_pixel >> 16) & 0xff;
-            avg_g += (src_pixel >> 8) & 0xff;
-            avg_b += (src_pixel >> 0) & 0xff;
-          }
-        }
-      }
-      // If we have a fully similar block, we replace it with an
-      // average transparent block. This compresses better in lossy mode.
-      if (cnt == block_size * block_size) {
-        const uint32_t color = (0x00          << 24) |
-                               ((avg_r / cnt) << 16) |
-                               ((avg_g / cnt) <<  8) |
-                               ((avg_b / cnt) <<  0);
-        for (y = 0; y < block_size; ++y) {
-          for (x = 0; x < block_size; ++x) {
-            pdst[x + y * dst->argb_stride] = color;
-          }
-        }
-        modified = 1;
-      }
-    }
-  }
-  return modified;
-}
-
-static int EncodeFrame(const WebPConfig* const config, WebPPicture* const pic,
-                       WebPMemoryWriter* const memory) {
-  pic->use_argb = 1;
-  pic->writer = WebPMemoryWrite;
-  pic->custom_ptr = memory;
-  if (!WebPEncode(config, pic)) {
-    return 0;
-  }
-  return 1;
-}
-
-// Struct representing a candidate encoded frame including its metadata.
-typedef struct {
-  WebPMemoryWriter  mem_;
-  WebPMuxFrameInfo  info_;
-  FrameRectangle    rect_;
-  int               evaluate_;  // True if this candidate should be evaluated.
-} Candidate;
-
-// Generates a candidate encoded frame given a picture and metadata.
-static WebPEncodingError EncodeCandidate(WebPPicture* const sub_frame,
-                                         const FrameRectangle* const rect,
-                                         const WebPConfig* const encoder_config,
-                                         int use_blending,
-                                         Candidate* const candidate) {
-  WebPConfig config = *encoder_config;
-  WebPEncodingError error_code = VP8_ENC_OK;
-  assert(candidate != NULL);
-  memset(candidate, 0, sizeof(*candidate));
-
-  // Set frame rect and info.
-  candidate->rect_ = *rect;
-  candidate->info_.id = WEBP_CHUNK_ANMF;
-  candidate->info_.x_offset = rect->x_offset_;
-  candidate->info_.y_offset = rect->y_offset_;
-  candidate->info_.dispose_method = WEBP_MUX_DISPOSE_NONE;  // Set later.
-  candidate->info_.blend_method =
-      use_blending ? WEBP_MUX_BLEND : WEBP_MUX_NO_BLEND;
-  candidate->info_.duration = 0;  // Set in next call to WebPAnimEncoderAdd().
-
-  // Encode picture.
-  WebPMemoryWriterInit(&candidate->mem_);
-
-  if (!config.lossless && use_blending) {
-    // Disable filtering to avoid blockiness in reconstructed frames at the
-    // time of decoding.
-    config.autofilter = 0;
-    config.filter_strength = 0;
-  }
-  if (!EncodeFrame(&config, sub_frame, &candidate->mem_)) {
-    error_code = sub_frame->error_code;
-    goto Err;
-  }
-
-  candidate->evaluate_ = 1;
-  return error_code;
-
- Err:
-  WebPMemoryWriterClear(&candidate->mem_);
-  return error_code;
-}
-
-static void CopyCurrentCanvas(WebPAnimEncoder* const enc) {
-  if (enc->curr_canvas_copy_modified_) {
-    WebPCopyPixels(enc->curr_canvas_, &enc->curr_canvas_copy_);
-    enc->curr_canvas_copy_.progress_hook = enc->curr_canvas_->progress_hook;
-    enc->curr_canvas_copy_.user_data = enc->curr_canvas_->user_data;
-    enc->curr_canvas_copy_modified_ = 0;
-  }
-}
-
-enum {
-  LL_DISP_NONE = 0,
-  LL_DISP_BG,
-  LOSSY_DISP_NONE,
-  LOSSY_DISP_BG,
-  CANDIDATE_COUNT
-};
-
-#define MIN_COLORS_LOSSY     31  // Don't try lossy below this threshold.
-#define MAX_COLORS_LOSSLESS 194  // Don't try lossless above this threshold.
-
-// Generates candidates for a given dispose method given pre-filled sub-frame
-// 'params'.
-static WebPEncodingError GenerateCandidates(
-    WebPAnimEncoder* const enc, Candidate candidates[CANDIDATE_COUNT],
-    WebPMuxAnimDispose dispose_method, int is_lossless, int is_key_frame,
-    SubFrameParams* const params,
-    const WebPConfig* const config_ll, const WebPConfig* const config_lossy) {
-  WebPEncodingError error_code = VP8_ENC_OK;
-  const int is_dispose_none = (dispose_method == WEBP_MUX_DISPOSE_NONE);
-  Candidate* const candidate_ll =
-      is_dispose_none ? &candidates[LL_DISP_NONE] : &candidates[LL_DISP_BG];
-  Candidate* const candidate_lossy = is_dispose_none
-                                     ? &candidates[LOSSY_DISP_NONE]
-                                     : &candidates[LOSSY_DISP_BG];
-  WebPPicture* const curr_canvas = &enc->curr_canvas_copy_;
-  const WebPPicture* const prev_canvas =
-      is_dispose_none ? &enc->prev_canvas_ : &enc->prev_canvas_disposed_;
-  int use_blending_ll, use_blending_lossy;
-  int evaluate_ll, evaluate_lossy;
-
-  CopyCurrentCanvas(enc);
-  use_blending_ll =
-      !is_key_frame &&
-      IsLosslessBlendingPossible(prev_canvas, curr_canvas, &params->rect_ll_);
-  use_blending_lossy =
-      !is_key_frame &&
-      IsLossyBlendingPossible(prev_canvas, curr_canvas, &params->rect_lossy_,
-                              config_lossy->quality);
-
-  // Pick candidates to be tried.
-  if (!enc->options_.allow_mixed) {
-    evaluate_ll = is_lossless;
-    evaluate_lossy = !is_lossless;
-  } else if (enc->options_.minimize_size) {
-    evaluate_ll = 1;
-    evaluate_lossy = 1;
-  } else {  // Use a heuristic for trying lossless and/or lossy compression.
-    const int num_colors = WebPGetColorPalette(&params->sub_frame_ll_, NULL);
-    evaluate_ll = (num_colors < MAX_COLORS_LOSSLESS);
-    evaluate_lossy = (num_colors >= MIN_COLORS_LOSSY);
-  }
-
-  // Generate candidates.
-  if (evaluate_ll) {
-    CopyCurrentCanvas(enc);
-    if (use_blending_ll) {
-      enc->curr_canvas_copy_modified_ =
-          IncreaseTransparency(prev_canvas, &params->rect_ll_, curr_canvas);
-    }
-    error_code = EncodeCandidate(&params->sub_frame_ll_, &params->rect_ll_,
-                                 config_ll, use_blending_ll, candidate_ll);
-    if (error_code != VP8_ENC_OK) return error_code;
-  }
-  if (evaluate_lossy) {
-    CopyCurrentCanvas(enc);
-    if (use_blending_lossy) {
-      enc->curr_canvas_copy_modified_ =
-          FlattenSimilarBlocks(prev_canvas, &params->rect_lossy_, curr_canvas,
-                               config_lossy->quality);
-    }
-    error_code =
-        EncodeCandidate(&params->sub_frame_lossy_, &params->rect_lossy_,
-                        config_lossy, use_blending_lossy, candidate_lossy);
-    if (error_code != VP8_ENC_OK) return error_code;
-    enc->curr_canvas_copy_modified_ = 1;
-  }
-  return error_code;
-}
-
-#undef MIN_COLORS_LOSSY
-#undef MAX_COLORS_LOSSLESS
-
-static void GetEncodedData(const WebPMemoryWriter* const memory,
-                           WebPData* const encoded_data) {
-  encoded_data->bytes = memory->mem;
-  encoded_data->size  = memory->size;
-}
-
-// Sets dispose method of the previous frame to be 'dispose_method'.
-static void SetPreviousDisposeMethod(WebPAnimEncoder* const enc,
-                                     WebPMuxAnimDispose dispose_method) {
-  const size_t position = enc->count_ - 2;
-  EncodedFrame* const prev_enc_frame = GetFrame(enc, position);
-  assert(enc->count_ >= 2);  // As current and previous frames are in enc.
-
-  if (enc->prev_candidate_undecided_) {
-    assert(dispose_method == WEBP_MUX_DISPOSE_NONE);
-    prev_enc_frame->sub_frame_.dispose_method = dispose_method;
-    prev_enc_frame->key_frame_.dispose_method = dispose_method;
-  } else {
-    WebPMuxFrameInfo* const prev_info = prev_enc_frame->is_key_frame_
-                                        ? &prev_enc_frame->key_frame_
-                                        : &prev_enc_frame->sub_frame_;
-    prev_info->dispose_method = dispose_method;
-  }
-}
-
-static int IncreasePreviousDuration(WebPAnimEncoder* const enc, int duration) {
-  const size_t position = enc->count_ - 1;
-  EncodedFrame* const prev_enc_frame = GetFrame(enc, position);
-  int new_duration;
-
-  assert(enc->count_ >= 1);
-  assert(prev_enc_frame->sub_frame_.duration ==
-         prev_enc_frame->key_frame_.duration);
-  assert(prev_enc_frame->sub_frame_.duration ==
-         (prev_enc_frame->sub_frame_.duration & (MAX_DURATION - 1)));
-  assert(duration == (duration & (MAX_DURATION - 1)));
-
-  new_duration = prev_enc_frame->sub_frame_.duration + duration;
-  if (new_duration >= MAX_DURATION) {  // Special case.
-    // Separate out previous frame from earlier merged frames to avoid overflow.
-    // We add a 1x1 transparent frame for the previous frame, with blending on.
-    const FrameRectangle rect = { 0, 0, 1, 1 };
-    const uint8_t lossless_1x1_bytes[] = {
-      0x52, 0x49, 0x46, 0x46, 0x14, 0x00, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50,
-      0x56, 0x50, 0x38, 0x4c, 0x08, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
-      0x10, 0x88, 0x88, 0x08
-    };
-    const WebPData lossless_1x1 = {
-        lossless_1x1_bytes, sizeof(lossless_1x1_bytes)
-    };
-    const uint8_t lossy_1x1_bytes[] = {
-      0x52, 0x49, 0x46, 0x46, 0x40, 0x00, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50,
-      0x56, 0x50, 0x38, 0x58, 0x0a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x4c, 0x50, 0x48, 0x02, 0x00,
-      0x00, 0x00, 0x00, 0x00, 0x56, 0x50, 0x38, 0x20, 0x18, 0x00, 0x00, 0x00,
-      0x30, 0x01, 0x00, 0x9d, 0x01, 0x2a, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00,
-      0x34, 0x25, 0xa4, 0x00, 0x03, 0x70, 0x00, 0xfe, 0xfb, 0xfd, 0x50, 0x00
-    };
-    const WebPData lossy_1x1 = { lossy_1x1_bytes, sizeof(lossy_1x1_bytes) };
-    const int can_use_lossless =
-        (enc->last_config_.lossless || enc->options_.allow_mixed);
-    EncodedFrame* const curr_enc_frame = GetFrame(enc, enc->count_);
-    curr_enc_frame->is_key_frame_ = 0;
-    curr_enc_frame->sub_frame_.id = WEBP_CHUNK_ANMF;
-    curr_enc_frame->sub_frame_.x_offset = 0;
-    curr_enc_frame->sub_frame_.y_offset = 0;
-    curr_enc_frame->sub_frame_.dispose_method = WEBP_MUX_DISPOSE_NONE;
-    curr_enc_frame->sub_frame_.blend_method = WEBP_MUX_BLEND;
-    curr_enc_frame->sub_frame_.duration = duration;
-    if (!WebPDataCopy(can_use_lossless ? &lossless_1x1 : &lossy_1x1,
-                      &curr_enc_frame->sub_frame_.bitstream)) {
-      return 0;
-    }
-    ++enc->count_;
-    ++enc->count_since_key_frame_;
-    enc->flush_count_ = enc->count_ - 1;
-    enc->prev_candidate_undecided_ = 0;
-    enc->prev_rect_ = rect;
-  } else {                           // Regular case.
-    // Increase duration of the previous frame by 'duration'.
-    prev_enc_frame->sub_frame_.duration = new_duration;
-    prev_enc_frame->key_frame_.duration = new_duration;
-  }
-  return 1;
-}
-
-// Pick the candidate encoded frame with smallest size and release other
-// candidates.
-// TODO(later): Perhaps a rough SSIM/PSNR produced by the encoder should
-// also be a criteria, in addition to sizes.
-static void PickBestCandidate(WebPAnimEncoder* const enc,
-                              Candidate* const candidates, int is_key_frame,
-                              EncodedFrame* const encoded_frame) {
-  int i;
-  int best_idx = -1;
-  size_t best_size = ~0;
-  for (i = 0; i < CANDIDATE_COUNT; ++i) {
-    if (candidates[i].evaluate_) {
-      const size_t candidate_size = candidates[i].mem_.size;
-      if (candidate_size < best_size) {
-        best_idx = i;
-        best_size = candidate_size;
-      }
-    }
-  }
-  assert(best_idx != -1);
-  for (i = 0; i < CANDIDATE_COUNT; ++i) {
-    if (candidates[i].evaluate_) {
-      if (i == best_idx) {
-        WebPMuxFrameInfo* const dst = is_key_frame
-                                      ? &encoded_frame->key_frame_
-                                      : &encoded_frame->sub_frame_;
-        *dst = candidates[i].info_;
-        GetEncodedData(&candidates[i].mem_, &dst->bitstream);
-        if (!is_key_frame) {
-          // Note: Previous dispose method only matters for non-keyframes.
-          // Also, we don't want to modify previous dispose method that was
-          // selected when a non key-frame was assumed.
-          const WebPMuxAnimDispose prev_dispose_method =
-              (best_idx == LL_DISP_NONE || best_idx == LOSSY_DISP_NONE)
-                  ? WEBP_MUX_DISPOSE_NONE
-                  : WEBP_MUX_DISPOSE_BACKGROUND;
-          SetPreviousDisposeMethod(enc, prev_dispose_method);
-        }
-        enc->prev_rect_ = candidates[i].rect_;  // save for next frame.
-      } else {
-        WebPMemoryWriterClear(&candidates[i].mem_);
-        candidates[i].evaluate_ = 0;
-      }
-    }
-  }
-}
-
-// Depending on the configuration, tries different compressions
-// (lossy/lossless), dispose methods, blending methods etc to encode the current
-// frame and outputs the best one in 'encoded_frame'.
-// 'frame_skipped' will be set to true if this frame should actually be skipped.
-static WebPEncodingError SetFrame(WebPAnimEncoder* const enc,
-                                  const WebPConfig* const config,
-                                  int is_key_frame,
-                                  EncodedFrame* const encoded_frame,
-                                  int* const frame_skipped) {
-  int i;
-  WebPEncodingError error_code = VP8_ENC_OK;
-  const WebPPicture* const curr_canvas = &enc->curr_canvas_copy_;
-  const WebPPicture* const prev_canvas = &enc->prev_canvas_;
-  Candidate candidates[CANDIDATE_COUNT];
-  const int is_lossless = config->lossless;
-  const int consider_lossless = is_lossless || enc->options_.allow_mixed;
-  const int consider_lossy = !is_lossless || enc->options_.allow_mixed;
-  const int is_first_frame = enc->is_first_frame_;
-
-  // First frame cannot be skipped as there is no 'previous frame' to merge it
-  // to. So, empty rectangle is not allowed for the first frame.
-  const int empty_rect_allowed_none = !is_first_frame;
-
-  // Even if there is exact pixel match between 'disposed previous canvas' and
-  // 'current canvas', we can't skip current frame, as there may not be exact
-  // pixel match between 'previous canvas' and 'current canvas'. So, we don't
-  // allow empty rectangle in this case.
-  const int empty_rect_allowed_bg = 0;
-
-  // If current frame is a key-frame, dispose method of previous frame doesn't
-  // matter, so we don't try dispose to background.
-  // Also, if key-frame insertion is on, and previous frame could be picked as
-  // either a sub-frame or a key-frame, then we can't be sure about what frame
-  // rectangle would be disposed. In that case too, we don't try dispose to
-  // background.
-  const int dispose_bg_possible =
-      !is_key_frame && !enc->prev_candidate_undecided_;
-
-  SubFrameParams dispose_none_params;
-  SubFrameParams dispose_bg_params;
-
-  WebPConfig config_ll = *config;
-  WebPConfig config_lossy = *config;
-  config_ll.lossless = 1;
-  config_lossy.lossless = 0;
-  enc->last_config_ = *config;
-  enc->last_config_reversed_ = config->lossless ? config_lossy : config_ll;
-  *frame_skipped = 0;
-
-  if (!SubFrameParamsInit(&dispose_none_params, 1, empty_rect_allowed_none) ||
-      !SubFrameParamsInit(&dispose_bg_params, 0, empty_rect_allowed_bg)) {
-    return VP8_ENC_ERROR_INVALID_CONFIGURATION;
-  }
-
-  memset(candidates, 0, sizeof(candidates));
-
-  // Change-rectangle assuming previous frame was DISPOSE_NONE.
-  if (!GetSubRects(prev_canvas, curr_canvas, is_key_frame, is_first_frame,
-                   config_lossy.quality, &dispose_none_params)) {
-    error_code = VP8_ENC_ERROR_INVALID_CONFIGURATION;
-    goto Err;
-  }
-
-  if ((consider_lossless && IsEmptyRect(&dispose_none_params.rect_ll_)) ||
-      (consider_lossy && IsEmptyRect(&dispose_none_params.rect_lossy_))) {
-    // Don't encode the frame at all. Instead, the duration of the previous
-    // frame will be increased later.
-    assert(empty_rect_allowed_none);
-    *frame_skipped = 1;
-    goto End;
-  }
-
-  if (dispose_bg_possible) {
-    // Change-rectangle assuming previous frame was DISPOSE_BACKGROUND.
-    WebPPicture* const prev_canvas_disposed = &enc->prev_canvas_disposed_;
-    WebPCopyPixels(prev_canvas, prev_canvas_disposed);
-    DisposeFrameRectangle(WEBP_MUX_DISPOSE_BACKGROUND, &enc->prev_rect_,
-                          prev_canvas_disposed);
-
-    if (!GetSubRects(prev_canvas_disposed, curr_canvas, is_key_frame,
-                     is_first_frame, config_lossy.quality,
-                     &dispose_bg_params)) {
-      error_code = VP8_ENC_ERROR_INVALID_CONFIGURATION;
-      goto Err;
-    }
-    assert(!IsEmptyRect(&dispose_bg_params.rect_ll_));
-    assert(!IsEmptyRect(&dispose_bg_params.rect_lossy_));
-
-    if (enc->options_.minimize_size) {  // Try both dispose methods.
-      dispose_bg_params.should_try_ = 1;
-      dispose_none_params.should_try_ = 1;
-    } else if ((is_lossless &&
-                RectArea(&dispose_bg_params.rect_ll_) <
-                    RectArea(&dispose_none_params.rect_ll_)) ||
-               (!is_lossless &&
-                RectArea(&dispose_bg_params.rect_lossy_) <
-                    RectArea(&dispose_none_params.rect_lossy_))) {
-      dispose_bg_params.should_try_ = 1;  // Pick DISPOSE_BACKGROUND.
-      dispose_none_params.should_try_ = 0;
-    }
-  }
-
-  if (dispose_none_params.should_try_) {
-    error_code = GenerateCandidates(
-        enc, candidates, WEBP_MUX_DISPOSE_NONE, is_lossless, is_key_frame,
-        &dispose_none_params, &config_ll, &config_lossy);
-    if (error_code != VP8_ENC_OK) goto Err;
-  }
-
-  if (dispose_bg_params.should_try_) {
-    assert(!enc->is_first_frame_);
-    assert(dispose_bg_possible);
-    error_code = GenerateCandidates(
-        enc, candidates, WEBP_MUX_DISPOSE_BACKGROUND, is_lossless, is_key_frame,
-        &dispose_bg_params, &config_ll, &config_lossy);
-    if (error_code != VP8_ENC_OK) goto Err;
-  }
-
-  PickBestCandidate(enc, candidates, is_key_frame, encoded_frame);
-
-  goto End;
-
- Err:
-  for (i = 0; i < CANDIDATE_COUNT; ++i) {
-    if (candidates[i].evaluate_) {
-      WebPMemoryWriterClear(&candidates[i].mem_);
-    }
-  }
-
- End:
-  SubFrameParamsFree(&dispose_none_params);
-  SubFrameParamsFree(&dispose_bg_params);
-  return error_code;
-}
-
-// Calculate the penalty incurred if we encode given frame as a key frame
-// instead of a sub-frame.
-static int64_t KeyFramePenalty(const EncodedFrame* const encoded_frame) {
-  return ((int64_t)encoded_frame->key_frame_.bitstream.size -
-          encoded_frame->sub_frame_.bitstream.size);
-}
-
-static int CacheFrame(WebPAnimEncoder* const enc,
-                      const WebPConfig* const config) {
-  int ok = 0;
-  int frame_skipped = 0;
-  WebPEncodingError error_code = VP8_ENC_OK;
-  const size_t position = enc->count_;
-  EncodedFrame* const encoded_frame = GetFrame(enc, position);
-
-  ++enc->count_;
-
-  if (enc->is_first_frame_) {  // Add this as a key-frame.
-    error_code = SetFrame(enc, config, 1, encoded_frame, &frame_skipped);
-    if (error_code != VP8_ENC_OK) goto End;
-    assert(frame_skipped == 0);  // First frame can't be skipped, even if empty.
-    assert(position == 0 && enc->count_ == 1);
-    encoded_frame->is_key_frame_ = 1;
-    enc->flush_count_ = 0;
-    enc->count_since_key_frame_ = 0;
-    enc->prev_candidate_undecided_ = 0;
-  } else {
-    ++enc->count_since_key_frame_;
-    if (enc->count_since_key_frame_ <= enc->options_.kmin) {
-      // Add this as a frame rectangle.
-      error_code = SetFrame(enc, config, 0, encoded_frame, &frame_skipped);
-      if (error_code != VP8_ENC_OK) goto End;
-      if (frame_skipped) goto Skip;
-      encoded_frame->is_key_frame_ = 0;
-      enc->flush_count_ = enc->count_ - 1;
-      enc->prev_candidate_undecided_ = 0;
-    } else {
-      int64_t curr_delta;
-      FrameRectangle prev_rect_key, prev_rect_sub;
-
-      // Add this as a frame rectangle to enc.
-      error_code = SetFrame(enc, config, 0, encoded_frame, &frame_skipped);
-      if (error_code != VP8_ENC_OK) goto End;
-      if (frame_skipped) goto Skip;
-      prev_rect_sub = enc->prev_rect_;
-
-
-      // Add this as a key-frame to enc, too.
-      error_code = SetFrame(enc, config, 1, encoded_frame, &frame_skipped);
-      if (error_code != VP8_ENC_OK) goto End;
-      assert(frame_skipped == 0);  // Key-frame cannot be an empty rectangle.
-      prev_rect_key = enc->prev_rect_;
-
-      // Analyze size difference of the two variants.
-      curr_delta = KeyFramePenalty(encoded_frame);
-      if (curr_delta <= enc->best_delta_) {  // Pick this as the key-frame.
-        if (enc->keyframe_ != KEYFRAME_NONE) {
-          EncodedFrame* const old_keyframe = GetFrame(enc, enc->keyframe_);
-          assert(old_keyframe->is_key_frame_);
-          old_keyframe->is_key_frame_ = 0;
-        }
-        encoded_frame->is_key_frame_ = 1;
-        enc->prev_candidate_undecided_ = 1;
-        enc->keyframe_ = (int)position;
-        enc->best_delta_ = curr_delta;
-        enc->flush_count_ = enc->count_ - 1;  // We can flush previous frames.
-      } else {
-        encoded_frame->is_key_frame_ = 0;
-        enc->prev_candidate_undecided_ = 0;
-      }
-      // Note: We need '>=' below because when kmin and kmax are both zero,
-      // count_since_key_frame will always be > kmax.
-      if (enc->count_since_key_frame_ >= enc->options_.kmax) {
-        enc->flush_count_ = enc->count_ - 1;
-        enc->count_since_key_frame_ = 0;
-        enc->keyframe_ = KEYFRAME_NONE;
-        enc->best_delta_ = DELTA_INFINITY;
-      }
-      if (!enc->prev_candidate_undecided_) {
-        enc->prev_rect_ =
-            encoded_frame->is_key_frame_ ? prev_rect_key : prev_rect_sub;
-      }
-    }
-  }
-
-  // Update previous to previous and previous canvases for next call.
-  WebPCopyPixels(enc->curr_canvas_, &enc->prev_canvas_);
-  enc->is_first_frame_ = 0;
-
- Skip:
-  ok = 1;
-  ++enc->in_frame_count_;
-
- End:
-  if (!ok || frame_skipped) {
-    FrameRelease(encoded_frame);
-    // We reset some counters, as the frame addition failed/was skipped.
-    --enc->count_;
-    if (!enc->is_first_frame_) --enc->count_since_key_frame_;
-    if (!ok) {
-      MarkError2(enc, "ERROR adding frame. WebPEncodingError", error_code);
-    }
-  }
-  enc->curr_canvas_->error_code = error_code;   // report error_code
-  assert(ok || error_code != VP8_ENC_OK);
-  return ok;
-}
-
-static int FlushFrames(WebPAnimEncoder* const enc) {
-  while (enc->flush_count_ > 0) {
-    WebPMuxError err;
-    EncodedFrame* const curr = GetFrame(enc, 0);
-    const WebPMuxFrameInfo* const info =
-        curr->is_key_frame_ ? &curr->key_frame_ : &curr->sub_frame_;
-    assert(enc->mux_ != NULL);
-    err = WebPMuxPushFrame(enc->mux_, info, 1);
-    if (err != WEBP_MUX_OK) {
-      MarkError2(enc, "ERROR adding frame. WebPMuxError", err);
-      return 0;
-    }
-    if (enc->options_.verbose) {
-      fprintf(stderr, "INFO: Added frame. offset:%d,%d dispose:%d blend:%d\n",
-              info->x_offset, info->y_offset, info->dispose_method,
-              info->blend_method);
-    }
-    ++enc->out_frame_count_;
-    FrameRelease(curr);
-    ++enc->start_;
-    --enc->flush_count_;
-    --enc->count_;
-    if (enc->keyframe_ != KEYFRAME_NONE) --enc->keyframe_;
-  }
-
-  if (enc->count_ == 1 && enc->start_ != 0) {
-    // Move enc->start to index 0.
-    const int enc_start_tmp = (int)enc->start_;
-    EncodedFrame temp = enc->encoded_frames_[0];
-    enc->encoded_frames_[0] = enc->encoded_frames_[enc_start_tmp];
-    enc->encoded_frames_[enc_start_tmp] = temp;
-    FrameRelease(&enc->encoded_frames_[enc_start_tmp]);
-    enc->start_ = 0;
-  }
-  return 1;
-}
-
-#undef DELTA_INFINITY
-#undef KEYFRAME_NONE
-
-int WebPAnimEncoderAdd(WebPAnimEncoder* enc, WebPPicture* frame, int timestamp,
-                       const WebPConfig* encoder_config) {
-  WebPConfig config;
-  int ok;
-
-  if (enc == NULL) {
-    return 0;
-  }
-  MarkNoError(enc);
-
-  if (!enc->is_first_frame_) {
-    // Make sure timestamps are non-decreasing (integer wrap-around is OK).
-    const uint32_t prev_frame_duration =
-        (uint32_t)timestamp - enc->prev_timestamp_;
-    if (prev_frame_duration >= MAX_DURATION) {
-      if (frame != NULL) {
-        frame->error_code = VP8_ENC_ERROR_INVALID_CONFIGURATION;
-      }
-      MarkError(enc, "ERROR adding frame: timestamps must be non-decreasing");
-      return 0;
-    }
-    if (!IncreasePreviousDuration(enc, (int)prev_frame_duration)) {
-      return 0;
-    }
-  } else {
-    enc->first_timestamp_ = timestamp;
-  }
-
-  if (frame == NULL) {  // Special: last call.
-    enc->got_null_frame_ = 1;
-    enc->prev_timestamp_ = timestamp;
-    return 1;
-  }
-
-  if (frame->width != enc->canvas_width_ ||
-      frame->height != enc->canvas_height_) {
-    frame->error_code = VP8_ENC_ERROR_INVALID_CONFIGURATION;
-    MarkError(enc, "ERROR adding frame: Invalid frame dimensions");
-    return 0;
-  }
-
-  if (!frame->use_argb) {  // Convert frame from YUV(A) to ARGB.
-    if (enc->options_.verbose) {
-      fprintf(stderr, "WARNING: Converting frame from YUV(A) to ARGB format; "
-              "this incurs a small loss.\n");
-    }
-    if (!WebPPictureYUVAToARGB(frame)) {
-      MarkError(enc, "ERROR converting frame from YUV(A) to ARGB");
-      return 0;
-    }
-  }
-
-  if (encoder_config != NULL) {
-    if (!WebPValidateConfig(encoder_config)) {
-      MarkError(enc, "ERROR adding frame: Invalid WebPConfig");
-      return 0;
-    }
-    config = *encoder_config;
-  } else {
-    WebPConfigInit(&config);
-    config.lossless = 1;
-  }
-  assert(enc->curr_canvas_ == NULL);
-  enc->curr_canvas_ = frame;  // Store reference.
-  assert(enc->curr_canvas_copy_modified_ == 1);
-  CopyCurrentCanvas(enc);
-
-  ok = CacheFrame(enc, &config) && FlushFrames(enc);
-
-  enc->curr_canvas_ = NULL;
-  enc->curr_canvas_copy_modified_ = 1;
-  if (ok) {
-    enc->prev_timestamp_ = timestamp;
-  }
-  return ok;
-}
-
-// -----------------------------------------------------------------------------
-// Bitstream assembly.
-
-static int DecodeFrameOntoCanvas(const WebPMuxFrameInfo* const frame,
-                                 WebPPicture* const canvas) {
-  const WebPData* const image = &frame->bitstream;
-  WebPPicture sub_image;
-  WebPDecoderConfig config;
-  WebPInitDecoderConfig(&config);
-  WebPUtilClearPic(canvas, NULL);
-  if (WebPGetFeatures(image->bytes, image->size, &config.input) !=
-      VP8_STATUS_OK) {
-    return 0;
-  }
-  if (!WebPPictureView(canvas, frame->x_offset, frame->y_offset,
-                       config.input.width, config.input.height, &sub_image)) {
-    return 0;
-  }
-  config.output.is_external_memory = 1;
-  config.output.colorspace = MODE_BGRA;
-  config.output.u.RGBA.rgba = (uint8_t*)sub_image.argb;
-  config.output.u.RGBA.stride = sub_image.argb_stride * 4;
-  config.output.u.RGBA.size = config.output.u.RGBA.stride * sub_image.height;
-
-  if (WebPDecode(image->bytes, image->size, &config) != VP8_STATUS_OK) {
-    return 0;
-  }
-  return 1;
-}
-
-static int FrameToFullCanvas(WebPAnimEncoder* const enc,
-                             const WebPMuxFrameInfo* const frame,
-                             WebPData* const full_image) {
-  WebPPicture* const canvas_buf = &enc->curr_canvas_copy_;
-  WebPMemoryWriter mem1, mem2;
-  WebPMemoryWriterInit(&mem1);
-  WebPMemoryWriterInit(&mem2);
-
-  if (!DecodeFrameOntoCanvas(frame, canvas_buf)) goto Err;
-  if (!EncodeFrame(&enc->last_config_, canvas_buf, &mem1)) goto Err;
-  GetEncodedData(&mem1, full_image);
-
-  if (enc->options_.allow_mixed) {
-    if (!EncodeFrame(&enc->last_config_reversed_, canvas_buf, &mem2)) goto Err;
-    if (mem2.size < mem1.size) {
-      GetEncodedData(&mem2, full_image);
-      WebPMemoryWriterClear(&mem1);
-    } else {
-      WebPMemoryWriterClear(&mem2);
-    }
-  }
-  return 1;
-
- Err:
-  WebPMemoryWriterClear(&mem1);
-  WebPMemoryWriterClear(&mem2);
-  return 0;
-}
-
-// Convert a single-frame animation to a non-animated image if appropriate.
-// TODO(urvang): Can we pick one of the two heuristically (based on frame
-// rectangle and/or presence of alpha)?
-static WebPMuxError OptimizeSingleFrame(WebPAnimEncoder* const enc,
-                                        WebPData* const webp_data) {
-  WebPMuxError err = WEBP_MUX_OK;
-  int canvas_width, canvas_height;
-  WebPMuxFrameInfo frame;
-  WebPData full_image;
-  WebPData webp_data2;
-  WebPMux* const mux = WebPMuxCreate(webp_data, 0);
-  if (mux == NULL) return WEBP_MUX_BAD_DATA;
-  assert(enc->out_frame_count_ == 1);
-  WebPDataInit(&frame.bitstream);
-  WebPDataInit(&full_image);
-  WebPDataInit(&webp_data2);
-
-  err = WebPMuxGetFrame(mux, 1, &frame);
-  if (err != WEBP_MUX_OK) goto End;
-  if (frame.id != WEBP_CHUNK_ANMF) goto End;  // Non-animation: nothing to do.
-  err = WebPMuxGetCanvasSize(mux, &canvas_width, &canvas_height);
-  if (err != WEBP_MUX_OK) goto End;
-  if (!FrameToFullCanvas(enc, &frame, &full_image)) {
-    err = WEBP_MUX_BAD_DATA;
-    goto End;
-  }
-  err = WebPMuxSetImage(mux, &full_image, 1);
-  if (err != WEBP_MUX_OK) goto End;
-  err = WebPMuxAssemble(mux, &webp_data2);
-  if (err != WEBP_MUX_OK) goto End;
-
-  if (webp_data2.size < webp_data->size) {  // Pick 'webp_data2' if smaller.
-    WebPDataClear(webp_data);
-    *webp_data = webp_data2;
-    WebPDataInit(&webp_data2);
-  }
-
- End:
-  WebPDataClear(&frame.bitstream);
-  WebPDataClear(&full_image);
-  WebPMuxDelete(mux);
-  WebPDataClear(&webp_data2);
-  return err;
-}
-
-int WebPAnimEncoderAssemble(WebPAnimEncoder* enc, WebPData* webp_data) {
-  WebPMux* mux;
-  WebPMuxError err;
-
-  if (enc == NULL) {
-    return 0;
-  }
-  MarkNoError(enc);
-
-  if (webp_data == NULL) {
-    MarkError(enc, "ERROR assembling: NULL input");
-    return 0;
-  }
-
-  if (enc->in_frame_count_ == 0) {
-    MarkError(enc, "ERROR: No frames to assemble");
-    return 0;
-  }
-
-  if (!enc->got_null_frame_ && enc->in_frame_count_ > 1 && enc->count_ > 0) {
-    // set duration of the last frame to be avg of durations of previous frames.
-    const double delta_time =
-        (uint32_t)enc->prev_timestamp_ - enc->first_timestamp_;
-    const int average_duration = (int)(delta_time / (enc->in_frame_count_ - 1));
-    if (!IncreasePreviousDuration(enc, average_duration)) {
-      return 0;
-    }
-  }
-
-  // Flush any remaining frames.
-  enc->flush_count_ = enc->count_;
-  if (!FlushFrames(enc)) {
-    return 0;
-  }
-
-  // Set definitive canvas size.
-  mux = enc->mux_;
-  err = WebPMuxSetCanvasSize(mux, enc->canvas_width_, enc->canvas_height_);
-  if (err != WEBP_MUX_OK) goto Err;
-
-  err = WebPMuxSetAnimationParams(mux, &enc->options_.anim_params);
-  if (err != WEBP_MUX_OK) goto Err;
-
-  // Assemble into a WebP bitstream.
-  err = WebPMuxAssemble(mux, webp_data);
-  if (err != WEBP_MUX_OK) goto Err;
-
-  if (enc->out_frame_count_ == 1) {
-    err = OptimizeSingleFrame(enc, webp_data);
-    if (err != WEBP_MUX_OK) goto Err;
-  }
-  return 1;
-
- Err:
-  MarkError2(enc, "ERROR assembling WebP", err);
-  return 0;
-}
-
-const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc) {
-  if (enc == NULL) return NULL;
-  return enc->error_str_;
-}
-
-// -----------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/mux/animi.h b/ios/Pods/libwebp/src/mux/animi.h
deleted file mode 100644
index 34c45ba..0000000
--- a/ios/Pods/libwebp/src/mux/animi.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Internal header for animation related functions.
-//
-// Author: Hui Su (huisu@google.com)
-
-#ifndef WEBP_MUX_ANIMI_H_
-#define WEBP_MUX_ANIMI_H_
-
-#include "src/webp/mux.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Picks the optimal rectangle between two pictures, starting with initial
-// values of offsets and dimensions that are passed in. The initial
-// values will be clipped, if necessary, to make sure the rectangle is
-// within the canvas. "use_argb" must be true for both pictures.
-// Parameters:
-//   prev_canvas, curr_canvas - (in) two input pictures to compare.
-//   is_lossless, quality - (in) encoding settings.
-//   x_offset, y_offset, width, height - (in/out) rectangle between the two
-//                                                input pictures.
-// Returns true on success.
-int WebPAnimEncoderRefineRect(
-    const struct WebPPicture* const prev_canvas,
-    const struct WebPPicture* const curr_canvas,
-    int is_lossless, float quality, int* const x_offset, int* const y_offset,
-    int* const width, int* const height);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_MUX_ANIMI_H_
diff --git a/ios/Pods/libwebp/src/mux/muxedit.c b/ios/Pods/libwebp/src/mux/muxedit.c
deleted file mode 100644
index ccf14b2..0000000
--- a/ios/Pods/libwebp/src/mux/muxedit.c
+++ /dev/null
@@ -1,657 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Set and delete APIs for mux.
-//
-// Authors: Urvang (urvang@google.com)
-//          Vikas (vikasa@google.com)
-
-#include <assert.h>
-#include "src/mux/muxi.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// Life of a mux object.
-
-static void MuxInit(WebPMux* const mux) {
-  assert(mux != NULL);
-  memset(mux, 0, sizeof(*mux));
-  mux->canvas_width_ = 0;     // just to be explicit
-  mux->canvas_height_ = 0;
-}
-
-WebPMux* WebPNewInternal(int version) {
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_MUX_ABI_VERSION)) {
-    return NULL;
-  } else {
-    WebPMux* const mux = (WebPMux*)WebPSafeMalloc(1ULL, sizeof(WebPMux));
-    if (mux != NULL) MuxInit(mux);
-    return mux;
-  }
-}
-
-// Delete all images in 'wpi_list'.
-static void DeleteAllImages(WebPMuxImage** const wpi_list) {
-  while (*wpi_list != NULL) {
-    *wpi_list = MuxImageDelete(*wpi_list);
-  }
-}
-
-static void MuxRelease(WebPMux* const mux) {
-  assert(mux != NULL);
-  DeleteAllImages(&mux->images_);
-  ChunkListDelete(&mux->vp8x_);
-  ChunkListDelete(&mux->iccp_);
-  ChunkListDelete(&mux->anim_);
-  ChunkListDelete(&mux->exif_);
-  ChunkListDelete(&mux->xmp_);
-  ChunkListDelete(&mux->unknown_);
-}
-
-void WebPMuxDelete(WebPMux* mux) {
-  if (mux != NULL) {
-    MuxRelease(mux);
-    WebPSafeFree(mux);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Helper method(s).
-
-// Handy MACRO, makes MuxSet() very symmetric to MuxGet().
-#define SWITCH_ID_LIST(INDEX, LIST)                                            \
-  if (idx == (INDEX)) {                                                        \
-    err = ChunkAssignData(&chunk, data, copy_data, tag);                       \
-    if (err == WEBP_MUX_OK) {                                                  \
-      err = ChunkSetHead(&chunk, (LIST));                                      \
-    }                                                                          \
-    return err;                                                                \
-  }
-
-static WebPMuxError MuxSet(WebPMux* const mux, uint32_t tag,
-                           const WebPData* const data, int copy_data) {
-  WebPChunk chunk;
-  WebPMuxError err = WEBP_MUX_NOT_FOUND;
-  const CHUNK_INDEX idx = ChunkGetIndexFromTag(tag);
-  assert(mux != NULL);
-  assert(!IsWPI(kChunks[idx].id));
-
-  ChunkInit(&chunk);
-  SWITCH_ID_LIST(IDX_VP8X,    &mux->vp8x_);
-  SWITCH_ID_LIST(IDX_ICCP,    &mux->iccp_);
-  SWITCH_ID_LIST(IDX_ANIM,    &mux->anim_);
-  SWITCH_ID_LIST(IDX_EXIF,    &mux->exif_);
-  SWITCH_ID_LIST(IDX_XMP,     &mux->xmp_);
-  SWITCH_ID_LIST(IDX_UNKNOWN, &mux->unknown_);
-  return err;
-}
-#undef SWITCH_ID_LIST
-
-// Create data for frame given image data, offsets and duration.
-static WebPMuxError CreateFrameData(
-    int width, int height, const WebPMuxFrameInfo* const info,
-    WebPData* const frame) {
-  uint8_t* frame_bytes;
-  const size_t frame_size = kChunks[IDX_ANMF].size;
-
-  assert(width > 0 && height > 0 && info->duration >= 0);
-  assert(info->dispose_method == (info->dispose_method & 1));
-  // Note: assertion on upper bounds is done in PutLE24().
-
-  frame_bytes = (uint8_t*)WebPSafeMalloc(1ULL, frame_size);
-  if (frame_bytes == NULL) return WEBP_MUX_MEMORY_ERROR;
-
-  PutLE24(frame_bytes + 0, info->x_offset / 2);
-  PutLE24(frame_bytes + 3, info->y_offset / 2);
-
-  PutLE24(frame_bytes + 6, width - 1);
-  PutLE24(frame_bytes + 9, height - 1);
-  PutLE24(frame_bytes + 12, info->duration);
-  frame_bytes[15] =
-      (info->blend_method == WEBP_MUX_NO_BLEND ? 2 : 0) |
-      (info->dispose_method == WEBP_MUX_DISPOSE_BACKGROUND ? 1 : 0);
-
-  frame->bytes = frame_bytes;
-  frame->size = frame_size;
-  return WEBP_MUX_OK;
-}
-
-// Outputs image data given a bitstream. The bitstream can either be a
-// single-image WebP file or raw VP8/VP8L data.
-// Also outputs 'is_lossless' to be true if the given bitstream is lossless.
-static WebPMuxError GetImageData(const WebPData* const bitstream,
-                                 WebPData* const image, WebPData* const alpha,
-                                 int* const is_lossless) {
-  WebPDataInit(alpha);  // Default: no alpha.
-  if (bitstream->size < TAG_SIZE ||
-      memcmp(bitstream->bytes, "RIFF", TAG_SIZE)) {
-    // It is NOT webp file data. Return input data as is.
-    *image = *bitstream;
-  } else {
-    // It is webp file data. Extract image data from it.
-    const WebPMuxImage* wpi;
-    WebPMux* const mux = WebPMuxCreate(bitstream, 0);
-    if (mux == NULL) return WEBP_MUX_BAD_DATA;
-    wpi = mux->images_;
-    assert(wpi != NULL && wpi->img_ != NULL);
-    *image = wpi->img_->data_;
-    if (wpi->alpha_ != NULL) {
-      *alpha = wpi->alpha_->data_;
-    }
-    WebPMuxDelete(mux);
-  }
-  *is_lossless = VP8LCheckSignature(image->bytes, image->size);
-  return WEBP_MUX_OK;
-}
-
-static WebPMuxError DeleteChunks(WebPChunk** chunk_list, uint32_t tag) {
-  WebPMuxError err = WEBP_MUX_NOT_FOUND;
-  assert(chunk_list);
-  while (*chunk_list) {
-    WebPChunk* const chunk = *chunk_list;
-    if (chunk->tag_ == tag) {
-      *chunk_list = ChunkDelete(chunk);
-      err = WEBP_MUX_OK;
-    } else {
-      chunk_list = &chunk->next_;
-    }
-  }
-  return err;
-}
-
-static WebPMuxError MuxDeleteAllNamedData(WebPMux* const mux, uint32_t tag) {
-  const WebPChunkId id = ChunkGetIdFromTag(tag);
-  assert(mux != NULL);
-  if (IsWPI(id)) return WEBP_MUX_INVALID_ARGUMENT;
-  return DeleteChunks(MuxGetChunkListFromId(mux, id), tag);
-}
-
-//------------------------------------------------------------------------------
-// Set API(s).
-
-WebPMuxError WebPMuxSetChunk(WebPMux* mux, const char fourcc[4],
-                             const WebPData* chunk_data, int copy_data) {
-  uint32_t tag;
-  WebPMuxError err;
-  if (mux == NULL || fourcc == NULL || chunk_data == NULL ||
-      chunk_data->bytes == NULL || chunk_data->size > MAX_CHUNK_PAYLOAD) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  tag = ChunkGetTagFromFourCC(fourcc);
-
-  // Delete existing chunk(s) with the same 'fourcc'.
-  err = MuxDeleteAllNamedData(mux, tag);
-  if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
-
-  // Add the given chunk.
-  return MuxSet(mux, tag, chunk_data, copy_data);
-}
-
-// Creates a chunk from given 'data' and sets it as 1st chunk in 'chunk_list'.
-static WebPMuxError AddDataToChunkList(
-    const WebPData* const data, int copy_data, uint32_t tag,
-    WebPChunk** chunk_list) {
-  WebPChunk chunk;
-  WebPMuxError err;
-  ChunkInit(&chunk);
-  err = ChunkAssignData(&chunk, data, copy_data, tag);
-  if (err != WEBP_MUX_OK) goto Err;
-  err = ChunkSetHead(&chunk, chunk_list);
-  if (err != WEBP_MUX_OK) goto Err;
-  return WEBP_MUX_OK;
- Err:
-  ChunkRelease(&chunk);
-  return err;
-}
-
-// Extracts image & alpha data from the given bitstream and then sets wpi.alpha_
-// and wpi.img_ appropriately.
-static WebPMuxError SetAlphaAndImageChunks(
-    const WebPData* const bitstream, int copy_data, WebPMuxImage* const wpi) {
-  int is_lossless = 0;
-  WebPData image, alpha;
-  WebPMuxError err = GetImageData(bitstream, &image, &alpha, &is_lossless);
-  const int image_tag =
-      is_lossless ? kChunks[IDX_VP8L].tag : kChunks[IDX_VP8].tag;
-  if (err != WEBP_MUX_OK) return err;
-  if (alpha.bytes != NULL) {
-    err = AddDataToChunkList(&alpha, copy_data, kChunks[IDX_ALPHA].tag,
-                             &wpi->alpha_);
-    if (err != WEBP_MUX_OK) return err;
-  }
-  err = AddDataToChunkList(&image, copy_data, image_tag, &wpi->img_);
-  if (err != WEBP_MUX_OK) return err;
-  return MuxImageFinalize(wpi) ? WEBP_MUX_OK : WEBP_MUX_INVALID_ARGUMENT;
-}
-
-WebPMuxError WebPMuxSetImage(WebPMux* mux, const WebPData* bitstream,
-                             int copy_data) {
-  WebPMuxImage wpi;
-  WebPMuxError err;
-
-  // Sanity checks.
-  if (mux == NULL || bitstream == NULL || bitstream->bytes == NULL ||
-      bitstream->size > MAX_CHUNK_PAYLOAD) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-
-  if (mux->images_ != NULL) {
-    // Only one 'simple image' can be added in mux. So, remove present images.
-    DeleteAllImages(&mux->images_);
-  }
-
-  MuxImageInit(&wpi);
-  err = SetAlphaAndImageChunks(bitstream, copy_data, &wpi);
-  if (err != WEBP_MUX_OK) goto Err;
-
-  // Add this WebPMuxImage to mux.
-  err = MuxImagePush(&wpi, &mux->images_);
-  if (err != WEBP_MUX_OK) goto Err;
-
-  // All is well.
-  return WEBP_MUX_OK;
-
- Err:  // Something bad happened.
-  MuxImageRelease(&wpi);
-  return err;
-}
-
-WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* info,
-                              int copy_data) {
-  WebPMuxImage wpi;
-  WebPMuxError err;
-
-  // Sanity checks.
-  if (mux == NULL || info == NULL) return WEBP_MUX_INVALID_ARGUMENT;
-
-  if (info->id != WEBP_CHUNK_ANMF) return WEBP_MUX_INVALID_ARGUMENT;
-
-  if (info->bitstream.bytes == NULL ||
-      info->bitstream.size > MAX_CHUNK_PAYLOAD) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-
-  if (mux->images_ != NULL) {
-    const WebPMuxImage* const image = mux->images_;
-    const uint32_t image_id = (image->header_ != NULL) ?
-        ChunkGetIdFromTag(image->header_->tag_) : WEBP_CHUNK_IMAGE;
-    if (image_id != info->id) {
-      return WEBP_MUX_INVALID_ARGUMENT;  // Conflicting frame types.
-    }
-  }
-
-  MuxImageInit(&wpi);
-  err = SetAlphaAndImageChunks(&info->bitstream, copy_data, &wpi);
-  if (err != WEBP_MUX_OK) goto Err;
-  assert(wpi.img_ != NULL);  // As SetAlphaAndImageChunks() was successful.
-
-  {
-    WebPData frame;
-    const uint32_t tag = kChunks[IDX_ANMF].tag;
-    WebPMuxFrameInfo tmp = *info;
-    tmp.x_offset &= ~1;  // Snap offsets to even.
-    tmp.y_offset &= ~1;
-    if (tmp.x_offset < 0 || tmp.x_offset >= MAX_POSITION_OFFSET ||
-        tmp.y_offset < 0 || tmp.y_offset >= MAX_POSITION_OFFSET ||
-        (tmp.duration < 0 || tmp.duration >= MAX_DURATION) ||
-        tmp.dispose_method != (tmp.dispose_method & 1)) {
-      err = WEBP_MUX_INVALID_ARGUMENT;
-      goto Err;
-    }
-    err = CreateFrameData(wpi.width_, wpi.height_, &tmp, &frame);
-    if (err != WEBP_MUX_OK) goto Err;
-    // Add frame chunk (with copy_data = 1).
-    err = AddDataToChunkList(&frame, 1, tag, &wpi.header_);
-    WebPDataClear(&frame);  // frame owned by wpi.header_ now.
-    if (err != WEBP_MUX_OK) goto Err;
-  }
-
-  // Add this WebPMuxImage to mux.
-  err = MuxImagePush(&wpi, &mux->images_);
-  if (err != WEBP_MUX_OK) goto Err;
-
-  // All is well.
-  return WEBP_MUX_OK;
-
- Err:  // Something bad happened.
-  MuxImageRelease(&wpi);
-  return err;
-}
-
-WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux,
-                                       const WebPMuxAnimParams* params) {
-  WebPMuxError err;
-  uint8_t data[ANIM_CHUNK_SIZE];
-  const WebPData anim = { data, ANIM_CHUNK_SIZE };
-
-  if (mux == NULL || params == NULL) return WEBP_MUX_INVALID_ARGUMENT;
-  if (params->loop_count < 0 || params->loop_count >= MAX_LOOP_COUNT) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-
-  // Delete any existing ANIM chunk(s).
-  err = MuxDeleteAllNamedData(mux, kChunks[IDX_ANIM].tag);
-  if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
-
-  // Set the animation parameters.
-  PutLE32(data, params->bgcolor);
-  PutLE16(data + 4, params->loop_count);
-  return MuxSet(mux, kChunks[IDX_ANIM].tag, &anim, 1);
-}
-
-WebPMuxError WebPMuxSetCanvasSize(WebPMux* mux,
-                                  int width, int height) {
-  WebPMuxError err;
-  if (mux == NULL) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  if (width < 0 || height < 0 ||
-      width > MAX_CANVAS_SIZE || height > MAX_CANVAS_SIZE) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  if (width * (uint64_t)height >= MAX_IMAGE_AREA) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  if ((width * height) == 0 && (width | height) != 0) {
-    // one of width / height is zero, but not both -> invalid!
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  // If we already assembled a VP8X chunk, invalidate it.
-  err = MuxDeleteAllNamedData(mux, kChunks[IDX_VP8X].tag);
-  if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
-
-  mux->canvas_width_ = width;
-  mux->canvas_height_ = height;
-  return WEBP_MUX_OK;
-}
-
-//------------------------------------------------------------------------------
-// Delete API(s).
-
-WebPMuxError WebPMuxDeleteChunk(WebPMux* mux, const char fourcc[4]) {
-  if (mux == NULL || fourcc == NULL) return WEBP_MUX_INVALID_ARGUMENT;
-  return MuxDeleteAllNamedData(mux, ChunkGetTagFromFourCC(fourcc));
-}
-
-WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth) {
-  if (mux == NULL) return WEBP_MUX_INVALID_ARGUMENT;
-  return MuxImageDeleteNth(&mux->images_, nth);
-}
-
-//------------------------------------------------------------------------------
-// Assembly of the WebP RIFF file.
-
-static WebPMuxError GetFrameInfo(
-    const WebPChunk* const frame_chunk,
-    int* const x_offset, int* const y_offset, int* const duration) {
-  const WebPData* const data = &frame_chunk->data_;
-  const size_t expected_data_size = ANMF_CHUNK_SIZE;
-  assert(frame_chunk->tag_ == kChunks[IDX_ANMF].tag);
-  assert(frame_chunk != NULL);
-  if (data->size != expected_data_size) return WEBP_MUX_INVALID_ARGUMENT;
-
-  *x_offset = 2 * GetLE24(data->bytes + 0);
-  *y_offset = 2 * GetLE24(data->bytes + 3);
-  *duration = GetLE24(data->bytes + 12);
-  return WEBP_MUX_OK;
-}
-
-static WebPMuxError GetImageInfo(const WebPMuxImage* const wpi,
-                                 int* const x_offset, int* const y_offset,
-                                 int* const duration,
-                                 int* const width, int* const height) {
-  const WebPChunk* const frame_chunk = wpi->header_;
-  WebPMuxError err;
-  assert(wpi != NULL);
-  assert(frame_chunk != NULL);
-
-  // Get offsets and duration from ANMF chunk.
-  err = GetFrameInfo(frame_chunk, x_offset, y_offset, duration);
-  if (err != WEBP_MUX_OK) return err;
-
-  // Get width and height from VP8/VP8L chunk.
-  if (width != NULL) *width = wpi->width_;
-  if (height != NULL) *height = wpi->height_;
-  return WEBP_MUX_OK;
-}
-
-// Returns the tightest dimension for the canvas considering the image list.
-static WebPMuxError GetAdjustedCanvasSize(const WebPMux* const mux,
-                                          int* const width, int* const height) {
-  WebPMuxImage* wpi = NULL;
-  assert(mux != NULL);
-  assert(width != NULL && height != NULL);
-
-  wpi = mux->images_;
-  assert(wpi != NULL);
-  assert(wpi->img_ != NULL);
-
-  if (wpi->next_ != NULL) {
-    int max_x = 0, max_y = 0;
-    // if we have a chain of wpi's, header_ is necessarily set
-    assert(wpi->header_ != NULL);
-    // Aggregate the bounding box for animation frames.
-    for (; wpi != NULL; wpi = wpi->next_) {
-      int x_offset = 0, y_offset = 0, duration = 0, w = 0, h = 0;
-      const WebPMuxError err = GetImageInfo(wpi, &x_offset, &y_offset,
-                                            &duration, &w, &h);
-      const int max_x_pos = x_offset + w;
-      const int max_y_pos = y_offset + h;
-      if (err != WEBP_MUX_OK) return err;
-      assert(x_offset < MAX_POSITION_OFFSET);
-      assert(y_offset < MAX_POSITION_OFFSET);
-
-      if (max_x_pos > max_x) max_x = max_x_pos;
-      if (max_y_pos > max_y) max_y = max_y_pos;
-    }
-    *width = max_x;
-    *height = max_y;
-  } else {
-    // For a single image, canvas dimensions are same as image dimensions.
-    *width = wpi->width_;
-    *height = wpi->height_;
-  }
-  return WEBP_MUX_OK;
-}
-
-// VP8X format:
-// Total Size : 10,
-// Flags  : 4 bytes,
-// Width  : 3 bytes,
-// Height : 3 bytes.
-static WebPMuxError CreateVP8XChunk(WebPMux* const mux) {
-  WebPMuxError err = WEBP_MUX_OK;
-  uint32_t flags = 0;
-  int width = 0;
-  int height = 0;
-  uint8_t data[VP8X_CHUNK_SIZE];
-  const WebPData vp8x = { data, VP8X_CHUNK_SIZE };
-  const WebPMuxImage* images = NULL;
-
-  assert(mux != NULL);
-  images = mux->images_;  // First image.
-  if (images == NULL || images->img_ == NULL ||
-      images->img_->data_.bytes == NULL) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-
-  // If VP8X chunk(s) is(are) already present, remove them (and later add new
-  // VP8X chunk with updated flags).
-  err = MuxDeleteAllNamedData(mux, kChunks[IDX_VP8X].tag);
-  if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err;
-
-  // Set flags.
-  if (mux->iccp_ != NULL && mux->iccp_->data_.bytes != NULL) {
-    flags |= ICCP_FLAG;
-  }
-  if (mux->exif_ != NULL && mux->exif_->data_.bytes != NULL) {
-    flags |= EXIF_FLAG;
-  }
-  if (mux->xmp_ != NULL && mux->xmp_->data_.bytes != NULL) {
-    flags |= XMP_FLAG;
-  }
-  if (images->header_ != NULL) {
-    if (images->header_->tag_ == kChunks[IDX_ANMF].tag) {
-      // This is an image with animation.
-      flags |= ANIMATION_FLAG;
-    }
-  }
-  if (MuxImageCount(images, WEBP_CHUNK_ALPHA) > 0) {
-    flags |= ALPHA_FLAG;  // Some images have an alpha channel.
-  }
-
-  err = GetAdjustedCanvasSize(mux, &width, &height);
-  if (err != WEBP_MUX_OK) return err;
-
-  if (width <= 0 || height <= 0) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  if (width > MAX_CANVAS_SIZE || height > MAX_CANVAS_SIZE) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-
-  if (mux->canvas_width_ != 0 || mux->canvas_height_ != 0) {
-    if (width > mux->canvas_width_ || height > mux->canvas_height_) {
-      return WEBP_MUX_INVALID_ARGUMENT;
-    }
-    width = mux->canvas_width_;
-    height = mux->canvas_height_;
-  }
-
-  if (flags == 0 && mux->unknown_ == NULL) {
-    // For simple file format, VP8X chunk should not be added.
-    return WEBP_MUX_OK;
-  }
-
-  if (MuxHasAlpha(images)) {
-    // This means some frames explicitly/implicitly contain alpha.
-    // Note: This 'flags' update must NOT be done for a lossless image
-    // without a VP8X chunk!
-    flags |= ALPHA_FLAG;
-  }
-
-  PutLE32(data + 0, flags);   // VP8X chunk flags.
-  PutLE24(data + 4, width - 1);   // canvas width.
-  PutLE24(data + 7, height - 1);  // canvas height.
-
-  return MuxSet(mux, kChunks[IDX_VP8X].tag, &vp8x, 1);
-}
-
-// Cleans up 'mux' by removing any unnecessary chunks.
-static WebPMuxError MuxCleanup(WebPMux* const mux) {
-  int num_frames;
-  int num_anim_chunks;
-
-  // If we have an image with a single frame, and its rectangle
-  // covers the whole canvas, convert it to a non-animated image
-  // (to avoid writing ANMF chunk unnecessarily).
-  WebPMuxError err = WebPMuxNumChunks(mux, kChunks[IDX_ANMF].id, &num_frames);
-  if (err != WEBP_MUX_OK) return err;
-  if (num_frames == 1) {
-    WebPMuxImage* frame = NULL;
-    err = MuxImageGetNth((const WebPMuxImage**)&mux->images_, 1, &frame);
-    assert(err == WEBP_MUX_OK);  // We know that one frame does exist.
-    assert(frame != NULL);
-    if (frame->header_ != NULL &&
-        ((mux->canvas_width_ == 0 && mux->canvas_height_ == 0) ||
-         (frame->width_ == mux->canvas_width_ &&
-          frame->height_ == mux->canvas_height_))) {
-      assert(frame->header_->tag_ == kChunks[IDX_ANMF].tag);
-      ChunkDelete(frame->header_);  // Removes ANMF chunk.
-      frame->header_ = NULL;
-      num_frames = 0;
-    }
-  }
-  // Remove ANIM chunk if this is a non-animated image.
-  err = WebPMuxNumChunks(mux, kChunks[IDX_ANIM].id, &num_anim_chunks);
-  if (err != WEBP_MUX_OK) return err;
-  if (num_anim_chunks >= 1 && num_frames == 0) {
-    err = MuxDeleteAllNamedData(mux, kChunks[IDX_ANIM].tag);
-    if (err != WEBP_MUX_OK) return err;
-  }
-  return WEBP_MUX_OK;
-}
-
-// Total size of a list of images.
-static size_t ImageListDiskSize(const WebPMuxImage* wpi_list) {
-  size_t size = 0;
-  while (wpi_list != NULL) {
-    size += MuxImageDiskSize(wpi_list);
-    wpi_list = wpi_list->next_;
-  }
-  return size;
-}
-
-// Write out the given list of images into 'dst'.
-static uint8_t* ImageListEmit(const WebPMuxImage* wpi_list, uint8_t* dst) {
-  while (wpi_list != NULL) {
-    dst = MuxImageEmit(wpi_list, dst);
-    wpi_list = wpi_list->next_;
-  }
-  return dst;
-}
-
-WebPMuxError WebPMuxAssemble(WebPMux* mux, WebPData* assembled_data) {
-  size_t size = 0;
-  uint8_t* data = NULL;
-  uint8_t* dst = NULL;
-  WebPMuxError err;
-
-  if (assembled_data == NULL) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  // Clean up returned data, in case something goes wrong.
-  memset(assembled_data, 0, sizeof(*assembled_data));
-
-  if (mux == NULL) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-
-  // Finalize mux.
-  err = MuxCleanup(mux);
-  if (err != WEBP_MUX_OK) return err;
-  err = CreateVP8XChunk(mux);
-  if (err != WEBP_MUX_OK) return err;
-
-  // Allocate data.
-  size = ChunkListDiskSize(mux->vp8x_) + ChunkListDiskSize(mux->iccp_)
-       + ChunkListDiskSize(mux->anim_) + ImageListDiskSize(mux->images_)
-       + ChunkListDiskSize(mux->exif_) + ChunkListDiskSize(mux->xmp_)
-       + ChunkListDiskSize(mux->unknown_) + RIFF_HEADER_SIZE;
-
-  data = (uint8_t*)WebPSafeMalloc(1ULL, size);
-  if (data == NULL) return WEBP_MUX_MEMORY_ERROR;
-
-  // Emit header & chunks.
-  dst = MuxEmitRiffHeader(data, size);
-  dst = ChunkListEmit(mux->vp8x_, dst);
-  dst = ChunkListEmit(mux->iccp_, dst);
-  dst = ChunkListEmit(mux->anim_, dst);
-  dst = ImageListEmit(mux->images_, dst);
-  dst = ChunkListEmit(mux->exif_, dst);
-  dst = ChunkListEmit(mux->xmp_, dst);
-  dst = ChunkListEmit(mux->unknown_, dst);
-  assert(dst == data + size);
-
-  // Validate mux.
-  err = MuxValidate(mux);
-  if (err != WEBP_MUX_OK) {
-    WebPSafeFree(data);
-    data = NULL;
-    size = 0;
-  }
-
-  // Finalize data.
-  assembled_data->bytes = data;
-  assembled_data->size = size;
-
-  return err;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/mux/muxi.h b/ios/Pods/libwebp/src/mux/muxi.h
deleted file mode 100644
index 3e9d8c4..0000000
--- a/ios/Pods/libwebp/src/mux/muxi.h
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Internal header for mux library.
-//
-// Author: Urvang (urvang@google.com)
-
-#ifndef WEBP_MUX_MUXI_H_
-#define WEBP_MUX_MUXI_H_
-
-#include <assert.h>
-#include <stdlib.h>
-#include "src/dec/vp8i_dec.h"
-#include "src/dec/vp8li_dec.h"
-#include "src/webp/mux.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Defines and constants.
-
-#define MUX_MAJ_VERSION 1
-#define MUX_MIN_VERSION 0
-#define MUX_REV_VERSION 2
-
-// Chunk object.
-typedef struct WebPChunk WebPChunk;
-struct WebPChunk {
-  uint32_t        tag_;
-  int             owner_;  // True if *data_ memory is owned internally.
-                           // VP8X, ANIM, and other internally created chunks
-                           // like ANMF are always owned.
-  WebPData        data_;
-  WebPChunk*      next_;
-};
-
-// MuxImage object. Store a full WebP image (including ANMF chunk, ALPH
-// chunk and VP8/VP8L chunk),
-typedef struct WebPMuxImage WebPMuxImage;
-struct WebPMuxImage {
-  WebPChunk*  header_;      // Corresponds to WEBP_CHUNK_ANMF.
-  WebPChunk*  alpha_;       // Corresponds to WEBP_CHUNK_ALPHA.
-  WebPChunk*  img_;         // Corresponds to WEBP_CHUNK_IMAGE.
-  WebPChunk*  unknown_;     // Corresponds to WEBP_CHUNK_UNKNOWN.
-  int         width_;
-  int         height_;
-  int         has_alpha_;   // Through ALPH chunk or as part of VP8L.
-  int         is_partial_;  // True if only some of the chunks are filled.
-  WebPMuxImage* next_;
-};
-
-// Main mux object. Stores data chunks.
-struct WebPMux {
-  WebPMuxImage*   images_;
-  WebPChunk*      iccp_;
-  WebPChunk*      exif_;
-  WebPChunk*      xmp_;
-  WebPChunk*      anim_;
-  WebPChunk*      vp8x_;
-
-  WebPChunk*      unknown_;
-  int             canvas_width_;
-  int             canvas_height_;
-};
-
-// CHUNK_INDEX enum: used for indexing within 'kChunks' (defined below) only.
-// Note: the reason for having two enums ('WebPChunkId' and 'CHUNK_INDEX') is to
-// allow two different chunks to have the same id (e.g. WebPChunkId
-// 'WEBP_CHUNK_IMAGE' can correspond to CHUNK_INDEX 'IDX_VP8' or 'IDX_VP8L').
-typedef enum {
-  IDX_VP8X = 0,
-  IDX_ICCP,
-  IDX_ANIM,
-  IDX_ANMF,
-  IDX_ALPHA,
-  IDX_VP8,
-  IDX_VP8L,
-  IDX_EXIF,
-  IDX_XMP,
-  IDX_UNKNOWN,
-
-  IDX_NIL,
-  IDX_LAST_CHUNK
-} CHUNK_INDEX;
-
-#define NIL_TAG 0x00000000u  // To signal void chunk.
-
-typedef struct {
-  uint32_t      tag;
-  WebPChunkId   id;
-  uint32_t      size;
-} ChunkInfo;
-
-extern const ChunkInfo kChunks[IDX_LAST_CHUNK];
-
-//------------------------------------------------------------------------------
-// Chunk object management.
-
-// Initialize.
-void ChunkInit(WebPChunk* const chunk);
-
-// Get chunk index from chunk tag. Returns IDX_UNKNOWN if not found.
-CHUNK_INDEX ChunkGetIndexFromTag(uint32_t tag);
-
-// Get chunk id from chunk tag. Returns WEBP_CHUNK_UNKNOWN if not found.
-WebPChunkId ChunkGetIdFromTag(uint32_t tag);
-
-// Convert a fourcc string to a tag.
-uint32_t ChunkGetTagFromFourCC(const char fourcc[4]);
-
-// Get chunk index from fourcc. Returns IDX_UNKNOWN if given fourcc is unknown.
-CHUNK_INDEX ChunkGetIndexFromFourCC(const char fourcc[4]);
-
-// Search for nth chunk with given 'tag' in the chunk list.
-// nth = 0 means "last of the list".
-WebPChunk* ChunkSearchList(WebPChunk* first, uint32_t nth, uint32_t tag);
-
-// Fill the chunk with the given data.
-WebPMuxError ChunkAssignData(WebPChunk* chunk, const WebPData* const data,
-                             int copy_data, uint32_t tag);
-
-// Sets 'chunk' as the only element in 'chunk_list' if it is empty.
-// On success ownership is transferred from 'chunk' to the 'chunk_list'.
-WebPMuxError ChunkSetHead(WebPChunk* const chunk, WebPChunk** const chunk_list);
-// Sets 'chunk' at last position in the 'chunk_list'.
-// On success ownership is transferred from 'chunk' to the 'chunk_list'.
-// *chunk_list also points towards the last valid element of the initial
-// *chunk_list.
-WebPMuxError ChunkAppend(WebPChunk* const chunk, WebPChunk*** const chunk_list);
-
-// Releases chunk and returns chunk->next_.
-WebPChunk* ChunkRelease(WebPChunk* const chunk);
-
-// Deletes given chunk & returns chunk->next_.
-WebPChunk* ChunkDelete(WebPChunk* const chunk);
-
-// Deletes all chunks in the given chunk list.
-void ChunkListDelete(WebPChunk** const chunk_list);
-
-// Returns size of the chunk including chunk header and padding byte (if any).
-static WEBP_INLINE size_t SizeWithPadding(size_t chunk_size) {
-  assert(chunk_size <= MAX_CHUNK_PAYLOAD);
-  return CHUNK_HEADER_SIZE + ((chunk_size + 1) & ~1U);
-}
-
-// Size of a chunk including header and padding.
-static WEBP_INLINE size_t ChunkDiskSize(const WebPChunk* chunk) {
-  const size_t data_size = chunk->data_.size;
-  return SizeWithPadding(data_size);
-}
-
-// Total size of a list of chunks.
-size_t ChunkListDiskSize(const WebPChunk* chunk_list);
-
-// Write out the given list of chunks into 'dst'.
-uint8_t* ChunkListEmit(const WebPChunk* chunk_list, uint8_t* dst);
-
-//------------------------------------------------------------------------------
-// MuxImage object management.
-
-// Initialize.
-void MuxImageInit(WebPMuxImage* const wpi);
-
-// Releases image 'wpi' and returns wpi->next.
-WebPMuxImage* MuxImageRelease(WebPMuxImage* const wpi);
-
-// Delete image 'wpi' and return the next image in the list or NULL.
-// 'wpi' can be NULL.
-WebPMuxImage* MuxImageDelete(WebPMuxImage* const wpi);
-
-// Count number of images matching the given tag id in the 'wpi_list'.
-// If id == WEBP_CHUNK_NIL, all images will be matched.
-int MuxImageCount(const WebPMuxImage* wpi_list, WebPChunkId id);
-
-// Update width/height/has_alpha info from chunks within wpi.
-// Also remove ALPH chunk if not needed.
-int MuxImageFinalize(WebPMuxImage* const wpi);
-
-// Check if given ID corresponds to an image related chunk.
-static WEBP_INLINE int IsWPI(WebPChunkId id) {
-  switch (id) {
-    case WEBP_CHUNK_ANMF:
-    case WEBP_CHUNK_ALPHA:
-    case WEBP_CHUNK_IMAGE:  return 1;
-    default:        return 0;
-  }
-}
-
-// Pushes 'wpi' at the end of 'wpi_list'.
-WebPMuxError MuxImagePush(const WebPMuxImage* wpi, WebPMuxImage** wpi_list);
-
-// Delete nth image in the image list.
-WebPMuxError MuxImageDeleteNth(WebPMuxImage** wpi_list, uint32_t nth);
-
-// Get nth image in the image list.
-WebPMuxError MuxImageGetNth(const WebPMuxImage** wpi_list, uint32_t nth,
-                            WebPMuxImage** wpi);
-
-// Total size of the given image.
-size_t MuxImageDiskSize(const WebPMuxImage* const wpi);
-
-// Write out the given image into 'dst'.
-uint8_t* MuxImageEmit(const WebPMuxImage* const wpi, uint8_t* dst);
-
-//------------------------------------------------------------------------------
-// Helper methods for mux.
-
-// Checks if the given image list contains at least one image with alpha.
-int MuxHasAlpha(const WebPMuxImage* images);
-
-// Write out RIFF header into 'data', given total data size 'size'.
-uint8_t* MuxEmitRiffHeader(uint8_t* const data, size_t size);
-
-// Returns the list where chunk with given ID is to be inserted in mux.
-WebPChunk** MuxGetChunkListFromId(const WebPMux* mux, WebPChunkId id);
-
-// Validates the given mux object.
-WebPMuxError MuxValidate(const WebPMux* const mux);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_MUX_MUXI_H_
diff --git a/ios/Pods/libwebp/src/mux/muxinternal.c b/ios/Pods/libwebp/src/mux/muxinternal.c
deleted file mode 100644
index b9ee671..0000000
--- a/ios/Pods/libwebp/src/mux/muxinternal.c
+++ /dev/null
@@ -1,548 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Internal objects and utils for mux.
-//
-// Authors: Urvang (urvang@google.com)
-//          Vikas (vikasa@google.com)
-
-#include <assert.h>
-#include "src/mux/muxi.h"
-#include "src/utils/utils.h"
-
-#define UNDEFINED_CHUNK_SIZE ((uint32_t)(-1))
-
-const ChunkInfo kChunks[] = {
-  { MKFOURCC('V', 'P', '8', 'X'),  WEBP_CHUNK_VP8X,    VP8X_CHUNK_SIZE },
-  { MKFOURCC('I', 'C', 'C', 'P'),  WEBP_CHUNK_ICCP,    UNDEFINED_CHUNK_SIZE },
-  { MKFOURCC('A', 'N', 'I', 'M'),  WEBP_CHUNK_ANIM,    ANIM_CHUNK_SIZE },
-  { MKFOURCC('A', 'N', 'M', 'F'),  WEBP_CHUNK_ANMF,    ANMF_CHUNK_SIZE },
-  { MKFOURCC('A', 'L', 'P', 'H'),  WEBP_CHUNK_ALPHA,   UNDEFINED_CHUNK_SIZE },
-  { MKFOURCC('V', 'P', '8', ' '),  WEBP_CHUNK_IMAGE,   UNDEFINED_CHUNK_SIZE },
-  { MKFOURCC('V', 'P', '8', 'L'),  WEBP_CHUNK_IMAGE,   UNDEFINED_CHUNK_SIZE },
-  { MKFOURCC('E', 'X', 'I', 'F'),  WEBP_CHUNK_EXIF,    UNDEFINED_CHUNK_SIZE },
-  { MKFOURCC('X', 'M', 'P', ' '),  WEBP_CHUNK_XMP,     UNDEFINED_CHUNK_SIZE },
-  { NIL_TAG,                       WEBP_CHUNK_UNKNOWN, UNDEFINED_CHUNK_SIZE },
-
-  { NIL_TAG,                       WEBP_CHUNK_NIL,     UNDEFINED_CHUNK_SIZE }
-};
-
-//------------------------------------------------------------------------------
-
-int WebPGetMuxVersion(void) {
-  return (MUX_MAJ_VERSION << 16) | (MUX_MIN_VERSION << 8) | MUX_REV_VERSION;
-}
-
-//------------------------------------------------------------------------------
-// Life of a chunk object.
-
-void ChunkInit(WebPChunk* const chunk) {
-  assert(chunk);
-  memset(chunk, 0, sizeof(*chunk));
-  chunk->tag_ = NIL_TAG;
-}
-
-WebPChunk* ChunkRelease(WebPChunk* const chunk) {
-  WebPChunk* next;
-  if (chunk == NULL) return NULL;
-  if (chunk->owner_) {
-    WebPDataClear(&chunk->data_);
-  }
-  next = chunk->next_;
-  ChunkInit(chunk);
-  return next;
-}
-
-//------------------------------------------------------------------------------
-// Chunk misc methods.
-
-CHUNK_INDEX ChunkGetIndexFromTag(uint32_t tag) {
-  int i;
-  for (i = 0; kChunks[i].tag != NIL_TAG; ++i) {
-    if (tag == kChunks[i].tag) return (CHUNK_INDEX)i;
-  }
-  return IDX_UNKNOWN;
-}
-
-WebPChunkId ChunkGetIdFromTag(uint32_t tag) {
-  int i;
-  for (i = 0; kChunks[i].tag != NIL_TAG; ++i) {
-    if (tag == kChunks[i].tag) return kChunks[i].id;
-  }
-  return WEBP_CHUNK_UNKNOWN;
-}
-
-uint32_t ChunkGetTagFromFourCC(const char fourcc[4]) {
-  return MKFOURCC(fourcc[0], fourcc[1], fourcc[2], fourcc[3]);
-}
-
-CHUNK_INDEX ChunkGetIndexFromFourCC(const char fourcc[4]) {
-  const uint32_t tag = ChunkGetTagFromFourCC(fourcc);
-  return ChunkGetIndexFromTag(tag);
-}
-
-//------------------------------------------------------------------------------
-// Chunk search methods.
-
-// Returns next chunk in the chunk list with the given tag.
-static WebPChunk* ChunkSearchNextInList(WebPChunk* chunk, uint32_t tag) {
-  while (chunk != NULL && chunk->tag_ != tag) {
-    chunk = chunk->next_;
-  }
-  return chunk;
-}
-
-WebPChunk* ChunkSearchList(WebPChunk* first, uint32_t nth, uint32_t tag) {
-  uint32_t iter = nth;
-  first = ChunkSearchNextInList(first, tag);
-  if (first == NULL) return NULL;
-
-  while (--iter != 0) {
-    WebPChunk* next_chunk = ChunkSearchNextInList(first->next_, tag);
-    if (next_chunk == NULL) break;
-    first = next_chunk;
-  }
-  return ((nth > 0) && (iter > 0)) ? NULL : first;
-}
-
-//------------------------------------------------------------------------------
-// Chunk writer methods.
-
-WebPMuxError ChunkAssignData(WebPChunk* chunk, const WebPData* const data,
-                             int copy_data, uint32_t tag) {
-  // For internally allocated chunks, always copy data & make it owner of data.
-  if (tag == kChunks[IDX_VP8X].tag || tag == kChunks[IDX_ANIM].tag) {
-    copy_data = 1;
-  }
-
-  ChunkRelease(chunk);
-
-  if (data != NULL) {
-    if (copy_data) {        // Copy data.
-      if (!WebPDataCopy(data, &chunk->data_)) return WEBP_MUX_MEMORY_ERROR;
-      chunk->owner_ = 1;    // Chunk is owner of data.
-    } else {                // Don't copy data.
-      chunk->data_ = *data;
-    }
-  }
-  chunk->tag_ = tag;
-  return WEBP_MUX_OK;
-}
-
-WebPMuxError ChunkSetHead(WebPChunk* const chunk,
-                          WebPChunk** const chunk_list) {
-  WebPChunk* new_chunk;
-
-  assert(chunk_list != NULL);
-  if (*chunk_list != NULL) {
-    return WEBP_MUX_NOT_FOUND;
-  }
-
-  new_chunk = (WebPChunk*)WebPSafeMalloc(1ULL, sizeof(*new_chunk));
-  if (new_chunk == NULL) return WEBP_MUX_MEMORY_ERROR;
-  *new_chunk = *chunk;
-  chunk->owner_ = 0;
-  new_chunk->next_ = NULL;
-  *chunk_list = new_chunk;
-  return WEBP_MUX_OK;
-}
-
-WebPMuxError ChunkAppend(WebPChunk* const chunk,
-                         WebPChunk*** const chunk_list) {
-  assert(chunk_list != NULL && *chunk_list != NULL);
-
-  if (**chunk_list == NULL) {
-    ChunkSetHead(chunk, *chunk_list);
-  } else {
-    WebPChunk* last_chunk = **chunk_list;
-    while (last_chunk->next_ != NULL) last_chunk = last_chunk->next_;
-    ChunkSetHead(chunk, &last_chunk->next_);
-    *chunk_list = &last_chunk->next_;
-  }
-  return WEBP_MUX_OK;
-}
-
-//------------------------------------------------------------------------------
-// Chunk deletion method(s).
-
-WebPChunk* ChunkDelete(WebPChunk* const chunk) {
-  WebPChunk* const next = ChunkRelease(chunk);
-  WebPSafeFree(chunk);
-  return next;
-}
-
-void ChunkListDelete(WebPChunk** const chunk_list) {
-  while (*chunk_list != NULL) {
-    *chunk_list = ChunkDelete(*chunk_list);
-  }
-}
-
-//------------------------------------------------------------------------------
-// Chunk serialization methods.
-
-static uint8_t* ChunkEmit(const WebPChunk* const chunk, uint8_t* dst) {
-  const size_t chunk_size = chunk->data_.size;
-  assert(chunk);
-  assert(chunk->tag_ != NIL_TAG);
-  PutLE32(dst + 0, chunk->tag_);
-  PutLE32(dst + TAG_SIZE, (uint32_t)chunk_size);
-  assert(chunk_size == (uint32_t)chunk_size);
-  memcpy(dst + CHUNK_HEADER_SIZE, chunk->data_.bytes, chunk_size);
-  if (chunk_size & 1)
-    dst[CHUNK_HEADER_SIZE + chunk_size] = 0;  // Add padding.
-  return dst + ChunkDiskSize(chunk);
-}
-
-uint8_t* ChunkListEmit(const WebPChunk* chunk_list, uint8_t* dst) {
-  while (chunk_list != NULL) {
-    dst = ChunkEmit(chunk_list, dst);
-    chunk_list = chunk_list->next_;
-  }
-  return dst;
-}
-
-size_t ChunkListDiskSize(const WebPChunk* chunk_list) {
-  size_t size = 0;
-  while (chunk_list != NULL) {
-    size += ChunkDiskSize(chunk_list);
-    chunk_list = chunk_list->next_;
-  }
-  return size;
-}
-
-//------------------------------------------------------------------------------
-// Life of a MuxImage object.
-
-void MuxImageInit(WebPMuxImage* const wpi) {
-  assert(wpi);
-  memset(wpi, 0, sizeof(*wpi));
-}
-
-WebPMuxImage* MuxImageRelease(WebPMuxImage* const wpi) {
-  WebPMuxImage* next;
-  if (wpi == NULL) return NULL;
-  // There should be at most one chunk of header_, alpha_, img_ but we call
-  // ChunkListDelete to be safe
-  ChunkListDelete(&wpi->header_);
-  ChunkListDelete(&wpi->alpha_);
-  ChunkListDelete(&wpi->img_);
-  ChunkListDelete(&wpi->unknown_);
-
-  next = wpi->next_;
-  MuxImageInit(wpi);
-  return next;
-}
-
-//------------------------------------------------------------------------------
-// MuxImage search methods.
-
-// Get a reference to appropriate chunk list within an image given chunk tag.
-static WebPChunk** GetChunkListFromId(const WebPMuxImage* const wpi,
-                                      WebPChunkId id) {
-  assert(wpi != NULL);
-  switch (id) {
-    case WEBP_CHUNK_ANMF:  return (WebPChunk**)&wpi->header_;
-    case WEBP_CHUNK_ALPHA: return (WebPChunk**)&wpi->alpha_;
-    case WEBP_CHUNK_IMAGE: return (WebPChunk**)&wpi->img_;
-    default: return NULL;
-  }
-}
-
-int MuxImageCount(const WebPMuxImage* wpi_list, WebPChunkId id) {
-  int count = 0;
-  const WebPMuxImage* current;
-  for (current = wpi_list; current != NULL; current = current->next_) {
-    if (id == WEBP_CHUNK_NIL) {
-      ++count;  // Special case: count all images.
-    } else {
-      const WebPChunk* const wpi_chunk = *GetChunkListFromId(current, id);
-      if (wpi_chunk != NULL) {
-        const WebPChunkId wpi_chunk_id = ChunkGetIdFromTag(wpi_chunk->tag_);
-        if (wpi_chunk_id == id) ++count;  // Count images with a matching 'id'.
-      }
-    }
-  }
-  return count;
-}
-
-// Outputs a pointer to 'prev_wpi->next_',
-//   where 'prev_wpi' is the pointer to the image at position (nth - 1).
-// Returns true if nth image was found.
-static int SearchImageToGetOrDelete(WebPMuxImage** wpi_list, uint32_t nth,
-                                    WebPMuxImage*** const location) {
-  uint32_t count = 0;
-  assert(wpi_list);
-  *location = wpi_list;
-
-  if (nth == 0) {
-    nth = MuxImageCount(*wpi_list, WEBP_CHUNK_NIL);
-    if (nth == 0) return 0;  // Not found.
-  }
-
-  while (*wpi_list != NULL) {
-    WebPMuxImage* const cur_wpi = *wpi_list;
-    ++count;
-    if (count == nth) return 1;  // Found.
-    wpi_list = &cur_wpi->next_;
-    *location = wpi_list;
-  }
-  return 0;  // Not found.
-}
-
-//------------------------------------------------------------------------------
-// MuxImage writer methods.
-
-WebPMuxError MuxImagePush(const WebPMuxImage* wpi, WebPMuxImage** wpi_list) {
-  WebPMuxImage* new_wpi;
-
-  while (*wpi_list != NULL) {
-    WebPMuxImage* const cur_wpi = *wpi_list;
-    if (cur_wpi->next_ == NULL) break;
-    wpi_list = &cur_wpi->next_;
-  }
-
-  new_wpi = (WebPMuxImage*)WebPSafeMalloc(1ULL, sizeof(*new_wpi));
-  if (new_wpi == NULL) return WEBP_MUX_MEMORY_ERROR;
-  *new_wpi = *wpi;
-  new_wpi->next_ = NULL;
-
-  if (*wpi_list != NULL) {
-    (*wpi_list)->next_ = new_wpi;
-  } else {
-    *wpi_list = new_wpi;
-  }
-  return WEBP_MUX_OK;
-}
-
-//------------------------------------------------------------------------------
-// MuxImage deletion methods.
-
-WebPMuxImage* MuxImageDelete(WebPMuxImage* const wpi) {
-  // Delete the components of wpi. If wpi is NULL this is a noop.
-  WebPMuxImage* const next = MuxImageRelease(wpi);
-  WebPSafeFree(wpi);
-  return next;
-}
-
-WebPMuxError MuxImageDeleteNth(WebPMuxImage** wpi_list, uint32_t nth) {
-  assert(wpi_list);
-  if (!SearchImageToGetOrDelete(wpi_list, nth, &wpi_list)) {
-    return WEBP_MUX_NOT_FOUND;
-  }
-  *wpi_list = MuxImageDelete(*wpi_list);
-  return WEBP_MUX_OK;
-}
-
-//------------------------------------------------------------------------------
-// MuxImage reader methods.
-
-WebPMuxError MuxImageGetNth(const WebPMuxImage** wpi_list, uint32_t nth,
-                            WebPMuxImage** wpi) {
-  assert(wpi_list);
-  assert(wpi);
-  if (!SearchImageToGetOrDelete((WebPMuxImage**)wpi_list, nth,
-                                (WebPMuxImage***)&wpi_list)) {
-    return WEBP_MUX_NOT_FOUND;
-  }
-  *wpi = (WebPMuxImage*)*wpi_list;
-  return WEBP_MUX_OK;
-}
-
-//------------------------------------------------------------------------------
-// MuxImage serialization methods.
-
-// Size of an image.
-size_t MuxImageDiskSize(const WebPMuxImage* const wpi) {
-  size_t size = 0;
-  if (wpi->header_ != NULL) size += ChunkDiskSize(wpi->header_);
-  if (wpi->alpha_ != NULL) size += ChunkDiskSize(wpi->alpha_);
-  if (wpi->img_ != NULL) size += ChunkDiskSize(wpi->img_);
-  if (wpi->unknown_ != NULL) size += ChunkListDiskSize(wpi->unknown_);
-  return size;
-}
-
-// Special case as ANMF chunk encapsulates other image chunks.
-static uint8_t* ChunkEmitSpecial(const WebPChunk* const header,
-                                 size_t total_size, uint8_t* dst) {
-  const size_t header_size = header->data_.size;
-  const size_t offset_to_next = total_size - CHUNK_HEADER_SIZE;
-  assert(header->tag_ == kChunks[IDX_ANMF].tag);
-  PutLE32(dst + 0, header->tag_);
-  PutLE32(dst + TAG_SIZE, (uint32_t)offset_to_next);
-  assert(header_size == (uint32_t)header_size);
-  memcpy(dst + CHUNK_HEADER_SIZE, header->data_.bytes, header_size);
-  if (header_size & 1) {
-    dst[CHUNK_HEADER_SIZE + header_size] = 0;  // Add padding.
-  }
-  return dst + ChunkDiskSize(header);
-}
-
-uint8_t* MuxImageEmit(const WebPMuxImage* const wpi, uint8_t* dst) {
-  // Ordering of chunks to be emitted is strictly as follows:
-  // 1. ANMF chunk (if present).
-  // 2. ALPH chunk (if present).
-  // 3. VP8/VP8L chunk.
-  assert(wpi);
-  if (wpi->header_ != NULL) {
-    dst = ChunkEmitSpecial(wpi->header_, MuxImageDiskSize(wpi), dst);
-  }
-  if (wpi->alpha_ != NULL) dst = ChunkEmit(wpi->alpha_, dst);
-  if (wpi->img_ != NULL) dst = ChunkEmit(wpi->img_, dst);
-  if (wpi->unknown_ != NULL) dst = ChunkListEmit(wpi->unknown_, dst);
-  return dst;
-}
-
-//------------------------------------------------------------------------------
-// Helper methods for mux.
-
-int MuxHasAlpha(const WebPMuxImage* images) {
-  while (images != NULL) {
-    if (images->has_alpha_) return 1;
-    images = images->next_;
-  }
-  return 0;
-}
-
-uint8_t* MuxEmitRiffHeader(uint8_t* const data, size_t size) {
-  PutLE32(data + 0, MKFOURCC('R', 'I', 'F', 'F'));
-  PutLE32(data + TAG_SIZE, (uint32_t)size - CHUNK_HEADER_SIZE);
-  assert(size == (uint32_t)size);
-  PutLE32(data + TAG_SIZE + CHUNK_SIZE_BYTES, MKFOURCC('W', 'E', 'B', 'P'));
-  return data + RIFF_HEADER_SIZE;
-}
-
-WebPChunk** MuxGetChunkListFromId(const WebPMux* mux, WebPChunkId id) {
-  assert(mux != NULL);
-  switch (id) {
-    case WEBP_CHUNK_VP8X:    return (WebPChunk**)&mux->vp8x_;
-    case WEBP_CHUNK_ICCP:    return (WebPChunk**)&mux->iccp_;
-    case WEBP_CHUNK_ANIM:    return (WebPChunk**)&mux->anim_;
-    case WEBP_CHUNK_EXIF:    return (WebPChunk**)&mux->exif_;
-    case WEBP_CHUNK_XMP:     return (WebPChunk**)&mux->xmp_;
-    default:                 return (WebPChunk**)&mux->unknown_;
-  }
-}
-
-static int IsNotCompatible(int feature, int num_items) {
-  return (feature != 0) != (num_items > 0);
-}
-
-#define NO_FLAG ((WebPFeatureFlags)0)
-
-// Test basic constraints:
-// retrieval, maximum number of chunks by index (use -1 to skip)
-// and feature incompatibility (use NO_FLAG to skip).
-// On success returns WEBP_MUX_OK and stores the chunk count in *num.
-static WebPMuxError ValidateChunk(const WebPMux* const mux, CHUNK_INDEX idx,
-                                  WebPFeatureFlags feature,
-                                  uint32_t vp8x_flags,
-                                  int max, int* num) {
-  const WebPMuxError err =
-      WebPMuxNumChunks(mux, kChunks[idx].id, num);
-  if (err != WEBP_MUX_OK) return err;
-  if (max > -1 && *num > max) return WEBP_MUX_INVALID_ARGUMENT;
-  if (feature != NO_FLAG && IsNotCompatible(vp8x_flags & feature, *num)) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  return WEBP_MUX_OK;
-}
-
-WebPMuxError MuxValidate(const WebPMux* const mux) {
-  int num_iccp;
-  int num_exif;
-  int num_xmp;
-  int num_anim;
-  int num_frames;
-  int num_vp8x;
-  int num_images;
-  int num_alpha;
-  uint32_t flags;
-  WebPMuxError err;
-
-  // Verify mux is not NULL.
-  if (mux == NULL) return WEBP_MUX_INVALID_ARGUMENT;
-
-  // Verify mux has at least one image.
-  if (mux->images_ == NULL) return WEBP_MUX_INVALID_ARGUMENT;
-
-  err = WebPMuxGetFeatures(mux, &flags);
-  if (err != WEBP_MUX_OK) return err;
-
-  // At most one color profile chunk.
-  err = ValidateChunk(mux, IDX_ICCP, ICCP_FLAG, flags, 1, &num_iccp);
-  if (err != WEBP_MUX_OK) return err;
-
-  // At most one EXIF metadata.
-  err = ValidateChunk(mux, IDX_EXIF, EXIF_FLAG, flags, 1, &num_exif);
-  if (err != WEBP_MUX_OK) return err;
-
-  // At most one XMP metadata.
-  err = ValidateChunk(mux, IDX_XMP, XMP_FLAG, flags, 1, &num_xmp);
-  if (err != WEBP_MUX_OK) return err;
-
-  // Animation: ANIMATION_FLAG, ANIM chunk and ANMF chunk(s) are consistent.
-  // At most one ANIM chunk.
-  err = ValidateChunk(mux, IDX_ANIM, NO_FLAG, flags, 1, &num_anim);
-  if (err != WEBP_MUX_OK) return err;
-  err = ValidateChunk(mux, IDX_ANMF, NO_FLAG, flags, -1, &num_frames);
-  if (err != WEBP_MUX_OK) return err;
-
-  {
-    const int has_animation = !!(flags & ANIMATION_FLAG);
-    if (has_animation && (num_anim == 0 || num_frames == 0)) {
-      return WEBP_MUX_INVALID_ARGUMENT;
-    }
-    if (!has_animation && (num_anim == 1 || num_frames > 0)) {
-      return WEBP_MUX_INVALID_ARGUMENT;
-    }
-    if (!has_animation) {
-      const WebPMuxImage* images = mux->images_;
-      // There can be only one image.
-      if (images == NULL || images->next_ != NULL) {
-        return WEBP_MUX_INVALID_ARGUMENT;
-      }
-      // Size must match.
-      if (mux->canvas_width_ > 0) {
-        if (images->width_ != mux->canvas_width_ ||
-            images->height_ != mux->canvas_height_) {
-          return WEBP_MUX_INVALID_ARGUMENT;
-        }
-      }
-    }
-  }
-
-  // Verify either VP8X chunk is present OR there is only one elem in
-  // mux->images_.
-  err = ValidateChunk(mux, IDX_VP8X, NO_FLAG, flags, 1, &num_vp8x);
-  if (err != WEBP_MUX_OK) return err;
-  err = ValidateChunk(mux, IDX_VP8, NO_FLAG, flags, -1, &num_images);
-  if (err != WEBP_MUX_OK) return err;
-  if (num_vp8x == 0 && num_images != 1) return WEBP_MUX_INVALID_ARGUMENT;
-
-  // ALPHA_FLAG & alpha chunk(s) are consistent.
-  // Note: ALPHA_FLAG can be set when there is actually no Alpha data present.
-  if (MuxHasAlpha(mux->images_)) {
-    if (num_vp8x > 0) {
-      // VP8X chunk is present, so it should contain ALPHA_FLAG.
-      if (!(flags & ALPHA_FLAG)) return WEBP_MUX_INVALID_ARGUMENT;
-    } else {
-      // VP8X chunk is not present, so ALPH chunks should NOT be present either.
-      err = WebPMuxNumChunks(mux, WEBP_CHUNK_ALPHA, &num_alpha);
-      if (err != WEBP_MUX_OK) return err;
-      if (num_alpha > 0) return WEBP_MUX_INVALID_ARGUMENT;
-    }
-  }
-
-  return WEBP_MUX_OK;
-}
-
-#undef NO_FLAG
-
-//------------------------------------------------------------------------------
-
diff --git a/ios/Pods/libwebp/src/mux/muxread.c b/ios/Pods/libwebp/src/mux/muxread.c
deleted file mode 100644
index 268f6ac..0000000
--- a/ios/Pods/libwebp/src/mux/muxread.c
+++ /dev/null
@@ -1,558 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Read APIs for mux.
-//
-// Authors: Urvang (urvang@google.com)
-//          Vikas (vikasa@google.com)
-
-#include <assert.h>
-#include "src/mux/muxi.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// Helper method(s).
-
-// Handy MACRO.
-#define SWITCH_ID_LIST(INDEX, LIST)                                           \
-  if (idx == (INDEX)) {                                                       \
-    const WebPChunk* const chunk = ChunkSearchList((LIST), nth,               \
-                                                   kChunks[(INDEX)].tag);     \
-    if (chunk) {                                                              \
-      *data = chunk->data_;                                                   \
-      return WEBP_MUX_OK;                                                     \
-    } else {                                                                  \
-      return WEBP_MUX_NOT_FOUND;                                              \
-    }                                                                         \
-  }
-
-static WebPMuxError MuxGet(const WebPMux* const mux, CHUNK_INDEX idx,
-                           uint32_t nth, WebPData* const data) {
-  assert(mux != NULL);
-  assert(!IsWPI(kChunks[idx].id));
-  WebPDataInit(data);
-
-  SWITCH_ID_LIST(IDX_VP8X, mux->vp8x_);
-  SWITCH_ID_LIST(IDX_ICCP, mux->iccp_);
-  SWITCH_ID_LIST(IDX_ANIM, mux->anim_);
-  SWITCH_ID_LIST(IDX_EXIF, mux->exif_);
-  SWITCH_ID_LIST(IDX_XMP, mux->xmp_);
-  assert(idx != IDX_UNKNOWN);
-  return WEBP_MUX_NOT_FOUND;
-}
-#undef SWITCH_ID_LIST
-
-// Fill the chunk with the given data (includes chunk header bytes), after some
-// verifications.
-static WebPMuxError ChunkVerifyAndAssign(WebPChunk* chunk,
-                                         const uint8_t* data, size_t data_size,
-                                         size_t riff_size, int copy_data) {
-  uint32_t chunk_size;
-  WebPData chunk_data;
-
-  // Sanity checks.
-  if (data_size < CHUNK_HEADER_SIZE) return WEBP_MUX_NOT_ENOUGH_DATA;
-  chunk_size = GetLE32(data + TAG_SIZE);
-  if (chunk_size > MAX_CHUNK_PAYLOAD) return WEBP_MUX_BAD_DATA;
-
-  {
-    const size_t chunk_disk_size = SizeWithPadding(chunk_size);
-    if (chunk_disk_size > riff_size) return WEBP_MUX_BAD_DATA;
-    if (chunk_disk_size > data_size) return WEBP_MUX_NOT_ENOUGH_DATA;
-  }
-
-  // Data assignment.
-  chunk_data.bytes = data + CHUNK_HEADER_SIZE;
-  chunk_data.size = chunk_size;
-  return ChunkAssignData(chunk, &chunk_data, copy_data, GetLE32(data + 0));
-}
-
-int MuxImageFinalize(WebPMuxImage* const wpi) {
-  const WebPChunk* const img = wpi->img_;
-  const WebPData* const image = &img->data_;
-  const int is_lossless = (img->tag_ == kChunks[IDX_VP8L].tag);
-  int w, h;
-  int vp8l_has_alpha = 0;
-  const int ok = is_lossless ?
-      VP8LGetInfo(image->bytes, image->size, &w, &h, &vp8l_has_alpha) :
-      VP8GetInfo(image->bytes, image->size, image->size, &w, &h);
-  assert(img != NULL);
-  if (ok) {
-    // Ignore ALPH chunk accompanying VP8L.
-    if (is_lossless && (wpi->alpha_ != NULL)) {
-      ChunkDelete(wpi->alpha_);
-      wpi->alpha_ = NULL;
-    }
-    wpi->width_ = w;
-    wpi->height_ = h;
-    wpi->has_alpha_ = vp8l_has_alpha || (wpi->alpha_ != NULL);
-  }
-  return ok;
-}
-
-static int MuxImageParse(const WebPChunk* const chunk, int copy_data,
-                         WebPMuxImage* const wpi) {
-  const uint8_t* bytes = chunk->data_.bytes;
-  size_t size = chunk->data_.size;
-  const uint8_t* const last = bytes + size;
-  WebPChunk subchunk;
-  size_t subchunk_size;
-  WebPChunk** unknown_chunk_list = &wpi->unknown_;
-  ChunkInit(&subchunk);
-
-  assert(chunk->tag_ == kChunks[IDX_ANMF].tag);
-  assert(!wpi->is_partial_);
-
-  // ANMF.
-  {
-    const size_t hdr_size = ANMF_CHUNK_SIZE;
-    const WebPData temp = { bytes, hdr_size };
-    // Each of ANMF chunk contain a header at the beginning. So, its size should
-    // be at least 'hdr_size'.
-    if (size < hdr_size) goto Fail;
-    ChunkAssignData(&subchunk, &temp, copy_data, chunk->tag_);
-  }
-  ChunkSetHead(&subchunk, &wpi->header_);
-  wpi->is_partial_ = 1;  // Waiting for ALPH and/or VP8/VP8L chunks.
-
-  // Rest of the chunks.
-  subchunk_size = ChunkDiskSize(&subchunk) - CHUNK_HEADER_SIZE;
-  bytes += subchunk_size;
-  size -= subchunk_size;
-
-  while (bytes != last) {
-    ChunkInit(&subchunk);
-    if (ChunkVerifyAndAssign(&subchunk, bytes, size, size,
-                             copy_data) != WEBP_MUX_OK) {
-      goto Fail;
-    }
-    switch (ChunkGetIdFromTag(subchunk.tag_)) {
-      case WEBP_CHUNK_ALPHA:
-        if (wpi->alpha_ != NULL) goto Fail;  // Consecutive ALPH chunks.
-        if (ChunkSetHead(&subchunk, &wpi->alpha_) != WEBP_MUX_OK) goto Fail;
-        wpi->is_partial_ = 1;  // Waiting for a VP8 chunk.
-        break;
-      case WEBP_CHUNK_IMAGE:
-        if (wpi->img_ != NULL) goto Fail;  // Only 1 image chunk allowed.
-        if (ChunkSetHead(&subchunk, &wpi->img_) != WEBP_MUX_OK) goto Fail;
-        if (!MuxImageFinalize(wpi)) goto Fail;
-        wpi->is_partial_ = 0;  // wpi is completely filled.
-        break;
-      case WEBP_CHUNK_UNKNOWN:
-        if (wpi->is_partial_) {
-          goto Fail;  // Encountered an unknown chunk
-                      // before some image chunks.
-        }
-        if (ChunkAppend(&subchunk, &unknown_chunk_list) != WEBP_MUX_OK) {
-          goto Fail;
-        }
-        break;
-      default:
-        goto Fail;
-        break;
-    }
-    subchunk_size = ChunkDiskSize(&subchunk);
-    bytes += subchunk_size;
-    size -= subchunk_size;
-  }
-  if (wpi->is_partial_) goto Fail;
-  return 1;
-
- Fail:
-  ChunkRelease(&subchunk);
-  return 0;
-}
-
-//------------------------------------------------------------------------------
-// Create a mux object from WebP-RIFF data.
-
-WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data,
-                               int version) {
-  size_t riff_size;
-  uint32_t tag;
-  const uint8_t* end;
-  WebPMux* mux = NULL;
-  WebPMuxImage* wpi = NULL;
-  const uint8_t* data;
-  size_t size;
-  WebPChunk chunk;
-  // Stores the end of the chunk lists so that it is faster to append data to
-  // their ends.
-  WebPChunk** chunk_list_ends[WEBP_CHUNK_NIL + 1] = { NULL };
-  ChunkInit(&chunk);
-
-  // Sanity checks.
-  if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_MUX_ABI_VERSION)) {
-    return NULL;  // version mismatch
-  }
-  if (bitstream == NULL) return NULL;
-
-  data = bitstream->bytes;
-  size = bitstream->size;
-
-  if (data == NULL) return NULL;
-  if (size < RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE) return NULL;
-  if (GetLE32(data + 0) != MKFOURCC('R', 'I', 'F', 'F') ||
-      GetLE32(data + CHUNK_HEADER_SIZE) != MKFOURCC('W', 'E', 'B', 'P')) {
-    return NULL;
-  }
-
-  mux = WebPMuxNew();
-  if (mux == NULL) return NULL;
-
-  tag = GetLE32(data + RIFF_HEADER_SIZE);
-  if (tag != kChunks[IDX_VP8].tag &&
-      tag != kChunks[IDX_VP8L].tag &&
-      tag != kChunks[IDX_VP8X].tag) {
-    goto Err;  // First chunk should be VP8, VP8L or VP8X.
-  }
-
-  riff_size = GetLE32(data + TAG_SIZE);
-  if (riff_size > MAX_CHUNK_PAYLOAD) goto Err;
-
-  // Note this padding is historical and differs from demux.c which does not
-  // pad the file size.
-  riff_size = SizeWithPadding(riff_size);
-  if (riff_size < CHUNK_HEADER_SIZE) goto Err;
-  if (riff_size > size) goto Err;
-  // There's no point in reading past the end of the RIFF chunk.
-  if (size > riff_size + CHUNK_HEADER_SIZE) {
-    size = riff_size + CHUNK_HEADER_SIZE;
-  }
-
-  end = data + size;
-  data += RIFF_HEADER_SIZE;
-  size -= RIFF_HEADER_SIZE;
-
-  wpi = (WebPMuxImage*)WebPSafeMalloc(1ULL, sizeof(*wpi));
-  if (wpi == NULL) goto Err;
-  MuxImageInit(wpi);
-
-  // Loop over chunks.
-  while (data != end) {
-    size_t data_size;
-    WebPChunkId id;
-    if (ChunkVerifyAndAssign(&chunk, data, size, riff_size,
-                             copy_data) != WEBP_MUX_OK) {
-      goto Err;
-    }
-    data_size = ChunkDiskSize(&chunk);
-    id = ChunkGetIdFromTag(chunk.tag_);
-    switch (id) {
-      case WEBP_CHUNK_ALPHA:
-        if (wpi->alpha_ != NULL) goto Err;  // Consecutive ALPH chunks.
-        if (ChunkSetHead(&chunk, &wpi->alpha_) != WEBP_MUX_OK) goto Err;
-        wpi->is_partial_ = 1;  // Waiting for a VP8 chunk.
-        break;
-      case WEBP_CHUNK_IMAGE:
-        if (ChunkSetHead(&chunk, &wpi->img_) != WEBP_MUX_OK) goto Err;
-        if (!MuxImageFinalize(wpi)) goto Err;
-        wpi->is_partial_ = 0;  // wpi is completely filled.
- PushImage:
-        // Add this to mux->images_ list.
-        if (MuxImagePush(wpi, &mux->images_) != WEBP_MUX_OK) goto Err;
-        MuxImageInit(wpi);  // Reset for reading next image.
-        break;
-      case WEBP_CHUNK_ANMF:
-        if (wpi->is_partial_) goto Err;  // Previous wpi is still incomplete.
-        if (!MuxImageParse(&chunk, copy_data, wpi)) goto Err;
-        ChunkRelease(&chunk);
-        goto PushImage;
-        break;
-      default:  // A non-image chunk.
-        if (wpi->is_partial_) goto Err;  // Encountered a non-image chunk before
-                                         // getting all chunks of an image.
-        if (chunk_list_ends[id] == NULL) {
-          chunk_list_ends[id] =
-              MuxGetChunkListFromId(mux, id);  // List to add this chunk.
-        }
-        if (ChunkAppend(&chunk, &chunk_list_ends[id]) != WEBP_MUX_OK) goto Err;
-        if (id == WEBP_CHUNK_VP8X) {  // grab global specs
-          if (data_size < CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE) goto Err;
-          mux->canvas_width_ = GetLE24(data + 12) + 1;
-          mux->canvas_height_ = GetLE24(data + 15) + 1;
-        }
-        break;
-    }
-    data += data_size;
-    size -= data_size;
-    ChunkInit(&chunk);
-  }
-
-  // Incomplete image.
-  if (wpi->is_partial_) goto Err;
-
-  // Validate mux if complete.
-  if (MuxValidate(mux) != WEBP_MUX_OK) goto Err;
-
-  MuxImageDelete(wpi);
-  return mux;  // All OK;
-
- Err:  // Something bad happened.
-  ChunkRelease(&chunk);
-  MuxImageDelete(wpi);
-  WebPMuxDelete(mux);
-  return NULL;
-}
-
-//------------------------------------------------------------------------------
-// Get API(s).
-
-// Validates that the given mux has a single image.
-static WebPMuxError ValidateForSingleImage(const WebPMux* const mux) {
-  const int num_images = MuxImageCount(mux->images_, WEBP_CHUNK_IMAGE);
-  const int num_frames = MuxImageCount(mux->images_, WEBP_CHUNK_ANMF);
-
-  if (num_images == 0) {
-    // No images in mux.
-    return WEBP_MUX_NOT_FOUND;
-  } else if (num_images == 1 && num_frames == 0) {
-    // Valid case (single image).
-    return WEBP_MUX_OK;
-  } else {
-    // Frame case OR an invalid mux.
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-}
-
-// Get the canvas width, height and flags after validating that VP8X/VP8/VP8L
-// chunk and canvas size are valid.
-static WebPMuxError MuxGetCanvasInfo(const WebPMux* const mux,
-                                     int* width, int* height, uint32_t* flags) {
-  int w, h;
-  uint32_t f = 0;
-  WebPData data;
-  assert(mux != NULL);
-
-  // Check if VP8X chunk is present.
-  if (MuxGet(mux, IDX_VP8X, 1, &data) == WEBP_MUX_OK) {
-    if (data.size < VP8X_CHUNK_SIZE) return WEBP_MUX_BAD_DATA;
-    f = GetLE32(data.bytes + 0);
-    w = GetLE24(data.bytes + 4) + 1;
-    h = GetLE24(data.bytes + 7) + 1;
-  } else {
-    const WebPMuxImage* const wpi = mux->images_;
-    // Grab user-forced canvas size as default.
-    w = mux->canvas_width_;
-    h = mux->canvas_height_;
-    if (w == 0 && h == 0 && ValidateForSingleImage(mux) == WEBP_MUX_OK) {
-      // single image and not forced canvas size => use dimension of first frame
-      assert(wpi != NULL);
-      w = wpi->width_;
-      h = wpi->height_;
-    }
-    if (wpi != NULL) {
-      if (wpi->has_alpha_) f |= ALPHA_FLAG;
-    }
-  }
-  if (w * (uint64_t)h >= MAX_IMAGE_AREA) return WEBP_MUX_BAD_DATA;
-
-  if (width != NULL) *width = w;
-  if (height != NULL) *height = h;
-  if (flags != NULL) *flags = f;
-  return WEBP_MUX_OK;
-}
-
-WebPMuxError WebPMuxGetCanvasSize(const WebPMux* mux, int* width, int* height) {
-  if (mux == NULL || width == NULL || height == NULL) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  return MuxGetCanvasInfo(mux, width, height, NULL);
-}
-
-WebPMuxError WebPMuxGetFeatures(const WebPMux* mux, uint32_t* flags) {
-  if (mux == NULL || flags == NULL) return WEBP_MUX_INVALID_ARGUMENT;
-  return MuxGetCanvasInfo(mux, NULL, NULL, flags);
-}
-
-static uint8_t* EmitVP8XChunk(uint8_t* const dst, int width,
-                              int height, uint32_t flags) {
-  const size_t vp8x_size = CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE;
-  assert(width >= 1 && height >= 1);
-  assert(width <= MAX_CANVAS_SIZE && height <= MAX_CANVAS_SIZE);
-  assert(width * (uint64_t)height < MAX_IMAGE_AREA);
-  PutLE32(dst, MKFOURCC('V', 'P', '8', 'X'));
-  PutLE32(dst + TAG_SIZE, VP8X_CHUNK_SIZE);
-  PutLE32(dst + CHUNK_HEADER_SIZE, flags);
-  PutLE24(dst + CHUNK_HEADER_SIZE + 4, width - 1);
-  PutLE24(dst + CHUNK_HEADER_SIZE + 7, height - 1);
-  return dst + vp8x_size;
-}
-
-// Assemble a single image WebP bitstream from 'wpi'.
-static WebPMuxError SynthesizeBitstream(const WebPMuxImage* const wpi,
-                                        WebPData* const bitstream) {
-  uint8_t* dst;
-
-  // Allocate data.
-  const int need_vp8x = (wpi->alpha_ != NULL);
-  const size_t vp8x_size = need_vp8x ? CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE : 0;
-  const size_t alpha_size = need_vp8x ? ChunkDiskSize(wpi->alpha_) : 0;
-  // Note: No need to output ANMF chunk for a single image.
-  const size_t size = RIFF_HEADER_SIZE + vp8x_size + alpha_size +
-                      ChunkDiskSize(wpi->img_);
-  uint8_t* const data = (uint8_t*)WebPSafeMalloc(1ULL, size);
-  if (data == NULL) return WEBP_MUX_MEMORY_ERROR;
-
-  // There should be at most one alpha_ chunk and exactly one img_ chunk.
-  assert(wpi->alpha_ == NULL || wpi->alpha_->next_ == NULL);
-  assert(wpi->img_ != NULL && wpi->img_->next_ == NULL);
-
-  // Main RIFF header.
-  dst = MuxEmitRiffHeader(data, size);
-
-  if (need_vp8x) {
-    dst = EmitVP8XChunk(dst, wpi->width_, wpi->height_, ALPHA_FLAG);  // VP8X.
-    dst = ChunkListEmit(wpi->alpha_, dst);       // ALPH.
-  }
-
-  // Bitstream.
-  dst = ChunkListEmit(wpi->img_, dst);
-  assert(dst == data + size);
-
-  // Output.
-  bitstream->bytes = data;
-  bitstream->size = size;
-  return WEBP_MUX_OK;
-}
-
-WebPMuxError WebPMuxGetChunk(const WebPMux* mux, const char fourcc[4],
-                             WebPData* chunk_data) {
-  CHUNK_INDEX idx;
-  if (mux == NULL || fourcc == NULL || chunk_data == NULL) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-  idx = ChunkGetIndexFromFourCC(fourcc);
-  if (IsWPI(kChunks[idx].id)) {     // An image chunk.
-    return WEBP_MUX_INVALID_ARGUMENT;
-  } else if (idx != IDX_UNKNOWN) {  // A known chunk type.
-    return MuxGet(mux, idx, 1, chunk_data);
-  } else {                          // An unknown chunk type.
-    const WebPChunk* const chunk =
-        ChunkSearchList(mux->unknown_, 1, ChunkGetTagFromFourCC(fourcc));
-    if (chunk == NULL) return WEBP_MUX_NOT_FOUND;
-    *chunk_data = chunk->data_;
-    return WEBP_MUX_OK;
-  }
-}
-
-static WebPMuxError MuxGetImageInternal(const WebPMuxImage* const wpi,
-                                        WebPMuxFrameInfo* const info) {
-  // Set some defaults for unrelated fields.
-  info->x_offset = 0;
-  info->y_offset = 0;
-  info->duration = 1;
-  info->dispose_method = WEBP_MUX_DISPOSE_NONE;
-  info->blend_method = WEBP_MUX_BLEND;
-  // Extract data for related fields.
-  info->id = ChunkGetIdFromTag(wpi->img_->tag_);
-  return SynthesizeBitstream(wpi, &info->bitstream);
-}
-
-static WebPMuxError MuxGetFrameInternal(const WebPMuxImage* const wpi,
-                                        WebPMuxFrameInfo* const frame) {
-  const int is_frame = (wpi->header_->tag_ == kChunks[IDX_ANMF].tag);
-  const WebPData* frame_data;
-  if (!is_frame) return WEBP_MUX_INVALID_ARGUMENT;
-  assert(wpi->header_ != NULL);  // Already checked by WebPMuxGetFrame().
-  // Get frame chunk.
-  frame_data = &wpi->header_->data_;
-  if (frame_data->size < kChunks[IDX_ANMF].size) return WEBP_MUX_BAD_DATA;
-  // Extract info.
-  frame->x_offset = 2 * GetLE24(frame_data->bytes + 0);
-  frame->y_offset = 2 * GetLE24(frame_data->bytes + 3);
-  {
-    const uint8_t bits = frame_data->bytes[15];
-    frame->duration = GetLE24(frame_data->bytes + 12);
-    frame->dispose_method =
-        (bits & 1) ? WEBP_MUX_DISPOSE_BACKGROUND : WEBP_MUX_DISPOSE_NONE;
-    frame->blend_method = (bits & 2) ? WEBP_MUX_NO_BLEND : WEBP_MUX_BLEND;
-  }
-  frame->id = ChunkGetIdFromTag(wpi->header_->tag_);
-  return SynthesizeBitstream(wpi, &frame->bitstream);
-}
-
-WebPMuxError WebPMuxGetFrame(
-    const WebPMux* mux, uint32_t nth, WebPMuxFrameInfo* frame) {
-  WebPMuxError err;
-  WebPMuxImage* wpi;
-
-  // Sanity checks.
-  if (mux == NULL || frame == NULL) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-
-  // Get the nth WebPMuxImage.
-  err = MuxImageGetNth((const WebPMuxImage**)&mux->images_, nth, &wpi);
-  if (err != WEBP_MUX_OK) return err;
-
-  // Get frame info.
-  if (wpi->header_ == NULL) {
-    return MuxGetImageInternal(wpi, frame);
-  } else {
-    return MuxGetFrameInternal(wpi, frame);
-  }
-}
-
-WebPMuxError WebPMuxGetAnimationParams(const WebPMux* mux,
-                                       WebPMuxAnimParams* params) {
-  WebPData anim;
-  WebPMuxError err;
-
-  if (mux == NULL || params == NULL) return WEBP_MUX_INVALID_ARGUMENT;
-
-  err = MuxGet(mux, IDX_ANIM, 1, &anim);
-  if (err != WEBP_MUX_OK) return err;
-  if (anim.size < kChunks[WEBP_CHUNK_ANIM].size) return WEBP_MUX_BAD_DATA;
-  params->bgcolor = GetLE32(anim.bytes);
-  params->loop_count = GetLE16(anim.bytes + 4);
-
-  return WEBP_MUX_OK;
-}
-
-// Get chunk index from chunk id. Returns IDX_NIL if not found.
-static CHUNK_INDEX ChunkGetIndexFromId(WebPChunkId id) {
-  int i;
-  for (i = 0; kChunks[i].id != WEBP_CHUNK_NIL; ++i) {
-    if (id == kChunks[i].id) return (CHUNK_INDEX)i;
-  }
-  return IDX_NIL;
-}
-
-// Count number of chunks matching 'tag' in the 'chunk_list'.
-// If tag == NIL_TAG, any tag will be matched.
-static int CountChunks(const WebPChunk* const chunk_list, uint32_t tag) {
-  int count = 0;
-  const WebPChunk* current;
-  for (current = chunk_list; current != NULL; current = current->next_) {
-    if (tag == NIL_TAG || current->tag_ == tag) {
-      count++;  // Count chunks whose tags match.
-    }
-  }
-  return count;
-}
-
-WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
-                              WebPChunkId id, int* num_elements) {
-  if (mux == NULL || num_elements == NULL) {
-    return WEBP_MUX_INVALID_ARGUMENT;
-  }
-
-  if (IsWPI(id)) {
-    *num_elements = MuxImageCount(mux->images_, id);
-  } else {
-    WebPChunk* const* chunk_list = MuxGetChunkListFromId(mux, id);
-    const CHUNK_INDEX idx = ChunkGetIndexFromId(id);
-    *num_elements = CountChunks(*chunk_list, kChunks[idx].tag);
-  }
-
-  return WEBP_MUX_OK;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/utils/bit_reader_inl_utils.h b/ios/Pods/libwebp/src/utils/bit_reader_inl_utils.h
deleted file mode 100644
index 7e607f3..0000000
--- a/ios/Pods/libwebp/src/utils/bit_reader_inl_utils.h
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Specific inlined methods for boolean decoder [VP8GetBit() ...]
-// This file should be included by the .c sources that actually need to call
-// these methods.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_UTILS_BIT_READER_INL_UTILS_H_
-#define WEBP_UTILS_BIT_READER_INL_UTILS_H_
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include <string.h>  // for memcpy
-
-#include "src/dsp/dsp.h"
-#include "src/utils/bit_reader_utils.h"
-#include "src/utils/endian_inl_utils.h"
-#include "src/utils/utils.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Derived type lbit_t = natural type for memory I/O
-
-#if   (BITS > 32)
-typedef uint64_t lbit_t;
-#elif (BITS > 16)
-typedef uint32_t lbit_t;
-#elif (BITS >  8)
-typedef uint16_t lbit_t;
-#else
-typedef uint8_t lbit_t;
-#endif
-
-extern const uint8_t kVP8Log2Range[128];
-extern const uint8_t kVP8NewRange[128];
-
-// special case for the tail byte-reading
-void VP8LoadFinalBytes(VP8BitReader* const br);
-
-//------------------------------------------------------------------------------
-// Inlined critical functions
-
-// makes sure br->value_ has at least BITS bits worth of data
-static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE
-void VP8LoadNewBytes(VP8BitReader* const br) {
-  assert(br != NULL && br->buf_ != NULL);
-  // Read 'BITS' bits at a time if possible.
-  if (br->buf_ < br->buf_max_) {
-    // convert memory type to register type (with some zero'ing!)
-    bit_t bits;
-#if defined(WEBP_USE_MIPS32)
-    // This is needed because of un-aligned read.
-    lbit_t in_bits;
-    lbit_t* p_buf_ = (lbit_t*)br->buf_;
-    __asm__ volatile(
-      ".set   push                             \n\t"
-      ".set   at                               \n\t"
-      ".set   macro                            \n\t"
-      "ulw    %[in_bits], 0(%[p_buf_])         \n\t"
-      ".set   pop                              \n\t"
-      : [in_bits]"=r"(in_bits)
-      : [p_buf_]"r"(p_buf_)
-      : "memory", "at"
-    );
-#else
-    lbit_t in_bits;
-    memcpy(&in_bits, br->buf_, sizeof(in_bits));
-#endif
-    br->buf_ += BITS >> 3;
-#if !defined(WORDS_BIGENDIAN)
-#if (BITS > 32)
-    bits = BSwap64(in_bits);
-    bits >>= 64 - BITS;
-#elif (BITS >= 24)
-    bits = BSwap32(in_bits);
-    bits >>= (32 - BITS);
-#elif (BITS == 16)
-    bits = BSwap16(in_bits);
-#else   // BITS == 8
-    bits = (bit_t)in_bits;
-#endif  // BITS > 32
-#else    // WORDS_BIGENDIAN
-    bits = (bit_t)in_bits;
-    if (BITS != 8 * sizeof(bit_t)) bits >>= (8 * sizeof(bit_t) - BITS);
-#endif
-    br->value_ = bits | (br->value_ << BITS);
-    br->bits_ += BITS;
-  } else {
-    VP8LoadFinalBytes(br);    // no need to be inlined
-  }
-}
-
-// Read a bit with proba 'prob'. Speed-critical function!
-static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, int prob) {
-  // Don't move this declaration! It makes a big speed difference to store
-  // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't
-  // alter br->range_ value.
-  range_t range = br->range_;
-  if (br->bits_ < 0) {
-    VP8LoadNewBytes(br);
-  }
-  {
-    const int pos = br->bits_;
-    const range_t split = (range * prob) >> 8;
-    const range_t value = (range_t)(br->value_ >> pos);
-    const int bit = (value > split);
-    if (bit) {
-      range -= split;
-      br->value_ -= (bit_t)(split + 1) << pos;
-    } else {
-      range = split + 1;
-    }
-    {
-      const int shift = 7 ^ BitsLog2Floor(range);
-      range <<= shift;
-      br->bits_ -= shift;
-    }
-    br->range_ = range - 1;
-    return bit;
-  }
-}
-
-// simplified version of VP8GetBit() for prob=0x80 (note shift is always 1 here)
-static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE
-int VP8GetSigned(VP8BitReader* const br, int v) {
-  if (br->bits_ < 0) {
-    VP8LoadNewBytes(br);
-  }
-  {
-    const int pos = br->bits_;
-    const range_t split = br->range_ >> 1;
-    const range_t value = (range_t)(br->value_ >> pos);
-    const int32_t mask = (int32_t)(split - value) >> 31;  // -1 or 0
-    br->bits_ -= 1;
-    br->range_ += mask;
-    br->range_ |= 1;
-    br->value_ -= (bit_t)((split + 1) & mask) << pos;
-    return (v ^ mask) - mask;
-  }
-}
-
-static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br, int prob) {
-  // Don't move this declaration! It makes a big speed difference to store
-  // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't
-  // alter br->range_ value.
-  range_t range = br->range_;
-  if (br->bits_ < 0) {
-    VP8LoadNewBytes(br);
-  }
-  {
-    const int pos = br->bits_;
-    const range_t split = (range * prob) >> 8;
-    const range_t value = (range_t)(br->value_ >> pos);
-    int bit;  // Don't use 'const int bit = (value > split);", it's slower.
-    if (value > split) {
-      range -= split + 1;
-      br->value_ -= (bit_t)(split + 1) << pos;
-      bit = 1;
-    } else {
-      range = split;
-      bit = 0;
-    }
-    if (range <= (range_t)0x7e) {
-      const int shift = kVP8Log2Range[range];
-      range = kVP8NewRange[range];
-      br->bits_ -= shift;
-    }
-    br->range_ = range;
-    return bit;
-  }
-}
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_BIT_READER_INL_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/bit_reader_utils.c b/ios/Pods/libwebp/src/utils/bit_reader_utils.c
deleted file mode 100644
index 1500354..0000000
--- a/ios/Pods/libwebp/src/utils/bit_reader_utils.c
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Boolean decoder non-inlined methods
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include "src/utils/bit_reader_inl_utils.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// VP8BitReader
-
-void VP8BitReaderSetBuffer(VP8BitReader* const br,
-                           const uint8_t* const start,
-                           size_t size) {
-  br->buf_     = start;
-  br->buf_end_ = start + size;
-  br->buf_max_ =
-      (size >= sizeof(lbit_t)) ? start + size - sizeof(lbit_t) + 1
-                               : start;
-}
-
-void VP8InitBitReader(VP8BitReader* const br,
-                      const uint8_t* const start, size_t size) {
-  assert(br != NULL);
-  assert(start != NULL);
-  assert(size < (1u << 31));   // limit ensured by format and upstream checks
-  br->range_   = 255 - 1;
-  br->value_   = 0;
-  br->bits_    = -8;   // to load the very first 8bits
-  br->eof_     = 0;
-  VP8BitReaderSetBuffer(br, start, size);
-  VP8LoadNewBytes(br);
-}
-
-void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset) {
-  if (br->buf_ != NULL) {
-    br->buf_ += offset;
-    br->buf_end_ += offset;
-    br->buf_max_ += offset;
-  }
-}
-
-const uint8_t kVP8Log2Range[128] = {
-     7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
-  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  0
-};
-
-// range = ((range - 1) << kVP8Log2Range[range]) + 1
-const uint8_t kVP8NewRange[128] = {
-  127, 127, 191, 127, 159, 191, 223, 127,
-  143, 159, 175, 191, 207, 223, 239, 127,
-  135, 143, 151, 159, 167, 175, 183, 191,
-  199, 207, 215, 223, 231, 239, 247, 127,
-  131, 135, 139, 143, 147, 151, 155, 159,
-  163, 167, 171, 175, 179, 183, 187, 191,
-  195, 199, 203, 207, 211, 215, 219, 223,
-  227, 231, 235, 239, 243, 247, 251, 127,
-  129, 131, 133, 135, 137, 139, 141, 143,
-  145, 147, 149, 151, 153, 155, 157, 159,
-  161, 163, 165, 167, 169, 171, 173, 175,
-  177, 179, 181, 183, 185, 187, 189, 191,
-  193, 195, 197, 199, 201, 203, 205, 207,
-  209, 211, 213, 215, 217, 219, 221, 223,
-  225, 227, 229, 231, 233, 235, 237, 239,
-  241, 243, 245, 247, 249, 251, 253, 127
-};
-
-void VP8LoadFinalBytes(VP8BitReader* const br) {
-  assert(br != NULL && br->buf_ != NULL);
-  // Only read 8bits at a time
-  if (br->buf_ < br->buf_end_) {
-    br->bits_ += 8;
-    br->value_ = (bit_t)(*br->buf_++) | (br->value_ << 8);
-  } else if (!br->eof_) {
-    br->value_ <<= 8;
-    br->bits_ += 8;
-    br->eof_ = 1;
-  } else {
-    br->bits_ = 0;  // This is to avoid undefined behaviour with shifts.
-  }
-}
-
-//------------------------------------------------------------------------------
-// Higher-level calls
-
-uint32_t VP8GetValue(VP8BitReader* const br, int bits) {
-  uint32_t v = 0;
-  while (bits-- > 0) {
-    v |= VP8GetBit(br, 0x80) << bits;
-  }
-  return v;
-}
-
-int32_t VP8GetSignedValue(VP8BitReader* const br, int bits) {
-  const int value = VP8GetValue(br, bits);
-  return VP8Get(br) ? -value : value;
-}
-
-//------------------------------------------------------------------------------
-// VP8LBitReader
-
-#define VP8L_LOG8_WBITS 4  // Number of bytes needed to store VP8L_WBITS bits.
-
-#if defined(__arm__) || defined(_M_ARM) || defined(__aarch64__) || \
-    defined(__i386__) || defined(_M_IX86) || \
-    defined(__x86_64__) || defined(_M_X64)
-#define VP8L_USE_FAST_LOAD
-#endif
-
-static const uint32_t kBitMask[VP8L_MAX_NUM_BIT_READ + 1] = {
-  0,
-  0x000001, 0x000003, 0x000007, 0x00000f,
-  0x00001f, 0x00003f, 0x00007f, 0x0000ff,
-  0x0001ff, 0x0003ff, 0x0007ff, 0x000fff,
-  0x001fff, 0x003fff, 0x007fff, 0x00ffff,
-  0x01ffff, 0x03ffff, 0x07ffff, 0x0fffff,
-  0x1fffff, 0x3fffff, 0x7fffff, 0xffffff
-};
-
-void VP8LInitBitReader(VP8LBitReader* const br, const uint8_t* const start,
-                       size_t length) {
-  size_t i;
-  vp8l_val_t value = 0;
-  assert(br != NULL);
-  assert(start != NULL);
-  assert(length < 0xfffffff8u);   // can't happen with a RIFF chunk.
-
-  br->len_ = length;
-  br->val_ = 0;
-  br->bit_pos_ = 0;
-  br->eos_ = 0;
-
-  if (length > sizeof(br->val_)) {
-    length = sizeof(br->val_);
-  }
-  for (i = 0; i < length; ++i) {
-    value |= (vp8l_val_t)start[i] << (8 * i);
-  }
-  br->val_ = value;
-  br->pos_ = length;
-  br->buf_ = start;
-}
-
-void VP8LBitReaderSetBuffer(VP8LBitReader* const br,
-                            const uint8_t* const buf, size_t len) {
-  assert(br != NULL);
-  assert(buf != NULL);
-  assert(len < 0xfffffff8u);   // can't happen with a RIFF chunk.
-  br->buf_ = buf;
-  br->len_ = len;
-  // pos_ > len_ should be considered a param error.
-  br->eos_ = (br->pos_ > br->len_) || VP8LIsEndOfStream(br);
-}
-
-static void VP8LSetEndOfStream(VP8LBitReader* const br) {
-  br->eos_ = 1;
-  br->bit_pos_ = 0;  // To avoid undefined behaviour with shifts.
-}
-
-// If not at EOS, reload up to VP8L_LBITS byte-by-byte
-static void ShiftBytes(VP8LBitReader* const br) {
-  while (br->bit_pos_ >= 8 && br->pos_ < br->len_) {
-    br->val_ >>= 8;
-    br->val_ |= ((vp8l_val_t)br->buf_[br->pos_]) << (VP8L_LBITS - 8);
-    ++br->pos_;
-    br->bit_pos_ -= 8;
-  }
-  if (VP8LIsEndOfStream(br)) {
-    VP8LSetEndOfStream(br);
-  }
-}
-
-void VP8LDoFillBitWindow(VP8LBitReader* const br) {
-  assert(br->bit_pos_ >= VP8L_WBITS);
-#if defined(VP8L_USE_FAST_LOAD)
-  if (br->pos_ + sizeof(br->val_) < br->len_) {
-    br->val_ >>= VP8L_WBITS;
-    br->bit_pos_ -= VP8L_WBITS;
-    br->val_ |= (vp8l_val_t)HToLE32(WebPMemToUint32(br->buf_ + br->pos_)) <<
-                (VP8L_LBITS - VP8L_WBITS);
-    br->pos_ += VP8L_LOG8_WBITS;
-    return;
-  }
-#endif
-  ShiftBytes(br);       // Slow path.
-}
-
-uint32_t VP8LReadBits(VP8LBitReader* const br, int n_bits) {
-  assert(n_bits >= 0);
-  // Flag an error if end_of_stream or n_bits is more than allowed limit.
-  if (!br->eos_ && n_bits <= VP8L_MAX_NUM_BIT_READ) {
-    const uint32_t val = VP8LPrefetchBits(br) & kBitMask[n_bits];
-    const int new_bits = br->bit_pos_ + n_bits;
-    br->bit_pos_ = new_bits;
-    ShiftBytes(br);
-    return val;
-  } else {
-    VP8LSetEndOfStream(br);
-    return 0;
-  }
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/utils/bit_reader_utils.h b/ios/Pods/libwebp/src/utils/bit_reader_utils.h
deleted file mode 100644
index 0f8db2c..0000000
--- a/ios/Pods/libwebp/src/utils/bit_reader_utils.h
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Boolean decoder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-//         Vikas Arora (vikaas.arora@gmail.com)
-
-#ifndef WEBP_UTILS_BIT_READER_UTILS_H_
-#define WEBP_UTILS_BIT_READER_UTILS_H_
-
-#include <assert.h>
-#ifdef _MSC_VER
-#include <stdlib.h>  // _byteswap_ulong
-#endif
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// The Boolean decoder needs to maintain infinite precision on the value_ field.
-// However, since range_ is only 8bit, we only need an active window of 8 bits
-// for value_. Left bits (MSB) gets zeroed and shifted away when value_ falls
-// below 128, range_ is updated, and fresh bits read from the bitstream are
-// brought in as LSB. To avoid reading the fresh bits one by one (slow), we
-// cache BITS of them ahead. The total of (BITS + 8) bits must fit into a
-// natural register (with type bit_t). To fetch BITS bits from bitstream we
-// use a type lbit_t.
-//
-// BITS can be any multiple of 8 from 8 to 56 (inclusive).
-// Pick values that fit natural register size.
-
-#if defined(__i386__) || defined(_M_IX86)      // x86 32bit
-#define BITS 24
-#elif defined(__x86_64__) || defined(_M_X64)   // x86 64bit
-#define BITS 56
-#elif defined(__arm__) || defined(_M_ARM)      // ARM
-#define BITS 24
-#elif defined(__aarch64__)                     // ARM 64bit
-#define BITS 56
-#elif defined(__mips__)                        // MIPS
-#define BITS 24
-#else                                          // reasonable default
-#define BITS 24
-#endif
-
-//------------------------------------------------------------------------------
-// Derived types and constants:
-//   bit_t = natural register type for storing 'value_' (which is BITS+8 bits)
-//   range_t = register for 'range_' (which is 8bits only)
-
-#if (BITS > 24)
-typedef uint64_t bit_t;
-#else
-typedef uint32_t bit_t;
-#endif
-
-typedef uint32_t range_t;
-
-//------------------------------------------------------------------------------
-// Bitreader
-
-typedef struct VP8BitReader VP8BitReader;
-struct VP8BitReader {
-  // boolean decoder  (keep the field ordering as is!)
-  bit_t value_;               // current value
-  range_t range_;             // current range minus 1. In [127, 254] interval.
-  int bits_;                  // number of valid bits left
-  // read buffer
-  const uint8_t* buf_;        // next byte to be read
-  const uint8_t* buf_end_;    // end of read buffer
-  const uint8_t* buf_max_;    // max packed-read position on buffer
-  int eof_;                   // true if input is exhausted
-};
-
-// Initialize the bit reader and the boolean decoder.
-void VP8InitBitReader(VP8BitReader* const br,
-                      const uint8_t* const start, size_t size);
-// Sets the working read buffer.
-void VP8BitReaderSetBuffer(VP8BitReader* const br,
-                           const uint8_t* const start, size_t size);
-
-// Update internal pointers to displace the byte buffer by the
-// relative offset 'offset'.
-void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset);
-
-// return the next value made of 'num_bits' bits
-uint32_t VP8GetValue(VP8BitReader* const br, int num_bits);
-static WEBP_INLINE uint32_t VP8Get(VP8BitReader* const br) {
-  return VP8GetValue(br, 1);
-}
-
-// return the next value with sign-extension.
-int32_t VP8GetSignedValue(VP8BitReader* const br, int num_bits);
-
-// bit_reader_inl.h will implement the following methods:
-//   static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, int prob)
-//   static WEBP_INLINE int VP8GetSigned(VP8BitReader* const br, int v)
-// and should be included by the .c files that actually need them.
-// This is to avoid recompiling the whole library whenever this file is touched,
-// and also allowing platform-specific ad-hoc hacks.
-
-// -----------------------------------------------------------------------------
-// Bitreader for lossless format
-
-// maximum number of bits (inclusive) the bit-reader can handle:
-#define VP8L_MAX_NUM_BIT_READ 24
-
-#define VP8L_LBITS 64  // Number of bits prefetched (= bit-size of vp8l_val_t).
-#define VP8L_WBITS 32  // Minimum number of bytes ready after VP8LFillBitWindow.
-
-typedef uint64_t vp8l_val_t;  // right now, this bit-reader can only use 64bit.
-
-typedef struct {
-  vp8l_val_t     val_;        // pre-fetched bits
-  const uint8_t* buf_;        // input byte buffer
-  size_t         len_;        // buffer length
-  size_t         pos_;        // byte position in buf_
-  int            bit_pos_;    // current bit-reading position in val_
-  int            eos_;        // true if a bit was read past the end of buffer
-} VP8LBitReader;
-
-void VP8LInitBitReader(VP8LBitReader* const br,
-                       const uint8_t* const start,
-                       size_t length);
-
-//  Sets a new data buffer.
-void VP8LBitReaderSetBuffer(VP8LBitReader* const br,
-                            const uint8_t* const buffer, size_t length);
-
-// Reads the specified number of bits from read buffer.
-// Flags an error in case end_of_stream or n_bits is more than the allowed limit
-// of VP8L_MAX_NUM_BIT_READ (inclusive).
-// Flags eos_ if this read attempt is going to cross the read buffer.
-uint32_t VP8LReadBits(VP8LBitReader* const br, int n_bits);
-
-// Return the prefetched bits, so they can be looked up.
-static WEBP_INLINE uint32_t VP8LPrefetchBits(VP8LBitReader* const br) {
-  return (uint32_t)(br->val_ >> (br->bit_pos_ & (VP8L_LBITS - 1)));
-}
-
-// Returns true if there was an attempt at reading bit past the end of
-// the buffer. Doesn't set br->eos_ flag.
-static WEBP_INLINE int VP8LIsEndOfStream(const VP8LBitReader* const br) {
-  assert(br->pos_ <= br->len_);
-  return br->eos_ || ((br->pos_ == br->len_) && (br->bit_pos_ > VP8L_LBITS));
-}
-
-// For jumping over a number of bits in the bit stream when accessed with
-// VP8LPrefetchBits and VP8LFillBitWindow.
-// This function does *not* set br->eos_, since it's speed-critical.
-// Use with extreme care!
-static WEBP_INLINE void VP8LSetBitPos(VP8LBitReader* const br, int val) {
-  br->bit_pos_ = val;
-}
-
-// Advances the read buffer by 4 bytes to make room for reading next 32 bits.
-// Speed critical, but infrequent part of the code can be non-inlined.
-extern void VP8LDoFillBitWindow(VP8LBitReader* const br);
-static WEBP_INLINE void VP8LFillBitWindow(VP8LBitReader* const br) {
-  if (br->bit_pos_ >= VP8L_WBITS) VP8LDoFillBitWindow(br);
-}
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_BIT_READER_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/bit_writer_utils.c b/ios/Pods/libwebp/src/utils/bit_writer_utils.c
deleted file mode 100644
index 7f83b4c..0000000
--- a/ios/Pods/libwebp/src/utils/bit_writer_utils.c
+++ /dev/null
@@ -1,347 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Bit writing and boolean coder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-//         Vikas Arora (vikaas.arora@gmail.com)
-
-#include <assert.h>
-#include <string.h>   // for memcpy()
-#include <stdlib.h>
-
-#include "src/utils/bit_writer_utils.h"
-#include "src/utils/endian_inl_utils.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// VP8BitWriter
-
-static int BitWriterResize(VP8BitWriter* const bw, size_t extra_size) {
-  uint8_t* new_buf;
-  size_t new_size;
-  const uint64_t needed_size_64b = (uint64_t)bw->pos_ + extra_size;
-  const size_t needed_size = (size_t)needed_size_64b;
-  if (needed_size_64b != needed_size) {
-    bw->error_ = 1;
-    return 0;
-  }
-  if (needed_size <= bw->max_pos_) return 1;
-  // If the following line wraps over 32bit, the test just after will catch it.
-  new_size = 2 * bw->max_pos_;
-  if (new_size < needed_size) new_size = needed_size;
-  if (new_size < 1024) new_size = 1024;
-  new_buf = (uint8_t*)WebPSafeMalloc(1ULL, new_size);
-  if (new_buf == NULL) {
-    bw->error_ = 1;
-    return 0;
-  }
-  if (bw->pos_ > 0) {
-    assert(bw->buf_ != NULL);
-    memcpy(new_buf, bw->buf_, bw->pos_);
-  }
-  WebPSafeFree(bw->buf_);
-  bw->buf_ = new_buf;
-  bw->max_pos_ = new_size;
-  return 1;
-}
-
-static void Flush(VP8BitWriter* const bw) {
-  const int s = 8 + bw->nb_bits_;
-  const int32_t bits = bw->value_ >> s;
-  assert(bw->nb_bits_ >= 0);
-  bw->value_ -= bits << s;
-  bw->nb_bits_ -= 8;
-  if ((bits & 0xff) != 0xff) {
-    size_t pos = bw->pos_;
-    if (!BitWriterResize(bw, bw->run_ + 1)) {
-      return;
-    }
-    if (bits & 0x100) {  // overflow -> propagate carry over pending 0xff's
-      if (pos > 0) bw->buf_[pos - 1]++;
-    }
-    if (bw->run_ > 0) {
-      const int value = (bits & 0x100) ? 0x00 : 0xff;
-      for (; bw->run_ > 0; --bw->run_) bw->buf_[pos++] = value;
-    }
-    bw->buf_[pos++] = bits;
-    bw->pos_ = pos;
-  } else {
-    bw->run_++;   // delay writing of bytes 0xff, pending eventual carry.
-  }
-}
-
-//------------------------------------------------------------------------------
-// renormalization
-
-static const uint8_t kNorm[128] = {  // renorm_sizes[i] = 8 - log2(i)
-     7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
-  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  0
-};
-
-// range = ((range + 1) << kVP8Log2Range[range]) - 1
-static const uint8_t kNewRange[128] = {
-  127, 127, 191, 127, 159, 191, 223, 127, 143, 159, 175, 191, 207, 223, 239,
-  127, 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223, 231, 239,
-  247, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179,
-  183, 187, 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239,
-  243, 247, 251, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149,
-  151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179,
-  181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209,
-  211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239,
-  241, 243, 245, 247, 249, 251, 253, 127
-};
-
-int VP8PutBit(VP8BitWriter* const bw, int bit, int prob) {
-  const int split = (bw->range_ * prob) >> 8;
-  if (bit) {
-    bw->value_ += split + 1;
-    bw->range_ -= split + 1;
-  } else {
-    bw->range_ = split;
-  }
-  if (bw->range_ < 127) {   // emit 'shift' bits out and renormalize
-    const int shift = kNorm[bw->range_];
-    bw->range_ = kNewRange[bw->range_];
-    bw->value_ <<= shift;
-    bw->nb_bits_ += shift;
-    if (bw->nb_bits_ > 0) Flush(bw);
-  }
-  return bit;
-}
-
-int VP8PutBitUniform(VP8BitWriter* const bw, int bit) {
-  const int split = bw->range_ >> 1;
-  if (bit) {
-    bw->value_ += split + 1;
-    bw->range_ -= split + 1;
-  } else {
-    bw->range_ = split;
-  }
-  if (bw->range_ < 127) {
-    bw->range_ = kNewRange[bw->range_];
-    bw->value_ <<= 1;
-    bw->nb_bits_ += 1;
-    if (bw->nb_bits_ > 0) Flush(bw);
-  }
-  return bit;
-}
-
-void VP8PutBits(VP8BitWriter* const bw, uint32_t value, int nb_bits) {
-  uint32_t mask;
-  assert(nb_bits > 0 && nb_bits < 32);
-  for (mask = 1u << (nb_bits - 1); mask; mask >>= 1) {
-    VP8PutBitUniform(bw, value & mask);
-  }
-}
-
-void VP8PutSignedBits(VP8BitWriter* const bw, int value, int nb_bits) {
-  if (!VP8PutBitUniform(bw, value != 0)) return;
-  if (value < 0) {
-    VP8PutBits(bw, ((-value) << 1) | 1, nb_bits + 1);
-  } else {
-    VP8PutBits(bw, value << 1, nb_bits + 1);
-  }
-}
-
-//------------------------------------------------------------------------------
-
-int VP8BitWriterInit(VP8BitWriter* const bw, size_t expected_size) {
-  bw->range_   = 255 - 1;
-  bw->value_   = 0;
-  bw->run_     = 0;
-  bw->nb_bits_ = -8;
-  bw->pos_     = 0;
-  bw->max_pos_ = 0;
-  bw->error_   = 0;
-  bw->buf_     = NULL;
-  return (expected_size > 0) ? BitWriterResize(bw, expected_size) : 1;
-}
-
-uint8_t* VP8BitWriterFinish(VP8BitWriter* const bw) {
-  VP8PutBits(bw, 0, 9 - bw->nb_bits_);
-  bw->nb_bits_ = 0;   // pad with zeroes
-  Flush(bw);
-  return bw->buf_;
-}
-
-int VP8BitWriterAppend(VP8BitWriter* const bw,
-                       const uint8_t* data, size_t size) {
-  assert(data != NULL);
-  if (bw->nb_bits_ != -8) return 0;   // Flush() must have been called
-  if (!BitWriterResize(bw, size)) return 0;
-  memcpy(bw->buf_ + bw->pos_, data, size);
-  bw->pos_ += size;
-  return 1;
-}
-
-void VP8BitWriterWipeOut(VP8BitWriter* const bw) {
-  if (bw != NULL) {
-    WebPSafeFree(bw->buf_);
-    memset(bw, 0, sizeof(*bw));
-  }
-}
-
-//------------------------------------------------------------------------------
-// VP8LBitWriter
-
-// This is the minimum amount of size the memory buffer is guaranteed to grow
-// when extra space is needed.
-#define MIN_EXTRA_SIZE  (32768ULL)
-
-// Returns 1 on success.
-static int VP8LBitWriterResize(VP8LBitWriter* const bw, size_t extra_size) {
-  uint8_t* allocated_buf;
-  size_t allocated_size;
-  const size_t max_bytes = bw->end_ - bw->buf_;
-  const size_t current_size = bw->cur_ - bw->buf_;
-  const uint64_t size_required_64b = (uint64_t)current_size + extra_size;
-  const size_t size_required = (size_t)size_required_64b;
-  if (size_required != size_required_64b) {
-    bw->error_ = 1;
-    return 0;
-  }
-  if (max_bytes > 0 && size_required <= max_bytes) return 1;
-  allocated_size = (3 * max_bytes) >> 1;
-  if (allocated_size < size_required) allocated_size = size_required;
-  // make allocated size multiple of 1k
-  allocated_size = (((allocated_size >> 10) + 1) << 10);
-  allocated_buf = (uint8_t*)WebPSafeMalloc(1ULL, allocated_size);
-  if (allocated_buf == NULL) {
-    bw->error_ = 1;
-    return 0;
-  }
-  if (current_size > 0) {
-    memcpy(allocated_buf, bw->buf_, current_size);
-  }
-  WebPSafeFree(bw->buf_);
-  bw->buf_ = allocated_buf;
-  bw->cur_ = bw->buf_ + current_size;
-  bw->end_ = bw->buf_ + allocated_size;
-  return 1;
-}
-
-int VP8LBitWriterInit(VP8LBitWriter* const bw, size_t expected_size) {
-  memset(bw, 0, sizeof(*bw));
-  return VP8LBitWriterResize(bw, expected_size);
-}
-
-int VP8LBitWriterClone(const VP8LBitWriter* const src,
-                       VP8LBitWriter* const dst) {
-  const size_t current_size = src->cur_ - src->buf_;
-  assert(src->cur_ >= src->buf_ && src->cur_ <= src->end_);
-  if (!VP8LBitWriterResize(dst, current_size)) return 0;
-  memcpy(dst->buf_, src->buf_, current_size);
-  dst->bits_ = src->bits_;
-  dst->used_ = src->used_;
-  dst->error_ = src->error_;
-  dst->cur_ = dst->buf_ + current_size;
-  return 1;
-}
-
-void VP8LBitWriterWipeOut(VP8LBitWriter* const bw) {
-  if (bw != NULL) {
-    WebPSafeFree(bw->buf_);
-    memset(bw, 0, sizeof(*bw));
-  }
-}
-
-void VP8LBitWriterReset(const VP8LBitWriter* const bw_init,
-                        VP8LBitWriter* const bw) {
-  bw->bits_ = bw_init->bits_;
-  bw->used_ = bw_init->used_;
-  bw->cur_ = bw->buf_ + (bw_init->cur_ - bw_init->buf_);
-  assert(bw->cur_ <= bw->end_);
-  bw->error_ = bw_init->error_;
-}
-
-void VP8LBitWriterSwap(VP8LBitWriter* const src, VP8LBitWriter* const dst) {
-  const VP8LBitWriter tmp = *src;
-  *src = *dst;
-  *dst = tmp;
-}
-
-void VP8LPutBitsFlushBits(VP8LBitWriter* const bw) {
-  // If needed, make some room by flushing some bits out.
-  if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) {
-    const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE;
-    if (extra_size != (size_t)extra_size ||
-        !VP8LBitWriterResize(bw, (size_t)extra_size)) {
-      bw->cur_ = bw->buf_;
-      bw->error_ = 1;
-      return;
-    }
-  }
-  *(vp8l_wtype_t*)bw->cur_ = (vp8l_wtype_t)WSWAP((vp8l_wtype_t)bw->bits_);
-  bw->cur_ += VP8L_WRITER_BYTES;
-  bw->bits_ >>= VP8L_WRITER_BITS;
-  bw->used_ -= VP8L_WRITER_BITS;
-}
-
-void VP8LPutBitsInternal(VP8LBitWriter* const bw, uint32_t bits, int n_bits) {
-  assert(n_bits <= 32);
-  // That's the max we can handle:
-  assert(sizeof(vp8l_wtype_t) == 2);
-  if (n_bits > 0) {
-    vp8l_atype_t lbits = bw->bits_;
-    int used = bw->used_;
-    // Special case of overflow handling for 32bit accumulator (2-steps flush).
-#if VP8L_WRITER_BITS == 16
-    if (used + n_bits >= VP8L_WRITER_MAX_BITS) {
-      // Fill up all the VP8L_WRITER_MAX_BITS so it can be flushed out below.
-      const int shift = VP8L_WRITER_MAX_BITS - used;
-      lbits |= (vp8l_atype_t)bits << used;
-      used = VP8L_WRITER_MAX_BITS;
-      n_bits -= shift;
-      bits >>= shift;
-      assert(n_bits <= VP8L_WRITER_MAX_BITS);
-    }
-#endif
-    // If needed, make some room by flushing some bits out.
-    while (used >= VP8L_WRITER_BITS) {
-      if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) {
-        const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE;
-        if (extra_size != (size_t)extra_size ||
-            !VP8LBitWriterResize(bw, (size_t)extra_size)) {
-          bw->cur_ = bw->buf_;
-          bw->error_ = 1;
-          return;
-        }
-      }
-      *(vp8l_wtype_t*)bw->cur_ = (vp8l_wtype_t)WSWAP((vp8l_wtype_t)lbits);
-      bw->cur_ += VP8L_WRITER_BYTES;
-      lbits >>= VP8L_WRITER_BITS;
-      used -= VP8L_WRITER_BITS;
-    }
-    bw->bits_ = lbits | ((vp8l_atype_t)bits << used);
-    bw->used_ = used + n_bits;
-  }
-}
-
-uint8_t* VP8LBitWriterFinish(VP8LBitWriter* const bw) {
-  // flush leftover bits
-  if (VP8LBitWriterResize(bw, (bw->used_ + 7) >> 3)) {
-    while (bw->used_ > 0) {
-      *bw->cur_++ = (uint8_t)bw->bits_;
-      bw->bits_ >>= 8;
-      bw->used_ -= 8;
-    }
-    bw->used_ = 0;
-  }
-  return bw->buf_;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/utils/bit_writer_utils.h b/ios/Pods/libwebp/src/utils/bit_writer_utils.h
deleted file mode 100644
index b9d5102..0000000
--- a/ios/Pods/libwebp/src/utils/bit_writer_utils.h
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Bit writing and boolean coder
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_UTILS_BIT_WRITER_UTILS_H_
-#define WEBP_UTILS_BIT_WRITER_UTILS_H_
-
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Bit-writing
-
-typedef struct VP8BitWriter VP8BitWriter;
-struct VP8BitWriter {
-  int32_t  range_;      // range-1
-  int32_t  value_;
-  int      run_;        // number of outstanding bits
-  int      nb_bits_;    // number of pending bits
-  uint8_t* buf_;        // internal buffer. Re-allocated regularly. Not owned.
-  size_t   pos_;
-  size_t   max_pos_;
-  int      error_;      // true in case of error
-};
-
-// Initialize the object. Allocates some initial memory based on expected_size.
-int VP8BitWriterInit(VP8BitWriter* const bw, size_t expected_size);
-// Finalize the bitstream coding. Returns a pointer to the internal buffer.
-uint8_t* VP8BitWriterFinish(VP8BitWriter* const bw);
-// Release any pending memory and zeroes the object. Not a mandatory call.
-// Only useful in case of error, when the internal buffer hasn't been grabbed!
-void VP8BitWriterWipeOut(VP8BitWriter* const bw);
-
-int VP8PutBit(VP8BitWriter* const bw, int bit, int prob);
-int VP8PutBitUniform(VP8BitWriter* const bw, int bit);
-void VP8PutBits(VP8BitWriter* const bw, uint32_t value, int nb_bits);
-void VP8PutSignedBits(VP8BitWriter* const bw, int value, int nb_bits);
-
-// Appends some bytes to the internal buffer. Data is copied.
-int VP8BitWriterAppend(VP8BitWriter* const bw,
-                       const uint8_t* data, size_t size);
-
-// return approximate write position (in bits)
-static WEBP_INLINE uint64_t VP8BitWriterPos(const VP8BitWriter* const bw) {
-  const uint64_t nb_bits = 8 + bw->nb_bits_;   // bw->nb_bits_ is <= 0, note
-  return (bw->pos_ + bw->run_) * 8 + nb_bits;
-}
-
-// Returns a pointer to the internal buffer.
-static WEBP_INLINE uint8_t* VP8BitWriterBuf(const VP8BitWriter* const bw) {
-  return bw->buf_;
-}
-// Returns the size of the internal buffer.
-static WEBP_INLINE size_t VP8BitWriterSize(const VP8BitWriter* const bw) {
-  return bw->pos_;
-}
-
-//------------------------------------------------------------------------------
-// VP8LBitWriter
-
-#if defined(__x86_64__) || defined(_M_X64)   // 64bit
-typedef uint64_t vp8l_atype_t;   // accumulator type
-typedef uint32_t vp8l_wtype_t;   // writing type
-#define WSWAP HToLE32
-#define VP8L_WRITER_BYTES    4   // sizeof(vp8l_wtype_t)
-#define VP8L_WRITER_BITS     32  // 8 * sizeof(vp8l_wtype_t)
-#define VP8L_WRITER_MAX_BITS 64  // 8 * sizeof(vp8l_atype_t)
-#else
-typedef uint32_t vp8l_atype_t;
-typedef uint16_t vp8l_wtype_t;
-#define WSWAP HToLE16
-#define VP8L_WRITER_BYTES    2
-#define VP8L_WRITER_BITS     16
-#define VP8L_WRITER_MAX_BITS 32
-#endif
-
-typedef struct {
-  vp8l_atype_t bits_;   // bit accumulator
-  int          used_;   // number of bits used in accumulator
-  uint8_t*     buf_;    // start of buffer
-  uint8_t*     cur_;    // current write position
-  uint8_t*     end_;    // end of buffer
-
-  // After all bits are written (VP8LBitWriterFinish()), the caller must observe
-  // the state of error_. A value of 1 indicates that a memory allocation
-  // failure has happened during bit writing. A value of 0 indicates successful
-  // writing of bits.
-  int error_;
-} VP8LBitWriter;
-
-static WEBP_INLINE size_t VP8LBitWriterNumBytes(const VP8LBitWriter* const bw) {
-  return (bw->cur_ - bw->buf_) + ((bw->used_ + 7) >> 3);
-}
-
-// Returns false in case of memory allocation error.
-int VP8LBitWriterInit(VP8LBitWriter* const bw, size_t expected_size);
-// Returns false in case of memory allocation error.
-int VP8LBitWriterClone(const VP8LBitWriter* const src,
-                       VP8LBitWriter* const dst);
-// Finalize the bitstream coding. Returns a pointer to the internal buffer.
-uint8_t* VP8LBitWriterFinish(VP8LBitWriter* const bw);
-// Release any pending memory and zeroes the object.
-void VP8LBitWriterWipeOut(VP8LBitWriter* const bw);
-// Resets the cursor of the BitWriter bw to when it was like in bw_init.
-void VP8LBitWriterReset(const VP8LBitWriter* const bw_init,
-                        VP8LBitWriter* const bw);
-// Swaps the memory held by two BitWriters.
-void VP8LBitWriterSwap(VP8LBitWriter* const src, VP8LBitWriter* const dst);
-
-// Internal function for VP8LPutBits flushing 32 bits from the written state.
-void VP8LPutBitsFlushBits(VP8LBitWriter* const bw);
-
-// PutBits internal function used in the 16 bit vp8l_wtype_t case.
-void VP8LPutBitsInternal(VP8LBitWriter* const bw, uint32_t bits, int n_bits);
-
-// This function writes bits into bytes in increasing addresses (little endian),
-// and within a byte least-significant-bit first.
-// This function can write up to 32 bits in one go, but VP8LBitReader can only
-// read 24 bits max (VP8L_MAX_NUM_BIT_READ).
-// VP8LBitWriter's error_ flag is set in case of  memory allocation error.
-static WEBP_INLINE void VP8LPutBits(VP8LBitWriter* const bw,
-                                    uint32_t bits, int n_bits) {
-  if (sizeof(vp8l_wtype_t) == 4) {
-    if (n_bits > 0) {
-      if (bw->used_ >= 32) {
-        VP8LPutBitsFlushBits(bw);
-      }
-      bw->bits_ |= (vp8l_atype_t)bits << bw->used_;
-      bw->used_ += n_bits;
-    }
-  } else {
-    VP8LPutBitsInternal(bw, bits, n_bits);
-  }
-}
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_BIT_WRITER_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/color_cache_utils.c b/ios/Pods/libwebp/src/utils/color_cache_utils.c
deleted file mode 100644
index b09f538..0000000
--- a/ios/Pods/libwebp/src/utils/color_cache_utils.c
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Color Cache for WebP Lossless
-//
-// Author: Jyrki Alakuijala (jyrki@google.com)
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include "src/utils/color_cache_utils.h"
-#include "src/utils/utils.h"
-
-//------------------------------------------------------------------------------
-// VP8LColorCache.
-
-int VP8LColorCacheInit(VP8LColorCache* const cc, int hash_bits) {
-  const int hash_size = 1 << hash_bits;
-  assert(cc != NULL);
-  assert(hash_bits > 0);
-  cc->colors_ = (uint32_t*)WebPSafeCalloc((uint64_t)hash_size,
-                                          sizeof(*cc->colors_));
-  if (cc->colors_ == NULL) return 0;
-  cc->hash_shift_ = 32 - hash_bits;
-  cc->hash_bits_ = hash_bits;
-  return 1;
-}
-
-void VP8LColorCacheClear(VP8LColorCache* const cc) {
-  if (cc != NULL) {
-    WebPSafeFree(cc->colors_);
-    cc->colors_ = NULL;
-  }
-}
-
-void VP8LColorCacheCopy(const VP8LColorCache* const src,
-                        VP8LColorCache* const dst) {
-  assert(src != NULL);
-  assert(dst != NULL);
-  assert(src->hash_bits_ == dst->hash_bits_);
-  memcpy(dst->colors_, src->colors_,
-         ((size_t)1u << dst->hash_bits_) * sizeof(*dst->colors_));
-}
diff --git a/ios/Pods/libwebp/src/utils/color_cache_utils.h b/ios/Pods/libwebp/src/utils/color_cache_utils.h
deleted file mode 100644
index 20b7be1..0000000
--- a/ios/Pods/libwebp/src/utils/color_cache_utils.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Color Cache for WebP Lossless
-//
-// Authors: Jyrki Alakuijala (jyrki@google.com)
-//          Urvang Joshi (urvang@google.com)
-
-#ifndef WEBP_UTILS_COLOR_CACHE_UTILS_H_
-#define WEBP_UTILS_COLOR_CACHE_UTILS_H_
-
-#include <assert.h>
-
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Main color cache struct.
-typedef struct {
-  uint32_t *colors_;  // color entries
-  int hash_shift_;    // Hash shift: 32 - hash_bits_.
-  int hash_bits_;
-} VP8LColorCache;
-
-static const uint64_t kHashMul = 0x1e35a7bdull;
-
-static WEBP_INLINE int VP8LHashPix(uint32_t argb, int shift) {
-  return (int)(((argb * kHashMul) & 0xffffffffu) >> shift);
-}
-
-static WEBP_INLINE uint32_t VP8LColorCacheLookup(
-    const VP8LColorCache* const cc, uint32_t key) {
-  assert((key >> cc->hash_bits_) == 0u);
-  return cc->colors_[key];
-}
-
-static WEBP_INLINE void VP8LColorCacheSet(const VP8LColorCache* const cc,
-                                          uint32_t key, uint32_t argb) {
-  assert((key >> cc->hash_bits_) == 0u);
-  cc->colors_[key] = argb;
-}
-
-static WEBP_INLINE void VP8LColorCacheInsert(const VP8LColorCache* const cc,
-                                             uint32_t argb) {
-  const int key = VP8LHashPix(argb, cc->hash_shift_);
-  cc->colors_[key] = argb;
-}
-
-static WEBP_INLINE int VP8LColorCacheGetIndex(const VP8LColorCache* const cc,
-                                              uint32_t argb) {
-  return VP8LHashPix(argb, cc->hash_shift_);
-}
-
-// Return the key if cc contains argb, and -1 otherwise.
-static WEBP_INLINE int VP8LColorCacheContains(const VP8LColorCache* const cc,
-                                              uint32_t argb) {
-  const int key = VP8LHashPix(argb, cc->hash_shift_);
-  return (cc->colors_[key] == argb) ? key : -1;
-}
-
-//------------------------------------------------------------------------------
-
-// Initializes the color cache with 'hash_bits' bits for the keys.
-// Returns false in case of memory error.
-int VP8LColorCacheInit(VP8LColorCache* const color_cache, int hash_bits);
-
-void VP8LColorCacheCopy(const VP8LColorCache* const src,
-                        VP8LColorCache* const dst);
-
-// Delete the memory associated to color cache.
-void VP8LColorCacheClear(VP8LColorCache* const color_cache);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // WEBP_UTILS_COLOR_CACHE_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/endian_inl_utils.h b/ios/Pods/libwebp/src/utils/endian_inl_utils.h
deleted file mode 100644
index 3630a29..0000000
--- a/ios/Pods/libwebp/src/utils/endian_inl_utils.h
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2014 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Endian related functions.
-
-#ifndef WEBP_UTILS_ENDIAN_INL_UTILS_H_
-#define WEBP_UTILS_ENDIAN_INL_UTILS_H_
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include "src/dsp/dsp.h"
-#include "src/webp/types.h"
-
-#if defined(WORDS_BIGENDIAN)
-#define HToLE32 BSwap32
-#define HToLE16 BSwap16
-#else
-#define HToLE32(x) (x)
-#define HToLE16(x) (x)
-#endif
-
-#if !defined(HAVE_CONFIG_H)
-#if LOCAL_GCC_PREREQ(4,8) || __has_builtin(__builtin_bswap16)
-#define HAVE_BUILTIN_BSWAP16
-#endif
-#if LOCAL_GCC_PREREQ(4,3) || __has_builtin(__builtin_bswap32)
-#define HAVE_BUILTIN_BSWAP32
-#endif
-#if LOCAL_GCC_PREREQ(4,3) || __has_builtin(__builtin_bswap64)
-#define HAVE_BUILTIN_BSWAP64
-#endif
-#endif  // !HAVE_CONFIG_H
-
-static WEBP_INLINE uint16_t BSwap16(uint16_t x) {
-#if defined(HAVE_BUILTIN_BSWAP16)
-  return __builtin_bswap16(x);
-#elif defined(_MSC_VER)
-  return _byteswap_ushort(x);
-#else
-  // gcc will recognize a 'rorw $8, ...' here:
-  return (x >> 8) | ((x & 0xff) << 8);
-#endif  // HAVE_BUILTIN_BSWAP16
-}
-
-static WEBP_INLINE uint32_t BSwap32(uint32_t x) {
-#if defined(WEBP_USE_MIPS32_R2)
-  uint32_t ret;
-  __asm__ volatile (
-    "wsbh   %[ret], %[x]          \n\t"
-    "rotr   %[ret], %[ret],  16   \n\t"
-    : [ret]"=r"(ret)
-    : [x]"r"(x)
-  );
-  return ret;
-#elif defined(HAVE_BUILTIN_BSWAP32)
-  return __builtin_bswap32(x);
-#elif defined(__i386__) || defined(__x86_64__)
-  uint32_t swapped_bytes;
-  __asm__ volatile("bswap %0" : "=r"(swapped_bytes) : "0"(x));
-  return swapped_bytes;
-#elif defined(_MSC_VER)
-  return (uint32_t)_byteswap_ulong(x);
-#else
-  return (x >> 24) | ((x >> 8) & 0xff00) | ((x << 8) & 0xff0000) | (x << 24);
-#endif  // HAVE_BUILTIN_BSWAP32
-}
-
-static WEBP_INLINE uint64_t BSwap64(uint64_t x) {
-#if defined(HAVE_BUILTIN_BSWAP64)
-  return __builtin_bswap64(x);
-#elif defined(__x86_64__)
-  uint64_t swapped_bytes;
-  __asm__ volatile("bswapq %0" : "=r"(swapped_bytes) : "0"(x));
-  return swapped_bytes;
-#elif defined(_MSC_VER)
-  return (uint64_t)_byteswap_uint64(x);
-#else  // generic code for swapping 64-bit values (suggested by bdb@)
-  x = ((x & 0xffffffff00000000ull) >> 32) | ((x & 0x00000000ffffffffull) << 32);
-  x = ((x & 0xffff0000ffff0000ull) >> 16) | ((x & 0x0000ffff0000ffffull) << 16);
-  x = ((x & 0xff00ff00ff00ff00ull) >>  8) | ((x & 0x00ff00ff00ff00ffull) <<  8);
-  return x;
-#endif  // HAVE_BUILTIN_BSWAP64
-}
-
-#endif  // WEBP_UTILS_ENDIAN_INL_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/filters_utils.c b/ios/Pods/libwebp/src/utils/filters_utils.c
deleted file mode 100644
index bbc2c34..0000000
--- a/ios/Pods/libwebp/src/utils/filters_utils.c
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// filter estimation
-//
-// Author: Urvang (urvang@google.com)
-
-#include "src/utils/filters_utils.h"
-#include <stdlib.h>
-#include <string.h>
-
-// -----------------------------------------------------------------------------
-// Quick estimate of a potentially interesting filter mode to try.
-
-#define SMAX 16
-#define SDIFF(a, b) (abs((a) - (b)) >> 4)   // Scoring diff, in [0..SMAX)
-
-static WEBP_INLINE int GradientPredictor(uint8_t a, uint8_t b, uint8_t c) {
-  const int g = a + b - c;
-  return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255;  // clip to 8bit
-}
-
-WEBP_FILTER_TYPE WebPEstimateBestFilter(const uint8_t* data,
-                                        int width, int height, int stride) {
-  int i, j;
-  int bins[WEBP_FILTER_LAST][SMAX];
-  memset(bins, 0, sizeof(bins));
-
-  // We only sample every other pixels. That's enough.
-  for (j = 2; j < height - 1; j += 2) {
-    const uint8_t* const p = data + j * stride;
-    int mean = p[0];
-    for (i = 2; i < width - 1; i += 2) {
-      const int diff0 = SDIFF(p[i], mean);
-      const int diff1 = SDIFF(p[i], p[i - 1]);
-      const int diff2 = SDIFF(p[i], p[i - width]);
-      const int grad_pred =
-          GradientPredictor(p[i - 1], p[i - width], p[i - width - 1]);
-      const int diff3 = SDIFF(p[i], grad_pred);
-      bins[WEBP_FILTER_NONE][diff0] = 1;
-      bins[WEBP_FILTER_HORIZONTAL][diff1] = 1;
-      bins[WEBP_FILTER_VERTICAL][diff2] = 1;
-      bins[WEBP_FILTER_GRADIENT][diff3] = 1;
-      mean = (3 * mean + p[i] + 2) >> 2;
-    }
-  }
-  {
-    int filter;
-    WEBP_FILTER_TYPE best_filter = WEBP_FILTER_NONE;
-    int best_score = 0x7fffffff;
-    for (filter = WEBP_FILTER_NONE; filter < WEBP_FILTER_LAST; ++filter) {
-      int score = 0;
-      for (i = 0; i < SMAX; ++i) {
-        if (bins[filter][i] > 0) {
-          score += i;
-        }
-      }
-      if (score < best_score) {
-        best_score = score;
-        best_filter = (WEBP_FILTER_TYPE)filter;
-      }
-    }
-    return best_filter;
-  }
-}
-
-#undef SMAX
-#undef SDIFF
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/utils/filters_utils.h b/ios/Pods/libwebp/src/utils/filters_utils.h
deleted file mode 100644
index 61da66e..0000000
--- a/ios/Pods/libwebp/src/utils/filters_utils.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Spatial prediction using various filters
-//
-// Author: Urvang (urvang@google.com)
-
-#ifndef WEBP_UTILS_FILTERS_UTILS_H_
-#define WEBP_UTILS_FILTERS_UTILS_H_
-
-#include "src/webp/types.h"
-#include "src/dsp/dsp.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Fast estimate of a potentially good filter.
-WEBP_FILTER_TYPE WebPEstimateBestFilter(const uint8_t* data,
-                                        int width, int height, int stride);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_FILTERS_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/huffman_encode_utils.c b/ios/Pods/libwebp/src/utils/huffman_encode_utils.c
deleted file mode 100644
index 6f3b1bb..0000000
--- a/ios/Pods/libwebp/src/utils/huffman_encode_utils.c
+++ /dev/null
@@ -1,417 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Jyrki Alakuijala (jyrki@google.com)
-//
-// Entropy encoding (Huffman) for webp lossless.
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include "src/utils/huffman_encode_utils.h"
-#include "src/utils/utils.h"
-#include "src/webp/format_constants.h"
-
-// -----------------------------------------------------------------------------
-// Util function to optimize the symbol map for RLE coding
-
-// Heuristics for selecting the stride ranges to collapse.
-static int ValuesShouldBeCollapsedToStrideAverage(int a, int b) {
-  return abs(a - b) < 4;
-}
-
-// Change the population counts in a way that the consequent
-// Huffman tree compression, especially its RLE-part, give smaller output.
-static void OptimizeHuffmanForRle(int length, uint8_t* const good_for_rle,
-                                  uint32_t* const counts) {
-  // 1) Let's make the Huffman code more compatible with rle encoding.
-  int i;
-  for (; length >= 0; --length) {
-    if (length == 0) {
-      return;  // All zeros.
-    }
-    if (counts[length - 1] != 0) {
-      // Now counts[0..length - 1] does not have trailing zeros.
-      break;
-    }
-  }
-  // 2) Let's mark all population counts that already can be encoded
-  // with an rle code.
-  {
-    // Let's not spoil any of the existing good rle codes.
-    // Mark any seq of 0's that is longer as 5 as a good_for_rle.
-    // Mark any seq of non-0's that is longer as 7 as a good_for_rle.
-    uint32_t symbol = counts[0];
-    int stride = 0;
-    for (i = 0; i < length + 1; ++i) {
-      if (i == length || counts[i] != symbol) {
-        if ((symbol == 0 && stride >= 5) ||
-            (symbol != 0 && stride >= 7)) {
-          int k;
-          for (k = 0; k < stride; ++k) {
-            good_for_rle[i - k - 1] = 1;
-          }
-        }
-        stride = 1;
-        if (i != length) {
-          symbol = counts[i];
-        }
-      } else {
-        ++stride;
-      }
-    }
-  }
-  // 3) Let's replace those population counts that lead to more rle codes.
-  {
-    uint32_t stride = 0;
-    uint32_t limit = counts[0];
-    uint32_t sum = 0;
-    for (i = 0; i < length + 1; ++i) {
-      if (i == length || good_for_rle[i] ||
-          (i != 0 && good_for_rle[i - 1]) ||
-          !ValuesShouldBeCollapsedToStrideAverage(counts[i], limit)) {
-        if (stride >= 4 || (stride >= 3 && sum == 0)) {
-          uint32_t k;
-          // The stride must end, collapse what we have, if we have enough (4).
-          uint32_t count = (sum + stride / 2) / stride;
-          if (count < 1) {
-            count = 1;
-          }
-          if (sum == 0) {
-            // Don't make an all zeros stride to be upgraded to ones.
-            count = 0;
-          }
-          for (k = 0; k < stride; ++k) {
-            // We don't want to change value at counts[i],
-            // that is already belonging to the next stride. Thus - 1.
-            counts[i - k - 1] = count;
-          }
-        }
-        stride = 0;
-        sum = 0;
-        if (i < length - 3) {
-          // All interesting strides have a count of at least 4,
-          // at least when non-zeros.
-          limit = (counts[i] + counts[i + 1] +
-                   counts[i + 2] + counts[i + 3] + 2) / 4;
-        } else if (i < length) {
-          limit = counts[i];
-        } else {
-          limit = 0;
-        }
-      }
-      ++stride;
-      if (i != length) {
-        sum += counts[i];
-        if (stride >= 4) {
-          limit = (sum + stride / 2) / stride;
-        }
-      }
-    }
-  }
-}
-
-// A comparer function for two Huffman trees: sorts first by 'total count'
-// (more comes first), and then by 'value' (more comes first).
-static int CompareHuffmanTrees(const void* ptr1, const void* ptr2) {
-  const HuffmanTree* const t1 = (const HuffmanTree*)ptr1;
-  const HuffmanTree* const t2 = (const HuffmanTree*)ptr2;
-  if (t1->total_count_ > t2->total_count_) {
-    return -1;
-  } else if (t1->total_count_ < t2->total_count_) {
-    return 1;
-  } else {
-    assert(t1->value_ != t2->value_);
-    return (t1->value_ < t2->value_) ? -1 : 1;
-  }
-}
-
-static void SetBitDepths(const HuffmanTree* const tree,
-                         const HuffmanTree* const pool,
-                         uint8_t* const bit_depths, int level) {
-  if (tree->pool_index_left_ >= 0) {
-    SetBitDepths(&pool[tree->pool_index_left_], pool, bit_depths, level + 1);
-    SetBitDepths(&pool[tree->pool_index_right_], pool, bit_depths, level + 1);
-  } else {
-    bit_depths[tree->value_] = level;
-  }
-}
-
-// Create an optimal Huffman tree.
-//
-// (data,length): population counts.
-// tree_limit: maximum bit depth (inclusive) of the codes.
-// bit_depths[]: how many bits are used for the symbol.
-//
-// Returns 0 when an error has occurred.
-//
-// The catch here is that the tree cannot be arbitrarily deep
-//
-// count_limit is the value that is to be faked as the minimum value
-// and this minimum value is raised until the tree matches the
-// maximum length requirement.
-//
-// This algorithm is not of excellent performance for very long data blocks,
-// especially when population counts are longer than 2**tree_limit, but
-// we are not planning to use this with extremely long blocks.
-//
-// See http://en.wikipedia.org/wiki/Huffman_coding
-static void GenerateOptimalTree(const uint32_t* const histogram,
-                                int histogram_size,
-                                HuffmanTree* tree, int tree_depth_limit,
-                                uint8_t* const bit_depths) {
-  uint32_t count_min;
-  HuffmanTree* tree_pool;
-  int tree_size_orig = 0;
-  int i;
-
-  for (i = 0; i < histogram_size; ++i) {
-    if (histogram[i] != 0) {
-      ++tree_size_orig;
-    }
-  }
-
-  if (tree_size_orig == 0) {   // pretty optimal already!
-    return;
-  }
-
-  tree_pool = tree + tree_size_orig;
-
-  // For block sizes with less than 64k symbols we never need to do a
-  // second iteration of this loop.
-  // If we actually start running inside this loop a lot, we would perhaps
-  // be better off with the Katajainen algorithm.
-  assert(tree_size_orig <= (1 << (tree_depth_limit - 1)));
-  for (count_min = 1; ; count_min *= 2) {
-    int tree_size = tree_size_orig;
-    // We need to pack the Huffman tree in tree_depth_limit bits.
-    // So, we try by faking histogram entries to be at least 'count_min'.
-    int idx = 0;
-    int j;
-    for (j = 0; j < histogram_size; ++j) {
-      if (histogram[j] != 0) {
-        const uint32_t count =
-            (histogram[j] < count_min) ? count_min : histogram[j];
-        tree[idx].total_count_ = count;
-        tree[idx].value_ = j;
-        tree[idx].pool_index_left_ = -1;
-        tree[idx].pool_index_right_ = -1;
-        ++idx;
-      }
-    }
-
-    // Build the Huffman tree.
-    qsort(tree, tree_size, sizeof(*tree), CompareHuffmanTrees);
-
-    if (tree_size > 1) {  // Normal case.
-      int tree_pool_size = 0;
-      while (tree_size > 1) {  // Finish when we have only one root.
-        uint32_t count;
-        tree_pool[tree_pool_size++] = tree[tree_size - 1];
-        tree_pool[tree_pool_size++] = tree[tree_size - 2];
-        count = tree_pool[tree_pool_size - 1].total_count_ +
-                tree_pool[tree_pool_size - 2].total_count_;
-        tree_size -= 2;
-        {
-          // Search for the insertion point.
-          int k;
-          for (k = 0; k < tree_size; ++k) {
-            if (tree[k].total_count_ <= count) {
-              break;
-            }
-          }
-          memmove(tree + (k + 1), tree + k, (tree_size - k) * sizeof(*tree));
-          tree[k].total_count_ = count;
-          tree[k].value_ = -1;
-
-          tree[k].pool_index_left_ = tree_pool_size - 1;
-          tree[k].pool_index_right_ = tree_pool_size - 2;
-          tree_size = tree_size + 1;
-        }
-      }
-      SetBitDepths(&tree[0], tree_pool, bit_depths, 0);
-    } else if (tree_size == 1) {  // Trivial case: only one element.
-      bit_depths[tree[0].value_] = 1;
-    }
-
-    {
-      // Test if this Huffman tree satisfies our 'tree_depth_limit' criteria.
-      int max_depth = bit_depths[0];
-      for (j = 1; j < histogram_size; ++j) {
-        if (max_depth < bit_depths[j]) {
-          max_depth = bit_depths[j];
-        }
-      }
-      if (max_depth <= tree_depth_limit) {
-        break;
-      }
-    }
-  }
-}
-
-// -----------------------------------------------------------------------------
-// Coding of the Huffman tree values
-
-static HuffmanTreeToken* CodeRepeatedValues(int repetitions,
-                                            HuffmanTreeToken* tokens,
-                                            int value, int prev_value) {
-  assert(value <= MAX_ALLOWED_CODE_LENGTH);
-  if (value != prev_value) {
-    tokens->code = value;
-    tokens->extra_bits = 0;
-    ++tokens;
-    --repetitions;
-  }
-  while (repetitions >= 1) {
-    if (repetitions < 3) {
-      int i;
-      for (i = 0; i < repetitions; ++i) {
-        tokens->code = value;
-        tokens->extra_bits = 0;
-        ++tokens;
-      }
-      break;
-    } else if (repetitions < 7) {
-      tokens->code = 16;
-      tokens->extra_bits = repetitions - 3;
-      ++tokens;
-      break;
-    } else {
-      tokens->code = 16;
-      tokens->extra_bits = 3;
-      ++tokens;
-      repetitions -= 6;
-    }
-  }
-  return tokens;
-}
-
-static HuffmanTreeToken* CodeRepeatedZeros(int repetitions,
-                                           HuffmanTreeToken* tokens) {
-  while (repetitions >= 1) {
-    if (repetitions < 3) {
-      int i;
-      for (i = 0; i < repetitions; ++i) {
-        tokens->code = 0;   // 0-value
-        tokens->extra_bits = 0;
-        ++tokens;
-      }
-      break;
-    } else if (repetitions < 11) {
-      tokens->code = 17;
-      tokens->extra_bits = repetitions - 3;
-      ++tokens;
-      break;
-    } else if (repetitions < 139) {
-      tokens->code = 18;
-      tokens->extra_bits = repetitions - 11;
-      ++tokens;
-      break;
-    } else {
-      tokens->code = 18;
-      tokens->extra_bits = 0x7f;  // 138 repeated 0s
-      ++tokens;
-      repetitions -= 138;
-    }
-  }
-  return tokens;
-}
-
-int VP8LCreateCompressedHuffmanTree(const HuffmanTreeCode* const tree,
-                                    HuffmanTreeToken* tokens, int max_tokens) {
-  HuffmanTreeToken* const starting_token = tokens;
-  HuffmanTreeToken* const ending_token = tokens + max_tokens;
-  const int depth_size = tree->num_symbols;
-  int prev_value = 8;  // 8 is the initial value for rle.
-  int i = 0;
-  assert(tokens != NULL);
-  while (i < depth_size) {
-    const int value = tree->code_lengths[i];
-    int k = i + 1;
-    int runs;
-    while (k < depth_size && tree->code_lengths[k] == value) ++k;
-    runs = k - i;
-    if (value == 0) {
-      tokens = CodeRepeatedZeros(runs, tokens);
-    } else {
-      tokens = CodeRepeatedValues(runs, tokens, value, prev_value);
-      prev_value = value;
-    }
-    i += runs;
-    assert(tokens <= ending_token);
-  }
-  (void)ending_token;    // suppress 'unused variable' warning
-  return (int)(tokens - starting_token);
-}
-
-// -----------------------------------------------------------------------------
-
-// Pre-reversed 4-bit values.
-static const uint8_t kReversedBits[16] = {
-  0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe,
-  0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf
-};
-
-static uint32_t ReverseBits(int num_bits, uint32_t bits) {
-  uint32_t retval = 0;
-  int i = 0;
-  while (i < num_bits) {
-    i += 4;
-    retval |= kReversedBits[bits & 0xf] << (MAX_ALLOWED_CODE_LENGTH + 1 - i);
-    bits >>= 4;
-  }
-  retval >>= (MAX_ALLOWED_CODE_LENGTH + 1 - num_bits);
-  return retval;
-}
-
-// Get the actual bit values for a tree of bit depths.
-static void ConvertBitDepthsToSymbols(HuffmanTreeCode* const tree) {
-  // 0 bit-depth means that the symbol does not exist.
-  int i;
-  int len;
-  uint32_t next_code[MAX_ALLOWED_CODE_LENGTH + 1];
-  int depth_count[MAX_ALLOWED_CODE_LENGTH + 1] = { 0 };
-
-  assert(tree != NULL);
-  len = tree->num_symbols;
-  for (i = 0; i < len; ++i) {
-    const int code_length = tree->code_lengths[i];
-    assert(code_length <= MAX_ALLOWED_CODE_LENGTH);
-    ++depth_count[code_length];
-  }
-  depth_count[0] = 0;  // ignore unused symbol
-  next_code[0] = 0;
-  {
-    uint32_t code = 0;
-    for (i = 1; i <= MAX_ALLOWED_CODE_LENGTH; ++i) {
-      code = (code + depth_count[i - 1]) << 1;
-      next_code[i] = code;
-    }
-  }
-  for (i = 0; i < len; ++i) {
-    const int code_length = tree->code_lengths[i];
-    tree->codes[i] = ReverseBits(code_length, next_code[code_length]++);
-  }
-}
-
-// -----------------------------------------------------------------------------
-// Main entry point
-
-void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit,
-                           uint8_t* const buf_rle,
-                           HuffmanTree* const huff_tree,
-                           HuffmanTreeCode* const huff_code) {
-  const int num_symbols = huff_code->num_symbols;
-  memset(buf_rle, 0, num_symbols * sizeof(*buf_rle));
-  OptimizeHuffmanForRle(num_symbols, buf_rle, histogram);
-  GenerateOptimalTree(histogram, num_symbols, huff_tree, tree_depth_limit,
-                      huff_code->code_lengths);
-  // Create the actual bit codes for the bit lengths.
-  ConvertBitDepthsToSymbols(huff_code);
-}
diff --git a/ios/Pods/libwebp/src/utils/huffman_encode_utils.h b/ios/Pods/libwebp/src/utils/huffman_encode_utils.h
deleted file mode 100644
index 3e6763c..0000000
--- a/ios/Pods/libwebp/src/utils/huffman_encode_utils.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Author: Jyrki Alakuijala (jyrki@google.com)
-//
-// Entropy encoding (Huffman) for webp lossless
-
-#ifndef WEBP_UTILS_HUFFMAN_ENCODE_UTILS_H_
-#define WEBP_UTILS_HUFFMAN_ENCODE_UTILS_H_
-
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Struct for holding the tree header in coded form.
-typedef struct {
-  uint8_t code;         // value (0..15) or escape code (16,17,18)
-  uint8_t extra_bits;   // extra bits for escape codes
-} HuffmanTreeToken;
-
-// Struct to represent the tree codes (depth and bits array).
-typedef struct {
-  int       num_symbols;   // Number of symbols.
-  uint8_t*  code_lengths;  // Code lengths of the symbols.
-  uint16_t* codes;         // Symbol Codes.
-} HuffmanTreeCode;
-
-// Struct to represent the Huffman tree.
-typedef struct {
-  uint32_t total_count_;   // Symbol frequency.
-  int value_;              // Symbol value.
-  int pool_index_left_;    // Index for the left sub-tree.
-  int pool_index_right_;   // Index for the right sub-tree.
-} HuffmanTree;
-
-// Turn the Huffman tree into a token sequence.
-// Returns the number of tokens used.
-int VP8LCreateCompressedHuffmanTree(const HuffmanTreeCode* const tree,
-                                    HuffmanTreeToken* tokens, int max_tokens);
-
-// Create an optimized tree, and tokenize it.
-// 'buf_rle' and 'huff_tree' are pre-allocated and the 'tree' is the constructed
-// huffman code tree.
-void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit,
-                           uint8_t* const buf_rle, HuffmanTree* const huff_tree,
-                           HuffmanTreeCode* const tree);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // WEBP_UTILS_HUFFMAN_ENCODE_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/huffman_utils.c b/ios/Pods/libwebp/src/utils/huffman_utils.c
deleted file mode 100644
index 7a69963..0000000
--- a/ios/Pods/libwebp/src/utils/huffman_utils.c
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Utilities for building and looking up Huffman trees.
-//
-// Author: Urvang Joshi (urvang@google.com)
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include "src/utils/huffman_utils.h"
-#include "src/utils/utils.h"
-#include "src/webp/format_constants.h"
-
-// Huffman data read via DecodeImageStream is represented in two (red and green)
-// bytes.
-#define MAX_HTREE_GROUPS    0x10000
-
-HTreeGroup* VP8LHtreeGroupsNew(int num_htree_groups) {
-  HTreeGroup* const htree_groups =
-      (HTreeGroup*)WebPSafeMalloc(num_htree_groups, sizeof(*htree_groups));
-  if (htree_groups == NULL) {
-    return NULL;
-  }
-  assert(num_htree_groups <= MAX_HTREE_GROUPS);
-  return htree_groups;
-}
-
-void VP8LHtreeGroupsFree(HTreeGroup* const htree_groups) {
-  if (htree_groups != NULL) {
-    WebPSafeFree(htree_groups);
-  }
-}
-
-// Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the
-// bit-wise reversal of the len least significant bits of key.
-static WEBP_INLINE uint32_t GetNextKey(uint32_t key, int len) {
-  uint32_t step = 1 << (len - 1);
-  while (key & step) {
-    step >>= 1;
-  }
-  return step ? (key & (step - 1)) + step : key;
-}
-
-// Stores code in table[0], table[step], table[2*step], ..., table[end].
-// Assumes that end is an integer multiple of step.
-static WEBP_INLINE void ReplicateValue(HuffmanCode* table,
-                                       int step, int end,
-                                       HuffmanCode code) {
-  assert(end % step == 0);
-  do {
-    end -= step;
-    table[end] = code;
-  } while (end > 0);
-}
-
-// Returns the table width of the next 2nd level table. count is the histogram
-// of bit lengths for the remaining symbols, len is the code length of the next
-// processed symbol
-static WEBP_INLINE int NextTableBitSize(const int* const count,
-                                        int len, int root_bits) {
-  int left = 1 << (len - root_bits);
-  while (len < MAX_ALLOWED_CODE_LENGTH) {
-    left -= count[len];
-    if (left <= 0) break;
-    ++len;
-    left <<= 1;
-  }
-  return len - root_bits;
-}
-
-// sorted[code_lengths_size] is a pre-allocated array for sorting symbols
-// by code length.
-static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits,
-                             const int code_lengths[], int code_lengths_size,
-                             uint16_t sorted[]) {
-  HuffmanCode* table = root_table;  // next available space in table
-  int total_size = 1 << root_bits;  // total size root table + 2nd level table
-  int len;                          // current code length
-  int symbol;                       // symbol index in original or sorted table
-  // number of codes of each length:
-  int count[MAX_ALLOWED_CODE_LENGTH + 1] = { 0 };
-  // offsets in sorted table for each length:
-  int offset[MAX_ALLOWED_CODE_LENGTH + 1];
-
-  assert(code_lengths_size != 0);
-  assert(code_lengths != NULL);
-  assert(root_table != NULL);
-  assert(root_bits > 0);
-
-  // Build histogram of code lengths.
-  for (symbol = 0; symbol < code_lengths_size; ++symbol) {
-    if (code_lengths[symbol] > MAX_ALLOWED_CODE_LENGTH) {
-      return 0;
-    }
-    ++count[code_lengths[symbol]];
-  }
-
-  // Error, all code lengths are zeros.
-  if (count[0] == code_lengths_size) {
-    return 0;
-  }
-
-  // Generate offsets into sorted symbol table by code length.
-  offset[1] = 0;
-  for (len = 1; len < MAX_ALLOWED_CODE_LENGTH; ++len) {
-    if (count[len] > (1 << len)) {
-      return 0;
-    }
-    offset[len + 1] = offset[len] + count[len];
-  }
-
-  // Sort symbols by length, by symbol order within each length.
-  for (symbol = 0; symbol < code_lengths_size; ++symbol) {
-    const int symbol_code_length = code_lengths[symbol];
-    if (code_lengths[symbol] > 0) {
-      sorted[offset[symbol_code_length]++] = symbol;
-    }
-  }
-
-  // Special case code with only one value.
-  if (offset[MAX_ALLOWED_CODE_LENGTH] == 1) {
-    HuffmanCode code;
-    code.bits = 0;
-    code.value = (uint16_t)sorted[0];
-    ReplicateValue(table, 1, total_size, code);
-    return total_size;
-  }
-
-  {
-    int step;              // step size to replicate values in current table
-    uint32_t low = -1;     // low bits for current root entry
-    uint32_t mask = total_size - 1;    // mask for low bits
-    uint32_t key = 0;      // reversed prefix code
-    int num_nodes = 1;     // number of Huffman tree nodes
-    int num_open = 1;      // number of open branches in current tree level
-    int table_bits = root_bits;        // key length of current table
-    int table_size = 1 << table_bits;  // size of current table
-    symbol = 0;
-    // Fill in root table.
-    for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {
-      num_open <<= 1;
-      num_nodes += num_open;
-      num_open -= count[len];
-      if (num_open < 0) {
-        return 0;
-      }
-      for (; count[len] > 0; --count[len]) {
-        HuffmanCode code;
-        code.bits = (uint8_t)len;
-        code.value = (uint16_t)sorted[symbol++];
-        ReplicateValue(&table[key], step, table_size, code);
-        key = GetNextKey(key, len);
-      }
-    }
-
-    // Fill in 2nd level tables and add pointers to root table.
-    for (len = root_bits + 1, step = 2; len <= MAX_ALLOWED_CODE_LENGTH;
-         ++len, step <<= 1) {
-      num_open <<= 1;
-      num_nodes += num_open;
-      num_open -= count[len];
-      if (num_open < 0) {
-        return 0;
-      }
-      for (; count[len] > 0; --count[len]) {
-        HuffmanCode code;
-        if ((key & mask) != low) {
-          table += table_size;
-          table_bits = NextTableBitSize(count, len, root_bits);
-          table_size = 1 << table_bits;
-          total_size += table_size;
-          low = key & mask;
-          root_table[low].bits = (uint8_t)(table_bits + root_bits);
-          root_table[low].value = (uint16_t)((table - root_table) - low);
-        }
-        code.bits = (uint8_t)(len - root_bits);
-        code.value = (uint16_t)sorted[symbol++];
-        ReplicateValue(&table[key >> root_bits], step, table_size, code);
-        key = GetNextKey(key, len);
-      }
-    }
-
-    // Check if tree is full.
-    if (num_nodes != 2 * offset[MAX_ALLOWED_CODE_LENGTH] - 1) {
-      return 0;
-    }
-  }
-
-  return total_size;
-}
-
-// Maximum code_lengths_size is 2328 (reached for 11-bit color_cache_bits).
-// More commonly, the value is around ~280.
-#define MAX_CODE_LENGTHS_SIZE \
-  ((1 << MAX_CACHE_BITS) + NUM_LITERAL_CODES + NUM_LENGTH_CODES)
-// Cut-off value for switching between heap and stack allocation.
-#define SORTED_SIZE_CUTOFF 512
-int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits,
-                          const int code_lengths[], int code_lengths_size) {
-  int total_size;
-  assert(code_lengths_size <= MAX_CODE_LENGTHS_SIZE);
-  if (code_lengths_size <= SORTED_SIZE_CUTOFF) {
-    // use local stack-allocated array.
-    uint16_t sorted[SORTED_SIZE_CUTOFF];
-    total_size = BuildHuffmanTable(root_table, root_bits,
-                                   code_lengths, code_lengths_size, sorted);
-  } else {   // rare case. Use heap allocation.
-    uint16_t* const sorted =
-        (uint16_t*)WebPSafeMalloc(code_lengths_size, sizeof(*sorted));
-    if (sorted == NULL) return 0;
-    total_size = BuildHuffmanTable(root_table, root_bits,
-                                   code_lengths, code_lengths_size, sorted);
-    WebPSafeFree(sorted);
-  }
-  return total_size;
-}
diff --git a/ios/Pods/libwebp/src/utils/huffman_utils.h b/ios/Pods/libwebp/src/utils/huffman_utils.h
deleted file mode 100644
index ff7ef17..0000000
--- a/ios/Pods/libwebp/src/utils/huffman_utils.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Utilities for building and looking up Huffman trees.
-//
-// Author: Urvang Joshi (urvang@google.com)
-
-#ifndef WEBP_UTILS_HUFFMAN_UTILS_H_
-#define WEBP_UTILS_HUFFMAN_UTILS_H_
-
-#include <assert.h>
-#include "src/webp/format_constants.h"
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define HUFFMAN_TABLE_BITS      8
-#define HUFFMAN_TABLE_MASK      ((1 << HUFFMAN_TABLE_BITS) - 1)
-
-#define LENGTHS_TABLE_BITS      7
-#define LENGTHS_TABLE_MASK      ((1 << LENGTHS_TABLE_BITS) - 1)
-
-
-// Huffman lookup table entry
-typedef struct {
-  uint8_t bits;     // number of bits used for this symbol
-  uint16_t value;   // symbol value or table offset
-} HuffmanCode;
-
-// long version for holding 32b values
-typedef struct {
-  int bits;         // number of bits used for this symbol,
-                    // or an impossible value if not a literal code.
-  uint32_t value;   // 32b packed ARGB value if literal,
-                    // or non-literal symbol otherwise
-} HuffmanCode32;
-
-#define HUFFMAN_PACKED_BITS 6
-#define HUFFMAN_PACKED_TABLE_SIZE (1u << HUFFMAN_PACKED_BITS)
-
-// Huffman table group.
-// Includes special handling for the following cases:
-//  - is_trivial_literal: one common literal base for RED/BLUE/ALPHA (not GREEN)
-//  - is_trivial_code: only 1 code (no bit is read from bitstream)
-//  - use_packed_table: few enough literal symbols, so all the bit codes
-//    can fit into a small look-up table packed_table[]
-// The common literal base, if applicable, is stored in 'literal_arb'.
-typedef struct HTreeGroup HTreeGroup;
-struct HTreeGroup {
-  HuffmanCode* htrees[HUFFMAN_CODES_PER_META_CODE];
-  int      is_trivial_literal;  // True, if huffman trees for Red, Blue & Alpha
-                                // Symbols are trivial (have a single code).
-  uint32_t literal_arb;         // If is_trivial_literal is true, this is the
-                                // ARGB value of the pixel, with Green channel
-                                // being set to zero.
-  int is_trivial_code;          // true if is_trivial_literal with only one code
-  int use_packed_table;         // use packed table below for short literal code
-  // table mapping input bits to a packed values, or escape case to literal code
-  HuffmanCode32 packed_table[HUFFMAN_PACKED_TABLE_SIZE];
-};
-
-// Creates the instance of HTreeGroup with specified number of tree-groups.
-HTreeGroup* VP8LHtreeGroupsNew(int num_htree_groups);
-
-// Releases the memory allocated for HTreeGroup.
-void VP8LHtreeGroupsFree(HTreeGroup* const htree_groups);
-
-// Builds Huffman lookup table assuming code lengths are in symbol order.
-// The 'code_lengths' is pre-allocated temporary memory buffer used for creating
-// the huffman table.
-// Returns built table size or 0 in case of error (invalid tree or
-// memory error).
-int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits,
-                          const int code_lengths[], int code_lengths_size);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_HUFFMAN_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/quant_levels_dec_utils.c b/ios/Pods/libwebp/src/utils/quant_levels_dec_utils.c
deleted file mode 100644
index f65b6cd..0000000
--- a/ios/Pods/libwebp/src/utils/quant_levels_dec_utils.c
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Implement gradient smoothing: we replace a current alpha value by its
-// surrounding average if it's close enough (that is: the change will be less
-// than the minimum distance between two quantized level).
-// We use sliding window for computing the 2d moving average.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include "src/utils/quant_levels_dec_utils.h"
-
-#include <string.h>   // for memset
-
-#include "src/utils/utils.h"
-
-// #define USE_DITHERING   // uncomment to enable ordered dithering (not vital)
-
-#define FIX 16     // fix-point precision for averaging
-#define LFIX 2     // extra precision for look-up table
-#define LUT_SIZE ((1 << (8 + LFIX)) - 1)  // look-up table size
-
-#if defined(USE_DITHERING)
-
-#define DFIX 4           // extra precision for ordered dithering
-#define DSIZE 4          // dithering size (must be a power of two)
-// cf. http://en.wikipedia.org/wiki/Ordered_dithering
-static const uint8_t kOrderedDither[DSIZE][DSIZE] = {
-  {  0,  8,  2, 10 },     // coefficients are in DFIX fixed-point precision
-  { 12,  4, 14,  6 },
-  {  3, 11,  1,  9 },
-  { 15,  7, 13,  5 }
-};
-
-#else
-#define DFIX 0
-#endif
-
-typedef struct {
-  int width_, height_;  // dimension
-  int stride_;          // stride in bytes
-  int row_;             // current input row being processed
-  uint8_t* src_;        // input pointer
-  uint8_t* dst_;        // output pointer
-
-  int radius_;          // filter radius (=delay)
-  int scale_;           // normalization factor, in FIX bits precision
-
-  void* mem_;           // all memory
-
-  // various scratch buffers
-  uint16_t* start_;
-  uint16_t* cur_;
-  uint16_t* end_;
-  uint16_t* top_;
-  uint16_t* average_;
-
-  // input levels distribution
-  int num_levels_;       // number of quantized levels
-  int min_, max_;        // min and max level values
-  int min_level_dist_;   // smallest distance between two consecutive levels
-
-  int16_t* correction_;  // size = 1 + 2*LUT_SIZE  -> ~4k memory
-} SmoothParams;
-
-//------------------------------------------------------------------------------
-
-#define CLIP_8b_MASK (int)(~0U << (8 + DFIX))
-static WEBP_INLINE uint8_t clip_8b(int v) {
-  return (!(v & CLIP_8b_MASK)) ? (uint8_t)(v >> DFIX) : (v < 0) ? 0u : 255u;
-}
-#undef CLIP_8b_MASK
-
-// vertical accumulation
-static void VFilter(SmoothParams* const p) {
-  const uint8_t* src = p->src_;
-  const int w = p->width_;
-  uint16_t* const cur = p->cur_;
-  const uint16_t* const top = p->top_;
-  uint16_t* const out = p->end_;
-  uint16_t sum = 0;               // all arithmetic is modulo 16bit
-  int x;
-
-  for (x = 0; x < w; ++x) {
-    uint16_t new_value;
-    sum += src[x];
-    new_value = top[x] + sum;
-    out[x] = new_value - cur[x];  // vertical sum of 'r' pixels.
-    cur[x] = new_value;
-  }
-  // move input pointers one row down
-  p->top_ = p->cur_;
-  p->cur_ += w;
-  if (p->cur_ == p->end_) p->cur_ = p->start_;  // roll-over
-  // We replicate edges, as it's somewhat easier as a boundary condition.
-  // That's why we don't update the 'src' pointer on top/bottom area:
-  if (p->row_ >= 0 && p->row_ < p->height_ - 1) {
-    p->src_ += p->stride_;
-  }
-}
-
-// horizontal accumulation. We use mirror replication of missing pixels, as it's
-// a little easier to implement (surprisingly).
-static void HFilter(SmoothParams* const p) {
-  const uint16_t* const in = p->end_;
-  uint16_t* const out = p->average_;
-  const uint32_t scale = p->scale_;
-  const int w = p->width_;
-  const int r = p->radius_;
-
-  int x;
-  for (x = 0; x <= r; ++x) {   // left mirroring
-    const uint16_t delta = in[x + r - 1] + in[r - x];
-    out[x] = (delta * scale) >> FIX;
-  }
-  for (; x < w - r; ++x) {     // bulk middle run
-    const uint16_t delta = in[x + r] - in[x - r - 1];
-    out[x] = (delta * scale) >> FIX;
-  }
-  for (; x < w; ++x) {         // right mirroring
-    const uint16_t delta =
-        2 * in[w - 1] - in[2 * w - 2 - r - x] - in[x - r - 1];
-    out[x] = (delta * scale) >> FIX;
-  }
-}
-
-// emit one filtered output row
-static void ApplyFilter(SmoothParams* const p) {
-  const uint16_t* const average = p->average_;
-  const int w = p->width_;
-  const int16_t* const correction = p->correction_;
-#if defined(USE_DITHERING)
-  const uint8_t* const dither = kOrderedDither[p->row_ % DSIZE];
-#endif
-  uint8_t* const dst = p->dst_;
-  int x;
-  for (x = 0; x < w; ++x) {
-    const int v = dst[x];
-    if (v < p->max_ && v > p->min_) {
-      const int c = (v << DFIX) + correction[average[x] - (v << LFIX)];
-#if defined(USE_DITHERING)
-      dst[x] = clip_8b(c + dither[x % DSIZE]);
-#else
-      dst[x] = clip_8b(c);
-#endif
-    }
-  }
-  p->dst_ += p->stride_;  // advance output pointer
-}
-
-//------------------------------------------------------------------------------
-// Initialize correction table
-
-static void InitCorrectionLUT(int16_t* const lut, int min_dist) {
-  // The correction curve is:
-  //   f(x) = x for x <= threshold2
-  //   f(x) = 0 for x >= threshold1
-  // and a linear interpolation for range x=[threshold2, threshold1]
-  // (along with f(-x) = -f(x) symmetry).
-  // Note that: threshold2 = 3/4 * threshold1
-  const int threshold1 = min_dist << LFIX;
-  const int threshold2 = (3 * threshold1) >> 2;
-  const int max_threshold = threshold2 << DFIX;
-  const int delta = threshold1 - threshold2;
-  int i;
-  for (i = 1; i <= LUT_SIZE; ++i) {
-    int c = (i <= threshold2) ? (i << DFIX)
-          : (i < threshold1) ? max_threshold * (threshold1 - i) / delta
-          : 0;
-    c >>= LFIX;
-    lut[+i] = +c;
-    lut[-i] = -c;
-  }
-  lut[0] = 0;
-}
-
-static void CountLevels(SmoothParams* const p) {
-  int i, j, last_level;
-  uint8_t used_levels[256] = { 0 };
-  const uint8_t* data = p->src_;
-  p->min_ = 255;
-  p->max_ = 0;
-  for (j = 0; j < p->height_; ++j) {
-    for (i = 0; i < p->width_; ++i) {
-      const int v = data[i];
-      if (v < p->min_) p->min_ = v;
-      if (v > p->max_) p->max_ = v;
-      used_levels[v] = 1;
-    }
-    data += p->stride_;
-  }
-  // Compute the mininum distance between two non-zero levels.
-  p->min_level_dist_ = p->max_ - p->min_;
-  last_level = -1;
-  for (i = 0; i < 256; ++i) {
-    if (used_levels[i]) {
-      ++p->num_levels_;
-      if (last_level >= 0) {
-        const int level_dist = i - last_level;
-        if (level_dist < p->min_level_dist_) {
-          p->min_level_dist_ = level_dist;
-        }
-      }
-      last_level = i;
-    }
-  }
-}
-
-// Initialize all params.
-static int InitParams(uint8_t* const data, int width, int height, int stride,
-                      int radius, SmoothParams* const p) {
-  const int R = 2 * radius + 1;  // total size of the kernel
-
-  const size_t size_scratch_m = (R + 1) * width * sizeof(*p->start_);
-  const size_t size_m =  width * sizeof(*p->average_);
-  const size_t size_lut = (1 + 2 * LUT_SIZE) * sizeof(*p->correction_);
-  const size_t total_size = size_scratch_m + size_m + size_lut;
-  uint8_t* mem = (uint8_t*)WebPSafeMalloc(1U, total_size);
-
-  if (mem == NULL) return 0;
-  p->mem_ = (void*)mem;
-
-  p->start_ = (uint16_t*)mem;
-  p->cur_ = p->start_;
-  p->end_ = p->start_ + R * width;
-  p->top_ = p->end_ - width;
-  memset(p->top_, 0, width * sizeof(*p->top_));
-  mem += size_scratch_m;
-
-  p->average_ = (uint16_t*)mem;
-  mem += size_m;
-
-  p->width_ = width;
-  p->height_ = height;
-  p->stride_ = stride;
-  p->src_ = data;
-  p->dst_ = data;
-  p->radius_ = radius;
-  p->scale_ = (1 << (FIX + LFIX)) / (R * R);  // normalization constant
-  p->row_ = -radius;
-
-  // analyze the input distribution so we can best-fit the threshold
-  CountLevels(p);
-
-  // correction table
-  p->correction_ = ((int16_t*)mem) + LUT_SIZE;
-  InitCorrectionLUT(p->correction_, p->min_level_dist_);
-
-  return 1;
-}
-
-static void CleanupParams(SmoothParams* const p) {
-  WebPSafeFree(p->mem_);
-}
-
-int WebPDequantizeLevels(uint8_t* const data, int width, int height, int stride,
-                         int strength) {
-  int radius = 4 * strength / 100;
-
-  if (strength < 0 || strength > 100) return 0;
-  if (data == NULL || width <= 0 || height <= 0) return 0;  // bad params
-
-  // limit the filter size to not exceed the image dimensions
-  if (2 * radius + 1 > width) radius = (width - 1) >> 1;
-  if (2 * radius + 1 > height) radius = (height - 1) >> 1;
-
-  if (radius > 0) {
-    SmoothParams p;
-    memset(&p, 0, sizeof(p));
-    if (!InitParams(data, width, height, stride, radius, &p)) return 0;
-    if (p.num_levels_ > 2) {
-      for (; p.row_ < p.height_; ++p.row_) {
-        VFilter(&p);  // accumulate average of input
-        // Need to wait few rows in order to prime the filter,
-        // before emitting some output.
-        if (p.row_ >= p.radius_) {
-          HFilter(&p);
-          ApplyFilter(&p);
-        }
-      }
-    }
-    CleanupParams(&p);
-  }
-  return 1;
-}
diff --git a/ios/Pods/libwebp/src/utils/quant_levels_dec_utils.h b/ios/Pods/libwebp/src/utils/quant_levels_dec_utils.h
deleted file mode 100644
index 327f19f..0000000
--- a/ios/Pods/libwebp/src/utils/quant_levels_dec_utils.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Alpha plane de-quantization utility
-//
-// Author:  Vikas Arora (vikasa@google.com)
-
-#ifndef WEBP_UTILS_QUANT_LEVELS_DEC_UTILS_H_
-#define WEBP_UTILS_QUANT_LEVELS_DEC_UTILS_H_
-
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Apply post-processing to input 'data' of size 'width'x'height' assuming that
-// the source was quantized to a reduced number of levels. 'stride' is in bytes.
-// Strength is in [0..100] and controls the amount of dithering applied.
-// Returns false in case of error (data is NULL, invalid parameters,
-// malloc failure, ...).
-int WebPDequantizeLevels(uint8_t* const data, int width, int height, int stride,
-                         int strength);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_QUANT_LEVELS_DEC_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/quant_levels_utils.c b/ios/Pods/libwebp/src/utils/quant_levels_utils.c
deleted file mode 100644
index d65ad3c..0000000
--- a/ios/Pods/libwebp/src/utils/quant_levels_utils.c
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Quantize levels for specified number of quantization-levels ([2, 256]).
-// Min and max values are preserved (usual 0 and 255 for alpha plane).
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-
-#include "src/utils/quant_levels_utils.h"
-
-#define NUM_SYMBOLS     256
-
-#define MAX_ITER  6             // Maximum number of convergence steps.
-#define ERROR_THRESHOLD 1e-4    // MSE stopping criterion.
-
-// -----------------------------------------------------------------------------
-// Quantize levels.
-
-int QuantizeLevels(uint8_t* const data, int width, int height,
-                   int num_levels, uint64_t* const sse) {
-  int freq[NUM_SYMBOLS] = { 0 };
-  int q_level[NUM_SYMBOLS] = { 0 };
-  double inv_q_level[NUM_SYMBOLS] = { 0 };
-  int min_s = 255, max_s = 0;
-  const size_t data_size = height * width;
-  int i, num_levels_in, iter;
-  double last_err = 1.e38, err = 0.;
-  const double err_threshold = ERROR_THRESHOLD * data_size;
-
-  if (data == NULL) {
-    return 0;
-  }
-
-  if (width <= 0 || height <= 0) {
-    return 0;
-  }
-
-  if (num_levels < 2 || num_levels > 256) {
-    return 0;
-  }
-
-  {
-    size_t n;
-    num_levels_in = 0;
-    for (n = 0; n < data_size; ++n) {
-      num_levels_in += (freq[data[n]] == 0);
-      if (min_s > data[n]) min_s = data[n];
-      if (max_s < data[n]) max_s = data[n];
-      ++freq[data[n]];
-    }
-  }
-
-  if (num_levels_in <= num_levels) goto End;  // nothing to do!
-
-  // Start with uniformly spread centroids.
-  for (i = 0; i < num_levels; ++i) {
-    inv_q_level[i] = min_s + (double)(max_s - min_s) * i / (num_levels - 1);
-  }
-
-  // Fixed values. Won't be changed.
-  q_level[min_s] = 0;
-  q_level[max_s] = num_levels - 1;
-  assert(inv_q_level[0] == min_s);
-  assert(inv_q_level[num_levels - 1] == max_s);
-
-  // k-Means iterations.
-  for (iter = 0; iter < MAX_ITER; ++iter) {
-    double q_sum[NUM_SYMBOLS] = { 0 };
-    double q_count[NUM_SYMBOLS] = { 0 };
-    int s, slot = 0;
-
-    // Assign classes to representatives.
-    for (s = min_s; s <= max_s; ++s) {
-      // Keep track of the nearest neighbour 'slot'
-      while (slot < num_levels - 1 &&
-             2 * s > inv_q_level[slot] + inv_q_level[slot + 1]) {
-        ++slot;
-      }
-      if (freq[s] > 0) {
-        q_sum[slot] += s * freq[s];
-        q_count[slot] += freq[s];
-      }
-      q_level[s] = slot;
-    }
-
-    // Assign new representatives to classes.
-    if (num_levels > 2) {
-      for (slot = 1; slot < num_levels - 1; ++slot) {
-        const double count = q_count[slot];
-        if (count > 0.) {
-          inv_q_level[slot] = q_sum[slot] / count;
-        }
-      }
-    }
-
-    // Compute convergence error.
-    err = 0.;
-    for (s = min_s; s <= max_s; ++s) {
-      const double error = s - inv_q_level[q_level[s]];
-      err += freq[s] * error * error;
-    }
-
-    // Check for convergence: we stop as soon as the error is no
-    // longer improving.
-    if (last_err - err < err_threshold) break;
-    last_err = err;
-  }
-
-  // Remap the alpha plane to quantized values.
-  {
-    // double->int rounding operation can be costly, so we do it
-    // once for all before remapping. We also perform the data[] -> slot
-    // mapping, while at it (avoid one indirection in the final loop).
-    uint8_t map[NUM_SYMBOLS];
-    int s;
-    size_t n;
-    for (s = min_s; s <= max_s; ++s) {
-      const int slot = q_level[s];
-      map[s] = (uint8_t)(inv_q_level[slot] + .5);
-    }
-    // Final pass.
-    for (n = 0; n < data_size; ++n) {
-      data[n] = map[data[n]];
-    }
-  }
- End:
-  // Store sum of squared error if needed.
-  if (sse != NULL) *sse = (uint64_t)err;
-
-  return 1;
-}
-
diff --git a/ios/Pods/libwebp/src/utils/quant_levels_utils.h b/ios/Pods/libwebp/src/utils/quant_levels_utils.h
deleted file mode 100644
index 9ee3ea0..0000000
--- a/ios/Pods/libwebp/src/utils/quant_levels_utils.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Alpha plane quantization utility
-//
-// Author:  Vikas Arora (vikasa@google.com)
-
-#ifndef WEBP_UTILS_QUANT_LEVELS_UTILS_H_
-#define WEBP_UTILS_QUANT_LEVELS_UTILS_H_
-
-#include <stdlib.h>
-
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Replace the input 'data' of size 'width'x'height' with 'num-levels'
-// quantized values. If not NULL, 'sse' will contain the sum of squared error.
-// Valid range for 'num_levels' is [2, 256].
-// Returns false in case of error (data is NULL, or parameters are invalid).
-int QuantizeLevels(uint8_t* const data, int width, int height, int num_levels,
-                   uint64_t* const sse);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_QUANT_LEVELS_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/random_utils.c b/ios/Pods/libwebp/src/utils/random_utils.c
deleted file mode 100644
index 7edb3fe..0000000
--- a/ios/Pods/libwebp/src/utils/random_utils.c
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Pseudo-random utilities
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <string.h>
-#include "src/utils/random_utils.h"
-
-//------------------------------------------------------------------------------
-
-// 31b-range values
-static const uint32_t kRandomTable[VP8_RANDOM_TABLE_SIZE] = {
-  0x0de15230, 0x03b31886, 0x775faccb, 0x1c88626a, 0x68385c55, 0x14b3b828,
-  0x4a85fef8, 0x49ddb84b, 0x64fcf397, 0x5c550289, 0x4a290000, 0x0d7ec1da,
-  0x5940b7ab, 0x5492577d, 0x4e19ca72, 0x38d38c69, 0x0c01ee65, 0x32a1755f,
-  0x5437f652, 0x5abb2c32, 0x0faa57b1, 0x73f533e7, 0x685feeda, 0x7563cce2,
-  0x6e990e83, 0x4730a7ed, 0x4fc0d9c6, 0x496b153c, 0x4f1403fa, 0x541afb0c,
-  0x73990b32, 0x26d7cb1c, 0x6fcc3706, 0x2cbb77d8, 0x75762f2a, 0x6425ccdd,
-  0x24b35461, 0x0a7d8715, 0x220414a8, 0x141ebf67, 0x56b41583, 0x73e502e3,
-  0x44cab16f, 0x28264d42, 0x73baaefb, 0x0a50ebed, 0x1d6ab6fb, 0x0d3ad40b,
-  0x35db3b68, 0x2b081e83, 0x77ce6b95, 0x5181e5f0, 0x78853bbc, 0x009f9494,
-  0x27e5ed3c
-};
-
-void VP8InitRandom(VP8Random* const rg, float dithering) {
-  memcpy(rg->tab_, kRandomTable, sizeof(rg->tab_));
-  rg->index1_ = 0;
-  rg->index2_ = 31;
-  rg->amp_ = (dithering < 0.0) ? 0
-           : (dithering > 1.0) ? (1 << VP8_RANDOM_DITHER_FIX)
-           : (uint32_t)((1 << VP8_RANDOM_DITHER_FIX) * dithering);
-}
-
-//------------------------------------------------------------------------------
-
diff --git a/ios/Pods/libwebp/src/utils/random_utils.h b/ios/Pods/libwebp/src/utils/random_utils.h
deleted file mode 100644
index a5006f8..0000000
--- a/ios/Pods/libwebp/src/utils/random_utils.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Pseudo-random utilities
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_UTILS_RANDOM_UTILS_H_
-#define WEBP_UTILS_RANDOM_UTILS_H_
-
-#include <assert.h>
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define VP8_RANDOM_DITHER_FIX 8   // fixed-point precision for dithering
-#define VP8_RANDOM_TABLE_SIZE 55
-
-typedef struct {
-  int index1_, index2_;
-  uint32_t tab_[VP8_RANDOM_TABLE_SIZE];
-  int amp_;
-} VP8Random;
-
-// Initializes random generator with an amplitude 'dithering' in range [0..1].
-void VP8InitRandom(VP8Random* const rg, float dithering);
-
-// Returns a centered pseudo-random number with 'num_bits' amplitude.
-// (uses D.Knuth's Difference-based random generator).
-// 'amp' is in VP8_RANDOM_DITHER_FIX fixed-point precision.
-static WEBP_INLINE int VP8RandomBits2(VP8Random* const rg, int num_bits,
-                                      int amp) {
-  int diff;
-  assert(num_bits + VP8_RANDOM_DITHER_FIX <= 31);
-  diff = rg->tab_[rg->index1_] - rg->tab_[rg->index2_];
-  if (diff < 0) diff += (1u << 31);
-  rg->tab_[rg->index1_] = diff;
-  if (++rg->index1_ == VP8_RANDOM_TABLE_SIZE) rg->index1_ = 0;
-  if (++rg->index2_ == VP8_RANDOM_TABLE_SIZE) rg->index2_ = 0;
-  // sign-extend, 0-center
-  diff = (int)((uint32_t)diff << 1) >> (32 - num_bits);
-  diff = (diff * amp) >> VP8_RANDOM_DITHER_FIX;  // restrict range
-  diff += 1 << (num_bits - 1);                   // shift back to 0.5-center
-  return diff;
-}
-
-static WEBP_INLINE int VP8RandomBits(VP8Random* const rg, int num_bits) {
-  return VP8RandomBits2(rg, num_bits, rg->amp_);
-}
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_RANDOM_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/rescaler_utils.c b/ios/Pods/libwebp/src/utils/rescaler_utils.c
deleted file mode 100644
index 90e2ea7..0000000
--- a/ios/Pods/libwebp/src/utils/rescaler_utils.c
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Rescaling functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include "src/dsp/dsp.h"
-#include "src/utils/rescaler_utils.h"
-
-//------------------------------------------------------------------------------
-
-void WebPRescalerInit(WebPRescaler* const wrk, int src_width, int src_height,
-                      uint8_t* const dst,
-                      int dst_width, int dst_height, int dst_stride,
-                      int num_channels, rescaler_t* const work) {
-  const int x_add = src_width, x_sub = dst_width;
-  const int y_add = src_height, y_sub = dst_height;
-  wrk->x_expand = (src_width < dst_width);
-  wrk->y_expand = (src_height < dst_height);
-  wrk->src_width = src_width;
-  wrk->src_height = src_height;
-  wrk->dst_width = dst_width;
-  wrk->dst_height = dst_height;
-  wrk->src_y = 0;
-  wrk->dst_y = 0;
-  wrk->dst = dst;
-  wrk->dst_stride = dst_stride;
-  wrk->num_channels = num_channels;
-
-  // for 'x_expand', we use bilinear interpolation
-  wrk->x_add = wrk->x_expand ? (x_sub - 1) : x_add;
-  wrk->x_sub = wrk->x_expand ? (x_add - 1) : x_sub;
-  if (!wrk->x_expand) {  // fx_scale is not used otherwise
-    wrk->fx_scale = WEBP_RESCALER_FRAC(1, wrk->x_sub);
-  }
-  // vertical scaling parameters
-  wrk->y_add = wrk->y_expand ? y_add - 1 : y_add;
-  wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub;
-  wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add;
-  if (!wrk->y_expand) {
-    // This is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast.
-    // Its value is <= WEBP_RESCALER_ONE, because dst_height <= wrk->y_add, and
-    // wrk->x_add >= 1;
-    const uint64_t ratio =
-        (uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add);
-    if (ratio != (uint32_t)ratio) {
-      // When ratio == WEBP_RESCALER_ONE, we can't represent the ratio with the
-      // current fixed-point precision. This happens when src_height ==
-      // wrk->y_add (which == src_height), and wrk->x_add == 1.
-      // => We special-case fxy_scale = 0, in WebPRescalerExportRow().
-      wrk->fxy_scale = 0;
-    } else {
-      wrk->fxy_scale = (uint32_t)ratio;
-    }
-    wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->y_sub);
-  } else {
-    wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->x_add);
-    // wrk->fxy_scale is unused here.
-  }
-  wrk->irow = work;
-  wrk->frow = work + num_channels * dst_width;
-  memset(work, 0, 2 * dst_width * num_channels * sizeof(*work));
-
-  WebPRescalerDspInit();
-}
-
-int WebPRescalerGetScaledDimensions(int src_width, int src_height,
-                                    int* const scaled_width,
-                                    int* const scaled_height) {
-  assert(scaled_width != NULL);
-  assert(scaled_height != NULL);
-  {
-    int width = *scaled_width;
-    int height = *scaled_height;
-
-    // if width is unspecified, scale original proportionally to height ratio.
-    if (width == 0) {
-      width =
-          (int)(((uint64_t)src_width * height + src_height / 2) / src_height);
-    }
-    // if height is unspecified, scale original proportionally to width ratio.
-    if (height == 0) {
-      height =
-          (int)(((uint64_t)src_height * width + src_width / 2) / src_width);
-    }
-    // Check if the overall dimensions still make sense.
-    if (width <= 0 || height <= 0) {
-      return 0;
-    }
-
-    *scaled_width = width;
-    *scaled_height = height;
-    return 1;
-  }
-}
-
-//------------------------------------------------------------------------------
-// all-in-one calls
-
-int WebPRescaleNeededLines(const WebPRescaler* const wrk, int max_num_lines) {
-  const int num_lines = (wrk->y_accum + wrk->y_sub - 1) / wrk->y_sub;
-  return (num_lines > max_num_lines) ? max_num_lines : num_lines;
-}
-
-int WebPRescalerImport(WebPRescaler* const wrk, int num_lines,
-                       const uint8_t* src, int src_stride) {
-  int total_imported = 0;
-  while (total_imported < num_lines && !WebPRescalerHasPendingOutput(wrk)) {
-    if (wrk->y_expand) {
-      rescaler_t* const tmp = wrk->irow;
-      wrk->irow = wrk->frow;
-      wrk->frow = tmp;
-    }
-    WebPRescalerImportRow(wrk, src);
-    if (!wrk->y_expand) {     // Accumulate the contribution of the new row.
-      int x;
-      for (x = 0; x < wrk->num_channels * wrk->dst_width; ++x) {
-        wrk->irow[x] += wrk->frow[x];
-      }
-    }
-    ++wrk->src_y;
-    src += src_stride;
-    ++total_imported;
-    wrk->y_accum -= wrk->y_sub;
-  }
-  return total_imported;
-}
-
-int WebPRescalerExport(WebPRescaler* const rescaler) {
-  int total_exported = 0;
-  while (WebPRescalerHasPendingOutput(rescaler)) {
-    WebPRescalerExportRow(rescaler);
-    ++total_exported;
-  }
-  return total_exported;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/utils/rescaler_utils.h b/ios/Pods/libwebp/src/utils/rescaler_utils.h
deleted file mode 100644
index ca41e42..0000000
--- a/ios/Pods/libwebp/src/utils/rescaler_utils.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Rescaling functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_UTILS_RESCALER_UTILS_H_
-#define WEBP_UTILS_RESCALER_UTILS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "src/webp/types.h"
-
-#define WEBP_RESCALER_RFIX 32   // fixed-point precision for multiplies
-#define WEBP_RESCALER_ONE (1ull << WEBP_RESCALER_RFIX)
-#define WEBP_RESCALER_FRAC(x, y) \
-    ((uint32_t)(((uint64_t)(x) << WEBP_RESCALER_RFIX) / (y)))
-
-// Structure used for on-the-fly rescaling
-typedef uint32_t rescaler_t;   // type for side-buffer
-typedef struct WebPRescaler WebPRescaler;
-struct WebPRescaler {
-  int x_expand;               // true if we're expanding in the x direction
-  int y_expand;               // true if we're expanding in the y direction
-  int num_channels;           // bytes to jump between pixels
-  uint32_t fx_scale;          // fixed-point scaling factors
-  uint32_t fy_scale;          // ''
-  uint32_t fxy_scale;         // ''
-  int y_accum;                // vertical accumulator
-  int y_add, y_sub;           // vertical increments
-  int x_add, x_sub;           // horizontal increments
-  int src_width, src_height;  // source dimensions
-  int dst_width, dst_height;  // destination dimensions
-  int src_y, dst_y;           // row counters for input and output
-  uint8_t* dst;
-  int dst_stride;
-  rescaler_t* irow, *frow;    // work buffer
-};
-
-// Initialize a rescaler given scratch area 'work' and dimensions of src & dst.
-void WebPRescalerInit(WebPRescaler* const rescaler,
-                      int src_width, int src_height,
-                      uint8_t* const dst,
-                      int dst_width, int dst_height, int dst_stride,
-                      int num_channels,
-                      rescaler_t* const work);
-
-// If either 'scaled_width' or 'scaled_height' (but not both) is 0 the value
-// will be calculated preserving the aspect ratio, otherwise the values are
-// left unmodified. Returns true on success, false if either value is 0 after
-// performing the scaling calculation.
-int WebPRescalerGetScaledDimensions(int src_width, int src_height,
-                                    int* const scaled_width,
-                                    int* const scaled_height);
-
-// Returns the number of input lines needed next to produce one output line,
-// considering that the maximum available input lines are 'max_num_lines'.
-int WebPRescaleNeededLines(const WebPRescaler* const rescaler,
-                           int max_num_lines);
-
-// Import multiple rows over all channels, until at least one row is ready to
-// be exported. Returns the actual number of lines that were imported.
-int WebPRescalerImport(WebPRescaler* const rescaler, int num_rows,
-                       const uint8_t* src, int src_stride);
-
-// Export as many rows as possible. Return the numbers of rows written.
-int WebPRescalerExport(WebPRescaler* const rescaler);
-
-// Return true if input is finished
-static WEBP_INLINE
-int WebPRescalerInputDone(const WebPRescaler* const rescaler) {
-  return (rescaler->src_y >= rescaler->src_height);
-}
-// Return true if output is finished
-static WEBP_INLINE
-int WebPRescalerOutputDone(const WebPRescaler* const rescaler) {
-  return (rescaler->dst_y >= rescaler->dst_height);
-}
-
-// Return true if there are pending output rows ready.
-static WEBP_INLINE
-int WebPRescalerHasPendingOutput(const WebPRescaler* const rescaler) {
-  return !WebPRescalerOutputDone(rescaler) && (rescaler->y_accum <= 0);
-}
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_RESCALER_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/thread_utils.c b/ios/Pods/libwebp/src/utils/thread_utils.c
deleted file mode 100644
index 2052b6b..0000000
--- a/ios/Pods/libwebp/src/utils/thread_utils.c
+++ /dev/null
@@ -1,359 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Multi-threaded worker
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <assert.h>
-#include <string.h>   // for memset()
-#include "src/utils/thread_utils.h"
-#include "src/utils/utils.h"
-
-#ifdef WEBP_USE_THREAD
-
-#if defined(_WIN32)
-
-#include <windows.h>
-typedef HANDLE pthread_t;
-typedef CRITICAL_SECTION pthread_mutex_t;
-
-#if _WIN32_WINNT >= 0x0600  // Windows Vista / Server 2008 or greater
-#define USE_WINDOWS_CONDITION_VARIABLE
-typedef CONDITION_VARIABLE pthread_cond_t;
-#else
-typedef struct {
-  HANDLE waiting_sem_;
-  HANDLE received_sem_;
-  HANDLE signal_event_;
-} pthread_cond_t;
-#endif  // _WIN32_WINNT >= 0x600
-
-#ifndef WINAPI_FAMILY_PARTITION
-#define WINAPI_PARTITION_DESKTOP 1
-#define WINAPI_FAMILY_PARTITION(x) x
-#endif
-
-#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-#define USE_CREATE_THREAD
-#endif
-
-#else  // !_WIN32
-
-#include <pthread.h>
-
-#endif  // _WIN32
-
-typedef struct {
-  pthread_mutex_t mutex_;
-  pthread_cond_t  condition_;
-  pthread_t       thread_;
-} WebPWorkerImpl;
-
-#if defined(_WIN32)
-
-//------------------------------------------------------------------------------
-// simplistic pthread emulation layer
-
-#include <process.h>
-
-// _beginthreadex requires __stdcall
-#define THREADFN unsigned int __stdcall
-#define THREAD_RETURN(val) (unsigned int)((DWORD_PTR)val)
-
-#if _WIN32_WINNT >= 0x0501  // Windows XP or greater
-#define WaitForSingleObject(obj, timeout) \
-  WaitForSingleObjectEx(obj, timeout, FALSE /*bAlertable*/)
-#endif
-
-static int pthread_create(pthread_t* const thread, const void* attr,
-                          unsigned int (__stdcall *start)(void*), void* arg) {
-  (void)attr;
-#ifdef USE_CREATE_THREAD
-  *thread = CreateThread(NULL,   /* lpThreadAttributes */
-                         0,      /* dwStackSize */
-                         start,
-                         arg,
-                         0,      /* dwStackSize */
-                         NULL);  /* lpThreadId */
-#else
-  *thread = (pthread_t)_beginthreadex(NULL,   /* void *security */
-                                      0,      /* unsigned stack_size */
-                                      start,
-                                      arg,
-                                      0,      /* unsigned initflag */
-                                      NULL);  /* unsigned *thrdaddr */
-#endif
-  if (*thread == NULL) return 1;
-  SetThreadPriority(*thread, THREAD_PRIORITY_ABOVE_NORMAL);
-  return 0;
-}
-
-static int pthread_join(pthread_t thread, void** value_ptr) {
-  (void)value_ptr;
-  return (WaitForSingleObject(thread, INFINITE) != WAIT_OBJECT_0 ||
-          CloseHandle(thread) == 0);
-}
-
-// Mutex
-static int pthread_mutex_init(pthread_mutex_t* const mutex, void* mutexattr) {
-  (void)mutexattr;
-#if _WIN32_WINNT >= 0x0600  // Windows Vista / Server 2008 or greater
-  InitializeCriticalSectionEx(mutex, 0 /*dwSpinCount*/, 0 /*Flags*/);
-#else
-  InitializeCriticalSection(mutex);
-#endif
-  return 0;
-}
-
-static int pthread_mutex_lock(pthread_mutex_t* const mutex) {
-  EnterCriticalSection(mutex);
-  return 0;
-}
-
-static int pthread_mutex_unlock(pthread_mutex_t* const mutex) {
-  LeaveCriticalSection(mutex);
-  return 0;
-}
-
-static int pthread_mutex_destroy(pthread_mutex_t* const mutex) {
-  DeleteCriticalSection(mutex);
-  return 0;
-}
-
-// Condition
-static int pthread_cond_destroy(pthread_cond_t* const condition) {
-  int ok = 1;
-#ifdef USE_WINDOWS_CONDITION_VARIABLE
-  (void)condition;
-#else
-  ok &= (CloseHandle(condition->waiting_sem_) != 0);
-  ok &= (CloseHandle(condition->received_sem_) != 0);
-  ok &= (CloseHandle(condition->signal_event_) != 0);
-#endif
-  return !ok;
-}
-
-static int pthread_cond_init(pthread_cond_t* const condition, void* cond_attr) {
-  (void)cond_attr;
-#ifdef USE_WINDOWS_CONDITION_VARIABLE
-  InitializeConditionVariable(condition);
-#else
-  condition->waiting_sem_ = CreateSemaphore(NULL, 0, 1, NULL);
-  condition->received_sem_ = CreateSemaphore(NULL, 0, 1, NULL);
-  condition->signal_event_ = CreateEvent(NULL, FALSE, FALSE, NULL);
-  if (condition->waiting_sem_ == NULL ||
-      condition->received_sem_ == NULL ||
-      condition->signal_event_ == NULL) {
-    pthread_cond_destroy(condition);
-    return 1;
-  }
-#endif
-  return 0;
-}
-
-static int pthread_cond_signal(pthread_cond_t* const condition) {
-  int ok = 1;
-#ifdef USE_WINDOWS_CONDITION_VARIABLE
-  WakeConditionVariable(condition);
-#else
-  if (WaitForSingleObject(condition->waiting_sem_, 0) == WAIT_OBJECT_0) {
-    // a thread is waiting in pthread_cond_wait: allow it to be notified
-    ok = SetEvent(condition->signal_event_);
-    // wait until the event is consumed so the signaler cannot consume
-    // the event via its own pthread_cond_wait.
-    ok &= (WaitForSingleObject(condition->received_sem_, INFINITE) !=
-           WAIT_OBJECT_0);
-  }
-#endif
-  return !ok;
-}
-
-static int pthread_cond_wait(pthread_cond_t* const condition,
-                             pthread_mutex_t* const mutex) {
-  int ok;
-#ifdef USE_WINDOWS_CONDITION_VARIABLE
-  ok = SleepConditionVariableCS(condition, mutex, INFINITE);
-#else
-  // note that there is a consumer available so the signal isn't dropped in
-  // pthread_cond_signal
-  if (!ReleaseSemaphore(condition->waiting_sem_, 1, NULL)) return 1;
-  // now unlock the mutex so pthread_cond_signal may be issued
-  pthread_mutex_unlock(mutex);
-  ok = (WaitForSingleObject(condition->signal_event_, INFINITE) ==
-        WAIT_OBJECT_0);
-  ok &= ReleaseSemaphore(condition->received_sem_, 1, NULL);
-  pthread_mutex_lock(mutex);
-#endif
-  return !ok;
-}
-
-#else  // !_WIN32
-# define THREADFN void*
-# define THREAD_RETURN(val) val
-#endif  // _WIN32
-
-//------------------------------------------------------------------------------
-
-static THREADFN ThreadLoop(void* ptr) {
-  WebPWorker* const worker = (WebPWorker*)ptr;
-  WebPWorkerImpl* const impl = (WebPWorkerImpl*)worker->impl_;
-  int done = 0;
-  while (!done) {
-    pthread_mutex_lock(&impl->mutex_);
-    while (worker->status_ == OK) {   // wait in idling mode
-      pthread_cond_wait(&impl->condition_, &impl->mutex_);
-    }
-    if (worker->status_ == WORK) {
-      WebPGetWorkerInterface()->Execute(worker);
-      worker->status_ = OK;
-    } else if (worker->status_ == NOT_OK) {   // finish the worker
-      done = 1;
-    }
-    // signal to the main thread that we're done (for Sync())
-    pthread_cond_signal(&impl->condition_);
-    pthread_mutex_unlock(&impl->mutex_);
-  }
-  return THREAD_RETURN(NULL);    // Thread is finished
-}
-
-// main thread state control
-static void ChangeState(WebPWorker* const worker, WebPWorkerStatus new_status) {
-  // No-op when attempting to change state on a thread that didn't come up.
-  // Checking status_ without acquiring the lock first would result in a data
-  // race.
-  WebPWorkerImpl* const impl = (WebPWorkerImpl*)worker->impl_;
-  if (impl == NULL) return;
-
-  pthread_mutex_lock(&impl->mutex_);
-  if (worker->status_ >= OK) {
-    // wait for the worker to finish
-    while (worker->status_ != OK) {
-      pthread_cond_wait(&impl->condition_, &impl->mutex_);
-    }
-    // assign new status and release the working thread if needed
-    if (new_status != OK) {
-      worker->status_ = new_status;
-      pthread_cond_signal(&impl->condition_);
-    }
-  }
-  pthread_mutex_unlock(&impl->mutex_);
-}
-
-#endif  // WEBP_USE_THREAD
-
-//------------------------------------------------------------------------------
-
-static void Init(WebPWorker* const worker) {
-  memset(worker, 0, sizeof(*worker));
-  worker->status_ = NOT_OK;
-}
-
-static int Sync(WebPWorker* const worker) {
-#ifdef WEBP_USE_THREAD
-  ChangeState(worker, OK);
-#endif
-  assert(worker->status_ <= OK);
-  return !worker->had_error;
-}
-
-static int Reset(WebPWorker* const worker) {
-  int ok = 1;
-  worker->had_error = 0;
-  if (worker->status_ < OK) {
-#ifdef WEBP_USE_THREAD
-    WebPWorkerImpl* const impl =
-        (WebPWorkerImpl*)WebPSafeCalloc(1, sizeof(WebPWorkerImpl));
-    worker->impl_ = (void*)impl;
-    if (worker->impl_ == NULL) {
-      return 0;
-    }
-    if (pthread_mutex_init(&impl->mutex_, NULL)) {
-      goto Error;
-    }
-    if (pthread_cond_init(&impl->condition_, NULL)) {
-      pthread_mutex_destroy(&impl->mutex_);
-      goto Error;
-    }
-    pthread_mutex_lock(&impl->mutex_);
-    ok = !pthread_create(&impl->thread_, NULL, ThreadLoop, worker);
-    if (ok) worker->status_ = OK;
-    pthread_mutex_unlock(&impl->mutex_);
-    if (!ok) {
-      pthread_mutex_destroy(&impl->mutex_);
-      pthread_cond_destroy(&impl->condition_);
- Error:
-      WebPSafeFree(impl);
-      worker->impl_ = NULL;
-      return 0;
-    }
-#else
-    worker->status_ = OK;
-#endif
-  } else if (worker->status_ > OK) {
-    ok = Sync(worker);
-  }
-  assert(!ok || (worker->status_ == OK));
-  return ok;
-}
-
-static void Execute(WebPWorker* const worker) {
-  if (worker->hook != NULL) {
-    worker->had_error |= !worker->hook(worker->data1, worker->data2);
-  }
-}
-
-static void Launch(WebPWorker* const worker) {
-#ifdef WEBP_USE_THREAD
-  ChangeState(worker, WORK);
-#else
-  Execute(worker);
-#endif
-}
-
-static void End(WebPWorker* const worker) {
-#ifdef WEBP_USE_THREAD
-  if (worker->impl_ != NULL) {
-    WebPWorkerImpl* const impl = (WebPWorkerImpl*)worker->impl_;
-    ChangeState(worker, NOT_OK);
-    pthread_join(impl->thread_, NULL);
-    pthread_mutex_destroy(&impl->mutex_);
-    pthread_cond_destroy(&impl->condition_);
-    WebPSafeFree(impl);
-    worker->impl_ = NULL;
-  }
-#else
-  worker->status_ = NOT_OK;
-  assert(worker->impl_ == NULL);
-#endif
-  assert(worker->status_ == NOT_OK);
-}
-
-//------------------------------------------------------------------------------
-
-static WebPWorkerInterface g_worker_interface = {
-  Init, Reset, Sync, Launch, Execute, End
-};
-
-int WebPSetWorkerInterface(const WebPWorkerInterface* const winterface) {
-  if (winterface == NULL ||
-      winterface->Init == NULL || winterface->Reset == NULL ||
-      winterface->Sync == NULL || winterface->Launch == NULL ||
-      winterface->Execute == NULL || winterface->End == NULL) {
-    return 0;
-  }
-  g_worker_interface = *winterface;
-  return 1;
-}
-
-const WebPWorkerInterface* WebPGetWorkerInterface(void) {
-  return &g_worker_interface;
-}
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/utils/thread_utils.h b/ios/Pods/libwebp/src/utils/thread_utils.h
deleted file mode 100644
index 29ad49f..0000000
--- a/ios/Pods/libwebp/src/utils/thread_utils.h
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Multi-threaded worker
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_UTILS_THREAD_UTILS_H_
-#define WEBP_UTILS_THREAD_UTILS_H_
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// State of the worker thread object
-typedef enum {
-  NOT_OK = 0,   // object is unusable
-  OK,           // ready to work
-  WORK          // busy finishing the current task
-} WebPWorkerStatus;
-
-// Function to be called by the worker thread. Takes two opaque pointers as
-// arguments (data1 and data2), and should return false in case of error.
-typedef int (*WebPWorkerHook)(void*, void*);
-
-// Synchronization object used to launch job in the worker thread
-typedef struct {
-  void* impl_;            // platform-dependent implementation worker details
-  WebPWorkerStatus status_;
-  WebPWorkerHook hook;    // hook to call
-  void* data1;            // first argument passed to 'hook'
-  void* data2;            // second argument passed to 'hook'
-  int had_error;          // return value of the last call to 'hook'
-} WebPWorker;
-
-// The interface for all thread-worker related functions. All these functions
-// must be implemented.
-typedef struct {
-  // Must be called first, before any other method.
-  void (*Init)(WebPWorker* const worker);
-  // Must be called to initialize the object and spawn the thread. Re-entrant.
-  // Will potentially launch the thread. Returns false in case of error.
-  int (*Reset)(WebPWorker* const worker);
-  // Makes sure the previous work is finished. Returns true if worker->had_error
-  // was not set and no error condition was triggered by the working thread.
-  int (*Sync)(WebPWorker* const worker);
-  // Triggers the thread to call hook() with data1 and data2 arguments. These
-  // hook/data1/data2 values can be changed at any time before calling this
-  // function, but not be changed afterward until the next call to Sync().
-  void (*Launch)(WebPWorker* const worker);
-  // This function is similar to Launch() except that it calls the
-  // hook directly instead of using a thread. Convenient to bypass the thread
-  // mechanism while still using the WebPWorker structs. Sync() must
-  // still be called afterward (for error reporting).
-  void (*Execute)(WebPWorker* const worker);
-  // Kill the thread and terminate the object. To use the object again, one
-  // must call Reset() again.
-  void (*End)(WebPWorker* const worker);
-} WebPWorkerInterface;
-
-// Install a new set of threading functions, overriding the defaults. This
-// should be done before any workers are started, i.e., before any encoding or
-// decoding takes place. The contents of the interface struct are copied, it
-// is safe to free the corresponding memory after this call. This function is
-// not thread-safe. Return false in case of invalid pointer or methods.
-WEBP_EXTERN int WebPSetWorkerInterface(
-    const WebPWorkerInterface* const winterface);
-
-// Retrieve the currently set thread worker interface.
-WEBP_EXTERN const WebPWorkerInterface* WebPGetWorkerInterface(void);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_THREAD_UTILS_H_
diff --git a/ios/Pods/libwebp/src/utils/utils.c b/ios/Pods/libwebp/src/utils/utils.c
deleted file mode 100644
index 44d5c14..0000000
--- a/ios/Pods/libwebp/src/utils/utils.c
+++ /dev/null
@@ -1,330 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Misc. common utility functions
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#include <stdlib.h>
-#include <string.h>  // for memcpy()
-#include "src/webp/decode.h"
-#include "src/webp/encode.h"
-#include "src/webp/format_constants.h"  // for MAX_PALETTE_SIZE
-#include "src/utils/color_cache_utils.h"
-#include "src/utils/utils.h"
-
-// If PRINT_MEM_INFO is defined, extra info (like total memory used, number of
-// alloc/free etc) is printed. For debugging/tuning purpose only (it's slow,
-// and not multi-thread safe!).
-// An interesting alternative is valgrind's 'massif' tool:
-//    http://valgrind.org/docs/manual/ms-manual.html
-// Here is an example command line:
-/*    valgrind --tool=massif --massif-out-file=massif.out \
-               --stacks=yes --alloc-fn=WebPSafeMalloc --alloc-fn=WebPSafeCalloc
-      ms_print massif.out
-*/
-// In addition:
-// * if PRINT_MEM_TRAFFIC is defined, all the details of the malloc/free cycles
-//   are printed.
-// * if MALLOC_FAIL_AT is defined, the global environment variable
-//   $MALLOC_FAIL_AT is used to simulate a memory error when calloc or malloc
-//   is called for the nth time. Example usage:
-//   export MALLOC_FAIL_AT=50 && ./examples/cwebp input.png
-// * if MALLOC_LIMIT is defined, the global environment variable $MALLOC_LIMIT
-//   sets the maximum amount of memory (in bytes) made available to libwebp.
-//   This can be used to emulate environment with very limited memory.
-//   Example: export MALLOC_LIMIT=64000000 && ./examples/dwebp picture.webp
-
-// #define PRINT_MEM_INFO
-// #define PRINT_MEM_TRAFFIC
-// #define MALLOC_FAIL_AT
-// #define MALLOC_LIMIT
-
-//------------------------------------------------------------------------------
-// Checked memory allocation
-
-#if defined(PRINT_MEM_INFO)
-
-#include <stdio.h>
-
-static int num_malloc_calls = 0;
-static int num_calloc_calls = 0;
-static int num_free_calls = 0;
-static int countdown_to_fail = 0;     // 0 = off
-
-typedef struct MemBlock MemBlock;
-struct MemBlock {
-  void* ptr_;
-  size_t size_;
-  MemBlock* next_;
-};
-
-static MemBlock* all_blocks = NULL;
-static size_t total_mem = 0;
-static size_t total_mem_allocated = 0;
-static size_t high_water_mark = 0;
-static size_t mem_limit = 0;
-
-static int exit_registered = 0;
-
-static void PrintMemInfo(void) {
-  fprintf(stderr, "\nMEMORY INFO:\n");
-  fprintf(stderr, "num calls to: malloc = %4d\n", num_malloc_calls);
-  fprintf(stderr, "              calloc = %4d\n", num_calloc_calls);
-  fprintf(stderr, "              free   = %4d\n", num_free_calls);
-  fprintf(stderr, "total_mem: %u\n", (uint32_t)total_mem);
-  fprintf(stderr, "total_mem allocated: %u\n", (uint32_t)total_mem_allocated);
-  fprintf(stderr, "high-water mark: %u\n", (uint32_t)high_water_mark);
-  while (all_blocks != NULL) {
-    MemBlock* b = all_blocks;
-    all_blocks = b->next_;
-    free(b);
-  }
-}
-
-static void Increment(int* const v) {
-  if (!exit_registered) {
-#if defined(MALLOC_FAIL_AT)
-    {
-      const char* const malloc_fail_at_str = getenv("MALLOC_FAIL_AT");
-      if (malloc_fail_at_str != NULL) {
-        countdown_to_fail = atoi(malloc_fail_at_str);
-      }
-    }
-#endif
-#if defined(MALLOC_LIMIT)
-    {
-      const char* const malloc_limit_str = getenv("MALLOC_LIMIT");
-      if (malloc_limit_str != NULL) {
-        mem_limit = atoi(malloc_limit_str);
-      }
-    }
-#endif
-    (void)countdown_to_fail;
-    (void)mem_limit;
-    atexit(PrintMemInfo);
-    exit_registered = 1;
-  }
-  ++*v;
-}
-
-static void AddMem(void* ptr, size_t size) {
-  if (ptr != NULL) {
-    MemBlock* const b = (MemBlock*)malloc(sizeof(*b));
-    if (b == NULL) abort();
-    b->next_ = all_blocks;
-    all_blocks = b;
-    b->ptr_ = ptr;
-    b->size_ = size;
-    total_mem += size;
-    total_mem_allocated += size;
-#if defined(PRINT_MEM_TRAFFIC)
-#if defined(MALLOC_FAIL_AT)
-    fprintf(stderr, "fail-count: %5d [mem=%u]\n",
-            num_malloc_calls + num_calloc_calls, (uint32_t)total_mem);
-#else
-    fprintf(stderr, "Mem: %u (+%u)\n", (uint32_t)total_mem, (uint32_t)size);
-#endif
-#endif
-    if (total_mem > high_water_mark) high_water_mark = total_mem;
-  }
-}
-
-static void SubMem(void* ptr) {
-  if (ptr != NULL) {
-    MemBlock** b = &all_blocks;
-    // Inefficient search, but that's just for debugging.
-    while (*b != NULL && (*b)->ptr_ != ptr) b = &(*b)->next_;
-    if (*b == NULL) {
-      fprintf(stderr, "Invalid pointer free! (%p)\n", ptr);
-      abort();
-    }
-    {
-      MemBlock* const block = *b;
-      *b = block->next_;
-      total_mem -= block->size_;
-#if defined(PRINT_MEM_TRAFFIC)
-      fprintf(stderr, "Mem: %u (-%u)\n",
-              (uint32_t)total_mem, (uint32_t)block->size_);
-#endif
-      free(block);
-    }
-  }
-}
-
-#else
-#define Increment(v) do {} while (0)
-#define AddMem(p, s) do {} while (0)
-#define SubMem(p)    do {} while (0)
-#endif
-
-// Returns 0 in case of overflow of nmemb * size.
-static int CheckSizeArgumentsOverflow(uint64_t nmemb, size_t size) {
-  const uint64_t total_size = nmemb * size;
-  if (nmemb == 0) return 1;
-  if ((uint64_t)size > WEBP_MAX_ALLOCABLE_MEMORY / nmemb) return 0;
-  if (total_size != (size_t)total_size) return 0;
-#if defined(PRINT_MEM_INFO) && defined(MALLOC_FAIL_AT)
-  if (countdown_to_fail > 0 && --countdown_to_fail == 0) {
-    return 0;    // fake fail!
-  }
-#endif
-#if defined(MALLOC_LIMIT)
-  if (mem_limit > 0) {
-    const uint64_t new_total_mem = (uint64_t)total_mem + total_size;
-    if (new_total_mem != (size_t)new_total_mem ||
-        new_total_mem > mem_limit) {
-      return 0;   // fake fail!
-    }
-  }
-#endif
-
-  return 1;
-}
-
-void* WebPSafeMalloc(uint64_t nmemb, size_t size) {
-  void* ptr;
-  Increment(&num_malloc_calls);
-  if (!CheckSizeArgumentsOverflow(nmemb, size)) return NULL;
-  assert(nmemb * size > 0);
-  ptr = malloc((size_t)(nmemb * size));
-  AddMem(ptr, (size_t)(nmemb * size));
-  return ptr;
-}
-
-void* WebPSafeCalloc(uint64_t nmemb, size_t size) {
-  void* ptr;
-  Increment(&num_calloc_calls);
-  if (!CheckSizeArgumentsOverflow(nmemb, size)) return NULL;
-  assert(nmemb * size > 0);
-  ptr = calloc((size_t)nmemb, size);
-  AddMem(ptr, (size_t)(nmemb * size));
-  return ptr;
-}
-
-void WebPSafeFree(void* const ptr) {
-  if (ptr != NULL) {
-    Increment(&num_free_calls);
-    SubMem(ptr);
-  }
-  free(ptr);
-}
-
-// Public API function.
-void WebPFree(void* ptr) {
-  free(ptr);
-}
-
-//------------------------------------------------------------------------------
-
-void WebPCopyPlane(const uint8_t* src, int src_stride,
-                   uint8_t* dst, int dst_stride, int width, int height) {
-  assert(src != NULL && dst != NULL);
-  assert(src_stride >= width && dst_stride >= width);
-  while (height-- > 0) {
-    memcpy(dst, src, width);
-    src += src_stride;
-    dst += dst_stride;
-  }
-}
-
-void WebPCopyPixels(const WebPPicture* const src, WebPPicture* const dst) {
-  assert(src != NULL && dst != NULL);
-  assert(src->width == dst->width && src->height == dst->height);
-  assert(src->use_argb && dst->use_argb);
-  WebPCopyPlane((uint8_t*)src->argb, 4 * src->argb_stride, (uint8_t*)dst->argb,
-                4 * dst->argb_stride, 4 * src->width, src->height);
-}
-
-//------------------------------------------------------------------------------
-
-#define COLOR_HASH_SIZE         (MAX_PALETTE_SIZE * 4)
-#define COLOR_HASH_RIGHT_SHIFT  22  // 32 - log2(COLOR_HASH_SIZE).
-
-int WebPGetColorPalette(const WebPPicture* const pic, uint32_t* const palette) {
-  int i;
-  int x, y;
-  int num_colors = 0;
-  uint8_t in_use[COLOR_HASH_SIZE] = { 0 };
-  uint32_t colors[COLOR_HASH_SIZE];
-  const uint32_t* argb = pic->argb;
-  const int width = pic->width;
-  const int height = pic->height;
-  uint32_t last_pix = ~argb[0];   // so we're sure that last_pix != argb[0]
-  assert(pic != NULL);
-  assert(pic->use_argb);
-
-  for (y = 0; y < height; ++y) {
-    for (x = 0; x < width; ++x) {
-      int key;
-      if (argb[x] == last_pix) {
-        continue;
-      }
-      last_pix = argb[x];
-      key = VP8LHashPix(last_pix, COLOR_HASH_RIGHT_SHIFT);
-      while (1) {
-        if (!in_use[key]) {
-          colors[key] = last_pix;
-          in_use[key] = 1;
-          ++num_colors;
-          if (num_colors > MAX_PALETTE_SIZE) {
-            return MAX_PALETTE_SIZE + 1;  // Exact count not needed.
-          }
-          break;
-        } else if (colors[key] == last_pix) {
-          break;  // The color is already there.
-        } else {
-          // Some other color sits here, so do linear conflict resolution.
-          ++key;
-          key &= (COLOR_HASH_SIZE - 1);  // Key mask.
-        }
-      }
-    }
-    argb += pic->argb_stride;
-  }
-
-  if (palette != NULL) {  // Fill the colors into palette.
-    num_colors = 0;
-    for (i = 0; i < COLOR_HASH_SIZE; ++i) {
-      if (in_use[i]) {
-        palette[num_colors] = colors[i];
-        ++num_colors;
-      }
-    }
-  }
-  return num_colors;
-}
-
-#undef COLOR_HASH_SIZE
-#undef COLOR_HASH_RIGHT_SHIFT
-
-//------------------------------------------------------------------------------
-
-#if defined(WEBP_NEED_LOG_TABLE_8BIT)
-const uint8_t WebPLogTable8bit[256] = {   // 31 ^ clz(i)
-  0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
-  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-};
-#endif
-
-//------------------------------------------------------------------------------
diff --git a/ios/Pods/libwebp/src/utils/utils.h b/ios/Pods/libwebp/src/utils/utils.h
deleted file mode 100644
index c7620f9..0000000
--- a/ios/Pods/libwebp/src/utils/utils.h
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Misc. common utility functions
-//
-// Authors: Skal (pascal.massimino@gmail.com)
-//          Urvang (urvang@google.com)
-
-#ifndef WEBP_UTILS_UTILS_H_
-#define WEBP_UTILS_UTILS_H_
-
-#ifdef HAVE_CONFIG_H
-#include "src/webp/config.h"
-#endif
-
-#include <assert.h>
-#include <limits.h>
-
-#include "src/dsp/dsp.h"
-#include "src/webp/types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//------------------------------------------------------------------------------
-// Memory allocation
-
-// This is the maximum memory amount that libwebp will ever try to allocate.
-#ifndef WEBP_MAX_ALLOCABLE_MEMORY
-#if SIZE_MAX > (1ULL << 34)
-#define WEBP_MAX_ALLOCABLE_MEMORY (1ULL << 34)
-#else
-// For 32-bit targets keep this below INT_MAX to avoid valgrind warnings.
-#define WEBP_MAX_ALLOCABLE_MEMORY ((1ULL << 31) - (1 << 16))
-#endif
-#endif  // WEBP_MAX_ALLOCABLE_MEMORY
-
-// size-checking safe malloc/calloc: verify that the requested size is not too
-// large, or return NULL. You don't need to call these for constructs like
-// malloc(sizeof(foo)), but only if there's picture-dependent size involved
-// somewhere (like: malloc(num_pixels * sizeof(*something))). That's why this
-// safe malloc() borrows the signature from calloc(), pointing at the dangerous
-// underlying multiply involved.
-WEBP_EXTERN void* WebPSafeMalloc(uint64_t nmemb, size_t size);
-// Note that WebPSafeCalloc() expects the second argument type to be 'size_t'
-// in order to favor the "calloc(num_foo, sizeof(foo))" pattern.
-WEBP_EXTERN void* WebPSafeCalloc(uint64_t nmemb, size_t size);
-
-// Companion deallocation function to the above allocations.
-WEBP_EXTERN void WebPSafeFree(void* const ptr);
-
-//------------------------------------------------------------------------------
-// Alignment
-
-#define WEBP_ALIGN_CST 31
-#define WEBP_ALIGN(PTR) (((uintptr_t)(PTR) + WEBP_ALIGN_CST) & ~WEBP_ALIGN_CST)
-
-#include <string.h>
-// memcpy() is the safe way of moving potentially unaligned 32b memory.
-static WEBP_INLINE uint32_t WebPMemToUint32(const uint8_t* const ptr) {
-  uint32_t A;
-  memcpy(&A, ptr, sizeof(A));
-  return A;
-}
-static WEBP_INLINE void WebPUint32ToMem(uint8_t* const ptr, uint32_t val) {
-  memcpy(ptr, &val, sizeof(val));
-}
-
-//------------------------------------------------------------------------------
-// Reading/writing data.
-
-// Read 16, 24 or 32 bits stored in little-endian order.
-static WEBP_INLINE int GetLE16(const uint8_t* const data) {
-  return (int)(data[0] << 0) | (data[1] << 8);
-}
-
-static WEBP_INLINE int GetLE24(const uint8_t* const data) {
-  return GetLE16(data) | (data[2] << 16);
-}
-
-static WEBP_INLINE uint32_t GetLE32(const uint8_t* const data) {
-  return GetLE16(data) | ((uint32_t)GetLE16(data + 2) << 16);
-}
-
-// Store 16, 24 or 32 bits in little-endian order.
-static WEBP_INLINE void PutLE16(uint8_t* const data, int val) {
-  assert(val < (1 << 16));
-  data[0] = (val >> 0);
-  data[1] = (val >> 8);
-}
-
-static WEBP_INLINE void PutLE24(uint8_t* const data, int val) {
-  assert(val < (1 << 24));
-  PutLE16(data, val & 0xffff);
-  data[2] = (val >> 16);
-}
-
-static WEBP_INLINE void PutLE32(uint8_t* const data, uint32_t val) {
-  PutLE16(data, (int)(val & 0xffff));
-  PutLE16(data + 2, (int)(val >> 16));
-}
-
-// Returns (int)floor(log2(n)). n must be > 0.
-// use GNU builtins where available.
-#if defined(__GNUC__) && \
-    ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4)
-static WEBP_INLINE int BitsLog2Floor(uint32_t n) {
-  return 31 ^ __builtin_clz(n);
-}
-#elif defined(_MSC_VER) && _MSC_VER > 1310 && \
-      (defined(_M_X64) || defined(_M_IX86))
-#include <intrin.h>
-#pragma intrinsic(_BitScanReverse)
-
-static WEBP_INLINE int BitsLog2Floor(uint32_t n) {
-  unsigned long first_set_bit;
-  _BitScanReverse(&first_set_bit, n);
-  return first_set_bit;
-}
-#else   // default: use the C-version.
-// Returns 31 ^ clz(n) = log2(n). This is the default C-implementation, either
-// based on table or not. Can be used as fallback if clz() is not available.
-#define WEBP_NEED_LOG_TABLE_8BIT
-extern const uint8_t WebPLogTable8bit[256];
-static WEBP_INLINE int WebPLog2FloorC(uint32_t n) {
-  int log_value = 0;
-  while (n >= 256) {
-    log_value += 8;
-    n >>= 8;
-  }
-  return log_value + WebPLogTable8bit[n];
-}
-
-static WEBP_INLINE int BitsLog2Floor(uint32_t n) { return WebPLog2FloorC(n); }
-#endif
-
-//------------------------------------------------------------------------------
-// Pixel copying.
-
-struct WebPPicture;
-
-// Copy width x height pixels from 'src' to 'dst' honoring the strides.
-WEBP_EXTERN void WebPCopyPlane(const uint8_t* src, int src_stride,
-                               uint8_t* dst, int dst_stride,
-                               int width, int height);
-
-// Copy ARGB pixels from 'src' to 'dst' honoring strides. 'src' and 'dst' are
-// assumed to be already allocated and using ARGB data.
-WEBP_EXTERN void WebPCopyPixels(const struct WebPPicture* const src,
-                                struct WebPPicture* const dst);
-
-//------------------------------------------------------------------------------
-// Unique colors.
-
-// Returns count of unique colors in 'pic', assuming pic->use_argb is true.
-// If the unique color count is more than MAX_PALETTE_SIZE, returns
-// MAX_PALETTE_SIZE+1.
-// If 'palette' is not NULL and number of unique colors is less than or equal to
-// MAX_PALETTE_SIZE, also outputs the actual unique colors into 'palette'.
-// Note: 'palette' is assumed to be an array already allocated with at least
-// MAX_PALETTE_SIZE elements.
-WEBP_EXTERN int WebPGetColorPalette(const struct WebPPicture* const pic,
-                                    uint32_t* const palette);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_UTILS_UTILS_H_
diff --git a/ios/Pods/libwebp/src/webp/decode.h b/ios/Pods/libwebp/src/webp/decode.h
deleted file mode 100644
index ae8bfe8..0000000
--- a/ios/Pods/libwebp/src/webp/decode.h
+++ /dev/null
@@ -1,506 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  Main decoding functions for WebP images.
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_WEBP_DECODE_H_
-#define WEBP_WEBP_DECODE_H_
-
-#include "./types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define WEBP_DECODER_ABI_VERSION 0x0208    // MAJOR(8b) + MINOR(8b)
-
-// Note: forward declaring enumerations is not allowed in (strict) C and C++,
-// the types are left here for reference.
-// typedef enum VP8StatusCode VP8StatusCode;
-// typedef enum WEBP_CSP_MODE WEBP_CSP_MODE;
-typedef struct WebPRGBABuffer WebPRGBABuffer;
-typedef struct WebPYUVABuffer WebPYUVABuffer;
-typedef struct WebPDecBuffer WebPDecBuffer;
-typedef struct WebPIDecoder WebPIDecoder;
-typedef struct WebPBitstreamFeatures WebPBitstreamFeatures;
-typedef struct WebPDecoderOptions WebPDecoderOptions;
-typedef struct WebPDecoderConfig WebPDecoderConfig;
-
-// Return the decoder's version number, packed in hexadecimal using 8bits for
-// each of major/minor/revision. E.g: v2.5.7 is 0x020507.
-WEBP_EXTERN int WebPGetDecoderVersion(void);
-
-// Retrieve basic header information: width, height.
-// This function will also validate the header, returning true on success,
-// false otherwise. '*width' and '*height' are only valid on successful return.
-// Pointers 'width' and 'height' can be passed NULL if deemed irrelevant.
-// Note: The following chunk sequences (before the raw VP8/VP8L data) are
-// considered valid by this function:
-// RIFF + VP8(L)
-// RIFF + VP8X + (optional chunks) + VP8(L)
-// ALPH + VP8 <-- Not a valid WebP format: only allowed for internal purpose.
-// VP8(L)     <-- Not a valid WebP format: only allowed for internal purpose.
-WEBP_EXTERN int WebPGetInfo(const uint8_t* data, size_t data_size,
-                            int* width, int* height);
-
-// Decodes WebP images pointed to by 'data' and returns RGBA samples, along
-// with the dimensions in *width and *height. The ordering of samples in
-// memory is R, G, B, A, R, G, B, A... in scan order (endian-independent).
-// The returned pointer should be deleted calling WebPFree().
-// Returns NULL in case of error.
-WEBP_EXTERN uint8_t* WebPDecodeRGBA(const uint8_t* data, size_t data_size,
-                                    int* width, int* height);
-
-// Same as WebPDecodeRGBA, but returning A, R, G, B, A, R, G, B... ordered data.
-WEBP_EXTERN uint8_t* WebPDecodeARGB(const uint8_t* data, size_t data_size,
-                                    int* width, int* height);
-
-// Same as WebPDecodeRGBA, but returning B, G, R, A, B, G, R, A... ordered data.
-WEBP_EXTERN uint8_t* WebPDecodeBGRA(const uint8_t* data, size_t data_size,
-                                    int* width, int* height);
-
-// Same as WebPDecodeRGBA, but returning R, G, B, R, G, B... ordered data.
-// If the bitstream contains transparency, it is ignored.
-WEBP_EXTERN uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size,
-                                   int* width, int* height);
-
-// Same as WebPDecodeRGB, but returning B, G, R, B, G, R... ordered data.
-WEBP_EXTERN uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size,
-                                   int* width, int* height);
-
-
-// Decode WebP images pointed to by 'data' to Y'UV format(*). The pointer
-// returned is the Y samples buffer. Upon return, *u and *v will point to
-// the U and V chroma data. These U and V buffers need NOT be passed to
-// WebPFree(), unlike the returned Y luma one. The dimension of the U and V
-// planes are both (*width + 1) / 2 and (*height + 1)/ 2.
-// Upon return, the Y buffer has a stride returned as '*stride', while U and V
-// have a common stride returned as '*uv_stride'.
-// Return NULL in case of error.
-// (*) Also named Y'CbCr. See: http://en.wikipedia.org/wiki/YCbCr
-WEBP_EXTERN uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size,
-                                   int* width, int* height,
-                                   uint8_t** u, uint8_t** v,
-                                   int* stride, int* uv_stride);
-
-// Releases memory returned by the WebPDecode*() functions above.
-WEBP_EXTERN void WebPFree(void* ptr);
-
-// These five functions are variants of the above ones, that decode the image
-// directly into a pre-allocated buffer 'output_buffer'. The maximum storage
-// available in this buffer is indicated by 'output_buffer_size'. If this
-// storage is not sufficient (or an error occurred), NULL is returned.
-// Otherwise, output_buffer is returned, for convenience.
-// The parameter 'output_stride' specifies the distance (in bytes)
-// between scanlines. Hence, output_buffer_size is expected to be at least
-// output_stride x picture-height.
-WEBP_EXTERN uint8_t* WebPDecodeRGBAInto(
-    const uint8_t* data, size_t data_size,
-    uint8_t* output_buffer, size_t output_buffer_size, int output_stride);
-WEBP_EXTERN uint8_t* WebPDecodeARGBInto(
-    const uint8_t* data, size_t data_size,
-    uint8_t* output_buffer, size_t output_buffer_size, int output_stride);
-WEBP_EXTERN uint8_t* WebPDecodeBGRAInto(
-    const uint8_t* data, size_t data_size,
-    uint8_t* output_buffer, size_t output_buffer_size, int output_stride);
-
-// RGB and BGR variants. Here too the transparency information, if present,
-// will be dropped and ignored.
-WEBP_EXTERN uint8_t* WebPDecodeRGBInto(
-    const uint8_t* data, size_t data_size,
-    uint8_t* output_buffer, size_t output_buffer_size, int output_stride);
-WEBP_EXTERN uint8_t* WebPDecodeBGRInto(
-    const uint8_t* data, size_t data_size,
-    uint8_t* output_buffer, size_t output_buffer_size, int output_stride);
-
-// WebPDecodeYUVInto() is a variant of WebPDecodeYUV() that operates directly
-// into pre-allocated luma/chroma plane buffers. This function requires the
-// strides to be passed: one for the luma plane and one for each of the
-// chroma ones. The size of each plane buffer is passed as 'luma_size',
-// 'u_size' and 'v_size' respectively.
-// Pointer to the luma plane ('*luma') is returned or NULL if an error occurred
-// during decoding (or because some buffers were found to be too small).
-WEBP_EXTERN uint8_t* WebPDecodeYUVInto(
-    const uint8_t* data, size_t data_size,
-    uint8_t* luma, size_t luma_size, int luma_stride,
-    uint8_t* u, size_t u_size, int u_stride,
-    uint8_t* v, size_t v_size, int v_stride);
-
-//------------------------------------------------------------------------------
-// Output colorspaces and buffer
-
-// Colorspaces
-// Note: the naming describes the byte-ordering of packed samples in memory.
-// For instance, MODE_BGRA relates to samples ordered as B,G,R,A,B,G,R,A,...
-// Non-capital names (e.g.:MODE_Argb) relates to pre-multiplied RGB channels.
-// RGBA-4444 and RGB-565 colorspaces are represented by following byte-order:
-// RGBA-4444: [r3 r2 r1 r0 g3 g2 g1 g0], [b3 b2 b1 b0 a3 a2 a1 a0], ...
-// RGB-565: [r4 r3 r2 r1 r0 g5 g4 g3], [g2 g1 g0 b4 b3 b2 b1 b0], ...
-// In the case WEBP_SWAP_16BITS_CSP is defined, the bytes are swapped for
-// these two modes:
-// RGBA-4444: [b3 b2 b1 b0 a3 a2 a1 a0], [r3 r2 r1 r0 g3 g2 g1 g0], ...
-// RGB-565: [g2 g1 g0 b4 b3 b2 b1 b0], [r4 r3 r2 r1 r0 g5 g4 g3], ...
-
-typedef enum WEBP_CSP_MODE {
-  MODE_RGB = 0, MODE_RGBA = 1,
-  MODE_BGR = 2, MODE_BGRA = 3,
-  MODE_ARGB = 4, MODE_RGBA_4444 = 5,
-  MODE_RGB_565 = 6,
-  // RGB-premultiplied transparent modes (alpha value is preserved)
-  MODE_rgbA = 7,
-  MODE_bgrA = 8,
-  MODE_Argb = 9,
-  MODE_rgbA_4444 = 10,
-  // YUV modes must come after RGB ones.
-  MODE_YUV = 11, MODE_YUVA = 12,  // yuv 4:2:0
-  MODE_LAST = 13
-} WEBP_CSP_MODE;
-
-// Some useful macros:
-static WEBP_INLINE int WebPIsPremultipliedMode(WEBP_CSP_MODE mode) {
-  return (mode == MODE_rgbA || mode == MODE_bgrA || mode == MODE_Argb ||
-          mode == MODE_rgbA_4444);
-}
-
-static WEBP_INLINE int WebPIsAlphaMode(WEBP_CSP_MODE mode) {
-  return (mode == MODE_RGBA || mode == MODE_BGRA || mode == MODE_ARGB ||
-          mode == MODE_RGBA_4444 || mode == MODE_YUVA ||
-          WebPIsPremultipliedMode(mode));
-}
-
-static WEBP_INLINE int WebPIsRGBMode(WEBP_CSP_MODE mode) {
-  return (mode < MODE_YUV);
-}
-
-//------------------------------------------------------------------------------
-// WebPDecBuffer: Generic structure for describing the output sample buffer.
-
-struct WebPRGBABuffer {    // view as RGBA
-  uint8_t* rgba;    // pointer to RGBA samples
-  int stride;       // stride in bytes from one scanline to the next.
-  size_t size;      // total size of the *rgba buffer.
-};
-
-struct WebPYUVABuffer {              // view as YUVA
-  uint8_t* y, *u, *v, *a;     // pointer to luma, chroma U/V, alpha samples
-  int y_stride;               // luma stride
-  int u_stride, v_stride;     // chroma strides
-  int a_stride;               // alpha stride
-  size_t y_size;              // luma plane size
-  size_t u_size, v_size;      // chroma planes size
-  size_t a_size;              // alpha-plane size
-};
-
-// Output buffer
-struct WebPDecBuffer {
-  WEBP_CSP_MODE colorspace;  // Colorspace.
-  int width, height;         // Dimensions.
-  int is_external_memory;    // If non-zero, 'internal_memory' pointer is not
-                             // used. If value is '2' or more, the external
-                             // memory is considered 'slow' and multiple
-                             // read/write will be avoided.
-  union {
-    WebPRGBABuffer RGBA;
-    WebPYUVABuffer YUVA;
-  } u;                       // Nameless union of buffer parameters.
-  uint32_t       pad[4];     // padding for later use
-
-  uint8_t* private_memory;   // Internally allocated memory (only when
-                             // is_external_memory is 0). Should not be used
-                             // externally, but accessed via the buffer union.
-};
-
-// Internal, version-checked, entry point
-WEBP_EXTERN int WebPInitDecBufferInternal(WebPDecBuffer*, int);
-
-// Initialize the structure as empty. Must be called before any other use.
-// Returns false in case of version mismatch
-static WEBP_INLINE int WebPInitDecBuffer(WebPDecBuffer* buffer) {
-  return WebPInitDecBufferInternal(buffer, WEBP_DECODER_ABI_VERSION);
-}
-
-// Free any memory associated with the buffer. Must always be called last.
-// Note: doesn't free the 'buffer' structure itself.
-WEBP_EXTERN void WebPFreeDecBuffer(WebPDecBuffer* buffer);
-
-//------------------------------------------------------------------------------
-// Enumeration of the status codes
-
-typedef enum VP8StatusCode {
-  VP8_STATUS_OK = 0,
-  VP8_STATUS_OUT_OF_MEMORY,
-  VP8_STATUS_INVALID_PARAM,
-  VP8_STATUS_BITSTREAM_ERROR,
-  VP8_STATUS_UNSUPPORTED_FEATURE,
-  VP8_STATUS_SUSPENDED,
-  VP8_STATUS_USER_ABORT,
-  VP8_STATUS_NOT_ENOUGH_DATA
-} VP8StatusCode;
-
-//------------------------------------------------------------------------------
-// Incremental decoding
-//
-// This API allows streamlined decoding of partial data.
-// Picture can be incrementally decoded as data become available thanks to the
-// WebPIDecoder object. This object can be left in a SUSPENDED state if the
-// picture is only partially decoded, pending additional input.
-// Code example:
-//
-//   WebPInitDecBuffer(&output_buffer);
-//   output_buffer.colorspace = mode;
-//   ...
-//   WebPIDecoder* idec = WebPINewDecoder(&output_buffer);
-//   while (additional_data_is_available) {
-//     // ... (get additional data in some new_data[] buffer)
-//     status = WebPIAppend(idec, new_data, new_data_size);
-//     if (status != VP8_STATUS_OK && status != VP8_STATUS_SUSPENDED) {
-//       break;    // an error occurred.
-//     }
-//
-//     // The above call decodes the current available buffer.
-//     // Part of the image can now be refreshed by calling
-//     // WebPIDecGetRGB()/WebPIDecGetYUVA() etc.
-//   }
-//   WebPIDelete(idec);
-
-// Creates a new incremental decoder with the supplied buffer parameter.
-// This output_buffer can be passed NULL, in which case a default output buffer
-// is used (with MODE_RGB). Otherwise, an internal reference to 'output_buffer'
-// is kept, which means that the lifespan of 'output_buffer' must be larger than
-// that of the returned WebPIDecoder object.
-// The supplied 'output_buffer' content MUST NOT be changed between calls to
-// WebPIAppend() or WebPIUpdate() unless 'output_buffer.is_external_memory' is
-// not set to 0. In such a case, it is allowed to modify the pointers, size and
-// stride of output_buffer.u.RGBA or output_buffer.u.YUVA, provided they remain
-// within valid bounds.
-// All other fields of WebPDecBuffer MUST remain constant between calls.
-// Returns NULL if the allocation failed.
-WEBP_EXTERN WebPIDecoder* WebPINewDecoder(WebPDecBuffer* output_buffer);
-
-// This function allocates and initializes an incremental-decoder object, which
-// will output the RGB/A samples specified by 'csp' into a preallocated
-// buffer 'output_buffer'. The size of this buffer is at least
-// 'output_buffer_size' and the stride (distance in bytes between two scanlines)
-// is specified by 'output_stride'.
-// Additionally, output_buffer can be passed NULL in which case the output
-// buffer will be allocated automatically when the decoding starts. The
-// colorspace 'csp' is taken into account for allocating this buffer. All other
-// parameters are ignored.
-// Returns NULL if the allocation failed, or if some parameters are invalid.
-WEBP_EXTERN WebPIDecoder* WebPINewRGB(
-    WEBP_CSP_MODE csp,
-    uint8_t* output_buffer, size_t output_buffer_size, int output_stride);
-
-// This function allocates and initializes an incremental-decoder object, which
-// will output the raw luma/chroma samples into a preallocated planes if
-// supplied. The luma plane is specified by its pointer 'luma', its size
-// 'luma_size' and its stride 'luma_stride'. Similarly, the chroma-u plane
-// is specified by the 'u', 'u_size' and 'u_stride' parameters, and the chroma-v
-// plane by 'v' and 'v_size'. And same for the alpha-plane. The 'a' pointer
-// can be pass NULL in case one is not interested in the transparency plane.
-// Conversely, 'luma' can be passed NULL if no preallocated planes are supplied.
-// In this case, the output buffer will be automatically allocated (using
-// MODE_YUVA) when decoding starts. All parameters are then ignored.
-// Returns NULL if the allocation failed or if a parameter is invalid.
-WEBP_EXTERN WebPIDecoder* WebPINewYUVA(
-    uint8_t* luma, size_t luma_size, int luma_stride,
-    uint8_t* u, size_t u_size, int u_stride,
-    uint8_t* v, size_t v_size, int v_stride,
-    uint8_t* a, size_t a_size, int a_stride);
-
-// Deprecated version of the above, without the alpha plane.
-// Kept for backward compatibility.
-WEBP_EXTERN WebPIDecoder* WebPINewYUV(
-    uint8_t* luma, size_t luma_size, int luma_stride,
-    uint8_t* u, size_t u_size, int u_stride,
-    uint8_t* v, size_t v_size, int v_stride);
-
-// Deletes the WebPIDecoder object and associated memory. Must always be called
-// if WebPINewDecoder, WebPINewRGB or WebPINewYUV succeeded.
-WEBP_EXTERN void WebPIDelete(WebPIDecoder* idec);
-
-// Copies and decodes the next available data. Returns VP8_STATUS_OK when
-// the image is successfully decoded. Returns VP8_STATUS_SUSPENDED when more
-// data is expected. Returns error in other cases.
-WEBP_EXTERN VP8StatusCode WebPIAppend(
-    WebPIDecoder* idec, const uint8_t* data, size_t data_size);
-
-// A variant of the above function to be used when data buffer contains
-// partial data from the beginning. In this case data buffer is not copied
-// to the internal memory.
-// Note that the value of the 'data' pointer can change between calls to
-// WebPIUpdate, for instance when the data buffer is resized to fit larger data.
-WEBP_EXTERN VP8StatusCode WebPIUpdate(
-    WebPIDecoder* idec, const uint8_t* data, size_t data_size);
-
-// Returns the RGB/A image decoded so far. Returns NULL if output params
-// are not initialized yet. The RGB/A output type corresponds to the colorspace
-// specified during call to WebPINewDecoder() or WebPINewRGB().
-// *last_y is the index of last decoded row in raster scan order. Some pointers
-// (*last_y, *width etc.) can be NULL if corresponding information is not
-// needed. The values in these pointers are only valid on successful (non-NULL)
-// return.
-WEBP_EXTERN uint8_t* WebPIDecGetRGB(
-    const WebPIDecoder* idec, int* last_y,
-    int* width, int* height, int* stride);
-
-// Same as above function to get a YUVA image. Returns pointer to the luma
-// plane or NULL in case of error. If there is no alpha information
-// the alpha pointer '*a' will be returned NULL.
-WEBP_EXTERN uint8_t* WebPIDecGetYUVA(
-    const WebPIDecoder* idec, int* last_y,
-    uint8_t** u, uint8_t** v, uint8_t** a,
-    int* width, int* height, int* stride, int* uv_stride, int* a_stride);
-
-// Deprecated alpha-less version of WebPIDecGetYUVA(): it will ignore the
-// alpha information (if present). Kept for backward compatibility.
-static WEBP_INLINE uint8_t* WebPIDecGetYUV(
-    const WebPIDecoder* idec, int* last_y, uint8_t** u, uint8_t** v,
-    int* width, int* height, int* stride, int* uv_stride) {
-  return WebPIDecGetYUVA(idec, last_y, u, v, NULL, width, height,
-                         stride, uv_stride, NULL);
-}
-
-// Generic call to retrieve information about the displayable area.
-// If non NULL, the left/right/width/height pointers are filled with the visible
-// rectangular area so far.
-// Returns NULL in case the incremental decoder object is in an invalid state.
-// Otherwise returns the pointer to the internal representation. This structure
-// is read-only, tied to WebPIDecoder's lifespan and should not be modified.
-WEBP_EXTERN const WebPDecBuffer* WebPIDecodedArea(
-    const WebPIDecoder* idec, int* left, int* top, int* width, int* height);
-
-//------------------------------------------------------------------------------
-// Advanced decoding parametrization
-//
-//  Code sample for using the advanced decoding API
-/*
-     // A) Init a configuration object
-     WebPDecoderConfig config;
-     CHECK(WebPInitDecoderConfig(&config));
-
-     // B) optional: retrieve the bitstream's features.
-     CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK);
-
-     // C) Adjust 'config', if needed
-     config.no_fancy_upsampling = 1;
-     config.output.colorspace = MODE_BGRA;
-     // etc.
-
-     // Note that you can also make config.output point to an externally
-     // supplied memory buffer, provided it's big enough to store the decoded
-     // picture. Otherwise, config.output will just be used to allocate memory
-     // and store the decoded picture.
-
-     // D) Decode!
-     CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK);
-
-     // E) Decoded image is now in config.output (and config.output.u.RGBA)
-
-     // F) Reclaim memory allocated in config's object. It's safe to call
-     // this function even if the memory is external and wasn't allocated
-     // by WebPDecode().
-     WebPFreeDecBuffer(&config.output);
-*/
-
-// Features gathered from the bitstream
-struct WebPBitstreamFeatures {
-  int width;          // Width in pixels, as read from the bitstream.
-  int height;         // Height in pixels, as read from the bitstream.
-  int has_alpha;      // True if the bitstream contains an alpha channel.
-  int has_animation;  // True if the bitstream is an animation.
-  int format;         // 0 = undefined (/mixed), 1 = lossy, 2 = lossless
-
-  uint32_t pad[5];    // padding for later use
-};
-
-// Internal, version-checked, entry point
-WEBP_EXTERN VP8StatusCode WebPGetFeaturesInternal(
-    const uint8_t*, size_t, WebPBitstreamFeatures*, int);
-
-// Retrieve features from the bitstream. The *features structure is filled
-// with information gathered from the bitstream.
-// Returns VP8_STATUS_OK when the features are successfully retrieved. Returns
-// VP8_STATUS_NOT_ENOUGH_DATA when more data is needed to retrieve the
-// features from headers. Returns error in other cases.
-// Note: The following chunk sequences (before the raw VP8/VP8L data) are
-// considered valid by this function:
-// RIFF + VP8(L)
-// RIFF + VP8X + (optional chunks) + VP8(L)
-// ALPH + VP8 <-- Not a valid WebP format: only allowed for internal purpose.
-// VP8(L)     <-- Not a valid WebP format: only allowed for internal purpose.
-static WEBP_INLINE VP8StatusCode WebPGetFeatures(
-    const uint8_t* data, size_t data_size,
-    WebPBitstreamFeatures* features) {
-  return WebPGetFeaturesInternal(data, data_size, features,
-                                 WEBP_DECODER_ABI_VERSION);
-}
-
-// Decoding options
-struct WebPDecoderOptions {
-  int bypass_filtering;               // if true, skip the in-loop filtering
-  int no_fancy_upsampling;            // if true, use faster pointwise upsampler
-  int use_cropping;                   // if true, cropping is applied _first_
-  int crop_left, crop_top;            // top-left position for cropping.
-                                      // Will be snapped to even values.
-  int crop_width, crop_height;        // dimension of the cropping area
-  int use_scaling;                    // if true, scaling is applied _afterward_
-  int scaled_width, scaled_height;    // final resolution
-  int use_threads;                    // if true, use multi-threaded decoding
-  int dithering_strength;             // dithering strength (0=Off, 100=full)
-  int flip;                           // flip output vertically
-  int alpha_dithering_strength;       // alpha dithering strength in [0..100]
-
-  uint32_t pad[5];                    // padding for later use
-};
-
-// Main object storing the configuration for advanced decoding.
-struct WebPDecoderConfig {
-  WebPBitstreamFeatures input;  // Immutable bitstream features (optional)
-  WebPDecBuffer output;         // Output buffer (can point to external mem)
-  WebPDecoderOptions options;   // Decoding options
-};
-
-// Internal, version-checked, entry point
-WEBP_EXTERN int WebPInitDecoderConfigInternal(WebPDecoderConfig*, int);
-
-// Initialize the configuration as empty. This function must always be
-// called first, unless WebPGetFeatures() is to be called.
-// Returns false in case of mismatched version.
-static WEBP_INLINE int WebPInitDecoderConfig(WebPDecoderConfig* config) {
-  return WebPInitDecoderConfigInternal(config, WEBP_DECODER_ABI_VERSION);
-}
-
-// Instantiate a new incremental decoder object with the requested
-// configuration. The bitstream can be passed using 'data' and 'data_size'
-// parameter, in which case the features will be parsed and stored into
-// config->input. Otherwise, 'data' can be NULL and no parsing will occur.
-// Note that 'config' can be NULL too, in which case a default configuration
-// is used. If 'config' is not NULL, it must outlive the WebPIDecoder object
-// as some references to its fields will be used. No internal copy of 'config'
-// is made.
-// The return WebPIDecoder object must always be deleted calling WebPIDelete().
-// Returns NULL in case of error (and config->status will then reflect
-// the error condition, if available).
-WEBP_EXTERN WebPIDecoder* WebPIDecode(const uint8_t* data, size_t data_size,
-                                      WebPDecoderConfig* config);
-
-// Non-incremental version. This version decodes the full data at once, taking
-// 'config' into account. Returns decoding status (which should be VP8_STATUS_OK
-// if the decoding was successful). Note that 'config' cannot be NULL.
-WEBP_EXTERN VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size,
-                                     WebPDecoderConfig* config);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_WEBP_DECODE_H_
diff --git a/ios/Pods/libwebp/src/webp/demux.h b/ios/Pods/libwebp/src/webp/demux.h
deleted file mode 100644
index 846eeb1..0000000
--- a/ios/Pods/libwebp/src/webp/demux.h
+++ /dev/null
@@ -1,363 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Demux API.
-// Enables extraction of image and extended format data from WebP files.
-
-// Code Example: Demuxing WebP data to extract all the frames, ICC profile
-// and EXIF/XMP metadata.
-/*
-  WebPDemuxer* demux = WebPDemux(&webp_data);
-
-  uint32_t width = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
-  uint32_t height = WebPDemuxGetI(demux, WEBP_FF_CANVAS_HEIGHT);
-  // ... (Get information about the features present in the WebP file).
-  uint32_t flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS);
-
-  // ... (Iterate over all frames).
-  WebPIterator iter;
-  if (WebPDemuxGetFrame(demux, 1, &iter)) {
-    do {
-      // ... (Consume 'iter'; e.g. Decode 'iter.fragment' with WebPDecode(),
-      // ... and get other frame properties like width, height, offsets etc.
-      // ... see 'struct WebPIterator' below for more info).
-    } while (WebPDemuxNextFrame(&iter));
-    WebPDemuxReleaseIterator(&iter);
-  }
-
-  // ... (Extract metadata).
-  WebPChunkIterator chunk_iter;
-  if (flags & ICCP_FLAG) WebPDemuxGetChunk(demux, "ICCP", 1, &chunk_iter);
-  // ... (Consume the ICC profile in 'chunk_iter.chunk').
-  WebPDemuxReleaseChunkIterator(&chunk_iter);
-  if (flags & EXIF_FLAG) WebPDemuxGetChunk(demux, "EXIF", 1, &chunk_iter);
-  // ... (Consume the EXIF metadata in 'chunk_iter.chunk').
-  WebPDemuxReleaseChunkIterator(&chunk_iter);
-  if (flags & XMP_FLAG) WebPDemuxGetChunk(demux, "XMP ", 1, &chunk_iter);
-  // ... (Consume the XMP metadata in 'chunk_iter.chunk').
-  WebPDemuxReleaseChunkIterator(&chunk_iter);
-  WebPDemuxDelete(demux);
-*/
-
-#ifndef WEBP_WEBP_DEMUX_H_
-#define WEBP_WEBP_DEMUX_H_
-
-#include "./decode.h"     // for WEBP_CSP_MODE
-#include "./mux_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define WEBP_DEMUX_ABI_VERSION 0x0107    // MAJOR(8b) + MINOR(8b)
-
-// Note: forward declaring enumerations is not allowed in (strict) C and C++,
-// the types are left here for reference.
-// typedef enum WebPDemuxState WebPDemuxState;
-// typedef enum WebPFormatFeature WebPFormatFeature;
-typedef struct WebPDemuxer WebPDemuxer;
-typedef struct WebPIterator WebPIterator;
-typedef struct WebPChunkIterator WebPChunkIterator;
-typedef struct WebPAnimInfo WebPAnimInfo;
-typedef struct WebPAnimDecoderOptions WebPAnimDecoderOptions;
-
-//------------------------------------------------------------------------------
-
-// Returns the version number of the demux library, packed in hexadecimal using
-// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507.
-WEBP_EXTERN int WebPGetDemuxVersion(void);
-
-//------------------------------------------------------------------------------
-// Life of a Demux object
-
-typedef enum WebPDemuxState {
-  WEBP_DEMUX_PARSE_ERROR    = -1,  // An error occurred while parsing.
-  WEBP_DEMUX_PARSING_HEADER =  0,  // Not enough data to parse full header.
-  WEBP_DEMUX_PARSED_HEADER  =  1,  // Header parsing complete,
-                                   // data may be available.
-  WEBP_DEMUX_DONE           =  2   // Entire file has been parsed.
-} WebPDemuxState;
-
-// Internal, version-checked, entry point
-WEBP_EXTERN WebPDemuxer* WebPDemuxInternal(
-    const WebPData*, int, WebPDemuxState*, int);
-
-// Parses the full WebP file given by 'data'. For single images the WebP file
-// header alone or the file header and the chunk header may be absent.
-// Returns a WebPDemuxer object on successful parse, NULL otherwise.
-static WEBP_INLINE WebPDemuxer* WebPDemux(const WebPData* data) {
-  return WebPDemuxInternal(data, 0, NULL, WEBP_DEMUX_ABI_VERSION);
-}
-
-// Parses the possibly incomplete WebP file given by 'data'.
-// If 'state' is non-NULL it will be set to indicate the status of the demuxer.
-// Returns NULL in case of error or if there isn't enough data to start parsing;
-// and a WebPDemuxer object on successful parse.
-// Note that WebPDemuxer keeps internal pointers to 'data' memory segment.
-// If this data is volatile, the demuxer object should be deleted (by calling
-// WebPDemuxDelete()) and WebPDemuxPartial() called again on the new data.
-// This is usually an inexpensive operation.
-static WEBP_INLINE WebPDemuxer* WebPDemuxPartial(
-    const WebPData* data, WebPDemuxState* state) {
-  return WebPDemuxInternal(data, 1, state, WEBP_DEMUX_ABI_VERSION);
-}
-
-// Frees memory associated with 'dmux'.
-WEBP_EXTERN void WebPDemuxDelete(WebPDemuxer* dmux);
-
-//------------------------------------------------------------------------------
-// Data/information extraction.
-
-typedef enum WebPFormatFeature {
-  WEBP_FF_FORMAT_FLAGS,      // bit-wise combination of WebPFeatureFlags
-                             // corresponding to the 'VP8X' chunk (if present).
-  WEBP_FF_CANVAS_WIDTH,
-  WEBP_FF_CANVAS_HEIGHT,
-  WEBP_FF_LOOP_COUNT,        // only relevant for animated file
-  WEBP_FF_BACKGROUND_COLOR,  // idem.
-  WEBP_FF_FRAME_COUNT        // Number of frames present in the demux object.
-                             // In case of a partial demux, this is the number
-                             // of frames seen so far, with the last frame
-                             // possibly being partial.
-} WebPFormatFeature;
-
-// Get the 'feature' value from the 'dmux'.
-// NOTE: values are only valid if WebPDemux() was used or WebPDemuxPartial()
-// returned a state > WEBP_DEMUX_PARSING_HEADER.
-// If 'feature' is WEBP_FF_FORMAT_FLAGS, the returned value is a bit-wise
-// combination of WebPFeatureFlags values.
-// If 'feature' is WEBP_FF_LOOP_COUNT, WEBP_FF_BACKGROUND_COLOR, the returned
-// value is only meaningful if the bitstream is animated.
-WEBP_EXTERN uint32_t WebPDemuxGetI(
-    const WebPDemuxer* dmux, WebPFormatFeature feature);
-
-//------------------------------------------------------------------------------
-// Frame iteration.
-
-struct WebPIterator {
-  int frame_num;
-  int num_frames;          // equivalent to WEBP_FF_FRAME_COUNT.
-  int x_offset, y_offset;  // offset relative to the canvas.
-  int width, height;       // dimensions of this frame.
-  int duration;            // display duration in milliseconds.
-  WebPMuxAnimDispose dispose_method;  // dispose method for the frame.
-  int complete;   // true if 'fragment' contains a full frame. partial images
-                  // may still be decoded with the WebP incremental decoder.
-  WebPData fragment;  // The frame given by 'frame_num'. Note for historical
-                      // reasons this is called a fragment.
-  int has_alpha;      // True if the frame contains transparency.
-  WebPMuxAnimBlend blend_method;  // Blend operation for the frame.
-
-  uint32_t pad[2];         // padding for later use.
-  void* private_;          // for internal use only.
-};
-
-// Retrieves frame 'frame_number' from 'dmux'.
-// 'iter->fragment' points to the frame on return from this function.
-// Setting 'frame_number' equal to 0 will return the last frame of the image.
-// Returns false if 'dmux' is NULL or frame 'frame_number' is not present.
-// Call WebPDemuxReleaseIterator() when use of the iterator is complete.
-// NOTE: 'dmux' must persist for the lifetime of 'iter'.
-WEBP_EXTERN int WebPDemuxGetFrame(
-    const WebPDemuxer* dmux, int frame_number, WebPIterator* iter);
-
-// Sets 'iter->fragment' to point to the next ('iter->frame_num' + 1) or
-// previous ('iter->frame_num' - 1) frame. These functions do not loop.
-// Returns true on success, false otherwise.
-WEBP_EXTERN int WebPDemuxNextFrame(WebPIterator* iter);
-WEBP_EXTERN int WebPDemuxPrevFrame(WebPIterator* iter);
-
-// Releases any memory associated with 'iter'.
-// Must be called before any subsequent calls to WebPDemuxGetChunk() on the same
-// iter. Also, must be called before destroying the associated WebPDemuxer with
-// WebPDemuxDelete().
-WEBP_EXTERN void WebPDemuxReleaseIterator(WebPIterator* iter);
-
-//------------------------------------------------------------------------------
-// Chunk iteration.
-
-struct WebPChunkIterator {
-  // The current and total number of chunks with the fourcc given to
-  // WebPDemuxGetChunk().
-  int chunk_num;
-  int num_chunks;
-  WebPData chunk;    // The payload of the chunk.
-
-  uint32_t pad[6];   // padding for later use
-  void* private_;
-};
-
-// Retrieves the 'chunk_number' instance of the chunk with id 'fourcc' from
-// 'dmux'.
-// 'fourcc' is a character array containing the fourcc of the chunk to return,
-// e.g., "ICCP", "XMP ", "EXIF", etc.
-// Setting 'chunk_number' equal to 0 will return the last chunk in a set.
-// Returns true if the chunk is found, false otherwise. Image related chunk
-// payloads are accessed through WebPDemuxGetFrame() and related functions.
-// Call WebPDemuxReleaseChunkIterator() when use of the iterator is complete.
-// NOTE: 'dmux' must persist for the lifetime of the iterator.
-WEBP_EXTERN int WebPDemuxGetChunk(const WebPDemuxer* dmux,
-                                  const char fourcc[4], int chunk_number,
-                                  WebPChunkIterator* iter);
-
-// Sets 'iter->chunk' to point to the next ('iter->chunk_num' + 1) or previous
-// ('iter->chunk_num' - 1) chunk. These functions do not loop.
-// Returns true on success, false otherwise.
-WEBP_EXTERN int WebPDemuxNextChunk(WebPChunkIterator* iter);
-WEBP_EXTERN int WebPDemuxPrevChunk(WebPChunkIterator* iter);
-
-// Releases any memory associated with 'iter'.
-// Must be called before destroying the associated WebPDemuxer with
-// WebPDemuxDelete().
-WEBP_EXTERN void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);
-
-//------------------------------------------------------------------------------
-// WebPAnimDecoder API
-//
-// This API allows decoding (possibly) animated WebP images.
-//
-// Code Example:
-/*
-  WebPAnimDecoderOptions dec_options;
-  WebPAnimDecoderOptionsInit(&dec_options);
-  // Tune 'dec_options' as needed.
-  WebPAnimDecoder* dec = WebPAnimDecoderNew(webp_data, &dec_options);
-  WebPAnimInfo anim_info;
-  WebPAnimDecoderGetInfo(dec, &anim_info);
-  for (uint32_t i = 0; i < anim_info.loop_count; ++i) {
-    while (WebPAnimDecoderHasMoreFrames(dec)) {
-      uint8_t* buf;
-      int timestamp;
-      WebPAnimDecoderGetNext(dec, &buf, &timestamp);
-      // ... (Render 'buf' based on 'timestamp').
-      // ... (Do NOT free 'buf', as it is owned by 'dec').
-    }
-    WebPAnimDecoderReset(dec);
-  }
-  const WebPDemuxer* demuxer = WebPAnimDecoderGetDemuxer(dec);
-  // ... (Do something using 'demuxer'; e.g. get EXIF/XMP/ICC data).
-  WebPAnimDecoderDelete(dec);
-*/
-
-typedef struct WebPAnimDecoder WebPAnimDecoder;  // Main opaque object.
-
-// Global options.
-struct WebPAnimDecoderOptions {
-  // Output colorspace. Only the following modes are supported:
-  // MODE_RGBA, MODE_BGRA, MODE_rgbA and MODE_bgrA.
-  WEBP_CSP_MODE color_mode;
-  int use_threads;           // If true, use multi-threaded decoding.
-  uint32_t padding[7];       // Padding for later use.
-};
-
-// Internal, version-checked, entry point.
-WEBP_EXTERN int WebPAnimDecoderOptionsInitInternal(
-    WebPAnimDecoderOptions*, int);
-
-// Should always be called, to initialize a fresh WebPAnimDecoderOptions
-// structure before modification. Returns false in case of version mismatch.
-// WebPAnimDecoderOptionsInit() must have succeeded before using the
-// 'dec_options' object.
-static WEBP_INLINE int WebPAnimDecoderOptionsInit(
-    WebPAnimDecoderOptions* dec_options) {
-  return WebPAnimDecoderOptionsInitInternal(dec_options,
-                                            WEBP_DEMUX_ABI_VERSION);
-}
-
-// Internal, version-checked, entry point.
-WEBP_EXTERN WebPAnimDecoder* WebPAnimDecoderNewInternal(
-    const WebPData*, const WebPAnimDecoderOptions*, int);
-
-// Creates and initializes a WebPAnimDecoder object.
-// Parameters:
-//   webp_data - (in) WebP bitstream. This should remain unchanged during the
-//                    lifetime of the output WebPAnimDecoder object.
-//   dec_options - (in) decoding options. Can be passed NULL to choose
-//                      reasonable defaults (in particular, color mode MODE_RGBA
-//                      will be picked).
-// Returns:
-//   A pointer to the newly created WebPAnimDecoder object, or NULL in case of
-//   parsing error, invalid option or memory error.
-static WEBP_INLINE WebPAnimDecoder* WebPAnimDecoderNew(
-    const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options) {
-  return WebPAnimDecoderNewInternal(webp_data, dec_options,
-                                    WEBP_DEMUX_ABI_VERSION);
-}
-
-// Global information about the animation..
-struct WebPAnimInfo {
-  uint32_t canvas_width;
-  uint32_t canvas_height;
-  uint32_t loop_count;
-  uint32_t bgcolor;
-  uint32_t frame_count;
-  uint32_t pad[4];   // padding for later use
-};
-
-// Get global information about the animation.
-// Parameters:
-//   dec - (in) decoder instance to get information from.
-//   info - (out) global information fetched from the animation.
-// Returns:
-//   True on success.
-WEBP_EXTERN int WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec,
-                                       WebPAnimInfo* info);
-
-// Fetch the next frame from 'dec' based on options supplied to
-// WebPAnimDecoderNew(). This will be a fully reconstructed canvas of size
-// 'canvas_width * 4 * canvas_height', and not just the frame sub-rectangle. The
-// returned buffer 'buf' is valid only until the next call to
-// WebPAnimDecoderGetNext(), WebPAnimDecoderReset() or WebPAnimDecoderDelete().
-// Parameters:
-//   dec - (in/out) decoder instance from which the next frame is to be fetched.
-//   buf - (out) decoded frame.
-//   timestamp - (out) timestamp of the frame in milliseconds.
-// Returns:
-//   False if any of the arguments are NULL, or if there is a parsing or
-//   decoding error, or if there are no more frames. Otherwise, returns true.
-WEBP_EXTERN int WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
-                                       uint8_t** buf, int* timestamp);
-
-// Check if there are more frames left to decode.
-// Parameters:
-//   dec - (in) decoder instance to be checked.
-// Returns:
-//   True if 'dec' is not NULL and some frames are yet to be decoded.
-//   Otherwise, returns false.
-WEBP_EXTERN int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec);
-
-// Resets the WebPAnimDecoder object, so that next call to
-// WebPAnimDecoderGetNext() will restart decoding from 1st frame. This would be
-// helpful when all frames need to be decoded multiple times (e.g.
-// info.loop_count times) without destroying and recreating the 'dec' object.
-// Parameters:
-//   dec - (in/out) decoder instance to be reset
-WEBP_EXTERN void WebPAnimDecoderReset(WebPAnimDecoder* dec);
-
-// Grab the internal demuxer object.
-// Getting the demuxer object can be useful if one wants to use operations only
-// available through demuxer; e.g. to get XMP/EXIF/ICC metadata. The returned
-// demuxer object is owned by 'dec' and is valid only until the next call to
-// WebPAnimDecoderDelete().
-//
-// Parameters:
-//   dec - (in) decoder instance from which the demuxer object is to be fetched.
-WEBP_EXTERN const WebPDemuxer* WebPAnimDecoderGetDemuxer(
-    const WebPAnimDecoder* dec);
-
-// Deletes the WebPAnimDecoder object.
-// Parameters:
-//   dec - (in/out) decoder instance to be deleted
-WEBP_EXTERN void WebPAnimDecoderDelete(WebPAnimDecoder* dec);
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_WEBP_DEMUX_H_
diff --git a/ios/Pods/libwebp/src/webp/encode.h b/ios/Pods/libwebp/src/webp/encode.h
deleted file mode 100644
index 549cf07..0000000
--- a/ios/Pods/libwebp/src/webp/encode.h
+++ /dev/null
@@ -1,545 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//   WebP encoder: main interface
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_WEBP_ENCODE_H_
-#define WEBP_WEBP_ENCODE_H_
-
-#include "./types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define WEBP_ENCODER_ABI_VERSION 0x020e    // MAJOR(8b) + MINOR(8b)
-
-// Note: forward declaring enumerations is not allowed in (strict) C and C++,
-// the types are left here for reference.
-// typedef enum WebPImageHint WebPImageHint;
-// typedef enum WebPEncCSP WebPEncCSP;
-// typedef enum WebPPreset WebPPreset;
-// typedef enum WebPEncodingError WebPEncodingError;
-typedef struct WebPConfig WebPConfig;
-typedef struct WebPPicture WebPPicture;   // main structure for I/O
-typedef struct WebPAuxStats WebPAuxStats;
-typedef struct WebPMemoryWriter WebPMemoryWriter;
-
-// Return the encoder's version number, packed in hexadecimal using 8bits for
-// each of major/minor/revision. E.g: v2.5.7 is 0x020507.
-WEBP_EXTERN int WebPGetEncoderVersion(void);
-
-//------------------------------------------------------------------------------
-// One-stop-shop call! No questions asked:
-
-// Returns the size of the compressed data (pointed to by *output), or 0 if
-// an error occurred. The compressed data must be released by the caller
-// using the call 'WebPFree(*output)'.
-// These functions compress using the lossy format, and the quality_factor
-// can go from 0 (smaller output, lower quality) to 100 (best quality,
-// larger output).
-WEBP_EXTERN size_t WebPEncodeRGB(const uint8_t* rgb,
-                                 int width, int height, int stride,
-                                 float quality_factor, uint8_t** output);
-WEBP_EXTERN size_t WebPEncodeBGR(const uint8_t* bgr,
-                                 int width, int height, int stride,
-                                 float quality_factor, uint8_t** output);
-WEBP_EXTERN size_t WebPEncodeRGBA(const uint8_t* rgba,
-                                  int width, int height, int stride,
-                                  float quality_factor, uint8_t** output);
-WEBP_EXTERN size_t WebPEncodeBGRA(const uint8_t* bgra,
-                                  int width, int height, int stride,
-                                  float quality_factor, uint8_t** output);
-
-// These functions are the equivalent of the above, but compressing in a
-// lossless manner. Files are usually larger than lossy format, but will
-// not suffer any compression loss.
-WEBP_EXTERN size_t WebPEncodeLosslessRGB(const uint8_t* rgb,
-                                         int width, int height, int stride,
-                                         uint8_t** output);
-WEBP_EXTERN size_t WebPEncodeLosslessBGR(const uint8_t* bgr,
-                                         int width, int height, int stride,
-                                         uint8_t** output);
-WEBP_EXTERN size_t WebPEncodeLosslessRGBA(const uint8_t* rgba,
-                                          int width, int height, int stride,
-                                          uint8_t** output);
-WEBP_EXTERN size_t WebPEncodeLosslessBGRA(const uint8_t* bgra,
-                                          int width, int height, int stride,
-                                          uint8_t** output);
-
-// Releases memory returned by the WebPEncode*() functions above.
-WEBP_EXTERN void WebPFree(void* ptr);
-
-//------------------------------------------------------------------------------
-// Coding parameters
-
-// Image characteristics hint for the underlying encoder.
-typedef enum WebPImageHint {
-  WEBP_HINT_DEFAULT = 0,  // default preset.
-  WEBP_HINT_PICTURE,      // digital picture, like portrait, inner shot
-  WEBP_HINT_PHOTO,        // outdoor photograph, with natural lighting
-  WEBP_HINT_GRAPH,        // Discrete tone image (graph, map-tile etc).
-  WEBP_HINT_LAST
-} WebPImageHint;
-
-// Compression parameters.
-struct WebPConfig {
-  int lossless;           // Lossless encoding (0=lossy(default), 1=lossless).
-  float quality;          // between 0 and 100. For lossy, 0 gives the smallest
-                          // size and 100 the largest. For lossless, this
-                          // parameter is the amount of effort put into the
-                          // compression: 0 is the fastest but gives larger
-                          // files compared to the slowest, but best, 100.
-  int method;             // quality/speed trade-off (0=fast, 6=slower-better)
-
-  WebPImageHint image_hint;  // Hint for image type (lossless only for now).
-
-  int target_size;        // if non-zero, set the desired target size in bytes.
-                          // Takes precedence over the 'compression' parameter.
-  float target_PSNR;      // if non-zero, specifies the minimal distortion to
-                          // try to achieve. Takes precedence over target_size.
-  int segments;           // maximum number of segments to use, in [1..4]
-  int sns_strength;       // Spatial Noise Shaping. 0=off, 100=maximum.
-  int filter_strength;    // range: [0 = off .. 100 = strongest]
-  int filter_sharpness;   // range: [0 = off .. 7 = least sharp]
-  int filter_type;        // filtering type: 0 = simple, 1 = strong (only used
-                          // if filter_strength > 0 or autofilter > 0)
-  int autofilter;         // Auto adjust filter's strength [0 = off, 1 = on]
-  int alpha_compression;  // Algorithm for encoding the alpha plane (0 = none,
-                          // 1 = compressed with WebP lossless). Default is 1.
-  int alpha_filtering;    // Predictive filtering method for alpha plane.
-                          //  0: none, 1: fast, 2: best. Default if 1.
-  int alpha_quality;      // Between 0 (smallest size) and 100 (lossless).
-                          // Default is 100.
-  int pass;               // number of entropy-analysis passes (in [1..10]).
-
-  int show_compressed;    // if true, export the compressed picture back.
-                          // In-loop filtering is not applied.
-  int preprocessing;      // preprocessing filter:
-                          // 0=none, 1=segment-smooth, 2=pseudo-random dithering
-  int partitions;         // log2(number of token partitions) in [0..3]. Default
-                          // is set to 0 for easier progressive decoding.
-  int partition_limit;    // quality degradation allowed to fit the 512k limit
-                          // on prediction modes coding (0: no degradation,
-                          // 100: maximum possible degradation).
-  int emulate_jpeg_size;  // If true, compression parameters will be remapped
-                          // to better match the expected output size from
-                          // JPEG compression. Generally, the output size will
-                          // be similar but the degradation will be lower.
-  int thread_level;       // If non-zero, try and use multi-threaded encoding.
-  int low_memory;         // If set, reduce memory usage (but increase CPU use).
-
-  int near_lossless;      // Near lossless encoding [0 = max loss .. 100 = off
-                          // (default)].
-  int exact;              // if non-zero, preserve the exact RGB values under
-                          // transparent area. Otherwise, discard this invisible
-                          // RGB information for better compression. The default
-                          // value is 0.
-
-  int use_delta_palette;  // reserved for future lossless feature
-  int use_sharp_yuv;      // if needed, use sharp (and slow) RGB->YUV conversion
-
-  uint32_t pad[2];        // padding for later use
-};
-
-// Enumerate some predefined settings for WebPConfig, depending on the type
-// of source picture. These presets are used when calling WebPConfigPreset().
-typedef enum WebPPreset {
-  WEBP_PRESET_DEFAULT = 0,  // default preset.
-  WEBP_PRESET_PICTURE,      // digital picture, like portrait, inner shot
-  WEBP_PRESET_PHOTO,        // outdoor photograph, with natural lighting
-  WEBP_PRESET_DRAWING,      // hand or line drawing, with high-contrast details
-  WEBP_PRESET_ICON,         // small-sized colorful images
-  WEBP_PRESET_TEXT          // text-like
-} WebPPreset;
-
-// Internal, version-checked, entry point
-WEBP_EXTERN int WebPConfigInitInternal(WebPConfig*, WebPPreset, float, int);
-
-// Should always be called, to initialize a fresh WebPConfig structure before
-// modification. Returns false in case of version mismatch. WebPConfigInit()
-// must have succeeded before using the 'config' object.
-// Note that the default values are lossless=0 and quality=75.
-static WEBP_INLINE int WebPConfigInit(WebPConfig* config) {
-  return WebPConfigInitInternal(config, WEBP_PRESET_DEFAULT, 75.f,
-                                WEBP_ENCODER_ABI_VERSION);
-}
-
-// This function will initialize the configuration according to a predefined
-// set of parameters (referred to by 'preset') and a given quality factor.
-// This function can be called as a replacement to WebPConfigInit(). Will
-// return false in case of error.
-static WEBP_INLINE int WebPConfigPreset(WebPConfig* config,
-                                        WebPPreset preset, float quality) {
-  return WebPConfigInitInternal(config, preset, quality,
-                                WEBP_ENCODER_ABI_VERSION);
-}
-
-// Activate the lossless compression mode with the desired efficiency level
-// between 0 (fastest, lowest compression) and 9 (slower, best compression).
-// A good default level is '6', providing a fair tradeoff between compression
-// speed and final compressed size.
-// This function will overwrite several fields from config: 'method', 'quality'
-// and 'lossless'. Returns false in case of parameter error.
-WEBP_EXTERN int WebPConfigLosslessPreset(WebPConfig* config, int level);
-
-// Returns true if 'config' is non-NULL and all configuration parameters are
-// within their valid ranges.
-WEBP_EXTERN int WebPValidateConfig(const WebPConfig* config);
-
-//------------------------------------------------------------------------------
-// Input / Output
-// Structure for storing auxiliary statistics.
-
-struct WebPAuxStats {
-  int coded_size;         // final size
-
-  float PSNR[5];          // peak-signal-to-noise ratio for Y/U/V/All/Alpha
-  int block_count[3];     // number of intra4/intra16/skipped macroblocks
-  int header_bytes[2];    // approximate number of bytes spent for header
-                          // and mode-partition #0
-  int residual_bytes[3][4];  // approximate number of bytes spent for
-                             // DC/AC/uv coefficients for each (0..3) segments.
-  int segment_size[4];    // number of macroblocks in each segments
-  int segment_quant[4];   // quantizer values for each segments
-  int segment_level[4];   // filtering strength for each segments [0..63]
-
-  int alpha_data_size;    // size of the transparency data
-  int layer_data_size;    // size of the enhancement layer data
-
-  // lossless encoder statistics
-  uint32_t lossless_features;  // bit0:predictor bit1:cross-color transform
-                               // bit2:subtract-green bit3:color indexing
-  int histogram_bits;          // number of precision bits of histogram
-  int transform_bits;          // precision bits for transform
-  int cache_bits;              // number of bits for color cache lookup
-  int palette_size;            // number of color in palette, if used
-  int lossless_size;           // final lossless size
-  int lossless_hdr_size;       // lossless header (transform, huffman etc) size
-  int lossless_data_size;      // lossless image data size
-
-  uint32_t pad[2];        // padding for later use
-};
-
-// Signature for output function. Should return true if writing was successful.
-// data/data_size is the segment of data to write, and 'picture' is for
-// reference (and so one can make use of picture->custom_ptr).
-typedef int (*WebPWriterFunction)(const uint8_t* data, size_t data_size,
-                                  const WebPPicture* picture);
-
-// WebPMemoryWrite: a special WebPWriterFunction that writes to memory using
-// the following WebPMemoryWriter object (to be set as a custom_ptr).
-struct WebPMemoryWriter {
-  uint8_t* mem;       // final buffer (of size 'max_size', larger than 'size').
-  size_t   size;      // final size
-  size_t   max_size;  // total capacity
-  uint32_t pad[1];    // padding for later use
-};
-
-// The following must be called first before any use.
-WEBP_EXTERN void WebPMemoryWriterInit(WebPMemoryWriter* writer);
-
-// The following must be called to deallocate writer->mem memory. The 'writer'
-// object itself is not deallocated.
-WEBP_EXTERN void WebPMemoryWriterClear(WebPMemoryWriter* writer);
-// The custom writer to be used with WebPMemoryWriter as custom_ptr. Upon
-// completion, writer.mem and writer.size will hold the coded data.
-// writer.mem must be freed by calling WebPMemoryWriterClear.
-WEBP_EXTERN int WebPMemoryWrite(const uint8_t* data, size_t data_size,
-                                const WebPPicture* picture);
-
-// Progress hook, called from time to time to report progress. It can return
-// false to request an abort of the encoding process, or true otherwise if
-// everything is OK.
-typedef int (*WebPProgressHook)(int percent, const WebPPicture* picture);
-
-// Color spaces.
-typedef enum WebPEncCSP {
-  // chroma sampling
-  WEBP_YUV420  = 0,        // 4:2:0
-  WEBP_YUV420A = 4,        // alpha channel variant
-  WEBP_CSP_UV_MASK = 3,    // bit-mask to get the UV sampling factors
-  WEBP_CSP_ALPHA_BIT = 4   // bit that is set if alpha is present
-} WebPEncCSP;
-
-// Encoding error conditions.
-typedef enum WebPEncodingError {
-  VP8_ENC_OK = 0,
-  VP8_ENC_ERROR_OUT_OF_MEMORY,            // memory error allocating objects
-  VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY,  // memory error while flushing bits
-  VP8_ENC_ERROR_NULL_PARAMETER,           // a pointer parameter is NULL
-  VP8_ENC_ERROR_INVALID_CONFIGURATION,    // configuration is invalid
-  VP8_ENC_ERROR_BAD_DIMENSION,            // picture has invalid width/height
-  VP8_ENC_ERROR_PARTITION0_OVERFLOW,      // partition is bigger than 512k
-  VP8_ENC_ERROR_PARTITION_OVERFLOW,       // partition is bigger than 16M
-  VP8_ENC_ERROR_BAD_WRITE,                // error while flushing bytes
-  VP8_ENC_ERROR_FILE_TOO_BIG,             // file is bigger than 4G
-  VP8_ENC_ERROR_USER_ABORT,               // abort request by user
-  VP8_ENC_ERROR_LAST                      // list terminator. always last.
-} WebPEncodingError;
-
-// maximum width/height allowed (inclusive), in pixels
-#define WEBP_MAX_DIMENSION 16383
-
-// Main exchange structure (input samples, output bytes, statistics)
-struct WebPPicture {
-  //   INPUT
-  //////////////
-  // Main flag for encoder selecting between ARGB or YUV input.
-  // It is recommended to use ARGB input (*argb, argb_stride) for lossless
-  // compression, and YUV input (*y, *u, *v, etc.) for lossy compression
-  // since these are the respective native colorspace for these formats.
-  int use_argb;
-
-  // YUV input (mostly used for input to lossy compression)
-  WebPEncCSP colorspace;     // colorspace: should be YUV420 for now (=Y'CbCr).
-  int width, height;         // dimensions (less or equal to WEBP_MAX_DIMENSION)
-  uint8_t *y, *u, *v;        // pointers to luma/chroma planes.
-  int y_stride, uv_stride;   // luma/chroma strides.
-  uint8_t* a;                // pointer to the alpha plane
-  int a_stride;              // stride of the alpha plane
-  uint32_t pad1[2];          // padding for later use
-
-  // ARGB input (mostly used for input to lossless compression)
-  uint32_t* argb;            // Pointer to argb (32 bit) plane.
-  int argb_stride;           // This is stride in pixels units, not bytes.
-  uint32_t pad2[3];          // padding for later use
-
-  //   OUTPUT
-  ///////////////
-  // Byte-emission hook, to store compressed bytes as they are ready.
-  WebPWriterFunction writer;  // can be NULL
-  void* custom_ptr;           // can be used by the writer.
-
-  // map for extra information (only for lossy compression mode)
-  int extra_info_type;    // 1: intra type, 2: segment, 3: quant
-                          // 4: intra-16 prediction mode,
-                          // 5: chroma prediction mode,
-                          // 6: bit cost, 7: distortion
-  uint8_t* extra_info;    // if not NULL, points to an array of size
-                          // ((width + 15) / 16) * ((height + 15) / 16) that
-                          // will be filled with a macroblock map, depending
-                          // on extra_info_type.
-
-  //   STATS AND REPORTS
-  ///////////////////////////
-  // Pointer to side statistics (updated only if not NULL)
-  WebPAuxStats* stats;
-
-  // Error code for the latest error encountered during encoding
-  WebPEncodingError error_code;
-
-  // If not NULL, report progress during encoding.
-  WebPProgressHook progress_hook;
-
-  void* user_data;        // this field is free to be set to any value and
-                          // used during callbacks (like progress-report e.g.).
-
-  uint32_t pad3[3];       // padding for later use
-
-  // Unused for now
-  uint8_t *pad4, *pad5;
-  uint32_t pad6[8];       // padding for later use
-
-  // PRIVATE FIELDS
-  ////////////////////
-  void* memory_;          // row chunk of memory for yuva planes
-  void* memory_argb_;     // and for argb too.
-  void* pad7[2];          // padding for later use
-};
-
-// Internal, version-checked, entry point
-WEBP_EXTERN int WebPPictureInitInternal(WebPPicture*, int);
-
-// Should always be called, to initialize the structure. Returns false in case
-// of version mismatch. WebPPictureInit() must have succeeded before using the
-// 'picture' object.
-// Note that, by default, use_argb is false and colorspace is WEBP_YUV420.
-static WEBP_INLINE int WebPPictureInit(WebPPicture* picture) {
-  return WebPPictureInitInternal(picture, WEBP_ENCODER_ABI_VERSION);
-}
-
-//------------------------------------------------------------------------------
-// WebPPicture utils
-
-// Convenience allocation / deallocation based on picture->width/height:
-// Allocate y/u/v buffers as per colorspace/width/height specification.
-// Note! This function will free the previous buffer if needed.
-// Returns false in case of memory error.
-WEBP_EXTERN int WebPPictureAlloc(WebPPicture* picture);
-
-// Release the memory allocated by WebPPictureAlloc() or WebPPictureImport*().
-// Note that this function does _not_ free the memory used by the 'picture'
-// object itself.
-// Besides memory (which is reclaimed) all other fields of 'picture' are
-// preserved.
-WEBP_EXTERN void WebPPictureFree(WebPPicture* picture);
-
-// Copy the pixels of *src into *dst, using WebPPictureAlloc. Upon return, *dst
-// will fully own the copied pixels (this is not a view). The 'dst' picture need
-// not be initialized as its content is overwritten.
-// Returns false in case of memory allocation error.
-WEBP_EXTERN int WebPPictureCopy(const WebPPicture* src, WebPPicture* dst);
-
-// Compute the single distortion for packed planes of samples.
-// 'src' will be compared to 'ref', and the raw distortion stored into
-// '*distortion'. The refined metric (log(MSE), log(1 - ssim),...' will be
-// stored in '*result'.
-// 'x_step' is the horizontal stride (in bytes) between samples.
-// 'src/ref_stride' is the byte distance between rows.
-// Returns false in case of error (bad parameter, memory allocation error, ...).
-WEBP_EXTERN int WebPPlaneDistortion(const uint8_t* src, size_t src_stride,
-                                    const uint8_t* ref, size_t ref_stride,
-                                    int width, int height,
-                                    size_t x_step,
-                                    int type,   // 0 = PSNR, 1 = SSIM, 2 = LSIM
-                                    float* distortion, float* result);
-
-// Compute PSNR, SSIM or LSIM distortion metric between two pictures. Results
-// are in dB, stored in result[] in the B/G/R/A/All order. The distortion is
-// always performed using ARGB samples. Hence if the input is YUV(A), the
-// picture will be internally converted to ARGB (just for the measurement).
-// Warning: this function is rather CPU-intensive.
-WEBP_EXTERN int WebPPictureDistortion(
-    const WebPPicture* src, const WebPPicture* ref,
-    int metric_type,           // 0 = PSNR, 1 = SSIM, 2 = LSIM
-    float result[5]);
-
-// self-crops a picture to the rectangle defined by top/left/width/height.
-// Returns false in case of memory allocation error, or if the rectangle is
-// outside of the source picture.
-// The rectangle for the view is defined by the top-left corner pixel
-// coordinates (left, top) as well as its width and height. This rectangle
-// must be fully be comprised inside the 'src' source picture. If the source
-// picture uses the YUV420 colorspace, the top and left coordinates will be
-// snapped to even values.
-WEBP_EXTERN int WebPPictureCrop(WebPPicture* picture,
-                                int left, int top, int width, int height);
-
-// Extracts a view from 'src' picture into 'dst'. The rectangle for the view
-// is defined by the top-left corner pixel coordinates (left, top) as well
-// as its width and height. This rectangle must be fully be comprised inside
-// the 'src' source picture. If the source picture uses the YUV420 colorspace,
-// the top and left coordinates will be snapped to even values.
-// Picture 'src' must out-live 'dst' picture. Self-extraction of view is allowed
-// ('src' equal to 'dst') as a mean of fast-cropping (but note that doing so,
-// the original dimension will be lost). Picture 'dst' need not be initialized
-// with WebPPictureInit() if it is different from 'src', since its content will
-// be overwritten.
-// Returns false in case of memory allocation error or invalid parameters.
-WEBP_EXTERN int WebPPictureView(const WebPPicture* src,
-                                int left, int top, int width, int height,
-                                WebPPicture* dst);
-
-// Returns true if the 'picture' is actually a view and therefore does
-// not own the memory for pixels.
-WEBP_EXTERN int WebPPictureIsView(const WebPPicture* picture);
-
-// Rescale a picture to new dimension width x height.
-// If either 'width' or 'height' (but not both) is 0 the corresponding
-// dimension will be calculated preserving the aspect ratio.
-// No gamma correction is applied.
-// Returns false in case of error (invalid parameter or insufficient memory).
-WEBP_EXTERN int WebPPictureRescale(WebPPicture* pic, int width, int height);
-
-// Colorspace conversion function to import RGB samples.
-// Previous buffer will be free'd, if any.
-// *rgb buffer should have a size of at least height * rgb_stride.
-// Returns false in case of memory error.
-WEBP_EXTERN int WebPPictureImportRGB(
-    WebPPicture* picture, const uint8_t* rgb, int rgb_stride);
-// Same, but for RGBA buffer.
-WEBP_EXTERN int WebPPictureImportRGBA(
-    WebPPicture* picture, const uint8_t* rgba, int rgba_stride);
-// Same, but for RGBA buffer. Imports the RGB direct from the 32-bit format
-// input buffer ignoring the alpha channel. Avoids needing to copy the data
-// to a temporary 24-bit RGB buffer to import the RGB only.
-WEBP_EXTERN int WebPPictureImportRGBX(
-    WebPPicture* picture, const uint8_t* rgbx, int rgbx_stride);
-
-// Variants of the above, but taking BGR(A|X) input.
-WEBP_EXTERN int WebPPictureImportBGR(
-    WebPPicture* picture, const uint8_t* bgr, int bgr_stride);
-WEBP_EXTERN int WebPPictureImportBGRA(
-    WebPPicture* picture, const uint8_t* bgra, int bgra_stride);
-WEBP_EXTERN int WebPPictureImportBGRX(
-    WebPPicture* picture, const uint8_t* bgrx, int bgrx_stride);
-
-// Converts picture->argb data to the YUV420A format. The 'colorspace'
-// parameter is deprecated and should be equal to WEBP_YUV420.
-// Upon return, picture->use_argb is set to false. The presence of real
-// non-opaque transparent values is detected, and 'colorspace' will be
-// adjusted accordingly. Note that this method is lossy.
-// Returns false in case of error.
-WEBP_EXTERN int WebPPictureARGBToYUVA(WebPPicture* picture,
-                                      WebPEncCSP /*colorspace = WEBP_YUV420*/);
-
-// Same as WebPPictureARGBToYUVA(), but the conversion is done using
-// pseudo-random dithering with a strength 'dithering' between
-// 0.0 (no dithering) and 1.0 (maximum dithering). This is useful
-// for photographic picture.
-WEBP_EXTERN int WebPPictureARGBToYUVADithered(
-    WebPPicture* picture, WebPEncCSP colorspace, float dithering);
-
-// Performs 'sharp' RGBA->YUVA420 downsampling and colorspace conversion.
-// Downsampling is handled with extra care in case of color clipping. This
-// method is roughly 2x slower than WebPPictureARGBToYUVA() but produces better
-// and sharper YUV representation.
-// Returns false in case of error.
-WEBP_EXTERN int WebPPictureSharpARGBToYUVA(WebPPicture* picture);
-// kept for backward compatibility:
-WEBP_EXTERN int WebPPictureSmartARGBToYUVA(WebPPicture* picture);
-
-// Converts picture->yuv to picture->argb and sets picture->use_argb to true.
-// The input format must be YUV_420 or YUV_420A. The conversion from YUV420 to
-// ARGB incurs a small loss too.
-// Note that the use of this colorspace is discouraged if one has access to the
-// raw ARGB samples, since using YUV420 is comparatively lossy.
-// Returns false in case of error.
-WEBP_EXTERN int WebPPictureYUVAToARGB(WebPPicture* picture);
-
-// Helper function: given a width x height plane of RGBA or YUV(A) samples
-// clean-up or smoothen the YUV or RGB samples under fully transparent area,
-// to help compressibility (no guarantee, though).
-WEBP_EXTERN void WebPCleanupTransparentArea(WebPPicture* picture);
-
-// Scan the picture 'picture' for the presence of non fully opaque alpha values.
-// Returns true in such case. Otherwise returns false (indicating that the
-// alpha plane can be ignored altogether e.g.).
-WEBP_EXTERN int WebPPictureHasTransparency(const WebPPicture* picture);
-
-// Remove the transparency information (if present) by blending the color with
-// the background color 'background_rgb' (specified as 24bit RGB triplet).
-// After this call, all alpha values are reset to 0xff.
-WEBP_EXTERN void WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb);
-
-//------------------------------------------------------------------------------
-// Main call
-
-// Main encoding call, after config and picture have been initialized.
-// 'picture' must be less than 16384x16384 in dimension (cf WEBP_MAX_DIMENSION),
-// and the 'config' object must be a valid one.
-// Returns false in case of error, true otherwise.
-// In case of error, picture->error_code is updated accordingly.
-// 'picture' can hold the source samples in both YUV(A) or ARGB input, depending
-// on the value of 'picture->use_argb'. It is highly recommended to use
-// the former for lossy encoding, and the latter for lossless encoding
-// (when config.lossless is true). Automatic conversion from one format to
-// another is provided but they both incur some loss.
-WEBP_EXTERN int WebPEncode(const WebPConfig* config, WebPPicture* picture);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_WEBP_ENCODE_H_
diff --git a/ios/Pods/libwebp/src/webp/format_constants.h b/ios/Pods/libwebp/src/webp/format_constants.h
deleted file mode 100644
index eca6981..0000000
--- a/ios/Pods/libwebp/src/webp/format_constants.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  Internal header for constants related to WebP file format.
-//
-// Author: Urvang (urvang@google.com)
-
-#ifndef WEBP_WEBP_FORMAT_CONSTANTS_H_
-#define WEBP_WEBP_FORMAT_CONSTANTS_H_
-
-// Create fourcc of the chunk from the chunk tag characters.
-#define MKFOURCC(a, b, c, d) ((a) | (b) << 8 | (c) << 16 | (uint32_t)(d) << 24)
-
-// VP8 related constants.
-#define VP8_SIGNATURE 0x9d012a              // Signature in VP8 data.
-#define VP8_MAX_PARTITION0_SIZE (1 << 19)   // max size of mode partition
-#define VP8_MAX_PARTITION_SIZE  (1 << 24)   // max size for token partition
-#define VP8_FRAME_HEADER_SIZE 10  // Size of the frame header within VP8 data.
-
-// VP8L related constants.
-#define VP8L_SIGNATURE_SIZE          1      // VP8L signature size.
-#define VP8L_MAGIC_BYTE              0x2f   // VP8L signature byte.
-#define VP8L_IMAGE_SIZE_BITS         14     // Number of bits used to store
-                                            // width and height.
-#define VP8L_VERSION_BITS            3      // 3 bits reserved for version.
-#define VP8L_VERSION                 0      // version 0
-#define VP8L_FRAME_HEADER_SIZE       5      // Size of the VP8L frame header.
-
-#define MAX_PALETTE_SIZE             256
-#define MAX_CACHE_BITS               11
-#define HUFFMAN_CODES_PER_META_CODE  5
-#define ARGB_BLACK                   0xff000000
-
-#define DEFAULT_CODE_LENGTH          8
-#define MAX_ALLOWED_CODE_LENGTH      15
-
-#define NUM_LITERAL_CODES            256
-#define NUM_LENGTH_CODES             24
-#define NUM_DISTANCE_CODES           40
-#define CODE_LENGTH_CODES            19
-
-#define MIN_HUFFMAN_BITS             2  // min number of Huffman bits
-#define MAX_HUFFMAN_BITS             9  // max number of Huffman bits
-
-#define TRANSFORM_PRESENT            1  // The bit to be written when next data
-                                        // to be read is a transform.
-#define NUM_TRANSFORMS               4  // Maximum number of allowed transform
-                                        // in a bitstream.
-typedef enum {
-  PREDICTOR_TRANSFORM      = 0,
-  CROSS_COLOR_TRANSFORM    = 1,
-  SUBTRACT_GREEN           = 2,
-  COLOR_INDEXING_TRANSFORM = 3
-} VP8LImageTransformType;
-
-// Alpha related constants.
-#define ALPHA_HEADER_LEN            1
-#define ALPHA_NO_COMPRESSION        0
-#define ALPHA_LOSSLESS_COMPRESSION  1
-#define ALPHA_PREPROCESSED_LEVELS   1
-
-// Mux related constants.
-#define TAG_SIZE           4     // Size of a chunk tag (e.g. "VP8L").
-#define CHUNK_SIZE_BYTES   4     // Size needed to store chunk's size.
-#define CHUNK_HEADER_SIZE  8     // Size of a chunk header.
-#define RIFF_HEADER_SIZE   12    // Size of the RIFF header ("RIFFnnnnWEBP").
-#define ANMF_CHUNK_SIZE    16    // Size of an ANMF chunk.
-#define ANIM_CHUNK_SIZE    6     // Size of an ANIM chunk.
-#define VP8X_CHUNK_SIZE    10    // Size of a VP8X chunk.
-
-#define MAX_CANVAS_SIZE     (1 << 24)     // 24-bit max for VP8X width/height.
-#define MAX_IMAGE_AREA      (1ULL << 32)  // 32-bit max for width x height.
-#define MAX_LOOP_COUNT      (1 << 16)     // maximum value for loop-count
-#define MAX_DURATION        (1 << 24)     // maximum duration
-#define MAX_POSITION_OFFSET (1 << 24)     // maximum frame x/y offset
-
-// Maximum chunk payload is such that adding the header and padding won't
-// overflow a uint32_t.
-#define MAX_CHUNK_PAYLOAD (~0U - CHUNK_HEADER_SIZE - 1)
-
-#endif  // WEBP_WEBP_FORMAT_CONSTANTS_H_
diff --git a/ios/Pods/libwebp/src/webp/mux.h b/ios/Pods/libwebp/src/webp/mux.h
deleted file mode 100644
index 66096a9..0000000
--- a/ios/Pods/libwebp/src/webp/mux.h
+++ /dev/null
@@ -1,530 +0,0 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  RIFF container manipulation and encoding for WebP images.
-//
-// Authors: Urvang (urvang@google.com)
-//          Vikas (vikasa@google.com)
-
-#ifndef WEBP_WEBP_MUX_H_
-#define WEBP_WEBP_MUX_H_
-
-#include "./mux_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define WEBP_MUX_ABI_VERSION 0x0108        // MAJOR(8b) + MINOR(8b)
-
-//------------------------------------------------------------------------------
-// Mux API
-//
-// This API allows manipulation of WebP container images containing features
-// like color profile, metadata, animation.
-//
-// Code Example#1: Create a WebPMux object with image data, color profile and
-// XMP metadata.
-/*
-  int copy_data = 0;
-  WebPMux* mux = WebPMuxNew();
-  // ... (Prepare image data).
-  WebPMuxSetImage(mux, &image, copy_data);
-  // ... (Prepare ICCP color profile data).
-  WebPMuxSetChunk(mux, "ICCP", &icc_profile, copy_data);
-  // ... (Prepare XMP metadata).
-  WebPMuxSetChunk(mux, "XMP ", &xmp, copy_data);
-  // Get data from mux in WebP RIFF format.
-  WebPMuxAssemble(mux, &output_data);
-  WebPMuxDelete(mux);
-  // ... (Consume output_data; e.g. write output_data.bytes to file).
-  WebPDataClear(&output_data);
-*/
-
-// Code Example#2: Get image and color profile data from a WebP file.
-/*
-  int copy_data = 0;
-  // ... (Read data from file).
-  WebPMux* mux = WebPMuxCreate(&data, copy_data);
-  WebPMuxGetFrame(mux, 1, &image);
-  // ... (Consume image; e.g. call WebPDecode() to decode the data).
-  WebPMuxGetChunk(mux, "ICCP", &icc_profile);
-  // ... (Consume icc_data).
-  WebPMuxDelete(mux);
-  free(data);
-*/
-
-// Note: forward declaring enumerations is not allowed in (strict) C and C++,
-// the types are left here for reference.
-// typedef enum WebPMuxError WebPMuxError;
-// typedef enum WebPChunkId WebPChunkId;
-typedef struct WebPMux WebPMux;   // main opaque object.
-typedef struct WebPMuxFrameInfo WebPMuxFrameInfo;
-typedef struct WebPMuxAnimParams WebPMuxAnimParams;
-typedef struct WebPAnimEncoderOptions WebPAnimEncoderOptions;
-
-// Error codes
-typedef enum WebPMuxError {
-  WEBP_MUX_OK                 =  1,
-  WEBP_MUX_NOT_FOUND          =  0,
-  WEBP_MUX_INVALID_ARGUMENT   = -1,
-  WEBP_MUX_BAD_DATA           = -2,
-  WEBP_MUX_MEMORY_ERROR       = -3,
-  WEBP_MUX_NOT_ENOUGH_DATA    = -4
-} WebPMuxError;
-
-// IDs for different types of chunks.
-typedef enum WebPChunkId {
-  WEBP_CHUNK_VP8X,        // VP8X
-  WEBP_CHUNK_ICCP,        // ICCP
-  WEBP_CHUNK_ANIM,        // ANIM
-  WEBP_CHUNK_ANMF,        // ANMF
-  WEBP_CHUNK_DEPRECATED,  // (deprecated from FRGM)
-  WEBP_CHUNK_ALPHA,       // ALPH
-  WEBP_CHUNK_IMAGE,       // VP8/VP8L
-  WEBP_CHUNK_EXIF,        // EXIF
-  WEBP_CHUNK_XMP,         // XMP
-  WEBP_CHUNK_UNKNOWN,     // Other chunks.
-  WEBP_CHUNK_NIL
-} WebPChunkId;
-
-//------------------------------------------------------------------------------
-
-// Returns the version number of the mux library, packed in hexadecimal using
-// 8bits for each of major/minor/revision. E.g: v2.5.7 is 0x020507.
-WEBP_EXTERN int WebPGetMuxVersion(void);
-
-//------------------------------------------------------------------------------
-// Life of a Mux object
-
-// Internal, version-checked, entry point
-WEBP_EXTERN WebPMux* WebPNewInternal(int);
-
-// Creates an empty mux object.
-// Returns:
-//   A pointer to the newly created empty mux object.
-//   Or NULL in case of memory error.
-static WEBP_INLINE WebPMux* WebPMuxNew(void) {
-  return WebPNewInternal(WEBP_MUX_ABI_VERSION);
-}
-
-// Deletes the mux object.
-// Parameters:
-//   mux - (in/out) object to be deleted
-WEBP_EXTERN void WebPMuxDelete(WebPMux* mux);
-
-//------------------------------------------------------------------------------
-// Mux creation.
-
-// Internal, version-checked, entry point
-WEBP_EXTERN WebPMux* WebPMuxCreateInternal(const WebPData*, int, int);
-
-// Creates a mux object from raw data given in WebP RIFF format.
-// Parameters:
-//   bitstream - (in) the bitstream data in WebP RIFF format
-//   copy_data - (in) value 1 indicates given data WILL be copied to the mux
-//               object and value 0 indicates data will NOT be copied.
-// Returns:
-//   A pointer to the mux object created from given data - on success.
-//   NULL - In case of invalid data or memory error.
-static WEBP_INLINE WebPMux* WebPMuxCreate(const WebPData* bitstream,
-                                          int copy_data) {
-  return WebPMuxCreateInternal(bitstream, copy_data, WEBP_MUX_ABI_VERSION);
-}
-
-//------------------------------------------------------------------------------
-// Non-image chunks.
-
-// Note: Only non-image related chunks should be managed through chunk APIs.
-// (Image related chunks are: "ANMF", "VP8 ", "VP8L" and "ALPH").
-// To add, get and delete images, use WebPMuxSetImage(), WebPMuxPushFrame(),
-// WebPMuxGetFrame() and WebPMuxDeleteFrame().
-
-// Adds a chunk with id 'fourcc' and data 'chunk_data' in the mux object.
-// Any existing chunk(s) with the same id will be removed.
-// Parameters:
-//   mux - (in/out) object to which the chunk is to be added
-//   fourcc - (in) a character array containing the fourcc of the given chunk;
-//                 e.g., "ICCP", "XMP ", "EXIF" etc.
-//   chunk_data - (in) the chunk data to be added
-//   copy_data - (in) value 1 indicates given data WILL be copied to the mux
-//               object and value 0 indicates data will NOT be copied.
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux, fourcc or chunk_data is NULL
-//                               or if fourcc corresponds to an image chunk.
-//   WEBP_MUX_MEMORY_ERROR - on memory allocation error.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxSetChunk(
-    WebPMux* mux, const char fourcc[4], const WebPData* chunk_data,
-    int copy_data);
-
-// Gets a reference to the data of the chunk with id 'fourcc' in the mux object.
-// The caller should NOT free the returned data.
-// Parameters:
-//   mux - (in) object from which the chunk data is to be fetched
-//   fourcc - (in) a character array containing the fourcc of the chunk;
-//                 e.g., "ICCP", "XMP ", "EXIF" etc.
-//   chunk_data - (out) returned chunk data
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux, fourcc or chunk_data is NULL
-//                               or if fourcc corresponds to an image chunk.
-//   WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given id.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxGetChunk(
-    const WebPMux* mux, const char fourcc[4], WebPData* chunk_data);
-
-// Deletes the chunk with the given 'fourcc' from the mux object.
-// Parameters:
-//   mux - (in/out) object from which the chunk is to be deleted
-//   fourcc - (in) a character array containing the fourcc of the chunk;
-//                 e.g., "ICCP", "XMP ", "EXIF" etc.
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux or fourcc is NULL
-//                               or if fourcc corresponds to an image chunk.
-//   WEBP_MUX_NOT_FOUND - If mux does not contain a chunk with the given fourcc.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxDeleteChunk(
-    WebPMux* mux, const char fourcc[4]);
-
-//------------------------------------------------------------------------------
-// Images.
-
-// Encapsulates data about a single frame.
-struct WebPMuxFrameInfo {
-  WebPData    bitstream;  // image data: can be a raw VP8/VP8L bitstream
-                          // or a single-image WebP file.
-  int         x_offset;   // x-offset of the frame.
-  int         y_offset;   // y-offset of the frame.
-  int         duration;   // duration of the frame (in milliseconds).
-
-  WebPChunkId id;         // frame type: should be one of WEBP_CHUNK_ANMF
-                          // or WEBP_CHUNK_IMAGE
-  WebPMuxAnimDispose dispose_method;  // Disposal method for the frame.
-  WebPMuxAnimBlend   blend_method;    // Blend operation for the frame.
-  uint32_t    pad[1];     // padding for later use
-};
-
-// Sets the (non-animated) image in the mux object.
-// Note: Any existing images (including frames) will be removed.
-// Parameters:
-//   mux - (in/out) object in which the image is to be set
-//   bitstream - (in) can be a raw VP8/VP8L bitstream or a single-image
-//               WebP file (non-animated)
-//   copy_data - (in) value 1 indicates given data WILL be copied to the mux
-//               object and value 0 indicates data will NOT be copied.
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux is NULL or bitstream is NULL.
-//   WEBP_MUX_MEMORY_ERROR - on memory allocation error.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxSetImage(
-    WebPMux* mux, const WebPData* bitstream, int copy_data);
-
-// Adds a frame at the end of the mux object.
-// Notes: (1) frame.id should be WEBP_CHUNK_ANMF
-//        (2) For setting a non-animated image, use WebPMuxSetImage() instead.
-//        (3) Type of frame being pushed must be same as the frames in mux.
-//        (4) As WebP only supports even offsets, any odd offset will be snapped
-//            to an even location using: offset &= ~1
-// Parameters:
-//   mux - (in/out) object to which the frame is to be added
-//   frame - (in) frame data.
-//   copy_data - (in) value 1 indicates given data WILL be copied to the mux
-//               object and value 0 indicates data will NOT be copied.
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux or frame is NULL
-//                               or if content of 'frame' is invalid.
-//   WEBP_MUX_MEMORY_ERROR - on memory allocation error.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxPushFrame(
-    WebPMux* mux, const WebPMuxFrameInfo* frame, int copy_data);
-
-// Gets the nth frame from the mux object.
-// The content of 'frame->bitstream' is allocated using malloc(), and NOT
-// owned by the 'mux' object. It MUST be deallocated by the caller by calling
-// WebPDataClear().
-// nth=0 has a special meaning - last position.
-// Parameters:
-//   mux - (in) object from which the info is to be fetched
-//   nth - (in) index of the frame in the mux object
-//   frame - (out) data of the returned frame
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux or frame is NULL.
-//   WEBP_MUX_NOT_FOUND - if there are less than nth frames in the mux object.
-//   WEBP_MUX_BAD_DATA - if nth frame chunk in mux is invalid.
-//   WEBP_MUX_MEMORY_ERROR - on memory allocation error.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxGetFrame(
-    const WebPMux* mux, uint32_t nth, WebPMuxFrameInfo* frame);
-
-// Deletes a frame from the mux object.
-// nth=0 has a special meaning - last position.
-// Parameters:
-//   mux - (in/out) object from which a frame is to be deleted
-//   nth - (in) The position from which the frame is to be deleted
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux is NULL.
-//   WEBP_MUX_NOT_FOUND - If there are less than nth frames in the mux object
-//                        before deletion.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxDeleteFrame(WebPMux* mux, uint32_t nth);
-
-//------------------------------------------------------------------------------
-// Animation.
-
-// Animation parameters.
-struct WebPMuxAnimParams {
-  uint32_t bgcolor;  // Background color of the canvas stored (in MSB order) as:
-                     // Bits 00 to 07: Alpha.
-                     // Bits 08 to 15: Red.
-                     // Bits 16 to 23: Green.
-                     // Bits 24 to 31: Blue.
-  int loop_count;    // Number of times to repeat the animation [0 = infinite].
-};
-
-// Sets the animation parameters in the mux object. Any existing ANIM chunks
-// will be removed.
-// Parameters:
-//   mux - (in/out) object in which ANIM chunk is to be set/added
-//   params - (in) animation parameters.
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux or params is NULL.
-//   WEBP_MUX_MEMORY_ERROR - on memory allocation error.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxSetAnimationParams(
-    WebPMux* mux, const WebPMuxAnimParams* params);
-
-// Gets the animation parameters from the mux object.
-// Parameters:
-//   mux - (in) object from which the animation parameters to be fetched
-//   params - (out) animation parameters extracted from the ANIM chunk
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux or params is NULL.
-//   WEBP_MUX_NOT_FOUND - if ANIM chunk is not present in mux object.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxGetAnimationParams(
-    const WebPMux* mux, WebPMuxAnimParams* params);
-
-//------------------------------------------------------------------------------
-// Misc Utilities.
-
-// Sets the canvas size for the mux object. The width and height can be
-// specified explicitly or left as zero (0, 0).
-// * When width and height are specified explicitly, then this frame bound is
-//   enforced during subsequent calls to WebPMuxAssemble() and an error is
-//   reported if any animated frame does not completely fit within the canvas.
-// * When unspecified (0, 0), the constructed canvas will get the frame bounds
-//   from the bounding-box over all frames after calling WebPMuxAssemble().
-// Parameters:
-//   mux - (in) object to which the canvas size is to be set
-//   width - (in) canvas width
-//   height - (in) canvas height
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux is NULL; or
-//                               width or height are invalid or out of bounds
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxSetCanvasSize(WebPMux* mux,
-                                              int width, int height);
-
-// Gets the canvas size from the mux object.
-// Note: This method assumes that the VP8X chunk, if present, is up-to-date.
-// That is, the mux object hasn't been modified since the last call to
-// WebPMuxAssemble() or WebPMuxCreate().
-// Parameters:
-//   mux - (in) object from which the canvas size is to be fetched
-//   width - (out) canvas width
-//   height - (out) canvas height
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux, width or height is NULL.
-//   WEBP_MUX_BAD_DATA - if VP8X/VP8/VP8L chunk or canvas size is invalid.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxGetCanvasSize(const WebPMux* mux,
-                                              int* width, int* height);
-
-// Gets the feature flags from the mux object.
-// Note: This method assumes that the VP8X chunk, if present, is up-to-date.
-// That is, the mux object hasn't been modified since the last call to
-// WebPMuxAssemble() or WebPMuxCreate().
-// Parameters:
-//   mux - (in) object from which the features are to be fetched
-//   flags - (out) the flags specifying which features are present in the
-//           mux object. This will be an OR of various flag values.
-//           Enum 'WebPFeatureFlags' can be used to test individual flag values.
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux or flags is NULL.
-//   WEBP_MUX_BAD_DATA - if VP8X/VP8/VP8L chunk or canvas size is invalid.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxGetFeatures(const WebPMux* mux,
-                                            uint32_t* flags);
-
-// Gets number of chunks with the given 'id' in the mux object.
-// Parameters:
-//   mux - (in) object from which the info is to be fetched
-//   id - (in) chunk id specifying the type of chunk
-//   num_elements - (out) number of chunks with the given chunk id
-// Returns:
-//   WEBP_MUX_INVALID_ARGUMENT - if mux, or num_elements is NULL.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
-                                          WebPChunkId id, int* num_elements);
-
-// Assembles all chunks in WebP RIFF format and returns in 'assembled_data'.
-// This function also validates the mux object.
-// Note: The content of 'assembled_data' will be ignored and overwritten.
-// Also, the content of 'assembled_data' is allocated using malloc(), and NOT
-// owned by the 'mux' object. It MUST be deallocated by the caller by calling
-// WebPDataClear(). It's always safe to call WebPDataClear() upon return,
-// even in case of error.
-// Parameters:
-//   mux - (in/out) object whose chunks are to be assembled
-//   assembled_data - (out) assembled WebP data
-// Returns:
-//   WEBP_MUX_BAD_DATA - if mux object is invalid.
-//   WEBP_MUX_INVALID_ARGUMENT - if mux or assembled_data is NULL.
-//   WEBP_MUX_MEMORY_ERROR - on memory allocation error.
-//   WEBP_MUX_OK - on success.
-WEBP_EXTERN WebPMuxError WebPMuxAssemble(WebPMux* mux,
-                                         WebPData* assembled_data);
-
-//------------------------------------------------------------------------------
-// WebPAnimEncoder API
-//
-// This API allows encoding (possibly) animated WebP images.
-//
-// Code Example:
-/*
-  WebPAnimEncoderOptions enc_options;
-  WebPAnimEncoderOptionsInit(&enc_options);
-  // Tune 'enc_options' as needed.
-  WebPAnimEncoder* enc = WebPAnimEncoderNew(width, height, &enc_options);
-  while(<there are more frames>) {
-    WebPConfig config;
-    WebPConfigInit(&config);
-    // Tune 'config' as needed.
-    WebPAnimEncoderAdd(enc, frame, timestamp_ms, &config);
-  }
-  WebPAnimEncoderAdd(enc, NULL, timestamp_ms, NULL);
-  WebPAnimEncoderAssemble(enc, webp_data);
-  WebPAnimEncoderDelete(enc);
-  // Write the 'webp_data' to a file, or re-mux it further.
-*/
-
-typedef struct WebPAnimEncoder WebPAnimEncoder;  // Main opaque object.
-
-// Forward declarations. Defined in encode.h.
-struct WebPPicture;
-struct WebPConfig;
-
-// Global options.
-struct WebPAnimEncoderOptions {
-  WebPMuxAnimParams anim_params;  // Animation parameters.
-  int minimize_size;    // If true, minimize the output size (slow). Implicitly
-                        // disables key-frame insertion.
-  int kmin;
-  int kmax;             // Minimum and maximum distance between consecutive key
-                        // frames in the output. The library may insert some key
-                        // frames as needed to satisfy this criteria.
-                        // Note that these conditions should hold: kmax > kmin
-                        // and kmin >= kmax / 2 + 1. Also, if kmax <= 0, then
-                        // key-frame insertion is disabled; and if kmax == 1,
-                        // then all frames will be key-frames (kmin value does
-                        // not matter for these special cases).
-  int allow_mixed;      // If true, use mixed compression mode; may choose
-                        // either lossy and lossless for each frame.
-  int verbose;          // If true, print info and warning messages to stderr.
-
-  uint32_t padding[4];  // Padding for later use.
-};
-
-// Internal, version-checked, entry point.
-WEBP_EXTERN int WebPAnimEncoderOptionsInitInternal(
-    WebPAnimEncoderOptions*, int);
-
-// Should always be called, to initialize a fresh WebPAnimEncoderOptions
-// structure before modification. Returns false in case of version mismatch.
-// WebPAnimEncoderOptionsInit() must have succeeded before using the
-// 'enc_options' object.
-static WEBP_INLINE int WebPAnimEncoderOptionsInit(
-    WebPAnimEncoderOptions* enc_options) {
-  return WebPAnimEncoderOptionsInitInternal(enc_options, WEBP_MUX_ABI_VERSION);
-}
-
-// Internal, version-checked, entry point.
-WEBP_EXTERN WebPAnimEncoder* WebPAnimEncoderNewInternal(
-    int, int, const WebPAnimEncoderOptions*, int);
-
-// Creates and initializes a WebPAnimEncoder object.
-// Parameters:
-//   width/height - (in) canvas width and height of the animation.
-//   enc_options - (in) encoding options; can be passed NULL to pick
-//                      reasonable defaults.
-// Returns:
-//   A pointer to the newly created WebPAnimEncoder object.
-//   Or NULL in case of memory error.
-static WEBP_INLINE WebPAnimEncoder* WebPAnimEncoderNew(
-    int width, int height, const WebPAnimEncoderOptions* enc_options) {
-  return WebPAnimEncoderNewInternal(width, height, enc_options,
-                                    WEBP_MUX_ABI_VERSION);
-}
-
-// Optimize the given frame for WebP, encode it and add it to the
-// WebPAnimEncoder object.
-// The last call to 'WebPAnimEncoderAdd' should be with frame = NULL, which
-// indicates that no more frames are to be added. This call is also used to
-// determine the duration of the last frame.
-// Parameters:
-//   enc - (in/out) object to which the frame is to be added.
-//   frame - (in/out) frame data in ARGB or YUV(A) format. If it is in YUV(A)
-//           format, it will be converted to ARGB, which incurs a small loss.
-//   timestamp_ms - (in) timestamp of this frame in milliseconds.
-//                       Duration of a frame would be calculated as
-//                       "timestamp of next frame - timestamp of this frame".
-//                       Hence, timestamps should be in non-decreasing order.
-//   config - (in) encoding options; can be passed NULL to pick
-//            reasonable defaults.
-// Returns:
-//   On error, returns false and frame->error_code is set appropriately.
-//   Otherwise, returns true.
-WEBP_EXTERN int WebPAnimEncoderAdd(
-    WebPAnimEncoder* enc, struct WebPPicture* frame, int timestamp_ms,
-    const struct WebPConfig* config);
-
-// Assemble all frames added so far into a WebP bitstream.
-// This call should be preceded by  a call to 'WebPAnimEncoderAdd' with
-// frame = NULL; if not, the duration of the last frame will be internally
-// estimated.
-// Parameters:
-//   enc - (in/out) object from which the frames are to be assembled.
-//   webp_data - (out) generated WebP bitstream.
-// Returns:
-//   True on success.
-WEBP_EXTERN int WebPAnimEncoderAssemble(WebPAnimEncoder* enc,
-                                        WebPData* webp_data);
-
-// Get error string corresponding to the most recent call using 'enc'. The
-// returned string is owned by 'enc' and is valid only until the next call to
-// WebPAnimEncoderAdd() or WebPAnimEncoderAssemble() or WebPAnimEncoderDelete().
-// Parameters:
-//   enc - (in/out) object from which the error string is to be fetched.
-// Returns:
-//   NULL if 'enc' is NULL. Otherwise, returns the error string if the last call
-//   to 'enc' had an error, or an empty string if the last call was a success.
-WEBP_EXTERN const char* WebPAnimEncoderGetError(WebPAnimEncoder* enc);
-
-// Deletes the WebPAnimEncoder object.
-// Parameters:
-//   enc - (in/out) object to be deleted
-WEBP_EXTERN void WebPAnimEncoderDelete(WebPAnimEncoder* enc);
-
-//------------------------------------------------------------------------------
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_WEBP_MUX_H_
diff --git a/ios/Pods/libwebp/src/webp/mux_types.h b/ios/Pods/libwebp/src/webp/mux_types.h
deleted file mode 100644
index ceea77d..0000000
--- a/ios/Pods/libwebp/src/webp/mux_types.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2012 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-// Data-types common to the mux and demux libraries.
-//
-// Author: Urvang (urvang@google.com)
-
-#ifndef WEBP_WEBP_MUX_TYPES_H_
-#define WEBP_WEBP_MUX_TYPES_H_
-
-#include <stdlib.h>  // free()
-#include <string.h>  // memset()
-#include "./types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Note: forward declaring enumerations is not allowed in (strict) C and C++,
-// the types are left here for reference.
-// typedef enum WebPFeatureFlags WebPFeatureFlags;
-// typedef enum WebPMuxAnimDispose WebPMuxAnimDispose;
-// typedef enum WebPMuxAnimBlend WebPMuxAnimBlend;
-typedef struct WebPData WebPData;
-
-// VP8X Feature Flags.
-typedef enum WebPFeatureFlags {
-  ANIMATION_FLAG  = 0x00000002,
-  XMP_FLAG        = 0x00000004,
-  EXIF_FLAG       = 0x00000008,
-  ALPHA_FLAG      = 0x00000010,
-  ICCP_FLAG       = 0x00000020,
-
-  ALL_VALID_FLAGS = 0x0000003e
-} WebPFeatureFlags;
-
-// Dispose method (animation only). Indicates how the area used by the current
-// frame is to be treated before rendering the next frame on the canvas.
-typedef enum WebPMuxAnimDispose {
-  WEBP_MUX_DISPOSE_NONE,       // Do not dispose.
-  WEBP_MUX_DISPOSE_BACKGROUND  // Dispose to background color.
-} WebPMuxAnimDispose;
-
-// Blend operation (animation only). Indicates how transparent pixels of the
-// current frame are blended with those of the previous canvas.
-typedef enum WebPMuxAnimBlend {
-  WEBP_MUX_BLEND,              // Blend.
-  WEBP_MUX_NO_BLEND            // Do not blend.
-} WebPMuxAnimBlend;
-
-// Data type used to describe 'raw' data, e.g., chunk data
-// (ICC profile, metadata) and WebP compressed image data.
-struct WebPData {
-  const uint8_t* bytes;
-  size_t size;
-};
-
-// Initializes the contents of the 'webp_data' object with default values.
-static WEBP_INLINE void WebPDataInit(WebPData* webp_data) {
-  if (webp_data != NULL) {
-    memset(webp_data, 0, sizeof(*webp_data));
-  }
-}
-
-// Clears the contents of the 'webp_data' object by calling free(). Does not
-// deallocate the object itself.
-static WEBP_INLINE void WebPDataClear(WebPData* webp_data) {
-  if (webp_data != NULL) {
-    free((void*)webp_data->bytes);
-    WebPDataInit(webp_data);
-  }
-}
-
-// Allocates necessary storage for 'dst' and copies the contents of 'src'.
-// Returns true on success.
-static WEBP_INLINE int WebPDataCopy(const WebPData* src, WebPData* dst) {
-  if (src == NULL || dst == NULL) return 0;
-  WebPDataInit(dst);
-  if (src->bytes != NULL && src->size != 0) {
-    dst->bytes = (uint8_t*)malloc(src->size);
-    if (dst->bytes == NULL) return 0;
-    memcpy((void*)dst->bytes, src->bytes, src->size);
-    dst->size = src->size;
-  }
-  return 1;
-}
-
-#ifdef __cplusplus
-}    // extern "C"
-#endif
-
-#endif  // WEBP_WEBP_MUX_TYPES_H_
diff --git a/ios/Pods/libwebp/src/webp/types.h b/ios/Pods/libwebp/src/webp/types.h
deleted file mode 100644
index 0ce2622..0000000
--- a/ios/Pods/libwebp/src/webp/types.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-//
-// Use of this source code is governed by a BSD-style license
-// that can be found in the COPYING file in the root of the source
-// tree. An additional intellectual property rights grant can be found
-// in the file PATENTS. All contributing project authors may
-// be found in the AUTHORS file in the root of the source tree.
-// -----------------------------------------------------------------------------
-//
-//  Common types
-//
-// Author: Skal (pascal.massimino@gmail.com)
-
-#ifndef WEBP_WEBP_TYPES_H_
-#define WEBP_WEBP_TYPES_H_
-
-#include <stddef.h>  // for size_t
-
-#ifndef _MSC_VER
-#include <inttypes.h>
-#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \
-    (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L)
-#define WEBP_INLINE inline
-#else
-#define WEBP_INLINE
-#endif
-#else
-typedef signed   char int8_t;
-typedef unsigned char uint8_t;
-typedef signed   short int16_t;
-typedef unsigned short uint16_t;
-typedef signed   int int32_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long int uint64_t;
-typedef long long int int64_t;
-#define WEBP_INLINE __forceinline
-#endif  /* _MSC_VER */
-
-#ifndef WEBP_EXTERN
-// This explicitly marks library functions and allows for changing the
-// signature for e.g., Windows DLL builds.
-# if defined(__GNUC__) && __GNUC__ >= 4
-#  define WEBP_EXTERN extern __attribute__ ((visibility ("default")))
-# else
-#  define WEBP_EXTERN extern
-# endif  /* __GNUC__ >= 4 */
-#endif  /* WEBP_EXTERN */
-
-// Macro to check ABI compatibility (same major revision number)
-#define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8))
-
-#endif  // WEBP_WEBP_TYPES_H_